こんばんは、川合です。今日の報告です。 今日はsrc30のリリースをしようと思いつつ、GO_lib.hまわりの記述 に熱中してしまい、結局src30は準備できませんでした。すみません。 GO_lib.hについては、だんだん仕様がはっきりしてきました。GO-C やGO-C++のサポートのためのプロトタイプ宣言は、以下のようになっ ています。 typedef unsigned char UCHAR; typedef unsigned int UINT; typedef UINT size_t; typedef struct GO_STR_FILE { UINT size; UCHAR *p0; UINT linkcount; void *p_sys; } GO_FILE; void cpp0(struct GO_STR_CPP0_INTERFACE *interface); void cc1(struct GO_STR_CC1_INTERFACE *interface); void cc1plus(struct GO_STR_CC1_INTERFACE *interface); GO_FILE *GO_open(struct GO_STR_DIR *dir, const UCHAR *name); void GO_close(GO_FILE *gfp); UCHAR *GO_stepdir(struct GO_STR_DIR **dir, const UCHAR *path); int GO_isequdir(struct GO_STR_DIR *dir0, struct GO_STR_DIR *dir1); 各種のINTERFACE構造体は宣言が長いのでここでは省略しています。 ファイルを操作する関数群は、わずかに4つとなりました。GO_open() でファイルをオープンしますが、オープンするとすぐにメモリマップさ れ(もしくはバッファを確保して読み込まれ)、sizeやp0にしかるべき 値がセットされます。GO_close()はそのクローズです。 GO_stepdir()はパスをたどる関数で(パスのディレクトリ部分とファ イル名部分を分離する機能もあり)、GO_isequdir()は与えられた2つの ディレクトリが同じ場所かどうかを検出するためのものです。 これらの4関数だけを入出力関数として、<stdio.h>を書いていくわけ です。バッファを用意する必要はなく、管理しないでEOFに達したかど うかだけを気にすればいいので、結構簡単そうです。ungetc()なんて、 読み出された文字しか押し戻さないと想定するなら、リードポインタを デクリメントするだけです。全体としてかなりシンプルなライブラリに なりそうです。 --- 明日こそsrc30をリリースしてから、GOの続きをやることにします。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! imasy.org Homepage http://www.imasy.org/~kawai/