Implement (os-envs) primitive on Windows

release
Slava Pestov 2007-11-13 01:09:38 -05:00
parent 37ee63e72d
commit 1382d9d045
6 changed files with 38 additions and 13 deletions

View File

@ -47,3 +47,7 @@ user-space */
CELL signal_number;
CELL signal_fault_addr;
void *signal_callstack_top;
void memory_signal_handler_impl(void);
void divide_by_zero_signal_handler_impl(void);
void misc_signal_handler_impl(void);

View File

@ -39,6 +39,3 @@ s64 current_millis(void);
void sleep_millis(CELL msec);
void reset_stdio(void);
void memory_signal_handler_impl(void);
void misc_signal_handler_impl(void);

View File

@ -37,6 +37,11 @@ char *getenv(char *name)
return 0; /* unreachable */
}
DEFINE_PRIMITIVE(os_envs)
{
not_implemented_error();
}
void c_to_factor_toplevel(CELL quot)
{
c_to_factor(quot);

29
vm/os-windows-nt.c Normal file → Executable file
View File

@ -23,6 +23,35 @@ DEFINE_PRIMITIVE(cd)
SetCurrentDirectory(unbox_u16_string());
}
DEFINE_PRIMITIVE(os_envs)
{
GROWABLE_ARRAY(result);
TCHAR *env = GetEnvironmentStrings();
TCHAR *finger = env;
for(;;)
{
TCHAR *scan = finger;
while(*scan != '\0')
scan++;
if(scan == finger)
break;
REGISTER_UNTAGGED(result);
CELL string = tag_object(from_u16_string(finger));
UNREGISTER_UNTAGGED(result);
GROWABLE_ADD(result,string);
finger = scan + 1;
}
FreeEnvironmentStrings(env);
GROWABLE_TRIM(result);
dpush(tag_object(result));
}
long exception_handler(PEXCEPTION_POINTERS pe)
{
PEXCEPTION_RECORD e = (PEXCEPTION_RECORD)pe->ExceptionRecord;

View File

@ -17,9 +17,4 @@ typedef char F_SYMBOL;
#define FACTOR_DLL_NAME "factor-nt.dll"
void c_to_factor_toplevel(CELL quot);
void memory_signal_handler_impl(void);
void divide_by_zero_signal_handler_impl(void);
void misc_signal_handler_impl(void);
long exception_handler(PEXCEPTION_POINTERS pe);

View File

@ -207,8 +207,3 @@ void sleep_millis(DWORD msec)
{
Sleep(msec);
}
DEFINE_PRIMITIVE(os_envs)
{
not_implemented_error();
}