diff --git a/tornado/fw/txt/plot b/tornado/fw/txt/plot new file mode 100755 index 0000000..e295501 --- /dev/null +++ b/tornado/fw/txt/plot @@ -0,0 +1,10 @@ +#!/bin/sh +( + cat <> 3]) >> ($i & 7)) & 1; +} + + +$f = 0.001*shift @ARGV; + +while (<>) { + if (/#define\s+(\S+)_width\s+(\d+)/) { + print; + $N = $1; + $X = $2; + next; + } + if (/#define\s+\S+_height\s+(\d+)/) { + print; + $Y = $1; + next; + } + chop; + next unless /\s*0x/; + s/^\s*//; + s/(,|};)$//; + push(@p, split /,/); +} + +FIRST: for ($x0 = 0; $x0 != $X; $x0++) { + for ($y = 0; $y != $Y; $y++) { + last FIRST if &pick($x0, $y); + } +} + +for ($x = $x0; $x != $X; $x++) { + for ($y = 0; $y != $Y; $y++) { + $x1 = $x if &pick($x, $y); + } +} + +$w = ($x1-$x0)+1; +$off = int(($X-$x1+$x0)/2); +#print STDERR "$X $x0 $x1 $w $off\n"; + +# x' = x*(1+y*f) +# x'/(1+y*f) = x +# x' +for ($y = 0; $y != $Y; $y++) { + for ($x = 0; $x != $X; $x += 8) { + $v = 0; + for ($i = 0; $i != 8; $i++) { + $t = $x+$i-$X/2; + $t = int($t*(1-$y*$f)-$off+$X/2); + next if $t < 0 || $t >= $X; + $v |= 1 << $i if &pick($t, $y); + } + push(@r, sprintf("0x%02x", $v)); + } +} + +print "static char ${N}_bits[] = {\n"; +$i = 0; +for (@r) { + print " " if !($i % $L); + print $_; + last if $i == $#r; + $i++; + print ","; + print "\n" if !($i % $L); +} +print "};\n"; diff --git a/tornado/fw/txt/t b/tornado/fw/txt/t new file mode 100755 index 0000000..ec5a418 --- /dev/null +++ b/tornado/fw/txt/t @@ -0,0 +1,2 @@ +#!/bin/sh +./txt2xbm TEST | ./stretch 6 | ./xbm2gp "$@" | ./plot diff --git a/tornado/fw/txt/txt2xbm b/tornado/fw/txt/txt2xbm new file mode 100755 index 0000000..8fce920 --- /dev/null +++ b/tornado/fw/txt/txt2xbm @@ -0,0 +1,9 @@ +#!/bin/sh +gs -sDEVICE=pbmraw -sOutputFile=- -g256x64 -q - <) { + chop; + if (/#define\s+\S+_width\s+(\d+)/) { + $X = $1; + next; + } + if (/#define\s+\S+_height\s+(\d+)/) { + $Y = $1; + next; + } + next unless /\s*0x/; + s/^\s*//; + s/(,|};)$//; + push(@p, split /,/); +} + +for ($x = 0; $x != $X; $x++) { + for ($y = 0; $y != $Y; $y++) { + $i = $x+$y*$X; + $p = ((hex $p[$i >> 3]) >> ($i & 7)) & 1; + next unless $p; + if ($rect) { + print "$x ", $Y-$y-1, "\n"; + } else { + $r = ($Y-$y-1)/$Y*($O-$I)+$I; + $a = &ang($O)*($x-$X/2); + print $r*sin($a), " ", $r*cos($a), "\n"; + } + } +}