Add forgotten files 1.4.70b
[polyglot.git] / posix.cpp
1 \r
2 // posix.cpp\r
3 \r
4 // includes\r
5 \r
6 #include <cerrno>\r
7 #include <cstdlib>\r
8 #include <cstring>\r
9 #include <ctime>\r
10 \r
11 #ifdef _WIN32\r
12 \r
13 #include <windows.h>\r
14 \r
15 #else\r
16 \r
17 #include <sys/time.h> // Mac OS X needs this one first\r
18 #include <sys/resource.h>\r
19 #include <sys/types.h>\r
20 #include <unistd.h>\r
21 \r
22 #endif\r
23 \r
24 #include "posix.h"\r
25 #include "util.h"\r
26 \r
27 #ifndef _WIN32\r
28 // prototypes\r
29 \r
30 static double duration (const struct timeval *t);\r
31 \r
32 // functions\r
33 \r
34 \r
35 // input_available()\r
36 \r
37 bool input_available() {\r
38 \r
39    int val;\r
40    fd_set set[1];\r
41    struct timeval time_val[1];\r
42 \r
43    FD_ZERO(set);\r
44    FD_SET(STDIN_FILENO,set);\r
45 \r
46    time_val->tv_sec = 0;\r
47    time_val->tv_usec = 0;\r
48 \r
49    val = select(STDIN_FILENO+1,set,NULL,NULL,time_val);\r
50    if (val == -1) my_fatal("input_available(): select(): %s\n",strerror(errno));\r
51 \r
52    return val != 0;\r
53 }\r
54 \r
55 \r
56 // now_real()\r
57 \r
58 double now_real() {\r
59 \r
60    struct timeval tv[1];\r
61    struct timezone tz[1];\r
62 \r
63    tz->tz_minuteswest = 0;\r
64    tz->tz_dsttime = 0; // DST_NONE not declared in linux\r
65 \r
66    if (gettimeofday(tv,tz) == -1) {\r
67       my_fatal("now_real(): gettimeofday(): %s\n",strerror(errno));\r
68    }\r
69 \r
70    return duration(tv);\r
71 }\r
72 \r
73 // now_cpu()\r
74 \r
75 double now_cpu() {\r
76 \r
77    struct rusage ru[1];\r
78 \r
79    if (getrusage(RUSAGE_SELF,ru) == -1) {\r
80       my_fatal("now_cpu(): getrusage(): %s\n",strerror(errno));\r
81    }\r
82 \r
83    return duration(&ru->ru_utime);\r
84 }\r
85 \r
86 // duration()\r
87 \r
88 static double duration(const struct timeval *tv) {\r
89 \r
90    return tv->tv_sec + tv->tv_usec * 1E-6;\r
91 }\r
92 \r
93 #else\r
94 \r
95 double now_real(void) {\r
96   return (double) GetTickCount() / 1000.0;\r
97 }\r
98 \r
99 #endif\r
100 \r
101 // end of posix.cpp\r