#!/bin/perl get_captions ("./", "keyword.bas"); ####--------------------------------------------------------------------------- sub get_captions { my ($path, $file) = @_; $debug = 0; if (!-e "$path/$file") { print "$path/$file not found\n"; return; } open KEYWORDS, "$path/$file"; binmode KEYWORDS; open KEYWORDXML, ">$path/$file.xml"; #### read the first 4 bytes: number of records read (KEYWORDS, $buffer, 4); $nrecs = unpack ('L', $buffer); if ($debug) { print "number of images in file: $nrecs\n"; } print KEYWORDXML "\n"; for ($i = 0; $i < $nrecs; $i++) { $filename = ''; $filenamelen = 0; while (read (KEYWORDS, $buffer, 1)) { $byteval = unpack ('c', $buffer); if ($debug) { print "$buffer ($byteval)\n"; } if ($byteval == 0) { last; } $filenamelen++; $filename .= $buffer; } $skipbytes = 259 - $filenamelen; read (KEYWORDS, $buffer, 259 - $filenamelen); if ($debug) { print "filenamelen = $filenamelen, skipbytes = $skipbytes\n"; } read (KEYWORDS, $buffer, 1); #$bytecount = unpack ('n', $buffer); $bytecount = unpack ('C', $buffer); if ($bytecount == 255) { if ($debug) { print "caption is larger than 255 bytes; reading 2 more...\n"; } read (KEYWORDS, $buffer, 2); $bytecount = unpack ('S', $buffer); } if ($debug) { print "caption is $bytecount bytes...\n"; } read (KEYWORDS, $caption, $bytecount); $caption{$filename} = $caption; print "$filename: $caption\n"; $filesafe = $filename; $filesafe =~ s#&#&#gso; $filesafe =~ s#"#"#gso; $filesafe =~ s#>#>#gso; $filesafe =~ s#<#<#gso; $capsafe = $caption; $capsafe =~ s#&#&#gso; $capsafe =~ s#"#"#gso; $capsafe =~ s#>#>#gso; $capsafe =~ s#<#<#gso; print KEYWORDXML qq( \n); } print KEYWORDXML "\n"; close (KEYWORDS); close (KEYWORDXML); return; }