#---------- word-reading (for pbm) ----------
+our ($txtrdbuf);
+
sub w () {
- our ($lb);
- $lb='' if !defined $lb;
+ $txtrdbuf='' if !defined $txtrdbuf;
for (;;) {
- if ($lb =~ s/^\s*(\S+)\s*//) {
+ if ($txtrdbuf =~ s/^\s*(\S+)\s?//) {
#print STDERR "w>$1<\n";
return $1;
}
- $!=0; $lb=<>;
- die $! unless length $lb;
- $lb='' if $lb =~ m/^\s*\#/;
+ $!=0; $txtrdbuf=<>;
+ die $! unless length $txtrdbuf;
+ $txtrdbuf='' if $txtrdbuf =~ m/^\s*\#/;
}
}
}
}
-w() eq 'P3' or die;
+w() eq 'P6' or die;
($sz{X},$sz{Y})=wns(1,32767,2);
wn(1,65535)==255 or die;
+die if length $txtrdbuf;
+
xpm_sizes();
#---------- read input pixels ----------
}
sub in_pixel () {
- my ($movfeat,%t,$xpmname,$segname,$datum,$k);
- my ($datum_r,$datum_g,$datum_b, $angstr,$bitno);
+ my ($pbytes);
+ $!=0; read(ARGV, $pbytes, 3) == 3 or die $!;
+ if ($pbytes eq "\xff\xff\xff") {
+ xpmdata_pixel('background','','-');
+ return;
+ }
+ my ($movfeat,%t,$xpmname,$segname,$datum,$k,$angstr,$bitno);
$pp= "$p{X} $p{Y}";
- ($datum_r,$datum_g,$datum_b)= wns(0,255,3);
- $datum= $datum_r + ($datum_g<<8) + ($datum_b<<16);
+ $datum= unpack 'V', $pbytes."\0";
foreach $k (keys %datum_numbits) {
$t{$k}= ($datum >> $datum_basebit{$k}) &
((1 << $datum_numbits{$k}) - 1);
}
- if ($datum == 0xffffffff or $t{Edge}) {
- xpmdata_pixel('background','','-');
+#printf STDERR "%s 0x%08lx 0x%x\n",$pp,$datum,$t{Segnum};
+ if ($t{Edge}) {
+ xpmdata_pixel('background','','+');
return;
} elsif (!$t{Segnum}) {
xpmdata_pixel('background','','?');