|
|
| version 1.8, 2005/04/01 15:35:49 | version 1.10, 2006/12/10 12:45:46 |
|---|---|
| Line 4 | Line 4 |
| #if defined(SUPPORT_TEXTCNV) | #if defined(SUPPORT_TEXTCNV) |
| #include "textcnv.h" | #include "textcnv.h" |
| #endif | #endif |
| #if defined(SUPPORT_ARC) | |
| #include "arc.h" | |
| #else | |
| #include "dosio.h" | #include "dosio.h" |
| #endif | |
| // ---- arc support? | |
| #if defined(SUPPORT_ARC) | |
| #define _FILEH ARCFH | |
| #define _FILEH_INVALID NULL | |
| #define _FSEEK_SET ARCSEEK_SET | |
| #define _file_open_rb arcex_fileopen | |
| #define _file_create arcex_filecreate | |
| #define _file_read arc_fileread | |
| #define _file_write arc_filewrite | |
| #define _file_seek arc_fileseek | |
| #define _file_close arc_fileclose | |
| #else | |
| #define _FILEH FILEH | |
| #define _FILEH_INVALID FILEH_INVALID | |
| #define _FSEEK_SET FSEEK_SET | |
| #define _file_open_rb file_open_rb | |
| #define _file_create file_create | |
| #define _file_read file_read | |
| #define _file_write file_write | |
| #define _file_seek file_seek | |
| #define _file_close file_close | |
| #endif | |
| enum { | enum { |
| TFMODE_READ = 0x01, | TFMODE_READ = 0x01, |
| TFMODE_WRITE = 0x02 | TFMODE_WRITE = 0x02 |
| Line 25 struct _textfile { | Line 53 struct _textfile { |
| UINT8 access; | UINT8 access; |
| UINT8 xendian; | UINT8 xendian; |
| #endif | #endif |
| FILEH fh; | _FILEH fh; |
| long fpos; | long fpos; |
| UINT8 *buf; | UINT8 *buf; |
| UINT bufsize; | UINT bufsize; |
| Line 48 static UINT readbufferA(TEXTFILE tf) { | Line 76 static UINT readbufferA(TEXTFILE tf) { |
| UINT rsize; | UINT rsize; |
| if (tf->bufrem == 0) { | if (tf->bufrem == 0) { |
| rsize = file_read(tf->fh, tf->buf, tf->bufsize); | rsize = _file_read(tf->fh, tf->buf, tf->bufsize); |
| rsize = rsize / sizeof(char); | rsize = rsize / sizeof(char); |
| tf->fpos += rsize * sizeof(char); | tf->fpos += rsize * sizeof(char); |
| tf->bufpos = 0; | tf->bufpos = 0; |
| Line 127 static UINT readbufferW(TEXTFILE tf) { | Line 155 static UINT readbufferW(TEXTFILE tf) { |
| if (tf->bufrem == 0) { | if (tf->bufrem == 0) { |
| buf = tf->buf; | buf = tf->buf; |
| rsize = file_read(tf->fh, buf, tf->bufsize); | rsize = _file_read(tf->fh, buf, tf->bufsize); |
| rsize = rsize / sizeof(UINT16); | rsize = rsize / sizeof(UINT16); |
| tf->fpos += rsize * sizeof(UINT16); | tf->fpos += rsize * sizeof(UINT16); |
| tf->bufpos = 0; | tf->bufpos = 0; |
| Line 237 static BRESULT flushwritebuffer(TEXTFILE | Line 265 static BRESULT flushwritebuffer(TEXTFILE |
| if (tf->bufpos) { | if (tf->bufpos) { |
| size = tf->bufpos * tf->width; | size = tf->bufpos * tf->width; |
| wsize = file_write(tf->fh, tf->buf, size); | wsize = _file_write(tf->fh, tf->buf, size); |
| tf->fpos += wsize; | tf->fpos += wsize; |
| if (wsize != size) { | if (wsize != size) { |
| return(FAILURE); | return(FAILURE); |
| Line 253 const UINT8 *p; | Line 281 const UINT8 *p; |
| UINT wsize; | UINT wsize; |
| ret = SUCCESS; | ret = SUCCESS; |
| p = (char *)buffer; | p = (UINT8 *)buffer; |
| while(size) { | while(size) { |
| wsize = min(size, tf->bufrem); | wsize = min(size, tf->bufrem); |
| if (wsize) { | if (wsize) { |
| Line 308 const UINT8 *p; | Line 336 const UINT8 *p; |
| // ---- | // ---- |
| static TEXTFILEH registfile(FILEH fh, UINT buffersize, | static TEXTFILEH registfile(_FILEH fh, UINT buffersize, |
| const UINT8 *hdr, UINT hdrsize) { | const UINT8 *hdr, UINT hdrsize) { |
| UINT cnvbufsize; | UINT cnvbufsize; |
| Line 409 static BRESULT flushfile(TEXTFILE tf) { | Line 437 static BRESULT flushfile(TEXTFILE tf) { |
| ret = SUCCESS; | ret = SUCCESS; |
| if (tf->mode & TFMODE_READ) { | if (tf->mode & TFMODE_READ) { |
| fpos = tf->fpos - (tf->bufrem * tf->width); | fpos = tf->fpos - (tf->bufrem * tf->width); |
| tf->fpos = file_seek(tf->fh, fpos, FSEEK_SET); | tf->fpos = _file_seek(tf->fh, fpos, _FSEEK_SET); |
| if (tf->fpos != fpos) { | if (tf->fpos != fpos) { |
| ret = FAILURE; | ret = FAILURE; |
| } | } |
| Line 417 static BRESULT flushfile(TEXTFILE tf) { | Line 445 static BRESULT flushfile(TEXTFILE tf) { |
| else if (tf->mode & TFMODE_WRITE) { | else if (tf->mode & TFMODE_WRITE) { |
| if (tf->bufpos) { | if (tf->bufpos) { |
| size = tf->bufpos * tf->width; | size = tf->bufpos * tf->width; |
| wsize = file_write(tf->fh, tf->buf, size); | wsize = _file_write(tf->fh, tf->buf, size); |
| if (wsize != size) { | if (wsize != size) { |
| ret = FAILURE; | ret = FAILURE; |
| } | } |
| Line 425 static BRESULT flushfile(TEXTFILE tf) { | Line 453 static BRESULT flushfile(TEXTFILE tf) { |
| } | } |
| } | } |
| else { | else { |
| fpos = file_seek(tf->fh, tf->fpos, FSEEK_SET); | fpos = _file_seek(tf->fh, tf->fpos, _FSEEK_SET); |
| if (tf->fpos != fpos) { | if (tf->fpos != fpos) { |
| ret = FAILURE; | ret = FAILURE; |
| } | } |
| Line 442 static BRESULT flushfile(TEXTFILE tf) { | Line 470 static BRESULT flushfile(TEXTFILE tf) { |
| TEXTFILEH textfile_open(const OEMCHAR *filename, UINT buffersize) { | TEXTFILEH textfile_open(const OEMCHAR *filename, UINT buffersize) { |
| FILEH fh; | _FILEH fh; |
| UINT8 hdr[4]; | UINT8 hdr[4]; |
| UINT hdrsize; | UINT hdrsize; |
| TEXTFILEH ret; | TEXTFILEH ret; |
| fh = file_open_rb(filename); | fh = _file_open_rb(filename); |
| if (fh == FILEH_INVALID) { | if (fh == _FILEH_INVALID) { |
| goto tfo_err; | goto tfo_err; |
| } | } |
| hdrsize = file_read(fh, hdr, sizeof(hdr)); | hdrsize = _file_read(fh, hdr, sizeof(hdr)); |
| ret = registfile(fh, buffersize, hdr, hdrsize); | ret = registfile(fh, buffersize, hdr, hdrsize); |
| if (ret) { | if (ret) { |
| return(ret); | return(ret); |
| } | } |
| file_close(fh); | _file_close(fh); |
| tfo_err: | tfo_err: |
| return(NULL); | return(NULL); |
| Line 464 tfo_err: | Line 492 tfo_err: |
| TEXTFILEH textfile_create(const OEMCHAR *filename, UINT buffersize) { | TEXTFILEH textfile_create(const OEMCHAR *filename, UINT buffersize) { |
| FILEH fh; | _FILEH fh; |
| const UINT8 *hdr; | const UINT8 *hdr; |
| UINT hdrsize; | UINT hdrsize; |
| TEXTFILEH ret; | TEXTFILEH ret; |
| fh = file_create(filename); | fh = _file_create(filename); |
| if (fh == FILEH_INVALID) { | if (fh == _FILEH_INVALID) { |
| goto tfc_err1; | goto tfc_err1; |
| } | } |
| #if defined(OSLANG_UTF8) | #if defined(OSLANG_UTF8) |
| Line 483 const UINT8 *hdr; | Line 511 const UINT8 *hdr; |
| hdr = NULL; | hdr = NULL; |
| hdrsize = 0; | hdrsize = 0; |
| #endif | #endif |
| if ((hdrsize) && (file_write(fh, hdr, hdrsize) != hdrsize)) { | if ((hdrsize) && (_file_write(fh, hdr, hdrsize) != hdrsize)) { |
| goto tfc_err2; | goto tfc_err2; |
| } | } |
| ret = registfile(fh, buffersize, hdr, hdrsize); | ret = registfile(fh, buffersize, hdr, hdrsize); |
| Line 492 const UINT8 *hdr; | Line 520 const UINT8 *hdr; |
| } | } |
| tfc_err2: | tfc_err2: |
| file_close(fh); | _file_close(fh); |
| tfc_err1: | tfc_err1: |
| return(NULL); | return(NULL); |
| Line 570 void textfile_close(TEXTFILEH tfh) { | Line 598 void textfile_close(TEXTFILEH tfh) { |
| if (tf->mode & TFMODE_WRITE) { | if (tf->mode & TFMODE_WRITE) { |
| flushfile(tf); | flushfile(tf); |
| } | } |
| file_close(tf->fh); | _file_close(tf->fh); |
| _MFREE(tf); | _MFREE(tf); |
| } | } |
| } | } |