--- uae/src/include/sysdeps.h 2018/04/24 16:38:39 1.1.1.1 +++ uae/src/include/sysdeps.h 2018/04/24 16:42:31 1.1.1.4 @@ -2,15 +2,27 @@ * UAE - The Un*x Amiga Emulator * * Try to include the right system headers and get other system-specific - * stuff right. + * stuff right & other collected kludges. * - * Copyright 1996 Bernd Schmidt + * If you think about modifying this, think twice. Some systems rely on + * the exact order of the #include statements. That's also the reason + * why everything gets included unconditionally regardless of whether + * it's actually needed by the .c file. + * + * Copyright 1996, 1997 Bernd Schmidt */ #include #include #include #include +#include + +#ifndef __STDC__ +#error "Your compiler is not ANSI. Get a real one." +#endif + +#include #ifdef HAVE_SYS_TYPES_H #include @@ -38,34 +50,10 @@ #include #endif -#ifdef HAVE_SYS_PARAM_H -#include -#endif - -#ifdef HAVE_SYS_SELECT_H -#include -#endif - -#ifdef HAVE_SYS_VFS_H -#include -#endif - #ifdef HAVE_SYS_STAT_H #include #endif -#ifdef HAVE_SYS_MOUNT_H -#include -#endif - -#ifdef HAVE_SYS_STATFS_H -#include -#endif - -#ifdef HAVE_SYS_STATVFS_H -#include -#endif - #if TIME_WITH_SYS_TIME # include # include @@ -92,6 +80,10 @@ # endif #endif +#ifdef HAVE_SYS_UTIME_H +# include +#endif + #include #include @@ -99,14 +91,6 @@ #define BROKEN_OS_PROBABLY_AIX #endif -#ifdef HAVE_LINUX_JOYSTICK_H -#if BROKEN_JOYSTICK_H == 1 -#include "joystick.h" -#else -#include -#endif -#endif - #ifdef __NeXT__ #define S_IRUSR S_IREAD #define S_IWUSR S_IWRITE @@ -119,66 +103,241 @@ struct utimbuf }; #endif +#if defined(__GNUC__) && defined(AMIGA) +/* gcc on the amiga need that __attribute((regparm)) must */ +/* be defined in function prototypes as well as in */ +/* function definitions ! */ +#define REGPARAM2 REGPARAM +#else /* not(GCC & AMIGA) */ +#define REGPARAM2 +#endif + +/* sam: some definitions so that SAS/C can compile UAE */ #if defined(__SASC) && defined(AMIGA) -#include -#include -#include -#include -#include -#include +#define REGPARAM2 +#define REGPARAM +#define S_IRUSR S_IREAD +#define S_IWUSR S_IWRITE +#define S_IXUSR S_IEXECUTE +#define S_ISDIR(val) (S_IFDIR & val) +#define mkdir(x,y) mkdir(x) +#define truncate(x,y) 0 +#define creat(x,y) open("T:creat",O_CREAT|O_TEMP|O_RDWR) /* sam: for zfile.c */ +#define strcasecmp stricmp +#define utime(file,time) 0 +struct utimbuf +{ + time_t actime; + time_t modtime; +}; +#endif -int mkdir(const char *); -int rmdir(const char *); +#ifdef __DOS__ +#include +#include +#endif -#define S_ISDIR(m) (m & S_IFDIR) -#define S_IRUSR ~S_IREAD -#define S_IWUSR ~(S_IWRITE|S_IDELETE) -#define S_IXUSR ~S_IEXECUTE +/* Acorn specific stuff */ +#ifdef ACORN -typedef unsigned short mode_t; +#define S_IRUSR S_IREAD +#define S_IWUSR S_IWRITE +#define S_IXUSR S_IEXEC #define strcasecmp stricmp -#define chip rhubarb + #endif -#ifdef __DOS__ -#include -#include -#else -#undef O_BINARY -#define O_BINARY 0 +#ifndef L_tmpnam +#define L_tmpnam 128 /* ought to be safe */ #endif /* If char has more then 8 bits, good night. */ -typedef unsigned char UBYTE; -typedef signed char BYTE; -typedef struct {UBYTE RGB[3];} RGB; +typedef unsigned char uae_u8; +typedef signed char uae_s8; + +typedef struct { uae_u8 RGB[3]; } RGB; #if SIZEOF_SHORT == 2 -typedef unsigned short UWORD; -typedef short WORD; +typedef unsigned short uae_u16; +typedef short uae_s16; #elif SIZEOF_INT == 2 -typedef unsigned int UWORD; -typedef int WORD; +typedef unsigned int uae_u16; +typedef int uae_s16; #else #error No 2 byte type, you lose. #endif #if SIZEOF_INT == 4 -typedef unsigned int ULONG; -typedef int LONG; +typedef unsigned int uae_u32; +typedef int uae_s32; #elif SIZEOF_LONG == 4 -typedef unsigned long ULONG; -typedef long LONG; +typedef unsigned long uae_u32; +typedef long uae_s32; #else #error No 4 byte type, you lose. #endif -typedef ULONG CPTR; -#undef INT_64BIT +typedef uae_u32 uaecptr; + +#undef uae_s64 +#undef uae_u64 #if SIZEOF_LONG_LONG == 8 -#define INT_64BIT long long +#define uae_s64 long long +#define uae_u64 long long +#define VAL64(a) (a ## LL) +#define UVAL64(a) (a ## uLL) +#elif SIZEOF___INT64 == 8 +#define uae_s64 __int64 +#define uae_u64 unsigned __int64 +#define VAL64(a) (a) +#define UVAL64(a) (a) #elif SIZEOF_LONG == 8 -#define INT_64BIT long +#define uae_s64 long; +#define uae_u64 unsigned long; +#define VAL64(a) (a ## l) +#define UVAL64(a) (a ## ul) +#endif + +#ifdef HAVE_STRDUP +#define my_strdup strdup +#else +extern char *my_strdup (const char*s); +#endif + +extern void *xmalloc(size_t); + +/* We can only rely on GNU C getting enums right. Mickeysoft VSC++ is known + * to have problems, and it's likely that other compilers choke too. */ +#ifdef __GNUC__ +#define ENUMDECL typedef enum +#define ENUMNAME(name) name +#else +#define ENUMDECL enum +#define ENUMNAME(name) ; typedef int name +#endif + +/* + * Porters to weird systems, look! This is the preferred way to get + * filesys.c (and other stuff) running on your system. Define the + * appropriate macros and implement wrappers in a machine-specific file. + * + * I guess the Mac port could use this (Ernesto?) + */ + +#undef DONT_HAVE_POSIX +#undef DONT_HAVE_REAL_POSIX /* define if open+delete doesn't do what it should */ +#undef DONT_HAVE_STDIO +#undef DONT_HAVE_MALLOC + +#if defined _WIN32 + +#if defined __WATCOMC__ + +#define O_NDELAY 0 +#include +#define dirent direct +#define mkdir(a,b) mkdir(a) +#define strcasecmp stricmp + +#elif defined __MINGW32__ + +#define O_NDELAY 0 +#define mkdir(a,b) mkdir(a) + +#endif + +#endif /* _WIN32 */ + +#ifdef DONT_HAVE_POSIX + +#define access posixemu_access +extern int posixemu_access (const char *, int); +#define open posixemu_open +extern int posixemu_open (const char *, int, int); +#define close posixemu_close +extern void posixemu_close (int); +#define read posixemu_read +extern int posixemu_read (int, char *, int); +#define write posixemu_write +extern int posixemu_write (int, const char *, int); +#undef lseek +#define lseek posixemu_seek +extern int posixemu_seek (int, int, int); +#define stat(a,b) posixemu_stat ((a), (b)) +extern int posixemu_stat (const char *, STAT *); +#define mkdir posixemu_mkdir +extern int mkdir (const char *, int); +#define rmdir posixemu_rmdir +extern int posixemu_rmdir (const char *); +#define unlink posixemu_unlink +extern int posixemu_unlink (const char *); +#define truncate posixemu_truncate +extern int posixemu_truncate (const char *, long int); +#define rename posixemu_rename +extern int posixemu_rename (const char *, const char *); +#define chmod posixemu_chmod +extern int posixemu_chmod (const char *, int); +#define tmpnam posixemu_tmpnam +extern void posixemu_tmpnam (char *); +#define utime posixemu_utime +extern int posixemu_utime (const char *, struct utimbuf *); +#define opendir posixemu_opendir +extern DIR * posixemu_opendir (const char *); +#define readdir posixemu_readdir +extern struct dirent* readdir (DIR *); +#define closedir posixemu_closedir +extern void closedir (DIR *); + +/* This isn't the best place for this, but it fits reasonably well. The logic + * is that you probably don't have POSIX errnos if you don't have the above + * functions. */ +extern long dos_errno (void); + +#endif + +#ifdef DONT_HAVE_STDIO + +extern FILE *stdioemu_fopen (const char *, const char *); +#define fopen(a,b) stdioemu_fopen(a, b) +extern int stdioemu_fseek (FILE *, int, int); +#define fseek(a,b,c) stdioemu_fseek(a, b, c) +extern int stdioemu_fread (char *, int, int, FILE *); +#define fread(a,b,c,d) stdioemu_fread(a, b, c, d) +extern int stdioemu_fwrite (const char *, int, int, FILE *); +#define fwrite(a,b,c,d) stdioemu_fwrite(a, b, c, d) +extern int stdioemu_ftell (FILE *); +#define ftell(a) stdioemu_ftell(a) +extern int stdioemu_fclose (FILE *); +#define fclose(a) stdioemu_fclose(a) + +#endif + +#ifdef DONT_HAVE_MALLOC + +#define malloc(a) mallocemu_malloc(a) +extern void *mallocemu_malloc (int size); +#define free(a) mallocemu_free(a) +extern void mallocemu_free (void *ptr); + +#endif + +#ifdef X86_ASSEMBLY +#define ASM_SYM_FOR_FUNC(a) __asm__(a) +#else +#define ASM_SYM_FOR_FUNC(a) +#endif + +#if defined USE_COMPILER +#undef NO_PREFETCH_BUFFER +#undef NO_EXCEPTION_3 +#define NO_EXCEPTION_3 +#define NO_PREFETCH_BUFFER +#endif + +#include "target.h" + +#ifndef O_BINARY +#define O_BINARY 0 #endif