※ ※ このページは書きかけです。以下の可能性があります。 ※ ・誤字、脱字等のチェックをおこなっていません。 ※ ・テキスト、表などフォーマットがされていない。 ※ ・画像が抜けている。 ※
この章では、MSXView基本データ構造について説明します。
9.1 1バイト型の別名定義と定数名
1バイト型の別名定義と定数名は、次のように定義されています。
#define TINY char /* 0〜255を表す数値型 */ #define BOOL char /* 論理型 */ #define TRUE 1 /* (~FALSE)ではなく(!FALSE) */ #define FALSE 0 /* C言語の論理式の値に対応 */ #define STATUS char /* 成功・失敗型 */ #define OK 0 #define ERROR 0xff #define HANDLE char /* ハンドル型 */ #define NEW (char)0 /* 新規ハンドルの割り当て要求 */ #define ROOTBD 1 /* ルートボード */ #define SYSPEN 1 /* 標準ペン */ #define BDPEN 2 /* ルートボードのペン */ #define SYSFONT 1 /* 標準フォント */ #define COLOR char
9.2 基本的な構造体
画面表示で使用する構造体は、以下のように宣言されています。
typedef struct _pos { /* 座標の指定に使用(主に画面座標) */ int xp; /* 負の座標はウィンドウ外なので、 */ int yp; /* 表示されないが論理的には有効 */ } POS; typedef struct _area { /* POS+領域サイズ */ int xp; /* 本質的にはPOSだが、この方が */ int yp; /* 初期化をシンプルに書ける。 */ unsigned xs; /* サイズは非負なので論理的だが */ unsigned ys; /* 計算時の型変換には要注意。 */ } AREA;
9.3 ディスプレイマネージャの構造体
ディスプレイマネージャで使用する構造体は、以下のように宣言されています。
typedef struct _win { /* ウィンドウの状態 */ HANDLE block; /* ビットブロック(FIXなら0) */ TINY status; /* ウィンドウスタイル+ウィンドウの種類 */ AREA area; /* グローバル座標 */ HANDLE defpen; /* デフォルトペン */ HANDLE deffont; /* デフォルトフォント */ HANDLE curpen; /* カレントペン */ HANDLE curfont; /* カレントフォント */ } WIN;
9.3.1 ウィンドウスタイルの定数
ウィンドウの形状を指定する構造体は、以下のように定義されています。
#define FIX (char)128 /* ビットブロックなし */ #define TWIN (char)0 /* なにもなし */ #define CWIN (char)1 /* 枠なし */ #define FWIN (char)2 /* 一重枠 */ #define RWIN (char)3 /* 角の丸い一重枠 */ #define IWIN (char)4 /* インデックス枠 */ #define SWIN (char)5 /* 影付き一重枠 */ #define BWIN (char)6 /* 影付き二重枠 */
9.4 ビットブロックマネージャの構造体
ビットブロックマネージャで使用する構造体は、以下のように宣言されています。
typedef struct _blcinfo { TINY lotnum; /* ロット番号 */ LONG start; /* VRAMポインタ */ LONG length; /* ブロックデータの長さ */ WORD xs; /* 横方向の大きさ */ WORD ys; /* 縦方向の大きさ */ } BLCINFO;
9.5 イベントマネージャの構造体
イベントマネージャで使用する構造体は、以下のように宣言されています。
typedef struct _event { /* イベントレコード */ TINY kind; /* イベントの種類 */ POS where; /* カーソルのグローバル座標 */ LONG bstat; /* ボタン(含むシフトキー)の状態 */ char keycode; /* シフトを無視したコード */ TINY kstat; /* シフト(含む特殊キー)の状態 */ TINY keymap; /* キーマップ・コード */ TINY msg[4]; /* 予備 */ } EVENT;
9.5.1 イベントの定数
イベントの種類を指定する定数は、次のように定義されています。
#define KEYEVT 1 /* キーが押された */ #define TRIGDN 2 /* 1stボタンが押された */ #define TRIGUP 3 /* 1stボタンが離された */ #define ABORT 4 /* 2ndボタンが押された */ #define ABORTUP 5 /* 2ndボタンが離された */ #define KANJI 6 /* 予約 */
9.5.2 ウィンカの構造体
ウィンカの状態を表す構造体は、以下のように宣言されています。
typedef struct _wink { /* ウィンカ */ HANDLE kind; /* 所属するウィンドウ */ AREA where; /* ローカル座標 */ unsigned speed; /* 点滅スピード(ビット指定) */ TINY rev; /* 反転時のxor値(0xfe) */ } WINK;
9.5.3 キーボードの構造体
キーボードの状態を表す構造体は、以下のように宣言されています。
typedef struct _locks { /* キーボードの状態 */ TINY config; /* キー配列(0〜2) */ TINY kana; /* かなロック */ TINY caps; /* CAPSロック */ } LOCKS;
9.5.4 マウスカーソルの構造体
マウスカーソルの状態を表す構造体は、以下のように宣言されています。
typedef struct _cursor { /* マウスカーソルの形状 */ TINY xhot; /* pat内のどのドットを中心座標 */ TINY yhot; /* とするかを指定(0〜7) */ TINY logic; /* 画面との論理演算 */ COLOR col1; /* pat1の色 */ TINY pat1[32]; /* 16×16のビットパターン */ COLOR col2; /* pat2の色 */ TINY pat2[32]; /* 16×16のビットパターン */ } CURSOR;
9.6 グラフパックの構造体
グラフパックで使用する構造体は、以下のように宣言されています。
typedef struct _rgb { /* パレットの色指定などで使用する */ TINY red; /* 0〜7 */ TINY green; /* 0〜7 */ TINY blue; /* 0〜7 */ } RGB; typedef struct _tile { /* PEN構造体のためのサブ構造体 */ TINY sw; /* 色づけに関する指定 */ COLOR on; /* patのonドットの色 */ COLOR off; /* patのoffドットの色 */ TINY pat[8]; /* 8×8のビットパターン */ } TILE; /* TILE.swの意味は次のとおり */ typedef struct _grafpen { /* 文字以外の描画の基本となる */ TINY line[4]; /* ラインスタイル */ TINY xhot; /* pat内の度のドットを中心座標 */ TINY yhot; /* とするかを指定(0〜7) */ TINY xs; /* pat(ペン先)のサイズを指定 */ TINY ys; /* (0〜7) */ TINY pat[8]; /* ペン先のパターン */ TINY pen; /* 点、線の描画用 */ TINY fill; /* 塗りつぶし用 */ TINY back; /* ウィンドウ消去用 */ } PEN;
#define ONDOT (char)32 /* onドット有効 */ #define OFFDOT (char)16 /* offドット有効 */
9.7 フォントパックの構造体
フォントパックの構造体は、以下のように宣言されています。
9.8 テキストマネージャの構造体
テキストマネージャの構造体は、以下のように宣言されています。
9.9 メニューマネージャの構造体
メニューマネージャの構造体は、以下のように宣言されています。
9.9.1 POPUP.headおよびMENU.headに設定する定数
POPUP.headおよびMENU.headに設定する定数は、次のように定義されています。
#define CHK (char)128 /* チェックマーク */ #define MSK (char)64 /* 表示、選択禁止 */ #define DIS (char)32 /* 選択禁止 */ #define LIN (char)16 /* 線(選択禁止) */ #define CEN (char)8 /* センタリング */ #define BLD (char)4 /* 太字 */ #define CNT (char)2 /* 改行せずに継続する */ #define FIN (char)1 /* 終了(最後の要素である印) */ #define NON (char)0 /* 何も指定しない場合 */
9.10 コントロールマネージャの構造体
コントロールマネージャの構造体は、以下のように宣言されています。
9.10.1 標準コントロール番号の定数
標準コントロール番号は、次のように定義されています。
9.10.2 コントロールのパート番号の定数
コントロールのパート番号は、次のように定義されています。
9.10.3 コントロールメッセージへのキャスト用マクロ
コントロールメッセージへのキャスト用マクロは、次のように定義されています。
9.10.4 コントロールドライバのバリエーション番号
コントロールドライバのバリエーション番号は、次のように定義されています。
9.11 プリンタドライバの構造体
プリンタドライバの構造体は、以下のように宣言されています。
9.11.1 プリンタドライバの機能コード
プリンタドライバの機能コードは、次のように定義されています。
#define PD_INIT 0 /* プリンタドライバの初期化 */ #define PD_OPEN 1 /* プリンタの印刷開始宣言 */ #define PD_CLOSE 2 /* プリンタの印刷終了宣言 */ #define PD_PRINT 3 /* 印刷の実行 */ #define PD_MENU 4 /* 用紙の設定 */ #define PD_START 5 /* 開始・終了ページ、印刷枚数の設定 */ #define PD_PAGE 6 /* 印刷開始メッセージの表示 */
9.12 その他の構造体
その他の構造体は、以下のように宣言されています。
9.12.1 オーバーレイで使用する構造体
オーバーレイで使用する構造体は、次のように宣言されています。
9.12.2 モジュール名の宣言
モジュール名は次のように定義されています。
#define _public(N) static char ___/**/N[ ] = "**_pub_**:N"; \ static MODULE *N = (MODULE *)___/**/N #define _extern(N) static char ___/**/N[ ] = "**_ext_**:N"; \ static MODULE *N = (MODULE *)___/**/N
9.12.3 日付を表す構造体
日付を表す構造体は、次のように宣言されています。
typedef struct _date { int year; /* 1980〜2079 */ TINY month; /* 1〜12 */ TINY date; /* 1〜31 */ TINY week; /* 0=日曜、…6=土曜 */ } DATE;
9.12.4 時間を表す構造体
時間を表す構造体は、次のように宣言されています。
typedef struct _time { TINY hour; /* 0〜23 */ TINY minute; /* 0〜59 */ TINY second; /* 0〜59 */ TINY sec100; /* システム予約 */ } TIME;
9.12.5 MSX-DOSのDPBを表す構造体
MSX-DOSのDPBを表す構造体は、次のように宣言されています。
typedef struct _dpb { /* MSX-DOSのDPB */ TINY drive; /* Drive number */ TINY media; /* Media ID */ unsigned sectsize; /* Size of 1 sector */ TINY dirmask; /* directory mask */ TINY dirsft; /* directory shift */ TINY clusmask; /* Cluster mask */ TINY clussft; /* Cluster shift */ unsigned topfat; /* Top sector of FAT */ TINY fatnum; /* Number of FAT */ TINY direntry; /* directory shift */ unsigned topdata; /* Top sector of data area */ unsigned cluster; /* Number of Cluster */ TINY sectclus; /* Sector par cluster */ unsigned topdir; /* Top sector of directory entry */ TINY fat; /* Top address of FAT */ unsigned free; /* Free Cluster */ } DPB;
9.12.6 MSX-DOSのFCBを表す構造体
MSX-DOSのFCBを表す構造体は、次のように宣言されています。
typedef struct _fcb { /* MSX-DOSのFCB */ TINY drive; /* Drive name. 0=default, 1=A */ TINY name[8]; /* Filename */ TINY ext[3]; /* Extention */ unsigned crblk; /* Current block */ unsigned recsiz; /* Record size */ long size; /* File size */ unsigned date; /* Created date */ unsigned time; /* Created time */ TINY devid; /* device ID */ TINY dirloc; /* Directory location */ unsigned first; /* First cluster of a file */ unsigned last; /* Last cluster of a file */ unsigned access; /* Last cluster accessed */ TINY crrec; /* Current record */ long random; /* Random record */ } FCB;