Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

l_precomp.h (6176B)


      1 /*
      2 ===========================================================================
      3 Copyright (C) 1999-2005 Id Software, Inc.
      4 
      5 This file is part of Quake III Arena source code.
      6 
      7 Quake III Arena source code is free software; you can redistribute it
      8 and/or modify it under the terms of the GNU General Public License as
      9 published by the Free Software Foundation; either version 2 of the License,
     10 or (at your option) any later version.
     11 
     12 Quake III Arena source code is distributed in the hope that it will be
     13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 GNU General Public License for more details.
     16 
     17 You should have received a copy of the GNU General Public License
     18 along with Foobar; if not, write to the Free Software
     19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     20 ===========================================================================
     21 */
     22 
     23 /*****************************************************************************
     24  * name:		l_precomp.h
     25  *
     26  * desc:		pre compiler
     27  *
     28  * $Archive: /source/code/botlib/l_precomp.h $
     29  *
     30  *****************************************************************************/
     31 
     32 #ifndef MAX_PATH
     33 	#define MAX_PATH			MAX_QPATH
     34 #endif
     35 
     36 #ifndef PATH_SEPERATORSTR
     37 	#if defined(WIN32)|defined(_WIN32)|defined(__NT__)|defined(__WINDOWS__)|defined(__WINDOWS_386__)
     38 		#define PATHSEPERATOR_STR		"\\"
     39 	#else
     40 		#define PATHSEPERATOR_STR		"/"
     41 	#endif
     42 #endif
     43 #ifndef PATH_SEPERATORCHAR
     44 	#if defined(WIN32)|defined(_WIN32)|defined(__NT__)|defined(__WINDOWS__)|defined(__WINDOWS_386__)
     45 		#define PATHSEPERATOR_CHAR		'\\'
     46 	#else
     47 		#define PATHSEPERATOR_CHAR		'/'
     48 	#endif
     49 #endif
     50 
     51 #if defined(BSPC) && !defined(QDECL)
     52 #define QDECL
     53 #endif
     54 
     55 
     56 #define DEFINE_FIXED			0x0001
     57 
     58 #define BUILTIN_LINE			1
     59 #define BUILTIN_FILE			2
     60 #define BUILTIN_DATE			3
     61 #define BUILTIN_TIME			4
     62 #define BUILTIN_STDC			5
     63 
     64 #define INDENT_IF				0x0001
     65 #define INDENT_ELSE				0x0002
     66 #define INDENT_ELIF				0x0004
     67 #define INDENT_IFDEF			0x0008
     68 #define INDENT_IFNDEF			0x0010
     69 
     70 //macro definitions
     71 typedef struct define_s
     72 {
     73 	char *name;							//define name
     74 	int flags;							//define flags
     75 	int builtin;						// > 0 if builtin define
     76 	int numparms;						//number of define parameters
     77 	token_t *parms;						//define parameters
     78 	token_t *tokens;					//macro tokens (possibly containing parm tokens)
     79 	struct define_s *next;				//next defined macro in a list
     80 	struct define_s *hashnext;			//next define in the hash chain
     81 } define_t;
     82 
     83 //indents
     84 //used for conditional compilation directives:
     85 //#if, #else, #elif, #ifdef, #ifndef
     86 typedef struct indent_s
     87 {
     88 	int type;								//indent type
     89 	int skip;								//true if skipping current indent
     90 	script_t *script;						//script the indent was in
     91 	struct indent_s *next;					//next indent on the indent stack
     92 } indent_t;
     93 
     94 //source file
     95 typedef struct source_s
     96 {
     97 	char filename[1024];					//file name of the script
     98 	char includepath[1024];					//path to include files
     99 	punctuation_t *punctuations;			//punctuations to use
    100 	script_t *scriptstack;					//stack with scripts of the source
    101 	token_t *tokens;						//tokens to read first
    102 	define_t *defines;						//list with macro definitions
    103 	define_t **definehash;					//hash chain with defines
    104 	indent_t *indentstack;					//stack with indents
    105 	int skip;								// > 0 if skipping conditional code
    106 	token_t token;							//last read token
    107 } source_t;
    108 
    109 
    110 //read a token from the source
    111 int PC_ReadToken(source_t *source, token_t *token);
    112 //expect a certain token
    113 int PC_ExpectTokenString(source_t *source, char *string);
    114 //expect a certain token type
    115 int PC_ExpectTokenType(source_t *source, int type, int subtype, token_t *token);
    116 //expect a token
    117 int PC_ExpectAnyToken(source_t *source, token_t *token);
    118 //returns true when the token is available
    119 int PC_CheckTokenString(source_t *source, char *string);
    120 //returns true an reads the token when a token with the given type is available
    121 int PC_CheckTokenType(source_t *source, int type, int subtype, token_t *token);
    122 //skip tokens until the given token string is read
    123 int PC_SkipUntilString(source_t *source, char *string);
    124 //unread the last token read from the script
    125 void PC_UnreadLastToken(source_t *source);
    126 //unread the given token
    127 void PC_UnreadToken(source_t *source, token_t *token);
    128 //read a token only if on the same line, lines are concatenated with a slash
    129 int PC_ReadLine(source_t *source, token_t *token);
    130 //returns true if there was a white space in front of the token
    131 int PC_WhiteSpaceBeforeToken(token_t *token);
    132 //add a define to the source
    133 int PC_AddDefine(source_t *source, char *string);
    134 //add a globals define that will be added to all opened sources
    135 int PC_AddGlobalDefine(char *string);
    136 //remove the given global define
    137 int PC_RemoveGlobalDefine(char *name);
    138 //remove all globals defines
    139 void PC_RemoveAllGlobalDefines(void);
    140 //add builtin defines
    141 void PC_AddBuiltinDefines(source_t *source);
    142 //set the source include path
    143 void PC_SetIncludePath(source_t *source, char *path);
    144 //set the punction set
    145 void PC_SetPunctuations(source_t *source, punctuation_t *p);
    146 //set the base folder to load files from
    147 void PC_SetBaseFolder(char *path);
    148 //load a source file
    149 source_t *LoadSourceFile(const char *filename);
    150 //load a source from memory
    151 source_t *LoadSourceMemory(char *ptr, int length, char *name);
    152 //free the given source
    153 void FreeSource(source_t *source);
    154 //print a source error
    155 void QDECL SourceError(source_t *source, char *str, ...);
    156 //print a source warning
    157 void QDECL SourceWarning(source_t *source, char *str, ...);
    158 
    159 #ifdef BSPC
    160 // some of BSPC source does include game/q_shared.h and some does not
    161 // we define pc_token_s pc_token_t if needed (yes, it's ugly)
    162 #ifndef __Q_SHARED_H
    163 #define MAX_TOKENLENGTH		1024
    164 typedef struct pc_token_s
    165 {
    166 	int type;
    167 	int subtype;
    168 	int intvalue;
    169 	float floatvalue;
    170 	char string[MAX_TOKENLENGTH];
    171 } pc_token_t;
    172 #endif //!_Q_SHARED_H
    173 #endif //BSPC
    174 
    175 //
    176 int PC_LoadSourceHandle(const char *filename);
    177 int PC_FreeSourceHandle(int handle);
    178 int PC_ReadTokenHandle(int handle, pc_token_t *pc_token);
    179 int PC_SourceFileAndLine(int handle, char *filename, int *line);
    180 void PC_CheckOpenSourceHandles(void);