/* Copyright (C) 2003, 2004 Dave Bayer. Subject to the terms and conditions of the MIT License. */ /*. BUFLEN */ #define BUFLEN 4096 /*. line */ typedef struct line { char *s; unsigned len, max; void *data; struct line *next; } line; /*. lineFreeFn */ typedef void (*lineFreeFn)( void *data ); /*. lineFilter */ typedef struct lineFilter { void (*filt)( line *buf1, line *buf2, void *data ); void *data; struct lineFilter *next; } lineFilter; /* function prototypes */ FILE *fileOpen( const char* fileName, char *mode, BOOL abort ); BOOL fileClose( FILE *fp, BOOL abort ); BOOL checkEOF( FILE *fin, BOOL abort ); line *lineAlloc( unsigned max ); void lineFree( line *l, lineFreeFn freedata ); void lineListFree( line *l, lineFreeFn freedata ); line *lineCopy( line *l, unsigned max ); void lineReset( line *l, lineFreeFn freedata ); line *lineFromStr( const char *s ); void lineAdvance( line ***ppl ); void lineInsert( line *l, line ***ppl ); void lineListInsert( line *l, line **pl, line ***ppl); void lineRemove( line **pl ); void lineListRemove( line **pl, line ***ppm ); void lineDelete( line **pl, lineFreeFn freedata ); line *lineListCopy( line *l, unsigned max ); BOOL lineRead( FILE *fin, line *l, unsigned detab ); void lineWrite( FILE *fout, line *l ); line *fileRead( FILE *fin, lineFilter *pfilter, unsigned detab ); void fileWrite( FILE *fout, line *l, lineFilter *pfilter ); line *lineListFilter( line *l, lineFilter *pfilter ); #ifdef TESTCODE void fileTest( void ); #endif