diff options
author | marha <marha@users.sourceforge.net> | 2010-11-19 13:18:48 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2010-11-19 13:18:48 +0000 |
commit | 12f606ce06ef926f366a03079c5e3107c23f18af (patch) | |
tree | 28d7be4328bca9c31c1ab0f7cb5924c196be23a0 /tools/bison++/vmsgetargs.c | |
parent | 773752eab55047c33bad0d88006bb69f5c601502 (diff) | |
download | vcxsrv-12f606ce06ef926f366a03079c5e3107c23f18af.tar.gz vcxsrv-12f606ce06ef926f366a03079c5e3107c23f18af.tar.bz2 vcxsrv-12f606ce06ef926f366a03079c5e3107c23f18af.zip |
Added tool bison++-1.21.11
Diffstat (limited to 'tools/bison++/vmsgetargs.c')
-rw-r--r-- | tools/bison++/vmsgetargs.c | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/tools/bison++/vmsgetargs.c b/tools/bison++/vmsgetargs.c new file mode 100644 index 000000000..c7e738bb3 --- /dev/null +++ b/tools/bison++/vmsgetargs.c @@ -0,0 +1,160 @@ +/* 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 <ctype.h> +#include <stdio.h> +#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); +} |