ページへ戻る

− Links

 印刷 

GUIGUI01​/man0002 のバックアップソース(No.10) :: OSASK計画

osaskwiki:GUIGUI01/man0002 のバックアップソース(No.10)

« Prev[4]  Next »[5]
* 「ぐいぐい01」のAPI(1)
-(by [[K]], 2008.11.03)
*** 註
-一応API番号順です。
*** 通常API
-[000000] なにもしない。NOP。
-[000001] リマーク。skip。
-[000002] システムワークエリアの指定。
-[000003] APIパケット終端。
-[000004] void g01_exit_success()
--正常終了。
-[000004] void g01_exit_failure_int32(int i)
--異常終了。終了コードとして整数を一つシステムに返す。APIとしては32bit整数として受け取るが、OSによっては下位のビットしか伝わらないかもしれない。
-[000005] void g01_putc(int c)
--一文字表示。
-[000005] void g01_puts_c0(文字列定数 len, 文字列定数 str)
--lenをgh4で書いて使う。例 g01_puts_c0("¥x8d", "hello, world¥n");
--意味がよく分からないなら、下のg01_puts_c255()を使うほうがいいだろう。
-[000005] void g01_puts_c255(文字列定数 len, 文字列定数 str)
--255バイト以下の文字列をコンソールに出力。
--g01_puts_c255("¥x0d", "hello, world¥n"); のように使う。

*** ジャンクAPI   すべて[ffffff]のサブファンクション
//*** ジャンクAPI   すべて[3ffffff]のサブファンクション -- commented_out by K, 2008.11.19
-[000000] リザーブ。
-[000001] void jg01_getcmdlin(int n, char *p, int *len)
--コマンドライン文字列取得。現状ではコマンドライン全体が無条件に見える。将来的には、この仕様は廃止され、コマンドライン全体を見る方法はなくなる。
--仕様が廃止された後でも、このAPIを使ったアプリを救済するために、このコマンドラインで渡せる文字列を指定する方法が提供される(詳細は未定だが、例: >efg01 app.g01 jg01_cmdlin:"abc def ghi")。lenには実際の長さが入る。nが*lenよりも小さい場合、文字列はnまでしか格納されない。
-[000002] void jg01_fclose(int slot)
--ファイルのクローズ。クローズはエラーにならない。というか、エラーの場合は何もしない。アプリの終了時にはオープンしたファイルは正しくクローズされるので、終了処理直前のクローズは省略してよい。
--API番号の都合で逆になっているが、まずはfopenを読むこと。
-[000003] void jg01_fopen(int mode, int slot, int pathlen, char *path)
--ファイルのオープン。オープンに成功するか失敗するまで帰ってこない(OSASKのような非同期式ではない・・・手抜きなので)。失敗した場合、slotは無効状態になる。
--modeのbit0-2 : 0=タスクローカル, 1=ユーザ, 2=マシンローカル, 3=ネットワーク
---通常はとりあえず1にしておけばよい。
--modeのbit3 : ライトするかどうか(1:でライトもする)
--以下はライトしない場合
---modeのbit4 : 0のとき、オープンに先立って同名のファイルがない場合にエラー
--以下はライトもする場合
---modeのbit4 : 1のとき、オープン後にファイルサイズを0にする
---modeのbit5 : 1のとき、オープン後にファイルポインタを末尾に移動(bit4=0のとき)
---modeのbit5 : 1のとき、オープンに先立って同名のファイルがある場合にエラー(bit4=1のとき)
--テキストモードなどというものはない。「ぐいぐい01」での標準的なテキストはCRが入らないものとするが、各アプリにおいてこれをあえて出力するオプションがあってもよい。そしてCRを無視することができない(=CRがあると誤動作する)テキストツールがあったとしても出来がよければ[[K]]推奨はでる。
--slotは4~63が使用可能。
-[000004] void jg01_fread(int slot, int n, char *p, int *len)
--ファイルからの読み込み。*lenに読み込んだバイト数が返る。0が返るとEOF。-1だとエラー。slotがファイルオープンに失敗した状態でこのAPIを呼び出してもよい。その場合はなんら悪さをすることもなく*lenに-1が返るだけである。
-[000004] void jg01_fwrite(int slot, int n, char *p, int *len)
--ファイルへの書き込み。サブファンクション番号がfreadと同じなのはミスではない(オプションコードで見分ける)。*lenに書き込めたバイト数が返る。-1だとエラー。slotがファイルオープンに失敗した状態でこのAPIを呼び出してもよい。その場合はなんら悪さをすることもなく*lenに-1が返るだけである。
-[000005] void jg01_fseek32(int mode, int slot, int ofs, int *pos)
--ファイルポインタの移動・取得・ファイルサイズ変更。API的には32bit制限があるわけではないが、C言語ライブラリ化にあたって32bitに限定した。
-[000006] void jg01_testslot0(int slot, char *p)
--slotの状態を返す。-1がslot値無効、0が未使用・無効、1がコンソール、2がファイル。
-[000007] void jg01_tekgetsize(char *p, int *dstsiz)
--tek展開関係。詳細省略。srcsizフィールドがないが、pからは少なくとも32バイトくらいはアクセスできるようにしておくこと。
-[000007] void jg01_tekdecomp(int srcsiz, char *p, char *q, int *retcod)
--tek展開関係。詳細省略。
-[000008] void jg01_malloc(int bytes, void **p)
--システムからメモリをもらう。これはbss領域の中を切り分けてもらうなどではなく、それとは別に追加でもらうメモリである。失敗する可能性は十分にあり、失敗すると*pに-1が返される。
-[000009] void jg01_mfree(int bytes, void *p)
--jg01_malloc()でもらったメモリを返す。部分的に返すこともできるし、bssの一部などもらってないメモリを返すこともできる。pが-1だと何もしない。アプリの終了時にはメモリは勝手に返されるので、終了処理中にmfreeする必要はない。
--ちなみにefg01のひどい手抜き実装だと、mfreeが何もしないということもありうる(苦笑)。

« Prev[4]  Next »[5]