Implemented platform[safe, neutral], compiler[safe, neutral] and C version[safe, neutral] <stdbool.h>. M$ Visual Studio doesn't provide support for C99

This commit is contained in:
Dale Weiler 2012-04-25 17:03:56 -04:00
parent 1fd2666fba
commit 4c55dba10d
2 changed files with 38 additions and 13 deletions

33
gmqcc.h
View file

@ -27,6 +27,30 @@
#include <string.h>
#include <stdio.h>
#include <ctype.h>
/*
* We cannoy rely on C99 at all, since compilers like MSVC
* simply don't support it. We define our own boolean type
* as a result (since we cannot include <stdbool.h>). For
* compilers that are in 1999 mode (C99 compliant) we can use
* the language keyword _Bool which can allow for better code
* on GCC and GCC-like compilers, opposed to `int`.
*/
#ifndef __cplusplus
# ifdef false
# undef false
# endif /* !false */
# ifdef true
# undef true
# endif /* !true */
# define false (0)
# define true (1)
# define bool _Bool
# if __STDC_VERSION__ < 199901L && __GNUC__ < 3
typedef int _Bool
# endif
# endif /* !__cplusplus */
/*
* stdint.h and inttypes.h -less subset
* for systems that don't have it, which we must
@ -508,8 +532,9 @@ enum {
COMPILER_QCCX, /* qccx QuakeC */
COMPILER_GMQCC /* this QuakeC */
};
extern int opts_debug;
extern int opts_memchk;
extern int opts_darkplaces_stringtablebug;
extern int opts_omit_nullcode;
extern bool opts_debug;
extern bool opts_memchk;
extern bool opts_darkplaces_stringtablebug;
extern bool opts_omit_nullcode;
extern int opts_compiler;
#endif

18
main.c
View file

@ -26,11 +26,11 @@ typedef struct { char *name, type; } argitem;
VECTOR_MAKE(argitem, items);
/* global options */
int opts_debug = 0;
int opts_memchk = 0;
int opts_compiler = COMPILER_GMQCC;
int opts_darkplaces_stringtablebug = 0;
int opts_omit_nullcode = 0;
bool opts_debug = false;
bool opts_memchk = false;
bool opts_darkplaces_stringtablebug = false;
bool opts_omit_nullcode = false;
int opts_compiler = COMPILER_GMQCC;
static const int usage(const char *const app) {
printf("usage:\n");
@ -73,8 +73,8 @@ int main(int argc, char **argv) {
case 'a': items_add((argitem){util_strdup(&argv[1][2]), 1}); break; /* assemble */
case 'i': items_add((argitem){util_strdup(&argv[1][2]), 2}); break; /* includes */
default:
if (!strncmp(&argv[1][1], "debug" , 5)) { opts_debug = 1; break; }
if (!strncmp(&argv[1][1], "memchk", 6)) { opts_memchk = 1; break; }
if (!strncmp(&argv[1][1], "debug" , 5)) { opts_debug = true; break; }
if (!strncmp(&argv[1][1], "memchk", 6)) { opts_memchk = true; break; }
if (!strncmp(&argv[1][1], "help", 4)) {
return usage(app);
break;
@ -95,11 +95,11 @@ int main(int argc, char **argv) {
/* code specific switches */
if (!strcmp(&argv[1][1], "fdarkplaces-stringtablebug")) {
opts_darkplaces_stringtablebug = 1;
opts_darkplaces_stringtablebug = true;
break;
}
if (!strcmp(&argv[1][1], "fomit-nullcode")) {
opts_omit_nullcode = 1;
opts_omit_nullcode = true;
break;
}
return usage(app);