標準ライブラリ・モジュール [StdLibs]

目次


1. ● stdlibs モジュールの使用方法

コンパイラが提供する標準ライブラリに含まれない(または実装されていない) ANSI C の標準関数を使えるようにします。 本モジュールに含まれる関数を呼び出すプログラム・ソースは、 フルセットを提供するコンパイル環境でもそのままコンパイルできます。

使用方法

ユーザは、使用しているコンパイラ環境を選択し、モジュール設定します。 コンパイラに付属する標準ライブラリを使用しない場合は、 「未使用環境」を選択します。
選択方法は、モジュール設定のローカル設定と同じやり方です。

インクルードするヘッダを指定するには、stdlibs.h をインクルードする前 または優先ヘッダに、以下のような #define をします。
#define  STDLIBS_INCLUDE_STDIO_H    /* stdio.h をインクルード */

対応しているヘッダファイルがどれかについては、 stdlibs.h の内容を参照してください。

各種コンパイラの標準ライブラリ対応方法

組込み系のコンパイラでは、ファイルシステムが使えないために、 ファイル関係の標準ライブラリが実装されていないことがあります。 このような理由から、対応状況は関数ごとに次のように分類されます。

このような状況に対して、本モジュールは次のように対応しています。

プログラム終了ポイントについて

アセンブラ・デバッガの場合、標準ライブラリの exit 関数によって、 開発環境などに戻ることができませんので、StdX_exit 関数内の halt 命令によって CPU をストップさせています。 その場合、halt 命令の直前に exit ラベルが貼ってあるので そこにブレークポイントを貼ることをお勧めします。

スタートアップ・ルーチンで _main 関数の呼び出しが終了して スタートアップの終了の直前に以下のアセンブラコードを 入れると、exit にブレークポイントを貼るだけで 正常終了時も以上終了時もブレークさせることができるようになります。
    jal  _main
    mov  r10, r6   -- main の返り値を exit の引数にする
    mov  r0, r7    -- エラー時の exit と区別するため
    jal  exit      -- exit の呼び出し(戻ってきません)
    halt           -- 念のため


2. ● 標準ライブラリのメモ

_MAX_PATH : ファイルパス名を格納する領域のサイズ

int fputc( int c, FILE *stream );
int fputs( const char *string, FILE *stream );
char *fgets( char *string, int n, FILE *stream ); 1行読み込む
ファイルの終端に達すると NULL を返します。
改行文字が末尾に付くことがあります。
int fflush( FILE* stream ); Win98 では動作しません。 一度 fclose してエミュレートしてください。

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
fread の返り値は 読み込んだバイト数を byte とした byte / size の切り捨てです。 buffer には、EOF までの内容を読み込んでいます。
long ftell( FILE *stream ); ファイルポインタの現在位置を返す
int fseek( FILE *stream, long offset, int origin );
指定された位置にファイル ポインタを移動します。

(ファイル操作)
remove( char* fname ); <stdio.h>
_utime( unsigned char *filename, struct _utimbuf *times );更新日付の設定
ただし time_t times->actime, times->modtime;
_getcwd( s, _MAX_PATH ); カレントフォルダパス
標準関数の feof は、fgetc などで EOF を検出して初めてフラグが立ちます。


written by Masanori Toda from Jan.19.1999