/*========================================================[TOOLS.H]=====*/ /* ツールズライブラリ用ヘッダーファイル */ /*======================================================================*/ #include #include #include #include #include #include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long /*---- MACRO Function --------- */ #define SWAP(a,b,c) {c=b;b=a;a=c;} /* データスワップマクロ */ #define ABS(a,b) (a>b)?(a-b):(b-a) /* 絶対値を返すマクロ */ #define PAI 3.14159265L /*---------------------- CONS98.C-----------------*/ extern int cgetch(void); /* BIOSによる1文字入力 */ extern int cinkey(void); /* BIOSによるキー入力チェック */ extern int inkey(void); /* DOSびよるキー入力チェック */ extern void kb_flash(); /* キーバッファを空にする */ extern void txt_color(int); /* テキストカラーの設定 */ extern int txt_mode_ck(void); /* 画面モードの取得 */ extern void txt_disp_on(void); /* テキスト画面の表示 */ extern void txt_disp_off(void); /* テキスト画面の非表示 */ extern void crsform(int,int,int,int); /* カーソル形状の設定 */ extern void strmov(char *,int,int); /* 同一文字列内での文字列移動 */ extern int ktype(char *,int); /* 文字の種類の検査 */ extern int iswap(int); /* 整数型の変数の上下バイトの交換 */ extern void kputch(int); /* 整数型の漢字を画面に出力する */ extern int ledit(char *,char *,int,int); /* 行編集機能付き文字列入力 */ extern int trimr(char *); /* 文字列の右側の空白を取る */ /*----------------------- WIND98.H ---------------*/ /**** ウィンドゥ構造体定義 ****/ struct win_st{ int l,t,r,b; /* ウィンドゥ位置 */ char *np; /* ウィンドゥの名称 */ int tc,bc,nc; /* テキスト、枠、名称の色 */ char *bf; /* 退避エリア */ int lx,ly; /* 最終カーソル位置 */ struct win_st *wlast; /* 前ウィンドゥポインタ */ }; typedef struct win_st WIN; /*** メニュー構造体定義 ****/ typedef struct { int c,r,w; /* 列数、行数 、列幅*/ int hc,sc; /* ハイライトカラー、セレクトカラー */ char **str; /* 表示文字列ポインタ */ int last,st; /* 選択番号、表示オフセット */ } MENU; typedef struct{ char n[15]; /* ファイル名 */ int a; /* アトリビュート、01:RDONLY, 02:HIDDEN, 04:SYSTEM, 08:LABEL, 10:DIREC, 20:ARCH */ int t; /* 時 刻 */ int d; /* 日 付 */ int s; /* サイズ */ } FNAME; /*----------------------- WIND98.C ----------------*/ extern void w_title(WIN *); /* ウィンドウのタイトルを書きます */ extern void w_disp(WIN *,int ,int ); /* ウィンドウを書きます */ extern void w_locate(WIN *); /* ウィンドウのカーソル位置の復帰 */ extern void w_crspos(WIN *); /* ウィンドウのカーソル位置の退避 */ extern int w_chek(WIN *,int ,int ); /* ポイントがウィンドウの内部調査 */ extern WIN *w_cktop(WIN *,WIN * ); /* ウィンドウが上位にあるか調べる */ extern void w_cls(WIN *); /* ウィンドウ内の消去 */ extern void w_color(WIN *,int ); /* ウィンドウ内テキストカラー指定 */ extern void w_window(WIN * ); /* カレントウィンドウの指定 */ extern WIN *w_open(int ,int ,int ,int ,char *,int ,int ,int ,int ); /* ウィンドウの新規オープン */ extern void w_close(WIN * ); /* ウィンドウのクローズ */ extern WIN *w_open_st(WIN * ,int ); /* 構造体でウィンドウを新規オープン */ extern void w_corner(int); /* ウィンドウの隅形状の指定 */ extern int w_msgout(WIN * ,char *,int ); /* ウィンドウの下部メッセージの表示 */ extern void w_msgcls( WIN *wh ); /* ウィンドウの下部メッセージの消去 */ extern void menu_blnk( int ); /* ブランク文字数の設定 */ extern void menu_mode( int ); /* メニューモードの指定 */ extern void wm_disp(WIN *,MENU *,int ,int ); /* ウィンドウに選択メニュー表示 */ extern int wm_sel(WIN *,MENU *,int ); /* ウィンドウによるメニュー選択 */ extern WIN *wm_open(MENU *,char **,int,int,char *,int,int,int,int); /* メニュー用のウィンドウを開ける */ extern int wm_set(WIN * ,MENU * ,int ,int ); /* 指定メニューの選択表示 */ extern int w_yesyno(int ,int ,int ,int ,int ); /* ウィンドウ内でのYes/No確認 */ extern int w_ok(int ,int ,int ,int ); /* ウィンドウ内でのOk確認 */ extern int w_msset(WIN *, MENU); /* マウス位置を選択項目へ */ /*------------------------- WDIR98.C ----------------*/ extern int getffb(FNAME *); /* ファイル名および属性の呼び出し */ extern int sel_fnam(WIN *,MENU *,FNAME *,FNAME **); /* ファイル名の選択 */ extern int wget_fnam(char *,int,int,int,int,char *,char *,char *,int); /* ウィンドウによるファイル名選択 */ /*------------------------- MOUSE98.C -----------------*/ extern int ms_init(void); /* マウスの初期化 */ extern int mouse(int); /* マウス表示のon/off */ extern int ms_get(int *,int *,int *,int *); /* マウス情報の取得 */ extern void ms_set(int,int); /*マウス位置の指定 */ extern void ms_stle(int,int,uchar *); /* マウス形状と中心点の指定 */ extern void ms_crs(int); /* 登録マウス形状の指定 */ extern void atr_inv(int ,int ); /* テキスト属性の反転 */ extern void ms_flash(); /* マウスボタンが離れるまで待つ */ extern void ms_move(int,int *,int *,int,int); /* カーソルキーによるマウス移動 */ extern void ms_move10(int,int *,int *,int,int); /* テンキーによるマウス移動 */ /*-------------------------- LPR98.C -----------------*/ extern int lp_init(void); /* プリンタの初期化 */ extern void lp_kjin(); /* 漢字モードへ */ extern void lp_kjout(); /* アスキーモードへ */ extern int lputch(char); /* 1文字のプリンタ出力 */ extern void lputcrlf(void); /* CR/LFのプリンタ出力 */ extern void lpage(void); /* ページ送りのプリンタ出力 */ extern void lp_putch( uchar ); /* 1文字のプリンタ出力(改行対応) */ extern void lkput( unsigned int ); /* 漢字1文字のプリンタ出力 */ extern int lputs(char *); /* 文字列のプリンタ出力 */ extern int lp_puts( char * ); /* 文字列のプリンタ出力(漢字対応) */ extern int lputsn(char *,int); /* 文字列のプリンタ出力(字数指定) */ /*--------------------------- RSIO98.C ---------------*/ extern int com_init(uchar *,int,int); /* RS232Cの初期化 */ extern unsigned com_recvsize(void); /* 受信データサイズの取得 */ extern unsigned com_send(uchar); /* 1文字データ送信 */ extern unsigned com_recv(void); /* 1文字データ受信 */ extern unsigned com_sioout(int); /* 通信コマンド出力 */ extern unsigned com_sioin(void); /* 通信ステータスの取得 */ extern void com_flash(int); /* 通信バッファーの吐き出し */ extern int com_sends(char *,int); /* 文字列の送信 */ extern int com_resvs(char *,int); /* 文字列の受信 */ /*--------------------------- GGDC98.C ------------------*/ extern void gvr_start(); /* GDCの表示を開始する */ extern void gvr_stop(); /* GDCの表示を中止する */ extern void gvr_screen(int ,int ); /* 表示およびアクティブ画面の設定 */ extern void ptn_get(int ,uchar * ); /* 漢字パターンの取得 */ extern void gvr_cls(int ,int ,int ); /* グラフィックメモリの消去 */ extern void gvr_put(uchar * ,int ,int ); /*文字列データをRGBに描画 */ extern void gvr_get(int ,int ,int ,int ,char * ); /* RGBデータを文字列に格納 */ extern void gvr_set(uchar *ptn, int gx, int gy, int col ); /* 指定色でパターンを描画 */ extern void gvr_pfill(int ,int ,int ,int ,uint ,uint ,uint ); /* 四辺形指定パターン塗りつぶし */ extern void gvr_bxor(int ,int ,int ,int ,int ,int ); /* 四辺形エリアの反転 */ extern void gvr_kput(uint ,int ,int ,int ); /* 漢字パターンの出力 */ extern void gvr_bfill(int ,int ,int ,int ,int ); /* 色指定4辺形塗りつぶし(ドット) */ extern void vr_mkptn(uchar *,uchar * ); /* ビットシフトパターンの作成 */ extern void gvr_shift(char * ,int ); /* ビットシフトの実行 */ extern void gvr_lset(char *,int ,int ,int ); /* 色指定パターン描画(ドット) */ extern void gvr_putm(char *,char *,char *,char *,int ,int ); /* マスクパターン付き描画(ドット) */ extern void auto_msk(char *,char *,char *,char * ); /* マスクパターンの自動作成 */ /*-------------------------- GGDC98.C -------------------*/ extern void gdc_start(); /* GDCの表示を開始する */ extern void gdc_stop(); /* GDCの表示を中止する */ extern void gdc_screen(int ,int ); /* 表示およびアクティブ画面の設定 */ extern void gdc_cls(); /* 全画面消去(GDCによる) */ extern void gdc_ltype(uint ); /* 描画線パターンの指定 */ extern void gdc_pset(int ,int ,int ); /* 点のプロット */ extern void gdc_line0(int ,int ,int ,int ,int ,int ); /* 描画モード指定付き直線描画 */ extern void gdc_line(int ,int ,int ,int ,int ); /* 直線の描画 */ extern void gdc_circle0(int ,int ,int ,int ,int ); /* 描画モード指定付き円描画 */ extern void gdc_circle(int ,int ,int ,int ); /* 円描画 */ extern void gdc_bline0(int ,int ,int ,int ,int ,int ); /* 描画モード指定付き四辺形描画 */ extern void gdc_bline(int ,int ,int ,int ,int ); /* 四辺形描画 */ /*-------------------------- CONS98.H -----------------*/ /*** 画面表示関係マクロ定義 ***/ #define LOCATE(x,y) gotoxy((x)+1,(y)+1) #define CLS() printf("\x1b[2J") #define HOME() putchar(0x1e) #define BEEP() putchar(0x07) #define WIDTH(x) (x==20)?printf("\x1b[>3h"):printf("\x1b[>3l") #define CONSOLE(x) (x==0)?printf("\x1b[>1h"):printf("\x1b[>1l") #define CRS_ON() printf("\x1b[>5l") #define CRS_OFF() printf("\x1b[>5h") #define PUSH_CRS() printf("\x1b[s") #define POP_CRS() printf("\x1b[u") /*** スキャンコード ***/ #define CW_ESC 0x001b #define CW_CR 0x1c0d #define CW_TAB 0x0f09 #define CW_BS 0x0e08 #define CW_SPACE 0x3420 /*----- (上位バイトのみ)------*/ #define C_ESC 0x0000 #define C_CR 0x1c00 #define C_UP 0x3a00 #define C_DOWN 0x3d00 #define C_RIGHT 0x3c00 #define C_LEFT 0x3b00 #define C_ROLLUP 0x3600 #define C_ROLLDOWN 0x3700 #define C_TAB 0x0f00 #define C_BS 0x0e00 #define C_INS 0x3800 #define C_DEL 0x3900 #define C_YES 0x1500 /* 'y' key */ #define C_NO 0x2e00 /* 'n' key */ #define C_SPACE 0x3400 /**** テンキー ****/ #define C_HOME 0x3e00 #define C_CLR 0xae00 #define C_HELP 0x3f00 #define C_TEN0 0x4e00 #define C_TEN1 0x4a00 #define C_TEN2 0x4b00 #define C_TEN3 0x4c00 #define C_TEN4 0x4600 #define C_TEN5 0x4700 #define C_TEN6 0x4800 #define C_TEN7 0x4200 #define C_TEN8 0x4300 #define C_TEN9 0x4400 #define C_TEN_M 0x4000 #define C_TEN_S 0x4100 #define C_TEN_A 0x4500 #define C_TEN_P 0x4900 #define C_TEN_E 0x4d00 #define C_TEN_C 0x4f00 #define C_TEN_D 0x5000 /*** ファンクションキー ***/ #define C_F1 0x6200 #define C_F2 0x6300 #define C_F3 0x6400 #define C_F4 0x6500 #define C_F5 0x6600 #define C_F6 0x6700 #define C_F7 0x6800 #define C_F8 0x6900 #define C_F9 0x6a00 #define C_F10 0x6b00 /*** ファンクションキー(シフト) ***/ #define CS_F1 0x8200 #define CS_F2 0x8300 #define CS_F3 0x8400 #define CS_F4 0x8500 #define CS_F5 0x8600 #define CS_F6 0x8700 #define CS_F7 0x8800 #define CS_F8 0x8900 #define CS_F9 0x8a00 #define CS_F10 0x8b00 /*** ファンクションキー(コントロール) ***/ #define CC_F1 0x9200 #define CC_F2 0x9300 #define CC_F3 0x9400 #define CC_F4 0x9500 #define CC_F5 0x9600 #define CC_F6 0x9700 #define CC_F7 0x9800 #define CC_F8 0x9900 #define CC_F9 0x9a00 #define CC_F10 0x9b00 /*** 拡張ファンクションキー ***/ #define C_VF1 0x5200 #define C_VF2 0x5300 #define C_VF3 0x5400 #define C_VF4 0x5500 #define C_VF5 0x5600 #define CS_VF1 0xC200 #define CS_VF2 0xC300 #define CS_VF3 0xC400 #define CS_VF4 0xC500 #define CS_VF5 0xC600 #define CC_VF1 0xD200 #define CC_VF2 0xD300 #define CC_VF3 0xD400 #define CC_VF4 0xD500 #define CC_VF5 0xD600 /*** 変換ファンクション ***/ #define C_XFER 0x3500 #define CS_XFER 0xa500 #define CC_XFER 0xb500 #define C_NFER 0x5100 #define CS_NFER 0xa100 #define CC_NFER 0xb100 /*** getch取得コード ***/ #define K_ESC 0x1b #define K_CR 0x0d #define K_UP 0x0b #define K_DOWN 0x09 #define K_RIGHT 0x0c #define K_LEFT 0x08 #define K_TAB 0x09 #define K_BS 0x08 /* K_LEFTと同じ */ #define K_INS 0x50 /* 'ESC'+'P' */ #define K_DEL 0x44 /* 'ESC'+'D' */