<document>
<title "gbfloader">
<chapter "ソースコードの変更">

まず、変更ファイルのアーカイブを、ソースコードに重ねて展開して反映して下さい。（変更点につきましてはdiffファイルをご覧下さい。）

次に makefile に以下の行を加えて下さい。
<pre>
@ insert      machine/gbfglue
@ insert      machine/gbfloader
</pre>
gbfloader のコンパイルは、以下の行を makefile に加えます。
<pre>
@ make file bin/gbfloader from sufix work/machine/gbfloader .o sufix 
work/machine/viewlib .o sufix work/machine/std .o sufix work/longchar 
.o sufix work/machine/unix/${MACHINE} .o sufix work/stream .o sufix 
work/xl/lib .o sufix work/version .o sufix work/endian .o sufix 
work/xl/function .o sufix work/memory_debug .o sufix work/utils .o
<pre>
</pre>
        ${CC} -o ${to}  ${LFLAGS} ${from} ${W_LIB}
</pre>

また、gbview の make 命令から、src/machine/viewlib を取り除き、代わりにsrc/machine/gbfglue を入れて下さい。

これによって gbview が gbf を使うようになります。

<section "変更ファイルについて">
<ul>
<li>src/gbs/lib/view/init.c</li>
<li>src/h/gbf.h</li>
<li>src/h/gbview.h</li>
<li>src/machine/viewlib/v_get_font.c</li>
<li>src/machine/viewlib/v_open_disp.c</li>

gbfloaderで win_flame 等を組み入れる必要が出来てしまうため、フォントサイズを格納する変数 fontsize を環境envから外し、グローバル変数にした。
</ul>

<ul>
<li>src/h/machine/v_types.h</li>

VFONT 構造体に short id; を追加。viewlib では使用しない、gbf 用。
</ul>
<ul>
<li>src/longchar/gbf/*.c</li>

フォントの読み込み、ピクセルマップ取得関数
</ul>
<ul>
<li>src/machine/gbfglue/gbfglue.c</li>

viewlib の代替として gbf を使うためのグルー関数
</ul>
<ul>
<li>src/machine/gbfloader/gbfcheck.c</li>

デバグ用。
</ul>
<ul>
<li>src/machine/gbfloader/gbfload.c</li>
<li>src/machine/gbfloader/gc.c</li>
<li>src/machine/gbfloader/main.c</li>

gbfloader 本体
</ul>
<ul>
<li>src/machine/viewlib/v_get_string_pic.c</li>

書き始めが負の座標の文字を描画する際、完全に背景が消去されずゴミが出る問題の修正</ul>

</section>
</chapter>
<chapter "gbfloader の使用方法">
以下のようにコマンドプロンプトから起動します。
<pre>
gbfloader <フォントサイズ> <出力先ディレクトリ>
</pre>
すると、出力先ディレクトリに指定したフォントサイズのディレクトリを作り、その中にフォントデータを展開します。（viewlib の v_open_disp() で読み込まれた各フォントを個別にファイルとして展開します。）

例えば gbfloader 13 gbfont と入力すると、gbfont/13/jisx0208_1990.gbf といったファイルができます。

</chapter>
<chapter"フォントファイルの構造">

各フォントファイルは、下のような構造になっています。
---------------------------
GBF_HEADER構造体 256 byte
---------------------------
GBF_OFS構造体　32byte
GBF_OFS構造体　 × 含まれる文字数
   ...
---------------------------
文字のピクセルマップ
---------------------------
<pre>
各構造体は、src/h/gbf.h で定義されています。
typedef struct gbf_header {
	char		signature[16];　　// "GBFONT"が入る
	char		fontname[224];　// Xのフォント名
	int		size;　　// gbfloader の引数に指定したフォントサイズ
	int		st_no;   // フォントファイルに含まれる最初の文字のコード
	int		end_no;	// 同、最後の文字のコード＋１
	int		nos;　　// 含まれる文字数
} GBF_HEADER;

typedef struct gbf_ofs {
	short		st_x;　// 書き始めのx座標
	short		st_y;　// 同 y座標
	short		end_x; // 書き終わりのx座標
	short		end_y; // 同 y座標
	short		w;　　// 一文字の幅
	short		type;　// ピクセルマップの種類
#define FT_SPACE 0 /* 空白、ピクセルマップなし */
#define FT_BITMAP 1 /* 1 bit */
#define FT_GRAY 2 /* 8 bit grayscale */
	unsigned int	ofs;　// ピクセルマップのファイル内のオフセット
} GBF_OFS;
</pre>
ピクセルマップには、1 bitのビットマップ、8bitのグレイスケール形式があり、どちらのタイプなのかは各文字のGBF_OFSのtypeに記録されています。なお、今回動作確認は1bitでしか行っていません。

</chapter>
<chapter "gbview からの利用">
viewlib の機能のうち、gbview で利用するのは v_open_disp, v_get_string_pic です。これらをそれぞれ、gbf_open_disp, gbf_get_string_pic に切り替えるためのグルールーチンが src/machine/gbfglue/gbfglue.c に入っています。（このほかにいくつかのグローバル変数定義と、v_loop のイベント処理をしないバージョン（ms_loopを呼ぶだけ）が入っています。）これを、viewlib の代替として使うことで、X Windowサーバを使わずに動作します。

</chapter>
<chapter "gbview の設定">
初期化スクリプト（gbview.paramなど）に、以下のようにフォントサイズと格納場所を書いて下さい。

([font-size displaykey="/home/...../gbfont"] 13)

この例では、起動時にv_open_disp() (glue)-> gbf_open_disp() が /home/....../gbfont/13/ ディレクトリをスキャンしてフォントファイルの有無を調べ、VDISPLAY 構造体が設定されます。

</chapter>
</title>
</document>


