DFSCH_DEFINE_PRIMITIVE(sleep, NULL){ long time; DFSCH_LONG_ARG(args, time); DFSCH_ARG_END(args); #ifdef __WIN32__ Sleep(time * 1000); /* Why? :) */ #else sleep(time); #endif return NULL; }
DFSCH_DEFINE_PRIMITIVE(port_read_buf, NULL){ dfsch_object_t* port; size_t len; char* buf; DFSCH_LONG_ARG(args, len); DFSCH_OBJECT_ARG_OPT(args, port, dfsch_current_input_port()); DFSCH_ARG_END(args); buf = GC_MALLOC_ATOMIC(len); len = dfsch_port_read_buf(port, buf, len); if (len == 0){ return NULL; } return dfsch_make_string_buf(buf, len); }
DFSCH_DEFINE_PRIMITIVE(decode_universal_time, NULL){ time_t time; dfsch_object_t* utc; dfsch_object_t* ret; DFSCH_LONG_ARG(args, time); DFSCH_OBJECT_ARG_OPT(args, utc, NULL); DFSCH_ARG_END(args); ret = dfsch_make_decoded_time(); if (utc){ gmtime_r(&time, dfsch_decoded_time_get_tm(ret)); } else { localtime_r(&time, dfsch_decoded_time_get_tm(ret)); } return ret; }
DFSCH_DEFINE_PRIMITIVE(encode_universal_time, NULL){ struct tm tm; time_t t; DFSCH_LONG_ARG(args, tm.tm_sec); DFSCH_LONG_ARG(args, tm.tm_min); DFSCH_LONG_ARG(args, tm.tm_hour); DFSCH_LONG_ARG(args, tm.tm_mday); DFSCH_LONG_ARG(args, tm.tm_mon); DFSCH_LONG_ARG(args, tm.tm_year); DFSCH_ARG_END(args); tm.tm_mon -= 1; tm.tm_year -= 1900; tm.tm_isdst = -1; errno = 0; t = mktime(&tm); if (t == -1 && errno != 0){ dfsch_operating_system_error("mktime"); } return dfsch_make_number_from_long(t); }