]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/doslex.c
Integrated fixes from latest UNIX version.
[wxWidgets.git] / src / common / doslex.c
index 67e789afba7751228df67303e4be33b297c094f1..233e20ab3d57b20f1e4c83f14c1038d39048d71c 100644 (file)
 #ifdef __cplusplus
 
 #include <stdlib.h>
+
+#ifdef __SALFORDC__
+#include <io.h>
+#include <clib.h>
+#else
 #include <osfcn.h>
+#endif
+
+#ifdef __VISAGECPP__
+#include <io.h>
+#endif
+
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
 
 /* use prototypes in function declarations */
 #define YY_USE_PROTOS
@@ -69,7 +85,6 @@ char *malloc();
 int free();
 */
 
-int read();
 #endif
 
 
@@ -119,6 +134,7 @@ int read();
  * done when it reached the ';' after the YY_FATAL_ERROR() call.
  */
 
+#if !defined(__VISAGECPP__)
 #define YY_FATAL_ERROR(msg) \
        do \
                { \
@@ -127,6 +143,18 @@ int read();
                exit( 1 ); \
                } \
        while ( 0 )
+#else
+/* suppress expression always false warning */
+int os2var = 0;
+#define YY_FATAL_ERROR(msg) \
+       do \
+               { \
+               (void) fputs( msg, stderr ); \
+               (void) putc( '\n', stderr ); \
+               exit( 1 ); \
+               } \
+       while ( os2var == 0 )
+#endif
 
 /* default yywrap function - always treat EOF as an EOF */
 int yywrap(void) { return 1; }
@@ -142,6 +170,7 @@ int yywrap(void) { return 1; }
 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
 
 /* special action meaning "start processing a new file" */
+#if !defined(__VISAGECPP__)
 #define YY_NEW_FILE \
        do \
                { \
@@ -149,11 +178,20 @@ int yywrap(void) { return 1; }
                yy_load_buffer_state(); \
                } \
        while ( 0 )
+#else
+#define YY_NEW_FILE \
+       do \
+               { \
+               yy_init_buffer( yy_current_buffer, yyin ); \
+               yy_load_buffer_state(); \
+               } \
+       while ( os2var == 0 )
+#endif
 
 /* default declaration of generated scanner - a define so the user can
  * easily add parameters
  */
-#define YY_DECL int yylex YY_PROTO(( void )) 
+#define YY_DECL int yylex YY_PROTO(( void ))
 
 /* code executed at the end of each rule */
 #define YY_BREAK break;
@@ -192,7 +230,7 @@ extern char *malloc();
 #endif
 #define Return(x) return x;
 
-#if defined(VMS) && !defined(strdup)
+#if defined(VMS) && ( __VMS_VER < 70000000 )
 #define strdup(s) (strcpy((char *)malloc(strlen(s)+1), s));
 #endif
 
@@ -213,7 +251,9 @@ static int my_unput(char);
        if ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
            YY_FATAL_ERROR( "read() in flex scanner failed" );
 #else
-# undef unput
+# ifndef unput
+#  undef unput
+# endif
 # define unput(_c) my_unput(_c)
 #endif
 
@@ -234,6 +274,7 @@ static int my_unput(char);
 #define EOB_ACT_LAST_MATCH 2
 
 /* return all but the first 'n' matched characters back to the input stream */
+#if !defined(__VISAGECPP__)
 #define yyless(n) \
        do \
                { \
@@ -243,6 +284,17 @@ static int my_unput(char);
                YY_DO_BEFORE_ACTION; /* set up yytext again */ \
                } \
        while ( 0 )
+#else
+#define yyless(n) \
+       do \
+               { \
+               /* undo effects of setting up yytext */ \
+               *yy_cp = yy_hold_char; \
+               yy_c_buf_p = yy_cp = yy_bp + n; \
+               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               } \
+       while ( os2var == 0 )
+#endif
 
 #undef unput
 #define unput(c) yyunput( c, yytext )
@@ -465,7 +517,13 @@ YY_DECL
        yy_init = 0;
        }
 
+#if !defined(__VISAGECPP__)
     while ( 1 )                /* loops until end-of-file is reached */
+#else
+    os2var = 1;
+    if (os2var == 0) return 0;
+    while ( os2var == 1 )              /* loops until end-of-file is reached */
+#endif
        {
        yy_cp = yy_c_buf_p;
 
@@ -520,7 +578,7 @@ do_action:  /* this label is used only to access EOF actions */
 
 case 1:
 # line 60 "lexer.l"
-{yylval.s = strdup(yytext); Return(INTEGER);}
+{yylval.s = strdup((const char*) yytext); Return(INTEGER);}
        YY_BREAK
 case 2:
 # line 62 "lexer.l"
@@ -528,18 +586,18 @@ Return(EXP);
        YY_BREAK
 case 3:
 # line 64 "lexer.l"
-{yylval.s = strdup(yytext); Return(WORD);}
+{yylval.s = strdup((const char*) yytext); Return(WORD);}
        YY_BREAK
 case 4:
 # line 66 "lexer.l"
-{int len = strlen(yytext);
+{int len = strlen((const char*) yytext);
                                    yytext[len-1] = 0;
-                                   yylval.s = strdup(yytext+1); 
+                                   yylval.s = strdup((const char*) (yytext+1));
                                    Return(WORD);}
        YY_BREAK
 case 5:
 # line 71 "lexer.l"
-{yylval.s = strdup(yytext); Return(STRING);}
+{yylval.s = strdup((const char*) yytext); Return(STRING);}
        YY_BREAK
 case 6:
 # line 73 "lexer.l"
@@ -717,6 +775,10 @@ case YY_STATE_EOF(INITIAL):
                        "fatal flex scanner internal error--no action found" );
            }
        }
+#if defined(__VISAGECPP__)
+/* VA complains about proc maybe not returning a value so return one */
+return 0;
+#endif
     }
 
 
@@ -724,9 +786,9 @@ case YY_STATE_EOF(INITIAL):
  *
  * synopsis
  *     int yy_get_next_buffer();
- *     
+ *
  * returns a code representing an action
- *     EOB_ACT_LAST_MATCH - 
+ *     EOB_ACT_LAST_MATCH -
  *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
  *     EOB_ACT_END_OF_FILE - end of file
  */
@@ -1163,7 +1225,7 @@ static int my_unput(char c)
 
 #endif
 
-/* Public */ 
+/* Public */
 void LexFromFile(FILE *fd)
 {
   lex_read_from_string = 0;
@@ -1180,7 +1242,7 @@ void LexFromString(char *buffer)
 {
   lex_read_from_string = 1;
   lex_buffer = buffer;
-  lex_buffer_length = strlen(buffer);
+  lex_buffer_length = strlen((const char*) buffer);
   lex_string_ptr = 0;
   /* Don't know why this is necessary, but otherwise
    * lex only works _once_!