|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 8476 (0x211c)
Types: TextFile
Notes: UNIX file
Names: »sh.h«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦f4b8d8c84⟧ UNIX Filesystem
└─⟦this⟧ »cmd/rsh/sh.h«
└─⟦this⟧ »cmd/sh/sh.h«
/*
* A shell.
* Header file.
*/
#include <stdio.h>
#include <setjmp.h>
#define STRSIZE 2000 /* Maximum length of single token */
#define IALSIZE 8 /* Initial argument list size */
#define NOTREACHED return
/*
* Masks for looking up lextab.
*/
#define MNQUO 0001 /* Special in argument */
#define MDQUO 0002 /* Special in double quotes */
#define MHERE 0004 /* Special in here document */
#define MRVAR (MBVAR|MDIGI) /* Valid in regular variable name */
#define MSVAR 0010 /* Valid in special variable name */
#define MDIGI 0020 /* Is an ascii digit */
#define MBVAR 0040 /* Valid 1st char in regular var name */
#define MNAME 0100 /* Does not start a name */
#define MGLOB 0200 /* Must call glob */
/*
* Determine if a character is a member of the given class.
* (This depends of the fact that EOF == -1).
*/
#define class(c, m) (c>=EOF && c<=0177 && (lextab[1+c]&m))
/*
* Types of nodes.
*/
#define NNULL 0 /* Null */
#define NFOR 1 /* For */
#define NCASE 2 /* Case */
#define NWHILE 3 /* While */
#define NUNTIL 4 /* Until */
#define NIF 5 /* If */
#define NELSE 6 /* Else */
#define NCOMS 7 /* Command sequence */
#define NLIST 8 /* Command list */
#define NBACK 9 /* Background process */
#define NPIPE 10 /* Pipe */
#define NPARN 11 /* New shell */
#define NBRAC 12 /* Command group */
#define NANDF 13 /* Logical and operator */
#define NORF 14 /* Logical or operator */
#define NARGS 15 /* Argument string */
#define NIORS 16 /* Redirection of io */
#define NASSG 17 /* Assignment keyword */
#define NFOR2 18 /* Second part for, in list scan */
#define NCASE2 19 /* Second part case, command */
#define NCASE3 20 /* Third part case, pattern */
#define NCTRL 21 /* Control statement in list */
#define NRPIPE 22 /* Named pipe for read */
#define NWPIPE 23 /* Named pipe for write */
/*
* Node.
*/
typedef union node {
struct {
int n_type; /* Type of node */
struct node *n_next; /* Pointer to next */
struct node *n_auxp; /* Auxiliary pointer */
};
struct {
int n_type; /* Type of node */
struct node *n_next; /* Pointer to next */
char *n_strp; /* Pointer to string */
};
} NODE;
/*
* Flags in variables.
*/
#define VEXP 001 /* Variable is exported */
#define VRDO 002 /* Read only */
#define VSET 004 /* Variable is used by shell */
/*
* Enviroment list and variable structure.
*/
typedef struct var {
int v_flag; /* Flags */
struct var *v_next; /* Pointer to next entry */
char *v_strp; /* Pointer to string */
} VAR;
/*
* Buffer structure.
*/
typedef struct buf {
struct buf *b_next; /* Pointer to next */
int b_size; /* Size of buffer */
} BUF;
/*
* Per executing command data structure.
* Used for break/continue.
*/
typedef struct con {
struct con *c_next; /* Pointer to next */
NODE *c_node; /* Node which created this control */
BUF **c_bpp; /* Current free buffer */
jmp_buf c_envl; /* Enviroment list */
} CON;
/*
* Session types.
*/
#define SINIT 0 /* Initial session */
#define SARGS 1 /* String */
#define SARGV 2 /* Vector of strings */
#define SFILE 3 /* File name */
#define SSTR 4 /* Open stream */
/*
* Per session information structure.
*/
typedef struct ses {
struct ses *s_next;
int s_type;
int s_flag;
NODE *s_node;
CON *s_con;
BUF **s_bpp;
jmp_buf s_envl;
char *s_strp;
char **s_argv;
FILE *s_ifp;
} SES;
/*
* Session long jump codes
*/
#define RSET 0 /* Initial setjmp call */
#define REOF 1 /* parse matched start */
#define RCMD 2 /* parse matched command line */
#define RERR 3 /* parse matched error */
#define RINT 4 /* Interrupt recovery */
#define RNOSBRK 5 /* no more memory from alloc */
#define RSYSER 6 /* system returned -1 */
#define RUABORT 7 /* user requested error abort */
#define RUEXITS 8 /* user requested exit command */
#define RBRKCON 9 /* break or continue beyond program */
#define RNOWAY 10 /* Shell assertion failed */
/*
* Interrupt recovery and set contexts.
* Used to determine recovery action and default signals.
*/
#define IRDY 0 /* In session */
#define ILEX 1 /* Parse in progress */
#define ICMD 2 /* Prior to next command execution */
#define IEVAL 3 /* Command evaluation in progress */
#define IBACK 4 /* Background process */
#define IFORK 5 /* Child after fork */
/*
* Evaluation contexts.
*/
#define EWORD 0 /* Evaluate $N, `cmd`, strip quotes */
#define EHERE 1 /* Evaluate $N, `cmd`, ignore quotes */
#define EARGS 2 /* Evaluete $N, `cmd`, strip quotes, *?[, blanks */
#define EPATT 3 /* Evaluate for pattern match */
/*
* Global variables.
* Run time and set time flags.
*/
extern char shflags[]; /* Flag array */
extern char shfnams[]; /* Flag name array */
#define eflag shflags[0] /* Exit on non-zero status */
#define kflag shflags[1] /* All assignments into environ */
#define nflag shflags[2] /* Do not execute commands */
#define pflag shflags[3] /* Unknown */
#define tflag shflags[4] /* Exit after read/exec one command */
#define uflag shflags[5] /* Unset variables are errors */
#define vflag shflags[6] /* Print input as read */
#define xflag shflags[7] /* Print commands as executed */
#define cflag shflags[8] /* Execute argument as command */
#define iflag shflags[9] /* Be interactive shell */
#define rflag shflags[10] /* Restricted shell */
#define sflag shflags[11] /* input<&0, output>&2 */
#define lgnflag shflags[12] /* Login shell */
#define no1flag shflags[13] /* Invoked shell */
#define bckflag shflags[14] /* Background process */
#define nllflag shflags[15] /* Forked shell */
#define cmdflag shflags[16] /* Command file processor */
/* Shell status housekeeping */
extern jmp_buf restart; /* Restart execution context */
extern int sargc; /* Argument count to shell */
extern char *sarg0; /* Name shell called with */
extern char **sargv; /* Argument vector to shell */
extern char **senvp; /* Environment vector to shell */
extern char **sargp; /* Current argument to shell */
extern int nargc; /* New argument count, for command */
extern char **nargv; /* New argument vector, for command */
extern char **nenvp; /* New environment, for command */
extern char **niovp; /* Io redirection, for command */
extern NODE *nctlp; /* Control node, for command */
extern SES *sesp; /* Current session structure */
extern int yyline; /* Yacc command line counter */
extern int shpid; /* Shell's process id */
extern int slret; /* Exit status of last command */
extern int sback; /* Pid of last background command */
extern int spipe; /* Pid of last pipe process */
extern int ufmask; /* File creation mask */
/* Other internal flags. */
extern int comflag; /* Command line is complete?? */
extern int errflag; /* Set by call to printe */
extern int keyflag; /* Look for keyword in next word */
extern int noeflag; /* Turn off errors */
extern int prpflag; /* Do prompt before next read */
/* Parameters used by shell. */
extern char *vhome; /* Home directory */
extern char *vpath; /* Search pathname */
extern char *vmail; /* Mail file */
extern char *vps1; /* Prompt string 1 */
extern char *vps2; /* Prompt string 2 */
extern char *vifs; /* Internal field seperators */
extern char *vshell; /* Shell to use */
/* Shell data */
extern char strt[STRSIZE]; /* String buffer */
extern char *strp; /* Pointer in string buffer */
extern VAR *varp; /* Pointer to shell variables */
/* Tables */
extern char lextab[]; /* Character type table */
/* Data external to shell */
extern int errno; /* System call error number */
extern char *signame[]; /* Wait status message table */
/*
* Functions.
*/
extern char *shtmp(); /* in main.c */
extern char *salloc(); /* in alloc.c */
extern char *balloc(); /* in alloc.c */
extern char *duplstr(); /* in alloc.c */
extern char **makargl(); /* in alloc.c */
extern char **addargl(); /* in alloc.c */
extern BUF **savebuf(); /* in alloc.c */
extern char **vdupl(); /* in alloc.c */
extern char *any(); /* in glob.c */
extern int sigintr(); /* in trap.c */
extern VAR *findvar(); /* in var.c */
extern VAR *setsvar(); /* in var.c */
extern VAR *flagvar(); /* in var.c */
extern VAR *assnvar(); /* in var.c */
extern char *convvar(); /* in var.c */
extern char **envlvar(); /* in var.c */
extern char *index(); /* in /lib/libc.a */
extern char *strcpy(); /* in /lib/libc.a */
extern char *strncpy(); /* in /lib/libc.a */
extern char *strcat(); /* in /lib/libc.a */