Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ include Make.$(shell uname)
TARG=rc

OFILES=\
globals.$O \
code.$O\
exec.$O\
getflags.$O\
Expand Down
1 change: 0 additions & 1 deletion code.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ char *fnstr(tree*);
void outcode(tree*, int);
void codeswitch(tree*, int);
int iscase(tree*);
code *codecopy(code*);
void codefree(code*);

int
Expand Down
1 change: 0 additions & 1 deletion exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
/*
* Start executing the given code at the given pc with the given redirection
*/
char *argv0="rc";

void
start(code *c, int pc, var *local)
Expand Down
16 changes: 10 additions & 6 deletions exec.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,22 @@ struct thread{
tree *treenodes; /* tree nodes created by this process */
thread *ret; /* who continues when this finishes */
};
thread *runq;

code *codecopy(code*);
code *codebuf; /* compiler output */
int ntrap; /* number of outstanding traps */
int trap[NSIG]; /* number of outstanding traps per type */

/* globals.c */
extern thread *runq;
extern code *codebuf; /* compiler output */
extern int ntrap; /* number of outstanding traps */
extern int trap[NSIG]; /* number of outstanding traps per type */
extern int eflagok; /* kludge flag so that -e doesn't exit in startup */
extern int havefork;

struct builtin{
char *name;
void (*fnc)(void);
};
extern struct builtin Builtin[];
int eflagok; /* kludge flag so that -e doesn't exit in startup */
int havefork;

void execcd(void), execwhatis(void), execeval(void), execexec(void);
int execforkexec(void);
Expand Down
30 changes: 30 additions & 0 deletions globals.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "rc.h"
#include "io.h"

int mypid;

/* globals associated with lex.c and subr.c */
int doprompt = 1; /* is it time for a prompt? */
int lastdol; /* was the last token read '$' or '$#' or '"'? */
int lastword; /* was the last token read a word or compound word terminator? */
char tok[NTOK];
int ndot = 0; // FIXME - never decreases?
int lastc;
int lastword;
int kidpid;

io *rc_err;

/* globals associated with exec.c */
char *promptstr;
tree *cmdtree;
thread *runq;
code *codebuf; /* compiler output */
int ntrap; /* number of outstanding traps */
int trap[NSIG]; /* number of outstanding traps per type */
int eflagok; /* kludge flag so that -e doesn't exit in startup */

char *argv0="rc";
var *gvar[NVAR]; /* hash for globals */

int nerror = 0; /* number of errors encountered during compilation */
2 changes: 1 addition & 1 deletion io.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ struct io{
int fd;
char *bufp, *ebuf, *strp, buf[NBUF];
};
io *err;
extern io *err;
io *openfd(int), *openstr(void), *opencore(char *, int);
int emptybuf(io*);
void pchr(io*, int);
Expand Down
14 changes: 6 additions & 8 deletions lex.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
#include "io.h"
#include "getflags.h"
#include "fns.h"
int getnext(void);

static int future = EOF;
static int inquote;
static int incomm;
static int getnext(void);

int
wordchr(int c)
Expand All @@ -21,10 +25,6 @@ idchr(int c)
*/
return c>' ' && !strchr("!\"#$%&'()+,-./:;<=>?@[\\]^`{|}~", c);
}
int future = EOF;
int doprompt = 1;
int inquote;
int incomm;
/*
* Look ahead in the input stream
*/
Expand Down Expand Up @@ -52,7 +52,7 @@ advance(void)
* read a character from the input stream
*/

int
static int
getnext(void)
{
int c;
Expand Down Expand Up @@ -163,8 +163,6 @@ addutf(char *p, int c)
}
return p;
}
int lastdol; /* was the last token read '$' or '$#' or '"'? */
int lastword; /* was the last token read a word or compound word terminator? */

int
yylex(void)
Expand Down
33 changes: 18 additions & 15 deletions rc.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ 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;
extern 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(.).
Expand All @@ -64,10 +64,10 @@ union code{
int i;
char *s;
};
char *promptstr;
int doprompt;
extern char *promptstr;
extern int doprompt;
#define NTOK 8192
char tok[NTOK];
extern char tok[NTOK];
#define APPEND 1
#define WRITE 2
#define READ 3
Expand All @@ -87,7 +87,7 @@ struct var{
};
var *vlook(char*), *gvlook(char*), *newvar(char*, var*);
#define NVAR 521
var *gvar[NVAR]; /* hash for globals */
extern var *gvar[NVAR]; /* hash for globals */
#define new(type) ((type *)emalloc(sizeof(type)))
void *emalloc(long);
void *Malloc(ulong);
Expand All @@ -98,7 +98,7 @@ struct here{
char *name;
struct here *next;
};
int mypid;
extern int mypid;
/*
* Glob character escape in strings:
* In a string, GLOB must be followed by *?[ or GLOB.
Expand All @@ -117,10 +117,13 @@ int mypid;
#define threebyte(c) ((c&0xf0)==0xe0)
#define fourbyte(c) ((c&0xf8)==0xf0)

char **argp;
char **args;
int nerror; /* number of errors encountered during compilation */
int doprompt; /* is it time for a prompt? */
extern char *argv0;
//char **argp;
//char **args;
extern int nerror; /* number of errors encountered during compilation */
extern int doprompt; /* is it time for a prompt? */
extern int lastword, lastdol;

/*
* Which fds are the reading/writing end of a pipe?
* Unfortunately, this can vary from system to system.
Expand All @@ -129,14 +132,14 @@ int doprompt; /* is it time for a prompt? */
*/
#define PRD 0
#define PWR 1
char *Rcmain, *Fdprefix;
extern char *Rcmain, *Fdprefix;
#define register
/*
* How many dot commands have we executed?
* Used to ensure that -v flag doesn't print rcmain.
*/
int ndot;
extern int ndot;
char *getstatus(void);
int lastc;
int lastword;
int kidpid;
extern int lastc;
extern int lastword;
extern int kidpid;
1 change: 0 additions & 1 deletion subr.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ efree(void *p)
free(p);
else pfmt(err, "free 0\n");
}
extern int lastword, lastdol;

void
yyerror(char *m)
Expand Down