Ko-Window プログラミングと C言語ライブラリの関係 Ko-Window のプログラミングには C言語のライブラリが必要不可欠となります。し かしウィンドウという性質から、使用できる関数とできない関数が存在します。 ●入出力 ウィンドウプログラムにおける入出力は、基本的にウィンドウサーバーを通さなけ ればなりません。 ・画面への表示出力 すべてサーバーの描画機能を使用して下さい。標準出力への出力関数など、 ウィンドウを通さない出力関数は使用してはいけません。 ・キー入力やマウス入力 サーバーからのイベント入力を使用します。標準入力から読み取る関数など、 ウィンドウを通さない入力は使用してはいけません。 ・ファイル入出力 C言語ライブラリがそのまま使用できます。ただし、高レベルのファイル操 作関数では内部で malloc()/free() を使用するため、ヒープ領域の設定が 必要になります。 ファイル名の管理は常にフルパスで行うようにして下さい。(もしくは各ア プリケーションが起動時のカレントディレクトリを保存する) Ko-Window の ようなマルチタスク環境では、カレントディレクトリはいつでも変更されて しまう可能性があり、一定ではないからです。(Human68k はカレントディレ クトリを OS 内部管理し、かつ1つしか持たないため) もしフルパスで保存していなければ、テキストエディタを起動しても途中で カレントディレクトリが変わってしまい、セーブしたら別の場所に書き込ん でしまった、なんてことが起こります。そのファイルのフルパスを得る関数 として PathGetFullName() が用意されているのでぜひ使用して下さい。 ・その他デバイス ジョイスティック、音楽関係、RS-232C、などは、特にサーバーが管理して いないのでC言語レベルでそのまま使用することになります。 ●メモリ管理 メモリの確保と開放は、C言語ライブラリがそのまま使用できます。malloc/free で す。ただしあらかじめヒープ領域サイズを与えておかなければなりません。この制限 は最近軽減され、mm_alloc ライブラリ(mm_klib.a)を使用すれば自己拡張して動的な 消費メモリの変化について行けるようになりました。 ヒープ領域の管理はサーバーが行います。C言語のヒープメモリサイズを変更する ような関数(sbrk()等)は使用してはいけません。 ●シグナル C言語のシグナル関数 signal() 系は使用できません。Ko-Window の場合、元々イ ベントというシグナルによって駆動されているので、根本的にプログラミングスタイ ルが異なっているからです。 ●大域ジャンプ setjmp(), longjmp() を使った大域ジャンプは、保存したスタックフレームが固定 でない可能性があるため使用できません。 ●プロセスの起動 exec() 系のプロセス起動関数は使用できません。Ko-Window の場合は、プログラ ムの起動はすべて WindowLoadExec() を通す必要があります。 ●環境変数 Ko-Window の各アプリケーションは環境領域のコピーを持っていません。よって、 自分のプロセス内部の環境変数(Cライブラリ内部の変数)をアクセスしようとする関数 getenv()/setenv() を使用してはいけません。 代わりに KoWindowGetEvn() (親プロセスの変数を参照する) を用いるか、DOS CALL でそのまま親の環境を利用するか、自分でコピーを作ったのちアクセスするようにし て下さい。 ● DOS CALL / IOCS CALL サーバーの管理しているデバイス以外を扱う場合は、これらを直接使用することに なります。ただし、サーバーの管理と衝突するようなものは当然使用できません。も しどれが使えてどれが使えないのか判断がつかない時は、無理に使用しないのが無難 です。 ●その他 文字列操作、数値演算など、システムと無関係なライブラリ関数はもちろん使用し て構いません。 ● MiniTERM (mtmlib) について MiniTERM(mtmlib) は、C言語の通常のプログラミングスタイルのままプログラムが 組めるようになる特殊なライブラリです。このライブラリを使っている限りにおいて は、Ko-Window プログラミング上使える、使えない、の判定は必ずしも当てはまりま せん。 のマークがついた部分は MiniTERM 使用時でも注意すべき項目として読 んで下さい。 ---- 1995 11/16 初期公開版 小笠原博之 oga@dgw.yz.yamagata-u.ac.jp DenDenNET: DEN0006 COR.