| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 | /** * D header file for POSIX. * * Copyright: Public Domain * License: Public Domain * Authors: Sean Kelly * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition */ module tango.stdc.posix.time; private import tango.stdc.posix.config; public import tango.stdc.time; public import tango.stdc.posix.sys.types; public import tango.stdc.posix.signal; // for sigevent extern (C): // // Required (defined in tango.stdc.time) // /* char* asctime(in tm*); clock_t clock(); char* ctime(in time_t*); double difftime(time_t, time_t); tm* gmtime(in time_t*); tm* localtime(in time_t*); time_t mktime(tm*); size_t strftime(char*, size_t, in char*, in tm*); time_t time(time_t*); */ version( linux ) { time_t timegm(tm*); // non-standard } else version( darwin ) { time_t timegm(tm*); // non-standard } else version( FreeBSD ) { time_t timegm(tm*); // non-standard } else version( solaris ) { time_t timegm(tm* t) // non-standard { time_t tl, tb; tm *tg; tl = mktime (t); if (tl == -1) { t.tm_hour--; tl = mktime (t); if (tl == -1) return -1; /* can't deal with output from strptime */ tl += 3600; } tg = gmtime (&tl); tg.tm_isdst = 0; tb = mktime (tg); if (tb == -1) { tg.tm_hour--; tb = mktime (tg); if (tb == -1) return -1; /* can't deal with output from gmtime */ tb += 3600; } return (tl - (tb - tl)); } } // // C Extension (CX) // (defined in tango.stdc.time) // /* char* tzname[]; void tzset(); */ // // Process CPU-Time Clocks (CPT) // /* int clock_getcpuclockid(pid_t, clockid_t*); */ // // Clock Selection (CS) // /* int clock_nanosleep(clockid_t, int, in timespec*, timespec*); */ // // Monotonic Clock (MON) // /* CLOCK_MONOTONIC */ // // Timer (TMR) // /* CLOCK_PROCESS_CPUTIME_ID (TMR|CPT) CLOCK_THREAD_CPUTIME_ID (TMR|TCT) NOTE: timespec must be defined in tango.stdc.posix.signal to break a circular import. struct timespec { time_t tv_sec; int tv_nsec; } struct itimerspec { timespec it_interval; timespec it_value; } CLOCK_REALTIME TIMER_ABSTIME clockid_t timer_t int clock_getres(clockid_t, timespec*); int clock_gettime(clockid_t, timespec*); int clock_settime(clockid_t, in timespec*); int nanosleep(in timespec*, timespec*); int timer_create(clockid_t, sigevent*, timer_t*); int timer_delete(timer_t); int timer_gettime(timer_t, itimerspec*); int timer_getoverrun(timer_t); int timer_settime(timer_t, int, in itimerspec*, itimerspec*); */ version( linux ) { const CLOCK_PROCESS_CPUTIME_ID = 2; // (TMR|CPT) const CLOCK_THREAD_CPUTIME_ID = 3; // (TMR|TCT) // NOTE: See above for why this is commented out. // //struct timespec //{ // time_t tv_sec; // c_long tv_nsec; //} struct itimerspec { timespec it_interval; timespec it_value; } const CLOCK_REALTIME = 0; const TIMER_ABSTIME = 0x01; alias int clockid_t; alias int timer_t; int clock_getres(clockid_t, timespec*); //int clock_gettime(clockid_t, timespec*); //int clock_settime(clockid_t, in timespec*); int nanosleep(in timespec*, timespec*); int timer_create(clockid_t, sigevent*, timer_t*); int timer_delete(timer_t); int timer_gettime(timer_t, itimerspec*); int timer_getoverrun(timer_t); int timer_settime(timer_t, int, in itimerspec*, itimerspec*); } else version( darwin ) { int nanosleep(in timespec*, timespec*); } else version( FreeBSD ) { const CLOCK_PROCESS_CPUTIME_ID = 2; // (TMR|CPT) const CLOCK_THREAD_CPUTIME_ID = 3; // (TMR|TCT) // NOTE: See above for why this is commented out. // //struct timespec //{ // time_t tv_sec; // c_long tv_nsec; //} struct itimerspec { timespec it_interval; timespec it_value; } const CLOCK_REALTIME = 0; const TIMER_ABSTIME = 0x01; alias int clockid_t; alias int timer_t; int clock_getres(clockid_t, timespec*); int clock_gettime(clockid_t, timespec*); int clock_settime(clockid_t, in timespec*); int nanosleep(in timespec*, timespec*); int timer_create(clockid_t, sigevent*, timer_t*); int timer_delete(timer_t); int timer_gettime(timer_t, itimerspec*); int timer_getoverrun(timer_t); int timer_settime(timer_t, int, in itimerspec*, itimerspec*); } else version( solaris ) { const CLOCK_PROCESS_CPUTIME_ID = 5; // (TMR|CPT) const CLOCK_THREAD_CPUTIME_ID = 2; // (TMR|TCT) // NOTE: See above for why this is commented out. // //struct timespec //{ // time_t tv_sec; // c_long tv_nsec; //} struct itimerspec { timespec it_interval; timespec it_value; } const CLOCK_REALTIME = 3; const TIMER_ABSTIME = 0x1; alias int clockid_t; alias int timer_t; int clock_getres(clockid_t, timespec*); int clock_gettime(clockid_t, timespec*); int clock_settime(clockid_t, in timespec*); int nanosleep(in timespec*, timespec*); int timer_create(clockid_t, sigevent*, timer_t*); int timer_delete(timer_t); int timer_gettime(timer_t, itimerspec*); int timer_getoverrun(timer_t); int timer_settime(timer_t, int, in itimerspec*, itimerspec*); } // // Thread-Safe Functions (TSF) // /* char* asctime_r(in tm*, char*); char* ctime_r(in time_t*, char*); tm* gmtime_r(in time_t*, tm*); tm* localtime_r(in time_t*, tm*); */ version( linux ) { char* asctime_r(in tm*, char*); char* ctime_r(in time_t*, char*); tm* gmtime_r(in time_t*, tm*); tm* localtime_r(in time_t*, tm*); } else version( darwin ) { char* asctime_r(in tm*, char*); char* ctime_r(in time_t*, char*); tm* gmtime_r(in time_t*, tm*); tm* localtime_r(in time_t*, tm*); } else version( FreeBSD ) { char* asctime_r(in tm*, char*); char* ctime_r(in time_t*, char*); tm* gmtime_r(in time_t*, tm*); tm* localtime_r(in time_t*, tm*); } else version( solaris ) { char* asctime_r(in tm*, char*); char* ctime_r(in time_t*, char*); tm* gmtime_r(in time_t*, tm*); tm* localtime_r(in time_t*, tm*); } // // XOpen (XSI) // /* getdate_err int daylight; int timezone; tm* getdate(in char*); char* strptime(in char*, in char*, tm*); */ version( linux ) { extern __gshared int daylight; extern __gshared c_long timezone; tm* getdate(in char*); char* strptime(in char*, in char*, tm*); } else version( darwin ) { extern __gshared c_long timezone; tm* getdate(in char*); char* strptime(in char*, in char*, tm*); } else version( FreeBSD ) { extern __gshared c_long timezone; //tm* getdate(in char*); char* strptime(in char*, in char*, tm*); } else version( solaris ) { extern __gshared c_long timezone; tm* getdate(in char*); char* strptime(in char*, in char*, tm*); } |