xref: /original-bsd/local/toolchest/ksh/sh/name.h (revision 33b18212)
1 /*
2 
3  *      Copyright (c) 1984, 1985, 1986 AT&T
4  *      All Rights Reserved
5 
6  *      THIS IS UNPUBLISHED PROPRIETARY SOURCE
7  *      CODE OF AT&T.
8  *      The copyright notice above does not
9  *      evidence any actual or intended
10  *      publication of such source code.
11 
12  */
13 /* @(#)name.h	1.1 */
14 
15 /* Nodes can have all kinds of values */
16 union Namval
17 {
18 	char		*cp;
19 	int		*ip;
20 	char		c;
21 	int		i;
22 	unsigned	u;
23 	long		*lp;
24 	double		*dp;	/* for floating point arithmetic */
25 	struct Namaray	*aray;	/* for array node */
26 	union Namval	*up;	/* for indirect node */
27 	struct Bfunction *fp;	/* builtin-function like $RANDOM */
28 	struct Ufunction *rp;	/* shell user defined functions */
29 };
30 
31 /* each Namnod and each array element has one of these */
32 struct Nodval
33 {
34         unsigned        namflg;         /* attributes */
35         union Namval    namval;         /* value field */
36 };
37 
38 /* This is an array template */
39 struct Namaray
40 {
41 	unsigned short		adot;		/* index of last reference */
42 	unsigned short		maxi;		/* maximum index of array */
43         struct Nodval	*val[1];	/* array of value holders */
44 };
45 
46 /* This is a template for a storage tree */
47 struct Amemory
48 {
49 	struct Amemory  *nexttree;	/* search trees can be chained */
50         short           memsize;        /* number of listheads */
51         struct Namnod   *memhead[1];    /* listhead pointers   */
52 };
53 
54 /* This describes a named node */
55 struct Namnod
56 {
57         struct Nodval   value;          /* determines value of the item */
58 	struct Namnod	*namnxt;	/* pointer to next Namnod  */
59 	char		*namid;		/* pointer to name of item */
60 	short 		namsz;		/* size of item */
61 };
62 
63 /* This describes a builtin function node */
64 struct Bfunction
65 {
66 	long	(*f_vp)();		/* value function */
67 	int	(*f_ap)();		/* assignment function */
68 };
69 
70 /* This describes a user defined function node */
71 struct Ufunction
72 {
73 	long	hoffset;		/* offset into history file */
74 	int	**ptree;		/* address of parse tree */
75 };
76 
77 #define MEMSIZE   32*sizeof(int)	/* default memory size for shell.
78 						Must be a power of 2 */
79 #define PSEPS	":"
80 #define ARRMAX   512	/* maximum number of elements in an array */
81 #define ARRINCR    16	/* number of elements to grow when array bound exceeded
82 				 Must be a power of 2 */
83 #define MAXTREES   20	/* maximum number of mounted search trees */
84 
85 #define NO_SUBSCRIPT	ARRMAX	/* subscript not defined */
86 #ifndef NULL
87 #define NULL	0
88 #endif
89 
90 /* types of namenode items */
91 
92 #define N_DEFAULT 0
93 #define INT_GER		I_FLAG	/* integer type */
94 #define CPOIN_TER	W_FLAG
95 #define N_AVAIL		B_FLAG	/* node is logically non-existent, blocked */
96 #define C_WRITE		C_FLAG	/* make copy of node on assignment */
97 #define ARRAY		F_FLAG	/* node is an array */
98 #define IN_DIR		P_FLAG	/* value is a pointer to a value node */
99 #define N_ALLOC		V_FLAG	/* don't allocate space for the value */
100 #define N_FREE		S_FLAG	/* don't free the space when releasing value */
101 #define T_FORM		T_FLAG	/* program usable tflag */
102 #define L_TO_U		U_FLAG	/* convert to uppercase */
103 #define U_TO_L		L_FLAG	/* convert to lowercase */
104 #define Z_FILL		Z_FLAG	/* right justify and fill with leading zeros */
105 #define R_JUST		W_FLAG	/* right justify and blank fill */
106 #define L_JUST		O_FLAG	/* left justify and blank fill */
107 #define HOST_N		M_FLAG	/* convert to host file name in non-unix */
108 #define N_EXPORT	X_FLAG	/* export bit */
109 #define N_RDONLY	R_FLAG	/* readonly bit */
110 #define N_IMPORT	N_FLAG	/* imported from environment */
111 
112 
113 /* The following are used with INT_FLG */
114 #define	BLT_NOD	M_FLAG		/* builtin function flag */
115 #define OC_TAL	O_FLAG
116 #define UN_SIGN	U_FLAG
117 
118 #define is_afunction(n)	(((n)->value.namflg&(~(N_EXPORT|T_FLAG)))==(INT_GER|L_FLAG))
119 #define	funtree(n)	((n)->value.namval.rp->ptree)
120 #define NO_ALIAS	(L_TO_U|U_TO_L|N_FLAG)
121 
122 
123 /* namenode states */
124 
125 #define NO_ERR_ 0
126 #define SANERR  E_FLAG
127 
128 #define ADD_NOD	1 /* add node if not found */
129 #define CHK_FOR	2 /* look for only if valid name */
130 #define	RE_USE	4 /* used for efficiency in multitree searches */
131 
132 /* NAMNOD MACROS */
133 
134 /* ...  for arrays */
135 
136 #define arayp(v)        (v->value.namval.aray)
137 #define curdot(n)	((arayp(n))->adot)
138 #define abound(n)       ((int)((n)->value.namval.aray->maxi))
139 #ifdef KSHELL
140 #define setdot(n,i)     ((n)->value.namval.aray->adot = i)
141 #endif	/* KSHELL */
142 
143 /* ... for attributes */
144 
145 #define namflag(n)	(n)->value.namflg
146 #define attest(n,f)     (namflag(n) & (f))
147 #ifdef KSHELL
148 #define attrib(n,f)	((n)->value.namflg |= f)
149 #define sattrib(n,f)	((n)->value.namflg = f)
150 #define pattrib(n,f)	((n)->value.namflg &= f)
151 #else
152 #define attrib(n,f)     (chattrib (n, namflag(n)|(f)))
153 #define sattrib(n,f)    (chattrib (n, f))
154 #define pattrib(n,f)    (chattrib (n, namflag(n)&(f)))
155 #endif	/* KSHELL */
156 
157 /* ... etc */
158 
159 #define isnull(n)       ((n)->value.namval.cp == NULL)  /* strings only */
160 #define freeble(nv)     (((int)(nv)) & 01)
161 #define mrkfree(nv)     ((struct Nodval*)(((int)(nv)) | 01))
162 #define unmark(nv)      ((struct Nodval*)(((int)(nv)) & ~01))
163 #define errorp(np)     ((np)->namerr)
164 #define asscadr(np,val)	assiadr(np,((int*)(val)))
165 
166 extern char synmsg[];
167 extern char subscript[];
168 extern char badnum[];
169 extern char badparam[];
170 extern char divzero[];
171 extern char hdigits[];
172 extern char wtfailed[];
173 extern char notid[];
174 extern struct Amemory *namep;
175 extern int lastbase;
176