共通して使われる型の定義を以下に記述する。
typedef char B; /* 符号付き 8ビット整数 */ typedef short H; /* 符号付き16ビット整数 */ typedef int W; /* 符号付き32ビット整数 */ typedef unsigned char UB; /* 符号無し 8ビット整数 */ typedef unsigned short UH; /* 符号無し16ビット整数 */ typedef unsigned int UW; /* 符号無し32ビット整数 */ typedef char VB; /* 不定型 8ビットデータ */ typedef short VH; /* 不定型16ビットデータ */ typedef int VW; /* 不定型32ビットデータ */ typedef void *VP; /* 不定型データへのポインタ */ typedef void (*FP)(); /* 一般関数ポインタ */
以上のデータ型はITRONと共通である。
Volatile: コンパイラによる最適化禁止指定typedef volatile W _W; /* 最適化禁止の符号付き 8ビット整数 */ typedef volatile H _H; /* 最適化禁止の符号付き16ビット整数 */ typedef volatile B _B; /* 最適化禁止の符号付き32ビット整数 */ typedef volatile UW _UW; /* 最適化禁止の符号無し 8ビット整数 */ typedef volatile UH _UH; /* 最適化禁止の符号無し16ビット整数 */ typedef volatile UB _UB; /* 最適化禁止の符号無し32ビット整数 */ typedef volatile void _void;
#define CONST const /* 変数・関数の代入禁止指定 */
#define LOCAL static /* モジュール(*)内でのみ使われる */
/* 変数・関数 */
#define EXPORT /* プログラム中の任意の箇所で参照 */
/* 可能な変数・関数の定義 */
/* 1個の変数・関数について EXPORT */
/* 宣言はプログラム中に1箇所だけ */
/* 記述 */
#define IMPORT extern /* プログラム中の任意の箇所で参照 */
/* 可能な変数・関数の参照宣言 */
/* 1モジュールに1個の参照宣言で */
/* EXPORT された変数・関数の使用が */
/* 可能 */
#define VOID void /* 空の型 */
プログラムはソースコードをコンパイル・リンクして作成されるが、 そのソースコードは通常、 複数のソースファイルに分割して記述されている。 以降、本書ではこのソースファイル 1 個の単位をモジュールと呼ぶ。
typedef float FLOAT; /* 単精度(32ビット)浮動小数点 */ typedef double DOUBLE; /* 倍精度(64ビット)浮動小数点 */ typedef int BOOL; /* TRUE or FALSE */ typedef W (*FUNCP)(); /* W 関数へのポインタ */
typedef enum {
False = 0,
True = 1
} Bool; /* ブール値 */
typedef W ID; /* ID番号 */
typedef W MSEC; /* ミリ秒 */
typedef W STIME; /* システム時間 */
/* 1985/01/01 00:00:00 GMT からの秒数 */
typedef UH TC; /* TRON 文字コード */ #define TNULL ((TC) 0) /* 文字列終端の文字コード値 */
ビッグエンディアンの場合
typedef union {
W err; /* エラーコード */
struct {
H eclass; /* エラークラス */
UH detail; /* 詳細エラー */
} c;
} ErrCode;
リトルエンディアンの場合
typedef union {
W err; /* エラーコード */
struct {
UH detail; /* 詳細エラー */
H eclass; /* エラークラス */
} c;
} ErrCode;
システムコールの関数値は以下のいずれかである。
typedef W ERR; /* エラーコード */
/* エラーまたは正常のみ戻す場合に使用 */
typedef W WERR; /* システムコール関数値 */
/* エラーまたは意味のある値を戻す */
/* 場合に使用 */
エラーコードとして通常は ERR を使用し、
詳細が必要な場合は ErrCode を使用する。
#define OK (0) /* 正常(OK) */
#define CLR 0x0000 /* クリア指定 */ #define NOCLR 0x0008 /* ノークリア指定 */ #define DELEXIT 0x8000 /* 終了時削除指定 */
typedef struct Size {
H h; /* 幅 */
H v; /* 高さ */
} SIZE;
typedef struct point {
H x; /* 水平座標値 */
H y; /* 垂直座標値 */
} PNT;
typedef union rect {
struct _rect {
H left; /* 左の座標値 */
H top; /* 上の座標値 */
H right; /* 右の座標値 */
H bottom; /* 下の座標値 */
} c;
struct {
PNT lefttop; /* 左上の点 */
PNT rightbot; /* 右下の点 */
} p;
} RECT;
#define L_FSNM 20 /* ファイルシステム名の長さ(文字数) */
typedef struct {
TC fs_name[L_FSNM];
/* ファイルシステム名 */
UH f_id; /* ファイルID */
UH atr1; /* 属性データ1 */
UH atr2; /* 属性データ2 */
UH atr3; /* 属性データ3 */
UH atr4; /* 属性データ4 */
UH atr5; /* 属性データ5 */
} LINK;
typedef W WID; /* ウィンドウID */