2004-08-04 03:12:55 -04:00
|
|
|
#include "factor.h"
|
|
|
|
|
|
|
|
void primitive_exit(void)
|
|
|
|
{
|
2004-08-12 17:36:36 -04:00
|
|
|
exit(to_fixnum(dpop()));
|
2004-08-04 03:12:55 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void primitive_os_env(void)
|
|
|
|
{
|
2004-08-12 17:36:36 -04:00
|
|
|
char* name = to_c_string(untag_string(dpeek()));
|
2004-08-04 03:12:55 -04:00
|
|
|
char* value = getenv(name);
|
|
|
|
if(value == NULL)
|
2004-08-12 17:36:36 -04:00
|
|
|
drepl(F);
|
2004-08-04 03:12:55 -04:00
|
|
|
else
|
2004-08-12 17:36:36 -04:00
|
|
|
drepl(tag_object(from_c_string(getenv(name))));
|
2004-08-04 03:12:55 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void primitive_eq(void)
|
|
|
|
{
|
2004-08-12 17:36:36 -04:00
|
|
|
dpush(tag_boolean(dpop() == dpop()));
|
2004-08-04 03:12:55 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void primitive_millis(void)
|
|
|
|
{
|
|
|
|
struct timeval t;
|
|
|
|
gettimeofday(&t,NULL);
|
2004-08-12 17:36:36 -04:00
|
|
|
dpush(tag_object(bignum(t.tv_sec * 1000 + t.tv_usec/1000)));
|
2004-08-04 03:12:55 -04:00
|
|
|
}
|
2004-08-04 18:25:29 -04:00
|
|
|
|
|
|
|
void primitive_init_random(void)
|
|
|
|
{
|
2004-08-04 23:09:33 -04:00
|
|
|
#ifdef HAVE_SRANDOMDEV
|
2004-08-04 18:25:29 -04:00
|
|
|
srandomdev();
|
2004-08-04 23:09:33 -04:00
|
|
|
#else
|
|
|
|
struct timeval t;
|
|
|
|
gettimeofday(&t,NULL);
|
|
|
|
srandom(t.tv_sec);
|
|
|
|
#endif
|
2004-08-04 18:25:29 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void primitive_random_int(void)
|
|
|
|
{
|
2004-08-12 17:36:36 -04:00
|
|
|
dpush(tag_object(bignum(random())));
|
2004-08-04 18:25:29 -04:00
|
|
|
}
|