+#ifdef linux /* old, anyway */
+lib "rt";
+#endif
+
+#include <sys/time.h>
+#include <time.h>
+#include <sys/times.h>
+
+// extern time_t time(time_t *t);
function psi\time() : int {
let t = NULL;
- return to_int(time);
+ return time(t) as to_int(time);
}
// extern int gettimeofday(struct timeval *tp, struct timezone *tz);
function psi\gettimeofday(array &$tv = NULL, array &$tz = NULL) : int {
- let tp = calloc(1, psi\SIZEOF_STRUCT_TIMEVAL);
- let tz = calloc(1, psi\SIZEOF_STRUCT_TIMEZONE);
- return to_int(gettimeofday);
+ let tp = calloc(1, sizeof(struct timeval));
+ let tz = calloc(1, sizeof(struct timezone));
+ return gettimeofday(tp, tz) as to_int(gettimeofday);
set $tv = to_array(*tp,
to_int(tv_sec),
to_int(tv_usec));
}
// extern char *asctime(struct tm *tm);
-function psi\asctime(array $tm = NULL) : string {
- let tm = &arrval($tm);
- return to_string(asctime);
+function psi\asctime(array $tm) : string {
+ let tm = &arrval($tm,
+ intval($tm_sec),
+ intval($tm_min),
+ intval($tm_hour),
+ intval($tm_mday),
+ intval($tm_mon),
+ intval($tm_year),
+ intval($tm_wday),
+ intval($tm_yday),
+ intval($tm_isdst)
+ );
+ return asctime(tm) as to_string(asctime);
}
// extern char *asctime_r(struct tm *tm, char *buf);
-function psi\asctime_r(array $tm = NULL) : string {
- let tm = &arrval($tm);
- let buf = calloc(32, psi\SIZEOF_CHAR);
- return to_string(asctime_r);
+function psi\asctime_r(array $tm) : string {
+ let tm = &arrval($tm,
+ intval($tm_sec),
+ intval($tm_min),
+ intval($tm_hour),
+ intval($tm_mday),
+ intval($tm_mon),
+ intval($tm_year),
+ intval($tm_wday),
+ intval($tm_yday),
+ intval($tm_isdst)
+ );
+ let buf = calloc(32, sizeof(char));
+ return asctime_r(tm, buf) as to_string(asctime_r);
}
// extern struct tm *gmtime(time_t *t);
function psi\gmtime(int $ts) : array {
let t = &intval($ts);
- return to_array(*gmtime,
+ return gmtime(t) as to_array(*gmtime,
to_int(tm_sec),
to_int(tm_min),
to_int(tm_hour),
// extern struct tm *gmtime_r(time_t *t, struct tm *buf);
function psi\gmtime_r(int $ts) : array {
let t = &intval($ts);
- let buf = calloc(1, psi\SIZEOF_STRUCT_TM);
- return to_array(*gmtime_r,
+ let buf = calloc(1, sizeof(struct tm));
+ return gmtime_r(t, buf) as to_array(*gmtime_r,
to_int(tm_sec),
to_int(tm_min),
to_int(tm_hour),
// extern int nanosleep(struct timespec *rqts, struct timespec *rmts);
function psi\nanosleep(array $rq = NULL, array &$rm = NULL) : int {
- let rqts = &arrval($rq);
- let rmts = calloc(1, psi\SIZEOF_STRUCT_TIMESPEC);
- return to_int(nanosleep);
+ let rqts = &arrval($rq,
+ intval($tv_sec),
+ intval($tv_nsec)
+ );
+ let rmts = calloc(1, sizeof(struct timespec));
+ return nanosleep(rqts, rmts) as to_int(nanosleep);
set $rm = to_array(*rmts,
to_int(tv_sec),
to_int(tv_nsec)
);
}
+
// extern clock_t times(struct tms *buf);
function psi\times(array &$tms = NULL) : int {
- let buf = calloc(1, psi\SIZEOF_STRUCT_TMS);
- return to_int(times);
- set $tms = to_array(buf,
+ let buf = calloc(1, sizeof(struct tms));
+ return times(buf) as to_int(times);
+ set $tms = to_array(*buf,
to_int(tms_utime),
to_int(tms_stime),
to_int(tms_cutime),
to_int(tms_cstime)
);
}
+
+
+function psi\tzset() : void {
+ return tzset() as void(tzset);
+}
+
+function psi\tzname() : array {
+ return tzname_get() as to_array(tzname_get, 2, to_string(*tzname_get));
+}