|
|
1.1 ! root 1: /* ! 2: * UAE - The Un*x Amiga Emulator ! 3: * ! 4: * Try to include the right system headers and get other system-specific ! 5: * stuff right & other collected kludges. ! 6: * ! 7: * If you think about modifying this, think twice. Some systems rely on ! 8: * the exact order of the #include statements. That's also the reason ! 9: * why everything gets included unconditionally regardless of whether ! 10: * it's actually needed by the .c file. ! 11: * ! 12: * Copyright 1996, 1997 Bernd Schmidt ! 13: */ ! 14: ! 15: #ifndef UAESYSDEPS ! 16: #define UAESYSDEPS ! 17: ! 18: ! 19: /* FIXME: We should use a test instead: */ ! 20: /* The number of bytes in a short. */ ! 21: #define SIZEOF_SHORT 2 ! 22: /* The number of bytes in a int. */ ! 23: #define SIZEOF_INT 4 ! 24: /* The number of bytes in a long. */ ! 25: #define SIZEOF_LONG 4 ! 26: ! 27: #include <stdio.h> ! 28: #include <stdlib.h> ! 29: #include <errno.h> ! 30: #include <assert.h> ! 31: #include <limits.h> ! 32: ! 33: #ifndef __STDC__ ! 34: #error "Your compiler is not ANSI. Get a real one." ! 35: #endif ! 36: ! 37: #include <stdarg.h> ! 38: ! 39: #ifdef HAVE_SYS_TYPES_H ! 40: #include <sys/types.h> ! 41: #endif ! 42: ! 43: #ifdef HAVE_VALUES_H ! 44: #include <values.h> ! 45: #endif ! 46: ! 47: #ifdef HAVE_STRINGS_H ! 48: #include <strings.h> ! 49: #endif ! 50: #ifdef HAVE_STRING_H ! 51: #include <string.h> ! 52: #endif ! 53: ! 54: #ifdef HAVE_UNISTD_H ! 55: #include <unistd.h> ! 56: #endif ! 57: #ifdef HAVE_FCNTL_H ! 58: #include <fcntl.h> ! 59: #endif ! 60: ! 61: #ifdef HAVE_UTIME_H ! 62: #include <utime.h> ! 63: #endif ! 64: ! 65: #ifdef HAVE_SYS_STAT_H ! 66: #include <sys/stat.h> ! 67: #endif ! 68: ! 69: #if TIME_WITH_SYS_TIME ! 70: # include <sys/time.h> ! 71: # include <time.h> ! 72: #else ! 73: # if HAVE_SYS_TIME_H ! 74: # include <sys/time.h> ! 75: # else ! 76: # include <time.h> ! 77: # endif ! 78: #endif ! 79: ! 80: #if HAVE_DIRENT_H ! 81: # include <dirent.h> ! 82: #else ! 83: # define dirent direct ! 84: # if HAVE_SYS_NDIR_H ! 85: # include <sys/ndir.h> ! 86: # endif ! 87: # if HAVE_SYS_DIR_H ! 88: # include <sys/dir.h> ! 89: # endif ! 90: # if HAVE_NDIR_H ! 91: # include <ndir.h> ! 92: # endif ! 93: #endif ! 94: ! 95: #ifdef HAVE_SYS_UTIME_H ! 96: # include <sys/utime.h> ! 97: #endif ! 98: ! 99: #include <errno.h> ! 100: #include <assert.h> ! 101: ! 102: #if EEXIST == ENOTEMPTY ! 103: #define BROKEN_OS_PROBABLY_AIX ! 104: #endif ! 105: ! 106: #ifdef __NeXT__ ! 107: #define S_IRUSR S_IREAD ! 108: #define S_IWUSR S_IWRITE ! 109: #define S_IXUSR S_IEXEC ! 110: #define S_ISDIR(val) (S_IFDIR & val) ! 111: struct utimbuf ! 112: { ! 113: time_t actime; ! 114: time_t modtime; ! 115: }; ! 116: #endif ! 117: ! 118: #if defined(__GNUC__) && defined(AMIGA) ! 119: /* gcc on the amiga need that __attribute((regparm)) must */ ! 120: /* be defined in function prototypes as well as in */ ! 121: /* function definitions ! */ ! 122: #define REGPARAM2 REGPARAM ! 123: #else /* not(GCC & AMIGA) */ ! 124: #define REGPARAM2 ! 125: #endif ! 126: ! 127: /* sam: some definitions so that SAS/C can compile UAE */ ! 128: #if defined(__SASC) && defined(AMIGA) ! 129: #define REGPARAM2 ! 130: #define REGPARAM ! 131: #define S_IRUSR S_IREAD ! 132: #define S_IWUSR S_IWRITE ! 133: #define S_IXUSR S_IEXECUTE ! 134: #define S_ISDIR(val) (S_IFDIR & val) ! 135: #define mkdir(x,y) mkdir(x) ! 136: #define truncate(x,y) 0 ! 137: #define creat(x,y) open("T:creat",O_CREAT|O_TEMP|O_RDWR) /* sam: for zfile.c */ ! 138: #define strcasecmp stricmp ! 139: #define utime(file,time) 0 ! 140: struct utimbuf ! 141: { ! 142: time_t actime; ! 143: time_t modtime; ! 144: }; ! 145: #endif ! 146: ! 147: #if defined(WARPUP) ! 148: #include "devices/timer.h" ! 149: #include "osdep/posixemu.h" ! 150: #define REGPARAM ! 151: #define REGPARAM2 ! 152: #define RETSIGTYPE ! 153: #define USE_ZFILE ! 154: #define strcasecmp stricmp ! 155: #define memcpy q_memcpy ! 156: #define memset q_memset ! 157: #define strdup my_strdup ! 158: #define random rand ! 159: #define creat(x,y) open("T:creat",O_CREAT|O_RDWR|O_TRUNC,777) ! 160: extern void* q_memset(void*,int,size_t); ! 161: extern void* q_memcpy(void*,const void*,size_t); ! 162: #endif ! 163: ! 164: #ifdef __DOS__ ! 165: #include <pc.h> ! 166: #include <io.h> ! 167: #endif ! 168: ! 169: /* Acorn specific stuff */ ! 170: #ifdef ACORN ! 171: ! 172: #define S_IRUSR S_IREAD ! 173: #define S_IWUSR S_IWRITE ! 174: #define S_IXUSR S_IEXEC ! 175: ! 176: #define strcasecmp stricmp ! 177: ! 178: #endif ! 179: ! 180: #ifndef L_tmpnam ! 181: #define L_tmpnam 128 /* ought to be safe */ ! 182: #endif ! 183: ! 184: /* If char has more then 8 bits, good night. */ ! 185: typedef unsigned char uae_u8; ! 186: typedef signed char uae_s8; ! 187: ! 188: typedef struct { uae_u8 RGB[3]; } RGB; ! 189: ! 190: #if SIZEOF_SHORT == 2 ! 191: typedef unsigned short uae_u16; ! 192: typedef short uae_s16; ! 193: #elif SIZEOF_INT == 2 ! 194: typedef unsigned int uae_u16; ! 195: typedef int uae_s16; ! 196: #else ! 197: #error No 2 byte type, you lose. ! 198: #endif ! 199: ! 200: #if SIZEOF_INT == 4 ! 201: typedef unsigned int uae_u32; ! 202: typedef int uae_s32; ! 203: #elif SIZEOF_LONG == 4 ! 204: typedef unsigned long uae_u32; ! 205: typedef long uae_s32; ! 206: #else ! 207: #error No 4 byte type, you lose. ! 208: #endif ! 209: ! 210: typedef uae_u32 uaecptr; ! 211: ! 212: #undef uae_s64 ! 213: #undef uae_u64 ! 214: ! 215: #if SIZEOF_LONG_LONG == 8 ! 216: #define uae_s64 long long ! 217: #define uae_u64 long long ! 218: #define VAL64(a) (a ## LL) ! 219: #define UVAL64(a) (a ## uLL) ! 220: #elif SIZEOF___INT64 == 8 ! 221: #define uae_s64 __int64 ! 222: #define uae_u64 unsigned __int64 ! 223: #define VAL64(a) (a) ! 224: #define UVAL64(a) (a) ! 225: #elif SIZEOF_LONG == 8 ! 226: #define uae_s64 long; ! 227: #define uae_u64 unsigned long; ! 228: #define VAL64(a) (a ## l) ! 229: #define UVAL64(a) (a ## ul) ! 230: #endif ! 231: ! 232: #ifdef HAVE_STRDUP ! 233: #define my_strdup strdup ! 234: #else ! 235: extern char *my_strdup (const char*s); ! 236: #endif ! 237: ! 238: extern void *xmalloc(size_t); ! 239: ! 240: /* We can only rely on GNU C getting enums right. Mickeysoft VSC++ is known ! 241: * to have problems, and it's likely that other compilers choke too. */ ! 242: #ifdef __GNUC__ ! 243: #define ENUMDECL typedef enum ! 244: #define ENUMNAME(name) name ! 245: #else ! 246: #define ENUMDECL enum ! 247: #define ENUMNAME(name) ; typedef int name ! 248: #endif ! 249: ! 250: /* ! 251: * Porters to weird systems, look! This is the preferred way to get ! 252: * filesys.c (and other stuff) running on your system. Define the ! 253: * appropriate macros and implement wrappers in a machine-specific file. ! 254: * ! 255: * I guess the Mac port could use this (Ernesto?) ! 256: */ ! 257: ! 258: #undef DONT_HAVE_POSIX ! 259: #undef DONT_HAVE_REAL_POSIX /* define if open+delete doesn't do what it should */ ! 260: #undef DONT_HAVE_STDIO ! 261: #undef DONT_HAVE_MALLOC ! 262: ! 263: #if defined(WARPUP) ! 264: #define DONT_HAVE_POSIX ! 265: #endif ! 266: ! 267: #if defined _WIN32 ! 268: ! 269: #if defined __WATCOMC__ ! 270: ! 271: #define O_NDELAY 0 ! 272: #include <direct.h> ! 273: #define dirent direct ! 274: #define mkdir(a,b) mkdir(a) ! 275: #define strcasecmp stricmp ! 276: ! 277: #elif defined __MINGW32__ ! 278: ! 279: #define O_NDELAY 0 ! 280: #define mkdir(a,b) mkdir(a) ! 281: ! 282: #endif ! 283: ! 284: #endif /* _WIN32 */ ! 285: ! 286: #ifdef DONT_HAVE_POSIX ! 287: ! 288: #define access posixemu_access ! 289: extern int posixemu_access (const char *, int); ! 290: #define open posixemu_open ! 291: extern int posixemu_open (const char *, int, int); ! 292: #define close posixemu_close ! 293: extern void posixemu_close (int); ! 294: #define read posixemu_read ! 295: extern int posixemu_read (int, char *, int); ! 296: #define write posixemu_write ! 297: extern int posixemu_write (int, const char *, int); ! 298: #undef lseek ! 299: #define lseek posixemu_seek ! 300: extern int posixemu_seek (int, int, int); ! 301: #define stat(a,b) posixemu_stat ((a), (b)) ! 302: extern int posixemu_stat (const char *, STAT *); ! 303: #define mkdir posixemu_mkdir ! 304: extern int mkdir (const char *, int); ! 305: #define rmdir posixemu_rmdir ! 306: extern int posixemu_rmdir (const char *); ! 307: #define unlink posixemu_unlink ! 308: extern int posixemu_unlink (const char *); ! 309: #define truncate posixemu_truncate ! 310: extern int posixemu_truncate (const char *, long int); ! 311: #define rename posixemu_rename ! 312: extern int posixemu_rename (const char *, const char *); ! 313: #define chmod posixemu_chmod ! 314: extern int posixemu_chmod (const char *, int); ! 315: #define tmpnam posixemu_tmpnam ! 316: extern void posixemu_tmpnam (char *); ! 317: #define utime posixemu_utime ! 318: extern int posixemu_utime (const char *, struct utimbuf *); ! 319: #define opendir posixemu_opendir ! 320: extern DIR * posixemu_opendir (const char *); ! 321: #define readdir posixemu_readdir ! 322: extern struct dirent* readdir (DIR *); ! 323: #define closedir posixemu_closedir ! 324: extern void closedir (DIR *); ! 325: ! 326: /* This isn't the best place for this, but it fits reasonably well. The logic ! 327: * is that you probably don't have POSIX errnos if you don't have the above ! 328: * functions. */ ! 329: extern long dos_errno (void); ! 330: ! 331: #endif ! 332: ! 333: #ifdef DONT_HAVE_STDIO ! 334: ! 335: extern FILE *stdioemu_fopen (const char *, const char *); ! 336: #define fopen(a,b) stdioemu_fopen(a, b) ! 337: extern int stdioemu_fseek (FILE *, int, int); ! 338: #define fseek(a,b,c) stdioemu_fseek(a, b, c) ! 339: extern int stdioemu_fread (char *, int, int, FILE *); ! 340: #define fread(a,b,c,d) stdioemu_fread(a, b, c, d) ! 341: extern int stdioemu_fwrite (const char *, int, int, FILE *); ! 342: #define fwrite(a,b,c,d) stdioemu_fwrite(a, b, c, d) ! 343: extern int stdioemu_ftell (FILE *); ! 344: #define ftell(a) stdioemu_ftell(a) ! 345: extern int stdioemu_fclose (FILE *); ! 346: #define fclose(a) stdioemu_fclose(a) ! 347: ! 348: #endif ! 349: ! 350: #ifdef DONT_HAVE_MALLOC ! 351: ! 352: #define malloc(a) mallocemu_malloc(a) ! 353: extern void *mallocemu_malloc (int size); ! 354: #define free(a) mallocemu_free(a) ! 355: extern void mallocemu_free (void *ptr); ! 356: ! 357: #endif ! 358: ! 359: #ifdef X86_ASSEMBLY ! 360: #define ASM_SYM_FOR_FUNC(a) __asm__(a) ! 361: #else ! 362: #define ASM_SYM_FOR_FUNC(a) ! 363: #endif ! 364: ! 365: #if defined USE_COMPILER ! 366: #undef NO_PREFETCH_BUFFER ! 367: #undef NO_EXCEPTION_3 ! 368: #define NO_EXCEPTION_3 ! 369: #define NO_PREFETCH_BUFFER ! 370: #endif ! 371: ! 372: /*#include "target.h"*/ ! 373: ! 374: #ifndef O_BINARY ! 375: #define O_BINARY 0 ! 376: #endif ! 377: ! 378: #ifndef STATIC_INLINE ! 379: #define STATIC_INLINE static __inline__ ! 380: #endif ! 381: ! 382: /* ! 383: * You can specify numbers from 0 to 5 here. It is possible that higher ! 384: * numbers will make the CPU emulation slightly faster, but if the setting ! 385: * is too high, you will run out of memory while compiling. ! 386: * Best to leave this as it is. ! 387: */ ! 388: #define CPU_EMU_SIZE 0 ! 389: ! 390: #ifndef REGPARAM ! 391: # define REGPARAM ! 392: #endif ! 393: #ifndef REGPARAM2 ! 394: # define REGPARAM2 ! 395: #endif ! 396: ! 397: #endif /* ifndef UAESYSDEPS */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.