da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1985-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* http://www.opensource.org/licenses/cpl1.0.txt *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Phong Vo <kpv@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Glenn Fowler
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Research
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * command line option parser and usage formatter private definitions
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef _OPTLIB_H
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define _OPTLIB_H
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ast.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <cdt.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_cache 0x01
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_functions 0x02
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_ignore 0x04
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_long 0x08
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define OPT_numeric 0x10
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define OPT_old 0x20
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#define OPT_minus 0x40
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#define OPT_plus 0x80
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_cache_flag 0x01
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_cache_invert 0x02
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_cache_numeric 0x04
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_cache_optional 0x08
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_cache_string 0x10
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_CACHE 128
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_FLAGS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct Optdisc_s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct Optpass_s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* opts;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* oopts;
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner char* id;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* catalog;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned char version;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned char prefix;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned char flags;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned char section;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Optpass_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct Optcache_s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct Optcache_s* next;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Optpass_t pass;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int caching;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned char flags[sizeof(OPT_FLAGS)];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Optcache_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct Optstate_s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Sfio_t* mp; /* opt_info.msg string stream */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Sfio_t* vp; /* translation string stream */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Sfio_t* xp; /* translation string stream */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Sfio_t* cp; /* compatibility string stream */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Optpass_t pass[8]; /* optjoin() list */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* argv[2]; /* initial argv copy */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* strv[3]; /* optstr() argv */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* str; /* optstr() string */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Sfio_t* strp; /* optstr() stream */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int force; /* force this style */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int pindex; /* prev index for backup */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int poffset; /* prev offset for backup */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int npass; /* # optjoin() passes */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int join; /* optjoin() pass # */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int plus; /* + ok */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int style; /* default opthelp() style */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int width; /* format line width */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int flags; /* display flags */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int emphasis; /* ansi term emphasis ok */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dtdisc_t msgdisc; /* msgdict discipline */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dt_t* msgdict; /* default ast.id catalog msgs */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Optcache_t* cache; /* OPT_cache cache */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Optstate_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define _OPT_PRIVATE_ \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char pad[2*sizeof(void*)]; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Optstate_t* state;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <error.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif