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

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

 ### 
#   #
#  ##
# # #
##  #
#   #
 ### 
     
  #  
 ##  
  #  
  #  
  #  
  #  
 ### 
     
 ### 
#   #
    #
   # 
  #  
 #   
#####

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

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

     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	}

calc-font-001

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA