|
|
| version 1.2, 2003/11/07 18:31:24 | version 1.3, 2004/06/20 11:19:45 |
|---|---|
| Line 3 | Line 3 |
| #include "textfile.h" | #include "textfile.h" |
| static BOOL getnextstrings(TEXTFILEH fh) { | |
| UINT rsize; | |
| if (!fh) { | |
| return(FAILURE); | |
| } | |
| if (file_seek((FILEH)fh->fh, fh->fhpos, 0) != fh->fhpos) { | |
| return(FAILURE); | |
| } | |
| rsize = file_read((FILEH)fh->fh, fh + 1, fh->buffersize); | |
| if (rsize == (UINT)-1) { | |
| return(FAILURE); | |
| } | |
| fh->fhpos += rsize; | |
| fh->pos = 0; | |
| fh->remain = rsize; | |
| return(SUCCESS); | |
| } | |
| TEXTFILEH textfile_open(const char *filename, UINT buffersize) { | TEXTFILEH textfile_open(const char *filename, UINT buffersize) { |
| FILEH fh; | FILEH fh; |
| Line 12 TEXTFILEH textfile_open(const char *file | Line 32 TEXTFILEH textfile_open(const char *file |
| buffersize = 256; | buffersize = 256; |
| } | } |
| fh = file_open(filename); | fh = file_open(filename); |
| if (fh != FILEH_INVALID) { | if (fh == FILEH_INVALID) { |
| ret = (TEXTFILEH)_MALLOC(sizeof(_TEXTFILE) + buffersize, filename); | goto tfo_err1; |
| if (ret) { | } |
| ZeroMemory(ret, sizeof(_TEXTFILE) + buffersize); | ret = (TEXTFILEH)_MALLOC(sizeof(_TEXTFILE) + buffersize, filename); |
| ret->fh = (long)fh; | if (ret == NULL) { |
| ret->buffersize = buffersize; | goto tfo_err2; |
| return(ret); | } |
| ZeroMemory(ret, sizeof(_TEXTFILE) + buffersize); | |
| ret->fh = (long)fh; | |
| ret->buffersize = buffersize; | |
| #if defined(OSLANG_UTF8) | |
| getnextstrings(ret); | |
| if (ret->remain >= 3) { | |
| char *ptr; | |
| ptr = ((char *)(ret + 1)) + ret->pos; | |
| if ((ptr[0] == (char)0xef) && | |
| (ptr[1] == (char)0xbb) && | |
| (ptr[2] == (char)0xbf)) { | |
| ret->pos += 3; | |
| ret->remain -= 3; | |
| } | } |
| file_close(fh); | |
| } | } |
| #endif | |
| return(ret); | |
| tfo_err2: | |
| file_close(fh); | |
| tfo_err1: | |
| return(NULL); | return(NULL); |
| } | } |
| void textfile_close(TEXTFILEH fh) { | void textfile_close(TEXTFILEH fh) { |
| if (fh) { | if (fh) { |
| Line 34 void textfile_close(TEXTFILEH fh) { | Line 72 void textfile_close(TEXTFILEH fh) { |
| } | } |
| } | } |
| static BOOL getnextstring(TEXTFILEH fh) { | |
| UINT rsize; | |
| if (!fh) { | |
| return(FAILURE); | |
| } | |
| if (file_seek((FILEH)fh->fh, fh->fhpos, 0) != fh->fhpos) { | |
| return(FAILURE); | |
| } | |
| rsize = file_read((FILEH)fh->fh, fh + 1, fh->buffersize); | |
| if (rsize == (UINT)-1) { | |
| return(FAILURE); | |
| } | |
| fh->fhpos += rsize; | |
| fh->pos = 0; | |
| fh->remain = rsize; | |
| return(SUCCESS); | |
| } | |
| BOOL textfile_read(TEXTFILEH fh, char *buffer, UINT size) { | BOOL textfile_read(TEXTFILEH fh, char *buffer, UINT size) { |
| char c = '\0'; | char c = '\0'; |
| Line 67 BOOL textfile_read(TEXTFILEH fh, char *b | Line 83 BOOL textfile_read(TEXTFILEH fh, char *b |
| size--; | size--; |
| crlf = FALSE; | crlf = FALSE; |
| do { | do { |
| if ((!fh->remain) && (getnextstring(fh))) { | if ((!fh->remain) && (getnextstrings(fh))) { |
| return(FAILURE); | return(FAILURE); |
| } | } |
| if (!fh->remain) { | if (!fh->remain) { |
| Line 100 BOOL textfile_read(TEXTFILEH fh, char *b | Line 116 BOOL textfile_read(TEXTFILEH fh, char *b |
| } | } |
| } while(!crlf); | } while(!crlf); |
| if ((crlf) && (c == 0x0d)) { | if ((crlf) && (c == 0x0d)) { |
| if ((!fh->remain) && (getnextstring(fh))) { | if ((!fh->remain) && (getnextstrings(fh))) { |
| return(FAILURE); | return(FAILURE); |
| } | } |
| if (fh->remain) { | if (fh->remain) { |