From 5b77460e4fa72762b7e03068f35e37158227eaa8 Mon Sep 17 00:00:00 2001 From: David Brown Date: Fri, 15 Jul 2016 20:26:40 +0100 Subject: [PATCH] Use typedefs rather than defines for basic types. --- src/system/SYSTEM.c | 20 +++++++------- src/system/SYSTEM.h | 54 ++++++++++++++++++++++--------------- src/system/WindowsWrapper.h | 7 ++--- 3 files changed, 46 insertions(+), 35 deletions(-) diff --git a/src/system/SYSTEM.c b/src/system/SYSTEM.c index 0fcc5ee2..50e91c6d 100644 --- a/src/system/SYSTEM.c +++ b/src/system/SYSTEM.c @@ -36,7 +36,7 @@ void SYSTEM_ENUMP(void *adr, LONGINT n, void (*P)()) { while (n > 0) { P((LONGINT)(uintptr_t)(*((void**)(adr)))); - adr = ((void**)adr) + 1; + adr = ((void**)adr) + 1; n--; } } @@ -49,18 +49,18 @@ void SYSTEM_ENUMR(void *adr, LONGINT *typ, LONGINT size, LONGINT n, void (*P)()) t = typ; off = *t; while (off >= 0) {P(*(LONGINT*)((char*)adr+off)); t++; off = *t;} - adr = ((char*)adr) + size; + adr = ((char*)adr) + size; n--; } } -LONGINT SYSTEM_DIV(unsigned LONGINT x, unsigned LONGINT y) +LONGINT SYSTEM_DIV(U_LONGINT x, U_LONGINT y) { if ((LONGINT) x >= 0) return (x / y); else return -((y - 1 - x) / y); } -LONGINT SYSTEM_MOD(unsigned LONGINT x, unsigned LONGINT y) -{ unsigned LONGINT m; +LONGINT SYSTEM_MOD(U_LONGINT x, U_LONGINT y) +{ U_LONGINT m; if ((LONGINT) x >= 0) return (x % y); else { m = (-x) % y; if (m != 0) return (y - m); else return 0; @@ -171,29 +171,29 @@ typedef void (*SystemSignalHandler)(INTEGER); // = Platform_SignalHandler SystemSignalHandler SystemInterruptHandler = 0; SystemSignalHandler SystemQuitHandler = 0; BOOL ConsoleCtrlHandlerSet = FALSE; - + BOOL WINAPI SystemConsoleCtrlHandler(DWORD ctrlType) { if ((ctrlType == CTRL_C_EVENT) || (ctrlType == CTRL_BREAK_EVENT)) { if (SystemInterruptHandler) { SystemInterruptHandler(2); // SIGINT return TRUE; - } + } } else { // Close, logoff or shutdown - if (SystemQuitHandler) { + if (SystemQuitHandler) { SystemQuitHandler(3); // SIGQUIT return TRUE; } } return FALSE; } - + void EnsureConsoleCtrlHandler() { if (!ConsoleCtrlHandlerSet) { SetConsoleCtrlHandler(SystemConsoleCtrlHandler, TRUE); ConsoleCtrlHandlerSet = TRUE; } } - + void SystemSetInterruptHandler(uintptr_t h) { EnsureConsoleCtrlHandler(); SystemInterruptHandler = (SystemSignalHandler)h; diff --git a/src/system/SYSTEM.h b/src/system/SYSTEM.h index 41ef9995..420ca1cd 100644 --- a/src/system/SYSTEM.h +++ b/src/system/SYSTEM.h @@ -41,25 +41,35 @@ // Oberon types -#define BOOLEAN char -#define SYSTEM_BYTE unsigned char -#define CHAR unsigned char -#define SHORTINT signed char -#define REAL float -#define LONGREAL double -#define SYSTEM_PTR void* +typedef char BOOLEAN; +typedef unsigned char SYSTEM_BYTE; +typedef unsigned char CHAR; +typedef signed char SHORTINT; +typedef float REAL; +typedef double LONGREAL; +typedef void* SYSTEM_PTR; + +// Unsigned variants are for use by shift and rotate macros. + +typedef unsigned char U_SYSTEM_BYTE; +typedef unsigned char U_CHAR; +typedef unsigned char U_SHORTINT; // For 32 bit builds, the size of LONGINT depends on a make option: #if (__SIZEOF_POINTER__ == 8) || defined(LARGE) || defined(_WIN64) - #define INTEGER int // INTEGER is 32 bit. - #define LONGINT long long // LONGINT is 64 bit. (long long is always 64 bits, while long can be 32 bits e.g. under MSC/MingW) + typedef int INTEGER; // INTEGER is 32 bit. + typedef long long LONGINT; // LONGINT is 64 bit. (long long is always 64 bits, while long can be 32 bits e.g. under MSC/MingW) + typedef int U_INTEGER; + typedef unsigned long long U_LONGINT; #else - #define INTEGER short int // INTEGER is 16 bit. - #define LONGINT long // LONGINT is 32 bit. + typedef short int INTEGER; // INTEGER is 16 bit. + typedef long LONGINT; // LONGINT is 32 bit. + typedef unsigned short int U_INTEGER; + typedef unsigned long U_LONGINT; #endif -#define SET unsigned LONGINT +typedef U_LONGINT SET; // OS Memory allocation interfaces are in PlatformXXX.Mod @@ -78,8 +88,8 @@ extern double SYSTEM_ABSD (double i); extern void SYSTEM_INHERIT(LONGINT *t, LONGINT *t0); extern void SYSTEM_ENUMP (void *adr, LONGINT n, void (*P)()); extern void SYSTEM_ENUMR (void *adr, LONGINT *typ, LONGINT size, LONGINT n, void (*P)()); -extern LONGINT SYSTEM_DIV (unsigned LONGINT x, unsigned LONGINT y); -extern LONGINT SYSTEM_MOD (unsigned LONGINT x, unsigned LONGINT y); +extern LONGINT SYSTEM_DIV (U_LONGINT x, U_LONGINT y); +extern LONGINT SYSTEM_MOD (U_LONGINT x, U_LONGINT y); extern LONGINT SYSTEM_ENTIER (double x); @@ -127,22 +137,22 @@ static int __str_cmp(CHAR *x, CHAR *y){ #define __GET(a, x, t) x= *(t*)(uintptr_t)(a) #define __PUT(a, x, t) *(t*)(uintptr_t)(a)=x -#define __LSHL(x, n, t) ((t)((unsigned t)(x)<<(n))) -#define __LSHR(x, n, t) ((t)((unsigned t)(x)>>(n))) +#define __LSHL(x, n, t) ((t)((U_##t)(x)<<(n))) +#define __LSHR(x, n, t) ((t)((U_##t)(x)>>(n))) #define __LSH(x, n, t) ((n)>=0? __LSHL(x, n, t): __LSHR(x, -(n), t)) #define __ASHL(x, n) ((LONGINT)(x)<<(n)) #define __ASHR(x, n) ((LONGINT)(x)>>(n)) #define __ASH(x, n) ((n)>=0?__ASHL(x,n):__ASHR(x,-(n))) -#define __ROTL(x, n, t) ((t)((unsigned t)(x)<<(n)|(unsigned t)(x)>>(8*sizeof(t)-(n)))) -#define __ROTR(x, n, t) ((t)((unsigned t)(x)>>(n)|(unsigned t)(x)<<(8*sizeof(t)-(n)))) +#define __ROTL(x, n, t) ((t)((U_##t)(x)<<(n)|(U_##t)(x)>>(8*sizeof(t)-(n)))) +#define __ROTR(x, n, t) ((t)((U_##t)(x)>>(n)|(U_##t)(x)<<(8*sizeof(t)-(n)))) #define __ROT(x, n, t) ((n)>=0? __ROTL(x, n, t): __ROTR(x, -(n), t)) -#define __BIT(x, n) (*(unsigned LONGINT*)(x)>>(n)&1) +#define __BIT(x, n) (*(U_LONGINT*)(x)>>(n)&1) #define __MOVE(s, d, n) memcpy((char*)(uintptr_t)(d),(char*)(uintptr_t)(s),n) #define __ASHF(x, n) SYSTEM_ASH((LONGINT)(x), (LONGINT)(n)) -#define __SHORT(x, y) ((int)((unsigned LONGINT)(x)+(y)<(y)+(y)?(x):(__HALT(-8),0))) +#define __SHORT(x, y) ((int)((U_LONGINT)(x)+(y)<(y)+(y)?(x):(__HALT(-8),0))) #define __SHORTF(x, y) ((int)(__RF((x)+(y),(y)+(y))-(y))) #define __CHR(x) ((CHAR)__R(x, 256)) #define __CHRF(x) ((CHAR)__RF(x, 256)) @@ -165,9 +175,9 @@ static int __str_cmp(CHAR *x, CHAR *y){ // Runtime checks -#define __X(i, ub) (((unsigned LONGINT)(i)<(unsigned LONGINT)(ub))?i:(__HALT(-2),0)) +#define __X(i, ub) (((U_LONGINT)(i)<(U_LONGINT)(ub))?i:(__HALT(-2),0)) #define __XF(i, ub) SYSTEM_XCHK((LONGINT)(i), (LONGINT)(ub)) -#define __R(i, ub) (((unsigned LONGINT)(i)<(unsigned LONGINT)(ub))?i:(__HALT(-8),0)) +#define __R(i, ub) (((U_LONGINT)(i)<(U_LONGINT)(ub))?i:(__HALT(-8),0)) #define __RF(i, ub) SYSTEM_RCHK((LONGINT)(i),(LONGINT)(ub)) #define __RETCHK __retchk: __HALT(-3); return 0; #define __CASECHK __HALT(-4) diff --git a/src/system/WindowsWrapper.h b/src/system/WindowsWrapper.h index cdb8714c..b72c815a 100644 --- a/src/system/WindowsWrapper.h +++ b/src/system/WindowsWrapper.h @@ -2,8 +2,9 @@ // // Includes Windows.h while avoiding conflicts with Oberon types. + +#define BOOLEAN _BOOLEAN +#define CHAR _CHAR +#include #undef BOOLEAN #undef CHAR -#include -#define BOOLEAN char -#define CHAR unsigned char