moved io functions to vm
parent
10e5dc9b3c
commit
062c56f94b
|
@ -14,14 +14,19 @@ The Factor library provides platform-specific code for Unix and Windows
|
|||
with many more capabilities so these words are not usually used in
|
||||
normal operation. */
|
||||
|
||||
void init_c_io()
|
||||
void factorvm::init_c_io()
|
||||
{
|
||||
userenv[STDIN_ENV] = allot_alien(F,(cell)stdin);
|
||||
userenv[STDOUT_ENV] = allot_alien(F,(cell)stdout);
|
||||
userenv[STDERR_ENV] = allot_alien(F,(cell)stderr);
|
||||
}
|
||||
|
||||
void io_error()
|
||||
void init_c_io()
|
||||
{
|
||||
return vm->init_c_io();
|
||||
}
|
||||
|
||||
void factorvm::io_error()
|
||||
{
|
||||
#ifndef WINCE
|
||||
if(errno == EINTR)
|
||||
|
@ -31,7 +36,12 @@ void io_error()
|
|||
general_error(ERROR_IO,tag_fixnum(errno),F,NULL);
|
||||
}
|
||||
|
||||
PRIMITIVE(fopen)
|
||||
void io_error()
|
||||
{
|
||||
return vm->io_error();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_fopen()
|
||||
{
|
||||
gc_root<byte_array> mode(dpop());
|
||||
gc_root<byte_array> path(dpop());
|
||||
|
@ -52,7 +62,12 @@ PRIMITIVE(fopen)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(fgetc)
|
||||
PRIMITIVE(fopen)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_fopen();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_fgetc()
|
||||
{
|
||||
FILE *file = (FILE *)unbox_alien();
|
||||
|
||||
|
@ -77,7 +92,12 @@ PRIMITIVE(fgetc)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(fread)
|
||||
PRIMITIVE(fgetc)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_fgetc();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_fread()
|
||||
{
|
||||
FILE *file = (FILE *)unbox_alien();
|
||||
fixnum size = unbox_array_size();
|
||||
|
@ -117,7 +137,12 @@ PRIMITIVE(fread)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(fputc)
|
||||
PRIMITIVE(fread)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_fread();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_fputc()
|
||||
{
|
||||
FILE *file = (FILE *)unbox_alien();
|
||||
fixnum ch = to_fixnum(dpop());
|
||||
|
@ -135,7 +160,12 @@ PRIMITIVE(fputc)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(fwrite)
|
||||
PRIMITIVE(fputc)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_fputc();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_fwrite()
|
||||
{
|
||||
FILE *file = (FILE *)unbox_alien();
|
||||
byte_array *text = untag_check<byte_array>(dpop());
|
||||
|
@ -164,7 +194,12 @@ PRIMITIVE(fwrite)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(fseek)
|
||||
PRIMITIVE(fwrite)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_fwrite();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_fseek()
|
||||
{
|
||||
int whence = to_fixnum(dpop());
|
||||
FILE *file = (FILE *)unbox_alien();
|
||||
|
@ -189,7 +224,12 @@ PRIMITIVE(fseek)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(fflush)
|
||||
PRIMITIVE(fseek)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_fseek();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_fflush()
|
||||
{
|
||||
FILE *file = (FILE *)unbox_alien();
|
||||
for(;;)
|
||||
|
@ -201,7 +241,12 @@ PRIMITIVE(fflush)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(fclose)
|
||||
PRIMITIVE(fflush)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_fflush();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_fclose()
|
||||
{
|
||||
FILE *file = (FILE *)unbox_alien();
|
||||
for(;;)
|
||||
|
@ -213,17 +258,32 @@ PRIMITIVE(fclose)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(fclose)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_fclose();
|
||||
}
|
||||
|
||||
/* This function is used by FFI I/O. Accessing the errno global directly is
|
||||
not portable, since on some libc's errno is not a global but a funky macro that
|
||||
reads thread-local storage. */
|
||||
VM_C_API int err_no()
|
||||
int factorvm::err_no()
|
||||
{
|
||||
return errno;
|
||||
}
|
||||
|
||||
VM_C_API void clear_err_no()
|
||||
VM_C_API int err_no()
|
||||
{
|
||||
return vm->err_no();
|
||||
}
|
||||
|
||||
void factorvm::clear_err_no()
|
||||
{
|
||||
errno = 0;
|
||||
}
|
||||
|
||||
VM_C_API void clear_err_no()
|
||||
{
|
||||
return vm->clear_err_no();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
14
vm/vm.hpp
14
vm/vm.hpp
|
@ -316,6 +316,20 @@ struct factorvm {
|
|||
void overflow_fixnum_add(fixnum x, fixnum y);
|
||||
void overflow_fixnum_subtract(fixnum x, fixnum y);
|
||||
void overflow_fixnum_multiply(fixnum x, fixnum y);
|
||||
|
||||
//io
|
||||
void init_c_io();
|
||||
void io_error();
|
||||
inline void vmprim_fopen();
|
||||
inline void vmprim_fgetc();
|
||||
inline void vmprim_fread();
|
||||
inline void vmprim_fputc();
|
||||
inline void vmprim_fwrite();
|
||||
inline void vmprim_fseek();
|
||||
inline void vmprim_fflush();
|
||||
inline void vmprim_fclose();
|
||||
int err_no();
|
||||
void clear_err_no();
|
||||
// next method here:
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue