]>
Commit | Line | Data |
---|---|---|
b1ab9ed8 A |
1 | /* |
2 | * Platform-dependent stuff for ckutils | |
3 | */ | |
4 | ||
5 | #ifndef _CKU_PLATFORM_H_ | |
6 | #define _CKU_PLATFORM_H_ | |
7 | ||
8 | #include <string.h> | |
9 | #include <stdlib.h> | |
10 | ||
11 | /* use this for linux compatibility testing */ | |
12 | //#define linux 1 | |
13 | /* end linux test */ | |
14 | ||
15 | /* | |
16 | * Make sure endianness is defined... | |
17 | */ | |
18 | #if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) | |
19 | #if macintosh | |
20 | #define __BIG_ENDIAN__ 1 | |
21 | #elif defined(i386) || defined(i486) || defined(__i386__) || defined(__i486__) | |
22 | #define __LITTLE_ENDIAN__ 1 | |
23 | #else | |
24 | #error Platform dependent work needed | |
25 | #endif | |
26 | #endif /* endian */ | |
27 | ||
28 | #ifdef NeXT | |
29 | #import <libc.h> | |
30 | #define SRAND(x) srandom(x) | |
31 | #define RAND() random() | |
32 | #else NeXT | |
33 | /* | |
34 | * Use stdlib only | |
35 | */ | |
36 | #define SRAND(x) srand(x) | |
37 | #define RAND() rand() | |
38 | #define bcopy(s, d, l) memmove(d, s, l) | |
39 | #define bzero(s, l) memset(s, 0, l) | |
40 | #define bcmp(s, d, l) memcmp(s, d, l) | |
41 | #endif | |
42 | ||
43 | #ifdef CK_NT_C_ONLY | |
44 | ||
45 | /* | |
46 | * Standard I/O redirects for WINNT. | |
47 | */ | |
48 | #define open(f, b, c) _open(f, b, c) | |
49 | #define close(f) _close(f) | |
50 | #define read(f, b, c) _read(f, b, c) | |
51 | #define write(f, b, c) _write(f, b, c) | |
52 | #define fstat(f, b) _fstat(f, b) | |
53 | ||
54 | #define O_RDONLY _O_RDONLY | |
55 | #define O_WRONLY _O_WRONLY | |
56 | #define O_CREAT _O_CREAT | |
57 | #define O_TRUNC _O_TRUNC | |
58 | ||
59 | #endif CK_NT_C_ONLY | |
60 | ||
61 | /* | |
62 | * Platform-dependent timestamp stuff. For now we assume that each platform | |
63 | * has some kind of struct which maintains a high-resolution clock and | |
64 | * a function which fills that struct with the current time. | |
65 | */ | |
66 | #if macintosh | |
67 | ||
68 | #include <Timer.h> | |
69 | ||
70 | #define PLAT_TIME UnsignedWide | |
71 | #define PLAT_GET_TIME(pt) Microseconds(&pt) | |
72 | #define PLAT_GET_US(start,end) (end.lo - start.lo) | |
73 | ||
74 | #elif linux | |
75 | ||
76 | #include <sys/time.h> | |
77 | ||
78 | #define PLAT_TIME struct timeval | |
79 | #define PLAT_GET_TIME(pt) gettimeofday(&pt, NULL) | |
80 | #define PLAT_GET_US(start,end) \ | |
81 | ( ( ( (end.tv_sec & 0xff) * 1000000) + end.tv_usec) - \ | |
82 | ( ( (start.tv_sec & 0xff) * 1000000) + start.tv_usec) ) | |
83 | ||
84 | #elif NeXT | |
85 | ||
86 | #include <kern/time_stamp.h> | |
87 | ||
88 | #define PLAT_TIME struct tsval | |
89 | #define PLAT_GET_TIME(pt) kern_timestamp(&pt) | |
90 | #define PLAT_GET_US(start,end) (end.low_val - start.low_val) | |
91 | ||
92 | ||
93 | #elif defined(__MACH__) && defined(__APPLE__) | |
94 | #include <CoreFoundation/CoreFoundation.h> | |
95 | /* time as a double */ | |
96 | #define PLAT_TIME CFAbsoluteTime | |
97 | #define PLAT_GET_TIME(pt) pt = CFAbsoluteTimeGetCurrent() | |
98 | #define PLAT_GET_US(start,end) \ | |
99 | ((end - start) * 1000000.0) | |
100 | #define PLAT_GET_NS(start,end) \ | |
101 | ((end - start) * 1000000000.0) | |
102 | #else | |
103 | #error Platform dependent work needed | |
104 | #endif | |
105 | ||
106 | #endif /* _CKU_PLATFORM_H_ */ |