jehanne/sys/src/cmd/rc/rc.h

158 lines
3.7 KiB
C

/*
* This file is part of the UCB release of Plan 9. It is subject to the license
* terms in the LICENSE file found in the top-level directory of this
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
* part of the UCB release of Plan 9, including this file, may be copied,
* modified, propagated, or distributed except according to the terms contained
* in the LICENSE file.
*/
/* Portions of this file are Copyright (C) 9front's team.
* See /doc/license/9front-mit for details about the licensing.
* See http://git.9front.org/plan9front/plan9front/HEAD/info.html for a list of authors.
*/
#include <u.h>
#include <lib9.h>
#include <envvars.h>
#define ENV_RCARGLIST "*"
#define ENV_RCNAME "rcname"
#define ENV_RCCMD "rccmd"
#define NSIG 32
#define SIGINT 2
#define SIGQUIT 3
#define YYMAXDEPTH 500
#ifndef YYPREFIX
#ifndef PAREN
#include "x.tab.h"
#endif
#endif
typedef struct tree tree;
typedef struct word word;
typedef struct io io;
typedef union code code;
typedef struct var var;
typedef struct list list;
typedef struct redir redir;
typedef struct thread thread;
typedef struct builtin builtin;
struct tree{
int type;
int rtype, fd0, fd1; /* details of REDIR PIPE DUP tokens */
char *str;
int quoted;
int iskw;
int line;
tree *child[3];
tree *next;
};
tree *newtree(void);
tree *token(char*, int), *klook(char*), *tree1(int, tree*);
tree *tree2(int, tree*, tree*), *tree3(int, tree*, tree*, tree*);
tree* treeeq(tree *c0, tree *c2);
tree *mung1(tree*, tree*), *mung2(tree*, tree*, tree*);
tree *mung3(tree*, tree*, tree*, tree*), *epimung(tree*, tree*);
tree *simplemung(tree*), *heredoc(tree*);
void freetree(tree*);
tree *cmdtree;
/*
* The first word of any code vector is a reference count.
* Always create a new reference to a code vector by calling codecopy(.).
* Always call codefree(.) when deleting a reference.
*/
union code{
void (*f)(void);
int i;
char *s;
};
int newwdir;
char *promptstr;
int doprompt;
#define NTOK 8192 /* maximum bytes in a word (token) */
char tok[NTOK];
#define APPEND 1
#define WRITE 2
#define READ 3
#define HERE 4
#define DUPFD 5
#define CLOSE 6
#define RDWR 7
struct var{
char *name; /* ascii name */
word *val; /* value */
int changed;
code *fn; /* pointer to function's code vector */
int fnchanged;
int pc; /* pc of start of function */
var *next; /* next on hash or local list */
};
var *vlook(char*), *gvlook(char*), *newvar(char*, var*);
#define NVAR 521
var *gvar[NVAR]; /* hash for globals */
#define new(type) ((type *)emalloc(sizeof(type)))
void *emalloc(long);
void *erealloc(void *, long);
char *estrdup(char*);
#define NOFILE 128 /* should come from <param.h> */
struct here{
tree *tag;
char *name;
struct here *next;
};
int mypid;
/*
* Glob character escape in strings:
* In a string, GLOB must be followed by *?[ or GLOB.
* GLOB* matches any string
* GLOB? matches any single character
* GLOB[...] matches anything in the brackets
* GLOBGLOB matches GLOB
*/
#define GLOB ((char)0x01)
/*
* onebyte(c)
* Is c the first character of a one-byte utf sequence?
*/
#define onebyte(c) ((c&0x80)==0x00)
extern char **argp;
extern char **args;
extern int nerror; /* number of errors encountered during compilation */
extern int doprompt; /* is it time for a prompt? */
/*
* Which fds are the reading/writing end of a pipe?
* Unfortunately, this can vary from system to system.
* 9th edition Unix doesn't care, the following defines
* work on plan 9.
*/
#define PRD 0
#define PWR 1
char *Rcmain, *Fdprefix;
/*
* How many dot commands have we executed?
* Used to ensure that -v flag doesn't print rcmain.
*/
extern int ndot;
extern int lastc;
extern int lastword;
char *getstatus(void);