160 lines
5.5 KiB
C
160 lines
5.5 KiB
C
/***********************************************************************
|
|
* Microsoft (R) Windows (R) Resource Compiler
|
|
*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
*
|
|
* File Comments:
|
|
*
|
|
*
|
|
***********************************************************************/
|
|
|
|
#include "rc.h"
|
|
|
|
|
|
/************************************************************************/
|
|
/* Global Varialbes */
|
|
/************************************************************************/
|
|
WCHAR *Unknown = NULL; /* holder for bad flags */
|
|
int Argc;
|
|
WCHAR **Argv;
|
|
|
|
/************************************************************************/
|
|
/* Local Function Prototypes */
|
|
/************************************************************************/
|
|
WCHAR *nextword(void);
|
|
void to_human(void);
|
|
|
|
|
|
const struct subtab Ztab[] = {
|
|
L'a', UNFLAG, &Extension,
|
|
L'e', FLAG, &Extension,
|
|
L'E', FLAG, &Ehxtension,
|
|
L'i', FLAG, &Symbolic_debug,
|
|
L'g', FLAG, &Out_funcdef,
|
|
L'p', FLAG, &Cmd_pack_size,
|
|
L'I', FLAG, &Inteltypes,
|
|
L'c', FLAG, &ZcFlag,
|
|
0, 0, 0,
|
|
};
|
|
|
|
struct cmdtab cmdtab[] = {
|
|
L"-pc#", (char *)&Path_chars, 1, STRING,
|
|
L"-pf", (char *)&NoPasFor, 1, FLAG,
|
|
L"-C", (char *)&Cflag, 1, FLAG,
|
|
L"-CP#", (char *)&uiCodePage, 1, NUMBER,
|
|
L"-D#", (char *)&Defs, 1, PSHSTR,
|
|
L"-U#", (char *)&UnDefs, 1, PSHSTR,
|
|
L"-E", (char *)&Eflag, 1, FLAG,
|
|
L"-I#", (char *)&Includes, 1, PSHSTR,
|
|
L"-P", (char *)&Pflag, 1, FLAG,
|
|
L"-f", (char *)&Input_file, 1, STRING,
|
|
L"-g", (char *)&Output_file, 1, STRING,
|
|
L"-J", (char *)&Jflag, 1, FLAG,
|
|
L"-Zp", (char *)&Cmd_pack_size, 1, FLAG,
|
|
L"-Zp#", (char *)&Cmd_pack_size, 1, NUMBER,
|
|
L"-Z*", (char *)Ztab, 1, SUBSTR,
|
|
L"-Oi", (char *)&Cmd_intrinsic, 1, FLAG,
|
|
L"-Ol", (char *)&Cmd_loop_opt, 1, FLAG,
|
|
L"-db#", (char *)&Debug, 1, STRING,
|
|
L"-il#", (char *)&Basename, 1, STRING,
|
|
L"-xc", (char *)&Cross_compile, 1, FLAG,
|
|
L"-H", (char *)&HugeModel, 1, FLAG,
|
|
L"-V#", (char *)&Version, 1, STRING,
|
|
L"-Gs", (char *)&Cmd_stack_check, 1, UNFLAG,
|
|
L"-Gc", (char *)&Plm, 1, FLAG,
|
|
L"-char#", (char *)&Char_align, 1, NUMBER,
|
|
L"-A#", (char *)&A_string, 1, STRING,
|
|
L"-Q#", (char *)&Q_string, 1, STRING,
|
|
L"-Fs", (char *)&Srclist, 1, FLAG,
|
|
L"-R", (char *)&Rflag, 1, FLAG,
|
|
L"*", (char *)&Unknown, 0, STRING,
|
|
0, 0, 0, 0,
|
|
};
|
|
|
|
/************************************************************************/
|
|
/* nextword - */
|
|
/************************************************************************/
|
|
WCHAR *nextword(void)
|
|
{
|
|
return((--Argc > 0) ? (*++Argv) : 0);
|
|
}
|
|
|
|
/************************************************************************/
|
|
/* main - */
|
|
/************************************************************************/
|
|
int __cdecl
|
|
rcpp_main(
|
|
int argc,
|
|
wchar_t *argv[]
|
|
)
|
|
{
|
|
Argc = argc;
|
|
Argv = argv;
|
|
|
|
if(Argv == NULL) {
|
|
fatal(1002); /* no memory */
|
|
}
|
|
|
|
while(crack_cmd(cmdtab, nextword(), nextword, 0)) ;
|
|
|
|
if(Unknown) {
|
|
fatal(1007, Unknown, L"c1"); /* unknown flag */
|
|
}
|
|
|
|
if( ! Input_file) {
|
|
fatal(1008); /* no input file specified */
|
|
}
|
|
|
|
if( ! Output_file) {
|
|
fatal(1010); /* no output file specified */
|
|
}
|
|
|
|
Prep = TRUE;
|
|
if( !Eflag && !Pflag ) {
|
|
Eflag = TRUE;
|
|
}
|
|
|
|
wcsncpy(Filename,Input_file,128);
|
|
|
|
p0_init(Input_file, Output_file, &Defs, &UnDefs);
|
|
to_human();
|
|
|
|
if( Prep_ifstack >= 0 ) {
|
|
fatal(1022); /* expected #endif */
|
|
}
|
|
|
|
p0_terminate();
|
|
return Nerrors;
|
|
}
|
|
|
|
|
|
/************************************************************************/
|
|
/* to_human : outputs preprocessed text in human readable form. */
|
|
/************************************************************************/
|
|
void
|
|
to_human(
|
|
void
|
|
)
|
|
{
|
|
const wchar_t *value;
|
|
|
|
for(;;) {
|
|
switch(yylex()) {
|
|
case 0:
|
|
return;
|
|
|
|
case L_NOTOKEN:
|
|
break;
|
|
|
|
default:
|
|
if (Basic_token == 0) {
|
|
fatal(1011);
|
|
}
|
|
|
|
value = Tokstrings[Basic_token - L_NOTOKEN].k_text;
|
|
myfwrite(value, wcslen(value) * sizeof(WCHAR), 1, OUTPUTFILE);
|
|
break;
|
|
}
|
|
}
|
|
}
|