chiark / gitweb /
read binary
authorian <ian>
Tue, 14 Jun 2005 19:43:07 +0000 (19:43 +0000)
committerian <ian>
Tue, 14 Jun 2005 19:43:07 +0000 (19:43 +0000)
layout/plan-to-gui-data

index 734a44f72a750f70f8adb5d4c6637106187502a0..31fd5eefa6bbe9ab899455dab365c4ef7c895623 100755 (executable)
@@ -21,17 +21,18 @@ sub seteq ($$$) {
 
 #---------- 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*\#/;
     }
 }
 
@@ -142,10 +143,12 @@ sub xpm_sizes () {
     }
 }
 
-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 ----------
@@ -169,17 +172,22 @@ die "$pp ?" if $xp->{X}{Max} >= 642;
 }
 
 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','','?');