factor/native/misc.c

55 lines
947 B
C
Raw Normal View History

2004-08-04 03:12:55 -04:00
#include "factor.h"
void primitive_exit(void)
{
exit(to_fixnum(dpop()));
2004-08-04 03:12:55 -04:00
}
void primitive_os_env(void)
{
char* name = to_c_string(untag_string(dpeek()));
2004-08-04 03:12:55 -04:00
char* value = getenv(name);
if(value == NULL)
drepl(F);
2004-08-04 03:12:55 -04:00
else
drepl(tag_object(from_c_string(getenv(name))));
2004-08-04 03:12:55 -04:00
}
void primitive_eq(void)
{
dpush(tag_boolean(dpop() == dpop()));
2004-08-04 03:12:55 -04:00
}
void primitive_millis(void)
{
struct timeval t;
gettimeofday(&t,NULL);
dpush(tag_object(bignum(t.tv_sec * 1000 + t.tv_usec/1000)));
2004-08-04 03:12:55 -04:00
}
void primitive_init_random(void)
{
2004-08-04 23:09:33 -04:00
#ifdef HAVE_SRANDOMDEV
srandomdev();
2004-08-04 23:09:33 -04:00
#else
struct timeval t;
gettimeofday(&t,NULL);
srandom(t.tv_sec);
#endif
}
void primitive_random_int(void)
{
dpush(tag_object(bignum(random())));
}
2004-08-24 23:46:55 -04:00
void primitive_dump(void)
{
/* Take an object, and print its memory. Later, return a vector */
CELL obj = dpop();
CELL size = object_size(obj);
int i;
for(i = 0; i < size; i += CELLS)
fprintf(stderr,"%x\n",get(UNTAG(obj) + i));
}