\r
// HEADER FILES ------------------------------------------------------------\r
\r
+#if defined(_WIN32) && !defined(_MSC_VER)\r
+#define WIN32_LEAN_AND_MEAN\r
+#include <windows.h>\r
+#endif\r
+\r
#ifdef __NeXT__\r
#include <libc.h>\r
#else\r
#ifndef unix\r
#include <io.h>\r
#endif\r
+#include <limits.h>\r
#include <fcntl.h>\r
#include <stdlib.h>\r
#endif\r
int tk_Line;\r
int tk_Number;\r
char *tk_String;\r
-U_BYTE tk_SpecialValue;\r
+int tk_SpecialValue;\r
int tk_SpecialArgCount;\r
char *tk_SourceName;\r
int tk_IncludedLines;\r
{ "wadauthor", TK_WADAUTHOR },\r
{ "nowadauthor", TK_NOWADAUTHOR },\r
{ "acs_executewait", TK_ACSEXECUTEWAIT },\r
+ { "acs_namedexecutewait", TK_ACSNAMEDEXECUTEWAIT },\r
{ "encryptstrings", TK_ENCRYPTSTRINGS },\r
{ "import", TK_IMPORT },\r
{ "library", TK_LIBRARY },\r
{ "libdefine", TK_LIBDEFINE },\r
{ "bool", TK_BOOL },\r
{ "net", TK_NET },\r
+ { "clientside", TK_CLIENTSIDE }, // [BB]\r
{ "disconnect", TK_DISCONNECT },\r
+ { "event", TK_EVENT }, //[BB]\r
{ "unloading", TK_UNLOADING },\r
- { "static", TK_STATIC }\r
+ { "static", TK_STATIC },\r
+ { "strparam", TK_STRPARAM_EVAL }, // [FDARI]\r
+ { "strcpy", TK_STRCPY }, // [FDARI]\r
};\r
\r
#define NUM_KEYWORDS (sizeof(Keywords)/sizeof(Keywords[0]))\r
\r
//==========================================================================\r
//\r
-// AddIncludePath\r
+// TK_AddIncludePath\r
// This adds an include path with less priority than the ones already added\r
// \r
// Pascal 12/11/08\r
strcpy(IncludePaths[NumIncludePaths], sourcePath);\r
\r
// Not ending with directory delimiter?\r
- if(*(IncludePaths[NumIncludePaths] + strlen(IncludePaths[NumIncludePaths]) - 1) != DIRECTORY_DELIMITER_CHAR)\r
+ if(!MS_IsDirectoryDelimiter(*(IncludePaths[NumIncludePaths] + strlen(IncludePaths[NumIncludePaths]) - 1)))\r
{\r
// Add a directory delimiter to the include path\r
- strcat(IncludePaths[NumIncludePaths], DIRECTORY_DELIMITER);\r
+ strcat(IncludePaths[NumIncludePaths], "/");\r
}\r
+ MS_Message(MSG_DEBUG, "Add include path %d: \"%s\"\n", NumIncludePaths, IncludePaths[NumIncludePaths]);\r
NumIncludePaths++;\r
}\r
}\r
\r
+//==========================================================================\r
+//\r
+// TK_AddProgramIncludePath\r
+// Adds an include path for the directory of the executable.\r
+//\r
+//==========================================================================\r
+\r
+void TK_AddProgramIncludePath(char *progname)\r
+{\r
+ if(NumIncludePaths < MAX_INCLUDE_PATHS)\r
+ {\r
+#ifdef _WIN32\r
+#ifdef _MSC_VER\r
+#if _MSC_VER >= 1300\r
+ if (_get_pgmptr(&progname) != 0)\r
+ {\r
+ return;\r
+ }\r
+#else\r
+ progname = _pgmptr;\r
+#endif\r
+#else\r
+ char progbuff[1024];\r
+ GetModuleFileName(0, progbuff, sizeof(progbuff));\r
+ progbuff[sizeof(progbuff)-1] = '\0';\r
+ progname = progbuff;\r
+#endif\r
+#else\r
+ char progbuff[PATH_MAX];\r
+ if (realpath(progname, progbuff) != NULL)\r
+ {\r
+ progname = progbuff;\r
+ }\r
+#endif\r
+ strcpy(IncludePaths[NumIncludePaths], progname);\r
+ if(MS_StripFilename(IncludePaths[NumIncludePaths]))\r
+ {\r
+ MS_Message(MSG_DEBUG, "Program include path is %d: \"%s\"\n", NumIncludePaths, IncludePaths[NumIncludePaths]);\r
+ NumIncludePaths++;\r
+ }\r
+ }\r
+}\r
\r
//==========================================================================\r
//\r
{\r
IncludePaths[0][0] = 0;\r
}\r
- else\r
- {\r
- // Add a directory delimiter to the include path\r
- strcat(IncludePaths[0], DIRECTORY_DELIMITER);\r
- }\r
}\r
\r
\r
// Handle absolute paths\r
if(MS_IsPathAbsolute(fileName))\r
{\r
+#if defined(_WIN32) || defined(__MSDOS__)\r
+ sourceName[0] = '\0';\r
+ if(MS_IsDirectoryDelimiter(fileName[0]))\r
+ {\r
+ // The source file is absolute for the drive, but does not\r
+ // specify a drive. Use the path for the current file to\r
+ // get the drive letter, if it has one.\r
+ if(IncludePaths[0][0] != '\0' && IncludePaths[0][1] == ':')\r
+ {\r
+ sourceName[0] = IncludePaths[0][0];\r
+ sourceName[1] = ':';\r
+ sourceName[2] = '\0';\r
+ }\r
+ }\r
+ strcat(sourceName, fileName);\r
+#else\r
strcpy(sourceName, fileName);\r
+#endif\r
foundfile = MS_FileExists(sourceName);\r
}\r
else\r
ERR_ErrorAt(tk_SourceName, tk_Line);\r
ERR_Exit(ERR_CANT_FIND_INCLUDE, YES, fileName, tk_SourceName, tk_Line);\r
}\r
- \r
+\r
+ MS_Message(MSG_DEBUG, "*Include file found at %s\n", sourceName);\r
+\r
// Now change the first include path to the file directory\r
SetLocalIncludePath(sourceName);\r
\r
\r
void TK_SkipPast(tokenType_t token)\r
{\r
- while (tk_Token != token)\r
+ while (tk_Token != token && tk_Token != TK_EOF)\r
{\r
TK_NextToken();\r
}\r
\r
void TK_SkipTo(tokenType_t token)\r
{\r
- while (tk_Token != token)\r
+ while (tk_Token != token && tk_Token != TK_EOF)\r
{\r
TK_NextToken();\r
}\r
\r
static void EvalFixedConstant(int whole)\r
{\r
- int frac;\r
- int divisor;\r
+ double frac;\r
+ double divisor;\r
\r
frac = 0;\r
divisor = 1;\r
divisor *= 10;\r
NextChr();\r
}\r
- tk_Number = (whole<<16)+((frac<<16)/divisor);\r
+ tk_Number = (whole<<16)+(int)(65536.0*frac/divisor);\r
tk_Token = TK_NUMBER;\r
}\r
\r
*text++ = Chr;\r
}\r
// escape the character after a backslash [JB]\r
- if(Chr == ASCII_BACKSLASH)\r
- escaped ^= (Chr == ASCII_BACKSLASH);\r
+ if(Chr == '\\')\r
+ escaped ^= (Chr == '\\');\r
else\r
escaped = FALSE;\r
NextChr();\r
tk_Number = '\r';\r
break;\r
case '\'':\r
+ case '\\':\r
tk_Number = Chr;\r
break;\r
default:\r