/************************************************************************/ /* */ /* RCPP - Resource Compiler Pre-Processor for NT system */ /* */ /* MAIN.C - Main Program */ /* */ /* 27-Nov-90 w-BrianM Update for NT from PM SDK RCPP */ /* */ /************************************************************************/ #include #include #include #include #include "rcpptype.h" #include "rcppdecl.h" #include "rcppext.h" #include "grammar.h" #include "getflags.h" #ifdef DBCS #include "charmap.h" #endif // DBCS /************************************************************************/ /* Global Varialbes */ /************************************************************************/ char *Unknown = NULL; /* holder for bad flags */ int Argc; char **Argv; /************************************************************************/ /* Local Function Prototypes */ /************************************************************************/ char *nextword(void); void __cdecl main(int, char **); void to_human(void); BOOL WINAPI Handler(ULONG CtrlType); struct subtab Ztab[] = { 'a', UNFLAG, &Extension, 'e', FLAG, &Extension, 'E', FLAG, &Ehxtension, 'i', FLAG, &Symbolic_debug, 'g', FLAG, &Out_funcdef, 'p', FLAG, &Cmd_pack_size, 'I', FLAG, &Inteltypes, 'c', FLAG, &ZcFlag, 0, 0, 0, }; struct cmdtab cmdtab[] = { "-pc#", (char *)&Path_chars, 1, STRING, "-pf", (char *)&NoPasFor, 1, FLAG, "-C", (char *)&Cflag, 1, FLAG, "-CP#", (char *)&gpszNLSoptions, 1, STRING, "-D#", (char *)&Defs, 1, PSHSTR, "-E", (char *)&Eflag, 1, FLAG, "-I#", (char *)&Includes, 1, PSHSTR, "-P", (char *)&Pflag, 1, FLAG, "-f", (char *)&Input_file, 1, STRING, "-g", (char *)&Output_file, 1, STRING, "-J", (char *)&Jflag, 1, FLAG, "-Zp", (char *)&Cmd_pack_size, 1, FLAG, "-Zp#", (char *)&Cmd_pack_size, 1, NUMBER, "-Z*", (char *)Ztab, 1, SUBSTR, "-Oi", (char *)&Cmd_intrinsic, 1, FLAG, "-Ol", (char *)&Cmd_loop_opt, 1, FLAG, "-db#", (char *)&Debug, 1, STRING, "-ef#", (char *)&ErrFilName, 1, STRING, "-il#", (char *)&Basename, 1, STRING, "-xc", (char *)&Cross_compile, 1, FLAG, "-H", (char *)&HugeModel, 1, FLAG, "-V#", (char *)&Version, 1, STRING, "-Gs", (char *)&Cmd_stack_check, 1, UNFLAG, "-Gc", (char *)&Plm, 1, FLAG, "-char#", (char *)&Char_align, 1, NUMBER, "-A#", (char *)&A_string, 1, STRING, "-Q#", (char *)&Q_string, 1, STRING, "-Fs", (char *)&Srclist, 1, FLAG, "-R", (char *)&Rflag, 1, FLAG, "*", (char *)&Unknown, 0, STRING, 0, 0, 0, 0, }; /************************************************************************/ /* nextword - */ /************************************************************************/ char *nextword(void) { return((--Argc > 0) ? (*++Argv) : 0); } #ifdef DBCS /************************************************************************/ /* vReConfigureLeadByteInfo - */ /************************************************************************/ void vReConfigureLeadByteInfo( unsigned int uiCodePage ) { CPINFO CPInfo; PUCHAR pLeadByte; BYTE i; /* Following instruction should be success */ /* because CodePage should be checked by RC.exe */ GetCPInfo( uiCodePage , &CPInfo ); /* Fill Charmap table with LX_LEADBYTE */ pLeadByte = CPInfo.LeadByte; while( *pLeadByte != 0 && *(pLeadByte+1) != 0 ) { for( i = *pLeadByte ; i <= *(pLeadByte+1) ; i++ ) { Charmap[i] = LX_LEADBYTE; } pLeadByte += 2; } } #ifdef HIVEPP void vReConfigureCharTable( void ) { Charmap[0x40] = LX_ID; Charmap[0x60] = LX_ID; } #endif // HIVEPP #endif // DBCS /************************************************************************/ /* main - */ /************************************************************************/ void __cdecl main(int argc, char **argv) { Argc = argc; Argv = argv; while(crack_cmd(cmdtab, nextword(), nextword, 0)) ; #ifdef DBCS { int CodePage; // To modify charmap info if( gpszNLSoptions != NULL ) CodePage = atoi( gpszNLSoptions ); else CodePage = GetACP(); #ifdef FIREWALLS fprintf( stderr , "RCPP:CodePage - %s - %d \n",gpszNLSoptions , CodePage ); #endif vReConfigureLeadByteInfo(CodePage); } #endif // DBCS #ifdef DBCS #ifdef HIVEPP vReConfigureCharTable(); #endif // HIVEPP #endif // DBCS if(Unknown) { Msg_Temp = GET_MSG (1007); SET_MSG (Msg_Text, Msg_Temp, Unknown, "c1"); fatal(1007); /* unknown flag */ } if( ! Input_file) { Msg_Temp = GET_MSG (1008); SET_MSG (Msg_Text, Msg_Temp); fatal(1008); /* no input file specified */ } if( ! Output_file) { Msg_Temp = GET_MSG (1011); SET_MSG (Msg_Text, Msg_Temp); fatal(1011); /* no input file specified */ } Prep = TRUE; if( !Eflag && !Pflag ) { Eflag = TRUE; } strncpy(Filename,Input_file,128); SetConsoleCtrlHandler(Handler, TRUE); p0_init(Input_file, Output_file, &Defs); to_human(); SetConsoleCtrlHandler(Handler, FALSE); if( Prep_ifstack >= 0 ) { Msg_Temp = GET_MSG (1022); SET_MSG (Msg_Text, Msg_Temp); fatal(1022); /* expected #endif */ } exit(Nerrors); } BOOL WINAPI Handler(ULONG CtrlType) { /* ** Unreferenced */ (void)CtrlType; /* Close ALL files. */ _fcloseall(); exit(1); return 1; } /************************************************************************/ /* to_human : outputs preprocessed text in human readable form. */ /************************************************************************/ void to_human(void) { PCHAR value; for(;;) { switch(yylex()) { case 0: return; case L_NOTOKEN: break; default: if (Basic_token == 0) { Msg_Temp = GET_MSG(1068); SET_MSG(Msg_Text, Msg_Temp); fatal(1068); } value = Tokstrings[Basic_token - L_NOTOKEN].k_text; fwrite(value, strlen(value), 1, OUTPUTFILE); break; } } }