1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1985-2012 AT&T Intellectual Property * 5* and is licensed under the * 6* Eclipse Public License, Version 1.0 * 7* by AT&T Intellectual Property * 8* * 9* A copy of the License is available at * 10* http://www.eclipse.org/org/documents/epl-v10.html * 11* (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12* * 13* Information and Software Systems Research * 14* AT&T Research * 15* Florham Park NJ * 16* * 17* Glenn Fowler <gsf@research.att.com> * 18* David Korn <dgk@research.att.com> * 19* Phong Vo <kpv@research.att.com> * 20* * 21***********************************************************************/ 22#pragma prototyped 23/* 24 * Glenn Fowler 25 * AT&T Research 26 * 27 * command line option parse interface 28 */ 29 30#ifndef _OPTION_H 31#define _OPTION_H 1 32 33#include <ast.h> 34 35#define OPT_VERSION 20000401L 36 37#define opt_info _opt_info_ 38 39#define OPT_USER (1L<<16) /* first user flag bit */ 40 41struct Opt_s; 42struct Optdisc_s; 43 44typedef int (*Optinfo_f)(struct Opt_s*, Sfio_t*, const char*, struct Optdisc_s*); 45 46typedef struct Optdisc_s 47{ 48 unsigned long version; /* OPT_VERSION */ 49 unsigned long flags; /* OPT_* flags */ 50 char* catalog; /* error catalog id */ 51 Optinfo_f infof; /* runtime info function */ 52} Optdisc_t; 53 54/* NOTE: Opt_t member order fixed by a previous binary release */ 55 56#ifndef _OPT_PRIVATE_ 57#define _OPT_PRIVATE_ void* _opt_private; 58#endif 59 60typedef struct Opt_s 61{ 62 int again; /* see optjoin() */ 63 char* arg; /* {:,#} string argument */ 64 char** argv; /* most recent argv */ 65 int index; /* argv index */ 66 char* msg; /* error/usage message buffer */ 67 long num; /* # numeric argument */ 68 int offset; /* char offset in argv[index] */ 69 char option[8]; /* current flag {-,+} + option */ 70 char name[64]; /* current long name or flag */ 71 Optdisc_t* disc; /* user discipline */ 72 intmax_t number; /* # numeric argument */ 73 unsigned char assignment; /* option arg assigment op */ 74 unsigned char pads[sizeof(void*)-1]; 75 _OPT_PRIVATE_ 76} Opt_t; 77 78#define optinit(d,f) (memset(d,0,sizeof(*(d))),(d)->version=OPT_VERSION,(d)->infof=(f),opt_info.disc=(d)) 79 80#if _BLD_ast && defined(__EXPORT__) 81#define __PUBLIC_DATA__ __EXPORT__ 82#else 83#if !_BLD_ast && defined(__IMPORT__) 84#define __PUBLIC_DATA__ __IMPORT__ 85#else 86#define __PUBLIC_DATA__ 87#endif 88#endif 89 90extern __PUBLIC_DATA__ Opt_t opt_info; 91 92#undef __PUBLIC_DATA__ 93 94#if _BLD_ast && defined(__EXPORT__) 95#define extern __EXPORT__ 96#endif 97 98extern int optget(char**, const char*); 99extern int optjoin(char**, ...); 100extern char* opthelp(const char*, const char*); 101extern char* optusage(const char*); 102extern int optstr(const char*, const char*); 103 104#undef extern 105 106#endif 107