MSX Datapack wiki化計画

9章 MSXView基本データ構造の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{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;     /* ビットブロック() */
         TINY    status;    /*  */
         AREA    area;      /*  */
         HANDLE  defpen;    /*  */
         HANDLE  deffont;   /*  */
         HANDLE  curpen;    /*  */
         HANDLE  curfont;   /*  */
 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標準データ]]                                                        →