取り敢えず絵が出るようになると、グラフィックLCDで誰でも考えるのが、AD変換してオシロスコープ モ・ド・キの作成。しかし、"CHAP1"に含まれているSERIKAフォントは8×16で見栄えは良いのですが、6行しか表示出来ません。(貧乏性なので)もう少し小さなフォントが欲しくなりました。
"フォント フリー"で色々検索しましたが出てくるのはTRUE TypeかOPEN Typeのフォント。流石にCソースで提供されるフォントは存在しません。そんな時に東雲フォントを見付けました。ライセンス的には少し不安がありますが、まぁ、商用利用ではないし・・、。天下の日立が目くじら立てることもないでしょう。東雲フォントは、非常に理解しやすいBDF形式で提供されています
東雲フォントに同梱されているツールにBDF to bin と言うのがあります。正直awkも知らないし、中で何をやっているかも分かりませんでした。いつもの様に適当にいじって(結構、awkのシキタリを理解するのに苦労しましたが)BDFファイルからCソースを生成するツールを作成しました。但し、文字コードのオフセットを意識していないので、全く実用的ではありません。16×16の漢字/グリフを表示して見たかっただけです。コンソールとして機能することは出来ません
#!@GAWK@ -f # # * public domain * # BEGIN { printf("/******************************************************************************\n"); printf(" Shinonome Font Table. \n"); printf("******************************************************************************/\n"); printf("\n"); printf("const unsigned short int FONT_DATA[30000] = {\n"); } END { printf("\n};\n"); } { xxxx = ""; for ( i=0; i<4; i++) { hhhh = substr($0,i*4+1,4); #printf ("\n%s ",hhhh); switch(hhhh) { case "....": xxxx = xxxx "0"; break; case "...@": xxxx = xxxx "1"; break; case "..@.": xxxx = xxxx "2"; break; case "..@@": xxxx = xxxx "3"; break; case ".@..": xxxx = xxxx "4"; break; case ".@.@": xxxx = xxxx "5"; break; case ".@@.": xxxx = xxxx "6"; break; case ".@@@": xxxx = xxxx "7"; break; case "@...": xxxx = xxxx "8"; break; case "@..@": xxxx = xxxx "9"; break; case "@.@.": xxxx = xxxx "A"; break; case "@.@@": xxxx = xxxx "B"; break; case "@@..": xxxx = xxxx "C"; break; case "@@.@": xxxx = xxxx "D"; break; case "@@@.": xxxx = xxxx "E"; break; case "@@@@": xxxx = xxxx "F"; break; case "ENDC": printf ("\n"); break; default: next; break; } } printf("0x%s,", xxxx); xxxx = ""; }
SH用に生成したgcc(が生成したオブジェクトは)は突然、意味不明の動きをします。正確にはt_printf()を1回出力して停止。2回目は表示しません
文法も変で最後の"}"の後に";"を要求します
ダウンロードしたサンプルソースもくだらないワーニングが残っています
速く、HEWに戻らなくては・・・。
文法も変で最後の"}"の後に";"を要求します
ダウンロードしたサンプルソースもくだらないワーニングが残っています
速く、HEWに戻らなくては・・・。
なかなかエレガントでしょう? 自画自賛!
#!@GAWK@ -f # # * public domain * # BEGIN { printf("/******************************************************************************\n"); printf(" Shinonome Font Table. (12*12) BDF to C Source \n"); printf("******************************************************************************/\n"); printf("\n"); printf("const unsigned short int FONT_DATA[30000] = {\n"); } END { printf("\n};\n"); } { xxxx = ""; for ( i=0; i<3; i++) { hhhh = substr($0,i*4+1,4); #printf ("\n%s ",hhhh); switch(hhhh) { case "....": xxxx = xxxx "0"; break; case "...@": xxxx = xxxx "1"; break; case "..@.": xxxx = xxxx "2"; break; case "..@@": xxxx = xxxx "3"; break; case ".@..": xxxx = xxxx "4"; break; case ".@.@": xxxx = xxxx "5"; break; case ".@@.": xxxx = xxxx "6"; break; case ".@@@": xxxx = xxxx "7"; break; case "@...": xxxx = xxxx "8"; break; case "@..@": xxxx = xxxx "9"; break; case "@.@.": xxxx = xxxx "A"; break; case "@.@@": xxxx = xxxx "B"; break; case "@@..": xxxx = xxxx "C"; break; case "@@.@": xxxx = xxxx "D"; break; case "@@@.": xxxx = xxxx "E"; break; case "@@@@": xxxx = xxxx "F"; break; case "ENDC": printf ("\n"); break; default: next; break; } } xxxx = xxxx "0"; printf("0x%s,", xxxx); xxxx = ""; }
コメントをかく