generate two-page command stream for printer
[Printer-EVOLIS.git] / evolis-driver.pl
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 my ( $front, $back ) = @ARGV;
7 die "usage: $0 front.pbm back.pbm\n" unless $front;
8
9 sub read_pbm;
10
11 sub cmd {
12         warn "# @_\n";
13         print "\x1B",$_[0],"\r";
14 }
15
16 cmd 'Pr;k' => 'ribbon: black';
17
18 # F = Feeder
19 # M = Manual
20 # B = Auto
21 cmd 'Pmi;F;s' => 'mode insertion: F';
22
23 cmd 'Pc;k;=;10' => 'contrast k = 10';
24
25 # FIXME ? only implemented in windows
26 #cmd 'Pdt;DU';
27 #cmd 'Mr;s';
28 #cmd 'Ppws;1281732635';
29
30 cmd 'Ss' => 'sequence start';
31
32 cmd 'Sr' => 'front side';
33
34 my $data = read_pbm $front;
35 cmd 'Db;k;2;' . $data => 'download front';
36
37 cmd 'Sv' => 'back side';
38
39 cmd 'Pc;k;=;10' => 'contrast k = 10';
40
41 $data = read_pbm $back;
42 cmd 'Db;k;2;' . $data => 'download back';
43
44 cmd 'Se' => 'sequence end';
45 print "\x00" x 64; # FIXME some padding?
46
47
48 sub read_pbm {
49         my $path = shift;
50         open(my $pbm, "pnmflip -rotate270 $path |");
51         my $p4 = <$pbm>; chomp $p4;
52         die "no P4 header in [$p4] from $path" unless $p4 eq 'P4';
53         my $size = <$pbm>; chomp $size;
54         local $/ = undef;
55         my $data = <$pbm>;
56         warn "# $path $size ", length($data), " bytes\n";
57         return $data;
58 }