Logo Search packages:      
Sourcecode: ksh version File versions

option.h

/***********************************************************************
*                                                                      *
*               This software is part of the ast package               *
*           Copyright (c) 1985-2007 AT&T Knowledge Ventures            *
*                      and is licensed under the                       *
*                  Common Public License, Version 1.0                  *
*                      by AT&T Knowledge Ventures                      *
*                                                                      *
*                A copy of the License is available at                 *
*            http://www.opensource.org/licenses/cpl1.0.txt             *
*         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
*                                                                      *
*              Information and Software Systems Research               *
*                            AT&T Research                             *
*                           Florham Park NJ                            *
*                                                                      *
*                 Glenn Fowler <gsf@research.att.com>                  *
*                  David Korn <dgk@research.att.com>                   *
*                   Phong Vo <kpv@research.att.com>                    *
*                                                                      *
***********************************************************************/
#pragma prototyped
/*
 * Glenn Fowler
 * AT&T Research
 *
 * command line option parse interface
 */

#ifndef _OPTION_H
#define _OPTION_H

#include <ast.h>

#define OPT_VERSION     20070319L

#define OPT_USER  (1L<<16)    /* first user flag bit        */

struct Opt_s;
struct Optdisc_s;

typedef int (*Optinfo_f)(struct Opt_s*, Sfio_t*, const char*, struct Optdisc_s*);

typedef struct Optdisc_s
{
      unsigned long     version;    /* OPT_VERSION                */
      unsigned long     flags;            /* OPT_* flags                */
      char*       catalog;    /* error catalog id           */
      Optinfo_f   infof;            /* runtime info function      */
} Optdisc_t;

/* NOTE: Opt_t member order fixed by a previous binary release */

#ifndef _OPT_PRIVATE_
#define _OPT_PRIVATE_   \
      char        pad[3*sizeof(void*)];
#endif

typedef struct Opt_s
{
      int         again;            /* see optjoin()        */
      char*       arg;        /* {:,#} string argument      */
      char**            argv;       /* most recent argv           */
      int         index;            /* argv index                 */
      char*       msg;        /* error/usage message buffer */
      long        num;        /* OBSOLETE -- use number     */
      int         offset;           /* char offset in argv[index] */
      char        option[8];  /* current flag {-,+} + option  */
      char        name[64];   /* current long name or flag  */
      Optdisc_t*  disc;       /* user discipline            */
      intmax_t    number;           /* # numeric argument         */
      unsigned char     assignment; /* option arg assigment op    */
      unsigned char     pads[sizeof(void*)-1];
      _OPT_PRIVATE_
} Opt_t;

#if _BLD_ast && defined(__EXPORT__)
#define extern          extern __EXPORT__
#endif
#if !_BLD_ast && defined(__IMPORT__)
#define extern          extern __IMPORT__
#endif

extern Opt_t*           _opt_infop_;

#define opt_info  (*_opt_infop_)

#undef      extern

#define optinit(d,f)    (memset(d,0,sizeof(*(d))),(d)->version=OPT_VERSION,(d)->infof=(f),opt_info.disc=(d))

#if _BLD_ast && defined(__EXPORT__)
#define extern          __EXPORT__
#endif

extern int        optget(char**, const char*);
extern int        optjoin(char**, ...);
extern char*            opthelp(const char*, const char*);
extern char*            optusage(const char*);
extern int        optstr(const char*, const char*);
extern int        optesc(Sfio_t*, const char*, int);
extern Opt_t*           optctx(Opt_t*, Opt_t*);

#undef      extern

#endif

Generated by  Doxygen 1.6.0   Back to index