X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=evolis-printer.pl;h=697f01db21d948ae3cc2c416ae1dc14e7d2bb0a8;hb=ad4f4c8eef951d2f57fe65997b68ed0be4205ce9;hp=896aa99e984039b64fb3f343b1ff89f3dc051ea1;hpb=cd4aef4443e01d708eed24bdaecf7f9f737447a1;p=Printer-EVOLIS.git diff --git a/evolis-printer.pl b/evolis-printer.pl index 896aa99..697f01d 100755 --- a/evolis-printer.pl +++ b/evolis-printer.pl @@ -17,14 +17,14 @@ local $/ = "\r"; my $page = 1; -while(<>) { - s/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0// && warn "FIXME: string 15 null bytes"; +sub save_pbm; - die "no escape at beginning",dump($_) unless s/^\x1B//; +while(<>) { + 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; - warn "# $c ",dump(@a); if ( $c eq 'Pmi' ) { my $f = $a[0] || die 'missing feeder'; print "feeder $f | $feeder->{$f}\n"; @@ -37,27 +37,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 = "page-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 $data or warn "wrong length $len != ", length $data; + $len == length $comp or warn "wrong length $len != ", length $comp; - my $path = "page-$page-$color.pbm"; - open(my $pbm, '>', $path); + my $w = 648 / 2; - my ( $w, $h ) = ( 646, 1081 ); # from driver -# ( $w, $h ) = ( 636, 994 ); # from test card +=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; + } - $h = int( $len * 8 / $w ); +=cut - print $pbm "P4\n$w $h\n", $data; - close($pbm); - print "$path $w * $h size ", -s $path, "\n"; + my $data = $comp; + + my $path = "page-Dbc-$color-$page.pbm"; $page++; + + my $h = int( $len / 128 ); + save_pbm $path, $w, $h, $data; + } 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"; +}