Ko-Window プログラマーズマニュアル 「Sheet 構造体について」 ● Sheet 構造体 Sheet 形式は、Ko-Window でもっとも標準的なビットイメージデータのフォーマッ トであるといえます。wlib.h による定義は以下の通りです。 typedef struct { int h, v, hword; unsigned short *buf1, *buf2; } Sheet; h ビットイメージデータの横ドットサイズ v ビットイメージデータの縦ドットサイズ hword ビットイメージデータの横ワードサイズ buf1 ビットイメージデータのデータアドレス(プレーン0用) buf2 ビットイメージデータのデータアドレス(プレーン1用) これら構造体のメンバで1番わかりにくいのは hword でしょう。これは Ko-Window が常にデータを short 型の配列、つまり 16bit 単位で扱うことから来ています。 例えば X×Y = 8×12 dot のように横方向 16dot 以下のデータがあった場合、通常 ではメモリは 1プレーン分 12byte で表現できます。しかし short の配列で表せば short[12]; となり 24byte のエリアが必要です。つまりメモリ上のデータは必ず横1 列分は偶数バイトでなければなりません。だから 1×12 〜 16×12 dot のデータは横 方向のドット数が違うにもかかわらず常に同じ大きさのメモリが必要になります。こ の時の、横1列分の配列数が hword になります。要するに、buf1 と buf2 にそれぞれ 必要な配列の大きさは、hword*v で求まるわけです。h から hword を計算するには、 hword= ((h+15)>>4) とします。 <例> #define XSIZE 10 #define YSIZE 10 #define WSIZE ((XSIZE+15)>>4) #define SSIZE (WSIZE*YSIZE) unsigned short sbuf1[SSIZE], sbuf2[SSIZE]; Sheet sd= { XSIZE, YSIZE, WSIZE, sbuf1, sbuf2 }; ● PED 形式 Sheet 形式のデータをファイルに書き込んだものが、PED形式または単純に Sheet データと呼ばれるファイルになります。これは X11 の bitmap 形式と同様 C言語の ソースの形をしたテキストファイルで、そのままソースに組み込んでコンパイルする ことができます。ファイルの拡張子は .C または .INC です。データ名の生成ルール は次のようになっています。 データ名(ファイル名)が XXXXX の場合 Sheet構造体 Sheet XXXXXPattern; データバッファ short XXXXX1[], XXXXX2[]; .INC と .C は、ソースに組み込んで使用する時に、include するかそのままコンパ イルするかの違いになっています。 .INC の場合 Sheet データの定義は static となる(ただし、先頭に CLASS を define しておくことで extern にすることも可能) .C の場合 Sheet データの定義は extern となり、また自分で wlib.h を include する。 <例> smpl.c ------------------------------------------------------------------------------ #include "wlib.h" static short Smpl1[] = { 0xFFFF, 0xEFFF, 0x80FF, 0xEFFF, 0xF7FF, 0xF6FF, 0xC07F, 0xB4BF, 0xB9B3, 0xC3BF, 0xFC7F, 0xFF81, 0xFFFE, 0xFFFE, 0xFFF1, 0xFF8F }; static short Smpl2[] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; Sheet SmplPattern = { 16, 16, 1, Smpl1, Smpl2 }; ------------------------------------------------------------------------------ <例> smpl.inc ------------------------------------------------------------------------------ #ifndef CLASS #define CLASS static #endif static short Smpl1[] = { 0xFFFF, 0xFFFF, 0xFFFF, 0x8FFF, 0xFBEF, 0xF7EF, 0xDFE9, 0xEBEF, 0x39EF, 0xE6E1, 0xCFFF, 0xFFDF, 0xFFD7, 0xFFFF, 0xFE55, 0xFFDD }; static short Smpl2[] = { 0x0000, 0x0000, 0x7000, 0x0820, 0x1820, 0x3026, 0x1A20, 0xCB20, 0x192E, 0x2020, 0x0000, 0x0040, 0x0050, 0x01FC, 0x0054, 0x0044 }; CLASS Sheet SmplPattern = { 16, 16, 1, Smpl1, Smpl2 }; ------------------------------------------------------------------------------ 1994/12/04 初期版 1995/11/29 大幅追加 小笠原博之 oga@dgw.yz.yamagata-u.ac.jp DenDenNET: DEN0006 COR.