aboutsummaryrefslogtreecommitdiff
path: root/common/scummsys.h
diff options
context:
space:
mode:
authorMax Horn2002-08-21 16:07:07 +0000
committerMax Horn2002-08-21 16:07:07 +0000
commitce46866403fdcc479cf9d67e4d430409b15dadc3 (patch)
tree75ebfaa1ed13f549959d76d3ce101c3e66f5451b /common/scummsys.h
parent662256f25dbe43abf67077a804e225738765f009 (diff)
downloadscummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.tar.gz
scummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.tar.bz2
scummvm-rg350-ce46866403fdcc479cf9d67e4d430409b15dadc3.zip
Initial revision
svn-id: r4785
Diffstat (limited to 'common/scummsys.h')
-rw-r--r--common/scummsys.h366
1 files changed, 366 insertions, 0 deletions
diff --git a/common/scummsys.h b/common/scummsys.h
new file mode 100644
index 0000000000..74fcfbcb84
--- /dev/null
+++ b/common/scummsys.h
@@ -0,0 +1,366 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ *
+ */
+#ifndef __SCUMMSYS_H_
+#define __SCUMMSYS_H_
+
+#include <stdlib.h>
+
+#if defined(HAVE_NO_BOOL)
+typedef int bool;
+const bool true(1), false(0);
+#endif /* HAVE_NO_BOOL */
+
+#if defined(_MSC_VER)
+
+//#pragma warning (disable: 4244)
+//#pragma warning (disable: 4101)
+
+#define scumm_stricmp stricmp
+
+#if defined(CHECK_HEAP)
+#undef CHECK_HEAP
+#define CHECK_HEAP checkHeap();
+#else
+#define CHECK_HEAP
+#endif
+
+#define SCUMM_LITTLE_ENDIAN
+
+#define FORCEINLINE __forceinline
+#define NORETURN _declspec(noreturn)
+
+typedef unsigned char byte;
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned long uint32;
+typedef unsigned int uint;
+typedef signed char int8;
+typedef signed short int16;
+typedef signed long int32;
+
+#define START_PACK_STRUCTS pack (push,1)
+#define END_PACK_STRUCTS pack(pop)
+#define GCC_PACK
+
+#elif defined(__MINGW32__)
+
+#define scumm_stricmp stricmp
+#define CHECK_HEAP
+#define SCUMM_LITTLE_ENDIAN
+
+#define FORCEINLINE inline
+#define NORETURN __attribute__((__noreturn__))
+#define GCC_PACK __attribute__((packed))
+#define _HEAPOK 0
+
+typedef unsigned char byte;
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned long uint32;
+typedef unsigned int uint;
+typedef signed char int8;
+typedef signed short int16;
+typedef signed long int32;
+
+#define START_PACK_STRUCTS pack (push,1)
+#define END_PACK_STRUCTS pack(pop)
+
+#elif defined(UNIX) || defined(__APPLE__)
+
+#define scumm_stricmp strcasecmp
+
+#define CHECK_HEAP
+
+#ifdef X11_BACKEND
+
+/* You need to set those manually */
+#define SCUMM_LITTLE_ENDIAN
+/* #define SCUMM_NEED_ALIGNMENT */
+
+#else
+/* need this for the SDL_BYTEORDER define */
+#include <SDL_byteorder.h>
+
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN
+#define SCUMM_LITTLE_ENDIAN
+#elif SDL_BYTEORDER == SDL_BIG_ENDIAN
+#define SCUMM_BIG_ENDIAN
+#define SCUMM_NEED_ALIGNMENT
+#else
+#error Neither SDL_BIG_ENDIAN nor SDL_LITTLE_ENDIAN is set.
+#endif
+#endif
+
+#define FORCEINLINE inline
+#define CDECL
+
+typedef unsigned char byte;
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned int uint;
+typedef signed char int8;
+typedef signed short int16;
+
+# if defined(__DECCXX) // Assume alpha architecture
+
+# define INVERSE_MKID
+# define SCUMM_NEED_ALIGNMENT
+
+typedef unsigned int uint32;
+typedef signed int int32;
+
+# else
+
+typedef unsigned long uint32;
+typedef signed long int32;
+
+# endif
+
+
+#if defined(__GNUC__)
+#define START_PACK_STRUCTS
+#define END_PACK_STRUCTS
+#define GCC_PACK __attribute__((packed))
+#define NORETURN __attribute__((__noreturn__))
+#else
+#define START_PACK_STRUCTS pack (1)
+#define END_PACK_STRUCTS pack ()
+#define GCC_PACK
+#define NORETURN
+#endif
+
+#elif defined(macintosh)
+#include <stdio.h>
+
+#include "macos.h"
+
+#define scumm_stricmp strcmp
+inline char* strdup(char *buf) {return (char*)buf;};
+
+#define CHECK_HEAP
+#define SCUMM_BIG_ENDIAN
+
+#define FORCEINLINE inline
+#define CDECL
+
+typedef unsigned char byte;
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned long uint32;
+typedef unsigned int uint;
+typedef signed char int8;
+typedef signed short int16;
+typedef signed long int32;
+
+#define START_PACK_STRUCTS pack (1)
+#define END_PACK_STRUCTS pack ()
+#define GCC_PACK
+#define NORETURN
+#define USE_QTMUSIC
+#define NEED_STRDUP
+
+#elif defined(__MORPHOS__)
+#define scumm_stricmp stricmp
+#define CHECK_HEAP
+
+#define SCUMM_BIG_ENDIAN
+#define SCUMM_NEED_ALIGNMENT
+
+#define FORCEINLINE inline
+#define CDECL
+
+typedef unsigned char byte;
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned long uint32;
+typedef unsigned int uint;
+typedef signed char int8;
+typedef signed short int16;
+typedef signed long int32;
+
+#if defined(__GNUC__)
+ #define START_PACK_STRUCTS
+ #define END_PACK_STRUCTS
+ #define GCC_PACK __attribute__((packed))
+ #define NORETURN __attribute__((__noreturn__))
+#else
+ #define START_PACK_STRUCTS pack (1)
+ #define END_PACK_STRUCTS pack ()
+ #define GCC_PACK
+ #define NORETURN
+#endif
+#define main morphos_main
+#elif defined(__DC__)
+
+#define scumm_stricmp strcasecmp
+#define CHECK_HEAP
+#define SCUMM_LITTLE_ENDIAN
+#define SCUMM_NEED_ALIGNMENT
+
+#define FORCEINLINE inline
+#define NORETURN __attribute__((__noreturn__))
+#define GCC_PACK __attribute__((packed))
+#define CDECL
+
+typedef unsigned char byte;
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned long uint32;
+typedef unsigned int uint;
+typedef signed char int8;
+typedef signed short int16;
+typedef signed long int32;
+
+#define START_PACK_STRUCTS pack (push,1)
+#define END_PACK_STRUCTS pack(pop)
+
+#else
+#error No system type defined
+#endif
+
+
+#if defined(SCUMM_LITTLE_ENDIAN)
+
+//#if defined(SCUMM_NEED_ALIGNMENT)
+//#error Little endian processors that need alignment is not implemented
+//#endif
+
+
+#define PROTO_MKID(a) ((((a)>>24)&0xFF) | (((a)>>8)&0xFF00) | (((a)<<8)&0xFF0000) | (((a)<<24)&0xFF000000))
+#define PROTO_MKID_BE(a) (a & 0xffffffff)
+
+#if defined(INVERSE_MKID)
+# define MKID(a) PROTO_MKID_BE(a)
+# define MKID_BE(a) PROTO_MKID(a)
+#else
+# define MKID(a) PROTO_MKID(a)
+# define MKID_BE(a) PROTO_MKID_BE(a)
+#endif
+
+
+#if defined(SCUMM_NEED_ALIGNMENT)
+ FORCEINLINE uint READ_LE_UINT16(void *ptr) {
+ return (((byte*)ptr)[1]<<8)|((byte*)ptr)[0];
+ }
+#else
+ FORCEINLINE uint READ_LE_UINT16(void *ptr) {
+ return *(uint16*)(ptr);
+ }
+#endif
+
+FORCEINLINE uint READ_BE_UINT16(void *ptr) {
+ return (((byte*)ptr)[0]<<8)|((byte*)ptr)[1];
+}
+
+#if defined(SCUMM_NEED_ALIGNMENT)
+ FORCEINLINE uint32 READ_LE_UINT32(void *ptr) {
+ byte *b = (byte*)ptr;
+ return (b[3]<<24)+(b[2]<<16)+(b[1]<<8)+(b[0]);
+ }
+#else
+ FORCEINLINE uint32 READ_LE_UINT32(void *ptr) {
+ return *(uint32*)(ptr);
+ }
+#endif
+
+FORCEINLINE uint32 READ_BE_UINT32(void *ptr) {
+ byte *b = (byte*)ptr;
+ return (b[0]<<24)+(b[1]<<16)+(b[2]<<8)+(b[3]);
+}
+
+#define READ_BE_UINT32_UNALIGNED READ_BE_UINT32
+#define READ_BE_UINT16_UNALIGNED READ_BE_UINT16
+
+#define READ_UINT32_UNALIGNED(a) READ_LE_UINT32(a)
+
+#define FROM_LE_32(__a__) __a__
+#define FROM_LE_16(__a__) __a__
+
+#define TO_LE_32(__a__) __a__
+#define TO_LE_16(__a__) __a__
+
+#define TO_BE_32(a) ((((a)>>24)&0xFF) | (((a)>>8)&0xFF00) | (((a)<<8)&0xFF0000) | (((a)<<24)&0xFF000000))
+
+uint16 FORCEINLINE TO_BE_16(uint16 a) { return (a>>8) | (a<<8); }
+
+#elif defined(SCUMM_BIG_ENDIAN)
+
+#define MKID(a) (a)
+#define MKID_BE(a) (a)
+//#define MKID_BE(a) ((((a)>>24)&0xFF) | (((a)>>8)&0xFF00) | (((a)<<8)&0xFF0000) | (((a)<<24)&0xFF000000))
+
+uint32 FORCEINLINE FROM_LE_32(uint32 a) {
+ return ((a>>24)&0xFF) + ((a>>8)&0xFF00) + ((a<<8)&0xFF0000) + ((a<<24)&0xFF000000);
+}
+
+uint16 FORCEINLINE FROM_LE_16(uint16 a) {
+ return ((a>>8)&0xFF) + ((a<<8)&0xFF00);
+}
+
+#define TO_LE_32 FROM_LE_32
+#define TO_LE_16 FROM_LE_16
+
+uint32 FORCEINLINE READ_LE_UINT32(void *ptr) {
+ byte *b = (byte*)ptr;
+ return (b[3]<<24)+(b[2]<<16)+(b[1]<<8)+(b[0]);
+}
+
+uint32 FORCEINLINE READ_BE_UINT32(void *ptr) {
+ return *(uint32*)(ptr);
+}
+
+uint FORCEINLINE READ_LE_UINT16(void *ptr) {
+ byte *b = (byte*)ptr;
+ return (b[1]<<8) + b[0];
+}
+
+uint FORCEINLINE READ_BE_UINT16(void *ptr) {
+ return *(uint16*)(ptr);
+}
+
+uint FORCEINLINE READ_BE_UINT16_UNALIGNED(void *ptr) {
+ return (((byte*)ptr)[0]<<8)|((byte*)ptr)[1];
+}
+
+uint32 FORCEINLINE READ_BE_UINT32_UNALIGNED(void *ptr) {
+ byte *b = (byte*)ptr;
+ return (b[0]<<24)+(b[1]<<16)+(b[2]<<8)+(b[3]);
+}
+
+#define READ_UINT32_UNALIGNED READ_BE_UINT32_UNALIGNED
+
+#define TO_BE_32(a) (a)
+#define TO_BE_16(a) (a)
+#else
+
+#error No endianness defined
+
+#endif
+
+
+#ifdef NEED_STRDUP
+char *strdup(const char *s);
+#endif
+
+/* Initialized operator new */
+void * operator new(size_t size);
+
+#endif