電卓表示の絵を作る(その1)

まだまだ電卓と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ドットに絞ったら、後は手作業でフォントをそれらしくします。

できあがったフォントです。

###
#   #
#  ##
# # #
##  #
#   #
 ###
      
  
 ## 
  
  
  
  
 ###
      
 ###
#   #
    #
   #
  
 #  
#####
 
(省略)
      
#   #
 # #
  
 # #
#   #
      
      
      
  
      
#####
      
  
      
     

まずは作ったフォントファイルをオープンしてデータを配列に格納します。

open(IN,"<font");
2  @font=<IN>;
3  close(IN);

次に、連想配列を使って各行の文字列を文字に割り当てます。

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  }

calc-font-001

コメント

タイトルとURLをコピーしました