date and time created 88/07/21 17:35:44 by marc
authorMarc Teitelbaum <marc@ucbvax.Berkeley.EDU>
Fri, 22 Jul 1988 08:35:44 +0000 (00:35 -0800)
committerMarc Teitelbaum <marc@ucbvax.Berkeley.EDU>
Fri, 22 Jul 1988 08:35:44 +0000 (00:35 -0800)
SCCS-vsn: local/toolchest/ksh/shlib/name.h 1.1

usr/src/local/toolchest/ksh/shlib/name.h [new file with mode: 0644]

diff --git a/usr/src/local/toolchest/ksh/shlib/name.h b/usr/src/local/toolchest/ksh/shlib/name.h
new file mode 100644 (file)
index 0000000..ae15bd8
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+
+ *      Copyright (c) 1984, 1985, 1986 AT&T
+ *      All Rights Reserved
+
+ *      THIS IS UNPUBLISHED PROPRIETARY SOURCE 
+ *      CODE OF AT&T.
+ *      The copyright notice above does not 
+ *      evidence any actual or intended
+ *      publication of such source code.
+
+ */
+/* @(#)name.h  1.1 */
+
+/* Nodes can have all kinds of values */
+union Namval
+{
+       char            *cp;
+       int             *ip;
+       char            c;
+       int             i;
+       unsigned        u;
+       long            *lp;
+       double          *dp;    /* for floating point arithmetic */
+       struct Namaray  *aray;  /* for array node */
+       union Namval    *up;    /* for indirect node */
+       struct Bfunction *fp;   /* builtin-function like $RANDOM */
+       struct Ufunction *rp;   /* shell user defined functions */
+};
+
+/* each Namnod and each array element has one of these */
+struct Nodval
+{
+        unsigned        namflg;         /* attributes */
+        union Namval    namval;         /* value field */
+};
+
+/* This is an array template */
+struct Namaray
+{
+       unsigned short          adot;           /* index of last reference */
+       unsigned short          maxi;           /* maximum index of array */
+        struct Nodval  *val[1];        /* array of value holders */
+};
+
+/* This is a template for a storage tree */
+struct Amemory
+{
+       struct Amemory  *nexttree;      /* search trees can be chained */
+        short           memsize;        /* number of listheads */
+        struct Namnod   *memhead[1];    /* listhead pointers   */
+};
+
+/* This describes a named node */
+struct Namnod
+{
+        struct Nodval   value;          /* determines value of the item */
+       struct Namnod   *namnxt;        /* pointer to next Namnod  */
+       char            *namid;         /* pointer to name of item */
+       short           namsz;          /* size of item */
+};
+
+/* This describes a builtin function node */
+struct Bfunction
+{
+       long    (*f_vp)();              /* value function */
+       int     (*f_ap)();              /* assignment function */
+};
+
+/* This describes a user defined function node */
+struct Ufunction
+{
+       long    hoffset;                /* offset into history file */
+       int     **ptree;                /* address of parse tree */
+};
+
+#define MEMSIZE   32*sizeof(int)       /* default memory size for shell.
+                                               Must be a power of 2 */
+#define PSEPS  ":"
+#define ARRMAX   512   /* maximum number of elements in an array */
+#define ARRINCR    16  /* number of elements to grow when array bound exceeded 
+                                Must be a power of 2 */
+#define MAXTREES   20  /* maximum number of mounted search trees */
+
+#define NO_SUBSCRIPT   ARRMAX  /* subscript not defined */
+#ifndef NULL
+#define NULL   0
+#endif
+
+/* types of namenode items */
+
+#define N_DEFAULT 0
+#define INT_GER                I_FLAG  /* integer type */
+#define CPOIN_TER      W_FLAG
+#define N_AVAIL                B_FLAG  /* node is logically non-existent, blocked */
+#define C_WRITE                C_FLAG  /* make copy of node on assignment */
+#define ARRAY          F_FLAG  /* node is an array */
+#define IN_DIR         P_FLAG  /* value is a pointer to a value node */
+#define N_ALLOC                V_FLAG  /* don't allocate space for the value */
+#define N_FREE         S_FLAG  /* don't free the space when releasing value */
+#define T_FORM         T_FLAG  /* program usable tflag */
+#define L_TO_U         U_FLAG  /* convert to uppercase */
+#define U_TO_L         L_FLAG  /* convert to lowercase */
+#define Z_FILL         Z_FLAG  /* right justify and fill with leading zeros */
+#define R_JUST         W_FLAG  /* right justify and blank fill */
+#define L_JUST         O_FLAG  /* left justify and blank fill */
+#define HOST_N         M_FLAG  /* convert to host file name in non-unix */
+#define N_EXPORT       X_FLAG  /* export bit */
+#define N_RDONLY       R_FLAG  /* readonly bit */
+#define N_IMPORT       N_FLAG  /* imported from environment */
+
+
+/* The following are used with INT_FLG */
+#define        BLT_NOD M_FLAG          /* builtin function flag */
+#define OC_TAL O_FLAG
+#define UN_SIGN        U_FLAG
+
+#define is_afunction(n)        (((n)->value.namflg&(~(N_EXPORT|T_FLAG)))==(INT_GER|L_FLAG))
+#define        funtree(n)      ((n)->value.namval.rp->ptree)
+#define NO_ALIAS       (L_TO_U|U_TO_L|N_FLAG)
+
+
+/* namenode states */
+
+#define NO_ERR_ 0
+#define SANERR  E_FLAG
+
+#define ADD_NOD        1 /* add node if not found */
+#define CHK_FOR        2 /* look for only if valid name */
+#define        RE_USE  4 /* used for efficiency in multitree searches */
+
+/* NAMNOD MACROS */
+
+/* ...  for arrays */
+
+#define arayp(v)        (v->value.namval.aray)
+#define curdot(n)      ((arayp(n))->adot)
+#define abound(n)       ((int)((n)->value.namval.aray->maxi))
+#ifdef KSHELL
+#define setdot(n,i)     ((n)->value.namval.aray->adot = i)
+#endif /* KSHELL */
+
+/* ... for attributes */
+
+#define namflag(n)     (n)->value.namflg
+#define attest(n,f)     (namflag(n) & (f))
+#ifdef KSHELL
+#define attrib(n,f)    ((n)->value.namflg |= f)
+#define sattrib(n,f)   ((n)->value.namflg = f)
+#define pattrib(n,f)   ((n)->value.namflg &= f)
+#else
+#define attrib(n,f)     (chattrib (n, namflag(n)|(f)))
+#define sattrib(n,f)    (chattrib (n, f))
+#define pattrib(n,f)    (chattrib (n, namflag(n)&(f)))
+#endif /* KSHELL */
+
+/* ... etc */
+
+#define isnull(n)       ((n)->value.namval.cp == NULL)  /* strings only */
+#define freeble(nv)     (((int)(nv)) & 01)
+#define mrkfree(nv)     ((struct Nodval*)(((int)(nv)) | 01))
+#define unmark(nv)      ((struct Nodval*)(((int)(nv)) & ~01))
+#define errorp(np)     ((np)->namerr)
+#define asscadr(np,val)        assiadr(np,((int*)(val)))
+
+extern char synmsg[];
+extern char subscript[];
+extern char badnum[];
+extern char badparam[];
+extern char divzero[];
+extern char hdigits[];
+extern char wtfailed[];
+extern char notid[];
+extern struct Amemory *namep;
+extern int lastbase;