diff options
Diffstat (limited to 'test/parse-bjc')
-rwxr-xr-x | test/parse-bjc | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/test/parse-bjc b/test/parse-bjc new file mode 100755 index 0000000..48ce80c --- /dev/null +++ b/test/parse-bjc @@ -0,0 +1,145 @@ +#!/usr/bin/perl + +while (<>) { + $stuff .= $_; +} + +$OFFS=$ENV{"OFFS"}; +$GRX=$ENV{"GRX"}; + +%seqtable = ( "@", 0, + "\x0d", 0, + "[K", 4, + "(a", "VARIABLE", + "(b", "VARIABLE", + "(c", "VARIABLE", + "(d", "VARIABLE", + "(e", "GRAPHICS", + "(l", "VARIABLE", + "(m", "VARIABLE", + "(p", "VARIABLE", + "(q", "VARIABLE", + "(r", "VARIABLE", + "(t", "VARIABLE", + "(A", "GRAPHICS", + "\\", 2, + "\$", 2, + "(\\", "VARIABLE", + "(C", "VARIABLE", + ".", "SPECIAL", + "i", "SPECIAL1" + ); + +$esc = "\033"; + +$skipcount = 0; +$curpos = 0; +$verbose = 1; + +while ($stuff ne "") { + if ($stuff=~ s/^(BJLSTART.+BJLEND?)//sm) { + + printf "\n$1"; + $curpos+= length($1); + + } elsif (substr($stuff, 0, 1) eq "\xa") { + + print "<a"; + $curpos++; + substr($stuff, 0, 1) = ""; + + } elsif (substr($stuff, 0, 1) eq "\xd") { + + print "<d" if ($GRX); + $curpos++; + substr($stuff, 0, 1) = ""; + + } elsif (substr($stuff, 0, 1) eq "$esc") { + + $found = 0; + foreach $key (keys %seqtable) { + if (substr($stuff, 1, length $key) eq $key) { + $skipchars = $seqtable{$key}; + if ($skipchars eq "GRAPHICS") { + if ($GRX) { + print "\n"; + printf "%08x ", $curpos if ($OFFS); + print "1b "; + } + $startoff = 0; + $lchar = substr($stuff, (length $key) + 1, 1); + $nlchar = unpack("C", $lchar); + $hchar = substr($stuff, (length $key) + 2, 1); + $nhchar = unpack("C", $hchar); + $skipchars = ($nhchar * 256) + $nlchar; + $startoff = 2; + + if ($GRX) { + for ($i = 0; + $i < $skipchars + (length $key) + $startoff; + $i++) { + $char = substr($stuff, $i + 1, 1); + $nchar = unpack("C", $char); + if ($i < 2 && $nchar >= 32 && $nchar < 127) { + print "$char "; + } elsif ($i==4 && $nchar >= 32 && $nchar < 127) { + print "$char$char "; + } else { + printf "%02x ", unpack("C", $char); + } + } + } + $found = 1; + } else { + print "\n"; + printf "%08x ", $curpos if ($OFFS); + print "1b "; + $startoff = 0; + if ($skipchars eq "VARIABLE") { + $lchar = substr($stuff, (length $key) + 1, 1); + $nlchar = unpack("C", $lchar); + $hchar = substr($stuff, (length $key) + 2, 1); + $nhchar = unpack("C", $hchar); + $skipchars = ($nhchar * 256) + $nlchar; + $startoff = 2; + } + for ($i = 0; + $i < $skipchars + (length $key) + $startoff; + $i++) { + $char = substr($stuff, $i + 1, 1); + $nchar = unpack("C", $char); + if ($i < 2 && $nchar >= 32 && $nchar < 127) { + print "$char "; + } else { + printf "%02x ", unpack("C", $char); + } + } + $found = 1; + } + $bytes = length($key) + 1 + $skipchars + $startoff; + last; + } + } + if (! $found) { + print "\n"; + printf "%08x ", $curpos if ($OFFS); + print "1b "; + substr($stuff, 0, 1) = ""; + $curpos += 1; + } elsif ($found == 1) { + substr($stuff, 0, $bytes) = ""; + $curpos += $bytes; + } else { + } + } else { + $char = substr($stuff, 0, 1); + $nchar = unpack("C", $char); + if ($nchar >= 32 && $nchar < 127) { + print "*$char "; + } else { + printf "*%02x ", unpack("C", $char); + } + $curpos++; + substr($stuff, 0, 1) = ""; + } +} |