nval.h revision 34f9b3eef6fdadbda0a846aa4d68691ac40eace5
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* : : generated by proto : : */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz* Copyright (c) 1982-2009 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* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if !defined(__PROTO__)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if !defined(__LINKAGE__)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * David Korn
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Labs
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Interface definitions of structures for name-value pairs
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * These structures are used for named variables, functions and aliases
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* for compatibility with old hash library */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * This defines the template for nodes that have their own assignment
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * and or lookup functions
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin void (*putval) __PROTO__((Namval_t*, const char*, int, Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Sfdouble_t (*getnum) __PROTO__((Namval_t*, Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *(*setdisc) __PROTO__((Namval_t*, const char*, Namval_t*, Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Namval_t *(*createf) __PROTO__((Namval_t*, const char*, int, Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Namfun_t *(*clonef) __PROTO__((Namval_t*, Namval_t*, int, Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Namval_t *(*nextf) __PROTO__((Namval_t*, Dt_t*, Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int (*readf) __PROTO__((Namval_t*, Sfio_t*, int, Namfun_t*));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin int (*writef) __PROTO__((Namval_t*, Sfio_t*, int, Namfun_t*));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin unsigned char subshell;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned short dsize;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const char **bnames;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* This is an array template header */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin __V_ *(*fun) __PROTO__((Namval_t*,const char*,int)); /* associative arrays */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin/* The context pointer for declaration command */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const char *optstring;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* attributes of name-value node attribute flags */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* This defines the attributes for an attributed name-value pair node */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* _NV_PRIVATE */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define NV_DATA "_" /* special class or instance variable */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_MINSZ (sizeof(struct Namval)-sizeof(Dtlink_t)-sizeof(char*))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define nv_namptr(p,n) ((Namval_t*)((char*)(p)+(n)*NV_MINSZ-sizeof(Dtlink_t)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* The following attributes are for internal use */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_NOFREE 0x200 /* don't free the space when releasing value */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_IMPORT 0x1000 /* value imported from environment */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_MINIMAL NV_IMPORT /* node does not contain all fields */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* The following attributes are valid only when NV_INTEGER is off */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_ZFILL 0x10 /* right justify and fill with leading zeros */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_RJUST 0x20 /* right justify and blank fill */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_HOST (NV_RJUST|NV_LJUST) /* map to host filename */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* The following attributes do not effect the value */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* The following are used with NV_INTEGER */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_SHORT (NV_RJUST) /* when integers are not long */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_LONG (NV_UTOL) /* for long long and long double */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_UNSIGN (NV_LTOU) /* for unsigned quantities */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define NV_DOUBLE (NV_INTEGER|NV_ZFILL) /* for floating point */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_EXPNOTE (NV_LJUST) /* for scientific notation */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define NV_HEXFLOAT (NV_LTOU) /* for C99 base16 float notation */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* options for nv_open */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define NV_MOVE 0x8000000 /* for use with nv_clone */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* add node if not found */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_ASSIGN NV_NOFREE /* assignment is possible */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_NOARRAY 0x200000 /* array name not possible */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_VARNAME 0x20000 /* name must be ?(.)id*(.id) */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_NOSCOPE 0x80000 /* look only in current scope */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_NOFAIL 0x100000 /* return 0 on failure, no msg */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define NV_BLTINOPT NV_ZFILL /* mark builtins in libcmd */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_PUBLIC (~(NV_NOSCOPE|NV_ASSIGN|NV_IDENT|NV_VARNAME|NV_NOADD))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* numeric types */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define NV_UINT16P (NV_LJUSTNV_UNSIGN|NV_SHORT|NV_INTEGER)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* name-value pair macros */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* The following are operations for associative arrays */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_ACURRENT 7 /* return current subscript Namval_t* */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* The following are for nv_disc */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* The following are operations for nv_putsub() */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ARRAY_ADD (1L<<ARRAY_BITS) /* add subscript if not found */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ARRAY_SCAN (2L<<ARRAY_BITS) /* For ${array[@]} */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* These are disciplines provided by the library for use with nv_discfun */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NV_DCRESTRICT 1 /* variable that are restricted in rsh */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# endif /* _BLD_shell */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* _DLL */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* prototype for array interface*/
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ Namarr_t *nv_arrayptr __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namarr_t *nv_setarray __PROTO__((Namval_t*,__V_*(*)(Namval_t*,const char*,int)));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ int nv_arraynsub __PROTO__((Namarr_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ __V_ *nv_associative __PROTO__((Namval_t*,const char*,int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ int nv_nextsub __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ char *nv_getsub __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namval_t *nv_putsub __PROTO__((Namval_t*, char*, long));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namval_t *nv_opensub __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* name-value pair function prototypes */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ int nv_adddisc __PROTO__((Namval_t*, const char**, Namval_t**));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ int nv_clone __PROTO__((Namval_t*, Namval_t*, int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ __V_ *nv_context __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namval_t *nv_create __PROTO__((const char*, Dt_t*, int,Namfun_t*));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ void nv_delete __PROTO__((Namval_t*, Dt_t*, int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Sfdouble_t nv_getn __PROTO__((Namval_t*, Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Sfdouble_t nv_getnum __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ char *nv_getv __PROTO__((Namval_t*, Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ char *nv_getval __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namfun_t *nv_hasdisc __PROTO__((Namval_t*, const Namdisc_t*));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ Namfun_t *nv_isvtree __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namval_t *nv_lastdict __PROTO__((void));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ Namval_t *nv_mkinttype __PROTO__((char*, size_t, int, const char*, Namdisc_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ void nv_newattr __PROTO__((Namval_t*,unsigned,int));
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzextern __MANGLE__ void nv_newtype __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namval_t *nv_open __PROTO__((const char*,Dt_t*,int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ void nv_putval __PROTO__((Namval_t*,const char*,int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ void nv_putv __PROTO__((Namval_t*,const char*,int,Namfun_t*));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ int nv_rename __PROTO__((Namval_t*,int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ int nv_scan __PROTO__((Dt_t*,void(*)(Namval_t*,__V_*),__V_*,int,int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ char *nv_setdisc __PROTO__((Namval_t*,const char*,Namval_t*,Namfun_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ void nv_setref __PROTO__((Namval_t*, Dt_t*,int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ int nv_settype __PROTO__((Namval_t*, Namval_t*, int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ void nv_setvec __PROTO__((Namval_t*,int,int,char*[]));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ void nv_setvtree __PROTO__((Namval_t*));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ int nv_setsize __PROTO__((Namval_t*,int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namfun_t *nv_disc __PROTO__((Namval_t*,Namfun_t*,int));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ void nv_unset __PROTO__((Namval_t*)); /*obsolete */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ void _nv_unset __PROTO__((Namval_t*,int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namval_t *nv_search __PROTO__((const char *, Dt_t*, int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ Namval_t *nv_type __PROTO__((Namval_t*));
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern __MANGLE__ void nv_addtype __PROTO__((Namval_t*,const char*, Optdisc_t*, size_t));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern __MANGLE__ const Namdisc_t *nv_discfun __PROTO__((int));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* _DLL */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * The names of many functions were changed in early '95
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Here is a mapping to the old names
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define nv_search(np,a,b) nv_open(np,a,((b)?0:NV_NOADD))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* NV_DEFAULT */