gen-zam: gen-zam extended to read from multiple files on the command-line

This commit is contained in:
Vern Paxson 2024-05-01 17:06:49 -07:00 committed by Tim Wojtulewicz
parent aee70af743
commit 4ae4548ceb

View file

@ -1959,16 +1959,19 @@ void TemplateInput::Gripe(const char* msg, const InputLoc& l) const
ZAMGen::ZAMGen(int argc, char** argv) ZAMGen::ZAMGen(int argc, char** argv)
{ {
auto prog_name = argv[0]; auto prog_name = (argv++)[0];
if ( argc != 2 ) if ( --argc < 1 )
{ {
fprintf(stderr, "usage: %s <ZAM-templates-file>\n", prog_name); fprintf(stderr, "usage: %s <ZAM-templates-file>\n", prog_name);
exit(1); exit(1);
} }
auto file_name = argv[1]; while ( argc-- > 0 )
auto f = strcmp(file_name, "-") ? fopen(file_name, "r") : stdin; {
auto file_name = (argv++)[0];
bool is_stdin = file_name == std::string("-");
auto f = is_stdin ? stdin : fopen(file_name, "r");
if ( ! f ) if ( ! f )
{ {
@ -1978,11 +1981,15 @@ ZAMGen::ZAMGen(int argc, char** argv)
ti = make_unique<TemplateInput>(f, prog_name, file_name); ti = make_unique<TemplateInput>(f, prog_name, file_name);
InitEmitTargets();
while ( ParseTemplate() ) while ( ParseTemplate() )
; ;
if ( ! is_stdin )
fclose(f);
}
InitEmitTargets();
for ( auto& t : templates ) for ( auto& t : templates )
t->Instantiate(); t->Instantiate();