※ ※ このページは書きかけです。以下の可能性があります。 ※ ・誤字、脱字等のチェックをおこなっていません。 ※ ・テキスト、表などフォーマットがされていない。 ※ ・画像が抜けている。 ※
この章では、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;