Example #1
0
File: inet_mod.c Project: adh/dfsch
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);
}
Example #2
0
File: system.c Project: adh/dfsch
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);
}
Example #3
0
File: ports.c Project: leia/dfsch
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;
}
Example #4
0
File: inet_mod.c Project: adh/dfsch
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));
}
Example #5
0
File: inet_mod.c Project: adh/dfsch
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);
}
Example #6
0
File: inet_mod.c Project: adh/dfsch
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));
}
Example #7
0
File: inet_mod.c Project: adh/dfsch
DFSCH_DEFINE_PRIMITIVE(http_split_path, NULL) {
    char* path;
    DFSCH_STRING_ARG(args, path);
    DFSCH_ARG_END(args);

    return dfsch_http_split_path(path);
}
Example #8
0
File: ports.c Project: leia/dfsch
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);
}
Example #9
0
File: system.c Project: adh/dfsch
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);
}
Example #10
0
File: inet_mod.c Project: adh/dfsch
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);
}
Example #11
0
File: ports.c Project: leia/dfsch
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;
}
Example #12
0
File: inet_mod.c Project: adh/dfsch
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));
}
Example #13
0
File: ports.c Project: leia/dfsch
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;
}
Example #14
0
File: system.c Project: adh/dfsch
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;
}
Example #15
0
File: ports.c Project: leia/dfsch
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);
}
Example #16
0
File: inet_mod.c Project: adh/dfsch
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));
    }
}
Example #17
0
File: system.c Project: adh/dfsch
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;
}
Example #18
0
File: system.c Project: adh/dfsch
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));
}
Example #19
0
File: system.c Project: adh/dfsch
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;  
}
Example #20
0
File: system.c Project: adh/dfsch
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);
}
Example #21
0
File: system.c Project: adh/dfsch
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);
}
Example #22
0
File: system.c Project: adh/dfsch
DFSCH_DEFINE_PRIMITIVE(get_universal_time, NULL){
  DFSCH_ARG_END(args);

  return dfsch_make_number_from_long(time(NULL));
}
Example #23
0
File: ports.c Project: leia/dfsch
DFSCH_DEFINE_PRIMITIVE(current_error_port, NULL){
  DFSCH_ARG_END(args);
  return dfsch_current_error_port();
}
Example #24
0
File: ports.c Project: leia/dfsch
DFSCH_DEFINE_PRIMITIVE(null_port, NULL){
  DFSCH_ARG_END(args);
  return dfsch_null_port();
}