summaryrefslogtreecommitdiff
path: root/test/parse-bjc
diff options
context:
space:
mode:
Diffstat (limited to 'test/parse-bjc')
-rwxr-xr-xtest/parse-bjc145
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) = "";
+ }
+}