v17i058: parseargs - functions to parse command line arguments, Patch01
Brad Appleton
brad at hcx1.ssd.csd.harris.com
Tue Mar 19 02:01:43 AEST 1991
Submitted-by: Brad Appleton <brad at hcx1.ssd.csd.harris.com>
Posting-number: Volume 17, Issue 58
Archive-name: parseargs/patch01
Patch-To: parseargs: Volume 17, Issue 45-57
This is a patch for parseargs. The only things that was wrong is that I
incorrectly documented something, (this is NOT a bugfix).
This patch consists of two files:
PATCH : patches for 'xparse.c' and 'doc/env_parse.inc'
TXTPATCH : patches for 'parseargs1.txt' and 'parseargs3.txt'
The second file is ONLY needed by those who do not have nroff or troff
available to them.
--
______________________ "And miles to go before I sleep." ______________________
Brad Appleton Harris Corp., Computer Systems Division
Software Engineer 2101 West Cypress Creek Road, M/S 161
brad at ssd.csd.harris.com Fort Lauderdale, FL 33309-1892 USA
...!uunet!hcx1!brad Phone: (305) 973-5360
~~~~~~~~~~~~~~~~~~~~ Disclaimer: I said it, not my company! ~~~~~~~~~~~~~~~~~~~
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: PATCH TXTPATCH
# Wrapped by brad at hcx2 on Mon Mar 18 09:33:10 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'PATCH' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'PATCH'\"
else
echo shar: Extracting \"'PATCH'\" \(2415 characters\)
sed "s/^X//" >'PATCH' <<'END_OF_FILE'
X*** doc/env_parse.inc.OLD Mon Mar 18 09:10:32 1991
X--- doc/env_parse.inc Sat Mar 16 15:19:28 1991
X***************
X*** 62,66 ****
X undefined, then parsing behavior set by the programmer is used.
X If the programmer has not explicitly used
X .IR parsecntl (3)
X! to modify the parsing behavior will be ``!Prompt + !Ignore'' for Unix
X! MS-DOS, OS/2, and AmigaDOS systems, and ``Prompt'' for VMS systems.
X--- 62,68 ----
X undefined, then parsing behavior set by the programmer is used.
X If the programmer has not explicitly used
X .IR parsecntl (3)
X! to modify the parsing behavior, then the default behavior will be
X! ``Flags1st'' for Unix systems, ``!Prompt + !Ignore'' for AmigaDOS
X! systems, ``CaseIgnore'' for MS-DOS and OS/2 systems, and ``Prompt''
X! for VMS systems.
X*** xparse.c.OLD Mon Mar 18 09:10:36 1991
X--- xparse.c Mon Mar 18 08:51:08 1991
X***************
X*** 537,543 ****
X--- 537,553 ----
X else anchor = ad;
X
X /* set default parse-flags */
X+ #ifndef ibm_style
X cmd_flags(argd) = pa_DEFAULTS;
X+ #else
X+ {
X+ char *pfx = getenv( "SWITCHAR" );
X+ if ( pfx && *pfx == '-' )
X+ cmd_flags(argd) = pa_FLAGS1ST;
X+ else
X+ cmd_flags(argd) = pa_DEFAULTS;
X+ }
X+ #endif
X
X /* if new-style, get the purpose from the command name */
X if ( !old_style && cmd_name(argd) ) {
X***************
X*** 1168,1176 ****
X **
X ** If the environment variable "PARSECNTL" is empty or undefined, then
X ** parsing behavior set by the programmer is used. If the programmer has
X! ** not explicitly used parsecntl(3) to modify the parsing behavior will
X! ** be "!Prompt + !Ignore" for Unix and AmigaDOS systems, "Prompt" for
X! ** VMS systems, and "CaseIgnore" for MS-DOS and OS/2 systems.
X **
X ** ^REQUIREMENTS:
X ** <cmd> must point to an array that has been declared using the CMD_XXXX
X--- 1178,1187 ----
X **
X ** If the environment variable "PARSECNTL" is empty or undefined, then
X ** parsing behavior set by the programmer is used. If the programmer has
X! ** not explicitly used parsecntl(3) to modify the parsing behavior, then
X! ** the default behavior will be "Flags1st" for Unix Systems,
X! ** "!Prompt + !Ignore" for AmigaDOS systems, "Prompt" for VMS systems,
X! ** and "CaseIgnore" for MS-DOS and OS/2 systems.
X **
X ** ^REQUIREMENTS:
X ** <cmd> must point to an array that has been declared using the CMD_XXXX
END_OF_FILE
if test 2415 -ne `wc -c <'PATCH'`; then
echo shar: \"'PATCH'\" unpacked with wrong size!
fi
# end of 'PATCH'
fi
if test -f 'TXTPATCH' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'TXTPATCH'\"
else
echo shar: Extracting \"'TXTPATCH'\" \(9637 characters\)
sed "s/^X//" >'TXTPATCH' <<'END_OF_FILE'
XNo differences encountered
X*** parseargs1.txt.OLD Mon Mar 18 09:24:28 1991
X--- parseargs1.txt Mon Mar 18 09:25:29 1991
X***************
X*** 607,615 ****
X If the environment variable ``PARSECNTL'' is empty or
X undefined, then parsing behavior set by the programmer is
X used. If the programmer has not explicitly used
X! parsecntl(3) to modify the parsing behavior will be
X! ``!Prompt + !Ignore'' for Unix MS-DOS, OS/2, and AmigaDOS
X! systems, and ``Prompt'' for VMS systems.
X
X USAGE MESSAGES
X Through the use of an environment variable (or a VMS
X--- 607,616 ----
X If the environment variable ``PARSECNTL'' is empty or
X undefined, then parsing behavior set by the programmer is
X used. If the programmer has not explicitly used
X! parsecntl(3) to modify the parsing behavior, then the
X! default behavior will be ``Flags1st'' for Unix systems,
X! ``!Prompt + !Ignore'' for AmigaDOS systems, ``CaseIgnore''
X! for MS-DOS and OS/2 systems, and ``Prompt'' for VMS systems.
X
X USAGE MESSAGES
X Through the use of an environment variable (or a VMS
X***************
X*** 650,656 ****
X Description
X The command description is printed.
X
X- Terse
X
X
X
X--- 651,656 ----
X***************
X*** 665,670 ****
X--- 665,671 ----
X
X
X
X+ Terse
X Terse mode, just print command-line synopsis.
X
X Verbose
X***************
X*** 716,722 ****
X FALSE (an empty string).
X
X -X A Boolean ``X Rated'' flag. This is not
X- printed in the usage message.
X
X
X
X--- 717,722 ----
X***************
X*** 731,736 ****
X--- 731,738 ----
X
X
X
X+ printed in the usage message.
X+
X The two positional arguments are both strings, as is the
X final list. If we were to invoke the above script with the
X following command line:
X***************
X*** 781,788 ****
X
X ## parse command-line and save assignments in a temporary file ##
X parseargs -s sh -e ARGUMENTS -u -- "$NAME" "$@" >/tmp/tmp$$
X- if [ $? -ne 0 ]
X- then rm -f /tmp/tmp$$; exit 2 ## non-zero status (usage given)
X
X
X
X--- 783,788 ----
X***************
X*** 797,802 ****
X--- 797,804 ----
X
X
X
X+ if [ $? -ne 0 ]
X+ then rm -f /tmp/tmp$$; exit 2 ## non-zero status (usage given)
X fi
X
X ## evaluate results from parseargs and remove temporary file
X***************
X*** 846,857 ****
X 4 A syntax error was encountered in the argument
X specification string that was specified to parseargs.
X
X- FILES
X- /usr/local/parseargs.pl
X- This file defines a perl function named parseargs to
X
X
X
X Page 13
X
X
X--- 848,857 ----
X 4 A syntax error was encountered in the argument
X specification string that was specified to parseargs.
X
X
X
X
X+
X Page 13
X
X
X***************
X*** 863,868 ****
X--- 863,871 ----
X
X
X
X+ FILES
X+ /usr/local/parseargs.pl
X+ This file defines a perl function named parseargs to
X parse arguments more conveniently for perl-scripts. The
X function is both documented and implemented in this
X file. The user should ``require'' this file in his/her
X***************
X*** 913,923 ****
X Hence multiple ``leading dash'' arguments may specified as
X follows:
X
X- -f-dash_arg1 -f-dash_arg2 ...
X
X
X-
X-
X Page 14
X
X
X--- 916,923 ----
X***************
X*** 929,934 ****
X--- 929,936 ----
X
X
X
X+ -f-dash_arg1 -f-dash_arg2 ...
X+
X BUGS
X It does not make sense to use any arguments of type argTBool
X since parseargs currently has no way of knowing what the
X***************
X*** 971,978 ****
X AUTHOR
X Brad Appleton (brad at ssd.csd.harris.com)
X Harris Computer Systems, Fort Lauderdale, FL USA
X-
X-
X
X
X
X--- 973,978 ----
X*** parseargs3.txt.OLD Mon Mar 18 09:24:29 1991
X--- parseargs3.txt Mon Mar 18 09:25:47 1991
X***************
X*** 643,656 ****
X If the environment variable ``PARSECNTL'' is empty or unde-
X fined, then parsing behavior set by the programmer is used.
X If the programmer has not explicitly used parsecntl(3) to
X! modify the parsing behavior will be ``!Prompt + !Ignore''
X! for Unix MS-DOS, OS/2, and AmigaDOS systems, and ``Prompt''
X! for VMS systems.
X
X USAGE MESSAGES
X Through the use of an environment variable (or a VMS sym-
X bol), the user may control the syntax and the verbosity of
X- the command-usage messages that are printed by parseargs.
X
X
X
X--- 643,656 ----
X If the environment variable ``PARSECNTL'' is empty or unde-
X fined, then parsing behavior set by the programmer is used.
X If the programmer has not explicitly used parsecntl(3) to
X! modify the parsing behavior, then the default behavior will
X! be ``Flags1st'' for Unix systems, ``!Prompt + !Ignore'' for
X! AmigaDOS systems, ``CaseIgnore'' for MS-DOS and OS/2 sys-
X! tems, and ``Prompt'' for VMS systems.
X
X USAGE MESSAGES
X Through the use of an environment variable (or a VMS sym-
X bol), the user may control the syntax and the verbosity of
X
X
X
X***************
X*** 665,670 ****
X--- 665,671 ----
X
X
X
X+ the command-usage messages that are printed by parseargs.
X The desired level of verbosity may be set by defining the
X environment variable ``USAGECNTL" to be a combination of
X strings (case insensitive). The value of each string con-
X***************
X*** 715,725 ****
X Same as LongOpts.
X
X
X- If the environment variable ``USAGECNTL'' is empty or unde-
X- fined, then the default usage level (which is presently
X
X
X
X Page 11
X
X
X--- 716,725 ----
X Same as LongOpts.
X
X
X
X
X
X+
X Page 11
X
X
X***************
X*** 731,736 ****
X--- 731,738 ----
X
X
X
X+ If the environment variable ``USAGECNTL'' is empty or unde-
X+ fined, then the default usage level (which is presently
X ``Verbose + Options'') will be used.
X
X MULTI-VALUED ARGUMENTS
X***************
X*** 781,791 ****
X ( StrVec.array[ StrVec.count ] == (char *)NULL )
X
X is always true, and character-vectors will always have an
X- extra NUL-character at the end such that:
X
X
X
X-
X Page 12
X
X
X--- 783,791 ----
X***************
X*** 797,802 ****
X--- 797,804 ----
X
X
X
X+ extra NUL-character at the end such that:
X+
X ( CharVec.array[ CharVec.count ] == '\0' )
X
X is always true. Integer and floating point vectors contain
X***************
X*** 847,854 ****
X i, StrVec.array[i], StrVec.flags[i] );
X
X for ( i = 0 ; i < NumVec.count ; i++ )
X- printf( "Number[%d]=%s, flags=%x\n",
X- i, NumVec.array[i], NumVec.flags[i] );
X
X
X
X--- 849,854 ----
X***************
X*** 863,868 ****
X--- 863,871 ----
X
X
X
X+ printf( "Number[%d]=%s, flags=%x\n",
X+ i, NumVec.array[i], NumVec.flags[i] );
X+
X listFree( StrList );
X StrList = ARGLISTNULL;
X
X***************
X*** 912,920 ****
X typedef ARGVEC_T(FILE *) FILEvec_t;
X
X BOOL argReadFile( ARGDESC *ad, char *vp, BOOL copyf )
X- {
X- register FILE *fp;
X- fp = fopen(vp, "r");
X
X
X
X--- 915,920 ----
X***************
X*** 929,934 ****
X--- 929,938 ----
X
X
X
X+ {
X+ register FILE *fp;
X+ fp = fopen(vp, "r");
X+
X if ( ! fp ) {
X usrerr("cannot open '%s' for reading", vp);
X return (FALSE);
X***************
X*** 978,989 ****
X ment descriptor) is always used to match for possible argu-
X ments (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
X
X
X-
X Page 15
X
X
X--- 982,989 ----
X***************
X*** 995,1000 ****
X--- 995,1003 ----
X
X
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
X in the prompt field (as in ``+count=4'' and ``+rep-
X count=4'').
X
X***************
X*** 1045,1055 ****
X the pc_ARGFLAGS functions code) was found in the given
X argdesc-array or in its default-list.
X
X- pe_BADMODE
X- Bad mode for given command in parsecntl. This occurs
X
X
X-
X Page 16
X
X
X--- 1048,1055 ----
X***************
X*** 1061,1066 ****
X--- 1061,1068 ----
X
X
X
X+ pe_BADMODE
X+ Bad mode for given command in parsecntl. This occurs
X when pc_WRITE or pc_RDWR mode is passed to parsecntl in
X conjunction with the pc_ARGFLAGS functions code. Par-
X secntl will not modify existing arguments.
X***************
X*** 1110,1121 ****
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.
X
X
X
X Page 17
X
X
X--- 1112,1121 ----
X
X -f-dash_arg1 -f-dash_arg2 ...
X
X
X
X
X+
X Page 17
X
X
X***************
X*** 1127,1132 ****
X--- 1127,1135 ----
X
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.
X A problem occurs however in the following scenario: suppose
X `-s' is an option that takes an optional string argument (nd
X suppose `-x' is some boolean flag). Then if the following
X***************
X*** 1156,1164 ****
X argument flags ARGPOS, ARGVALOPT, ARGVALREQ, ARGVALGIVEN,
X ARGNOVAL, and ARGVEC; and VAX/VMS version and IBM-PC version
X by Brad Appleton
X-
X-
X-
X
X
X
X--- 1159,1164 ----
XNo differences encountered
END_OF_FILE
if test 9637 -ne `wc -c <'TXTPATCH'`; then
echo shar: \"'TXTPATCH'\" unpacked with wrong size!
fi
# end of 'TXTPATCH'
fi
echo shar: End of shell archive.
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