v18i102: parseargs - functions to parse command line arguments, Patch04b/4
Brad Appleton
brad at hcx1.ssd.csd.harris.com
Fri Apr 26 14:02:31 AEST 1991
Submitted-by: Brad Appleton <brad at hcx1.ssd.csd.harris.com>
Posting-number: Volume 18, Issue 102
Archive-name: parseargs/patch04b
Patch-To: parseargs: Volume 17, Issue 45-57
#!/bin/sh
# This is part 2 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file DOCPATCH continued
#
if test ! -r _shar_seq_.tmp; then
echo 'Please unpack part 1 first!'
exit 1
fi
(read Scheck
if test "$Scheck" != 2; then
echo Please unpack part "$Scheck" next!
exit 1
else
exit 0
fi
) < _shar_seq_.tmp || exit 1
echo 'x - continuing file DOCPATCH'
sed 's/^X//' << 'SHAR_EOF' >> 'DOCPATCH' &&
! non-string types are copied implicitly (for example, integer
! arguments are stored in binary form, so the original string
! value need not be saved), so this argument can usually be
! ignored. Put simply, this flag is TRUE when vp points to a
! temporary buffer area.
X
X If the type function successfully converts the value, and
X uses the entire value, it should return TRUE. If the type
***************
*** 915,920 ****
--- 914,920 ----
X #define REALLOC(ptr,size) ((! ptr) ? malloc(size) : realloc(ptr, size))
X typedef ARGVEC_T(FILE *) FILEvec_t;
X
+ BOOL argReadFile( ARGDESC *ad, char *vp, BOOL copyf )
X
X
X
***************
*** 929,935 ****
X
X
X
- BOOL argReadFile( ARGDESC *ad, char *vp, BOOL copyf )
X {
X register FILE *fp;
X fp = fopen(vp, "r");
--- 929,934 ----
***************
*** 958,969 ****
X }
X
X LONG OPTIONS
! Under UNIX, Parseargs also allows for long options in addi-
! tion to single character options. Long options are denoted
! by a `+' character (which may be changed using keywordpre-
! fix). The keyword that is used is the first word in the
! prompt field of an argument descriptor entry. Long options
! are case insensitive! An argument to a long option may be
X separated from the long option by an equal sign (`=') or by
X one or more whitespace characters. Thus, if an entry looks
X like:
--- 957,972 ----
X }
X
X LONG OPTIONS
! Under UNIX, MS-DOS, and OS/2, parseargs also allows for long
! options in addition to single character options. Under
! UNIX, long options are denoted by a `+' character. Under
! MS-DOS, and OS/2, long options are denoted by the second
! character in the SWITCHAR environment variable. If there is
! no second character, then if the first character is `-',
! then a `+' is used, otherwise a `/' is used. The keyword
! that is used is the first word in the prompt field of an
! argument descriptor entry. Long options are case insensi-
! tive! Under UNIX, an argument to a long option may be
X separated from the long option by an equal sign (`=') or by
X one or more whitespace characters. Thus, if an entry looks
X like:
***************
*** 973,989 ****
X
X The long option names for ``-?'' in the default argument
X descriptor are ``+help'' and ``+?'' (respectively). In addi-
! tion, ``++'' or ``+endopts'' may be used to indicate the end
! of options so that all remaining arguments will be inter-
! preted as positional parameters (even if one begins with a
! `+' or a `-').
X
- Under VAX/VMS and AmigaDOS, single-character options are not
- used and the ``long'' name (in the prompt field of an argu-
- ment descriptor) is always used to match for possible
X
X
X
X Page 15
X
X
--- 976,989 ----
X
X The long option names for ``-?'' in the default argument
X descriptor are ``+help'' and ``+?'' (respectively). In addi-
! tion, ``++'' may be used to indicate the end of options so
! that all remaining arguments will be interpreted as posi-
! tional parameters (even if one begins with a `+' or a `-').
X
X
X
X
+
X Page 15
X
X
***************
*** 995,1002 ****
X
X
X
! arguments (or keywords, or qualifiers).
X
X For all supported operating systems, a long option may be
X matched in one of two ways: it may match all uppercase char-
X acters in the prompt field, or it may match all characters
--- 995,1012 ----
X
X
X
! Under MS-DOS, and OS/2, an argument to a long-option must be
! separated from the long option by an equal sign (`=')
! (unless the first character of $SWITCHAR is a `-', in which
! case UNIX syntax is used). The long option names for ``/?''
! in the default argument descriptor are ``/help'' and ``/?''
! (respectively).
X
+ Under VAX/VMS and AmigaDOS, single-character options are not
+ used and the ``long'' name (in the prompt field of an argu-
+ ment descriptor) is always used to match for possible argu-
+ ments (or keywords, or qualifiers).
+
X For all supported operating systems, a long option may be
X matched in one of two ways: it may match all uppercase char-
X acters in the prompt field, or it may match all characters
***************
*** 1003,1016 ****
X in the prompt field (as in ``+count=4'' and ``+rep-
X count=4'').
X
! Under UNIX and VAX/VMS, only the number of characters
! required to uniquely identify the desired argument are
! needed, but at least two characters must be given (unless
! the prompt field is itself less than two characters long).
! This means that using the above example, that ``+rep=4'' and
! ``+cou=4'' would also work but ``+c=4'' would NOT (in other
! words, if you only want to use one character, use ``-c4''
! instead).
X
X Under VAX/VMS, the possibilities using the above example
X would be: ``/REPCOUNT=4'', ``/COUNT=4'', ``/REP=4'', and
--- 1013,1026 ----
X in the prompt field (as in ``+count=4'' and ``+rep-
X count=4'').
X
! Under all systems except AmigaDOS, only the number of char-
! acters required to uniquely identify the desired argument
! are needed, but at least two characters must be given
! (unless the prompt field is itself less than two characters
! long). This means that using the above example, that
! ``+rep=4'' and ``+cou=4'' would also work but ``+c=4'' would
! NOT (in other words, if you only want to use one character,
! use ``-c4'' instead).
X
X Under VAX/VMS, the possibilities using the above example
X would be: ``/REPCOUNT=4'', ``/COUNT=4'', ``/REP=4'', and
***************
*** 1037,1055 ****
X A command-line syntax error was encountered
X
X pe_DEFARGS
- An attempt (using parsecntl) was made to change the
- default arg-search list of a command to point to an
- argdesc-array which already has the given command on
- its default arg-search list (which would cause an
- infinite loop when attempting to match an unknown
- command-line argument).
X
- pe_NOMATCH
- Unable to match the named argument. This occurs when
- the argument keyword name passed to parsecntl (using
X
X
-
X Page 16
X
X
--- 1047,1055 ----
***************
*** 1061,1066 ****
--- 1061,1076 ----
X
X
X
+ An attempt (using parsecntl) was made to change the
+ default arg-search list of a command to point to an
+ argdesc-array which already has the given command on
+ its default arg-search list (which would cause an
+ infinite loop when attempting to match an unknown
+ command-line argument).
+
+ pe_NOMATCH
+ Unable to match the named argument. This occurs when
+ the argument keyword name passed to parsecntl (using
X the pc_ARGFLAGS functions code) was found in the given
X argdesc-array or in its default-list.
X
***************
*** 1074,1081 ****
X Bad command for parsecntl. This occurs if an unknown
X function-code was passed to parsecntl.
X
X SEE ALSO
! argtype(3), parseargs(1), syserr(3)
X The ``C Advisor'' column in UNIX Review Vol. 7 No. 11.
X
X CAVEATS
--- 1084,1144 ----
X Bad command for parsecntl. This occurs if an unknown
X function-code was passed to parsecntl.
X
+ SIDE EFFECTS
+ Each of the functions in the parseargs library will set the
+ external character string ProgName to be the name of the
+ last command that was operated upon by any of the library
+ routines.
+
+ When an argument-descriptor array is first encountered by
+ any of the parseargs library routines, it is initially com-
+ piled into an intermediate form that is more convenient to
+ manipulate. As a direct result, it is not advisable to
+ attempt to index directly into the array to manipulate one
+ of the argument descriptors (because the argdesc that you
+ thought was there may actually be somewhere else). After the
+ array has been given its initial value(s), only parsecntl(3)
+ should be used to manipulate or query the attributes of an
+ argument descriptor.
+
+ DOCUMENTING YOUR COMMANDS
+ The commands that you write with parseargs(3) may be docu-
+ mented using parseargs(1). Just copy the argument descriptor
+ array into a separate file, and invoke parseargs(1) with the
+ -M option and pass it the command-name (dont forget to
+ redirect input to come from your newly created file). It is
+ important to note that the only portion of that argdesc
+ array to insert into your file is the portion starting with
+ the very first command-line argument, all the way down to
+ (and including) the ENDOFARGS or END_ARGUMENTS entry.
+
+
+
+
+
+ Page 17
+
+
+
+
+
+
+ PARSEARGS(3) PARSEARGS(3)
+
+
+
+ FILES
+ /usr/local/lib/libparse.a
+ Link library for parseargs.
+
+ /usr/local/include/parseargs.h
+ Include file for parseargs.
+
+ /usr/local/include/useful.h
+ Include file for portability.
+
X SEE ALSO
! argtype(3), parseargs(1), parsecntl(3)
X The ``C Advisor'' column in UNIX Review Vol. 7 No. 11.
X
X CAVEATS
***************
*** 1113,1134 ****
X Hence multiple ``leading dash'' arguments may specified as
X follows:
X
X
X
X
- Page 17
X
X
X
X
X
X
- PARSEARGS(3) PARSEARGS(3)
X
X
X
- -f-dash_arg1 -f-dash_arg2 ...
X
X BUGS
X When a non-multivalued argument appears more than once on
X the command-line then only the last value supplied is used.
--- 1176,1198 ----
X Hence multiple ``leading dash'' arguments may specified as
X follows:
X
+ -f-dash_arg1 -f-dash_arg2 ...
X
X
X
X
X
+ Page 18
X
X
X
X
X
X
+ PARSEARGS(3) PARSEARGS(3)
X
X
+
X BUGS
X When a non-multivalued argument appears more than once on
X the command-line then only the last value supplied is used.
***************
*** 1182,1188 ****
X
X
X
! Page 18
X
X
X
--- 1246,1254 ----
X
X
X
!
!
! Page 19
X
X
X
*** /hx1d3/lp/brad/parseargs_patch03/parseargs/parsecntl3.txt Wed Apr 10 09:47:48 1991
--- parsecntl3.txt Mon Apr 15 08:31:38 1991
***************
*** 12,18 ****
X SYNOPSIS
X #include <parseargs.h>
X
! int parsecntl( ARGDESC argd[], parsecntl_t func, parsemode_t mode, ... )
X
X
X DESCRIPTION
--- 12,18 ----
X SYNOPSIS
X #include <parseargs.h>
X
! int parsecntl( ARGDESC argd[], parsecntl_t func, parsemode_t mode, ... );
X
X
X DESCRIPTION
***************
*** 210,217 ****
X PARSE MODES
X Parsecntl may be used to read current command attributes,
X write (assign) new command attributes, or both. The mode
! argument to parsecntl determines the which of these three
! alternatives are desired. If the programmer merely wishes to
X assign new attributes, then invoking parsecntl in pc_WRITE
X mode and passing the new attributes will do the job. If the
X programmer wishes simply to query attributes, then invoking
--- 210,217 ----
X PARSE MODES
X Parsecntl may be used to read current command attributes,
X write (assign) new command attributes, or both. The mode
! argument to parsecntl determines which of these three alter-
! natives are desired. If the programmer merely wishes to
X assign new attributes, then invoking parsecntl in pc_WRITE
X mode and passing the new attributes will do the job. If the
X programmer wishes simply to query attributes, then invoking
***************
*** 227,233 ****
X ing it returns 0) the desired attributes will have been
X assigned and the object that contained the new attribute
X settings will now contain the attribute settings that were
! in effect before parsecntl was invoked.
X
X PARSE FLAGS
X The following bitmasks may be combined in order to modify
--- 227,233 ----
X ing it returns 0) the desired attributes will have been
X assigned and the object that contained the new attribute
X settings will now contain the attribute settings that were
! in effect immediately before parsecntl was invoked.
X
X PARSE FLAGS
X The following bitmasks may be combined in order to modify
***************
*** 246,254 ****
X pa_IGNORE
X Ignore any unrecognized or improperly specified
X command-line arguments and continue execution of the
! program. Normally, if an argument is unmatched (or is
! improperly specified), a usage message is printed pro-
! gram execution is terminated.
X
X pa_OPTSONLY
X Under UNIX, setting this flag will disable the parsing
--- 246,254 ----
X pa_IGNORE
X Ignore any unrecognized or improperly specified
X command-line arguments and continue execution of the
! program. Normally, if a required argument is unmatched
! (or an argument is improperly specified), a usage mes-
! sage is printed program execution is terminated.
X
X pa_OPTSONLY
X Under UNIX, setting this flag will disable the parsing
***************
*** 292,299 ****
X pa_ANYCASE
X Setting this flag will cause character-case to be
X ignored when attempting to match single-character argu-
! ment names (i.e. causes "-i" and "-I" will be con-
! sidered equivalent).
X
X pa_ARGV0
X Normally, the parseargs library will assume that the
--- 292,299 ----
X pa_ANYCASE
X Setting this flag will cause character-case to be
X ignored when attempting to match single-character argu-
! ment names (i.e. causes "-i" and "-I" to be considered
! equivalent).
X
X pa_ARGV0
X Normally, the parseargs library will assume that the
***************
*** 314,326 ****
X Keeping this flag on until the final set of arguments
X is parsed will cause parseargs to not check for missing
X arguments until the last set of arguments has been
! parsed (by the final call to *parseargs).
X
X pa_CONTINUE
X Setting this flag will cause subsequent calls to the
X parseargs library to NOT reset the current command-
X state. Hence, all arguments will not be initially set
- to "NOT GIVEN" and other (normal) initializations are
X
X
X
--- 314,326 ----
X Keeping this flag on until the final set of arguments
X is parsed will cause parseargs to not check for missing
X arguments until the last set of arguments has been
! parsed (by the final call to one of the functions in
! the parseargs library).
X
X pa_CONTINUE
X Setting this flag will cause subsequent calls to the
X parseargs library to NOT reset the current command-
X state. Hence, all arguments will not be initially set
X
X
X
***************
*** 335,340 ****
--- 335,341 ----
X
X
X
+ to "NOT GIVEN" and other (normal) initializations are
X not be performed. This is useful in conjunction with
X the pa_NOCHECK flag when more than one call to par-
X seargs is required to parse all the command arguments.
***************
*** 386,392 ****
X
X ARGNOVAL
X The associated command argument takes no value (as in
- "-x value"); Its mere presence (or lack thereof) on the
X
X
X
--- 387,392 ----
***************
*** 401,406 ****
--- 401,407 ----
X
X
X
+ "-x value"); Its mere presence (or lack thereof) on the
X command-line is sufficient to determine the necessary
X action(s) to take (as in "-x"). Boolean argument types
X and Pseudo-argument types automatically default to ARG-
***************
*** 452,458 ****
X The argument WAS given on the command-line.
X
X ARGVALGIVEN
- The value for this argument was given on the command-
X
X
X
--- 453,458 ----
***************
*** 467,472 ****
--- 467,473 ----
X
X
X
+ The value for this argument was given on the command-
X line.
X
X ARGVALSEP
***************
*** 521,527 ****
X
X
X
-
X Page 8
X
X
--- 522,527 ----
***************
*** 543,571 ****
X Bad command for parsecntl. This occurs if an unknown
X function-code was passed to parsecntl.
X
X SEE ALSO
! argtype(3),
! parseargs(3),
! parseargs(1)
X
X AUTHOR
X Brad Appleton (brad at ssd.csd.harris.com)
X Harris Computer Systems, Fort Lauderdale, FL USA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
X
X
X
--- 543,571 ----
X Bad command for parsecntl. This occurs if an unknown
X function-code was passed to parsecntl.
X
+ SIDE EFFECTS
+ Each of the functions in the parseargs library will set the
+ external character string ProgName to be the name of the
+ last command that was operated upon by any of the library
+ routines.
+
+ When an argument-descriptor array is first encountered by
+ any of the parseargs library routines, it is initially com-
+ piled into an intermediate form that is more convenient to
+ manipulate. As a direct result, it is not advisable to
+ attempt to index directly into the array to manipulate one
+ of the argument descriptors (because the argdesc that you
+ thought was there may actually be somewhere else). After the
+ array has been given its initial value(s), only parsecntl(3)
+ should be used to manipulate or query the attributes of an
+ argument descriptor.
+
X SEE ALSO
! argtype(3), parseargs(3), parseargs(1)
X
X AUTHOR
X Brad Appleton (brad at ssd.csd.harris.com)
X Harris Computer Systems, Fort Lauderdale, FL USA
X
X
X
SHAR_EOF
echo 'File DOCPATCH is complete' &&
chmod 0664 DOCPATCH ||
echo 'restore of DOCPATCH failed'
Wc_c="`wc -c < 'DOCPATCH'`"
test 66103 -eq "$Wc_c" ||
echo 'DOCPATCH: original size 66103, current size' "$Wc_c"
# ============= Makefile ==============
echo 'x - extracting Makefile (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
# $Header: Makefile,v 2.1 89/12/30 20:59:01 eric Exp $
X
###
# operating-system dependent stuff
###
.UNIVERSE = att
#.UNIVERSE = ucb
OS_TYPE = unix
# OS_DEFS = -D${OS_TYPE} -D${.UNIVERSE}_universe
X
###
# targets
###
NAME = parseargs
PROGRAM = ${NAME}
LIBRARY = ${NAME}
STYLE = unix
X
###
# target directories
###
LOCAL = /usr/local
LIBDIR = ${LOCAL}/lib
INCDIR = ${LOCAL}/include
X
###
# compilation options
###
INCLUDES = -I.
# MODEL = -Ms
# MODELNAME = S
OPT = -O
# OPT = -g
TEST_DEFS =
USR_DEFS = -DUSE_PAGER
DEFINES = ${OS_DEFS} ${USR_DEFS} ${TEST_DEFS} -D${STYLE}_style
OPTIONS =
CFLAGS = ${OPT} ${MODEL} ${INCLUDES} ${DEFINES} ${OPTIONS}
LINTFLAGS = ${INCLUDES} ${DEFINES} ${OPTIONS}
X
###
# libraries
###
LIBARGS = ${MODELNAME}lib${STYLE}_args.a
LIBFILE = ${MODELNAME}libparse.a
LOCLIBS = ${LIBARGS}
# SYSLIBS = -lm -lcurses -ltermcap
LIBS = ${LOCLIBS} ${SYSLIBS}
X
###
# commands
###
AR = ar rvu
DEL = rm -f
COPY = cp
CHDIR = cd
LINT = lint
MKTAGS = ctags
PRINT = pr
RANLIB = ranlib
SHAR = shar
SQZ = compress -v
STRIP = strip
X
###
# files used
###
DOCS= doc/Makefile \
X doc/argtype.man3 \
X doc/parseargs.man1 \
X doc/parseargs.man3 \
X doc/parsecntl.man3 \
X doc/arg_macros.inc \
X doc/argdesc.inc \
X doc/argflags.inc \
X doc/argvalopt.inc \
X doc/bugs.inc \
X doc/caveats.inc \
X doc/cmd_macros.inc \
X doc/defargs.inc \
X doc/effects.inc \
X doc/env_args.inc \
X doc/env_parse.inc \
X doc/env_usage.inc \
X doc/fparseargs3.inc \
X doc/lib_bugs.inc \
X doc/lparseargs3.inc \
X doc/multivals.inc \
X doc/parseargs1.inc \
X doc/parseargs3.inc \
X doc/parsecntl3.inc \
X doc/parsecntls.inc \
X doc/parseflags.inc \
X doc/parsemodes.inc \
X doc/returns.inc \
X doc/sh_arrays.inc \
X doc/shells.inc \
X doc/sparseargs3.inc \
X doc/usage3.inc \
X doc/vparseargs3.inc
SCRIPTS = test.sh test.csh test.ksh test.rc test.awk test.pl
TEMPLATES = ${NAME}.pl ${NAME}.awk
XXXFILES = Intro README MANIFEST Makefile Makefile.cpp
X
HDRS = ${NAME}.h \
X patchlevel.h \
X pgopen.h \
X strfuncs.h \
X useful.h
X
SRCS = ${NAME}.c \
X argtype.c \
X arglist.c \
X amiga_args.c \
X ibm_args.c \
X pgopen.c \
X stest.c \
X strfuncs.c \
X syserr.c \
X unix_args.c \
X unix_man.c \
X vms_args.c \
X vprintf.c \
X winsize.c \
X xparse.c
X
OBJS = ${STYLE}_args.o \
X arglist.o \
X argtype.o \
X pgopen.o \
X strfuncs.o \
X syserr.o \
X vprintf.o \
X winsize.o \
X xparse.o
X
PROG_OBJS = ${NAME}.o unix_man.o
TEST_OBJS = stest.o
X
FILES = ${XXFILES} ${DOCS} ${HDRS} ${SRCS} ${TEMPLATES} ${SCRIPTS}
X
###
# target dependencies
###
all: ${LIBARGS} test ${PROGRAM}
X
test: ${STYLE}_test
X
${STYLE}_test : stest.o ${LOCLIBS}
X ${CC} ${CFLAGS} -o ${STYLE}_test stest.o ${LOCLIBS} ${SYSLIBS}
X
${LIBARGS}: ${OBJS}
X ${AR} $@ ${OBJS}
X ${RANLIB} $@
X
${PROGRAM}: ${PROG_OBJS} ${LOCLIBS}
X ${CC} ${CFLAGS} -o $@ ${PROG_OBJS} ${LOCLIBS} ${SYSLIBS}
X
###
# object dependencies
###
${NAME}.o: ${NAME}.c ${NAME}.h patchlevel.h strfuncs.h useful.h
amiga_args.o: amiga_args.c ${NAME}.h pgopen.h strfuncs.h useful.h
arglist.o: arglist.c ${NAME}.h strfuncs.h useful.h
argtype.o: argtype.c ${NAME}.h strfuncs.h useful.h
ibm_args.o: ibm_args.c ${NAME}.h pgopen.h strfuncs.h useful.h
pgopen.o: pgopen.c useful.h
stest.o: stest.c ${NAME}.h useful.h
strfuncs.o: strfuncs.c useful.h
syserr.o: syserr.c useful.h
unix_args.o: unix_args.c ${NAME}.h pgopen.h strfuncs.h useful.h
unix_man.o: unix_man.c ${NAME}.h strfuncs.h useful.h
vms_args.o: vms_args.c ${NAME}.h pgopen.h strfuncs.h useful.h
vprintf.o: vprintf.c useful.h
winsize.o: winsize.c useful.h
xparse.o: xparse.c ${NAME}.h strfuncs.h useful.h
X
###
# installation dependencies
###
install: ${INCDIR}/${NAME}.h \
X ${LIBDIR}/${LIBFILE} \
X ${LOCAL}/${PROGRAM}
X
X ${INCDIR}/${NAME}.h: ${NAME}.h useful.h
X ( ${CHDIR} ${INCDIR}; ${DEL} ${NAME}.h useful.h )
X ${COPY} ${NAME}.h useful.h ${INCDIR}
X
X ${LIBDIR}/${LIBFILE}: ${LIBARGS}
X ${DEL} ${LIBDIR}/${LIBFILE}
X ${COPY} ${LIBARGS} ${LIBDIR}/${LIBFILE}
X ${RANLIB} ${LIBDIR}/${LIBFILE}
X
X ${LOCAL}/${PROGRAM}: ${PROGRAM} ${TEMPLATES}
X ( ${CHDIR} ${LOCAL} ; ${DEL} ${PROGRAM} ${TEMPLATES} )
X ${COPY} ${PROGRAM} ${TEMPLATES} ${LOCAL}
X ${STRIP} ${LOCAL}/${PROGRAM}
X
###
# maintenance dependencies
###
lint: ${SRCS}
X ${LINT} ${LINTFLAGS} ${SRCS}
X
shar: ${NAME}.shar
X
${NAME}.shar: ${FILES}
X ${DEL} ${NAME}.shar
X ${SHAR} ${FILES} >${NAME}.shar
X
clean:
X ${DEL} ${OBJS} ${PROG_OBJS} ${TEST_OBJS}
X ${DEL} tags core .exrc
X
clobber: clean
X ${DEL} ${LIBARGS} ${PROGRAM} ${STYLE}_test
X
tags: ${SRCS} ${HDRS}
X ${MKTAGS} ${SRCS} ${HDRS}
X
collapse: clobber shar
X ${SQZ} ${NAME}.shar
X ${DEL} ${FILES}
X
print: ${SRCS} ${HDRS}
X @${PRINT} ${SRCS} ${HDRS}
X
SHAR_EOF
chmod 0664 Makefile ||
echo 'restore of Makefile failed'
Wc_c="`wc -c < 'Makefile'`"
test 4610 -eq "$Wc_c" ||
echo 'Makefile: original size 4610, current size' "$Wc_c"
# ============= PATCH ==============
echo 'x - extracting PATCH (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'PATCH' &&
*** /hx1d3/lp/brad/parseargs_patch03/parseargs/MANIFEST Wed Apr 10 09:46:29 1991
--- MANIFEST Thu Apr 11 11:04:22 1991
***************
*** 8,14 ****
X amiga_args.c 4 parse AmigaDOS command-lines
X arglist.c 2 implement the listXxxx functions for arglists
X argtype.c 5 implement the argXxxx argument type functions
! doc/ 1 directory containing documentation
X doc/Makefile 2 makefile for the documentation
X doc/arg_macros.inc 2 describe arg-xxx and ARG_XXX macros
X doc/argdesc.inc 2 describe an ARGDESC structure
--- 8,14 ----
X amiga_args.c 4 parse AmigaDOS command-lines
X arglist.c 2 implement the listXxxx functions for arglists
X argtype.c 5 implement the argXxxx argument type functions
! doc 1 directory containing documentation
X doc/Makefile 2 makefile for the documentation
X doc/arg_macros.inc 2 describe arg-xxx and ARG_XXX macros
X doc/argdesc.inc 2 describe an ARGDESC structure
***************
*** 19,25 ****
X doc/caveats.inc 1 CAVEATS section for parseargs(1) and (3)
X doc/cmd_macros.inc 1 describe CMD_XXX macros
X doc/defargs.inc 1 describe the default argdesc-array
! doc/env_args.inc 1 describe use of $CMD_ARGS
X doc/env_parse.inc 2 describe use of $PARSECNTL
X doc/env_usage.inc 2 describe use of $USAGECNTL
X doc/fparseargs3.inc 1 describe fparseargs(3)
--- 19,26 ----
X doc/caveats.inc 1 CAVEATS section for parseargs(1) and (3)
X doc/cmd_macros.inc 1 describe CMD_XXX macros
X doc/defargs.inc 1 describe the default argdesc-array
! doc/effects.inc 1 describe the side-effects of parseargs(3)
! doc/env_args.inc 2 describe use of $CMD_ARGS
X doc/env_parse.inc 2 describe use of $PARSECNTL
X doc/env_usage.inc 2 describe use of $USAGECNTL
X doc/fparseargs3.inc 1 describe fparseargs(3)
***************
*** 46,51 ****
--- 47,53 ----
X parseargs.c 7 C source for parseargs(1)
X parseargs.h 6 include file for parseargs library
X parseargs.pl 2 parseargs for perl
+ patchlevel.h 1 list of patches (most recent first)
X pgopen.c 4 pipe output to a pager
X pgopen.h 1 include file for pgopen.c
X stest.c 3 test progarm for parseargs(3)
*** /hx1d3/lp/brad/parseargs_patch03/parseargs/Makefile.cpp Wed Apr 10 09:46:32 1991
--- Makefile.cpp Thu Apr 11 11:04:27 1991
***************
*** 24,29 ****
--- 24,30 ----
X # define RANLIB_CMD ranlib
X # define SHAR_CMD shar
X # define SQZ_CMD compress -v
+ # define STRIP_CMD strip
X #endif
X
X #ifdef vms
***************
*** 47,52 ****
--- 48,54 ----
X # define RANLIB_CMD ranlib
X # define SHAR_CMD shar
X # define SQZ_CMD compress/file
+ # define STRIP_CMD strip
X #endif
X
X #if ( defined(AZTEC) || defined(MANX) )
***************
*** 70,75 ****
--- 72,78 ----
X # define RANLIB_CMD ranlib
X # define SHAR_CMD shar
X # define SQZ_CMD compress -v
+ # define STRIP_CMD strip
X #endif
X
X #ifdef MS_DOS
***************
*** 93,98 ****
--- 96,102 ----
X # define RANLIB_CMD ranlib
X # define SHAR_CMD shar
X # define SQZ_CMD arc -c
+ # define STRIP_CMD strip
X #endif
X
X #ifdef OS2
***************
*** 116,121 ****
--- 120,126 ----
X # define RANLIB_CMD ranlib
X # define SHAR_CMD shar
X # define SQZ_CMD arc -c
+ # define STRIP_CMD strip
X #endif
X
X REM $Header: Makefile,v 2.1 89/12/30 20:59:01 eric Exp $
***************
*** 179,184 ****
--- 184,190 ----
X RANLIB = RANLIB_CMD
X SHAR = SHAR_CMD
X SQZ = SQZ_CMD
+ STRIP = STRIP_CMD
X
X REMLINE
X REM files used
***************
*** 196,201 ****
--- 202,208 ----
X doc/caveats.inc \
X doc/cmd_macros.inc \
X doc/defargs.inc \
+ doc/effects.inc \
X doc/env_args.inc \
X doc/env_parse.inc \
X doc/env_usage.inc \
***************
*** 275,281 ****
X REMLINE
X REM object dependencies
X REMLINE
! ${NAME}.o: ${NAME}.c ${NAME}.h strfuncs.h useful.h
X amiga_args.o: amiga_args.c ${NAME}.h pgopen.h strfuncs.h useful.h
X arglist.o: arglist.c ${NAME}.h strfuncs.h useful.h
X argtype.o: argtype.c ${NAME}.h strfuncs.h useful.h
--- 282,288 ----
X REMLINE
X REM object dependencies
X REMLINE
! ${NAME}.o: ${NAME}.c ${NAME}.h patchlevel.h strfuncs.h useful.h
X amiga_args.o: amiga_args.c ${NAME}.h pgopen.h strfuncs.h useful.h
X arglist.o: arglist.c ${NAME}.h strfuncs.h useful.h
X argtype.o: argtype.c ${NAME}.h strfuncs.h useful.h
***************
*** 310,315 ****
--- 317,323 ----
X _Pathname(${LOCAL},${PROGRAM}): ${PROGRAM} ${TEMPLATES}
X ( ${CHDIR} ${LOCAL} ; ${DEL} ${PROGRAM} ${TEMPLATES} )
X ${COPY} ${PROGRAM} ${TEMPLATES} ${LOCAL}
+ ${STRIP} _Pathname(${LOCAL},${PROGRAM})
X
X REMLINE
X REM maintenance dependencies
*** /hx1d3/lp/brad/parseargs_patch03/parseargs/amiga_args.c Wed Apr 10 09:46:39 1991
--- amiga_args.c Thu Apr 11 11:04:36 1991
***************
*** 156,163 ****
X }
X
X flags = arg_flags(ad); /* save flags */
! if ( ARG_isGIVEN(ad) ) /* reset flags for this appearance */
! BCLEAR( arg_flags(ad), ARGVALGIVEN | ARGVALSEP );
X
X if ( p ) { /* matched NAME=VALUE */
X if ( ARG_isMULTIVAL(ad) )
--- 156,165 ----
X }
X
X flags = arg_flags(ad); /* save flags */
! if ( ARG_isGIVEN(ad) ) {
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGKEYWORD );
! if ( !ARG_isMULTIVAL(ad) ) BCLEAR( arg_flags(ad), ARGVALGIVEN );
! }
X
X if ( p ) { /* matched NAME=VALUE */
X if ( ARG_isMULTIVAL(ad) )
***************
*** 199,206 ****
X }
X else if (cmd_prev(cmd)) {
X flags = arg_flags(cmd_prev(cmd)); /* save flags */
! if ( ARG_isGIVEN(cmd_prev(cmd)) ) /* reset flags */
! BCLEAR( arg_flags(cmd_prev(cmd)), ARGVALGIVEN | ARGVALSEP );
X
X /* previous value may have required a keyword */
X BSET( arg_flags(cmd_prev(cmd)), ARGVALSEP );
--- 201,210 ----
X }
X else if (cmd_prev(cmd)) {
X flags = arg_flags(cmd_prev(cmd)); /* save flags */
! if ( ARG_isGIVEN(cmd_prev(cmd)) ) { /* reset flags */
! BCLEAR( arg_flags(cmd_prev(cmd)), ARGVALSEP );
! if ( !ARG_isMULTIVAL(ad) ) BCLEAR( arg_flags(ad), ARGVALGIVEN );
! }
X
X /* previous value may have required a keyword */
X BSET( arg_flags(cmd_prev(cmd)), ARGVALSEP );
***************
*** 223,233 ****
X continue;
X }
X else { /* it's a positional argument or a list item */
! if (cmd_list(cmd)) { /* its a list item */
X flags = arg_flags(cmd_list(cmd)); /* save flags */
! if ( ARG_isGIVEN(cmd_list(cmd)) ) /* reset flags */
! BCLEAR( arg_flags(cmd_list(cmd)), ARGVALGIVEN | ARGVALSEP );
!
X BSET( arg_flags(cmd_list(cmd)), ARGVALSEP );
X
X if ( !HANDLE(cmd_list(cmd), *av, cmd_flags(cmd)) ) {
--- 227,237 ----
X continue;
X }
X else { /* it's a positional argument or a list item */
! if ( cmd_list(cmd) ) { /* its a list item */
X flags = arg_flags(cmd_list(cmd)); /* save flags */
! if ( ARG_isGIVEN(cmd_list(cmd)) ) { /* reset flags */
! BCLEAR( arg_flags(cmd_list(cmd)), ARGVALSEP );
! }
X BSET( arg_flags(cmd_list(cmd)), ARGVALSEP );
X
X if ( !HANDLE(cmd_list(cmd), *av, cmd_flags(cmd)) ) {
***************
*** 262,270 ****
X }
X else {
X flags = arg_flags(ad); /* save flags */
! if ( ARG_isGIVEN(ad) ) /* reset flags for this appearance */
! BCLEAR( arg_flags(ad), ARGVALGIVEN | ARGVALSEP );
!
X BSET( arg_flags(ad), ARGVALSEP );
X
X /* try to convert */
--- 266,275 ----
X }
X else {
X flags = arg_flags(ad); /* save flags */
! if ( ARG_isGIVEN(ad) ) { /* reset flags for this appearance */
! BCLEAR( arg_flags(ad), ARGVALSEP );
! if (! ARG_isMULTIVAL(ad)) BCLEAR(arg_flags(ad), ARGVALGIVEN);
! }
X BSET( arg_flags(ad), ARGVALSEP );
X
X /* try to convert */
*** /hx1d3/lp/brad/parseargs_patch03/parseargs/argtype.c Wed Apr 10 09:52:05 1991
--- argtype.c Thu Apr 11 11:04:44 1991
***************
*** 40,47 ****
X #define REALLOC(ptr,size) (( ! ptr ) ? malloc(size) : realloc(ptr, size) )
X EXTERN VOID syserr ARGS((const char *, ...));
X EXTERN VOID usrerr ARGS((const char *, ...));
! EXTERN long strtol ARGS((char *, char **, int));
! EXTERN double strtod ARGS((const char *, char **));
X
X
X /***************************************************************************
--- 40,47 ----
X #define REALLOC(ptr,size) (( ! ptr ) ? malloc(size) : realloc(ptr, size) )
X EXTERN VOID syserr ARGS((const char *, ...));
X EXTERN VOID usrerr ARGS((const char *, ...));
! /* EXTERN long strtol ARGS((char *, char **, int)); */
! /* EXTERN double strtod ARGS((const char *, char **)); */
X
X
X /***************************************************************************
***************
*** 82,90 ****
X ** similarly. One of these routines is called when an argument of that
X ** particular type is matched by one of the argument parsing function in
X ** parseargs(3). When such an argument is matched, its argument transla-
! ** tion routines is invoked and is passed (1) the address of the argument
X ** descriptor for the matched argument, (2) the possible argument string
! ** for that matched argument, and (3) a boolean filed that is TRUE only
X ** if the second parameter points to temporary storage (indicating that
X ** some copying may need to be done instead of just pointing to the same
X ** object).
--- 82,90 ----
X ** similarly. One of these routines is called when an argument of that
X ** particular type is matched by one of the argument parsing function in
X ** parseargs(3). When such an argument is matched, its argument transla-
! ** tion routine is invoked and is passed (1) the address of the argument
X ** descriptor for the matched argument, (2) the possible argument string
! ** for that matched argument, and (3) a boolean field that is TRUE only
X ** if the second parameter points to temporary storage (indicating that
X ** some copying may need to be done instead of just pointing to the same
X ** object).
***************
*** 645,664 ****
X ** ArgOutput attempts to redirect the file-pointer addressed by ad_valp
X ** to the file named by the given value. The file is opened for writing.
X **
! ** In either case, ad_valp should be of type (FILE *) (and not a pointer
! ** to a file pointer as in (FILE **)!!!
X **
X ** If the given files cannot be opened, then an error message is printed
X ** and the associated input/output streams are closed.
X ***^^**********************************************************************/
X
X /*ARGSUSED*/
X BOOL argInput PARMS(ad, vp, copyf)
X {
! /* note that ad_valp is a file pointer
! ** (so dont use &fp in the arg-desc)
! */
X FILE *fp = (FILE *)arg_valp(ad);
X BOOL error = FALSE;
X
X /* redirect file pointer to read from file */
--- 645,676 ----
X ** ArgOutput attempts to redirect the file-pointer addressed by ad_valp
X ** to the file named by the given value. The file is opened for writing.
X **
! ** In either case, ad_valp should be of type (FILE **) (a pointer to a
! ** file pointer) and not a mere file pointer as in (FILE *)!!!
X **
X ** If the given files cannot be opened, then an error message is printed
X ** and the associated input/output streams are closed.
X ***^^**********************************************************************/
X
+ /*
+ ** slight problem here - on VMS, as_valp should be of type FILE **
+ ** but on Unix (emulating VMS) it needs to be of type FILE *.
+ ** we get around this using the following:
+ */
+ # ifdef vms
+ # define FP *fp
+ # else
+ # define FP fp
+ # endif
+
X /*ARGSUSED*/
X BOOL argInput PARMS(ad, vp, copyf)
X {
! #ifdef vms
! FILE **fp = (FILE **)arg_valp(ad);
! #else
X FILE *fp = (FILE *)arg_valp(ad);
+ #endif
X BOOL error = FALSE;
X
X /* redirect file pointer to read from file */
***************
*** 667,675 ****
X error = TRUE;
X }
X
! if ( !error && !fp )
X error = TRUE;
! else if ( !error && !freopen(vp, "r", fp) )
X error = TRUE;
X
X if ( error ) {
--- 679,687 ----
X error = TRUE;
X }
X
! if ( !error && !FP )
X error = TRUE;
! else if ( !error && !freopen(vp, "r", FP) )
X error = TRUE;
X
X if ( error ) {
***************
*** 683,692 ****
X /*ARGSUSED*/
X BOOL argOutput PARMS(ad, vp, copyf)
X {
! /* note that ad_valp is a file pointer
! ** (so dont use &fp in the arg-desc)
! */
X FILE *fp = (FILE *)arg_valp(ad);
X BOOL error = FALSE;
X
X /* redirect file pointer to write to file */
--- 695,705 ----
X /*ARGSUSED*/
X BOOL argOutput PARMS(ad, vp, copyf)
X {
! #ifdef vms
! FILE **fp = (FILE **)arg_valp(ad);
! #else
X FILE *fp = (FILE *)arg_valp(ad);
+ #endif
X BOOL error = FALSE;
X
X /* redirect file pointer to write to file */
***************
*** 695,703 ****
X error = TRUE;
X }
X
! if ( !error && !fp )
X error = TRUE;
! else if ( !error && !freopen(vp, "a", fp) )
X error = TRUE;
X
X if ( error ) {
--- 708,716 ----
X error = TRUE;
X }
X
! if ( !error && !FP )
X error = TRUE;
! else if ( !error && !freopen(vp, "a", FP) )
X error = TRUE;
X
X if ( error ) {
***************
*** 707,710 ****
--- 720,724 ----
X return (TRUE);
X }
X
+ # undef FP
X #endif /* vms_style */
*** /hx1d3/lp/brad/parseargs_patch03/parseargs/ibm_args.c Wed Apr 10 09:47:26 1991
--- ibm_args.c Thu Apr 11 11:06:43 1991
***************
*** 252,259 ****
X }
X
X flags = arg_flags(ad);
! if ( ARG_isGIVEN(ad) )
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGVALGIVEN | ARGKEYWORD );
X
X BSET( arg_flags(ad), ARGKEYWORD );
X
--- 252,261 ----
X }
X
X flags = arg_flags(ad);
! if ( ARG_isGIVEN(ad) ) {
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGKEYWORD );
! if ( !ARG_isMULTIVAL(ad) ) BCLEAR( arg_flags(ad), ARGVALGIVEN );
! }
X
X BSET( arg_flags(ad), ARGKEYWORD );
X
***************
*** 362,369 ****
X }/* if unknown-option */
X
X flags = arg_flags(ad);
! if ( ARG_isGIVEN(ad) )
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGVALGIVEN | ARGKEYWORD );
X
X if ( ARG_isMULTIVAL(ad) ) {
X cmd_list(cmd) = ad;
--- 364,373 ----
X }/* if unknown-option */
X
X flags = arg_flags(ad);
! if ( ARG_isGIVEN(ad) ) {
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGKEYWORD );
! if ( !ARG_isMULTIVAL(ad) ) BCLEAR( arg_flags(ad), ARGVALGIVEN );
! }
X
X if ( ARG_isMULTIVAL(ad) ) {
X cmd_list(cmd) = ad;
***************
*** 444,454 ****
X }/*elif option*/
X else {
X /* parsing a list of arguments */
! if( cmd_list(cmd) ) {
X ad = cmd_list(cmd);
X flags = arg_flags(ad);
! if ( ARG_isGIVEN(ad) )
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGVALGIVEN | ARGKEYWORD );
X
X BSET( arg_flags(ad), ARGVALSEP );
X
--- 448,459 ----
X }/*elif option*/
X else {
X /* parsing a list of arguments */
! if ( cmd_list(cmd) ) {
X ad = cmd_list(cmd);
X flags = arg_flags(ad);
! if ( ARG_isGIVEN(ad) ) {
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGKEYWORD );
! }
X
X BSET( arg_flags(ad), ARGVALSEP );
X
***************
*** 481,488 ****
X }
X
X flags = arg_flags(ad);
! if ( ARG_isGIVEN(ad) )
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGVALGIVEN | ARGKEYWORD );
X
X if ( ARG_isMULTIVAL(ad) ) {
X cmd_list(cmd) = ad;
--- 486,495 ----
X }
X
X flags = arg_flags(ad);
! if ( ARG_isGIVEN(ad) ) {
! BCLEAR( arg_flags(ad), ARGVALSEP | ARGKEYWORD );
! if ( !ARG_isMULTIVAL(ad) ) BCLEAR( arg_flags(ad), ARGVALGIVEN );
! }
X
X if ( ARG_isMULTIVAL(ad) ) {
X cmd_list(cmd) = ad;
*** /hx1d3/lp/brad/parseargs_patch03/parseargs/parseargs.awk Wed Apr 10 09:47:27 1991
--- parseargs.awk Thu Apr 11 11:06:52 1991
***************
*** 59,64 ****
--- 59,66 ----
X ## The exit code returned by parseargs(1).
X ##
X ## ^BUGS:
+ ## Assumes that short-options are NOT disabled by $PARSECNTL.
+ ##
X ## Due to the limited ability of awk, scripts using parseargs(1) cannot
X ## use short-options (with a dash '-') because awk will attempt to interpret
X ## any such arguments as options to awk and remove them from ARGV (regardless
***************
*** 97,103 ****
X if ( ! PARSEOUTPUT ) PARSEOUTPUT = TMPFILE "out";
X
X ## build the options and required arguments for parseargs(1)
! PARSEARGS = sprintf( "parseargs -s awk %s -- '%s'", PARSEOPTS, PROGNAME );
X
X ## quote each elemnt in argv and append it to the parseargs-command
X for ( i = 1 ; i <= argc ; i++ ) {
--- 99,106 ----
X if ( ! PARSEOUTPUT ) PARSEOUTPUT = TMPFILE "out";
X
X ## build the options and required arguments for parseargs(1)
! PARSEARGS = sprintf( "parseargs -s awk %s -S '\t' -- '%s'",
! PARSEOPTS, PROGNAME );
X
X ## quote each elemnt in argv and append it to the parseargs-command
X for ( i = 1 ; i <= argc ; i++ ) {
*** /hx1d3/lp/brad/parseargs_patch03/parseargs/parseargs.c Wed Apr 10 09:54:07 1991
--- parseargs.c Thu Apr 11 11:07:09 1991
***************
*** 7,12 ****
--- 7,13 ----
X ** to parse command-line arguments for shell scripts. At the present,
X ** time, VMS/DCL is not yet supported (nor are MS-DOS Batch-files).
X **
+ **
X ** Given a command name, a vector of string-valued arguments such as that
X ** passed to a shell script, and a specification string describing the
X ** possible arguments, parseargs matches actual arguments to possible
***************
*** 18,34 ****
X ** through the use of the "PARSECNTL" environment variable.
X **
X ** Given the command name and the argument specification string,
! ** parsearg -U
! ** prints a reasonably friendly version of the usage of the
! ** calling program on standard diagnostic output. The "verbosity" of
! ** the usage message may be controlled through the use of the
! ** "USAGECNTL" environment variable.
X **
X ** Given the command name and the argument specification string,
! ** parsearg -M
X ** prints a template of the command-syntax on standard output that is
X ** suitable for input to nroff or troff using the -man macro package.
X **
X ** ^SEE_ALSO:
X ** argtype(3), parseargs(1), parseargs(3), parsecntl(3),
X ** parseargs.pl, parseargs.awk
--- 19,39 ----
X ** through the use of the "PARSECNTL" environment variable.
X **
X ** Given the command name and the argument specification string,
! ** parseargs -U
! ** prints a reasonably friendly version of the usage of the calling program
! ** on standard diagnostic output. The "verbosity" of the usage message may
! ** be controlled through the use of the "USAGECNTL" environment variable.
X **
X ** Given the command name and the argument specification string,
! ** parseargs -M
X ** prints a template of the command-syntax on standard output that is
X ** suitable for input to nroff or troff using the -man macro package.
X **
+ ** Given no other arguments,
+ ** parseargs -#
+ ** prints on standard output, the current version and patchlevel of the
+ ** running version of parseargs.
+ **
X ** ^SEE_ALSO:
X ** argtype(3), parseargs(1), parseargs(3), parsecntl(3),
X ** parseargs.pl, parseargs.awk
***************
*** 64,84 ****
X ** newlines will be translated into spaces, or characters following a
X ** newline may be lost, in any variables that are set by parseargs.
X **
- ** Parseargs(1) is subject to the same caveats as parseargs(3).
- ** Refer to the CAVEATS section of the parseargs(3) for more information.
- **
X ** ^HISTORY:
X ** 07/18/90 Brad Appleton <brad at ssd.csd.harris.com> Created
X ***^^**********************************************************************/
X
- #include <fcntl.h>
X #include <stdio.h>
X #include <useful.h>
X #include "strfuncs.h"
X
X #define PARSEARGS_PRIVATE /* include private definitions */
X #include "parseargs.h"
X
X /*************************************************************************
X ** ^SECTION: RETURN-CODES
X **
--- 69,98 ----
X ** newlines will be translated into spaces, or characters following a
X ** newline may be lost, in any variables that are set by parseargs.
X **
X ** ^HISTORY:
X ** 07/18/90 Brad Appleton <brad at ssd.csd.harris.com> Created
+ **
+ ** 02/--/91 Brad Appleton <brad at ssd.csd.harris.com>
+ ** - Added awk, perl, and rc to the list of shells to generate output for
+ ** - added calls to vecFree in cleanup()
+ **
+ ** 03/31/91 Brad Appleton <brad at ssd.csd.harris.com>
+ ** - fixed bug in cleanup for SunOS (added free_vectors())
+ ** - fixed printing of single quotes for perl scripts
+ ** - added -C option for case-insensitivity
+ ** - added hidden -# option to print current version and patchlevel
X ***^^**********************************************************************/
X
X #include <stdio.h>
+ #include <errno.h>
X #include <useful.h>
X #include "strfuncs.h"
+ #include "patchlevel.h"
X
X #define PARSEARGS_PRIVATE /* include private definitions */
X #include "parseargs.h"
X
+
X /*************************************************************************
X ** ^SECTION: RETURN-CODES
X **
***************
*** 91,97 ****
X /* -- No errors, success!!
X */
X #define e_USAGE 1
! /* -- No errors were encountered. A usage-message (or manual-page-template)
X ** was explicitly requested (and printed) by the user.
X */
X #define e_SYNTAX 2
--- 105,111 ----
X /* -- No errors, success!!
X */
X #define e_USAGE 1
! /* -- No errors were encountered. A usage-message, or manual-page-template
X ** was explicitly requested (and printed) by the user.
X */
X #define e_SYNTAX 2
***************
*** 233,239 ****
X { "ARGV", "%s\n", "", "\n\n", "'\034'", "\n" },
X
X /* PERL : Positional parms in ARGV; Assignment Syntax: $name=value\n; */
! { "ARGV", "$%s = ", "", ";\n", "'.\"%c\".'", "'" }
X };
X /*************************************************************************/
X
--- 247,253 ----
X { "ARGV", "%s\n", "", "\n\n", "'\034'", "\n" },
X
X /* PERL : Positional parms in ARGV; Assignment Syntax: $name=value\n; */
! { "ARGV", "$%s = ", "'", "';\n", "\\'", "'" }
X };
X /*************************************************************************/
X
***************
*** 281,289 ****
X EXTERN VOID manpage ARGS((const ARGDESC *));
X EXTERN VOID perror ARGS((const char *));
X
- extern int errno; /* system wide error level */
-
X /*************************************************************************/
X /*
X ** variables that are set via command-line arguments
X */
--- 295,316 ----
X EXTERN VOID manpage ARGS((const ARGDESC *));
X EXTERN VOID perror ARGS((const char *));
X
X /*************************************************************************/
+
+ /*ARGSUSED*/
+ #ifdef __ANSI_C__
+ static BOOL argVers( register ARGDESC *ad, register char *vp, BOOL copyf )
+ #else
+ static BOOL argVers( ad, vp, copyf )
+ register ARGDESC *ad;
+ register char *vp;
+ BOOL copyf;
+ #endif
+ {
+ printf( "%s\n", _Ident );
+ exit( e_USAGE );
+ }
+
X /*
X ** variables that are set via command-line arguments
X */
***************
*** 312,317 ****
--- 339,346 ----
X static BOOL PrManual = FALSE; /* ?just print manual page(s)? */
X static BOOL Prompt = FALSE; /* ?prompt for missing args? */
X static BOOL Ignore = FALSE; /* ?ignore bad syntax and continue? */
+ static BOOL AnyCase = FALSE; /* ?case-insensitivity? */
+ static BOOL Flags1st = FALSE; /* ?non-positionals first? */
X
X /*************************************************************************/
X /* now we are ready to define the command-line */
***************
*** 329,334 ****
--- 358,366 ----
X shell assignment statements."
X
X CMD_ARGUMENTS
+ '#', ARGNOVAL, argVers, __ NULL,
+ "VERsion : just print program version, dont parse command-line",
+
X 'U', ARGOPT, argBool, __ &PrUsage,
X "usage : just print program usage, dont parse command-line",
X
***************
*** 341,346 ****
--- 373,381 ----
X 'F', ARGOPT, argStr, __ &StrFalse,
X "FALSEstr : string to use for FALSE Booleans (default=\"\")",
X
+ 'C', ARGOPT, argBool, __ &AnyCase,
+ "caseignore : parse options using case-insensitivity",
+
X 'A', ARGOPT, argBool, __ &ModArr,
X "array : modify the behavior of arrays",
X
***************
*** 376,381 ****
--- 411,419 ----
X "ignore : ignore bad command-line syntax and continue processing \
X (instead of aborting)",
X
+ '1', ARGOPT, argBool, __ &Flags1st,
+ "1st : force non-positional arguments to precede all positional arguments",
+
X '-', ARGOPT, argDummy, __ NULL,
X "+ : end of options - all remaining arguments are interpreted as \
SHAR_EOF
true || echo 'restore of PATCH failed'
echo 'End of part 2'
echo 'File PATCH is continued in part 3'
echo 3 > _shar_seq_.tmp
exit 0
exit 0 # Just in case...
--
Kent Landfield INTERNET: kent at sparky.IMD.Sterling.COM
Sterling Software, IMD UUCP: uunet!sparky!kent
Phone: (402) 291-8300 FAX: (402) 291-4362
Please send comp.sources.misc-related mail to kent at uunet.uu.net.
More information about the Comp.sources.misc
mailing list