まだまだ電卓とirb比較は続きそうですが、電卓のLCDに似せた表示の絵を作るのが面倒になってきました。自作bannerコマンドとlibreofficeを組み合わせて楽したいと思います。
今回の特殊bannerコマンドは、perlで作りますが、フォントのベースはbannerコマンドを使います。
takk:~$ mkdir calc takk:~$ cd calc takk:~/calc$ banner {0..9} + - X + ### # # # # # # # # # # # # # ### (省略) # # ##### # # takk:~/calc$
横5ドット縦8ドットに加工します。
takk:~/calc$ banner {0..9} + - X + | cut -b1,3,4,5,7 | perl -ne 'chomp;printf"%-5s\n",$_' > font
cutで横5ドットに絞ったら、後は手作業でフォントをそれらしくします。
できあがったフォントです。
### # # # ## # # # ## # # # ### # ## # # # # ### ### # # # # # # ##### (省略) # # # # # # # # # # ##### #
まずは作ったフォントファイルをオープンしてデータを配列に格納します。
1 open(IN,"<font"); 2 @font=<IN>; 3 close(IN); 4
次に、連想配列を使って各行の文字列を文字に割り当てます。
5 foreach $ch (split //,"0123456789+-x/"){ 6 $hash{$ch} .= shift @font; 7 $hash{$ch} .= shift @font; 8 $hash{$ch} .= shift @font; 9 $hash{$ch} .= shift @font; 10 $hash{$ch} .= shift @font; 11 $hash{$ch} .= shift @font; 12 $hash{$ch} .= shift @font; 13 $hash{$ch} .= shift @font; 14 } 15
それから引数を1文字ずつに分割して、該当フォントを出力文字列へ結合します。
16 foreach $ch (split //,$ARGV[0]){ 17 $i=0; 18 foreach $line (split /\n/,$hash{$ch}){ 19 $out[$i++] .= $line . " "; 20 } 21 } 22
後は、出力するだけです。
23 foreach $line (@out){ 24 print "$line\n"; 25 }
コメント