예제 #1
0
파일: system.c 프로젝트: 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;
}
예제 #2
0
파일: ports.c 프로젝트: 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);
}
예제 #3
0
파일: system.c 프로젝트: 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;
}
예제 #4
0
파일: system.c 프로젝트: 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);
}