- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{include unfinished_page}}
,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[8章 オーバーレイプログラムの作成|8章 オーバーレイプログラムの作成]] ,{BSIZE:0|RIGHT}[[10章 MSXView標準データ]] →
この章では、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を表す構造体は、次のように宣言されています。
!9.12.6 MSX-DOSのFCPを表す構造体
MSX-DOSのFCPを表す構造体は、次のように宣言されています。
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;
,{t},{BSIZE:1 0|SIZE:100%}
,{BSIZE:0}←[[8章 オーバーレイプログラムの作成|8章 オーバーレイプログラムの作成]] ,{BSIZE:0|RIGHT}[[10章 MSXView標準データ]] →