freebsd-skq/contrib/bison/vmsgetargs.c
1999-08-14 21:39:07 +00:00

182 lines
4.3 KiB
C

/* VMS version of getargs; Uses DCL command parsing.
Copyright (C) 1989, 1992 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
Bison 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.
Bison 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 Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, 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 noparserflag;
extern int toknumflag;
extern int rawtoknumflag;
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;
noparserflag = 0;
toknumflag = 0;
rawtoknumflag = 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 /NOPARSER qualifier
*/
if (cli_present("BISON$NOPARSER")) noparserflag = 1;
/*
* Check for /RAW qualifier
*/
if (cli_present("BISON$RAW")) rawtoknumflag = 1;
/*
* Check for /TOKEN_TABLE qualifier
*/
if (cli_present("BISON$TOKEN_TABLE")) toknumflag = 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);
}