home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
gnu
/
pdksh-src.lha
/
src
/
amiga
/
pdksh
/
sh
/
table.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-12-01
|
4KB
|
118 lines
/* $Id: table.h,v 1.2 1992/04/25 08:33:28 sjg Exp $ */
/*
* generic hashed associative table for commands and variables.
*/
struct table {
Area *areap; /* area to allocate entries */
int size, free; /* hash size (always 2^^n), free entries */
struct tbl **tbls; /* hashed table items */
};
struct tbl { /* table item */
int flag; /* flags */
int type; /* command type or base, see below */
union {
char *s; /* string */
long i; /* integer */
int (*f) ARGS ((char**)); /* int function */
struct op *t; /* "function" tree */
} val; /* value */
char name[4]; /* name -- variable length */
};
/* flag bits */
#define ALLOC BIT(0) /* val.s has been allocated */
#define DEFINED BIT(1) /* is defined in block */
#define ISSET BIT(2) /* has value, vp->val.[si] */
#define SPECIAL BIT(3) /* PATH, IFS, SECONDS, etc */
#define INTEGER BIT(4) /* val.i contains integer value */
#define RDONLY BIT(8) /* read-only variable */
#define EXPORT BIT(9) /* exported variable */
#define LOCAL BIT(10) /* for local typeset() */
#define TRACE BIT(11) /* trace (-t) */
#define FUNCT BIT(12) /* function */
#define EXPALIAS BIT(13) /* expanding this alias */
/* command types */
#define CNONE 0 /* undefined */
#define CSHELL 1 /* built-in */
#define CFUNC 2 /* function */
#define CEXEC 4 /* executable command */
#define CALIAS 5 /* alias */
#define CKEYWD 6 /* keyword */
void tinit ARGS((struct table *, Area *)); /* initialize table */
unsigned int hash(); /* name hash function */
struct tbl *tsearch(); /* table lookup primative */
struct tbl *tenter(); /* table lookup/enter primative */
void tdelete(); /* mark tbl entry for deletion */
void twalk(); /* initialize walk of table */
struct tbl *tnext(); /* walk table returning table time */
struct tbl **tsort(); /* sort table entries by name */
/*
* activation record for function blocks
*/
struct block {
Area area; /* area to allocate things */
int argc; /* current $# */
char ** argv; /* current $* */
struct table vars; /* local variables */
struct table funs; /* local functions */
#if 1
char * error; /* error handler */
char * exit; /* exit handler */
#else
struct trap error, exit;
#endif
struct block *next; /* enclosing block */
};
Extern struct block globals; /* global variables and functions */
Extern struct table commands; /* hashed commands */
Extern struct table builtins; /* built-in commands */
Extern struct table lexicals; /* keywords and aliases */
Extern struct table homedirs; /* homedir() cache */
struct builtin {
char *name;
int (*func)();
};
/* these really are externs! Look in table.c for them */
extern const struct builtin shbuiltins [], kshbuiltins [];
/* var spec values */
#define V_NONE 0
#define V_PATH 1
#define V_IFS 2
#define V_SECONDS 3
#define V_OPTIND 4
#define V_MAIL 5
#define V_MAILPATH 6
#define V_RANDOM 7
Extern Area *lastarea; /* area of last variable/function looked up */
Extern char *path; /* PATH value */
Extern char *prompt; /* PS1 or PS2 */
void newblock();
void popblock();
struct tbl *global(/* char *s */);
struct tbl *local(/* char *s */);
struct tbl *typeset(/* char *var; int set, clr */);
struct tbl *setvar(/* struct tbl *vdst, *vsrc */);
struct tbl *strint(/* struct tbl *vdst, *vsrc */);
long intval(/* struct tbl *vp */);
void setint(/* struct tbl *vp; long n */);
char *strval(/* struct tbl *vp */);
void setstr(/* struct tbl *vp; char *s */);
void unset(/* struct tbl *vp */);
int import(/* char *s */);
char **makenv();
int isassign(/* char *s */);