factor/native/win32/io.c

43 lines
788 B
C

#include "../factor.h"
HANDLE completion_port = INVALID_HANDLE_VALUE;
CELL callback_list = F;
void init_io (void)
{
userenv[STDIN_ENV] = tag_object(port(PORT_READ, (CELL)GetStdHandle(STD_INPUT_HANDLE)));
userenv[STDOUT_ENV] = tag_object(port(PORT_WRITE, (CELL)GetStdHandle(STD_OUTPUT_HANDLE)));
}
void primitive_add_copy_io_task (void)
{
io_error(__FUNCTION__);
}
void primitive_close (void)
{
F_PORT *port = untag_port(dpop());
CloseHandle((HANDLE)port->fd);
port->closed = true;
}
void primitive_next_io_task (void)
{
maybe_garbage_collection();
if (callback_list != F)
{
F_CONS *cons = untag_cons(callback_list);
CELL car = cons->car;
callback_list = cons->cdr;
dpush(car);
}
else
dpush(F);
}
void collect_io_tasks (void)
{
copy_object(&callback_list);
}