MSX Datapack wiki化計画

9章 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を表す構造体は、次のように宣言されています。

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;