DFSCH_DEFINE_PRIMITIVE(http_avpairs_2_alist, NULL) { char* avpairs; DFSCH_STRING_ARG(args, avpairs); DFSCH_ARG_END(args); return dfsch_http_avpairs_2_alist(avpairs); }
static dfsch_object_t* decoded_time_apply(decoded_time_t* time, dfsch_object_t* args, dfsch_tail_escape_t* esc){ dfsch_object_t* selector; DFSCH_OBJECT_ARG(args, selector); DFSCH_ARG_END(args); if (dfsch_compare_keyword(selector, "sec")){ return dfsch_make_number_from_long(time->tm.tm_sec); } else if (dfsch_compare_keyword(selector, "min")){ return dfsch_make_number_from_long(time->tm.tm_min); } else if (dfsch_compare_keyword(selector, "hour")){ return dfsch_make_number_from_long(time->tm.tm_hour); } else if (dfsch_compare_keyword(selector, "date")){ return dfsch_make_number_from_long(time->tm.tm_mday); } else if (dfsch_compare_keyword(selector, "month")){ return dfsch_make_number_from_long(time->tm.tm_mon + 1); } else if (dfsch_compare_keyword(selector, "year")){ return dfsch_make_number_from_long(time->tm.tm_year + 1900); } else if (dfsch_compare_keyword(selector, "day")){ return dfsch_make_number_from_long(time->tm.tm_wday); } else if (dfsch_compare_keyword(selector, "year-day")){ return dfsch_make_number_from_long(time->tm.tm_yday + 1); } else if (dfsch_compare_keyword(selector, "dst?")){ return dfsch_bool(time->tm.tm_isdst == 1); } dfsch_error("Unknown field requested", selector); }
DFSCH_DEFINE_PRIMITIVE(set_current_error_port, NULL){ dfsch_object_t* port; DFSCH_OBJECT_ARG(args, port); DFSCH_ARG_END(args); dfsch_set_current_error_port(port); return NULL; }
DFSCH_DEFINE_PRIMITIVE(inet_urlencode, NULL) { dfsch_strbuf_t* str; DFSCH_BUFFER_ARG(args, str); DFSCH_ARG_END(args); return dfsch_make_string_nocopy(dfsch_inet_urlencode(str)); }
DFSCH_DEFINE_PRIMITIVE(http_query_2_hash, NULL) { char* query; DFSCH_PROTO_STRING_ARG(args, query); DFSCH_ARG_END(args); return dfsch_http_query_2_hash(query); }
DFSCH_DEFINE_PRIMITIVE(inet_xml_unescape, NULL) { char* str; DFSCH_STRING_ARG(args, str); DFSCH_ARG_END(args); return dfsch_make_string_cstr(dfsch_inet_xml_unescape(str)); }
DFSCH_DEFINE_PRIMITIVE(http_split_path, NULL) { char* path; DFSCH_STRING_ARG(args, path); DFSCH_ARG_END(args); return dfsch_http_split_path(path); }
DFSCH_DEFINE_PRIMITIVE(read, NULL){ dfsch_object_t* port; char *buf; DFSCH_OBJECT_ARG_OPT(args, port, dfsch_current_input_port()); DFSCH_ARG_END(args); return dfsch_parser_read_from_port(port); }
DFSCH_DEFINE_PRIMITIVE(get_internal_run_time, NULL){ struct tms t; DFSCH_ARG_END(args); times(&t); return dfsch_make_number_from_long((t.tms_utime + t.tms_stime) & LONG_MAX); }
DFSCH_DEFINE_PRIMITIVE(inet_uri_base64_decode, NULL) { dfsch_strbuf_t* str; DFSCH_BUFFER_ARG(args, str); DFSCH_ARG_END(args); str = dfsch_inet_uri_base64_decode(str); return dfsch_make_byte_vector_nocopy(str->ptr, str->len); }
DFSCH_DEFINE_PRIMITIVE(newline, NULL){ dfsch_object_t* port; char *buf; DFSCH_OBJECT_ARG_OPT(args, port, dfsch_current_output_port()); DFSCH_ARG_END(args); dfsch_port_write_buf(port, "\n", 1); return NULL; }
DFSCH_DEFINE_PRIMITIVE(inet_base64_encode, NULL) { dfsch_strbuf_t* str; dfsch_object_t* wrap; dfsch_object_t* pad; DFSCH_BUFFER_ARG(args, str); DFSCH_OBJECT_ARG_OPT(args, wrap, NULL); DFSCH_OBJECT_ARG_OPT(args, pad, NULL); DFSCH_ARG_END(args); return dfsch_make_string_nocopy(dfsch_inet_base64_encode(str, wrap!=NULL, pad!=NULL)); }
DFSCH_DEFINE_PRIMITIVE(display, NULL){ dfsch_object_t* port; dfsch_object_t* object; char *buf; DFSCH_OBJECT_ARG(args, object); DFSCH_OBJECT_ARG_OPT(args, port, dfsch_current_output_port()); DFSCH_ARG_END(args); buf = dfsch_object_2_string(object, 1000, 0); dfsch_port_write_buf(port, buf, strlen(buf)); return NULL; }
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(http_split_query, NULL) { char* pos; char* uri; DFSCH_STRING_ARG(args, uri); DFSCH_ARG_END(args); pos = strchr(uri, '?'); if (!pos) { return dfsch_list(1, dfsch_make_string_cstr(uri)); } else { return dfsch_list(2, dfsch_make_string_buf(uri, pos-uri), dfsch_make_string_cstr(pos+1)); } }
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(iso_format_time, NULL){ char t = ' '; dfsch_object_t* use_t; dfsch_object_t* time; struct tm* tm; DFSCH_OBJECT_ARG(args, time); DFSCH_OBJECT_ARG_OPT(args, use_t, NULL); DFSCH_ARG_END(args); if (use_t){ t = 'T'; } tm = dfsch_decoded_time_get_tm(time); return dfsch_make_string_cstr(saprintf("%04d-%02d-%02d%c%02d:%02d:%02d", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, t, tm->tm_hour, tm->tm_min, tm->tm_sec)); }
DFSCH_DEFINE_PRIMITIVE(get_decoded_time, NULL){ time_t t; dfsch_object_t* utc; dfsch_object_t* ret; DFSCH_OBJECT_ARG_OPT(args, utc, NULL); DFSCH_ARG_END(args); ret = dfsch_make_decoded_time(); t = time(NULL); if (utc){ gmtime_r(&t, dfsch_decoded_time_get_tm(ret)); } else { localtime_r(&t, 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); }
DFSCH_DEFINE_PRIMITIVE(get_internal_real_time, NULL){ struct tms t; DFSCH_ARG_END(args); return dfsch_make_number_from_long(times(&t) & LONG_MAX); }
DFSCH_DEFINE_PRIMITIVE(get_universal_time, NULL){ DFSCH_ARG_END(args); return dfsch_make_number_from_long(time(NULL)); }
DFSCH_DEFINE_PRIMITIVE(current_error_port, NULL){ DFSCH_ARG_END(args); return dfsch_current_error_port(); }
DFSCH_DEFINE_PRIMITIVE(null_port, NULL){ DFSCH_ARG_END(args); return dfsch_null_port(); }