X680x0 Ko-Window Terminal ライブラリ MiniTERM mtmlib.a Version 2.03 1995 11/23 小笠原博之 Ko-Window 上でターミナル画面をエミュレートするライブラリ群です。かつC言語の 標準的な入出力関数をサポートし、エスケープシーケンスに完全に対応しているので、 ウィンドウの知識なしに簡単にアプリケーションを作ることができる夢のライブラリ です。UNIX のスクリーンエディタ等 termcap を使うものはほとんどそのまま表示出 力ができます。その MiniTERM ライブラリを3年ぶりに大幅に書き換えより強力にし ました。 ・KX_Term20で改良を重ねた強力なエスケープシーケンス処理ルーチンを採用 ・ターミナルエミュレーション部をライブラリとして独立させ、通信ソフト等の表示 として簡単に使えるようにした。 ・ターミナルカーソル処理を標準で持たせたため、アプリ側での負担がより無くなった 具体的には以下の3つのライブラリを含んでいます。 ・MTm: ターミナルエミュレーション表示ライブラリ ・MTa: MTm を使ったウィンドウ描画とイベント開放のサブルーチン化 ・MTs: MTa+MTm を使いC言語の標準関数をエミュレーション ●いきなりサンプル --------- prog.c ----------------------------------------------------------- #include #include /* <===特別なのはこの1行だけ */ main( argc, argv ) char **argv; { for(;;){ char buf[96]; printf( "値を入力して下さい " ); gets( buf ); if( !*buf ) break; printf("\nその数は16進数だとずばり %x です!\n\n", atoi(buf) ); } } ---------------------------------------------------------------------------- これは極普通のありふれた C 言語のプログラムですが、これを mtmlib.a を使うと 次のようにしてコンパイルできます。(XCv2の場合は floatfnc.lも必要) gcc prog.c -o prog.win parts.a winop.a -lcor -lmtm -lw -liocs mtm_conf.c すると prog.win ができ、これはそのままウィンドウ上で走ります。マウスによる Clip & Paste やポップアップメニューでフォントサイズ変換、等の操作もできます。 ●付属ファイル MiniTERM.doc このドキュメント MiniTERM.man ライブラリマニュアル mtmlib.a ライブラリファイル mtm_conf.c カスタマイズ用ファイル mtm_stdio.h 標準入出力エミュレーションヘッダ mtslib.h MTsLIB のヘッダ mtalib.h MTaLIB のヘッダ mtmlib.h MTmLIB のヘッダ smpl/*.* サンプルプログラム ●インストール Ko-Window のプログラム開発環境はすでに揃っているものとします。付属の mtmlib.a を環境変数 lib で指定したディレクトリに、 mtm_stdio.h, mtslib.h, mtalib.h, mtmlib.h の4つを、環境変数 include で指定したディレクトリにコピーしておいて下さい。ま たコンパイル時は mtm_conf.c も必要になります。これはそれぞれのアプリケーショ ンをコンパイルする時に、コピーして書き換えて使います。 ●使い方 (1) ウィンドウ上で走らせたいプログラム全部に mtm_stdio.h をインクルードしま す。(次の行を追加する) #include (2) mtm_conf.c をカレントディレクトリにコピーし、必要なら中身を書き換えます。 (3) コンパイル時に mtm_conf.c を加え、次の5本のライブラリをリンクに追加しま す。できるだけこの順番で与えて下さい。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ parts.a winop.a corlib.a mtmlib.a wlib.a (4) 出力された実行ファイルの拡張子は「.win」に変更します。 詳しい関数の使い方は、MiniTERM.man を参照して下さい。 ●注意 全てのアプリケーションが必ず上記の方法で走るようになるとは限りません。走ら ない場合は、ある程度C言語の知識を必要とすることでしょう。 ●問題回避について リンク時に「in globalarg.o MTaTerm.o globalarg.o」というエラーが出る場合は mtmlib.a を wlib.a より先にリンクして下さい。また clib.a/clib.l は必ず wlib.a よりあとにリンクして下さい。 ●ウィンドウ上での操作 マウスカーソルがウィンドウ上にある場合のみキー操作可能です。マウスでは、左 ボタンで任意の範囲をクリップボードへ取り込むことができます。右ボタンではポッ プアップメニューによって、クリップボードからの取り込みとフォントサイズの変更 ができます。 起動時には以下のスイッチが有効です。アプリケーション側には、これらのスイッ チを除いたコマンド列が渡されます。これらのデフォルト値は mtm_conf.c で設定で きます。 -x 起動時のウィンドウ表示位置X(ドット座標) -y 起動時のウィンドウ表示位置Y(ドット座標) -c ターミナルの桁数 -l ターミナルの行数 -f フォントサイズの指定(10,12,16,24) -a 表示文字のアトリビュート -t ターミナルフラグを指定します bit0 0:BEEPなし/1:あり bit1 0:Human/1:xterm&vt bit2 0:最適化あり/1:最適化なし -m アプリケーションの使用するヒープ領域サイズを指定しま す(byte単位) 例 128Kbyte確保する -m131072 ただし '-' 1文字だけ書いた場合は、それ以後の引数は無条件に全部アプリケーショ ンに渡されます。例えばアプリケーションで -f が特別な意味を持ち、コマンドから 与えたい場合は「smpl.win -f12 - -f」のようにすることで渡すことができます。(こ の時アプリケーションには「-f」だけが渡されます。もちろん、'-' 自身を渡したい 場合は「smpl.win - -」とします。 ●サンプル smpl の下には mtmlib を使ったサンプルプログラムが納められています。参考に して下さい。 ●メモリ アプリケーション用のスタック領域は、ヒープ領域から確保されます。そのため、 mtm_conf.c でヒープ領域サイズを設定する場合、必ずスタックサイズより大きな値 を書いておいて下さい。 ●イベントドリブン 他のプロセスへ制御が渡されるのは、getch(), getchar(), gets() 実行時のキー入 力待ち状態、sleep(), usleep() の時間待ち行った場合です。キー入力からキー入力 までが時間のかかるプログラムでは、その間他の処理がストップします。(koforkによ るバックグラウンドプロセスは別) ●エスケープシーケンス 表示出力には X68K と IOCS.X のエスケープシーケンスのすべて、そしてその他か なりのシーケンスを認識します。設定次第では vt100 モードも可能です。ほとんど ターミナルソフトも作成可能です。(ただし表示文字アトリビュートは Redraw 時に 保存されません) 詳しくは MiniTERM.man の MTmLIB を参照して下さい。 通信ソフト KX_Term20 と互換性があるので、KX_Term20 付属の termcap が使えま す。 ●描画最適化 すでに表示しているターミナルイメージと表示文字列が同じ場合は、表示内容を勝 手に切り詰めて表示を行います。例えばすでにクリアされている画面にスペースだけ の文字列を表示しても文字列の描画は行わず、カーソルを進めるだけになります。た だしこの最適化は日本語表示の時やバッファリングなしの場合は行われません。また この機能はターミナルフラグの bit2 で抑制することができます。 ●著作権 この MiniTERM の著作権は作者が保持します。ただしこれは、このプログラムの利 用や配布を制限するものではありません。このプログラムの使用に対して無保証であ ることを前提に、単体での自由配布および、これを使用したプログラムの配布が可能 です。ただし、必ず使用した MiniTERM のバージョンをドキュメントに明記しておい て下さい。 ●連絡先 小笠原博之 oga@dgw.yz.yamagata-u.ac.jp SPS-NET: SPS0783 COR. DenDenNET: DEN0006 COR. -- v2.00 1995/02/04 新MiniTERM公開 v2.01 開発セットに標準添付 v2.02 +13時にlibc版を標準で付属するようにした v2.03 1995/11/23 usleepのデバッグ他