aboutsummaryrefslogtreecommitdiff
path: root/tools/bison++/vmsgetargs.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2010-11-19 13:18:48 +0000
committermarha <marha@users.sourceforge.net>2010-11-19 13:18:48 +0000
commit12f606ce06ef926f366a03079c5e3107c23f18af (patch)
tree28d7be4328bca9c31c1ab0f7cb5924c196be23a0 /tools/bison++/vmsgetargs.c
parent773752eab55047c33bad0d88006bb69f5c601502 (diff)
downloadvcxsrv-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.c160
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);
+}