C言語で美咲フォントを扱う2
次回はコンソールに美咲フォントを出力して見たい
お約束の品です?
00111100 01000010 00000010 00001100 00010000 00000000 00010000 00000000
0を抜くとなんの文字かわかりやすいかもしれません
1111 1 1 1 11 1 1
前回記事のヘッダの解説が若干不足しているのでそこの補足と データ格納部の説明をしたいと思います。
$ ./font hdader size is 18 filesignature is FONTX2 fontname is MISAKI width is 8 hight is 8 char code flg is 1 blocks is 5c 0 blocks start code is 0x4081 0 blocks end code is 0x7e81 1 blocks start code is 0x8081 1 blocks end code is 0xac81 2 blocks start code is 0xb881 2 blocks end code is 0xbf81 3 blocks start code is 0xc881 3 blocks end code is 0xce81 ・・・略 91 blocks start code is 0x80ea 91 blocks end code is 0xa4ea
こんな感じでヘッダが18バイト続いた後、 blockテーブル(文字コードの範囲で一まとまりにしたblockの情報をまとめたテーブル) が18バイトめの値(美咲フォントの場0x5C = 十進数で92)分だけ続く
だからフォントのデータはファイル先頭から
18+92*4=386=0x182バイト目から始まります。
で、Sjisの0x8140
から順番に収められているが、
そこからヘッダ分の0x182を引いた適当なオフセットで計算すればいい。。。
というそんな単純なものではありません。
例えばSjisには文字が入っていないエリアがあります。
http://charset.7jp.net/sjis.html
例えば0x9f94〜0xe040です ここはブロックが変わったときに飛ばされています。
69 blocks end code is 0xfc9f 70 blocks start code is 0x40e0
という訳で、
という手間が必要な訳です。 次回はこの辺の処理をうまく完成させます。
今日の疑問
前から結構思っていますが、16進数リテラルを表現する方法は色々あるけど
0x16 16H
10進数リテラルを表現する方法はマイナーな気がする
10D
一応後ろにDとつけることで10進数という意味になるらしいが、あまり見ない。 基本的に数値に何もプリフィックス、サフィックスがついていない場合は10進数と皆しても問題ないと思うが、 個人的にこの値は16進数じゃないよ~ということを明示したい時もある*1
余談:美咲フォントに登録されている最終文字は「熙」
91ブロックめの最後です。
91 blocks end code is 0xa4ea
1111 11 1 1 11 11 1 11 1 1 1 1111 11 1 1 1 1
熙
読めなくないですか。ビットマップにすればいけるのかな?うーん
*1:文字セットとして10進数は16進数の完全なサブセットなため紛らわしい