--- /dev/null
+/*
+ * Platform-dependent stuff for ckutils
+ */
+
+#ifndef _CKU_PLATFORM_H_
+#define _CKU_PLATFORM_H_
+
+#include <string.h>
+#include <stdlib.h>
+
+/* use this for linux compatibility testing */
+//#define linux 1
+/* end linux test */
+
+/*
+ * Make sure endianness is defined...
+ */
+#if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
+ #if macintosh
+ #define __BIG_ENDIAN__ 1
+ #elif defined(i386) || defined(i486) || defined(__i386__) || defined(__i486__)
+ #define __LITTLE_ENDIAN__ 1
+ #else
+ #error Platform dependent work needed
+ #endif
+#endif /* endian */
+
+#ifdef NeXT
+ #import <libc.h>
+ #define SRAND(x) srandom(x)
+ #define RAND() random()
+#else NeXT
+ /*
+ * Use stdlib only
+ */
+ #define SRAND(x) srand(x)
+ #define RAND() rand()
+ #define bcopy(s, d, l) memmove(d, s, l)
+ #define bzero(s, l) memset(s, 0, l)
+ #define bcmp(s, d, l) memcmp(s, d, l)
+#endif
+
+#ifdef CK_NT_C_ONLY
+
+/*
+ * Standard I/O redirects for WINNT.
+ */
+#define open(f, b, c) _open(f, b, c)
+#define close(f) _close(f)
+#define read(f, b, c) _read(f, b, c)
+#define write(f, b, c) _write(f, b, c)
+#define fstat(f, b) _fstat(f, b)
+
+#define O_RDONLY _O_RDONLY
+#define O_WRONLY _O_WRONLY
+#define O_CREAT _O_CREAT
+#define O_TRUNC _O_TRUNC
+
+#endif CK_NT_C_ONLY
+
+/*
+ * Platform-dependent timestamp stuff. For now we assume that each platform
+ * has some kind of struct which maintains a high-resolution clock and
+ * a function which fills that struct with the current time.
+ */
+#if macintosh
+
+ #include <Timer.h>
+
+ #define PLAT_TIME UnsignedWide
+ #define PLAT_GET_TIME(pt) Microseconds(&pt)
+ #define PLAT_GET_US(start,end) (end.lo - start.lo)
+
+#elif linux
+
+ #include <sys/time.h>
+
+ #define PLAT_TIME struct timeval
+ #define PLAT_GET_TIME(pt) gettimeofday(&pt, NULL)
+ #define PLAT_GET_US(start,end) \
+ ( ( ( (end.tv_sec & 0xff) * 1000000) + end.tv_usec) - \
+ ( ( (start.tv_sec & 0xff) * 1000000) + start.tv_usec) )
+
+#elif NeXT
+
+ #include <kern/time_stamp.h>
+
+ #define PLAT_TIME struct tsval
+ #define PLAT_GET_TIME(pt) kern_timestamp(&pt)
+ #define PLAT_GET_US(start,end) (end.low_val - start.low_val)
+
+
+#elif defined(__MACH__) && defined(__APPLE__)
+ #include <CoreFoundation/CoreFoundation.h>
+ /* time as a double */
+ #define PLAT_TIME CFAbsoluteTime
+ #define PLAT_GET_TIME(pt) pt = CFAbsoluteTimeGetCurrent()
+ #define PLAT_GET_US(start,end) \
+ ((end - start) * 1000000.0)
+ #define PLAT_GET_NS(start,end) \
+ ((end - start) * 1000000000.0)
+#else
+ #error Platform dependent work needed
+#endif
+
+#endif /* _CKU_PLATFORM_H_ */