char *CharPtr;\r
cell_t *CellPtr;\r
FileStream *FileID;\r
- uint8_t *CodeBase = CODE_BASE;\r
+ uint8_t *CodeBase = (uint8_t *) CODE_BASE;\r
ThrowCode ExceptionReturnCode = 0;\r
\r
/* FIXME\r
case ID_FILE_SIZE: /* ( fid -- ud ior ) */\r
/* Determine file size by seeking to end and returning position. */\r
FileID = (FileStream *) TOS;\r
- Scratch = sdTellFile( FileID );\r
- sdSeekFile( FileID, 0, PF_SEEK_END );\r
- M_PUSH( sdTellFile( FileID ));\r
- sdSeekFile( FileID, Scratch, PF_SEEK_SET );\r
- TOS = (Scratch < 0) ? -4 : 0 ; /* !!! err num */\r
+ {\r
+ off_t endposition, offsetHi;\r
+ off_t original = sdTellFile( FileID );\r
+ sdSeekFile( FileID, 0, PF_SEEK_END );\r
+ endposition = sdTellFile( FileID );\r
+ M_PUSH(endposition);\r
+ // Just use a 0 if they are the same size.\r
+ offsetHi = (sizeof(off_t) > sizeof(cell_t)) ? (endposition >> (8*sizeof(cell_t))) : 0 ;\r
+ M_PUSH(offsetHi);\r
+ sdSeekFile( FileID, original, PF_SEEK_SET );\r
+ TOS = (original < 0) ? -4 : 0 ; /* !!! err num */\r
+ }\r
endcase;\r
\r
case ID_FILE_WRITE: /* ( addr len fid -- ior ) */\r
TOS = (Temp != Scratch) ? -3 : 0;\r
endcase;\r
\r
- case ID_FILE_REPOSITION: /* ( pos fid -- ior ) */\r
- FileID = (FileStream *) TOS;\r
- Scratch = M_POP;\r
- TOS = sdSeekFile( FileID, Scratch, PF_SEEK_SET );\r
+ case ID_FILE_REPOSITION: /* ( ud fid -- ior ) */ \r
+ {\r
+ FileID = (FileStream *) TOS;\r
+ off_t offset = M_POP;\r
+ // Avoid compiler warnings on Mac.\r
+ offset = (sizeof(off_t) > sizeof(cell_t)) ? (offset << 8*sizeof(cell_t)) : 0 ;\r
+ offset += M_POP;\r
+ TOS = sdSeekFile( FileID, offset, PF_SEEK_SET );\r
+ }\r
endcase;\r
\r
- case ID_FILE_POSITION: /* ( pos fid -- ior ) */\r
- M_PUSH( sdTellFile( (FileStream *) TOS ));\r
- TOS = 0;\r
+ case ID_FILE_POSITION: /* ( fid -- ud ior ) */\r
+ {\r
+ off_t offsetHi;\r
+ FileID = (FileStream *) TOS;\r
+ off_t position = sdTellFile( FileID );\r
+ M_PUSH(position);\r
+ // Just use a 0 if they are the same size.\r
+ offsetHi = (sizeof(off_t) > sizeof(cell_t)) ? (position >> (8*sizeof(cell_t))) : 0 ;\r
+ M_PUSH(offsetHi);\r
+ TOS = (position < 0) ? -4 : 0 ; /* !!! err num */\r
+ }\r
endcase;\r
\r
case ID_FILE_RO: /* ( -- fam ) */\r
cell_t sdFlushFile( FileStream * Stream );\r
cell_t sdReadFile( void *ptr, cell_t Size, int32_t nItems, FileStream * Stream );\r
cell_t sdWriteFile( void *ptr, cell_t Size, int32_t nItems, FileStream * Stream );\r
- cell_t sdSeekFile( FileStream * Stream, cell_t Position, int32_t Mode );\r
- cell_t sdTellFile( FileStream * Stream );\r
+ cell_t sdSeekFile( FileStream * Stream, off_t Position, int32_t Mode );\r
+ off_t sdTellFile( FileStream * Stream );\r
cell_t sdCloseFile( FileStream * Stream );\r
cell_t sdInputChar( FileStream *stream );\r
\r
#define sdFlushFile fflush\r
#define sdReadFile fread\r
#define sdWriteFile fwrite\r
- #define sdSeekFile fseek\r
- #define sdTellFile ftell\r
+ #define sdSeekFile fseeko\r
+ #define sdTellFile ftello\r
#define sdCloseFile fclose\r
#define sdInputChar fgetc\r
\r