#endif
_EOExport_;
+#ifdef CLKLDISC
flag = {
name = magic2;
value = a;
Or maybe the kill or maybe something else.
_EndOfDoc_;
};
+#endif CLKLDISC
+#ifdef STREAM
extern = <<- _EOExtern_
#ifdef STREAM
extern char magic[32];
}
_EOCode_;
};
+#endif
include = 'extern int speed;';
flag = {
endif
libopts_la_SOURCES = libopts.c
libopts_la_CPPFLAGS = -I$(top_srcdir)
-libopts_la_LDFLAGS = -version-info 28:0:3
+libopts_la_LDFLAGS = -version-info 29:0:4
EXTRA_DIST = \
COPYING.lgpl COPYING.mbsd MakeDefs.inc \
README autoopts/options.h autoopts/usage-txt.h \
LICENSING:
-This material is copyright 1993-2006 by Bruce Korb.
+This material is copyright 1993-2007 by Bruce Korb.
You are licensed to use this under the terms of either
the GNU Lesser General Public License (see: COPYING.lgpl), or,
at your option, the modified Berkeley Software Distribution
/*
- * $Id: autoopts.c,v 4.23 2007/02/13 19:43:46 bkorb Exp $
- * Time-stamp: "2007-02-13 11:26:59 bkorb"
+ * $Id: autoopts.c,v 4.25 2007/04/15 19:01:18 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:10:40 bkorb"
*
* This file contains all of the routines that must be linked into
* an executable to use the generated option processing. The optional
static char const zNil[] = "";
-#define SKIP_RC_FILES(po) \
- DISABLED_OPT(&((po)->pOptDesc[ (po)->specOptIdx.save_opts+1]))
-
/* = = = START-STATIC-FORWARD = = = */
/* static forward declarations maintained by :mkfwd */
static tSuccess
case TOPT_DEFAULT:
fputs( "AutoOpts lib error: defaulted to option with optional arg\n",
stderr );
- exit( EXIT_FAILURE );
+ exit( EX_SOFTWARE );
}
/*
static tSuccess
doPresets( tOptions* pOpts )
{
+ tOptDesc * pOD = NULL;
+
if (! SUCCESSFUL( doImmediateOpts( pOpts )))
return FAILURE;
+ /*
+ * IF this option set has a --save-opts option, then it also
+ * has a --load-opts option. See if a command line option has disabled
+ * option presetting.
+ */
+ if (pOpts->specOptIdx.save_opts != 0) {
+ pOD = pOpts->pOptDesc + pOpts->specOptIdx.save_opts + 1;
+ if (DISABLED_OPT(pOD))
+ return SUCCESS;
+ }
+
/*
* Until we return from this procedure, disable non-presettable opts
*/
* IF there are no config files,
* THEN do any environment presets and leave.
*/
- if ( (pOpts->papzHomeList == NULL)
- || SKIP_RC_FILES(pOpts) ) {
+ if (pOpts->papzHomeList == NULL) {
doEnvPresets( pOpts, ENV_ALL );
}
else {
doEnvPresets( pOpts, ENV_IMM );
- internalFileLoad( pOpts );
+
+ /*
+ * Check to see if environment variables have disabled presetting.
+ */
+ if ((pOD != NULL) && ! DISABLED_OPT(pOD))
+ internalFileLoad( pOpts );
+
+ /*
+ * ${PROGRAM_LOAD_OPTS} value of "no" cannot disable other environment
+ * variable options. Only the loading of .rc files.
+ */
doEnvPresets( pOpts, ENV_NON_IMM );
}
pOpts->fOptSet &= ~OPTPROC_PRESETTING;
char** argVect )
{
if (! SUCCESSFUL( validateOptionsStruct( pOpts, argVect[0] )))
- exit( EXIT_FAILURE );
+ exit( EX_SOFTWARE );
/*
* Establish the real program name, the program full path,
/*
- * Time-stamp: "2007-01-17 16:37:34 bkorb"
+ * Time-stamp: "2007-04-15 09:59:39 bkorb"
*
- * autoopts.h $Id: autoopts.h,v 4.22 2007/02/04 17:44:12 bkorb Exp $
+ * autoopts.h $Id: autoopts.h,v 4.23 2007/04/15 19:01:18 bkorb Exp $
* Time-stamp: "2005-02-14 05:59:50 bkorb"
*
* This file defines all the global structures and special values
#include "compat/compat.h"
-#define AO_NAME_LIMIT 127
-#define AO_NAME_SIZE ((size_t)(AO_NAME_LIMIT + 1))
+#define AO_NAME_LIMIT 127
+#define AO_NAME_SIZE ((size_t)(AO_NAME_LIMIT + 1))
#ifndef AG_PATH_MAX
# ifdef PATH_MAX
-# define AG_PATH_MAX ((size_t)PATH_MAX)
+# define AG_PATH_MAX ((size_t)PATH_MAX)
# else
-# define AG_PATH_MAX ((size_t)4096)
+# define AG_PATH_MAX ((size_t)4096)
# endif
#else
# if defined(PATH_MAX) && (PATH_MAX > MAXPATHLEN)
# undef AG_PATH_MAX
-# define AG_PATH_MAX ((size_t)PATH_MAX)
+# define AG_PATH_MAX ((size_t)PATH_MAX)
# endif
#endif
#define EXPORT
#if defined(_WIN32) && !defined(__CYGWIN__)
-# define DIRCH '\\'
+# define DIRCH '\\'
#else
-# define DIRCH '/'
+# define DIRCH '/'
+#endif
+
+#ifndef EX_NOINPUT
+# define EX_NOINPUT 66
+#endif
+#ifndef EX_SOFTWARE
+# define EX_SOFTWARE 70
+#endif
+#ifndef EX_CONFIG
+# define EX_CONFIG 78
#endif
/*
* Convert the number to a list usable in a printf call
*/
-#define NUM_TO_VER(n) ((n) >> 12), ((n) >> 7) & 0x001F, (n) & 0x007F
+#define NUM_TO_VER(n) ((n) >> 12), ((n) >> 7) & 0x001F, (n) & 0x007F
#define NAMED_OPTS(po) \
(((po)->fOptSet & (OPTPROC_SHORTOPT | OPTPROC_LONGOPT)) == 0)
#define SKIP_OPT(p) (((p)->fOptState & (OPTST_DOCUMENT|OPTST_OMITTED)) != 0)
typedef int tDirection;
-#define DIRECTION_PRESET -1
-#define DIRECTION_PROCESS 1
-#define DIRECTION_CALLED 0
+#define DIRECTION_PRESET -1
+#define DIRECTION_PROCESS 1
+#define DIRECTION_CALLED 0
-#define PROCESSING(d) ((d)>0)
-#define PRESETTING(d) ((d)<0)
+#define PROCESSING(d) ((d)>0)
+#define PRESETTING(d) ((d)<0)
-#define ISNAMECHAR( c ) (isalnum(c) || ((c) == '_') || ((c) == '-'))
+#define ISNAMECHAR( c ) (isalnum(c) || ((c) == '_') || ((c) == '-'))
/*
* Procedure success codes
#undef FAILED
#undef HADGLITCH
-#define SUCCESS ((tSuccess) 0)
-#define FAILURE ((tSuccess)-1)
-#define PROBLEM ((tSuccess) 1)
+#define SUCCESS ((tSuccess) 0)
+#define FAILURE ((tSuccess)-1)
+#define PROBLEM ((tSuccess) 1)
typedef int tSuccess;
-#define SUCCEEDED( p ) ((p) == SUCCESS)
-#define SUCCESSFUL( p ) SUCCEEDED( p )
-#define FAILED( p ) ((p) < SUCCESS)
-#define HADGLITCH( p ) ((p) > SUCCESS)
+#define SUCCEEDED( p ) ((p) == SUCCESS)
+#define SUCCESSFUL( p ) SUCCEEDED( p )
+#define FAILED( p ) ((p) < SUCCESS)
+#define HADGLITCH( p ) ((p) > SUCCESS)
/*
* When loading a line (or block) of text as an option, the value can
tCC* pzOptFmt;
} arg_types_t;
-#define AGALOC( c, w ) ao_malloc((size_t)c)
-#define AGREALOC( p, c, w ) ao_realloc((void*)p, (size_t)c)
-#define AGFREE( p ) ao_free((void*)p)
-#define AGDUPSTR( p, s, w ) (p = ao_strdup(s))
+#define AGALOC( c, w ) ao_malloc((size_t)c)
+#define AGREALOC( p, c, w ) ao_realloc((void*)p, (size_t)c)
+#define AGFREE( p ) ao_free((void*)p)
+#define AGDUPSTR( p, s, w ) (p = ao_strdup(s))
static void *
ao_malloc( size_t sz );
# include <sys/mman.h>
#else
# ifndef PROT_READ
-# define PROT_READ 0x01
+# define PROT_READ 0x01
# endif
# ifndef PROT_WRITE
-# define PROT_WRITE 0x02
+# define PROT_WRITE 0x02
# endif
# ifndef MAP_SHARED
-# define MAP_SHARED 0x01
+# define MAP_SHARED 0x01
# endif
# ifndef MAP_PRIVATE
-# define MAP_PRIVATE 0x02
+# define MAP_PRIVATE 0x02
# endif
#endif
#ifndef MAP_FAILED
-# define MAP_FAILED ((void*)-1)
+# define MAP_FAILED ((void*)-1)
#endif
#ifndef _SC_PAGESIZE
# ifdef _SC_PAGE_SIZE
-# define _SC_PAGESIZE _SC_PAGE_SIZE
+# define _SC_PAGESIZE _SC_PAGE_SIZE
# endif
#endif
*
* DO NOT EDIT THIS FILE (options.h)
*
- * It has been AutoGen-ed Saturday February 17, 2007 at 12:49:35 PM PST
+ * It has been AutoGen-ed Saturday May 5, 2007 at 12:02:34 PM PDT
* From the definitions funcs.def
* and the template file options_h
*
# include <sys/limits.h>
#endif /* HAVE_LIMITS/SYS_LIMITS_H */
+#if defined(HAVE_SYSEXITS_H)
+# include <sysexits.h>
+#endif /* HAVE_SYSEXITS_H */
+
+#ifndef EX_USAGE
+# define EX_USAGE 64
+#endif
+
/*
* PUBLIC DEFINES
*
* values for "opt_name" are available.
*/
-#define OPTIONS_STRUCT_VERSION 114688
-#define OPTIONS_VERSION_STRING "28:0:3"
+#define OPTIONS_STRUCT_VERSION 118784
+#define OPTIONS_VERSION_STRING "29:0:4"
#define OPTIONS_MINIMUM_VERSION 102400
#define OPTIONS_MIN_VER_STRING "25:0:0"
* Bits in the fOptState option descriptor field.
*/
typedef enum {
- OPTST_SET_ID = 0, /* Set via the "SET_OPT()" macro */
- OPTST_PRESET_ID = 1, /* Set via an RC/INI file */
- OPTST_DEFINED_ID = 2, /* Set via a command line option */
- OPTST_EQUIVALENCE_ID = 4, /* selected by equiv'ed option */
- OPTST_DISABLED_ID = 5, /* option is in disabled state */
- OPTST_ALLOC_ARG_ID = 6, /* pzOptArg was allocated */
- OPTST_NO_INIT_ID = 8, /* option cannot be preset */
- OPTST_NUMBER_OPT_ID = 9, /* opt value (flag) is any digit */
- OPTST_STACKED_ID = 10, /* opt uses optionStackArg proc */
- OPTST_INITENABLED_ID = 11, /* option defaults to enabled */
- OPTST_ARG_TYPE_1_ID = 12, /* bit 1 of arg type enum */
- OPTST_ARG_TYPE_2_ID = 13, /* bit 2 of arg type enum */
- OPTST_ARG_TYPE_3_ID = 14, /* bit 3 of arg type enum */
- OPTST_ARG_TYPE_4_ID = 15, /* bit 4 of arg type enum */
- OPTST_ARG_OPTIONAL_ID = 16, /* the option arg not required */
- OPTST_IMM_ID = 17, /* process opt on first pass */
- OPTST_DISABLE_IMM_ID = 18, /* process disablement immed. */
- OPTST_OMITTED_ID = 19, /* compiled out of program */
- OPTST_MUST_SET_ID = 20, /* must be set or pre-set */
- OPTST_DOCUMENT_ID = 21, /* opt is for doc only */
- OPTST_TWICE_ID = 22, /* process opt twice - imm + reg */
- OPTST_DISABLE_TWICE_ID = 23 /* process disabled option twice */
+ OPTST_SET_ID = 0, /* Set via the "SET_OPT()" macro */
+ OPTST_PRESET_ID = 1, /* Set via an RC/INI file */
+ OPTST_DEFINED_ID = 2, /* Set via a command line option */
+ OPTST_EQUIVALENCE_ID = 4, /* selected by equiv'ed option */
+ OPTST_DISABLED_ID = 5, /* option is in disabled state */
+ OPTST_ALLOC_ARG_ID = 6, /* pzOptArg was allocated */
+ OPTST_NO_INIT_ID = 8, /* option cannot be preset */
+ OPTST_NUMBER_OPT_ID = 9, /* opt value (flag) is any digit */
+ OPTST_STACKED_ID = 10, /* opt uses optionStackArg proc */
+ OPTST_INITENABLED_ID = 11, /* option defaults to enabled */
+ OPTST_ARG_TYPE_1_ID = 12, /* bit 1 of arg type enum */
+ OPTST_ARG_TYPE_2_ID = 13, /* bit 2 of arg type enum */
+ OPTST_ARG_TYPE_3_ID = 14, /* bit 3 of arg type enum */
+ OPTST_ARG_TYPE_4_ID = 15, /* bit 4 of arg type enum */
+ OPTST_ARG_OPTIONAL_ID = 16, /* the option arg not required */
+ OPTST_IMM_ID = 17, /* process opt on first pass */
+ OPTST_DISABLE_IMM_ID = 18, /* process disablement immed. */
+ OPTST_OMITTED_ID = 19, /* compiled out of program */
+ OPTST_MUST_SET_ID = 20, /* must be set or pre-set */
+ OPTST_DOCUMENT_ID = 21, /* opt is for doc only */
+ OPTST_TWICE_ID = 22, /* process opt twice - imm + reg */
+ OPTST_DISABLE_TWICE_ID = 23 /* process disabled option twice */
} opt_state_enum_t;
#define OPTST_INIT 0U
OPTST_ARG_TYPE_3 | \
OPTST_ARG_TYPE_4 )
+#ifdef NO_OPTIONAL_OPT_ARGS
+# undef OPTST_ARG_OPTIONAL
+# define OPTST_ARG_OPTIONAL 0
+#endif
+
#define OPTST_PERSISTENT_MASK (~OPTST_MUTABLE_MASK)
#define SELECTED_OPT( pod ) ((pod)->fOptState & OPTST_SELECTED_MASK)
* Define the processing state flags
*/
typedef enum {
- OPTPROC_LONGOPT_ID = 0, /* Process long style options */
- OPTPROC_SHORTOPT_ID = 1, /* Process short style "flags" */
- OPTPROC_ERRSTOP_ID = 2, /* Stop on argument errors */
- OPTPROC_DISABLEDOPT_ID = 3, /* Current option is disabled */
- OPTPROC_NO_REQ_OPT_ID = 4, /* no options are required */
- OPTPROC_NUM_OPT_ID = 5, /* there is a number option */
- OPTPROC_INITDONE_ID = 6, /* have initializations been done? */
- OPTPROC_NEGATIONS_ID = 7, /* any negation options? */
- OPTPROC_ENVIRON_ID = 8, /* check environment? */
- OPTPROC_NO_ARGS_ID = 9, /* Disallow remaining arguments */
- OPTPROC_ARGS_REQ_ID = 10, /* Require arguments after options */
- OPTPROC_REORDER_ID = 11, /* reorder operands after options */
- OPTPROC_GNUUSAGE_ID = 12, /* emit usage in GNU style */
- OPTPROC_TRANSLATE_ID = 13, /* Translate strings in tOptions */
- OPTPROC_HAS_IMMED_ID = 14, /* program defines immed options */
- OPTPROC_PRESETTING_ID = 19 /* opt processing in preset state */
+ OPTPROC_LONGOPT_ID = 0, /* Process long style options */
+ OPTPROC_SHORTOPT_ID = 1, /* Process short style "flags" */
+ OPTPROC_ERRSTOP_ID = 2, /* Stop on argument errors */
+ OPTPROC_DISABLEDOPT_ID = 3, /* Current option is disabled */
+ OPTPROC_NO_REQ_OPT_ID = 4, /* no options are required */
+ OPTPROC_NUM_OPT_ID = 5, /* there is a number option */
+ OPTPROC_INITDONE_ID = 6, /* have initializations been done? */
+ OPTPROC_NEGATIONS_ID = 7, /* any negation options? */
+ OPTPROC_ENVIRON_ID = 8, /* check environment? */
+ OPTPROC_NO_ARGS_ID = 9, /* Disallow remaining arguments */
+ OPTPROC_ARGS_REQ_ID = 10, /* Require arguments after options */
+ OPTPROC_REORDER_ID = 11, /* reorder operands after options */
+ OPTPROC_GNUUSAGE_ID = 12, /* emit usage in GNU style */
+ OPTPROC_TRANSLATE_ID = 13, /* Translate strings in tOptions */
+ OPTPROC_HAS_IMMED_ID = 14, /* program defines immed options */
+ OPTPROC_PRESETTING_ID = 19 /* opt processing in preset state */
} optproc_state_enum_t;
#define OPTPROC_NONE 0U
typedef void (tOptionXlateProc)(void);
struct options {
- const int structVersion;
+ int const structVersion;
int origArgCt;
char** origArgVect;
unsigned int fOptSet;
char const* const pzCopyright;
char const* const pzCopyNotice;
char const* const pzFullVersion;
- char const* const* papzHomeList;
+ char const* const* const papzHomeList;
char const* const pzUsageTitle;
char const* const pzExplain;
char const* const pzDetail;
tOptionXlateProc* pTransProc;
tOptSpecIndex specOptIdx;
- const int optCt;
- const int presetOptCt;
+ int const optCt;
+ int const presetOptCt;
};
/*
extern const tOptionValue* configFileLoad( char const* );
-/* From: configfile.c line 880
+/* From: configfile.c line 883
*
* optionFileLoad - Load the locatable config files, in order
*
extern void optionOnlyUsage( tOptions*, int );
-/* From: autoopts.c line 993
+/* From: autoopts.c line 1012
*
* optionProcess - this is the main option processing routine
*
*
* DO NOT EDIT THIS FILE (usage-txt.h)
*
- * It has been AutoGen-ed Saturday February 17, 2007 at 12:49:33 PM PST
+ * It has been AutoGen-ed Saturday May 5, 2007 at 12:02:33 PM PDT
* From the definitions usage-txt.def
* and the template file usage-txt.tpl
*
* Author: Gary V Vaughan <gvaughan@oranda.demon.co.uk>
* Created: Mon Jun 30 15:54:46 1997
*
- * $Id: compat.h,v 4.15 2007/02/04 22:17:39 bkorb Exp $
+ * $Id: compat.h,v 4.16 2007/04/27 01:10:47 bkorb Exp $
*/
#ifndef COMPAT_H_GUARD
#define COMPAT_H_GUARD 1
# define MAXPATHLEN PATH_MAX
#endif /* !MAXPATHLEN && PATH_MAX */
+#if !defined (MAXPATHLEN) && defined(_MAX_PATH)
+# define PATH_MAX _MAX_PATH
+# define MAXPATHLEN _MAX_PATH
+#endif
+
#if !defined (MAXPATHLEN)
# define MAXPATHLEN ((size_t)4096)
#endif /* MAXPATHLEN */
/*
* Time-stamp: "2006-10-14 14:55:09 bkorb"
* by: bkorb
- * Last Committed: $Date: 2006/10/14 22:39:49 $
+ * Last Committed: $Date: 2007/04/28 22:19:23 $
*/
#ifndef WINDOWS_CONFIG_HACKERY
#define WINDOWS_CONFIG_HACKERY 1
/* Include Windows headers */
#include <windows.h>
#include <winsock2.h>
+#include <limits.h>
/*
* Compatibility declarations for Windows, assuming SYS_WINNT
/*
- * $Id: configfile.c,v 1.20 2007/02/04 17:44:12 bkorb Exp $
- * Time-stamp: "2007-01-13 12:49:10 bkorb"
+ * $Id: configfile.c,v 1.21 2007/04/15 19:01:18 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:22:46 bkorb"
*
* configuration/rc/ini file handling.
*/
* IF we are now to skip config files AND we are presetting,
* THEN change direction. We must go the other way.
*/
- if (SKIP_RC_FILES(pOpts) && PRESETTING(inc)) {
- idx -= inc; /* go back and reprocess current file */
- inc = DIRECTION_PROCESS;
+ {
+ tOptDesc * pOD = pOpts->pOptDesc + pOpts->specOptIdx.save_opts+1;
+ if (DISABLED_OPT(pOD) && PRESETTING(inc)) {
+ idx -= inc; /* go back and reprocess current file */
+ inc = DIRECTION_PROCESS;
+ }
}
- } /* For every path in the home list, ... */
+ } /* twice for every path in the home list, ... */
}
optionLoadOpt( tOptions* pOpts, tOptDesc* pOptDesc )
{
/*
- * IF the option is not being disabled,
- * THEN load the file. There must be a file.
- * (If it is being disabled, then the disablement processing
- * already took place. It must be done to suppress preloading
- * of ini/rc files.)
+ * IF the option is not being disabled, THEN load the file. There must
+ * be a file. (If it is being disabled, then the disablement processing
+ * already took place. It must be done to suppress preloading of ini/rc
+ * files.)
*/
if (! DISABLED_OPT( pOptDesc )) {
struct stat sb;
fprintf( stderr, zFSErrOptLoad, errno, strerror( errno ),
pOptDesc->optArg.argString );
- (*pOpts->pUsageProc)( pOpts, EXIT_FAILURE );
+ exit(EX_NOINPUT);
/* NOT REACHED */
}
return;
fprintf( stderr, zNotFile, pOptDesc->optArg.argString );
- (*pOpts->pUsageProc)( pOpts, EXIT_FAILURE );
+ exit(EX_NOINPUT);
/* NOT REACHED */
}
{
if (pOpts == NULL) {
fputs( zAO_Bad, stderr );
- exit( EXIT_FAILURE );
+ exit( EX_CONFIG );
}
/*
/*
- * $Id: environment.c,v 4.12 2007/02/04 17:44:12 bkorb Exp $
- * Time-stamp: "2007-01-13 10:02:07 bkorb"
+ * $Id: environment.c,v 4.13 2007/04/15 19:01:18 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:50:35 bkorb"
*
* This file contains all of the routines that must be linked into
* an executable to use the generated option processing. The optional
/* = = = START-STATIC-FORWARD = = = */
/* static forward declarations maintained by :mkfwd */
+static void
+checkEnvOpt(tOptState * os, char * env_name,
+ tOptions* pOpts, teEnvPresetType type);
/* = = = END-STATIC-FORWARD = = = */
/*
pOpts->fOptSet = sv_flag;
}
+static void
+checkEnvOpt(tOptState * os, char * env_name,
+ tOptions* pOpts, teEnvPresetType type)
+{
+ os->pzOptArg = getenv( env_name );
+ if (os->pzOptArg == NULL)
+ return;
+
+ os->flags = OPTST_PRESET | OPTST_ALLOC_ARG | os->pOD->fOptState;
+ os->optType = TOPT_UNDEFINED;
+
+ if ( (os->pOD->pz_DisablePfx != NULL)
+ && (streqvcmp( os->pzOptArg, os->pOD->pz_DisablePfx ) == 0)) {
+ os->flags |= OPTST_DISABLED;
+ os->pzOptArg = NULL;
+ }
+
+ switch (type) {
+ case ENV_IMM:
+ /*
+ * Process only immediate actions
+ */
+ if (DO_IMMEDIATELY(os->flags))
+ break;
+ return;
+
+ case ENV_NON_IMM:
+ /*
+ * Process only NON immediate actions
+ */
+ if (DO_NORMALLY(os->flags) || DO_SECOND_TIME(os->flags))
+ break;
+ return;
+
+ default: /* process everything */
+ break;
+ }
+
+ /*
+ * Make sure the option value string is persistent and consistent.
+ *
+ * The interpretation of the option value depends
+ * on the type of value argument the option takes
+ */
+ if (os->pzOptArg != NULL) {
+ if (OPTST_GET_ARGTYPE(os->pOD->fOptState) == OPARG_TYPE_NONE) {
+ os->pzOptArg = NULL;
+ } else if ( (os->pOD->fOptState & OPTST_ARG_OPTIONAL)
+ && (*os->pzOptArg == NUL)) {
+ os->pzOptArg = NULL;
+ } else if (*os->pzOptArg == NUL) {
+ os->pzOptArg = zNil;
+ } else {
+ AGDUPSTR( os->pzOptArg, os->pzOptArg, "option argument" );
+ os->flags |= OPTST_ALLOC_ARG;
+ }
+ }
+
+ handleOption( pOpts, os );
+}
/*
* doEnvPresets - check for preset values from the envrionment
* Set up the option state
*/
strcpy( pzFlagName, st.pOD->pz_NAME );
- st.pzOptArg = getenv( zEnvName );
- if (st.pzOptArg == NULL)
- continue;
- st.flags = OPTST_PRESET | OPTST_ALLOC_ARG | st.pOD->fOptState;
- st.optType = TOPT_UNDEFINED;
-
- if ( (st.pOD->pz_DisablePfx != NULL)
- && (streqvcmp( st.pzOptArg, st.pOD->pz_DisablePfx ) == 0)) {
- st.flags |= OPTST_DISABLED;
- st.pzOptArg = NULL;
- }
-
- switch (type) {
- case ENV_IMM:
- /*
- * Process only immediate actions
- */
- if (DO_IMMEDIATELY(st.flags))
- break;
- continue;
-
- case ENV_NON_IMM:
- /*
- * Process only NON immediate actions
- */
- if (DO_NORMALLY(st.flags) || DO_SECOND_TIME(st.flags))
- break;
- continue;
-
- default: /* process everything */
- break;
- }
-
- /*
- * Make sure the option value string is persistent and consistent.
- *
- * The interpretation of the option value depends
- * on the type of value argument the option takes
- */
- if (st.pzOptArg != NULL) {
- if (OPTST_GET_ARGTYPE(st.pOD->fOptState) == OPARG_TYPE_NONE) {
- st.pzOptArg = NULL;
- } else if ( (st.pOD->fOptState & OPTST_ARG_OPTIONAL)
- && (*st.pzOptArg == NUL)) {
- st.pzOptArg = NULL;
- } else if (*st.pzOptArg == NUL) {
- st.pzOptArg = zNil;
- } else {
- AGDUPSTR( st.pzOptArg, st.pzOptArg, "option argument" );
- st.flags |= OPTST_ALLOC_ARG;
- }
- }
+ checkEnvOpt(&st, zEnvName, pOpts, type);
+ }
- handleOption( pOpts, &st );
+ /*
+ * Special handling for ${PROGNAME_LOAD_OPTS}
+ */
+ if (pOpts->specOptIdx.save_opts != 0) {
+ st.pOD = pOpts->pOptDesc + pOpts->specOptIdx.save_opts + 1;
+ strcpy( pzFlagName, st.pOD->pz_NAME );
+ checkEnvOpt(&st, zEnvName, pOpts, type);
}
}
*
* DO NOT EDIT THIS FILE (genshell.c)
*
- * It has been AutoGen-ed Saturday February 17, 2007 at 12:49:35 PM PST
+ * It has been AutoGen-ed Saturday May 5, 2007 at 12:02:35 PM PDT
* From the definitions genshell.def
* and the template file options
*
- * Generated from AutoOpts 28:0:3 templates.
+ * Generated from AutoOpts 29:0:4 templates.
*/
/*
*
* This source file is copyrighted and licensed under the following terms:
*
- * genshellopt copyright 1999-2006 Bruce Korb - all rights reserved
+ * genshellopt copyright 1999-2007 Bruce Korb - all rights reserved
*
* genshellopt is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
extern "C" {
#endif
tSCC zCopyright[] =
- "genshellopt copyright (c) 1999-2006 Bruce Korb, all rights reserved";
+ "genshellopt copyright (c) 1999-2007 Bruce Korb, all rights reserved";
tSCC zCopyrightNotice[] =
"genshellopt is free software; you can redistribute it and/or\n\
modify it under the terms of the GNU Lesser General Public\n\
/* desc, NAME, name */ zShellText, zShell_NAME, zShell_Name,
/* disablement strs */ zNotShell_Name, zNotShell_Pfx },
+#ifdef NO_OPTIONAL_OPT_ARGS
+# define VERSION_OPT_FLAGS OPTST_IMM | OPTST_NO_INIT
+#else
+# define VERSION_OPT_FLAGS OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
+ OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
+#endif
+
{ /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
/* equiv idx value */ NO_EQUIVALENT, 0,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
- /* opt state flags */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
- | OPTST_ARG_OPTIONAL | OPTST_IMM, 0,
+ /* opt state flags */ VERSION_OPT_FLAGS, 0,
/* last opt argumnt */ { NULL },
/* arg list/cookie */ NULL,
/* must/cannot opts */ NULL, NULL,
/* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
/* disablement strs */ NULL, NULL },
+#undef VERSION_OPT_FLAGS
+
+
{ /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
/* equiv idx value */ NO_EQUIVALENT, 0,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
- /* opt state flags */ OPTST_IMM, 0,
+ /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0,
/* last opt argumnt */ { NULL },
/* arg list/cookie */ NULL,
/* must/cannot opts */ NULL, NULL,
/* equiv idx value */ NO_EQUIVALENT, 0,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
- /* opt state flags */ OPTST_IMM, 0,
+ /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0,
/* last opt argumnt */ { NULL },
/* arg list/cookie */ NULL,
/* must/cannot opts */ NULL, NULL,
text, the second line of the file through the ending tag will be replaced\n\
by the newly generated text. The first `#!' line will be regenerated.\n";
tSCC zFullVersion[] = GENSHELLOPT_FULL_VERSION;
-/* extracted from optcode.tpl near line 378 */
+/* extracted from optcode.tpl near line 408 */
#if defined(ENABLE_NLS)
# define OPTPROC_BASE OPTPROC_TRANSLATE
NO_EQUIVALENT /* index of '-#' option */,
NO_EQUIVALENT /* index of default opt */
},
- OPTION_CT, 2 /* user option count */
+ 5 /* full option count */, 2 /* user option count */
};
/*
{
USAGE( EXIT_SUCCESS );
}
-/* extracted from optcode.tpl near line 475 */
+/* extracted from optcode.tpl near line 514 */
#if ENABLE_NLS
#include <stdio.h>
*
* DO NOT EDIT THIS FILE (genshell.h)
*
- * It has been AutoGen-ed Saturday February 17, 2007 at 12:49:35 PM PST
+ * It has been AutoGen-ed Saturday May 5, 2007 at 12:02:35 PM PDT
* From the definitions genshell.def
* and the template file options
*
- * Generated from AutoOpts 28:0:3 templates.
+ * Generated from AutoOpts 29:0:4 templates.
*/
/*
*
* This source file is copyrighted and licensed under the following terms:
*
- * genshellopt copyright 1999-2006 Bruce Korb - all rights reserved
+ * genshellopt copyright 1999-2007 Bruce Korb - all rights reserved
*
* genshellopt is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* tolerable version is at least as old as what was current when the header
* template was released.
*/
-#define AO_TEMPLATE_VERSION 114688
+#define AO_TEMPLATE_VERSION 118784
#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
|| (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
# error option template version mismatches autoopts/options.h header
genshelloptOptions.pzCurOpt = NULL )
#define START_OPT RESTART_OPT(1)
#define USAGE(c) (*genshelloptOptions.pUsageProc)( &genshelloptOptions, c )
-/* extracted from opthead.tpl near line 345 */
+/* extracted from opthead.tpl near line 360 */
/* * * * * *
*
dnl
dnl DO NOT EDIT THIS FILE (libopts.m4)
dnl
-dnl It has been AutoGen-ed Saturday February 17, 2007 at 12:49:37 PM PST
+dnl It has been AutoGen-ed Saturday May 5, 2007 at 12:02:37 PM PDT
dnl From the definitions libopts.def
dnl and the template file conftest.tpl
dnl
AC_CHECK_HEADERS(dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \
setjmp.h sys/mman.h sys/param.h sys/poll.h sys/procset.h sys/select.h \
sys/socket.h sys/stropts.h sys/time.h sys/un.h sys/wait.h unistd.h \
- utime.h )
+ utime.h sysexits.h)
# --------------------------------------------
# Verify certain entries from AC_CHECK_HEADERS
]) # end of AC_DEFUN of LIBOPTS_RUN_FOPEN_TEXT
+AC_DEFUN([LIBOPTS_DISABLE_OPTIONAL_ARGS],[
+ AC_ARG_ENABLE([optional-args],
+ AC_HELP_STRING([--disable-optional-args], [not wanting optional option args]),
+ [libopts_cv_enable_optional_args=${enable_optional_args}],
+ AC_CACHE_CHECK([whether not wanting optional option args], libopts_cv_enable_optional_args,
+ libopts_cv_enable_optional_args=yes)
+ ) # end of AC_ARG_ENABLE
+
+ if test "X${libopts_cv_enable_optional_args}" = Xno
+ then
+ AC_DEFINE([NO_OPTIONAL_OPT_ARGS], [1],
+ [Define this if optional arguments are disallowed])
+ fi
+
+]) # end of AC_DEFUN of LIBOPTS_DISABLE_OPTIONAL_ARGS
+
+
AC_DEFUN([INVOKE_LIBOPTS_MACROS],[
INVOKE_LIBOPTS_MACROS_FIRST
# Check to see if a reg expr header is specified.
# Check to see if fopen accepts "t" mode.
LIBOPTS_RUN_FOPEN_TEXT
+ # Check to see if not wanting optional option args.
+ LIBOPTS_DISABLE_OPTIONAL_ARGS
+
]) # end AC_DEFUN of INVOKE_LIBOPTS_MACROS
dnl @synopsis LIBOPTS_CHECK
/*
- * $Id: pgusage.c,v 4.11 2006/09/24 02:11:16 bkorb Exp $
+ * $Id: pgusage.c,v 4.12 2007/04/28 22:19:23 bkorb Exp $
* Time-stamp: "2006-07-16 08:13:26 bkorb"
*
* Automated Options Paged Usage module.
*/
/*
- * Automated Options copyright 1992-2006 Bruce Korb
+ * Automated Options copyright 1992-2007 Bruce Korb
*
* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
/* -*- buffer-read-only: t -*- vi: set ro:
*
* Prototypes for autoopts
- * Generated Sat Feb 17 12:49:36 PST 2007
+ * Generated Sat May 5 12:02:36 PDT 2007
*/
#ifndef AUTOOPTS_PROTO_H_GUARD
#define AUTOOPTS_PROTO_H_GUARD 1
/*
- * save.c $Id: save.c,v 4.17 2007/02/04 17:44:12 bkorb Exp $
- * Time-stamp: "2007-01-13 10:32:27 bkorb"
+ * save.c $Id: save.c,v 4.18 2007/04/15 19:01:18 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:11:10 bkorb"
*
* This module's routines will take the currently set options and
* store them into an ".rc" file for re-interpretation the next
/*
- * sort.c $Id: sort.c,v 4.9 2006/10/21 15:42:49 bkorb Exp $
+ * sort.c $Id: sort.c,v 4.10 2007/04/28 22:19:23 bkorb Exp $
* Time-stamp: "2006-10-18 11:29:04 bkorb"
*
* This module implements argument sorting.
*/
/*
- * Automated Options copyright 1992-2006 Bruce Korb
+ * Automated Options copyright 1992-2007 Bruce Korb
*
* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
/*
- * $Id: streqvcmp.c,v 4.9 2006/09/24 02:11:16 bkorb Exp $
+ * $Id: streqvcmp.c,v 4.10 2007/04/28 22:19:23 bkorb Exp $
* Time-stamp: "2006-07-26 18:25:53 bkorb"
*
* String Equivalence Comparison
*/
/*
- * Automated Options copyright 1992-2006 Bruce Korb
+ * Automated Options copyright 1992-2007 Bruce Korb
*
* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
/*
- * usage.c $Id: usage.c,v 4.13 2006/11/27 01:52:23 bkorb Exp $
- * Time-stamp: "2006-07-01 12:41:02 bkorb"
+ * usage.c $Id: usage.c,v 4.15 2007/04/28 22:19:23 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:02:46 bkorb"
*
* This module implements the default usage procedure for
* Automated Options. It may be overridden, of course.
*/
/*
- * Automated Options copyright 1992-2006 Bruce Korb
+ * Automated Options copyright 1992-2007 Bruce Korb
*
* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
* formats. The descriptor specifies the default, but AUTOOPTS_USAGE will
* over-ride this, providing the value of it is set to either "gnu" or
* "autoopts". This routine will @strong{not} return.
+ *
+ * If "exitCode" is "EX_USAGE" (normally 64), then output will to to stdout
+ * and the actual exit code will be "EXIT_SUCCESS".
=*/
void
optionUsage(
tOptions* pOptions,
- int exitCode )
+ int usage_exit_code )
{
+ int actual_exit_code =
+ (usage_exit_code == EX_USAGE) ? EXIT_SUCCESS : usage_exit_code;
+
displayEnum = AG_FALSE;
/*
* on successful exit (help was requested), otherwise error out.
*/
if (option_usage_fp == NULL)
- option_usage_fp = (exitCode != EXIT_SUCCESS) ? stderr : stdout;
+ option_usage_fp = (actual_exit_code != EXIT_SUCCESS) ? stderr : stdout;
fprintf( option_usage_fp, pOptions->pzUsageTitle, pOptions->pzProgName );
* option, we do *NOT* want to emit the column headers.
* Otherwise, we do.
*/
- if ( (exitCode != EXIT_SUCCESS)
+ if ( (usage_exit_code != EXIT_SUCCESS)
|| ((pOptions->pOptDesc->fOptState & OPTST_DOCUMENT) == 0) )
fputs( pOptTitle, option_usage_fp );
}
- printOptionUsage( pOptions, exitCode, pOptTitle );
+ printOptionUsage( pOptions, usage_exit_code, pOptTitle );
}
/*
* IF the user is asking for help (thus exiting with SUCCESS),
* THEN see what additional information we can provide.
*/
- if (exitCode == EXIT_SUCCESS)
+ if (usage_exit_code == EXIT_SUCCESS)
printProgramDetails( pOptions );
if (pOptions->pzBugAddr != NULL)
fprintf( option_usage_fp, zPlsSendBugs, pOptions->pzBugAddr );
fflush( option_usage_fp );
- exit( exitCode );
+ exit( actual_exit_code );
}
/*
* IF this particular option can NOT be preset
* AND some form of presetting IS allowed,
+ * AND it is not an auto-managed option (e.g. --help, et al.)
* THEN advise that this option may not be preset.
*/
if ( ((pOD->fOptState & OPTST_NO_INIT) != 0)
&& ( (pOptions->papzHomeList != NULL)
|| (pOptions->pzPROGNAME != NULL)
- ) )
+ )
+ && (pOD->optIndex < pOptions->presetOptCt)
+ )
fputs( zNoPreset, option_usage_fp );
bogus_desc:
fprintf( stderr, zInvalOptDesc, pOD->pz_Name );
- exit( EXIT_FAILURE );
+ exit( EX_SOFTWARE );
}
-/* $Id: version.c,v 4.9 2006/09/24 02:11:16 bkorb Exp $
- * Time-stamp: "2006-09-22 18:15:00 bkorb"
+/* $Id: version.c,v 4.10 2007/04/28 22:19:23 bkorb Exp $
+ * Time-stamp: "2007-04-28 10:08:34 bkorb"
*
* This module implements the default usage procedure for
* Automated Options. It may be overridden, of course.
*/
static char const zAOV[] =
- "Automated Options version %s, copyright (c) 1999-2006 Bruce Korb\n";
+ "Automated Options version %s, copyright (c) 1999-2007 Bruce Korb\n";
/* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
{
char swCh;
- if (pOD->optArg.argString == NULL)
+ /*
+ * IF the optional argument flag is off, or the argument is not provided,
+ * then just print the version.
+ */
+ if ( ((pOD->fOptState & OPTST_ARG_OPTIONAL) == 0)
+ || (pOD->optArg.argString == NULL))
swCh = 'v';
- else swCh = pOD->optArg.argString[0];
+ else swCh = tolower(pOD->optArg.argString[0]);
if (pOpts->pzFullVersion != NULL) {
fputs( pOpts->pzFullVersion, fp );
} else {
char const *pz = pOpts->pzUsageTitle;
- do { fputc( *pz, fp ); } while (*(pz++) != '\n');
+ do { fputc(*pz, fp); } while (*(pz++) != '\n');
}
switch (swCh) {
- case NUL:
+ case NUL: /* arg provided, but empty */
case 'v':
- case 'V':
break;
case 'c':
- case 'C':
if (pOpts->pzCopyright != NULL) {
fputs( pOpts->pzCopyright, fp );
fputc( '\n', fp );
break;
case 'n':
- case 'N':
if (pOpts->pzCopyright != NULL) {
fputs( pOpts->pzCopyright, fp );
fputc( '\n', fp );
endif
libopts_la_SOURCES = libopts.c
libopts_la_CPPFLAGS = -I$(top_srcdir)
-libopts_la_LDFLAGS = -version-info 28:0:3
+libopts_la_LDFLAGS = -version-info 29:0:4
EXTRA_DIST = \
COPYING.lgpl COPYING.mbsd MakeDefs.inc \
README autoopts/options.h autoopts/usage-txt.h \
LICENSING:
-This material is copyright 1993-2006 by Bruce Korb.
+This material is copyright 1993-2007 by Bruce Korb.
You are licensed to use this under the terms of either
the GNU Lesser General Public License (see: COPYING.lgpl), or,
at your option, the modified Berkeley Software Distribution
/*
- * $Id: autoopts.c,v 4.23 2007/02/13 19:43:46 bkorb Exp $
- * Time-stamp: "2007-02-13 11:26:59 bkorb"
+ * $Id: autoopts.c,v 4.25 2007/04/15 19:01:18 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:10:40 bkorb"
*
* This file contains all of the routines that must be linked into
* an executable to use the generated option processing. The optional
static char const zNil[] = "";
-#define SKIP_RC_FILES(po) \
- DISABLED_OPT(&((po)->pOptDesc[ (po)->specOptIdx.save_opts+1]))
-
/* = = = START-STATIC-FORWARD = = = */
/* static forward declarations maintained by :mkfwd */
static tSuccess
case TOPT_DEFAULT:
fputs( "AutoOpts lib error: defaulted to option with optional arg\n",
stderr );
- exit( EXIT_FAILURE );
+ exit( EX_SOFTWARE );
}
/*
static tSuccess
doPresets( tOptions* pOpts )
{
+ tOptDesc * pOD = NULL;
+
if (! SUCCESSFUL( doImmediateOpts( pOpts )))
return FAILURE;
+ /*
+ * IF this option set has a --save-opts option, then it also
+ * has a --load-opts option. See if a command line option has disabled
+ * option presetting.
+ */
+ if (pOpts->specOptIdx.save_opts != 0) {
+ pOD = pOpts->pOptDesc + pOpts->specOptIdx.save_opts + 1;
+ if (DISABLED_OPT(pOD))
+ return SUCCESS;
+ }
+
/*
* Until we return from this procedure, disable non-presettable opts
*/
* IF there are no config files,
* THEN do any environment presets and leave.
*/
- if ( (pOpts->papzHomeList == NULL)
- || SKIP_RC_FILES(pOpts) ) {
+ if (pOpts->papzHomeList == NULL) {
doEnvPresets( pOpts, ENV_ALL );
}
else {
doEnvPresets( pOpts, ENV_IMM );
- internalFileLoad( pOpts );
+
+ /*
+ * Check to see if environment variables have disabled presetting.
+ */
+ if ((pOD != NULL) && ! DISABLED_OPT(pOD))
+ internalFileLoad( pOpts );
+
+ /*
+ * ${PROGRAM_LOAD_OPTS} value of "no" cannot disable other environment
+ * variable options. Only the loading of .rc files.
+ */
doEnvPresets( pOpts, ENV_NON_IMM );
}
pOpts->fOptSet &= ~OPTPROC_PRESETTING;
char** argVect )
{
if (! SUCCESSFUL( validateOptionsStruct( pOpts, argVect[0] )))
- exit( EXIT_FAILURE );
+ exit( EX_SOFTWARE );
/*
* Establish the real program name, the program full path,
/*
- * Time-stamp: "2007-01-17 16:37:34 bkorb"
+ * Time-stamp: "2007-04-15 09:59:39 bkorb"
*
- * autoopts.h $Id: autoopts.h,v 4.22 2007/02/04 17:44:12 bkorb Exp $
+ * autoopts.h $Id: autoopts.h,v 4.23 2007/04/15 19:01:18 bkorb Exp $
* Time-stamp: "2005-02-14 05:59:50 bkorb"
*
* This file defines all the global structures and special values
#include "compat/compat.h"
-#define AO_NAME_LIMIT 127
-#define AO_NAME_SIZE ((size_t)(AO_NAME_LIMIT + 1))
+#define AO_NAME_LIMIT 127
+#define AO_NAME_SIZE ((size_t)(AO_NAME_LIMIT + 1))
#ifndef AG_PATH_MAX
# ifdef PATH_MAX
-# define AG_PATH_MAX ((size_t)PATH_MAX)
+# define AG_PATH_MAX ((size_t)PATH_MAX)
# else
-# define AG_PATH_MAX ((size_t)4096)
+# define AG_PATH_MAX ((size_t)4096)
# endif
#else
# if defined(PATH_MAX) && (PATH_MAX > MAXPATHLEN)
# undef AG_PATH_MAX
-# define AG_PATH_MAX ((size_t)PATH_MAX)
+# define AG_PATH_MAX ((size_t)PATH_MAX)
# endif
#endif
#define EXPORT
#if defined(_WIN32) && !defined(__CYGWIN__)
-# define DIRCH '\\'
+# define DIRCH '\\'
#else
-# define DIRCH '/'
+# define DIRCH '/'
+#endif
+
+#ifndef EX_NOINPUT
+# define EX_NOINPUT 66
+#endif
+#ifndef EX_SOFTWARE
+# define EX_SOFTWARE 70
+#endif
+#ifndef EX_CONFIG
+# define EX_CONFIG 78
#endif
/*
* Convert the number to a list usable in a printf call
*/
-#define NUM_TO_VER(n) ((n) >> 12), ((n) >> 7) & 0x001F, (n) & 0x007F
+#define NUM_TO_VER(n) ((n) >> 12), ((n) >> 7) & 0x001F, (n) & 0x007F
#define NAMED_OPTS(po) \
(((po)->fOptSet & (OPTPROC_SHORTOPT | OPTPROC_LONGOPT)) == 0)
#define SKIP_OPT(p) (((p)->fOptState & (OPTST_DOCUMENT|OPTST_OMITTED)) != 0)
typedef int tDirection;
-#define DIRECTION_PRESET -1
-#define DIRECTION_PROCESS 1
-#define DIRECTION_CALLED 0
+#define DIRECTION_PRESET -1
+#define DIRECTION_PROCESS 1
+#define DIRECTION_CALLED 0
-#define PROCESSING(d) ((d)>0)
-#define PRESETTING(d) ((d)<0)
+#define PROCESSING(d) ((d)>0)
+#define PRESETTING(d) ((d)<0)
-#define ISNAMECHAR( c ) (isalnum(c) || ((c) == '_') || ((c) == '-'))
+#define ISNAMECHAR( c ) (isalnum(c) || ((c) == '_') || ((c) == '-'))
/*
* Procedure success codes
#undef FAILED
#undef HADGLITCH
-#define SUCCESS ((tSuccess) 0)
-#define FAILURE ((tSuccess)-1)
-#define PROBLEM ((tSuccess) 1)
+#define SUCCESS ((tSuccess) 0)
+#define FAILURE ((tSuccess)-1)
+#define PROBLEM ((tSuccess) 1)
typedef int tSuccess;
-#define SUCCEEDED( p ) ((p) == SUCCESS)
-#define SUCCESSFUL( p ) SUCCEEDED( p )
-#define FAILED( p ) ((p) < SUCCESS)
-#define HADGLITCH( p ) ((p) > SUCCESS)
+#define SUCCEEDED( p ) ((p) == SUCCESS)
+#define SUCCESSFUL( p ) SUCCEEDED( p )
+#define FAILED( p ) ((p) < SUCCESS)
+#define HADGLITCH( p ) ((p) > SUCCESS)
/*
* When loading a line (or block) of text as an option, the value can
tCC* pzOptFmt;
} arg_types_t;
-#define AGALOC( c, w ) ao_malloc((size_t)c)
-#define AGREALOC( p, c, w ) ao_realloc((void*)p, (size_t)c)
-#define AGFREE( p ) ao_free((void*)p)
-#define AGDUPSTR( p, s, w ) (p = ao_strdup(s))
+#define AGALOC( c, w ) ao_malloc((size_t)c)
+#define AGREALOC( p, c, w ) ao_realloc((void*)p, (size_t)c)
+#define AGFREE( p ) ao_free((void*)p)
+#define AGDUPSTR( p, s, w ) (p = ao_strdup(s))
static void *
ao_malloc( size_t sz );
# include <sys/mman.h>
#else
# ifndef PROT_READ
-# define PROT_READ 0x01
+# define PROT_READ 0x01
# endif
# ifndef PROT_WRITE
-# define PROT_WRITE 0x02
+# define PROT_WRITE 0x02
# endif
# ifndef MAP_SHARED
-# define MAP_SHARED 0x01
+# define MAP_SHARED 0x01
# endif
# ifndef MAP_PRIVATE
-# define MAP_PRIVATE 0x02
+# define MAP_PRIVATE 0x02
# endif
#endif
#ifndef MAP_FAILED
-# define MAP_FAILED ((void*)-1)
+# define MAP_FAILED ((void*)-1)
#endif
#ifndef _SC_PAGESIZE
# ifdef _SC_PAGE_SIZE
-# define _SC_PAGESIZE _SC_PAGE_SIZE
+# define _SC_PAGESIZE _SC_PAGE_SIZE
# endif
#endif
*
* DO NOT EDIT THIS FILE (options.h)
*
- * It has been AutoGen-ed Saturday February 17, 2007 at 12:49:35 PM PST
+ * It has been AutoGen-ed Saturday May 5, 2007 at 12:02:34 PM PDT
* From the definitions funcs.def
* and the template file options_h
*
# include <sys/limits.h>
#endif /* HAVE_LIMITS/SYS_LIMITS_H */
+#if defined(HAVE_SYSEXITS_H)
+# include <sysexits.h>
+#endif /* HAVE_SYSEXITS_H */
+
+#ifndef EX_USAGE
+# define EX_USAGE 64
+#endif
+
/*
* PUBLIC DEFINES
*
* values for "opt_name" are available.
*/
-#define OPTIONS_STRUCT_VERSION 114688
-#define OPTIONS_VERSION_STRING "28:0:3"
+#define OPTIONS_STRUCT_VERSION 118784
+#define OPTIONS_VERSION_STRING "29:0:4"
#define OPTIONS_MINIMUM_VERSION 102400
#define OPTIONS_MIN_VER_STRING "25:0:0"
* Bits in the fOptState option descriptor field.
*/
typedef enum {
- OPTST_SET_ID = 0, /* Set via the "SET_OPT()" macro */
- OPTST_PRESET_ID = 1, /* Set via an RC/INI file */
- OPTST_DEFINED_ID = 2, /* Set via a command line option */
- OPTST_EQUIVALENCE_ID = 4, /* selected by equiv'ed option */
- OPTST_DISABLED_ID = 5, /* option is in disabled state */
- OPTST_ALLOC_ARG_ID = 6, /* pzOptArg was allocated */
- OPTST_NO_INIT_ID = 8, /* option cannot be preset */
- OPTST_NUMBER_OPT_ID = 9, /* opt value (flag) is any digit */
- OPTST_STACKED_ID = 10, /* opt uses optionStackArg proc */
- OPTST_INITENABLED_ID = 11, /* option defaults to enabled */
- OPTST_ARG_TYPE_1_ID = 12, /* bit 1 of arg type enum */
- OPTST_ARG_TYPE_2_ID = 13, /* bit 2 of arg type enum */
- OPTST_ARG_TYPE_3_ID = 14, /* bit 3 of arg type enum */
- OPTST_ARG_TYPE_4_ID = 15, /* bit 4 of arg type enum */
- OPTST_ARG_OPTIONAL_ID = 16, /* the option arg not required */
- OPTST_IMM_ID = 17, /* process opt on first pass */
- OPTST_DISABLE_IMM_ID = 18, /* process disablement immed. */
- OPTST_OMITTED_ID = 19, /* compiled out of program */
- OPTST_MUST_SET_ID = 20, /* must be set or pre-set */
- OPTST_DOCUMENT_ID = 21, /* opt is for doc only */
- OPTST_TWICE_ID = 22, /* process opt twice - imm + reg */
- OPTST_DISABLE_TWICE_ID = 23 /* process disabled option twice */
+ OPTST_SET_ID = 0, /* Set via the "SET_OPT()" macro */
+ OPTST_PRESET_ID = 1, /* Set via an RC/INI file */
+ OPTST_DEFINED_ID = 2, /* Set via a command line option */
+ OPTST_EQUIVALENCE_ID = 4, /* selected by equiv'ed option */
+ OPTST_DISABLED_ID = 5, /* option is in disabled state */
+ OPTST_ALLOC_ARG_ID = 6, /* pzOptArg was allocated */
+ OPTST_NO_INIT_ID = 8, /* option cannot be preset */
+ OPTST_NUMBER_OPT_ID = 9, /* opt value (flag) is any digit */
+ OPTST_STACKED_ID = 10, /* opt uses optionStackArg proc */
+ OPTST_INITENABLED_ID = 11, /* option defaults to enabled */
+ OPTST_ARG_TYPE_1_ID = 12, /* bit 1 of arg type enum */
+ OPTST_ARG_TYPE_2_ID = 13, /* bit 2 of arg type enum */
+ OPTST_ARG_TYPE_3_ID = 14, /* bit 3 of arg type enum */
+ OPTST_ARG_TYPE_4_ID = 15, /* bit 4 of arg type enum */
+ OPTST_ARG_OPTIONAL_ID = 16, /* the option arg not required */
+ OPTST_IMM_ID = 17, /* process opt on first pass */
+ OPTST_DISABLE_IMM_ID = 18, /* process disablement immed. */
+ OPTST_OMITTED_ID = 19, /* compiled out of program */
+ OPTST_MUST_SET_ID = 20, /* must be set or pre-set */
+ OPTST_DOCUMENT_ID = 21, /* opt is for doc only */
+ OPTST_TWICE_ID = 22, /* process opt twice - imm + reg */
+ OPTST_DISABLE_TWICE_ID = 23 /* process disabled option twice */
} opt_state_enum_t;
#define OPTST_INIT 0U
OPTST_ARG_TYPE_3 | \
OPTST_ARG_TYPE_4 )
+#ifdef NO_OPTIONAL_OPT_ARGS
+# undef OPTST_ARG_OPTIONAL
+# define OPTST_ARG_OPTIONAL 0
+#endif
+
#define OPTST_PERSISTENT_MASK (~OPTST_MUTABLE_MASK)
#define SELECTED_OPT( pod ) ((pod)->fOptState & OPTST_SELECTED_MASK)
* Define the processing state flags
*/
typedef enum {
- OPTPROC_LONGOPT_ID = 0, /* Process long style options */
- OPTPROC_SHORTOPT_ID = 1, /* Process short style "flags" */
- OPTPROC_ERRSTOP_ID = 2, /* Stop on argument errors */
- OPTPROC_DISABLEDOPT_ID = 3, /* Current option is disabled */
- OPTPROC_NO_REQ_OPT_ID = 4, /* no options are required */
- OPTPROC_NUM_OPT_ID = 5, /* there is a number option */
- OPTPROC_INITDONE_ID = 6, /* have initializations been done? */
- OPTPROC_NEGATIONS_ID = 7, /* any negation options? */
- OPTPROC_ENVIRON_ID = 8, /* check environment? */
- OPTPROC_NO_ARGS_ID = 9, /* Disallow remaining arguments */
- OPTPROC_ARGS_REQ_ID = 10, /* Require arguments after options */
- OPTPROC_REORDER_ID = 11, /* reorder operands after options */
- OPTPROC_GNUUSAGE_ID = 12, /* emit usage in GNU style */
- OPTPROC_TRANSLATE_ID = 13, /* Translate strings in tOptions */
- OPTPROC_HAS_IMMED_ID = 14, /* program defines immed options */
- OPTPROC_PRESETTING_ID = 19 /* opt processing in preset state */
+ OPTPROC_LONGOPT_ID = 0, /* Process long style options */
+ OPTPROC_SHORTOPT_ID = 1, /* Process short style "flags" */
+ OPTPROC_ERRSTOP_ID = 2, /* Stop on argument errors */
+ OPTPROC_DISABLEDOPT_ID = 3, /* Current option is disabled */
+ OPTPROC_NO_REQ_OPT_ID = 4, /* no options are required */
+ OPTPROC_NUM_OPT_ID = 5, /* there is a number option */
+ OPTPROC_INITDONE_ID = 6, /* have initializations been done? */
+ OPTPROC_NEGATIONS_ID = 7, /* any negation options? */
+ OPTPROC_ENVIRON_ID = 8, /* check environment? */
+ OPTPROC_NO_ARGS_ID = 9, /* Disallow remaining arguments */
+ OPTPROC_ARGS_REQ_ID = 10, /* Require arguments after options */
+ OPTPROC_REORDER_ID = 11, /* reorder operands after options */
+ OPTPROC_GNUUSAGE_ID = 12, /* emit usage in GNU style */
+ OPTPROC_TRANSLATE_ID = 13, /* Translate strings in tOptions */
+ OPTPROC_HAS_IMMED_ID = 14, /* program defines immed options */
+ OPTPROC_PRESETTING_ID = 19 /* opt processing in preset state */
} optproc_state_enum_t;
#define OPTPROC_NONE 0U
typedef void (tOptionXlateProc)(void);
struct options {
- const int structVersion;
+ int const structVersion;
int origArgCt;
char** origArgVect;
unsigned int fOptSet;
char const* const pzCopyright;
char const* const pzCopyNotice;
char const* const pzFullVersion;
- char const* const* papzHomeList;
+ char const* const* const papzHomeList;
char const* const pzUsageTitle;
char const* const pzExplain;
char const* const pzDetail;
tOptionXlateProc* pTransProc;
tOptSpecIndex specOptIdx;
- const int optCt;
- const int presetOptCt;
+ int const optCt;
+ int const presetOptCt;
};
/*
extern const tOptionValue* configFileLoad( char const* );
-/* From: configfile.c line 880
+/* From: configfile.c line 883
*
* optionFileLoad - Load the locatable config files, in order
*
extern void optionOnlyUsage( tOptions*, int );
-/* From: autoopts.c line 993
+/* From: autoopts.c line 1012
*
* optionProcess - this is the main option processing routine
*
*
* DO NOT EDIT THIS FILE (usage-txt.h)
*
- * It has been AutoGen-ed Saturday February 17, 2007 at 12:49:33 PM PST
+ * It has been AutoGen-ed Saturday May 5, 2007 at 12:02:33 PM PDT
* From the definitions usage-txt.def
* and the template file usage-txt.tpl
*
* Author: Gary V Vaughan <gvaughan@oranda.demon.co.uk>
* Created: Mon Jun 30 15:54:46 1997
*
- * $Id: compat.h,v 4.15 2007/02/04 22:17:39 bkorb Exp $
+ * $Id: compat.h,v 4.16 2007/04/27 01:10:47 bkorb Exp $
*/
#ifndef COMPAT_H_GUARD
#define COMPAT_H_GUARD 1
# define MAXPATHLEN PATH_MAX
#endif /* !MAXPATHLEN && PATH_MAX */
+#if !defined (MAXPATHLEN) && defined(_MAX_PATH)
+# define PATH_MAX _MAX_PATH
+# define MAXPATHLEN _MAX_PATH
+#endif
+
#if !defined (MAXPATHLEN)
# define MAXPATHLEN ((size_t)4096)
#endif /* MAXPATHLEN */
/*
* Time-stamp: "2006-10-14 14:55:09 bkorb"
* by: bkorb
- * Last Committed: $Date: 2006/10/14 22:39:49 $
+ * Last Committed: $Date: 2007/04/28 22:19:23 $
*/
#ifndef WINDOWS_CONFIG_HACKERY
#define WINDOWS_CONFIG_HACKERY 1
/* Include Windows headers */
#include <windows.h>
#include <winsock2.h>
+#include <limits.h>
/*
* Compatibility declarations for Windows, assuming SYS_WINNT
/*
- * $Id: configfile.c,v 1.20 2007/02/04 17:44:12 bkorb Exp $
- * Time-stamp: "2007-01-13 12:49:10 bkorb"
+ * $Id: configfile.c,v 1.21 2007/04/15 19:01:18 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:22:46 bkorb"
*
* configuration/rc/ini file handling.
*/
* IF we are now to skip config files AND we are presetting,
* THEN change direction. We must go the other way.
*/
- if (SKIP_RC_FILES(pOpts) && PRESETTING(inc)) {
- idx -= inc; /* go back and reprocess current file */
- inc = DIRECTION_PROCESS;
+ {
+ tOptDesc * pOD = pOpts->pOptDesc + pOpts->specOptIdx.save_opts+1;
+ if (DISABLED_OPT(pOD) && PRESETTING(inc)) {
+ idx -= inc; /* go back and reprocess current file */
+ inc = DIRECTION_PROCESS;
+ }
}
- } /* For every path in the home list, ... */
+ } /* twice for every path in the home list, ... */
}
optionLoadOpt( tOptions* pOpts, tOptDesc* pOptDesc )
{
/*
- * IF the option is not being disabled,
- * THEN load the file. There must be a file.
- * (If it is being disabled, then the disablement processing
- * already took place. It must be done to suppress preloading
- * of ini/rc files.)
+ * IF the option is not being disabled, THEN load the file. There must
+ * be a file. (If it is being disabled, then the disablement processing
+ * already took place. It must be done to suppress preloading of ini/rc
+ * files.)
*/
if (! DISABLED_OPT( pOptDesc )) {
struct stat sb;
fprintf( stderr, zFSErrOptLoad, errno, strerror( errno ),
pOptDesc->optArg.argString );
- (*pOpts->pUsageProc)( pOpts, EXIT_FAILURE );
+ exit(EX_NOINPUT);
/* NOT REACHED */
}
return;
fprintf( stderr, zNotFile, pOptDesc->optArg.argString );
- (*pOpts->pUsageProc)( pOpts, EXIT_FAILURE );
+ exit(EX_NOINPUT);
/* NOT REACHED */
}
{
if (pOpts == NULL) {
fputs( zAO_Bad, stderr );
- exit( EXIT_FAILURE );
+ exit( EX_CONFIG );
}
/*
/*
- * $Id: environment.c,v 4.12 2007/02/04 17:44:12 bkorb Exp $
- * Time-stamp: "2007-01-13 10:02:07 bkorb"
+ * $Id: environment.c,v 4.13 2007/04/15 19:01:18 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:50:35 bkorb"
*
* This file contains all of the routines that must be linked into
* an executable to use the generated option processing. The optional
/* = = = START-STATIC-FORWARD = = = */
/* static forward declarations maintained by :mkfwd */
+static void
+checkEnvOpt(tOptState * os, char * env_name,
+ tOptions* pOpts, teEnvPresetType type);
/* = = = END-STATIC-FORWARD = = = */
/*
pOpts->fOptSet = sv_flag;
}
+static void
+checkEnvOpt(tOptState * os, char * env_name,
+ tOptions* pOpts, teEnvPresetType type)
+{
+ os->pzOptArg = getenv( env_name );
+ if (os->pzOptArg == NULL)
+ return;
+
+ os->flags = OPTST_PRESET | OPTST_ALLOC_ARG | os->pOD->fOptState;
+ os->optType = TOPT_UNDEFINED;
+
+ if ( (os->pOD->pz_DisablePfx != NULL)
+ && (streqvcmp( os->pzOptArg, os->pOD->pz_DisablePfx ) == 0)) {
+ os->flags |= OPTST_DISABLED;
+ os->pzOptArg = NULL;
+ }
+
+ switch (type) {
+ case ENV_IMM:
+ /*
+ * Process only immediate actions
+ */
+ if (DO_IMMEDIATELY(os->flags))
+ break;
+ return;
+
+ case ENV_NON_IMM:
+ /*
+ * Process only NON immediate actions
+ */
+ if (DO_NORMALLY(os->flags) || DO_SECOND_TIME(os->flags))
+ break;
+ return;
+
+ default: /* process everything */
+ break;
+ }
+
+ /*
+ * Make sure the option value string is persistent and consistent.
+ *
+ * The interpretation of the option value depends
+ * on the type of value argument the option takes
+ */
+ if (os->pzOptArg != NULL) {
+ if (OPTST_GET_ARGTYPE(os->pOD->fOptState) == OPARG_TYPE_NONE) {
+ os->pzOptArg = NULL;
+ } else if ( (os->pOD->fOptState & OPTST_ARG_OPTIONAL)
+ && (*os->pzOptArg == NUL)) {
+ os->pzOptArg = NULL;
+ } else if (*os->pzOptArg == NUL) {
+ os->pzOptArg = zNil;
+ } else {
+ AGDUPSTR( os->pzOptArg, os->pzOptArg, "option argument" );
+ os->flags |= OPTST_ALLOC_ARG;
+ }
+ }
+
+ handleOption( pOpts, os );
+}
/*
* doEnvPresets - check for preset values from the envrionment
* Set up the option state
*/
strcpy( pzFlagName, st.pOD->pz_NAME );
- st.pzOptArg = getenv( zEnvName );
- if (st.pzOptArg == NULL)
- continue;
- st.flags = OPTST_PRESET | OPTST_ALLOC_ARG | st.pOD->fOptState;
- st.optType = TOPT_UNDEFINED;
-
- if ( (st.pOD->pz_DisablePfx != NULL)
- && (streqvcmp( st.pzOptArg, st.pOD->pz_DisablePfx ) == 0)) {
- st.flags |= OPTST_DISABLED;
- st.pzOptArg = NULL;
- }
-
- switch (type) {
- case ENV_IMM:
- /*
- * Process only immediate actions
- */
- if (DO_IMMEDIATELY(st.flags))
- break;
- continue;
-
- case ENV_NON_IMM:
- /*
- * Process only NON immediate actions
- */
- if (DO_NORMALLY(st.flags) || DO_SECOND_TIME(st.flags))
- break;
- continue;
-
- default: /* process everything */
- break;
- }
-
- /*
- * Make sure the option value string is persistent and consistent.
- *
- * The interpretation of the option value depends
- * on the type of value argument the option takes
- */
- if (st.pzOptArg != NULL) {
- if (OPTST_GET_ARGTYPE(st.pOD->fOptState) == OPARG_TYPE_NONE) {
- st.pzOptArg = NULL;
- } else if ( (st.pOD->fOptState & OPTST_ARG_OPTIONAL)
- && (*st.pzOptArg == NUL)) {
- st.pzOptArg = NULL;
- } else if (*st.pzOptArg == NUL) {
- st.pzOptArg = zNil;
- } else {
- AGDUPSTR( st.pzOptArg, st.pzOptArg, "option argument" );
- st.flags |= OPTST_ALLOC_ARG;
- }
- }
+ checkEnvOpt(&st, zEnvName, pOpts, type);
+ }
- handleOption( pOpts, &st );
+ /*
+ * Special handling for ${PROGNAME_LOAD_OPTS}
+ */
+ if (pOpts->specOptIdx.save_opts != 0) {
+ st.pOD = pOpts->pOptDesc + pOpts->specOptIdx.save_opts + 1;
+ strcpy( pzFlagName, st.pOD->pz_NAME );
+ checkEnvOpt(&st, zEnvName, pOpts, type);
}
}
*
* DO NOT EDIT THIS FILE (genshell.c)
*
- * It has been AutoGen-ed Saturday February 17, 2007 at 12:49:35 PM PST
+ * It has been AutoGen-ed Saturday May 5, 2007 at 12:02:35 PM PDT
* From the definitions genshell.def
* and the template file options
*
- * Generated from AutoOpts 28:0:3 templates.
+ * Generated from AutoOpts 29:0:4 templates.
*/
/*
*
* This source file is copyrighted and licensed under the following terms:
*
- * genshellopt copyright 1999-2006 Bruce Korb - all rights reserved
+ * genshellopt copyright 1999-2007 Bruce Korb - all rights reserved
*
* genshellopt is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
extern "C" {
#endif
tSCC zCopyright[] =
- "genshellopt copyright (c) 1999-2006 Bruce Korb, all rights reserved";
+ "genshellopt copyright (c) 1999-2007 Bruce Korb, all rights reserved";
tSCC zCopyrightNotice[] =
"genshellopt is free software; you can redistribute it and/or\n\
modify it under the terms of the GNU Lesser General Public\n\
/* desc, NAME, name */ zShellText, zShell_NAME, zShell_Name,
/* disablement strs */ zNotShell_Name, zNotShell_Pfx },
+#ifdef NO_OPTIONAL_OPT_ARGS
+# define VERSION_OPT_FLAGS OPTST_IMM | OPTST_NO_INIT
+#else
+# define VERSION_OPT_FLAGS OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
+ OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
+#endif
+
{ /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
/* equiv idx value */ NO_EQUIVALENT, 0,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
- /* opt state flags */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
- | OPTST_ARG_OPTIONAL | OPTST_IMM, 0,
+ /* opt state flags */ VERSION_OPT_FLAGS, 0,
/* last opt argumnt */ { NULL },
/* arg list/cookie */ NULL,
/* must/cannot opts */ NULL, NULL,
/* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
/* disablement strs */ NULL, NULL },
+#undef VERSION_OPT_FLAGS
+
+
{ /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
/* equiv idx value */ NO_EQUIVALENT, 0,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
- /* opt state flags */ OPTST_IMM, 0,
+ /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0,
/* last opt argumnt */ { NULL },
/* arg list/cookie */ NULL,
/* must/cannot opts */ NULL, NULL,
/* equiv idx value */ NO_EQUIVALENT, 0,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
- /* opt state flags */ OPTST_IMM, 0,
+ /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0,
/* last opt argumnt */ { NULL },
/* arg list/cookie */ NULL,
/* must/cannot opts */ NULL, NULL,
text, the second line of the file through the ending tag will be replaced\n\
by the newly generated text. The first `#!' line will be regenerated.\n";
tSCC zFullVersion[] = GENSHELLOPT_FULL_VERSION;
-/* extracted from optcode.tpl near line 378 */
+/* extracted from optcode.tpl near line 408 */
#if defined(ENABLE_NLS)
# define OPTPROC_BASE OPTPROC_TRANSLATE
NO_EQUIVALENT /* index of '-#' option */,
NO_EQUIVALENT /* index of default opt */
},
- OPTION_CT, 2 /* user option count */
+ 5 /* full option count */, 2 /* user option count */
};
/*
{
USAGE( EXIT_SUCCESS );
}
-/* extracted from optcode.tpl near line 475 */
+/* extracted from optcode.tpl near line 514 */
#if ENABLE_NLS
#include <stdio.h>
*
* DO NOT EDIT THIS FILE (genshell.h)
*
- * It has been AutoGen-ed Saturday February 17, 2007 at 12:49:35 PM PST
+ * It has been AutoGen-ed Saturday May 5, 2007 at 12:02:35 PM PDT
* From the definitions genshell.def
* and the template file options
*
- * Generated from AutoOpts 28:0:3 templates.
+ * Generated from AutoOpts 29:0:4 templates.
*/
/*
*
* This source file is copyrighted and licensed under the following terms:
*
- * genshellopt copyright 1999-2006 Bruce Korb - all rights reserved
+ * genshellopt copyright 1999-2007 Bruce Korb - all rights reserved
*
* genshellopt is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* tolerable version is at least as old as what was current when the header
* template was released.
*/
-#define AO_TEMPLATE_VERSION 114688
+#define AO_TEMPLATE_VERSION 118784
#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
|| (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
# error option template version mismatches autoopts/options.h header
genshelloptOptions.pzCurOpt = NULL )
#define START_OPT RESTART_OPT(1)
#define USAGE(c) (*genshelloptOptions.pUsageProc)( &genshelloptOptions, c )
-/* extracted from opthead.tpl near line 345 */
+/* extracted from opthead.tpl near line 360 */
/* * * * * *
*
dnl
dnl DO NOT EDIT THIS FILE (libopts.m4)
dnl
-dnl It has been AutoGen-ed Saturday February 17, 2007 at 12:49:37 PM PST
+dnl It has been AutoGen-ed Saturday May 5, 2007 at 12:02:37 PM PDT
dnl From the definitions libopts.def
dnl and the template file conftest.tpl
dnl
AC_CHECK_HEADERS(dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \
setjmp.h sys/mman.h sys/param.h sys/poll.h sys/procset.h sys/select.h \
sys/socket.h sys/stropts.h sys/time.h sys/un.h sys/wait.h unistd.h \
- utime.h )
+ utime.h sysexits.h)
# --------------------------------------------
# Verify certain entries from AC_CHECK_HEADERS
]) # end of AC_DEFUN of LIBOPTS_RUN_FOPEN_TEXT
+AC_DEFUN([LIBOPTS_DISABLE_OPTIONAL_ARGS],[
+ AC_ARG_ENABLE([optional-args],
+ AC_HELP_STRING([--disable-optional-args], [not wanting optional option args]),
+ [libopts_cv_enable_optional_args=${enable_optional_args}],
+ AC_CACHE_CHECK([whether not wanting optional option args], libopts_cv_enable_optional_args,
+ libopts_cv_enable_optional_args=yes)
+ ) # end of AC_ARG_ENABLE
+
+ if test "X${libopts_cv_enable_optional_args}" = Xno
+ then
+ AC_DEFINE([NO_OPTIONAL_OPT_ARGS], [1],
+ [Define this if optional arguments are disallowed])
+ fi
+
+]) # end of AC_DEFUN of LIBOPTS_DISABLE_OPTIONAL_ARGS
+
+
AC_DEFUN([INVOKE_LIBOPTS_MACROS],[
INVOKE_LIBOPTS_MACROS_FIRST
# Check to see if a reg expr header is specified.
# Check to see if fopen accepts "t" mode.
LIBOPTS_RUN_FOPEN_TEXT
+ # Check to see if not wanting optional option args.
+ LIBOPTS_DISABLE_OPTIONAL_ARGS
+
]) # end AC_DEFUN of INVOKE_LIBOPTS_MACROS
dnl @synopsis LIBOPTS_CHECK
/*
- * $Id: pgusage.c,v 4.11 2006/09/24 02:11:16 bkorb Exp $
+ * $Id: pgusage.c,v 4.12 2007/04/28 22:19:23 bkorb Exp $
* Time-stamp: "2006-07-16 08:13:26 bkorb"
*
* Automated Options Paged Usage module.
*/
/*
- * Automated Options copyright 1992-2006 Bruce Korb
+ * Automated Options copyright 1992-2007 Bruce Korb
*
* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
/* -*- buffer-read-only: t -*- vi: set ro:
*
* Prototypes for autoopts
- * Generated Sat Feb 17 12:49:36 PST 2007
+ * Generated Sat May 5 12:02:36 PDT 2007
*/
#ifndef AUTOOPTS_PROTO_H_GUARD
#define AUTOOPTS_PROTO_H_GUARD 1
/*
- * save.c $Id: save.c,v 4.17 2007/02/04 17:44:12 bkorb Exp $
- * Time-stamp: "2007-01-13 10:32:27 bkorb"
+ * save.c $Id: save.c,v 4.18 2007/04/15 19:01:18 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:11:10 bkorb"
*
* This module's routines will take the currently set options and
* store them into an ".rc" file for re-interpretation the next
/*
- * sort.c $Id: sort.c,v 4.9 2006/10/21 15:42:49 bkorb Exp $
+ * sort.c $Id: sort.c,v 4.10 2007/04/28 22:19:23 bkorb Exp $
* Time-stamp: "2006-10-18 11:29:04 bkorb"
*
* This module implements argument sorting.
*/
/*
- * Automated Options copyright 1992-2006 Bruce Korb
+ * Automated Options copyright 1992-2007 Bruce Korb
*
* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
/*
- * $Id: streqvcmp.c,v 4.9 2006/09/24 02:11:16 bkorb Exp $
+ * $Id: streqvcmp.c,v 4.10 2007/04/28 22:19:23 bkorb Exp $
* Time-stamp: "2006-07-26 18:25:53 bkorb"
*
* String Equivalence Comparison
*/
/*
- * Automated Options copyright 1992-2006 Bruce Korb
+ * Automated Options copyright 1992-2007 Bruce Korb
*
* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
/*
- * usage.c $Id: usage.c,v 4.13 2006/11/27 01:52:23 bkorb Exp $
- * Time-stamp: "2006-07-01 12:41:02 bkorb"
+ * usage.c $Id: usage.c,v 4.15 2007/04/28 22:19:23 bkorb Exp $
+ * Time-stamp: "2007-04-15 11:02:46 bkorb"
*
* This module implements the default usage procedure for
* Automated Options. It may be overridden, of course.
*/
/*
- * Automated Options copyright 1992-2006 Bruce Korb
+ * Automated Options copyright 1992-2007 Bruce Korb
*
* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
* formats. The descriptor specifies the default, but AUTOOPTS_USAGE will
* over-ride this, providing the value of it is set to either "gnu" or
* "autoopts". This routine will @strong{not} return.
+ *
+ * If "exitCode" is "EX_USAGE" (normally 64), then output will to to stdout
+ * and the actual exit code will be "EXIT_SUCCESS".
=*/
void
optionUsage(
tOptions* pOptions,
- int exitCode )
+ int usage_exit_code )
{
+ int actual_exit_code =
+ (usage_exit_code == EX_USAGE) ? EXIT_SUCCESS : usage_exit_code;
+
displayEnum = AG_FALSE;
/*
* on successful exit (help was requested), otherwise error out.
*/
if (option_usage_fp == NULL)
- option_usage_fp = (exitCode != EXIT_SUCCESS) ? stderr : stdout;
+ option_usage_fp = (actual_exit_code != EXIT_SUCCESS) ? stderr : stdout;
fprintf( option_usage_fp, pOptions->pzUsageTitle, pOptions->pzProgName );
* option, we do *NOT* want to emit the column headers.
* Otherwise, we do.
*/
- if ( (exitCode != EXIT_SUCCESS)
+ if ( (usage_exit_code != EXIT_SUCCESS)
|| ((pOptions->pOptDesc->fOptState & OPTST_DOCUMENT) == 0) )
fputs( pOptTitle, option_usage_fp );
}
- printOptionUsage( pOptions, exitCode, pOptTitle );
+ printOptionUsage( pOptions, usage_exit_code, pOptTitle );
}
/*
* IF the user is asking for help (thus exiting with SUCCESS),
* THEN see what additional information we can provide.
*/
- if (exitCode == EXIT_SUCCESS)
+ if (usage_exit_code == EXIT_SUCCESS)
printProgramDetails( pOptions );
if (pOptions->pzBugAddr != NULL)
fprintf( option_usage_fp, zPlsSendBugs, pOptions->pzBugAddr );
fflush( option_usage_fp );
- exit( exitCode );
+ exit( actual_exit_code );
}
/*
* IF this particular option can NOT be preset
* AND some form of presetting IS allowed,
+ * AND it is not an auto-managed option (e.g. --help, et al.)
* THEN advise that this option may not be preset.
*/
if ( ((pOD->fOptState & OPTST_NO_INIT) != 0)
&& ( (pOptions->papzHomeList != NULL)
|| (pOptions->pzPROGNAME != NULL)
- ) )
+ )
+ && (pOD->optIndex < pOptions->presetOptCt)
+ )
fputs( zNoPreset, option_usage_fp );
bogus_desc:
fprintf( stderr, zInvalOptDesc, pOD->pz_Name );
- exit( EXIT_FAILURE );
+ exit( EX_SOFTWARE );
}
-/* $Id: version.c,v 4.9 2006/09/24 02:11:16 bkorb Exp $
- * Time-stamp: "2006-09-22 18:15:00 bkorb"
+/* $Id: version.c,v 4.10 2007/04/28 22:19:23 bkorb Exp $
+ * Time-stamp: "2007-04-28 10:08:34 bkorb"
*
* This module implements the default usage procedure for
* Automated Options. It may be overridden, of course.
*/
static char const zAOV[] =
- "Automated Options version %s, copyright (c) 1999-2006 Bruce Korb\n";
+ "Automated Options version %s, copyright (c) 1999-2007 Bruce Korb\n";
/* Automated Options is free software.
* You may redistribute it and/or modify it under the terms of the
{
char swCh;
- if (pOD->optArg.argString == NULL)
+ /*
+ * IF the optional argument flag is off, or the argument is not provided,
+ * then just print the version.
+ */
+ if ( ((pOD->fOptState & OPTST_ARG_OPTIONAL) == 0)
+ || (pOD->optArg.argString == NULL))
swCh = 'v';
- else swCh = pOD->optArg.argString[0];
+ else swCh = tolower(pOD->optArg.argString[0]);
if (pOpts->pzFullVersion != NULL) {
fputs( pOpts->pzFullVersion, fp );
} else {
char const *pz = pOpts->pzUsageTitle;
- do { fputc( *pz, fp ); } while (*(pz++) != '\n');
+ do { fputc(*pz, fp); } while (*(pz++) != '\n');
}
switch (swCh) {
- case NUL:
+ case NUL: /* arg provided, but empty */
case 'v':
- case 'V':
break;
case 'c':
- case 'C':
if (pOpts->pzCopyright != NULL) {
fputs( pOpts->pzCopyright, fp );
fputc( '\n', fp );
break;
case 'n':
- case 'N':
if (pOpts->pzCopyright != NULL) {
fputs( pOpts->pzCopyright, fp );
fputc( '\n', fp );