X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=evolis-printer.pl;h=23f431af13acccc1cc9a6d081752ac0eb988a8b8;hb=f3c09fd7ef64c13af90056e03ae868f1e106ff14;hp=70d13077f65d65f88b73da7ebda77f2df5fc4f58;hpb=12ad4a741a843510082b2014065b46ce6a60b870;p=Printer-EVOLIS.git diff --git a/evolis-printer.pl b/evolis-printer.pl index 70d1307..23f431a 100755 --- a/evolis-printer.pl +++ b/evolis-printer.pl @@ -17,8 +17,13 @@ local $/ = "\r"; my $page = 1; +my $name = $ARGV[0] || 'page'; + +sub save_pbm; + while(<>) { - die "no escape at beginning" unless s/^\x1B//; + die "no escape at beginning",dump($_) unless s/^(\x00*)\x1B//; + warn "WARNING: ", length($1), " extra nulls before ESC\n" if $1; chomp; my @a = split(/;/,$_); my $c = shift @a; @@ -34,26 +39,57 @@ while(<>) { } elsif ( $c eq 'Pr' ) { print "improve $a[0]\n"; # FIXME windows sends it, cups doesn't - } elsif ( $c eq 'Dbc' ) { - my ( $color, $line, $len, $data ) = @a; - while ( $len > length($data) ) { - warn "# slurp more ",length($data), " < $len\n"; - $data .= <>; + } elsif ( $c eq 'Sv' ) { + print "even page on duplex printing\n"; + } elsif ( $c eq 'Db' ) { # XXX not in cups + my ( $color, $two, $data ) = @a; + $two eq '2' or die '2'; + my $path = "$name-Db-$color-$page.pbm"; + $page++; + save_pbm $path, 648, 1015, $data; # FIXME 1016? + } elsif ( $c eq 'Dbc' ) { # XXX not in cups + my ( $color, $line, $len, $comp ) = @a; + while ( $len > length($comp) ) { + warn "# slurp more ",length($comp), " < $len\n"; + $comp .= <>; + } + $len == length $comp or warn "wrong length $len != ", length $comp; + + my $w = 648 / 2; + +=for non-working + + my $data; + + my $i = 0; + while ( $i < length $comp ) { + my $len = ord(substr($comp,$i,4)); + $i += 1; + warn "$i comp $len\n"; + $data .= substr($comp,$i,$len); + $data .= "\x00" x ( $w - $len ); + $i += $len; } - $len == length $data or die "wrong length $len != ", length $data; - my $path = "page-$page-$color.pbm"; - open(my $pbm, '>', $path); +=cut + + my $data = $comp; - my $w = 1016; - my $h = 648; + my $path = "$name-Dbc-$color-$page.pbm"; + $page++; - $h = int( $len * 8 / $w ); + my $h = int( $len / 128 ); + save_pbm $path, $w, $h, $data; - print $pbm "P4\n$w $h\n", $data; - close($pbm); - print "printed $path $w * $h size ", -s $path, "\n"; } else { warn "UNKNOWN: $c ", dump(@a); } } + +sub save_pbm { + my ( $path, $w, $h, $data ) = @_; + open(my $pbm, '>', $path); + print $pbm "P4\n$w $h\n", $data; + close($pbm); + print "saved $path $w * $h size ", -s $path, "\n"; +}