/* logfile.h 汎用ファイル操作ライブラリ copyright (c) 1999- TaraChan */ #if !defined(__LOGFILE_H) #define __LOGFILE_H #include #include #include #include /*可変引数用*/ #include "stringxx.h" #define LOGFILE_H_LINE_SIZE 1024 #define LOGFILE_H_ENCODER "<>" #define LOGEOF "<><>" /*関数のプロトタイプ---------------------------------------------------------*/ int save_table(char *file,char **table,int x,int y); /* 【ファイルへデータを書き込む】  文字列配列tableを、x*yの表として、ファイルfileに書き込みます。  区切り文字は、FILE_H_ENCODERです。  ファイルの1行目には、x,yが書き込まれます。  戻り値は成功したときは0、失敗時はそれ以外を返します。 */ int load_table(char *file,char ***table,int *x,int *y); /* 【ファイルのデータを読み込む】  文字列配列tableに、save_tableで作成したファイルを読みこみます。  *x,*yに表の縦横の数が入ります。  char **(*table)は、callocで(*x)*(*y)の大きさがとられます。  (*table)[]には、文字列が入っていて、それらも動的に確保され た状態になっています。  戻り値は成功したときは0、失敗時はそれ以外を返します。 */ /* table[]は、それぞれ(char *)型です。 x=3,y=2では下のようになります。 ++++++++++++++++++++++++++++++++++ | table[0] | table[1] | table[2] | | table[3] | table[4] | table[5] | ++++++++++++++++++++++++++++++++++ load_fileでは、tableを(*table)に置き換えて 読んで下さい。 */ /* 以下の関数のlogとは、 1. char *型(文字列)の配列。 2. 各要素は、LOGFILE_H_ENCODERで区切られるデータの集合。 3. 最大行数を持ち、最大行を超えた分は古い行から消える。 4. 最終行は、ヌルポインタで示される。 という物です。 */ int add_log(char *log[],int max,...); /* 【ログに追加】  logに3要素目以降の因数を追加します。区切り文字は LOGFILE_H_ENCODERを使います。MAXは、LOGの最大サイズ です。logはcallocで確保されるので、開放が必要です。  戻り値は、成功すると0です。 */ int change_logn(char *log[],int max,int i,...); /* 【ログの変更】  logのin行目を変更します。maxは最大値です。  この関数は、log[i]の開放を行うので、iにデータの入っていない 個所を指定してしまうと大変危険です。  戻り値は、成功すると0を返します。 */ char *get_logn(char *log[],int max,int n,int val_cou,...); /* 【ログから変数を得る】  logのn行目から、val_cou個の変数を受け取ります。maxはログの最大 サイズです。可変引数は、char **型で、文字列の領域はcallocで与えら れてます。対応する要素の無かった引数には""を指すポインタが与えら れます。与えられる文字列は、直接変更しないようにしてください(開 放不能になるため)。  戻り値は文字列の格納されているポインタです。このポインタに与え られている領域を開放する必要があります。 */ int save_log(char *logfile,char *log[],int max); /* 【ログの保存】  ログの内容をすべてファイルに書き込みます。  戻り値は、成功すると0です。 */ int load_log(char *logfile,char *log[],int max); /* 【ログを読み込む】  ファイルからlogにデータを格納します。logは、callocで確保されるので、 開放が必要です。  戻り値は、成功すると0です。 */ void free_log(char *log[],int max); /* 【ログの開放】  log[](←callocで確保された文字列)をすべて開放します。 */ /*----------------------------------------------------------------------------*/ int save_table(char *file,char **table,int x,int y){ FILE *out; int i,j; if ((out=fopen(file,"wt"))==NULL)return (1); printf("%d,%d\n",x,y); /*ヘッダ*/ for(i=0;i=max) return(NULL); ALLOC_STR(buf,strlen(log[n])+1,return(NULL)); strcpy(buf,log[n]); va_start(ap,val_cou); s0=buf; for (i=0;i