OSDN Git Service

ACC header for APROP_Reactiontime
[zandronum/zandronum-acc.git] / token.c
diff --git a/token.c b/token.c
index bc19cc9..38546a2 100644 (file)
--- a/token.c
+++ b/token.c
@@ -7,12 +7,18 @@
 \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
@@ -90,7 +96,7 @@ tokenType_t tk_Token;
 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
@@ -177,15 +183,19 @@ static struct keyword_s
        { "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
        { "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
@@ -305,7 +315,7 @@ static char *AddFileName(const char *name)
 \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
@@ -325,10 +335,53 @@ void TK_AddIncludePath(char *sourcePath)
                        // Add a directory delimiter to the include path\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
@@ -623,7 +676,7 @@ int TK_NextCharacter(void)
 \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
@@ -638,7 +691,7 @@ void TK_SkipPast(tokenType_t token)
 \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
@@ -913,8 +966,8 @@ static void ProcessNumberToken(void)
 \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
@@ -924,7 +977,7 @@ static void EvalFixedConstant(int whole)
                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
@@ -1329,6 +1382,7 @@ static void ProcessSpecialToken(void)
                                        tk_Number = '\r';\r
                                        break;\r
                                case '\'':\r
+                               case '\\':\r
                                        tk_Number = Chr;\r
                                        break;\r
                                default:\r