Implement (os-envs) primitive on Windows
parent
37ee63e72d
commit
1382d9d045
|
@ -47,3 +47,7 @@ user-space */
|
||||||
CELL signal_number;
|
CELL signal_number;
|
||||||
CELL signal_fault_addr;
|
CELL signal_fault_addr;
|
||||||
void *signal_callstack_top;
|
void *signal_callstack_top;
|
||||||
|
|
||||||
|
void memory_signal_handler_impl(void);
|
||||||
|
void divide_by_zero_signal_handler_impl(void);
|
||||||
|
void misc_signal_handler_impl(void);
|
||||||
|
|
|
@ -39,6 +39,3 @@ s64 current_millis(void);
|
||||||
void sleep_millis(CELL msec);
|
void sleep_millis(CELL msec);
|
||||||
|
|
||||||
void reset_stdio(void);
|
void reset_stdio(void);
|
||||||
|
|
||||||
void memory_signal_handler_impl(void);
|
|
||||||
void misc_signal_handler_impl(void);
|
|
||||||
|
|
|
@ -37,6 +37,11 @@ char *getenv(char *name)
|
||||||
return 0; /* unreachable */
|
return 0; /* unreachable */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_PRIMITIVE(os_envs)
|
||||||
|
{
|
||||||
|
not_implemented_error();
|
||||||
|
}
|
||||||
|
|
||||||
void c_to_factor_toplevel(CELL quot)
|
void c_to_factor_toplevel(CELL quot)
|
||||||
{
|
{
|
||||||
c_to_factor(quot);
|
c_to_factor(quot);
|
||||||
|
|
|
@ -23,6 +23,35 @@ DEFINE_PRIMITIVE(cd)
|
||||||
SetCurrentDirectory(unbox_u16_string());
|
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)
|
long exception_handler(PEXCEPTION_POINTERS pe)
|
||||||
{
|
{
|
||||||
PEXCEPTION_RECORD e = (PEXCEPTION_RECORD)pe->ExceptionRecord;
|
PEXCEPTION_RECORD e = (PEXCEPTION_RECORD)pe->ExceptionRecord;
|
||||||
|
|
|
@ -17,9 +17,4 @@ typedef char F_SYMBOL;
|
||||||
#define FACTOR_DLL_NAME "factor-nt.dll"
|
#define FACTOR_DLL_NAME "factor-nt.dll"
|
||||||
|
|
||||||
void c_to_factor_toplevel(CELL quot);
|
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);
|
long exception_handler(PEXCEPTION_POINTERS pe);
|
||||||
|
|
|
@ -207,8 +207,3 @@ void sleep_millis(DWORD msec)
|
||||||
{
|
{
|
||||||
Sleep(msec);
|
Sleep(msec);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_PRIMITIVE(os_envs)
|
|
||||||
{
|
|
||||||
not_implemented_error();
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue