diff options
Diffstat (limited to 'usr/src/lib/libshell/common/include/nval.h')
-rw-r--r-- | usr/src/lib/libshell/common/include/nval.h | 311 |
1 files changed, 0 insertions, 311 deletions
diff --git a/usr/src/lib/libshell/common/include/nval.h b/usr/src/lib/libshell/common/include/nval.h deleted file mode 100644 index d4eb243c42..0000000000 --- a/usr/src/lib/libshell/common/include/nval.h +++ /dev/null @@ -1,311 +0,0 @@ -/*********************************************************************** -* * -* This software is part of the ast package * -* Copyright (c) 1982-2010 AT&T Intellectual Property * -* and is licensed under the * -* Common Public License, Version 1.0 * -* by AT&T Intellectual Property * -* * -* 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 * -* * -* David Korn <dgk@research.att.com> * -* * -***********************************************************************/ -#pragma prototyped -#ifndef NV_DEFAULT -/* - * David Korn - * AT&T Labs - * - * Interface definitions of structures for name-value pairs - * These structures are used for named variables, functions and aliases - * - */ - - -#include <ast.h> -#include <cdt.h> -#include <option.h> - -/* for compatibility with old hash library */ -#define Hashtab_t Dt_t -#define HASH_BUCKET 1 -#define HASH_NOSCOPE 2 -#define HASH_SCOPE 4 -#define hashscope(x) dtvnext(x) - -typedef struct Namval Namval_t; -typedef struct Namfun Namfun_t; -typedef struct Namdisc Namdisc_t; -typedef struct Nambfun Nambfun_t; -typedef struct Namarray Namarr_t; -typedef struct Namdecl Namdecl_t; - -/* - * This defines the template for nodes that have their own assignment - * and or lookup functions - */ -struct Namdisc -{ - size_t dsize; - void (*putval)(Namval_t*, const char*, int, Namfun_t*); - char *(*getval)(Namval_t*, Namfun_t*); - Sfdouble_t (*getnum)(Namval_t*, Namfun_t*); - char *(*setdisc)(Namval_t*, const char*, Namval_t*, Namfun_t*); - Namval_t *(*createf)(Namval_t*, const char*, int, Namfun_t*); - Namfun_t *(*clonef)(Namval_t*, Namval_t*, int, Namfun_t*); - char *(*namef)(Namval_t*, Namfun_t*); - Namval_t *(*nextf)(Namval_t*, Dt_t*, Namfun_t*); - Namval_t *(*typef)(Namval_t*, Namfun_t*); - int (*readf)(Namval_t*, Sfio_t*, int, Namfun_t*); - int (*writef)(Namval_t*, Sfio_t*, int, Namfun_t*); -}; - -struct Namfun -{ - const Namdisc_t *disc; - char nofree; - unsigned char subshell; - unsigned short dsize; - Namfun_t *next; - char *last; - Namval_t *type; -}; - -struct Nambfun -{ - Namfun_t fun; - int num; - const char **bnames; - Namval_t *bltins[1]; -}; - -/* This is an array template header */ -struct Namarray -{ - Namfun_t hdr; - long nelem; /* number of elements */ - void *(*fun)(Namval_t*,const char*,int); /* associative arrays */ - Namval_t *parent; /* for multi-dimensional */ - Dt_t *table; /* for subscripts */ - void *scope; /* non-zerp when scoped */ -}; - -/* The context pointer for declaration command */ -struct Namdecl -{ - Namval_t *tp; /* point to type */ - const char *optstring; - void *optinfof; -}; - -/* attributes of name-value node attribute flags */ - -#define NV_DEFAULT 0 -/* This defines the attributes for an attributed name-value pair node */ -struct Namval -{ - Dtlink_t nvlink; /* space for cdt links */ - char *nvname; /* pointer to name of the node */ - unsigned short nvflag; /* attributes */ - unsigned short nvsize; /* size or base */ -#ifdef _NV_PRIVATE - _NV_PRIVATE -#else - Namfun_t *nvfun; - char *nvalue; - char *nvprivate; -#endif /* _NV_PRIVATE */ -}; - -#define NV_CLASS ".sh.type" -#define NV_DATA "_" /* special class or instance variable */ -#define NV_MINSZ (sizeof(struct Namval)-sizeof(Dtlink_t)-sizeof(char*)) -#define nv_namptr(p,n) ((Namval_t*)((char*)(p)+(n)*NV_MINSZ-sizeof(Dtlink_t))) - -/* The following attributes are for internal use */ -#define NV_NOFREE 0x200 /* don't free the space when releasing value */ -#define NV_ARRAY 0x400 /* node is an array */ -#define NV_REF 0x4000 /* reference bit */ -#define NV_TABLE 0x800 /* node is a dictionary table */ -#define NV_IMPORT 0x1000 /* value imported from environment */ -#define NV_MINIMAL NV_IMPORT /* node does not contain all fields */ - -#define NV_INTEGER 0x2 /* integer attribute */ -/* The following attributes are valid only when NV_INTEGER is off */ -#define NV_LTOU 0x4 /* convert to uppercase */ -#define NV_UTOL 0x8 /* convert to lowercase */ -#define NV_ZFILL 0x10 /* right justify and fill with leading zeros */ -#define NV_RJUST 0x20 /* right justify and blank fill */ -#define NV_LJUST 0x40 /* left justify and blank fill */ -#define NV_BINARY 0x100 /* fixed size data buffer */ -#define NV_RAW NV_LJUST /* used only with NV_BINARY */ -#define NV_HOST (NV_RJUST|NV_LJUST) /* map to host filename */ - -/* The following attributes do not effect the value */ -#define NV_RDONLY 0x1 /* readonly bit */ -#define NV_EXPORT 0x2000 /* export bit */ -#define NV_TAGGED 0x8000 /* user define tag bit */ - -/* The following are used with NV_INTEGER */ -#define NV_SHORT (NV_RJUST) /* when integers are not long */ -#define NV_LONG (NV_UTOL) /* for long long and long double */ -#define NV_UNSIGN (NV_LTOU) /* for unsigned quantities */ -#define NV_DOUBLE (NV_INTEGER|NV_ZFILL) /* for floating point */ -#define NV_EXPNOTE (NV_LJUST) /* for scientific notation */ -#define NV_HEXFLOAT (NV_LTOU) /* for C99 base16 float notation */ - -/* options for nv_open */ - -#define NV_APPEND 0x10000 /* append value */ -#define NV_MOVE 0x8000000 /* for use with nv_clone */ -#define NV_ADD 8 - /* add node if not found */ -#define NV_ASSIGN NV_NOFREE /* assignment is possible */ -#define NV_NOASSIGN 0 /* backward compatibility */ -#define NV_NOARRAY 0x200000 /* array name not possible */ -#define NV_IARRAY 0x400000 /* for indexed array */ -#define NV_NOREF NV_REF /* don't follow reference */ -#define NV_IDENT 0x80 /* name must be identifier */ -#define NV_VARNAME 0x20000 /* name must be ?(.)id*(.id) */ -#define NV_NOADD 0x40000 /* do not add node */ -#define NV_NOSCOPE 0x80000 /* look only in current scope */ -#define NV_NOFAIL 0x100000 /* return 0 on failure, no msg */ -#define NV_NODISC NV_IDENT /* ignore disciplines */ - -#define NV_FUNCT NV_IDENT /* option for nv_create */ -#define NV_BLTINOPT NV_ZFILL /* mark builtins in libcmd */ - -#define NV_PUBLIC (~(NV_NOSCOPE|NV_ASSIGN|NV_IDENT|NV_VARNAME|NV_NOADD)) - -/* numeric types */ -#define NV_INT16P (NV_LJUST|NV_SHORT|NV_INTEGER) -#define NV_INT16 (NV_SHORT|NV_INTEGER) -#define NV_UINT16 (NV_UNSIGN|NV_SHORT|NV_INTEGER) -#define NV_UINT16P (NV_LJUSTNV_UNSIGN|NV_SHORT|NV_INTEGER) -#define NV_INT32 (NV_INTEGER) -#define NV_UNT32 (NV_UNSIGN|NV_INTEGER) -#define NV_INT64 (NV_LONG|NV_INTEGER) -#define NV_UINT64 (NV_UNSIGN|NV_LONG|NV_INTEGER) -#define NV_FLOAT (NV_SHORT|NV_DOUBLE) -#define NV_LDOUBLE (NV_LONG|NV_DOUBLE) - -/* name-value pair macros */ -#define nv_isattr(np,f) ((np)->nvflag & (f)) -#define nv_onattr(n,f) ((n)->nvflag |= (f)) -#define nv_offattr(n,f) ((n)->nvflag &= ~(f)) -#define nv_isarray(np) (nv_isattr((np),NV_ARRAY)) - -/* The following are operations for associative arrays */ -#define NV_AINIT 1 /* initialize */ -#define NV_AFREE 2 /* free array */ -#define NV_ANEXT 3 /* advance to next subscript */ -#define NV_ANAME 4 /* return subscript name */ -#define NV_ADELETE 5 /* delete current subscript */ -#define NV_AADD 6 /* add subscript if not found */ -#define NV_ACURRENT 7 /* return current subscript Namval_t* */ -#define NV_ASETSUB 8 /* set current subscript */ - -/* The following are for nv_disc */ -#define NV_FIRST 1 -#define NV_LAST 2 -#define NV_POP 3 -#define NV_CLONE 4 - -/* The following are operations for nv_putsub() */ -#define ARRAY_BITS 22 -#define ARRAY_ADD (1L<<ARRAY_BITS) /* add subscript if not found */ -#define ARRAY_SCAN (2L<<ARRAY_BITS) /* For ${array[@]} */ -#define ARRAY_UNDEF (4L<<ARRAY_BITS) /* For ${array} */ - - -/* These are disciplines provided by the library for use with nv_discfun */ -#define NV_DCADD 0 /* used to add named disciplines */ -#define NV_DCRESTRICT 1 /* variable that are restricted in rsh */ - -#if defined(__EXPORT__) && defined(_DLL) -# ifdef _BLD_shell -# define extern __EXPORT__ -# else -# define extern __IMPORT__ -# endif /* _BLD_shell */ -#endif /* _DLL */ -/* prototype for array interface*/ -extern Namarr_t *nv_arrayptr(Namval_t*); -extern Namarr_t *nv_setarray(Namval_t*,void*(*)(Namval_t*,const char*,int)); -extern int nv_arraynsub(Namarr_t*); -extern void *nv_associative(Namval_t*,const char*,int); -extern int nv_aindex(Namval_t*); -extern int nv_nextsub(Namval_t*); -extern char *nv_getsub(Namval_t*); -extern Namval_t *nv_putsub(Namval_t*, char*, long); -extern Namval_t *nv_opensub(Namval_t*); - -/* name-value pair function prototypes */ -extern int nv_adddisc(Namval_t*, const char**, Namval_t**); -extern int nv_clone(Namval_t*, Namval_t*, int); -extern void nv_close(Namval_t*); -extern void *nv_context(Namval_t*); -extern Namval_t *nv_create(const char*, Dt_t*, int,Namfun_t*); -extern void nv_delete(Namval_t*, Dt_t*, int); -extern Dt_t *nv_dict(Namval_t*); -extern Sfdouble_t nv_getn(Namval_t*, Namfun_t*); -extern Sfdouble_t nv_getnum(Namval_t*); -extern char *nv_getv(Namval_t*, Namfun_t*); -extern char *nv_getval(Namval_t*); -extern Namfun_t *nv_hasdisc(Namval_t*, const Namdisc_t*); -extern int nv_isnull(Namval_t*); -extern Namfun_t *nv_isvtree(Namval_t*); -extern Namval_t *nv_lastdict(void); -extern Namval_t *nv_mkinttype(char*, size_t, int, const char*, Namdisc_t*); -extern void nv_newattr(Namval_t*,unsigned,int); -extern void nv_newtype(Namval_t*); -extern Namval_t *nv_open(const char*,Dt_t*,int); -extern void nv_putval(Namval_t*,const char*,int); -extern void nv_putv(Namval_t*,const char*,int,Namfun_t*); -extern int nv_rename(Namval_t*,int); -extern int nv_scan(Dt_t*,void(*)(Namval_t*,void*),void*,int,int); -extern char *nv_setdisc(Namval_t*,const char*,Namval_t*,Namfun_t*); -extern void nv_setref(Namval_t*, Dt_t*,int); -extern int nv_settype(Namval_t*, Namval_t*, int); -extern void nv_setvec(Namval_t*,int,int,char*[]); -extern void nv_setvtree(Namval_t*); -extern int nv_setsize(Namval_t*,int); -extern Namfun_t *nv_disc(Namval_t*,Namfun_t*,int); -extern void nv_unset(Namval_t*); /*obsolete */ -extern void _nv_unset(Namval_t*,int); -extern Namval_t *nv_search(const char *, Dt_t*, int); -extern char *nv_name(Namval_t*); -extern Namval_t *nv_type(Namval_t*); -extern void nv_addtype(Namval_t*,const char*, Optdisc_t*, size_t); -extern const Namdisc_t *nv_discfun(int); - -#ifdef _DLL -# undef extern -#endif /* _DLL */ - -#define nv_unset(np) _nv_unset(np,0) -#define nv_size(np) nv_setsize((np),-1) -#define nv_stack(np,nf) nv_disc(np,nf,0) - -#if 0 -/* - * The names of many functions were changed in early '95 - * Here is a mapping to the old names - */ -# define nv_istype(np) nv_isattr(np) -# define nv_newtype(np) nv_newattr(np) -# define nv_namset(np,a,b) nv_open(np,a,b) -# define nv_free(np) nv_unset(np,0) -# define nv_settype(np,a,b,c) nv_setdisc(np,a,b,c) -# define nv_search(np,a,b) nv_open(np,a,((b)?0:NV_NOADD)) -# define settype setdisc -#endif - -#endif /* NV_DEFAULT */ |