+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <stdio.h>
+
+#define MEM_ALLOC(size) (malloc((size_t)(size)))
+#define MEM_FREE(ptr) {if(ptr) free(ptr);}
+
+#define STRCPY(t, s) (strcpy((char*)(t), (char*)(s)))
+#define STRNCPY(t,s,n) (strncpy((char*)(t), (char*)(s), (size_t)(n)))
+#define STRCAT(t, s) (strcat((char*)(t), (char*)(s)))
+#define STRNCAT(t,s,n) (strncat((char*)(t), (char*)(s), (size_t)(n)))
+#define STREQ(a, b) (strcmp((char*)(a), (char*)(b)) == 0)
+#define STRLEN(str) ((str)? strlen((char*)(str)):0)
+
+#define EXPORT
+#define CALLBACK
+#define FAR
+
+typedef signed short SSHOR;
+typedef short WORD;
+typedef long DWORD;
+
+typedef WORD WPARAM;
+typedef DWORD LPARAM;
+typedef int BOOL;
+#endif /* _UNIX_ */
+
+#if defined(WINDOWS) || defined(WIN32_SYSTEM)
+#include <windows.h>
+#include <windowsx.h>
+
+#ifdef _MSVC_
+#define MEM_ALLOC(size) (fmalloc((size_t)(size)))
+#define MEM_FREE(ptr) ((ptr)? ffree((PTR)(ptr)):0))
+#define STRCPY(t, s) (fstrcpy((char FAR*)(t), (char FAR*)(s)))
+#define STRNCPY(t,s,n) (fstrncpy((char FAR*)(t), (char FAR*)(s), (size_t)(n)))
+#define STRLEN(str) ((str)? fstrlen((char FAR*)(str)):0)
+#define STREQ(a, b) (fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)