Brad Appleton <brad@hcx1.ssd.csd.harris.com> (06/08/91)
Submitted-by: Brad Appleton <brad@hcx1.ssd.csd.harris.com> Posting-number: Volume 20, Issue 46 Archive-name: parseargs/patch06 Environment: UNIX, VMS, MS-DOS, OS/2, Amiga Patch-To: parseargs: Volume 17, Issue 46-57 This is patch06 for parseargs. Its includes the following changes: - parsecntl(3) now correctly handles mispelled keywords for the pc_ARGFLAGS request (it was looping forever). - fixed an error in the documentation (a "NOT" was omitted). - added #ifdef SVR4 stuff to unix_man.c to print System V Release 4 style manual pages. - allowed "sname=aname" syntax in the ad_prompt field of an ARGDESC in addition to the existing syntax. This new syntax allows argument names to be be completely different from keyword names. - changed get_name() & get_keyword to get_argname() & get_kwdname() (respectively) in strfuncs.[ch]. Also sped up the algorithm to get the keyword (since it no longer needs malloc). This patch consists of the file PATCH which is a set of context diffs to be fed to the patch program. To apply this patch: 1) cd to the directory containing the source for parseargs, 2) unshar this archive, 4) type "patch -p0 < PATCH" to apply the patches ______________________ "And miles to go before I sleep." ______________________ Brad Appleton brad@ssd.csd.harris.com Harris Computer Systems uunet!hcx1!brad Fort Lauderdale, FL USA ~~~~~~~~~~~~~~~~~~~~ Disclaimer: I said it, not my company! ~~~~~~~~~~~~~~~~~~~ #! /bin/sh # This is a shell archive. Remove anything before this line, then feed it # into a shell via "sh file" or similar. To overwrite existing files, # type "sh file -c". # The tool that generated this appeared in the comp.sources.unix newsgroup; # send mail to comp-sources-unix@uunet.uu.net if you want that tool. # Contents: PATCH # Wrapped by kent@sparky on Fri Jun 7 20:53:09 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH echo If this archive is complete, you will see the following message: echo ' "shar: End of archive."' if test -f 'PATCH' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'PATCH'\" else echo shar: Extracting \"'PATCH'\" \(50339 characters\) sed "s/^X//" >'PATCH' <<'END_OF_FILE' X*** Intro.OLD Mon Jun 3 11:13:52 1991 X--- Intro Wed May 22 14:47:07 1991 X*************** X*** 83,89 **** X X And before you know it, your command-line had been parsed, all variables X have been assigned their corresponding values from the command-line, syntax X! has been verified, and a usage message (if required) has been printed. X X Under UNIX, the command-line syntax (using single character options) for the X above command would be: X--- 83,89 ---- X X And before you know it, your command-line had been parsed, all variables X have been assigned their corresponding values from the command-line, syntax X! have been verified, and a usage message (if required) has been printed. X X Under UNIX, the command-line syntax (using single character options) for the X above command would be: X*************** X*** 108,114 **** X cmdname [/a[=<areacode>]] [/g=<newsgroups>...] [/r=<repcount>] X [/s=<sepchar>] [/x] <name> [<args>...] X X! The AmigaDOS command-line syntax would be the following: X X cmdname [AREA [<areacode>]] [GROUPS <newsgroups>...] [REP <repcount>] X [SEP <sepchar>] [X] <name> [<args>...] X--- 108,114 ---- X cmdname [/a[=<areacode>]] [/g=<newsgroups>...] [/r=<repcount>] X [/s=<sepchar>] [/x] <name> [<args>...] X X! The AmigaDOS command-line syntax would be the following: X X cmdname [AREA [<areacode>]] [GROUPS <newsgroups>...] [REP <repcount>] X [SEP <sepchar>] [X] <name> [<args>...] X*** README.OLD Mon Jun 3 11:14:12 1991 X--- README Wed May 22 14:56:09 1991 X*************** X*** 290,295 **** X--- 290,296 ---- X I also added the capability to handle ARGVEC arguments into the X remaining argument type functions. X X+ X NEW ARGUMENT FLAGS: X =================== X I added the following argument flags to parseargs: X*************** X*** 306,311 **** X--- 307,313 ---- X X Consult the manual page for parseargs(1) & parseargs(3) for more information. X X+ X NEW INTERFACE X ============= X I added a set of Macros to allow a more "self documenting" approach to X*************** X*** 336,341 **** X--- 338,344 ---- X variable. See the parseargs(3) and parseargs(1) manual pages for more X information regarding USAGECNTL. X X+ X SPECIFYING ALTERNATE PARSING BEHAVIOR X ===================================== X Parseargs provides 3 methods for controlling "how" the command-line is X*************** X*** 351,356 **** X--- 354,360 ---- X See the manual pages for parseargs(1), parseargs(3), and parsecntl(3) X for more information. X X+ X GIVING DEFAULT ARGUMENTS X ======================== X Programs that use parseargs may be given default arguments under UNIX X*************** X*** 379,389 **** X relatively easy to add new shell-types. At this point in time, parseargs X will generate output for the following command-interpreters: X X! sh (Bourne Shell) X! csh/tcsh (C-Shell) X! bash (Bourne-Again Shell) X! ksh (Korn Shell) X! rc (Plan 9 Shell) X perl X awk X X--- 383,394 ---- X relatively easy to add new shell-types. At this point in time, parseargs X will generate output for the following command-interpreters: X X! sh (Bourne Shell) X! csh/tcsh/itcsh (C-Shell) X! bash (Bourne-Again Shell) X! ksh (Korn Shell) X! rc (Plan 9 Shell) X! zsh (Z shell) X perl X awk X X*** amiga_args.c.OLD Mon Jun 3 11:14:17 1991 X--- amiga_args.c Mon May 13 13:44:24 1991 X*************** X*** 144,150 **** X BSET( arg_flags(cmd_prev(cmd)), ARGGIVEN ); X } X else { /* value was required */ X! (VOID)get_keyword( arg_sname(cmd_prev(cmd)), keyword ); X usrerr( "value required for %s keyword", keyword ); X parse_error = pe_SYNTAX; X } X--- 144,150 ---- X BSET( arg_flags(cmd_prev(cmd)), ARGGIVEN ); X } X else { /* value was required */ X! (VOID)get_kwdname( arg_sname(cmd_prev(cmd)), keyword ); X usrerr( "value required for %s keyword", keyword ); X parse_error = pe_SYNTAX; X } X*************** X*** 310,316 **** X BSET( arg_flags(cmd_prev(cmd)), ARGGIVEN ); X } X else { /* value was required */ X! (VOID)get_keyword( arg_sname(cmd_prev(cmd)), keyword ); X usrerr( "value required for %s keyword", keyword ); X parse_error = pe_SYNTAX; X } X--- 310,316 ---- X BSET( arg_flags(cmd_prev(cmd)), ARGGIVEN ); X } X else { /* value was required */ X! (VOID)get_kwdname( arg_sname(cmd_prev(cmd)), keyword ); X usrerr( "value required for %s keyword", keyword ); X parse_error = pe_SYNTAX; X } X*************** X*** 366,378 **** X char * pos; X argName_t keyword, name; X X! (VOID) get_name(arg_sname(ad), name); X X if ( ARG_isPOSITIONAL(ad) ) { X sprintf( buf, "<%s>", name ); X } X else { X! (VOID) get_keyword(arg_sname(ad), keyword); X (VOID) strcpy( buf, keyword ); X pos = buf + strlen(buf); X X--- 366,378 ---- X char * pos; X argName_t keyword, name; X X! (VOID) get_argname(arg_sname(ad), name); X X if ( ARG_isPOSITIONAL(ad) ) { X sprintf( buf, "<%s>", name ); X } X else { X! (VOID) get_kwdname(arg_sname(ad), keyword); X (VOID) strcpy( buf, keyword ); X pos = buf + strlen(buf); X X*** arglist.c.OLD Mon Jun 3 11:14:22 1991 X--- arglist.c Mon May 13 13:44:24 1991 X*************** X*** 94,100 **** X ArgListHead *nl; X ArgList *nd; X X! (VOID) get_name( arg_sname(ad), argname ); X if (copyf) { X register int i; X X--- 94,100 ---- X ArgListHead *nl; X ArgList *nd; X X! (VOID) get_argname( arg_sname(ad), argname ); X if (copyf) { X register int i; X X*** argtype.c.OLD Mon Jun 3 11:14:26 1991 X--- argtype.c Mon May 13 13:44:25 1991 X*************** X*** 202,208 **** X char *cp; X argName_t argname; X X! (VOID) get_name( arg_sname(ad), argname ); X if (copyf) { X register int i; X X--- 202,208 ---- X char *cp; X argName_t argname; X X! (VOID) get_argname( arg_sname(ad), argname ); X if (copyf) { X register int i; X X*************** X*** 270,276 **** X int status = FALSE; X char c; X X! (VOID) get_name( arg_sname(ad), argname ); X if (!vp || !*vp) { X status = FALSE; X } X--- 270,276 ---- X int status = FALSE; X char c; X X! (VOID) get_argname( arg_sname(ad), argname ); X if (!vp || !*vp) { X status = FALSE; X } X*************** X*** 340,346 **** X argName_t argname; \ X num_t value; \ X \ X! (VOID) get_name( arg_sname(ad), argname ); \ X value = (num_t) strtol(vp, &vpp, 0); \ X if (*vpp != '\0') { \ X usrerr("invalid integer argument '%s' for %s", vp, argname); \ X--- 340,346 ---- X argName_t argname; \ X num_t value; \ X \ X! (VOID) get_argname( arg_sname(ad), argname ); \ X value = (num_t) strtol(vp, &vpp, 0); \ X if (*vpp != '\0') { \ X usrerr("invalid integer argument '%s' for %s", vp, argname); \ X*************** X*** 401,407 **** X argName_t argname; \ X dec_t value; \ X \ X! (VOID) get_name( arg_sname(ad), argname ); \ X value = (dec_t) strtod(vp, &vpp); \ X if (*vpp != '\0') { \ X usrerr("invalid decimal argument '%s' for %s", vp, argname); \ X--- 401,407 ---- X argName_t argname; \ X dec_t value; \ X \ X! (VOID) get_argname( arg_sname(ad), argname ); \ X value = (dec_t) strtod(vp, &vpp); \ X if (*vpp != '\0') { \ X usrerr("invalid decimal argument '%s' for %s", vp, argname); \ X*************** X*** 504,510 **** X argName_t argname; X int len; X X! (VOID) get_name( arg_sname(ad), argname ); X X /* ARGVECs are not supported for this Boolean arg-types */ X if ( ARG_isVEC(ad) ) X--- 504,510 ---- X argName_t argname; X int len; X X! (VOID) get_argname( arg_sname(ad), argname ); X X /* ARGVECs are not supported for this Boolean arg-types */ X if ( ARG_isVEC(ad) ) X*************** X*** 574,580 **** X argName_t argname; X BOOL retval; X X! (VOID) get_name( arg_sname(ad), argname ); X X /* ARGVECs are not supported for this Boolean arg-types */ X if ( ARG_isVEC(ad) ) X--- 574,580 ---- X argName_t argname; X BOOL retval; X X! (VOID) get_argname( arg_sname(ad), argname ); X X /* ARGVECs are not supported for this Boolean arg-types */ X if ( ARG_isVEC(ad) ) X*************** X*** 596,602 **** X argName_t argname; X BOOL retval; X X! (VOID) get_name( arg_sname(ad), argname ); X X /* ARGVECs are not supported for this Boolean arg-types */ X if ( ARG_isVEC(ad) ) X--- 596,602 ---- X argName_t argname; X BOOL retval; X X! (VOID) get_argname( arg_sname(ad), argname ); X X /* ARGVECs are not supported for this Boolean arg-types */ X if ( ARG_isVEC(ad) ) X*************** X*** 618,624 **** X argName_t argname; X BOOL retval; X X! (VOID) get_name( arg_sname(ad), argname ); X X /* ARGVECs are not supported for this Boolean arg-types */ X if ( ARG_isVEC(ad) ) X--- 618,624 ---- X argName_t argname; X BOOL retval; X X! (VOID) get_argname( arg_sname(ad), argname ); X X /* ARGVECs are not supported for this Boolean arg-types */ X if ( ARG_isVEC(ad) ) X*** doc/Makefile.OLD Mon Jun 3 11:14:32 1991 X--- doc/Makefile Tue May 14 14:38:21 1991 X*************** X*** 144,150 **** X clobber: clean X ${DEL} *.txt X X! spell: ${INCS} ${SRCS}} X ${SPELL} ${SPELLFLAGS} ${INCS} ${SRCS} X X print: ${MANFILES} ${INCS} X--- 144,150 ---- X clobber: clean X ${DEL} *.txt X X! spell: ${INCS} ${SRCS} X ${SPELL} ${SPELLFLAGS} ${INCS} ${SRCS} X X print: ${MANFILES} ${INCS} X*** doc/argdesc.inc.OLD Mon Jun 3 11:14:40 1991 X--- doc/argdesc.inc Sat May 11 12:17:40 1991 X*************** X*** 49,57 **** X description (the description must be separated from the long-name by X at least one whitespace character and may optionally be enclosed in X a set of balanced delimiters (such as parentheses, curly-braces, X! square-brackets, or angle-brackets). If the long-name contains any X uppercase characters, then the substring of long-name consisting of X! all uppercase characters is used as the argument keyword and the entire X! long-name is used as the name of the argument (if a value may be X! supplied). The long-name may be matched by supplying a unique prefix X! of either the argument keyword or the argument name. X--- 49,63 ---- X description (the description must be separated from the long-name by X at least one whitespace character and may optionally be enclosed in X a set of balanced delimiters (such as parentheses, curly-braces, X! square-brackets, or angle-brackets). The longname may be specifed X! in two parts: a keyword name and an argument name. The argument X! name may be separated from the keyword name by a single equal sign X! (`='). No whitespace is allowed before or after the equal sign. X! X! Alternatatively, the keyword name may be distinguished from the X! argument name by character case: if the long-name contains any X uppercase characters, then the substring of long-name consisting of X! all uppercase characters is used as the argument keyword and the X! entire long-name is used as the name of the argument (if a value may X! be supplied). The long-name may be matched by supplying a unique X! prefix of either the argument keyword or the argument name. X*** doc/parseargs.man1.OLD Mon Jun 3 11:15:49 1991 X--- doc/parseargs.man1 Sat May 11 12:20:43 1991 X*************** X*** 158,163 **** X--- 158,176 ---- X and printed in usage messages. This string may be followed by a X textual description that is enclosed in parentheses, square brackets, X curly braces, or angle brackets. X+ X+ The prompt-string may be specifed X+ in two parts: a keyword name and an argument name. The argument X+ name may be separated from the keyword name by a single equal sign X+ ('='). No whitespace is allowed before or after the equal sign. X+ X+ Alternatatively, the keyword name may be distinguished from the X+ argument name by character case: if the long-name contains any X+ uppercase characters, then the substring of long-name consisting of X+ all uppercase characters is used as the argument keyword and the X+ entire long-name is used as the name of the argument (if a value may X+ be supplied). The long-name may be matched by supplying a unique X+ prefix of either the argument keyword or the argument name. X .PP X The argument specification string must be terminated by the single string: X ``ENDOFARGS''. X*** doc/returns.inc.OLD Mon Jun 3 11:16:33 1991 X--- doc/returns.inc Mon May 20 17:36:20 1991 X*************** X*** 28,35 **** X .IP "\fIpe_\s-1NOMATCH\s+1\fP" X Unable to match the named argument. This occurs X when the argument keyword name passed to \fIparsecntl\fP (using the X! \fIpc_\s-1ARGFLAGS\s+1\fP functions code) was found in the given argdesc-array X! or in its default-list. X .\"--------------------------------------------- X .IP "\fIpe_\s-1BADMODE\s+1\fP" X Bad mode for given command in \fIparsecntl\fP. This occurs when X--- 28,35 ---- X .IP "\fIpe_\s-1NOMATCH\s+1\fP" X Unable to match the named argument. This occurs X when the argument keyword name passed to \fIparsecntl\fP (using the X! \fIpc_\s-1ARGFLAGS\s+1\fP functions code) was NOT found in the given X! argdesc-array or in its default-list. X .\"--------------------------------------------- X .IP "\fIpe_\s-1BADMODE\s+1\fP" X Bad mode for given command in \fIparsecntl\fP. This occurs when X*** ibm_args.c.OLD Mon Jun 3 11:17:03 1991 X--- ibm_args.c Mon May 13 13:44:26 1991 X*************** X*** 301,307 **** X BSET( arg_flags(ad), ARGGIVEN ); X } X else { X! (VOID) get_keyword( arg_sname(ad), name ); X usrerr("%c%s switch requires an argument", KwdPrefix, name); X arg_flags(ad) = flags; X parse_error = pe_SYNTAX; X--- 301,307 ---- X BSET( arg_flags(ad), ARGGIVEN ); X } X else { X! (VOID) get_kwdname( arg_sname(ad), name ); X usrerr("%c%s switch requires an argument", KwdPrefix, name); X arg_flags(ad) = flags; X parse_error = pe_SYNTAX; X*************** X*** 429,435 **** X BSET( arg_flags(ad), ARGGIVEN ); X } X else { X! (VOID) get_name(arg_sname(ad), name); X usrerr( "%s required for %c%c flag", X name, OptPrefix, arg_cname(ad) ); X arg_flags(ad) = flags; X--- 429,435 ---- X BSET( arg_flags(ad), ARGGIVEN ); X } X else { X! (VOID) get_argname(arg_sname(ad), name); X usrerr( "%s required for %c%c flag", X name, OptPrefix, arg_cname(ad) ); X arg_flags(ad) = flags; X*************** X*** 585,597 **** X char *pos; X argName_t name, keyword; X X! (VOID) get_name( arg_sname(ad), name ); X X if (ARG_isPOSITIONAL(ad)) { X sprintf( buf, "<%s>", name ); X } X else { X! (VOID) get_keyword( arg_sname(ad), keyword ); X X if ( isupper(arg_cname(ad)) && toupper(*keyword) == arg_cname(ad) ) { X *keyword = toupper(*keyword); X--- 585,597 ---- X char *pos; X argName_t name, keyword; X X! (VOID) get_argname( arg_sname(ad), name ); X X if (ARG_isPOSITIONAL(ad)) { X sprintf( buf, "<%s>", name ); X } X else { X! (VOID) get_kwdname( arg_sname(ad), keyword ); X X if ( isupper(arg_cname(ad)) && toupper(*keyword) == arg_cname(ad) ) { X *keyword = toupper(*keyword); X*** parseargs.awk.OLD Mon Jun 3 11:17:09 1991 X--- parseargs.awk Wed May 15 10:03:26 1991 X*************** X*** 40,46 **** X ## The following global variables may be assigned before calling parseargs: X ## X ## PROGNAME -- name of the current awk script (default= ARGV[0]) X! ## PARSEOPTS -- any extra options to pass toi parseargs() (default="-ul") X ## PARSEINPUT -- input file for parseargs(1) (default=unique-name) X ## PARSEOUTPUT -- output file for parseargs(1) (default=unique-name) X ## X--- 40,46 ---- X ## The following global variables may be assigned before calling parseargs: X ## X ## PROGNAME -- name of the current awk script (default= ARGV[0]) X! ## PARSEOPTS -- any extra options to pass to parseargs() (default="-ul") X ## PARSEINPUT -- input file for parseargs(1) (default=unique-name) X ## PARSEOUTPUT -- output file for parseargs(1) (default=unique-name) X ## X*** parseargs.c.OLD Mon Jun 3 11:17:16 1991 X--- parseargs.c Thu May 16 16:51:21 1991 X*************** X*** 1092,1098 **** X #endif X { X int i; X! register char *sh = sh_str; X X /* special case to recognize tcsh & itcsh */ X if ( strEQ( sh, "tcsh" ) ) ++sh; X--- 1092,1098 ---- X #endif X { X int i; X! register CONST char *sh = sh_str; X X /* special case to recognize tcsh & itcsh */ X if ( strEQ( sh, "tcsh" ) ) ++sh; X*** parseargs.h.OLD Mon Jun 3 11:17:24 1991 X--- parseargs.h Mon May 20 17:35:46 1991 X*************** X*** 97,103 **** X ** description (the description must be separated from the long-name by X ** at least one whitespace character and may optionally be enclosed in X ** a set of balanced delimiters (such as parentheses, curly-braces, X! ** square-brackets, or angle-brackets). If the long-name contains any X ** uppercase characters, then the substring of long-name consisting of X ** all uppercase characters is used as the argument keyword and the X ** entire long-name is used as the name of the argument (if a value may X--- 97,108 ---- X ** description (the description must be separated from the long-name by X ** at least one whitespace character and may optionally be enclosed in X ** a set of balanced delimiters (such as parentheses, curly-braces, X! ** square-brackets, or angle-brackets). The longname may be specifed X! ** in two parts: a keyword name and an argument name. The argument X! ** name may be separated from the keyword name by a single equal sign X! ** ('='). No whitespace is allowed before or after the equal sign. X! ** Alternatatively, the keyword name may be distinguished from the X! ** argument name by character case: if the long-name contains any X ** uppercase characters, then the substring of long-name consisting of X ** all uppercase characters is used as the argument keyword and the X ** entire long-name is used as the name of the argument (if a value may X*************** X*** 140,146 **** X #define pe_NOMATCH 3 X /* -- unable to match the named argument. This occurs X ** when the argument keyword name passed to parsecntl() (using the X! ** pc_ARGFLAGS functions code) was found in the given argdesc-array X ** or in its default-list. X */ X #define pe_BADMODE 4 X--- 145,151 ---- X #define pe_NOMATCH 3 X /* -- unable to match the named argument. This occurs X ** when the argument keyword name passed to parsecntl() (using the X! ** pc_ARGFLAGS function code) was NOT found in the given argdesc-array X ** or in its default-list. X */ X #define pe_BADMODE 4 X*** parseargs.pl.OLD Mon Jun 3 11:17:30 1991 X--- parseargs.pl Wed May 15 10:02:06 1991 X*************** X*** 39,45 **** X ;# The global variable PARSEARGS will contain the command-line used to X ;# invoke parseargs(1). X ;# X! ;# ARGV and ARGC may be reset, all other values are (re)set in <arr>. X ;# X ;# ^RETURN-VALUE: X ;# The exit code returned by parseargs(1). X--- 39,45 ---- X ;# The global variable PARSEARGS will contain the command-line used to X ;# invoke parseargs(1). X ;# X! ;# ARGV and (and any other variables named in <argd>) may be overwritten. X ;# X ;# ^RETURN-VALUE: X ;# The exit code returned by parseargs(1). X*** patchlevel.h.OLD Mon Jun 3 11:17:35 1991 X--- patchlevel.h Mon Jun 3 10:35:24 1991 X*************** X*** 2,7 **** X--- 2,21 ---- X ** ^FILE: patchlevel.h - current patchlevel for parseargs X ** X ** ^HISTORY: X+ ** 05/11/91 Brad Appleton <brad@ssd.csd.harris.com> X+ ** Patch06 X+ ** - parsecntl(3) now correctly handles mispelled keywords for the X+ ** pc_ARGFLAGS request (it was looping forever). X+ ** - fixed an error in the documentation (a "NOT" was omitted). X+ ** - added #ifdef SVR4 stuff to unix_man.c to print System V Release 4 X+ ** style manual pages. X+ ** - allowed "sname=aname" syntax in the ad_prompt field of an ARGDESC X+ ** in addition to the existing syntax. This new syntax allows argument X+ ** names to be be completely different from keyword names. X+ ** - changed get_name() & get_keyword to get_argname() & get_kwdname() X+ ** (respectively) in strfuncs.[ch]. Also sped up the algorithm to get X+ ** the keyword (since it no longer needs malloc). X+ ** X ** 04/25/91 Brad Appleton <brad@ssd.csd.harris.com> X ** Patch05 X ** - documented support for zsh in parseargs(1) X*************** X*** 66,72 **** X X #define VERSION 2 X #define REVISION 0 X! #define PATCHLEVEL 5 X X #ifdef __STDC__ X static const char X--- 80,86 ---- X X #define VERSION 2 X #define REVISION 0 X! #define PATCHLEVEL 6 X X #ifdef __STDC__ X static const char X*************** X*** 73,76 **** X #else X static char X #endif X! _Ident[] = "@(#)parseargs 2.0 patchlevel 5"; X--- 87,90 ---- X #else X static char X #endif X! _Ident[] = "@(#)parseargs 2.0 patchlevel 6"; X*** stest.c.OLD Mon Jun 3 11:17:47 1991 X--- stest.c Mon Jun 3 10:34:00 1991 X*************** X*** 115,121 **** X 'n', ARGREQ|ARGPOS, argStr, __ &Name, "name (name to look for)", X 's', ARGVALOPT, argStr, __ &Str, "STRing (optional string to use)", X 'g', ARGVEC, argStr, __ &Groups, "newsGROUPS (newsgroups to test)", X! 'c', ARGOPT, argInt, __ &RepCount, "REPcount (repeat count per group)", X 'd', ARGOPT, argStr, __ &DirName, "DIRname (work directory)", X 'i', ARGVEC, argInt, __ &Integers, "INTegerS (vector of numbers)", X '#', ARGHIDDEN, argBool, __ &XRated, "XratedMODE (naughty! naughty!)", X--- 115,121 ---- X 'n', ARGREQ|ARGPOS, argStr, __ &Name, "name (name to look for)", X 's', ARGVALOPT, argStr, __ &Str, "STRing (optional string to use)", X 'g', ARGVEC, argStr, __ &Groups, "newsGROUPS (newsgroups to test)", X! 'c', ARGOPT, argInt, __ &RepCount, "REP=count (repeat count per group)", X 'd', ARGOPT, argStr, __ &DirName, "DIRname (work directory)", X 'i', ARGVEC, argInt, __ &Integers, "INTegerS (vector of numbers)", X '#', ARGHIDDEN, argBool, __ &XRated, "XratedMODE (naughty! naughty!)", X*************** X*** 124,130 **** X 'y', ARGOPT, argUBool, __ &YFlag, "Yflag (unset Y flag)", X 'z', ARGOPT, argTBool, __ &ZFlag, "Zflag (toggle Z flag)", X X! 't', ARGOPT, argChar, __ &TabChar, "TABchar (field delimiter)", X 'r', ARGNOVAL, argMine, __ NULL, "raw (trigger raw-mode \ X before processing any more arguments on the command-line)", X X--- 124,130 ---- X 'y', ARGOPT, argUBool, __ &YFlag, "Yflag (unset Y flag)", X 'z', ARGOPT, argTBool, __ &ZFlag, "Zflag (toggle Z flag)", X X! 't', ARGOPT, argChar, __ &TabChar, "TAB=char (field delimiter)", X 'r', ARGNOVAL, argMine, __ NULL, "raw (trigger raw-mode \ X before processing any more arguments on the command-line)", X X*************** X*** 143,149 **** X 'n', ARGREQ|ARGPOS, argStr, __ &Name, "name (name to look for)", X 's', ARGVALOPT, argStr, __ &Str, "STRing (optional string to use)", X 'g', ARGVEC, argStr, __ &Groups, "newsGROUPS (newsgroups to test)", X! 'c', ARGOPT, argInt, __ &RepCount, "REPcount (repeat count per group)", X 'd', ARGOPT, argStr, __ &DirName, "DIRname (work directory)", X 'i', ARGVEC, argInt, __ &Integers, "INTegerS (vector of numbers)", X '#', ARGHIDDEN, argBool, __ &XRated, "XratedMODE (naughty! naughty!)", X--- 143,149 ---- X 'n', ARGREQ|ARGPOS, argStr, __ &Name, "name (name to look for)", X 's', ARGVALOPT, argStr, __ &Str, "STRing (optional string to use)", X 'g', ARGVEC, argStr, __ &Groups, "newsGROUPS (newsgroups to test)", X! 'c', ARGOPT, argInt, __ &RepCount, "REP=count (repeat count per group)", X 'd', ARGOPT, argStr, __ &DirName, "DIRname (work directory)", X 'i', ARGVEC, argInt, __ &Integers, "INTegerS (vector of numbers)", X '#', ARGHIDDEN, argBool, __ &XRated, "XratedMODE (naughty! naughty!)", X*************** X*** 152,158 **** X 'y', ARGOPT, argUBool, __ &YFlag, "Yflag (unset Y flag)", X 'z', ARGOPT, argTBool, __ &ZFlag, "Zflag (toggle Z flag)", X X! 't', ARGOPT, argChar, __ &TabChar, "TABchar (field delimiter)", X 'r', ARGNOVAL, argMine, __ NULL, "raw (trigger raw-mode \ X before processing any more arguments on the command-line)", X X--- 152,158 ---- X 'y', ARGOPT, argUBool, __ &YFlag, "Yflag (unset Y flag)", X 'z', ARGOPT, argTBool, __ &ZFlag, "Zflag (toggle Z flag)", X X! 't', ARGOPT, argChar, __ &TabChar, "TAB=char (field delimiter)", X 'r', ARGNOVAL, argMine, __ NULL, "raw (trigger raw-mode \ X before processing any more arguments on the command-line)", X X*************** X*** 258,264 **** X printf( "XRated=%d, Raw-Mode = \"%s\"\n", XRated, Mode ); X X /* to call parsecntl() to see if the optional value was supplied */ X! (VOID) parsecntl( (ARGDESC *)argd, pc_ARGFLAGS, pc_READ, "string", &flags); X X if ( BTEST(flags, ARGGIVEN) && !BTEST(flags, ARGVALGIVEN) ) { X printf("String=!No Value Given on CmdLine!\n" ); X--- 258,264 ---- X printf( "XRated=%d, Raw-Mode = \"%s\"\n", XRated, Mode ); X X /* to call parsecntl() to see if the optional value was supplied */ X! i = parsecntl( (ARGDESC *)argd, pc_ARGFLAGS, pc_READ, "string", &flags); X X if ( BTEST(flags, ARGGIVEN) && !BTEST(flags, ARGVALGIVEN) ) { X printf("String=!No Value Given on CmdLine!\n" ); X*** strfuncs.c.OLD Mon Jun 3 11:17:52 1991 X--- strfuncs.c Wed May 15 14:33:16 1991 X*************** X*** 23,30 **** X ** strtrim() -- trim leading and trailing characters in a string X ** strsplit() -- split a string up into a vector of tokens X ** strjoin() -- join a vector of tokens into a single string X! ** get_name() -- return the aname (argument-name) of an argument X! ** get_keyword() -- return the sname (keyword-name) of an argument X ** match() -- match two keywords (case insensitive) upto a unique prefix X ** basename() -- remove the leading directories (and disks) from a path X ** indent_para() -- print an indented hanging paragraph X--- 23,30 ---- X ** strtrim() -- trim leading and trailing characters in a string X ** strsplit() -- split a string up into a vector of tokens X ** strjoin() -- join a vector of tokens into a single string X! ** get_argname() -- return the aname (argument-name) of an argument X! ** get_kwdname() -- return the sname (keyword-name) of an argument X ** match() -- match two keywords (case insensitive) upto a unique prefix X ** basename() -- remove the leading directories (and disks) from a path X ** indent_para() -- print an indented hanging paragraph X*************** X*** 47,57 **** X X static CONST char WhiteSpace[] = " \t\n\r\v\f"; X X! X #if ( defined(unix_style) || defined(ibm_style) ) X # define TO_KWDCASE(c) TOLOWER(c) X #else X # define TO_KWDCASE(c) TOUPPER(c) X #endif X X X--- 47,59 ---- X X static CONST char WhiteSpace[] = " \t\n\r\v\f"; X X! #define c_ARG_SEP '=' X #if ( defined(unix_style) || defined(ibm_style) ) X # define TO_KWDCASE(c) TOLOWER(c) X+ # define KWDCASECOPY(dest,src) strlcpy(dest,src) X #else X # define TO_KWDCASE(c) TOUPPER(c) X+ # define KWDCASECOPY(dest,src) strucpy(dest,src) X #endif X X X*************** X*** 746,757 **** X X X /*************************************************************************** X! ** ^FUNCTION: get_name - return the aname (argument-name) of an argument X ** X ** ^SYNOPSIS: X */ X #ifndef __ANSI_C__ X! char *get_name( s, buf ) X /* X ** ^PARAMETERS: X */ X--- 748,759 ---- X X X /*************************************************************************** X! ** ^FUNCTION: get_argname - return the aname (argument-name) of an argument X ** X ** ^SYNOPSIS: X */ X #ifndef __ANSI_C__ X! char *get_argname( s, buf ) X /* X ** ^PARAMETERS: X */ X*************** X*** 764,770 **** X #endif /* !__ANSI_C__ */ X X /* ^DESCRIPTION: X! ** Get_name will get the full argument name of the given argument X ** (not just the keyword name) and copy it to buf. X ** X ** ^REQUIREMENTS: X--- 766,772 ---- X #endif /* !__ANSI_C__ */ X X /* ^DESCRIPTION: X! ** Get_argname will get the full argument name of the given argument X ** (not just the keyword name) and copy it to buf. X ** X ** ^REQUIREMENTS: X*************** X*** 782,803 **** X ** and copy the result in the given buffer X ***^^**********************************************************************/ X #ifdef __ANSI_C__ X! char *get_name( const char *s, char *buf ) X #endif X { X! /* <buf> must be large enough to hold the result! */ X! strlcpy(buf, s); X return buf; X } X X X /*************************************************************************** X! ** ^FUNCTION: get_keyword - get the sname (keyword name) of an argument X ** X ** ^SYNOPSIS: X */ X #ifndef __ANSI_C__ X! char *get_keyword( s, buf ) X /* X ** ^PARAMETERS: X */ X--- 784,815 ---- X ** and copy the result in the given buffer X ***^^**********************************************************************/ X #ifdef __ANSI_C__ X! char *get_argname( const char *s, char *buf ) X #endif X { X! register CONST char *p1 = s, *p2; X! X! /* see if sname and aname are separated by c_ARG_SEP X! ** <buf> must be large enough to hold the result! X! */ X! p2 = strchr( p1, c_ARG_SEP ); X! if ( p2 ) { X! strlcpy( buf, ++p2 ); X! } X! else { X! strlcpy(buf, s); X! } X return buf; X } X X X /*************************************************************************** X! ** ^FUNCTION: get_kwdname - get the sname (keyword name) of an argument X ** X ** ^SYNOPSIS: X */ X #ifndef __ANSI_C__ X! char *get_kwdname( s, buf ) X /* X ** ^PARAMETERS: X */ X*************** X*** 810,816 **** X #endif /* !__ANSI_C__ */ X X /* ^DESCRIPTION: X! ** Get_name will get the keyword name of the given argument X ** (not the entire argument name) and copy it to buf. X ** X ** The sname (keyword-name) consists only of all uppercase characters X--- 822,828 ---- X #endif /* !__ANSI_C__ */ X X /* ^DESCRIPTION: X! ** Get_kwdname will get the keyword name of the given argument X ** (not the entire argument name) and copy it to buf. X ** X ** The sname (keyword-name) consists only of all uppercase characters X*************** X*** 833,877 **** X ** and copy the result in the given buffer X ***^^**********************************************************************/ X #ifdef __ANSI_C__ X! char *get_keyword( const char *s, char *buf ) X #endif X { X! register char *p1 = (char *)s, *p2; X! register int i, len = 0; X! char *caps = CHARNULL; X X if ( !p1 ) return CHARNULL; X X! /* find size to copy (use all caps if possible) */ X! for ( p1 = (char *)s ; *p1 ; p1++ ) { X! if ( !caps && isupper( *p1 ) ) caps = p1; X! if ( caps && isupper( *p1 ) ) ++len; X } X- if ( !caps ) len = (int) (p1 - (char *)s); X X /* copy string into buffer and convert it to desired case */ X /* <buf> must be large enough to hold the result! */ X! p1 = buf; X! if ( len ) { X! if ( !caps ) { X! for ( p1 = buf, p2 = (char *)s, i = 0 ; i < len ; p1++, p2++, i++ ) { X! *p1 = TO_KWDCASE(*p2); X! } X! }/*if*/ X X- else { X- for ( p2 = caps, i = 0 ; i < len ; p2++ ) { X- if ( isupper( *p2 ) ) { X- *(p1++) = TO_KWDCASE(*p2); X- ++i; X- } X- }/*for*/ X- }/*else*/ X- }/*if*/ X- *p1 = '\0'; X- X return buf; /* return buffer address */ X } X #ifndef amiga_style X X /*************************************************************************** X--- 845,887 ---- X ** and copy the result in the given buffer X ***^^**********************************************************************/ X #ifdef __ANSI_C__ X! char *get_kwdname( const char *s, char *buf ) X #endif X { X! register char *p1 = (char *)s, *p2, ch; X! BOOL caps = FALSE; X X if ( !p1 ) return CHARNULL; X X! /* see if sname and aname are separated by c_ARG_SEP */ X! p2 = strchr( p1, c_ARG_SEP ); X! if ( p2 ) { X! ch = *p2; X! *p2 = '\0'; X! KWDCASECOPY( buf, p1 ); X! *p2 = ch; X! return buf; X } X X /* copy string into buffer and convert it to desired case */ X /* <buf> must be large enough to hold the result! */ X! for ( p2 = buf; *p1 ; p1++ ) { X! if ( isupper(*p1) ) { X! if ( !caps ) { X! caps = TRUE; X! p2 = buf; X! } X! *p2++ = TO_KWDCASE(*p1); X! } X! else if ( !caps ) { X! *p2++ = TO_KWDCASE(*p1); X! } X! } X! *p2 = '\0'; X X return buf; /* return buffer address */ X } X+ X #ifndef amiga_style X X /*************************************************************************** X*************** X*** 928,945 **** X #endif X { X int i, clen, tlen, too_short=0; X! CONST char *full_targ; X! char *up_targ; X X X! full_targ = target; X X- /* make up_targ the uppercase portion of target */ X- up_targ = strdup( full_targ ); X- (VOID) get_keyword( full_targ, up_targ ); X- X /* match at least MINLEN characters if possible */ X! tlen = strlen( up_targ ); X clen = strlen( candidate ); X if ( (tlen >= MINLEN) && (clen < MINLEN) ) { X ++too_short; /* not long enough -- no match */ X--- 938,951 ---- X #endif X { X int i, clen, tlen, too_short=0; X! char arg_targ[ 256 ], kwd_targ[ 256 ]; X X X! /* make kwd_targ the keyword portion of target */ X! (VOID) get_kwdname( target, kwd_targ ); X X /* match at least MINLEN characters if possible */ X! tlen = strlen( kwd_targ ); X clen = strlen( candidate ); X if ( (tlen >= MINLEN) && (clen < MINLEN) ) { X ++too_short; /* not long enough -- no match */ X*************** X*** 947,953 **** X X #ifdef vms_style X /* if first two chars are NO then match at least MINLEN+2 chars */ X! if ( !strnicmp(up_targ, "NO", 2) ) { X if ( (tlen >= (MINLEN + 2)) && (clen < (MINLEN + 2)) ) { X ++too_short; /* not long enough -- no match */ X } X--- 953,959 ---- X X #ifdef vms_style X /* if first two chars are NO then match at least MINLEN+2 chars */ X! if ( !strnicmp(kwd_targ, "NO", 2) ) { X if ( (tlen >= (MINLEN + 2)) && (clen < (MINLEN + 2)) ) { X ++too_short; /* not long enough -- no match */ X } X*************** X*** 954,971 **** X } X #endif X X! /* first try to match prefix of the uppercase portion */ X! i = (too_short) ? -1 : strnicmp(up_targ, candidate, clen); X X- free( up_targ ); X- X /* did we match? */ X if ( !i ) return 0; /* yes! */ X X! /* no! : compare the whole target X ** match at least MINLEN characters if possible X */ X! tlen = strlen(full_targ); X if ( (tlen >= MINLEN) && (clen < MINLEN) ) { X return -1; /* not long enough -- no match */ X } X--- 960,978 ---- X } X #endif X X! /* first try to match prefix of the keyword portion */ X! i = (too_short) ? -1 : strnicmp(kwd_targ, candidate, clen); X X /* did we match? */ X if ( !i ) return 0; /* yes! */ X X! /* no! : compare the argument portion X ** match at least MINLEN characters if possible X */ X! /* make arg_targ the argument portion of target */ X! (VOID) get_argname( target, arg_targ ); X! X! tlen = strlen(arg_targ); X if ( (tlen >= MINLEN) && (clen < MINLEN) ) { X return -1; /* not long enough -- no match */ X } X*************** X*** 972,978 **** X X #ifdef vms_style X /* if first two chars are NO then match at least MINLEN+2 chars */ X! if ( !strnicmp(full_targ, "no", 2) ) { X if ( (tlen >= (MINLEN + 2)) && (clen < (MINLEN + 2)) ) { X return -1; /* not long enough -- no match */ X } X--- 979,985 ---- X X #ifdef vms_style X /* if first two chars are NO then match at least MINLEN+2 chars */ X! if ( !strnicmp(arg_targ, "no", 2) ) { X if ( (tlen >= (MINLEN + 2)) && (clen < (MINLEN + 2)) ) { X return -1; /* not long enough -- no match */ X } X*************** X*** 979,985 **** X } X #endif X X! return strnicmp(full_targ, candidate, clen); X } X X X--- 986,992 ---- X } X #endif X X! return strnicmp(arg_targ, candidate, clen); X } X X X*************** X*** 992,1014 **** X int match( candidate, target) char *candidate, *target; X # endif X { X! int i, j; X! char c; X X! i = j = 0; X X! while ( isgraph(target[i]) || isgraph(candidate[i]) ) { X! while ( islower(target[i]) ) i++; X! if ( !isgraph(target[i]) ) { X! if ( !isgraph(candidate[j]) ) return 0; X! return stricmp(target, candidate); X! } X! c = islower( candidate[j] ) ? toupper(candidate[j]) : candidate[j]; X! if (target[i] != c) return stricmp(target, candidate); X! i++; X! j++; X! } X! return 0; X } X X #endif X--- 999,1016 ---- X int match( candidate, target) char *candidate, *target; X # endif X { X! char kwd_targ[ 256 ], arg_targ[ 256 ]; X! int rc; X X! (VOID) get_kwdname( target, kwd_targ ); X! rc = stricmp( kwd_targ, candidate ); X X! if ( rc == 0 ) return 0; X! X! (VOID) get_argname( target, arg_targ ); X! rc = stricmp( arg_targ, candidate ); X! X! return rc; X } X X #endif X*** strfuncs.h.OLD Mon Jun 3 11:18:00 1991 X--- strfuncs.h Mon May 13 13:59:31 1991 X*************** X*** 33,40 **** X EXTERN int strsplit ARGS(( char ***, char *, const char * )); X EXTERN char *strjoin ARGS(( const char **, const char * )); X X! EXTERN char *get_name ARGS(( const char *, char * )); X! EXTERN char *get_keyword ARGS(( const char *, char * )); X EXTERN int match ARGS(( const char *, const char * )); X EXTERN char *basename ARGS(( char * )); X EXTERN VOID indent_para ARGS(( FILE *, int, int, X--- 33,40 ---- X EXTERN int strsplit ARGS(( char ***, char *, const char * )); X EXTERN char *strjoin ARGS(( const char **, const char * )); X X! EXTERN char *get_argname ARGS(( const char *, char * )); X! EXTERN char *get_kwdname ARGS(( const char *, char * )); X EXTERN int match ARGS(( const char *, const char * )); X EXTERN char *basename ARGS(( char * )); X EXTERN VOID indent_para ARGS(( FILE *, int, int, X*** unix_args.c.OLD Mon Jun 3 11:18:42 1991 X--- unix_args.c Mon May 13 13:44:30 1991 X*************** X*** 215,221 **** X BSET( arg_flags(ad), ARGGIVEN ); X } X else { X! (VOID) get_keyword( arg_sname(ad), name ); X usrerr("option %c%s requires an argument", c_KWD_PFX, name); X arg_flags(ad) = flags; X parse_error = pe_SYNTAX; X--- 215,221 ---- X BSET( arg_flags(ad), ARGGIVEN ); X } X else { X! (VOID) get_kwdname( arg_sname(ad), name ); X usrerr("option %c%s requires an argument", c_KWD_PFX, name); X arg_flags(ad) = flags; X parse_error = pe_SYNTAX; X*************** X*** 339,345 **** X BSET( arg_flags(ad), ARGGIVEN ); X } X else { X! (VOID) get_name(arg_sname(ad), name); X usrerr( "%s required for %c%c flag", X name, c_OPT_PFX, arg_cname(ad) ); X arg_flags(ad) = flags; X--- 339,345 ---- X BSET( arg_flags(ad), ARGGIVEN ); X } X else { X! (VOID) get_argname(arg_sname(ad), name); X usrerr( "%s required for %c%c flag", X name, c_OPT_PFX, arg_cname(ad) ); X arg_flags(ad) = flags; X*************** X*** 505,517 **** X char *pos; X argName_t name, keyword; X X! (VOID) get_name( arg_sname(ad), name ); X X if (ARG_isPOSITIONAL(ad)) { X sprintf( buf, "<%s>", name ); X } X else { X! (VOID) get_keyword( arg_sname(ad), keyword ); X X if ( isupper(arg_cname(ad)) && toupper(*keyword) == arg_cname(ad) ) { X *keyword = toupper(*keyword); X--- 505,517 ---- X char *pos; X argName_t name, keyword; X X! (VOID) get_argname( arg_sname(ad), name ); X X if (ARG_isPOSITIONAL(ad)) { X sprintf( buf, "<%s>", name ); X } X else { X! (VOID) get_kwdname( arg_sname(ad), keyword ); X X if ( isupper(arg_cname(ad)) && toupper(*keyword) == arg_cname(ad) ) { X *keyword = toupper(*keyword); X*** unix_man.c.OLD Mon Jun 3 11:18:48 1991 X--- unix_man.c Mon May 13 13:44:31 1991 X*************** X*** 75,81 **** X char *pos; X argName_t name; X X! (VOID) get_name( arg_sname(ad), name ); X X if (ARG_isPOSITIONAL(ad)) { X if ( ARG_isMULTIVAL(ad) ) { X--- 75,81 ---- X char *pos; X argName_t name; X X! (VOID) get_argname( arg_sname(ad), name ); X X if (ARG_isPOSITIONAL(ad)) { X if ( ARG_isMULTIVAL(ad) ) { X*************** X*** 87,93 **** X--- 87,97 ---- X return strlen(name); X }/*if parm*/ X X+ #ifdef SVR4 X+ sprintf(buf, "\\f4\\-%c\\fP", arg_cname(ad)); X+ #else X sprintf(buf, "\\fB\\-%c\\fP", arg_cname(ad)); X+ #endif X pos = buf + strlen(buf); X X if ( ARG_isVALTAKEN(ad) && !ARG_isBOOLEAN(ad) && !ARG_isPSEUDOARG(ad) ) { X*************** X*** 185,191 **** X--- 189,199 ---- X printf(".if n .ll 78\n"); X X COMMENT; X+ #ifdef SVR4 X+ TH( name, 1 ); X+ #else X TH( strupr(name), 1 ); X+ #endif X X COMMENT; X SH( "NAME" ); X*************** X*** 195,201 **** X--- 203,213 ---- X SH( "SYNOPSIS" ); X X len = strlen( program ) + 1; X+ #ifdef SVR4 X+ sprintf( name, "\\f4%s\\fP", program ); X+ #else X sprintf( name, "\\fB%s\\fP", program ); X+ #endif X TP( len, name ); X X maxlen = 0; X*** useful.h.OLD Mon Jun 3 11:18:52 1991 X--- useful.h Thu May 16 16:21:26 1991 X*************** X*** 31,36 **** X--- 31,42 ---- X # endif X #endif /* _unix */ X X+ #if (defined(_UNIX) || defined(__UNIX) || defined(_UNIX_) || defined(__UNIX__)) X+ # ifndef unix X+ # define unix X+ # endif X+ #endif /* _UNIX */ X+ X /* give a stab at the dual Unix universe dilemma (UCB vs AT&T) */ X #ifdef unix X # if ( defined(_BSD) && !defined(BSD) ) X*************** X*** 84,102 **** X #endif /* unix */ X X #ifndef MSDOS X! # if ( defined(_MSDOS_) || defined(__MSDOS__) || defined(_MSDOS) ) X # define MSDOS X # endif X #endif X X #ifndef OS2 X! # if ( defined(_OS2_) || defined(__OS2__) || defined(_OS2) ) X # define OS2 X # endif X #endif X X #ifndef AmigaDOS X! # if ( defined(MANX) || defined(AZTEC) ) X # define AmigaDOS X # endif X #endif /* AmigaDOS */ X--- 90,108 ---- X #endif /* unix */ X X #ifndef MSDOS X! # if (defined(_MSDOS_)||defined(__MSDOS__)||defined(_MSDOS)||defined(__MSDOS)) X # define MSDOS X # endif X #endif X X #ifndef OS2 X! # if ( defined(_OS2_) || defined(__OS2__) || defined(_OS2) || defined(__OS2) ) X # define OS2 X # endif X #endif X X #ifndef AmigaDOS X! # if ( defined(AMIGA) || defined(MANX) || defined(AZTEC) ) X # define AmigaDOS X # endif X #endif /* AmigaDOS */ X*************** X*** 303,312 **** X # endif /* !_SIZE_T_DEFINED */ X #endif X X! #ifndef __malloc_h X! EXTERN ARBPTR malloc ARGS(( size_t )); X! EXTERN ARBPTR realloc ARGS(( ARBPTR, size_t )); X! EXTERN VOID free ARGS(( ARBPTR )); X #endif /*__malloc_h*/ X X EXTERN ARBPTR ckalloc ARGS(( size_t )); X--- 309,316 ---- X # endif /* !_SIZE_T_DEFINED */ X #endif X X! #if ( !defined(__malloc_h) && !defined(__MALLOC_H) ) X! # include <malloc.h> X #endif /*__malloc_h*/ X X EXTERN ARBPTR ckalloc ARGS(( size_t )); X*** vms_args.c.OLD Mon Jun 3 11:18:57 1991 X--- vms_args.c Mon May 13 13:44:32 1991 X*************** X*** 683,689 **** X BSET( arg_flags(ad), ARGVALGIVEN ); X } X else { X! (VOID) get_keyword( arg_sname(ad), keyword ); X usrerr("qualifier %s requires an argument", keyword); X arg_flags(ad) = flags; X parse_error = pe_SYNTAX; X--- 683,689 ---- X BSET( arg_flags(ad), ARGVALGIVEN ); X } X else { X! (VOID) get_kwdname( arg_sname(ad), keyword ); X usrerr("qualifier %s requires an argument", keyword); X arg_flags(ad) = flags; X parse_error = pe_SYNTAX; X*************** X*** 849,861 **** X char * pos; X argName_t keyword, name; X X! (VOID) get_name( arg_sname(ad), name ); X X if (ARG_isPOSITIONAL(ad)) { X sprintf( buf, "<%s>", name ); X } X else { X! (VOID) get_keyword( arg_sname(ad), keyword ); X sprintf( buf, "%c%s", *s_KWD_PFX, keyword ); X pos = buf + strlen(buf); X X--- 849,861 ---- X char * pos; X argName_t keyword, name; X X! (VOID) get_argname( arg_sname(ad), name ); X X if (ARG_isPOSITIONAL(ad)) { X sprintf( buf, "<%s>", name ); X } X else { X! (VOID) get_kwdname( arg_sname(ad), keyword ); X sprintf( buf, "%c%s", *s_KWD_PFX, keyword ); X pos = buf + strlen(buf); X X*************** X*** 965,971 **** X X X if ( ARG_isMULTIVAL(ad) ) { X! (VOID) get_name( arg_sname(ad), name ); X strcat(buf, "[,<"); X strcat(buf, name); X strcat(buf, ">...]"); X--- 965,971 ---- X X X if ( ARG_isMULTIVAL(ad) ) { X! (VOID) get_argname( arg_sname(ad), name ); X strcat(buf, "[,<"); X strcat(buf, name); X strcat(buf, ">...]"); X*** xparse.c.OLD Mon Jun 3 11:19:13 1991 X--- xparse.c Mon Jun 3 10:29:49 1991 X*************** X*** 857,872 **** X if ( ARG_isREQUIRED(ad) && !ARG_isGIVEN(ad) ) { X /* still didn't get a value... sigh */ X if ( ARG_isPOSITIONAL(ad) ) { X! (VOID) get_name( arg_sname(ad), s ); X usrerr("%s required", s); X } X else { X #ifdef amiga_style X! (VOID) get_keyword( arg_sname(ad), s ); X usrerr("argument required for %s keyword", s); X #endif X #ifdef ibm_style X! (VOID) get_name( arg_sname(ad), s ); X { X char c, *pfx = getenv( "SWITCHAR" ); X c = ( pfx && *pfx ) ? *pfx : '/'; X--- 857,872 ---- X if ( ARG_isREQUIRED(ad) && !ARG_isGIVEN(ad) ) { X /* still didn't get a value... sigh */ X if ( ARG_isPOSITIONAL(ad) ) { X! (VOID) get_argname( arg_sname(ad), s ); X usrerr("%s required", s); X } X else { X #ifdef amiga_style X! (VOID) get_kwdname( arg_sname(ad), s ); X usrerr("argument required for %s keyword", s); X #endif X #ifdef ibm_style X! (VOID) get_argname( arg_sname(ad), s ); X { X char c, *pfx = getenv( "SWITCHAR" ); X c = ( pfx && *pfx ) ? *pfx : '/'; X*************** X*** 874,884 **** X } X #endif X #ifdef unix_style X! (VOID) get_name( arg_sname(ad), s ); X usrerr("%s required for %c%c flag", s, c_OPT_PFX, arg_cname(ad)); X #endif X #ifdef vms_style X! (VOID) get_keyword( arg_sname(ad), s ); X usrerr("value required for %c%s qualifier", *s_KWD_PFX, s); X #endif X } X--- 874,884 ---- X } X #endif X #ifdef unix_style X! (VOID) get_argname( arg_sname(ad), s ); X usrerr("%s required for %c%c flag", s, c_OPT_PFX, arg_cname(ad)); X #endif X #ifdef vms_style X! (VOID) get_kwdname( arg_sname(ad), s ); X usrerr("value required for %c%s qualifier", *s_KWD_PFX, s); X #endif X } X*************** X*** 1689,1701 **** X int *argflags; X BOOL is_match = FALSE; X X! for (args = argd; !is_match && args; args = cmd_defargs(argd) ) { X! for (ad = ARG_FIRST(args); !ARG_isEND(ad); ARG_ADVANCE(ad) ) { X! if (arg_type(ad) == argDummy) continue; X if ( match(name, arg_sname(ad)) == 0 ) { X is_match = TRUE; X break; X! } X }/*foreach arg*/ X }/*foreach argdesc*/ X X--- 1689,1702 ---- X int *argflags; X BOOL is_match = FALSE; X X! for (args = argd ; args && !is_match ; args = cmd_defargs(args)) { X! for (ad = ARG_FIRST(args) ; !ARG_isEND(ad) ; ARG_ADVANCE(ad)) { X! if ( arg_type(ad) == argDummy ) continue; X! X if ( match(name, arg_sname(ad)) == 0 ) { X is_match = TRUE; X break; X! }/*if*/ X }/*foreach arg*/ X }/*foreach argdesc*/ X END_OF_FILE if test 50339 -ne `wc -c <'PATCH'`; then echo shar: \"'PATCH'\" unpacked with wrong size! fi # end of 'PATCH' fi echo shar: End of archive. exit 0 exit 0 # Just in case... -- Kent Landfield INTERNET: kent@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@uunet.uu.net.