[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1735] ankfont0.bin の生成(make13b).



小柳です。

エキスパートCプログラミング −知られざるCの深層 
Peter van der Linden / 梅原 系 訳
アスキー出版局 / ISBN4-7561-1639-6

を読んでいて、フォントのビットパターンを定義するマクロが出てきました。
これを使うと、ankfont0.bin の生成は以下のように書けます。
従来の txt2bin と置き換えてもいいかなと思ったのですが、
コンパイルするのに、stdio を使用するため、cコンパイラのフルセット
が必要となるので、make パッケージには不向きだと思い直しました。

でも、おもしろいので紹介しておきます。

この本は C に関する解説を OS やリンカの話から問題点に入っていく形を
取っていてとてもおもしろくてお勧めです。
Intel 80x86 のメモリモデルの話も載っていて、
20ビットメモリのアドレスが、セグメントを4ビット左にシフトしてから
オフセットと加算されているというのを最近やっと知りました。



#include <stdio.h>

#define X )*2+1
#define _ )*2
#define s ((((((((0

const static unsigned char ankfont[] = {
/* 本当は全てのフォントデータがこの中に存在する */
        s _ _ _ _ _ _ _ _ ,
        s _ X X X _ _ _ _ ,
        s X _ _ _ X _ _ _ ,
        s X _ _ _ X _ _ _ ,
        s X _ _ _ X _ _ _ ,
        s X _ _ X _ _ _ _ ,
        s _ X X _ _ _ _ _ ,
        s _ X _ _ _ X X X ,
        s X _ X _ _ _ X _ ,
        s X _ _ X _ _ X _ ,
        s X _ _ _ X _ X _ ,
        s X _ _ _ _ X _ _ ,
        s _ X _ _ _ X X _ ,
        s _ _ X X X _ _ X ,
        s _ _ _ _ _ _ _ _ ,
        s _ _ _ _ _ _ _ _ ,
}
#undef X
#undef _
#undef s

int main()
{
        FILE *fp;
        fp = fopen("ANKFONT0.BIN", "wb");
        fwrite(ankfont, sizeof(ankfont), 1, fp);
        fclose(fp);
        return 0;
}


-- 
小柳 雅明(Koyanagi.Masaaki !Atmark! nifty.ne.jp)
「人の足を止めるのは"絶望"ではなく"諦観"
  人の足を進めるのは"希望"ではなく"意志"」
                  -- ARMS