add ftell primitive

db4
Doug Coleman 2009-10-03 18:20:35 -05:00
parent cb308e8cc8
commit 11d55131de
7 changed files with 19 additions and 1 deletions

View File

@ -486,6 +486,7 @@ tuple
{ "fputc" "io.streams.c" (( ch alien -- )) } { "fputc" "io.streams.c" (( ch alien -- )) }
{ "fwrite" "io.streams.c" (( string alien -- )) } { "fwrite" "io.streams.c" (( string alien -- )) }
{ "fflush" "io.streams.c" (( alien -- )) } { "fflush" "io.streams.c" (( alien -- )) }
{ "ftell" "io.streams.c" (( alien -- n )) }
{ "fseek" "io.streams.c" (( alien offset whence -- )) } { "fseek" "io.streams.c" (( alien offset whence -- )) }
{ "fclose" "io.streams.c" (( alien -- )) } { "fclose" "io.streams.c" (( alien -- )) }
{ "<wrapper>" "kernel" (( obj -- wrapper )) } { "<wrapper>" "kernel" (( obj -- wrapper )) }

View File

@ -164,6 +164,17 @@ void factor_vm::primitive_fwrite()
} }
} }
void factor_vm::primitive_ftell()
{
FILE *file = (FILE *)unbox_alien();
off_t offset;
if((offset = FTELL(file)) == -1)
io_error();
box_signed_8(offset);
}
void factor_vm::primitive_fseek() void factor_vm::primitive_fseek()
{ {
int whence = to_fixnum(dpop()); int whence = to_fixnum(dpop());

View File

@ -23,6 +23,7 @@ typedef char symbol_char;
#define STRNCMP strncmp #define STRNCMP strncmp
#define STRDUP strdup #define STRDUP strdup
#define FTELL ftello
#define FSEEK fseeko #define FSEEK fseeko
#define FIXNUM_FORMAT "%ld" #define FIXNUM_FORMAT "%ld"

View File

@ -19,7 +19,8 @@ typedef wchar_t vm_char;
#define STRNCMP wcsncmp #define STRNCMP wcsncmp
#define STRDUP _wcsdup #define STRDUP _wcsdup
#define MIN(a,b) ((a)>(b)?(b):(a)) #define MIN(a,b) ((a)>(b)?(b):(a))
#define FSEEK fseek #define FTELL _ftelli64
#define FSEEK _fseeki64
#ifdef WIN64 #ifdef WIN64
#define CELL_FORMAT "%Iu" #define CELL_FORMAT "%Iu"

View File

@ -128,6 +128,7 @@ const primitive_type primitives[] = {
primitive_fputc, primitive_fputc,
primitive_fwrite, primitive_fwrite,
primitive_fflush, primitive_fflush,
primitive_ftell,
primitive_fseek, primitive_fseek,
primitive_fclose, primitive_fclose,
primitive_wrapper, primitive_wrapper,
@ -254,6 +255,7 @@ PRIMITIVE_FORWARD(fread)
PRIMITIVE_FORWARD(fputc) PRIMITIVE_FORWARD(fputc)
PRIMITIVE_FORWARD(fwrite) PRIMITIVE_FORWARD(fwrite)
PRIMITIVE_FORWARD(fflush) PRIMITIVE_FORWARD(fflush)
PRIMITIVE_FORWARD(ftell)
PRIMITIVE_FORWARD(fseek) PRIMITIVE_FORWARD(fseek)
PRIMITIVE_FORWARD(fclose) PRIMITIVE_FORWARD(fclose)
PRIMITIVE_FORWARD(wrapper) PRIMITIVE_FORWARD(wrapper)

View File

@ -136,6 +136,7 @@ PRIMITIVE(fread);
PRIMITIVE(fputc); PRIMITIVE(fputc);
PRIMITIVE(fwrite); PRIMITIVE(fwrite);
PRIMITIVE(fflush); PRIMITIVE(fflush);
PRIMITIVE(ftell);
PRIMITIVE(fseek); PRIMITIVE(fseek);
PRIMITIVE(fclose); PRIMITIVE(fclose);
PRIMITIVE(wrapper); PRIMITIVE(wrapper);

View File

@ -510,6 +510,7 @@ struct factor_vm
void primitive_fread(); void primitive_fread();
void primitive_fputc(); void primitive_fputc();
void primitive_fwrite(); void primitive_fwrite();
void primitive_ftell();
void primitive_fseek(); void primitive_fseek();
void primitive_fflush(); void primitive_fflush();
void primitive_fclose(); void primitive_fclose();