summaryrefslogtreecommitdiff
path: root/test/parse-bjc.in
blob: f5d7565b924dd107ca1a71c818e6fdde5ef0752e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!@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",
	      "(v", "VARIABLE",
	      "(w", "VARIABLE",
	      "(A", "GRAPHICS",
	      "\\", 2,
	      "\$", 2,
	      "(\\", "VARIABLE",
	      "(C", "VARIABLE",
	      "(F", "GRAPHICS",
	      "(I", "VARIABLE",
	      "(J", "VARIABLE",
	      "(L", "VARIABLE",
	      "(P", "VARIABLE",
	      "(T", "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) = "";
    }
}