From: Ian Jackson Date: Fri, 19 Jun 2009 18:03:28 +0000 (+0100) Subject: WIP yppsc-parsedb-updatereceiver; can convert bitmap to email X-Git-Tag: 1.9.2~115^2 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=commitdiff_plain;h=29497087c9816d6b52e85d969f9d3d9c3a4ad612 WIP yppsc-parsedb-updatereceiver; can convert bitmap to email --- diff --git a/pctb/testupdate-char b/pctb/testupdate-char new file mode 100644 index 0000000..0f0c8f0 --- /dev/null +++ b/pctb/testupdate-char @@ -0,0 +1,9 @@ +15 +Digit +0 +3e0 +410 +808 +808 +410 +3e0 diff --git a/pctb/yppsc-parsedb-updatereceiver b/pctb/yppsc-parsedb-updatereceiver index bdc76c2..9132c4e 100755 --- a/pctb/yppsc-parsedb-updatereceiver +++ b/pctb/yppsc-parsedb-updatereceiver @@ -71,6 +71,43 @@ sub parseentryin__pixmap ($) { #---------- characters ---------- +sub parseentryin__char ($) { + my ($ei) = @_; + $ei =~ m/^([1-9]\d{0,2})\n(Digit|Upper|Lower)\n((?:[-&\'A-F0-9a-f ]|\x20)+)\n/s or die; + my ($h,$ctx,$str)= ($1+0,$2,$3); +#print STDERR ">$'<\n"; + my @d= grep { m/./ } split /\n/, $'; +#print STDERR ">@d<\n"; + die if $h>31; + die if @d>400; + my $maxval= (1<<$h)-1; + map { + m/^[0-9a-f]{1,8}$/ or die; + $_= hex $_; + die "$_ ?" if $_ > $maxval; + } @d; + my $w= @d; + my $ppm= "P2\n$w $h\n1\n"; + for (my $y=0; $y<$h; $y++) { + for (my $x=0; $x<$w; $x++) { + $ppm .= sprintf " %d", !!($d[$x] & (1<<$y)); + } + $ppm .= "\n"; + } + my $entry= sprintf "%d\n%s\n%s\n", $h,$ctx,$str; + map { $entry .= sprintf "%x\n", $_; } @d; + +#print STDERR "[[[[\n$ppm\n]]]]"; + + my $icon= pipeval($ppm, +# "pnmscale -xysize 78 $h", + 'pgmtopbm -threshold', + 'pnminvert', + 'pbmtoascii'); + + return ("$ctx",$str,$entry, '',$w,$icon); +} + #---------- useful stuff ---------- sub pipeval ($@) {