まだまだ電卓と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 }


コメント