/* VMS version of getargs; Uses DCL command parsing. Copyright (C) 1989 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include "files.h" /* * VMS version of getargs(): Uses DCL command parsing * (argc and argv are ignored) */ int verboseflag; int definesflag; int debugflag; int nolinesflag; extern int fixed_outfiles; extern char * version_string; /* Allocate storgate and initialize, since bison uses them elsewhere. */ char *spec_name_prefix; char *spec_file_prefix; getargs(argc,argv) int argc; char *argv[]; { register char *cp; static char Input_File[256]; static char output_spec[256], name_prefix_spec[256], file_prefix_spec[256]; extern char *infile; verboseflag = 0; definesflag = 0; debugflag = 0; fixed_outfiles = 0; nolinesflag = 0; /* * Check for /VERBOSE qualifier */ if (cli_present("BISON$VERBOSE")) verboseflag = 1; /* * Check for /DEFINES qualifier */ if (cli_present("BISON$DEFINES")) definesflag = 1; /* * Check for /FIXED_OUTFILES qualifier */ if (cli_present("BISON$FIXED_OUTFILES")) fixed_outfiles = 1; if (cli_present("BISON$YACC")) fixed_outfiles = 1; /* * Check for /VERSION qualifier */ if (cli_present("BISON$VERSION")) printf("%s",version_string); /* * Check for /NOLINES qualifier */ if (cli_present("BISON$NOLINES")) nolinesflag = 1; /* * Check for /DEBUG qualifier */ if (cli_present("BISON$DEBUG")) debugflag = 1; /* * Get the filename */ cli_get_value("BISON$INFILE", Input_File, sizeof(Input_File)); /* * Lowercaseify the input filename */ cp = Input_File; while(*cp) { if (isupper(*cp)) *cp = tolower(*cp); cp++; } infile = Input_File; /* * Get the output file */ if (cli_present("BISON$OUTPUT")) { cli_get_value("BISON$OUTPUT", output_spec, sizeof(output_spec)); for (cp = spec_outfile = output_spec; *cp; cp++) if (isupper(*cp)) *cp = tolower(*cp); } /* * Get the output file */ if (cli_present("BISON$FILE_PREFIX")) { cli_get_value("BISON$FILE_PREFIX", file_prefix_spec, sizeof(file_prefix_spec)); for (cp = spec_file_prefix = file_prefix_spec; *cp; cp++) if (isupper(*cp)) *cp = tolower(*cp); } /* * Get the output file */ if (cli_present("BISON$NAME_PREFIX")) { cli_get_value("BISON$NAME_PREFIX", name_prefix_spec, sizeof(name_prefix_spec)); for (cp = spec_name_prefix = name_prefix_spec; *cp; cp++) if (isupper(*cp)) *cp = tolower(*cp); } } /************ DCL PARSING ROUTINES **********/ /* * See if "NAME" is present */ int cli_present(Name) char *Name; { struct {int Size; char *Ptr;} Descr; Descr.Ptr = Name; Descr.Size = strlen(Name); return((cli$present(&Descr) & 1) ? 1 : 0); } /* * Get value of "NAME" */ int cli_get_value(Name,Buffer,Size) char *Name; char *Buffer; { struct {int Size; char *Ptr;} Descr1,Descr2; Descr1.Ptr = Name; Descr1.Size = strlen(Name); Descr2.Ptr = Buffer; Descr2.Size = Size-1; if (cli$get_value(&Descr1,&Descr2,&Descr2.Size) & 1) { Buffer[Descr2.Size] = 0; return(1); } return(0); }