Ko-Window MiniTERM ライブラリ mtmlib.a Version 2.03 1991-1995 小笠原博之(COR.) ● MTs MiniTERM 標準入出力エミュレーションライブラリ MiniTERM でもっとも上位レベルにあるライブラリです。MTaLIB と MTmLIB を使い、 C言語の通常の入出力関数のうち代表的なものを Ko-Window 上でエミュレートし、ウィ ンドウとして表示を行います。標準的なプログラムであれば、ヘッダ mtm_stdio.h を 追加し、このライブラリをリンクするだけでウィンドウプログラムになります。 対応している関数は以下の通り。 int getch() ---------------------------------------------------------------------------- 直接1文字入力します。バッファリングはなく、キーコードは直接渡されます。 ---------------------------------------------------------------------------- int getchar() ---------------------------------------------------------------------------- 入力ストリームから1文字入力します。 ---------------------------------------------------------------------------- char *gets( buf ) ---------------------------------------------------------------------------- char *buf; 入力バッファ バッファに1行入力します。改行は含まれません。 ---------------------------------------------------------------------------- int putch( code ) ---------------------------------------------------------------------------- int code; 出力文字コード 直接ターミナル部に文字を出力します。putchar() と違い、改行コード変換(LF -> CRLF)は行いません。行バッファリングします。 ---------------------------------------------------------------------------- int putchar( code ) ---------------------------------------------------------------------------- int code; 出力文字コード 1文字を表示出力します。行バッファリングします。 ---------------------------------------------------------------------------- int puts( str ) ---------------------------------------------------------------------------- char *str; 表示文字列 文字列を表示出力します。最後に改行がつきます。 ---------------------------------------------------------------------------- int printf( fmt, .. ) ---------------------------------------------------------------------------- char *fmt; フォーマット文字列 フォーマット付きの表示出力を行います。行バッファリングします。 ---------------------------------------------------------------------------- int fprintf( fp, fmt, .. ) ---------------------------------------------------------------------------- FILE *fp; char *fmt; フォーマット文字列 フォーマット付き表示出力です。fp = stdout/stderr の場合ウィンドウに表示し ます。 ---------------------------------------------------------------------------- int fputc( code, fp ) ---------------------------------------------------------------------------- int code; 出力文字コード FILE *fp; 1文字出力です。fp = stdout/stderr の場合ウィンドウに表示します。 ---------------------------------------------------------------------------- int putc( int, FILE* ) ---------------------------------------------------------------------------- int code; 出力文字コード FILE *fp; 1文字出力です。fp = stdout/stderr の場合ウィンドウに表示します。 ---------------------------------------------------------------------------- int fputs( str, fp ) ---------------------------------------------------------------------------- char *str; 出力文字列 FILE *fp; 文字列出力です。fp = stdout/stderr の場合ウィンドウに表示します。 ---------------------------------------------------------------------------- char *fgets( buf, len, fp ) ---------------------------------------------------------------------------- char *buf; 入力バッファ int len; 入力バッファの最大長 FILE *fp; 文字列1行入力をします。fp = stdin の場合ウィンドウが処理します。 ---------------------------------------------------------------------------- int fwrite( buf, size, num, fp ) ---------------------------------------------------------------------------- char *buf; 出力バッファ int size; データサイズ int num; データ数 FILE *fp; データを任意バイト出力します。fp = stdout/stdin の場合ウィンドウに表示しま す。 ---------------------------------------------------------------------------- int write( fn, buf, size ) ---------------------------------------------------------------------------- int fn; char *buf; 出力バッファ int size; データサイズ データを任意バイト出力します。stdout/stdin の場合ウィンドウに表示します。 ---------------------------------------------------------------------------- int fflush( fp ) ---------------------------------------------------------------------------- FILE *fp; 出力バッファをフラッシュします。fp = stdout の場合、ウィンドウの出力関数の バッファをフラッシュします。すべてのウィンドウ出力は行バッファリングされて いるため、最後に改行等の無いデータを出力する場合はこのバッファフラッシュを 併用して下さい。 ---------------------------------------------------------------------------- int exit( code ) ---------------------------------------------------------------------------- int code; プログラムを終了します。code の値は無視されます。そのプログラムがオープンし たファイルハンドルが、この終了時にクローズされないことに注意して下さい。 ---------------------------------------------------------------------------- int sleep( time ) ---------------------------------------------------------------------------- int time; time 秒間 sleep します。time は秒単位です。 ---------------------------------------------------------------------------- int usleep( time ) ---------------------------------------------------------------------------- int time; time 時間 sleep します。time は 1/1000000 秒単位です。(実際は1/100ステップ) ---------------------------------------------------------------------------- int signal( signal, exec ) ---------------------------------------------------------------------------- int signal; int (*exec)(); signal が tSIGTERM の場合、ウィンドウクローズ時に呼び出されるルーチンを定 義します。これは処理中にクローズボタンがクリックされたり、サーバーが終了し た場合等、exit() 以外の要因でウィンドウが終了されてしまう場合に呼び出され ます。exec が SIG_IGN, SIG_DFG の場合は終了時に何もしません(クローズそのも のを無視することはできない)。signal がそれ以外の場合は標準の signal を設定 します。 ---------------------------------------------------------------------------- 注意: すべて出力先がウィンドウの場合戻り値は不定になります。 ● MTa ウィンドウイベント開放エミュレーションライブラリ MTm ターミナルライブラリを使用して固定ターミナルウィンドウを開き、かつキー 入力待ちや時間待ち時のイベント開放のエミュレーションを行います。イベント待ち 状態をサブルーチン呼び出しできるようにするためのものです。 void MTaExit() ---------------------------------------------------------------------------- ウィンドウをクローズし、プログラムを終了します。exit() のエミュレーション 用です。 ---------------------------------------------------------------------------- int MTaGetc() ---------------------------------------------------------------------------- 1文字キー入力します。エコーバックなしの入力ルーチンです。 ---------------------------------------------------------------------------- void MTaGets( buf, max ) ---------------------------------------------------------------------------- char *buf; 入力バッファ int max; 最大入力文字数 parts.a の Input ライブラリを使用した1行入力を行います。buf は入力バッファ で max は最大入力文字数です。 ---------------------------------------------------------------------------- void MTaInterval( time ) ---------------------------------------------------------------------------- int time; ウエイト時間 指定した時間ウエイトし、その間イベントを開放します。例えばループするような アプリケーションであっても、中にこの関数をはさんでおけば定期的にイベントを 他のプログラムにまわすことができるようになります。ただしウエイト中はキー入 力はできず、またキー入力待ち状態では時間待ちはできません。time は 1/100秒 単位で指定します。 ---------------------------------------------------------------------------- int MTaKeyInterval( time ) ---------------------------------------------------------------------------- int time; 最大ウエイト時間 指定した時間ウエイトし、その間イベントを開放します。ただしキー入力があれば ウエイトを中断し、入力されたキーコードを返します。時間経過で戻った場合は 0 を返します。time は 1/100秒単位で指定します。 ---------------------------------------------------------------------------- void *MTaSignal( signal, exec ) ---------------------------------------------------------------------------- int signal; 割り込みの種類 int (*exec)(); 呼び出されるルーチン 割り込みルーチンを登録します。登録できる割り込みには以下の種類があります。 戻り値は前に設定してあった呼び出しルーチンです。exec に NULL を設定すると その割り込みの呼び出しは行われません。割り込みルーチンには WindowID と EventInfo* が渡されます。 MTa_SIGCLOSE ウィンドウが強制クローズされる時に呼び出されます。 MTaExit() で終了した場合は呼び出しません。 MTa_SIGUSER ユーザーイベントをフックします。割り込みルーチンが TRUE を返すとデフォルトルーチンは呼び出されませ。 MTa_SIGMOUSE マウスボタンが押された時の処理をフックします。割り込 みルーチンが TRUE を返すとデフォルトルーチンは呼び出 されませ。 ---------------------------------------------------------------------------- void MTaMain( argc, argv ) ---------------------------------------------------------------------------- int argv; char **argc; これはライブラリではなく、main() のエミュレーション用です。MTaLIB を使う場 合は、ユーザーアプリケーションの main() を、この MTaMain() に置き換える必 要があります。(MTsLIB を使う場合は、ヘッダで main -> MTaMain に置き換えて くれます) 起動時に MTaLIB がチェックするオプションスイッチは以下の通りです。 -x ウィンドウ起動位置X -y ウィンドウ起動位置Y -c ターミナルの桁数 -l ターミナルの行数 -f フォントサイズ(10,12,16,24) -a 表示文字のアトリビュート -s スクロール行数 -t ターミナルフラグの指定 -m ヒープサイズ(byte単位) もしこれらのスイッチが指定されている場合は、このスイッチを取り除いた引数並 びが MTaMain() に渡されます。なお '-' 1文字だけのスイッチが与えられた場合、 MTaLIB はそれ以後のスイッチは見ません。無条件で MTaMain() に渡されます。こ の時 '-' は取り除かれます。例えばアプリケーションで '-m' 等を使う場合は、 「smpl.win - -m」のようにして与えることで、MTaLIB による処理を抑制させるこ とができます。(MTaMainには smpl.win -m と渡される) ---------------------------------------------------------------------------- ・mtm_conf.c MTaLIB を使う場合は、各種カスタマイズのために mtm_conf.c をリンクする必要 があります。このファイルはそれぞれのアプリケーションに応じて書き換えて使用し て下さい。ソースファイルが1本きりの場合は、必要なシンボルを定義したのち include して使うこともできます。 ・グローバル変数 int MTaKeyParam; 直前に入力されたキーのコード int MTaShiftStat; 直前にキー入力された時のシフトキー状態 以下の変数は、起動時のデフォルトパラメータを保存しています。 int MTaSizeX; ウィンドウサイズ int MTaSizeY; ウィンドウサイズ int MTaFont; フォントサイズ int MTaAttr; 表示アトリビュート int MTaFlag; ターミナルフラグ int MTaScrollStep; スクロール行数 ● MTm ターミナルライブラリ ウィンドウ上でターミナルエミュレーション表示を行うためのライブラリです。テ キスト画面として使用でき、各種エスケープシーケンスを含めてターミナル機能をエ ミュレーションします。この MTm ライブラリは独立して使用できるため、通信ソフト の表示はこのライブラリだけで簡単に実現することができます。関数の種類は多くなっ ていますが、通常は MTmInit(), MTmTPutc(), MTmTPuts(), MTmFlush() だけで何でも できますし、すべての機能が使用できます。 void MTmInit() ---------------------------------------------------------------------------- ターミナルパラメータを初期化します。ターミナルルーチンを使用する場合は、最 初に必ず実行しておいて下さい。 ---------------------------------------------------------------------------- void MTmTPutc( c ) ---------------------------------------------------------------------------- int c; 表示文字コード 1文字カーソル位置に出力します。高レベルのターミナル出力関数です。各種特殊 コード処理を行います。通常文字の出力は改行コードが現れるか MTmFlush() を実 行するまでバッファリングされます。(コントロールコードは MTmDecEsc() へ、通 常文字は MTmVPutc() へ渡します) ---------------------------------------------------------------------------- void MTmTPuts( str ) ---------------------------------------------------------------------------- char *str; 表示文字列 文字列を出力します。処理内容は MTmTPutc() と同じです。 ---------------------------------------------------------------------------- void MTmDecEsc( c ) ---------------------------------------------------------------------------- int c; 表示文字コード エスケープシーケンスの展開処理を行います。エスケープシーケンスの実行、また はバッファリングなしの1文字直接出力として使用できます。 ---------------------------------------------------------------------------- void MTmVPutc( c ) ---------------------------------------------------------------------------- int c; 表示文字コード 1文字カーソル位置に出力します。エスケープシーケンスやコントロールコード、 TAB文字展開はありません。バッファリングします。行の右端かバッファがいっぱ いになるか MTmFlush() を実行するまで表示されません。カーソル位置は Flush するまで移動しません。行末や最下行での改行やスクロール等のターミナル処理や 漢字コード判定は行います。 ---------------------------------------------------------------------------- void MTmVPuts( str ) ---------------------------------------------------------------------------- char *str; 表示文字列 文字列を出力します。処理内容は MTmVPutc() と同じです。 ---------------------------------------------------------------------------- void MTmPutc( c ) ---------------------------------------------------------------------------- int c; 表示文字コード 1文字カーソル位置に出力します。ターミナル直接出力であり、エスケープシーケ ンスやコントロールコード、TAB文字展開、ウィンドウ右端での改行処理はありま せん。バッファリングします。バッファがいっぱいになるか MTmFlush() を実行す るまで表示されません。カーソル位置は Flush するまで移動しません。 ---------------------------------------------------------------------------- void MTmPuts( str ) ---------------------------------------------------------------------------- char *str; 表示文字列 文字列を出力します。処理内容は MTmPutc() と同じです。 ---------------------------------------------------------------------------- void MTmFlush() ---------------------------------------------------------------------------- 出力バッファの内容をウィンドウに実際に描画します。出力には MTmRPuts() を呼 び出しています。 ---------------------------------------------------------------------------- void MTmRPuts( str ) ---------------------------------------------------------------------------- char *str; 表示文字列 文字列を、ウィンドウに直接描画します。DrawSetSymbol() を使った RAW 出力で もっとも低レベルな描画です。バッファリングしません。 ---------------------------------------------------------------------------- void MTmCr() ---------------------------------------------------------------------------- 改行します。内部処理用なので通常は使用しないで下さい。 ---------------------------------------------------------------------------- void MTmClrLine( mode ) ---------------------------------------------------------------------------- int mode; 消去範囲 カーソル行を消去します。0:行末まで消去,1:行頭まで消去,2:行全部消去 ---------------------------------------------------------------------------- void MTmClrScreen( mode ) ---------------------------------------------------------------------------- int mode; 消去範囲 画面を消去します。0:最下行まで消去,1:最上行まで消去,2:全画面消去 ---------------------------------------------------------------------------- void MTmDelLine( line ) ---------------------------------------------------------------------------- int line; 消去行数 カーソル行から line 行だけ削除します。 ---------------------------------------------------------------------------- void MTmInsLine( line ) ---------------------------------------------------------------------------- int line; 挿入行数 カーソル位置に line 行挿入します。 ---------------------------------------------------------------------------- void MTmDelChar( num ) ---------------------------------------------------------------------------- int num; 削除文字数 カーソル位置の num 文字を削除します。 ---------------------------------------------------------------------------- void MTmInsChar( num ) ---------------------------------------------------------------------------- int num; 挿入文字数 カーソル位置に空白を num 文字挿入します。 ---------------------------------------------------------------------------- void MTmClrChar( num ) ---------------------------------------------------------------------------- int num; 消去文字数 カーソル位置に空白を num 文字書き込みます。 ---------------------------------------------------------------------------- void MTmScroll( line ) ---------------------------------------------------------------------------- int line; スクロール行数 スクロールします。 ---------------------------------------------------------------------------- void MTmScrollB( line ) ---------------------------------------------------------------------------- int line; スクロール行数 逆スクロールします。 ---------------------------------------------------------------------------- void MTmRScroll( start, end, line ) ---------------------------------------------------------------------------- int start; スクロール開始範囲 int end; スクロール範囲最終行+1 int line; スクロール行数 スクロールします。MTmScroll(),MTmDelLine() はこの関数を呼び出します ---------------------------------------------------------------------------- void MTmRScrollB( start, end, line ) ---------------------------------------------------------------------------- int start; スクロール開始範囲 int end; スクロール範囲最終行+1 int line; スクロール行数 逆スクロールします。MTmScrollB(),MTmInsLine() はこの関数を呼び出します ---------------------------------------------------------------------------- void MTmSetAttr( attr, font ) ---------------------------------------------------------------------------- int attr; 表示アトリビュート int font; フォントサイズ 表示する文字アトリビュートとフォントサイズを指定します。設定した値は次の描 画から有効になります。 ---------------------------------------------------------------------------- void MTmCursorOff() ---------------------------------------------------------------------------- ターミナルカーソルを消去します。 ---------------------------------------------------------------------------- void MTmCursorOn() ---------------------------------------------------------------------------- ターミナルカーソルを表示します。 ---------------------------------------------------------------------------- void MTmGoto( x, y ) ---------------------------------------------------------------------------- int x; カーソル移動先横座標 int y; カーソル移動先縦座標 カーソル位置を移動します。 ---------------------------------------------------------------------------- int MTmSetDraw( dbuf ) ---------------------------------------------------------------------------- DrawBuf *dbuf; 描画定義バッファ ターミナル表示を全部描き直す手順を描画バッファに格納します。設定した描画ス テップ数を返します。EventRedraw 用。 ---------------------------------------------------------------------------- void MTmRedraw( void ) ---------------------------------------------------------------------------- ターミナル表示を全部描き直します。EventRedraw 用です。 ---------------------------------------------------------------------------- ・グローバル変数 MTmInit() を実行する前に以下の値を変更、もしくは設定しておくことができます。 []= デフォルト値 <>= 設定可能範囲 int MTmScreenX; ウィンドウサイズX[80] <〜MTM_MAXSIZEX> int MTmScreenY; ウィンドウサイズY[25] <〜MTM_MAXSIZEY> int MTmScrollStep; 改行でスクロールする場合のスクロール幅[1] <1〜> int MTmFlag; ターミナル処理フラグ[0] bit0: ベルを鳴らす,鳴らさない bit1: vt100モード指定 bit2: 描画最適化を有効にする int MTwp; ターミナル描画に使用する WindowID ・注意 MTmLIB を単体で使用する場合 MTm ライブラリを単独で使用する場合は、MTaAttr を定義しておいて下さい。内容 は、ESC[m 時に初期化に使用するシステムアトリビュート値です。また MTwp は自 分で設定しておく必要があります。 <例> int MTaAttr= AttrDefault; リンクの順番は、MTmLIB だけ使う場合は多少異なります。MTaLIB のシンボルが wlib.a より先に参照されると MTaLIB がリンクされてしまうため、MTmLIB だけ使 いたい場合は wlib.a よりあとにリンクするようにして下さい。 ・MTm ライブラリで使用可能な制御コード (エスケープシーケンス) Human68k に上位互換 (IOCS.X 拡張シーケンスも含む) で、vt100 準拠に拡張して います。ただし、Human のシーケンスと vt100 で動作の異なるものが一部あるため完 全といえない部分があります。KX_Term20 付属の termcap がそのまま使用できます。 0x07 (CTRL-G)ベル (MTmFlagの bit0 が 1でないと鳴らない) 0x08 (CTRL-H)カーソル左移動(バックスペース)(行連結、スクロール無し) 0x09 (CTRL-I)タブ 0x0a (CTRL-J)カーソルを次の行へ(スクロールアップあり) 0x0b (CTRL-K)カーソルを前の行へ(スクロールダウン無し) 0x0c (CTRL-L)カーソルの右移動(次の行へ連結、スクロールアップあり) 0x0d (CTRL-M)カーソルを行頭へ 0x1a (CTRL-Z)画面全消去(カーソルはホームへ移動) 0x1b (CTRL-[)エスケープ ESC 0x1e (CTRL-^)カーソルを画面の右上(ホーム)に移動 ESC * 画面の全消去 ESC =YX X,Yはカーソル位置に' 'のオフセットを加えた文字 (Normalモード) ESC = 無視します (VT100 互換モード) ESC D カーソルの下移動、最下行の時はスクロール ESC E カーソルの下&行頭移動(改行)、最下行の時はスクロール ESC M カーソルの上移動、先頭行の時は逆スクロール ESC R カーソル行の削除(= ESC[M) ESC T カーソル行の消去(= ESC[2K) ESC Y カーソル以降画面消去(= ESC[J) ESC 7 カーソル位置と文字属性の保存(= ESC[s) ESC 8 カーソル位置と文字属性の復帰(= ESC[u) ESC c ターミナルパラメーターの初期化 ESC[0K カーソル位置から行末まで消去 ESC[1K 行頭からカーソル位置まで消去 ESC[2K カーソル行の消去 ESC[0J カーソル位置から画面最後まで消去 ESC[1J 画面先頭からカーソル位置まで消去 ESC[2J 画面の全消去 ESC[;H カーソル位置の設定 ESC[;f カーソル位置の設定 ESC[@ カーソル位置に個の空白挿入 ESC[P カーソル位置から文字削除 ESC[X カーソル位置から文字消去 ESC[A カーソル上移動 ESC[B カーソル下移動 ESC[C カーソル右移動 ESC[D カーソル左移動 ESC[M カーソル行から行削除 ESC[L カーソル行に行挿入 ESC[s カーソル位置と文字属性の保存 ESC[u カーソル位置と文字属性の復帰 ESC[;r スクロール範囲の指定 ESC[m 文字属性変更 0 .. 属性をデフォルトに戻します 1 .. 強調属性の反転 3 .. 半輝度(網かけ) 5 .. 強調属性の反転 7 .. 反転表示属性の反転 30 .. 黒 40 .. 黒反転 31 .. 灰色 41 .. 灰色反転 32 .. 白 42 .. 白反転 33 .. 白 43 .. 白反転 34 .. 黒強調 44 .. 黒強調反転 35 .. 灰色強調 45 .. 灰色強調反転 36 .. 白強調 46 .. 白強調反転 37 .. 白強調 47 .. 白強調反転 ESC[>5h カーソル表示 ESC[>5l カーソル表示禁止 ESC[?47h セーブした画面の復帰 ESC[?47l 画面内容をセーブする -- Copyright 1991-1995 Ogasawra Hiroyuki (COR.)