[OSASK 5242] Re: GO計画.

  こんばんは、川合です。今日の報告です。

  今日は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/


ML番号でジャンプ
ML単語検索