1*b1cdbd2cSJim Jagielski 2*b1cdbd2cSJim Jagielski %{ 3*b1cdbd2cSJim Jagielski /************************************************************** 4*b1cdbd2cSJim Jagielski * 5*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 6*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 7*b1cdbd2cSJim Jagielski * distributed with this work for additional information 8*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 9*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 10*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 11*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 14*b1cdbd2cSJim Jagielski * 15*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 16*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 17*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 19*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 20*b1cdbd2cSJim Jagielski * under the License. 21*b1cdbd2cSJim Jagielski * 22*b1cdbd2cSJim Jagielski *************************************************************/ 23*b1cdbd2cSJim Jagielski /* 24*b1cdbd2cSJim Jagielski * lexer for parsing ressource source files (*.src) 25*b1cdbd2cSJim Jagielski * 26*b1cdbd2cSJim Jagielski */ 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski /* enlarge token buffer to tokenize whole strings */ 30*b1cdbd2cSJim Jagielski #undef YYLMAX 31*b1cdbd2cSJim Jagielski #define YYLMAX 64000 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski /* to enable debug output define LEXDEBUG */ 34*b1cdbd2cSJim Jagielski #define LEXDEBUG 1 35*b1cdbd2cSJim Jagielski #ifdef LEXDEBUG 36*b1cdbd2cSJim Jagielski #define OUTPUT fprintf 37*b1cdbd2cSJim Jagielski #else 38*b1cdbd2cSJim Jagielski #define OUTPUT(Par1,Par2); 39*b1cdbd2cSJim Jagielski #endif 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski /* table of possible token ids */ 42*b1cdbd2cSJim Jagielski #include "tokens.h" 43*b1cdbd2cSJim Jagielski #include <stdlib.h> 44*b1cdbd2cSJim Jagielski #include <stdio.h> 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski #if defined __GNUC__ 47*b1cdbd2cSJim Jagielski #pragma GCC system_header 48*b1cdbd2cSJim Jagielski #elif defined __SINPRO_CC 49*b1cdbd2cSJim Jagielski #pragma disable_warn 50*b1cdbd2cSJim Jagielski #elif defined _MSC_VER 51*b1cdbd2cSJim Jagielski #pragma warning(push, 1) 52*b1cdbd2cSJim Jagielski #endif 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski /* external functions (C++ code, declared as extren "C" */ 55*b1cdbd2cSJim Jagielski extern int WorkOnTokenSet( int, char* ); 56*b1cdbd2cSJim Jagielski extern int InitExport( char * , char * ); 57*b1cdbd2cSJim Jagielski extern int Parse( int nTyp, char *pTokenText ); 58*b1cdbd2cSJim Jagielski extern int EndExport(); 59*b1cdbd2cSJim Jagielski extern int SetError(); 60*b1cdbd2cSJim Jagielski extern int GetError(); 61*b1cdbd2cSJim Jagielski extern char *GetOutputFile( int argc, char* argv[]); 62*b1cdbd2cSJim Jagielski extern FILE *GetNextFile(); 63*b1cdbd2cSJim Jagielski extern int isQuiet(); 64*b1cdbd2cSJim Jagielski extern void Close(); 65*b1cdbd2cSJim Jagielski extern char* getFilename(); 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski /* forwards */ 68*b1cdbd2cSJim Jagielski void YYWarning(); 69*b1cdbd2cSJim Jagielski %} 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski %p 24000 72*b1cdbd2cSJim Jagielski %e 1200 73*b1cdbd2cSJim Jagielski %n 500 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski %% 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski ^[\t ]*"#pragma".* { 78*b1cdbd2cSJim Jagielski WorkOnTokenSet( PRAGMA, yytext ); 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski ^[ \t]*\n { 82*b1cdbd2cSJim Jagielski WorkOnTokenSet( EMPTYLINE, yytext ); 83*b1cdbd2cSJim Jagielski } 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski [\t ]+ | 86*b1cdbd2cSJim Jagielski ^[\t ]*"#include".* | 87*b1cdbd2cSJim Jagielski ^[\t ]*"#undef".* | 88*b1cdbd2cSJim Jagielski "//".* | 89*b1cdbd2cSJim Jagielski ";" | 90*b1cdbd2cSJim Jagielski "<" | 91*b1cdbd2cSJim Jagielski ">" | 92*b1cdbd2cSJim Jagielski \n { 93*b1cdbd2cSJim Jagielski WorkOnTokenSet( IGNOREDTOKENS, yytext ); 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski "/*" { 96*b1cdbd2cSJim Jagielski char c1 = 0, c2 = input(); 97*b1cdbd2cSJim Jagielski char pChar[2]; 98*b1cdbd2cSJim Jagielski pChar[1] = 0x00; 99*b1cdbd2cSJim Jagielski pChar[0] = c2; 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski WorkOnTokenSet( COMMEND, yytext ); 102*b1cdbd2cSJim Jagielski WorkOnTokenSet( COMMEND, pChar ); 103*b1cdbd2cSJim Jagielski for(;;) { 104*b1cdbd2cSJim Jagielski if ( c2 == EOF ) 105*b1cdbd2cSJim Jagielski break; 106*b1cdbd2cSJim Jagielski if ( c1 == '*' && c2 == '/' ) 107*b1cdbd2cSJim Jagielski break; 108*b1cdbd2cSJim Jagielski c1 = c2; 109*b1cdbd2cSJim Jagielski c2 = input(); 110*b1cdbd2cSJim Jagielski pChar[0] = c2; 111*b1cdbd2cSJim Jagielski WorkOnTokenSet( COMMEND, pChar ); 112*b1cdbd2cSJim Jagielski } 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski ^[\t ]*"#ifndef".+$ | 116*b1cdbd2cSJim Jagielski ^[\t ]*"#ifdef".+$ | 117*b1cdbd2cSJim Jagielski ^[\t ]*"#if".+$ | 118*b1cdbd2cSJim Jagielski ^[\t ]*"#elif".*$ | 119*b1cdbd2cSJim Jagielski ^[\t ]*"#else".*$ | 120*b1cdbd2cSJim Jagielski ^[\t ]*"#endif".*$ { 121*b1cdbd2cSJim Jagielski WorkOnTokenSet( CONDITION, yytext ); 122*b1cdbd2cSJim Jagielski } 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski [a-zA-Z]+[\t ]+[^={\n]+[\t ] { 125*b1cdbd2cSJim Jagielski /* defined Res */ 126*b1cdbd2cSJim Jagielski WorkOnTokenSet( DEFINEDRES, yytext ); 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski [a-zA-Z]+[ \t]+[^={;\n]+\n[ \t]*"#".*\n[ \t]*"{" | 130*b1cdbd2cSJim Jagielski [a-zA-Z]+[ \t]+[^={;\n]+\n?([ \t]*"//".*\n)*[ \t]*"{" { 131*b1cdbd2cSJim Jagielski /* RESSOURCE // String TTT_XX ... */ 132*b1cdbd2cSJim Jagielski WorkOnTokenSet( RESSOURCE, yytext ); 133*b1cdbd2cSJim Jagielski } 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski ^[\t ]*[a-zA-Z_]+[\t ]*"\\"?[\t ]*\n?[ \t]*"{"[\t ]*"\\"? { 136*b1cdbd2cSJim Jagielski /* SMALRESSOURCE // String ... */ 137*b1cdbd2cSJim Jagielski WorkOnTokenSet( SMALRESSOURCE, yytext ); 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski [\t ]*[a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?=[ \t]*L?\".*\".*\n? { 141*b1cdbd2cSJim Jagielski /* TEXTLINE // TextTyp = "A Text" */ 142*b1cdbd2cSJim Jagielski WorkOnTokenSet( TEXTLINE, yytext ); 143*b1cdbd2cSJim Jagielski } 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski [\t ]*[a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?(\n[ \t]*)?=([ \t]*\n)?(([a-zA-Z0-9_]+)|(\".*\")|([ \t\n]*))*\".*\"(([a-zA-Z0-9_]+)|(\".*\")|([ \t\n]*))*; { 146*b1cdbd2cSJim Jagielski /* LONGTEXTLINE // TextTyp = "A Text" HHH_XXX "A Text" ZZZ_TTT ... */ 147*b1cdbd2cSJim Jagielski WorkOnTokenSet( LONGTEXTLINE, yytext ); 148*b1cdbd2cSJim Jagielski } 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski \".*\" { 151*b1cdbd2cSJim Jagielski /* TEXT // "A Text" */ 152*b1cdbd2cSJim Jagielski WorkOnTokenSet( TEXT, yytext ); 153*b1cdbd2cSJim Jagielski } 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski "{"[ \t]*\\? { 156*b1cdbd2cSJim Jagielski /* LEVELUP */ 157*b1cdbd2cSJim Jagielski WorkOnTokenSet( LEVELUP, yytext ); 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski "}"[ \t]*;([ \t]*\\)? { 161*b1cdbd2cSJim Jagielski /* LEVELDOWN */ 162*b1cdbd2cSJim Jagielski WorkOnTokenSet( LEVELDOWN, yytext ); 163*b1cdbd2cSJim Jagielski } 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski [a-zA-Z0-9_]+[ \t]*"="[ \t]*"MAP_APPFONT"[ \t]*"(".+")".* { 166*b1cdbd2cSJim Jagielski /* APPFONTMAPPING Typ = MAP_APPFONT( ... ) */ 167*b1cdbd2cSJim Jagielski WorkOnTokenSet( APPFONTMAPPING, yytext ); 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski [ \t]*[a-zA-Z0-9_]+[ \t]*=[ \t]*[0123456789]{1,5}[ \t]*";"?\\? { 171*b1cdbd2cSJim Jagielski /* TEXTREFID // TextTyp = 12345 */ 172*b1cdbd2cSJim Jagielski WorkOnTokenSet( TEXTREFID, yytext ); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski [a-zA-Z0-9_]+[ \t]*"="[\t ]*([ \t]*"//".*\n)*.* | 176*b1cdbd2cSJim Jagielski [a-zA-Z0-9_]+[ \t]*"=".* { 177*b1cdbd2cSJim Jagielski /* ASSIGNMENT Typ = ... */ 178*b1cdbd2cSJim Jagielski WorkOnTokenSet( ASSIGNMENT, yytext ); 179*b1cdbd2cSJim Jagielski } 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski [a-zA-Z0-9_]+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]*"<" { 184*b1cdbd2cSJim Jagielski /* LISTASSIGNMENT Typ [ ... ] = ... */ 185*b1cdbd2cSJim Jagielski WorkOnTokenSet( LISTASSIGNMENT, yytext ); 186*b1cdbd2cSJim Jagielski } 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski "StringList"+[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{"[ \t]*(\\[ \t]*)?\n?[ \t]* { 189*b1cdbd2cSJim Jagielski /* LISTASSIGNMENT Typ [ ... ] = ... */ 190*b1cdbd2cSJim Jagielski WorkOnTokenSet( LISTASSIGNMENT, yytext ); 191*b1cdbd2cSJim Jagielski } 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski "UIEntries"[ \t]*("["[ \t]*[a-zA-Z0-9_\-]+[ \t]*"]"[ \t]*)?"="[ \t]*(\\[ \t]*)?\n?[ \t]*"{" { 194*b1cdbd2cSJim Jagielski /* UIENTRIES */ 195*b1cdbd2cSJim Jagielski WorkOnTokenSet( UIENTRIES, yytext ); 196*b1cdbd2cSJim Jagielski } 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski "<"?[ \t]*L?\".*\".*">" { 199*b1cdbd2cSJim Jagielski /* LISTTEXT */ 200*b1cdbd2cSJim Jagielski WorkOnTokenSet( LISTTEXT, yytext ); 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.*"\\" { 204*b1cdbd2cSJim Jagielski /* RSCDEFINE #define ... */ 205*b1cdbd2cSJim Jagielski WorkOnTokenSet( RSCDEFINE, yytext ); 206*b1cdbd2cSJim Jagielski } 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski [ \t]*"#define"[ \t]+[a-zA-Z0-9_]+.+ { 209*b1cdbd2cSJim Jagielski /* #define ... */ 210*b1cdbd2cSJim Jagielski WorkOnTokenSet( NORMDEFINE, yytext ); 211*b1cdbd2cSJim Jagielski } 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski "\\" { 214*b1cdbd2cSJim Jagielski /* RSCDEFINELEND */ 215*b1cdbd2cSJim Jagielski WorkOnTokenSet( RSCDEFINELEND, yytext ); 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski [a-zA-Z0-9_]+[ \t]*; { 219*b1cdbd2cSJim Jagielski /* allowed other tokens like "49 ;" or "SFX_... ;" */ 220*b1cdbd2cSJim Jagielski WorkOnTokenSet( ANYTOKEN, yytext ); 221*b1cdbd2cSJim Jagielski } 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski . { 224*b1cdbd2cSJim Jagielski WorkOnTokenSet( UNKNOWNCHAR, yytext ); 225*b1cdbd2cSJim Jagielski /* YYWarning( "Unknown Char" ); */ 226*b1cdbd2cSJim Jagielski } 227*b1cdbd2cSJim Jagielski 228*b1cdbd2cSJim Jagielski "{"?[ \t]*\".*\"[ \t]*";"[ \t]*"}" { 229*b1cdbd2cSJim Jagielski /* _LISTTEXT */ 230*b1cdbd2cSJim Jagielski WorkOnTokenSet( _LISTTEXT, yytext ); 231*b1cdbd2cSJim Jagielski } 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski %% 234*b1cdbd2cSJim Jagielski 235*b1cdbd2cSJim Jagielski /*****************************************************************************/ 236*b1cdbd2cSJim Jagielski int yywrap(void) 237*b1cdbd2cSJim Jagielski /*****************************************************************************/ 238*b1cdbd2cSJim Jagielski { 239*b1cdbd2cSJim Jagielski FILE *pFile; 240*b1cdbd2cSJim Jagielski pFile = GetNextFile(); 241*b1cdbd2cSJim Jagielski if ( pFile ) { 242*b1cdbd2cSJim Jagielski yyin = pFile; 243*b1cdbd2cSJim Jagielski yylineno = 0; 244*b1cdbd2cSJim Jagielski return 0; 245*b1cdbd2cSJim Jagielski } 246*b1cdbd2cSJim Jagielski 247*b1cdbd2cSJim Jagielski /* end of input reached */ 248*b1cdbd2cSJim Jagielski return 1; 249*b1cdbd2cSJim Jagielski } 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski /*****************************************************************************/ 252*b1cdbd2cSJim Jagielski void YYWarning( char *s ) 253*b1cdbd2cSJim Jagielski /*****************************************************************************/ 254*b1cdbd2cSJim Jagielski { 255*b1cdbd2cSJim Jagielski /* write warning to stderr */ 256*b1cdbd2cSJim Jagielski fprintf( stderr, "Warning: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext ); 257*b1cdbd2cSJim Jagielski } 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski /*****************************************************************************/ 260*b1cdbd2cSJim Jagielski void yyerror( char *s ) 261*b1cdbd2cSJim Jagielski /*****************************************************************************/ 262*b1cdbd2cSJim Jagielski { 263*b1cdbd2cSJim Jagielski /* write error to stderr */ 264*b1cdbd2cSJim Jagielski fprintf( stderr, "Error: \"%s\" in line %d: \"%s\"\n", s, yylineno, yytext ); 265*b1cdbd2cSJim Jagielski SetError(); 266*b1cdbd2cSJim Jagielski } 267*b1cdbd2cSJim Jagielski 268*b1cdbd2cSJim Jagielski /*****************************************************************************/ 269*b1cdbd2cSJim Jagielski int 270*b1cdbd2cSJim Jagielski #ifdef WNT 271*b1cdbd2cSJim Jagielski _cdecl 272*b1cdbd2cSJim Jagielski #endif 273*b1cdbd2cSJim Jagielski main( int argc, char* argv[]) 274*b1cdbd2cSJim Jagielski /*****************************************************************************/ 275*b1cdbd2cSJim Jagielski { 276*b1cdbd2cSJim Jagielski /* error level */ 277*b1cdbd2cSJim Jagielski int nRetValue = 0; 278*b1cdbd2cSJim Jagielski char *pOutput; 279*b1cdbd2cSJim Jagielski FILE *pFile; 280*b1cdbd2cSJim Jagielski 281*b1cdbd2cSJim Jagielski pOutput = GetOutputFile( argc, argv ); 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski if ( !pOutput ) { 284*b1cdbd2cSJim Jagielski fprintf( stdout, "Syntax:TRANSEX[-p Prj][-r PrjRoot]-i FileIn...[-o FileOut][-m DataBase][-e][-b][-u][-L l1,l2,...]\n" ); 285*b1cdbd2cSJim Jagielski fprintf( stdout, " Prj: Project\n" ); 286*b1cdbd2cSJim Jagielski fprintf( stdout, " PrjRoot: Path to project root (..\\.. etc.)\n" ); 287*b1cdbd2cSJim Jagielski fprintf( stdout, " FileIn: Source files (*.src)\n" ); 288*b1cdbd2cSJim Jagielski fprintf( stdout, " FileOut: Destination file (*.*)\n" ); 289*b1cdbd2cSJim Jagielski fprintf( stdout, " DataBase: Mergedata (*.sdf)\n" ); 290*b1cdbd2cSJim Jagielski fprintf( stdout, " -QQ: quiet output\n" ); 291*b1cdbd2cSJim Jagielski fprintf( stdout, " -e: Disable writing errorlog\n" ); 292*b1cdbd2cSJim Jagielski fprintf( stdout, " -b: Break when Token \"HelpText\" found in source\n" ); 293*b1cdbd2cSJim Jagielski fprintf( stdout, " -u: [english] and [german] are allowed, Id is Taken from DataBase \n" ); 294*b1cdbd2cSJim Jagielski fprintf( stdout, " -NOUTF8: disable UTF8 as language independent encoding\n" ); 295*b1cdbd2cSJim Jagielski fprintf( stdout, " -L: Restrict the handled languages. l1,l2,... are elements of (de,en-US...)\n" ); 296*b1cdbd2cSJim Jagielski fprintf( stdout, " A fallback language can be defined like this: l1=f1.\n" ); 297*b1cdbd2cSJim Jagielski fprintf( stdout, " f1, f2,... are also elements of (de,en-US...)\n" ); 298*b1cdbd2cSJim Jagielski fprintf( stdout, " Example: -L de,es=en-US\n" ); 299*b1cdbd2cSJim Jagielski fprintf( stdout, " Restriction to de and es, en-US will be fallback for es\n" ); 300*b1cdbd2cSJim Jagielski return 1; 301*b1cdbd2cSJim Jagielski } 302*b1cdbd2cSJim Jagielski 303*b1cdbd2cSJim Jagielski InitExport( pOutput , getFilename() ); 304*b1cdbd2cSJim Jagielski pFile = GetNextFile(); 305*b1cdbd2cSJim Jagielski if ( !pFile ) 306*b1cdbd2cSJim Jagielski return 1; 307*b1cdbd2cSJim Jagielski 308*b1cdbd2cSJim Jagielski yyin = pFile; 309*b1cdbd2cSJim Jagielski 310*b1cdbd2cSJim Jagielski /* create global instance of class Export */ 311*b1cdbd2cSJim Jagielski 312*b1cdbd2cSJim Jagielski /* start parser */ 313*b1cdbd2cSJim Jagielski yylex(); 314*b1cdbd2cSJim Jagielski Close(); 315*b1cdbd2cSJim Jagielski 316*b1cdbd2cSJim Jagielski /* get error info. and end export */ 317*b1cdbd2cSJim Jagielski nRetValue = GetError(); 318*b1cdbd2cSJim Jagielski EndExport(); 319*b1cdbd2cSJim Jagielski 320*b1cdbd2cSJim Jagielski /* return error level */ 321*b1cdbd2cSJim Jagielski return nRetValue; 322*b1cdbd2cSJim Jagielski } 323