Update sed.
This commit is contained in:
@@ -28,43 +28,43 @@
|
|||||||
#define LABSIZE 50
|
#define LABSIZE 50
|
||||||
#define NBRA 9
|
#define NBRA 9
|
||||||
|
|
||||||
FILE *fin;
|
extern FILE *fin;
|
||||||
union reptr *abuf[ABUFSIZE];
|
extern union reptr *abuf[ABUFSIZE];
|
||||||
union reptr **aptr;
|
extern union reptr **aptr;
|
||||||
char *lastre;
|
extern char *lastre;
|
||||||
char ibuf[BUFSIZ];
|
extern char ibuf[BUFSIZ];
|
||||||
char *cbp;
|
extern char *cbp;
|
||||||
char *ebp;
|
extern char *ebp;
|
||||||
char genbuf[LBSIZE];
|
extern char genbuf[LBSIZE];
|
||||||
char *loc1;
|
extern char *loc1;
|
||||||
char *loc2;
|
extern char *loc2;
|
||||||
char *locs;
|
extern char *locs;
|
||||||
char seof;
|
extern char seof;
|
||||||
char *reend;
|
extern char *reend;
|
||||||
char *lbend;
|
extern char *lbend;
|
||||||
char *hend;
|
extern char *hend;
|
||||||
char *lcomend;
|
extern char *lcomend;
|
||||||
union reptr *ptrend;
|
extern union reptr *ptrend;
|
||||||
int eflag;
|
extern int eflag;
|
||||||
int dolflag;
|
extern int dolflag;
|
||||||
int sflag;
|
extern int sflag;
|
||||||
int jflag;
|
extern int jflag;
|
||||||
int numbra;
|
extern int numbra;
|
||||||
int delflag;
|
extern int delflag;
|
||||||
long lnum;
|
extern long lnum;
|
||||||
char linebuf[LBSIZE+1];
|
extern char linebuf[LBSIZE+1];
|
||||||
char holdsp[LBSIZE+1];
|
extern char holdsp[LBSIZE+1];
|
||||||
char *spend;
|
extern char *spend;
|
||||||
char *hspend;
|
extern char *hspend;
|
||||||
int nflag;
|
extern int nflag;
|
||||||
int gflag;
|
extern int gflag;
|
||||||
char *braelist[NBRA];
|
extern char *braelist[NBRA];
|
||||||
char *braslist[NBRA];
|
extern char *braslist[NBRA];
|
||||||
long tlno[NLINES];
|
extern long tlno[NLINES];
|
||||||
int nlno;
|
extern int nlno;
|
||||||
char fname[12][40];
|
extern char fname[12][40];
|
||||||
FILE *fcode[12];
|
extern FILE *fcode[12];
|
||||||
int nfiles;
|
extern int nfiles;
|
||||||
|
|
||||||
#define ACOM 01
|
#define ACOM 01
|
||||||
#define BCOM 020
|
#define BCOM 020
|
||||||
@@ -94,9 +94,9 @@ int nfiles;
|
|||||||
#define YCOM 026
|
#define YCOM 026
|
||||||
#define XCOM 033
|
#define XCOM 033
|
||||||
|
|
||||||
char *cp;
|
extern char *cp;
|
||||||
char *reend;
|
extern char *reend;
|
||||||
char *lbend;
|
extern char *lbend;
|
||||||
|
|
||||||
union reptr {
|
union reptr {
|
||||||
struct reptr1 {
|
struct reptr1 {
|
||||||
@@ -123,39 +123,34 @@ union reptr {
|
|||||||
char inar;
|
char inar;
|
||||||
char negfl;
|
char negfl;
|
||||||
} B;
|
} B;
|
||||||
} ptrspace[PTRSIZE], *rep;
|
};
|
||||||
|
extern union reptr ptrspace[PTRSIZE], *rep;
|
||||||
|
|
||||||
|
extern char respace[RESIZE];
|
||||||
char respace[RESIZE];
|
|
||||||
|
|
||||||
struct label {
|
struct label {
|
||||||
char asc[9];
|
char asc[9];
|
||||||
union reptr *chain;
|
union reptr *chain;
|
||||||
union reptr *address;
|
union reptr *address;
|
||||||
} ltab[LABSIZE];
|
};
|
||||||
|
extern struct label ltab[LABSIZE];
|
||||||
|
|
||||||
struct label *lab;
|
extern struct label *lab;
|
||||||
struct label *labend;
|
extern struct label *labend;
|
||||||
|
|
||||||
int f;
|
extern int f;
|
||||||
int depth;
|
extern int depth;
|
||||||
|
|
||||||
int eargc;
|
extern int eargc;
|
||||||
char **eargv;
|
extern char **eargv;
|
||||||
|
|
||||||
extern char bittab[];
|
extern char bittab[];
|
||||||
|
|
||||||
union reptr **cmpend[DEPTH];
|
extern union reptr **cmpend[DEPTH];
|
||||||
int depth;
|
extern int depth;
|
||||||
union reptr *pending;
|
extern union reptr *pending;
|
||||||
char *badp;
|
extern char *badp;
|
||||||
char bad;
|
extern char bad;
|
||||||
char *compile();
|
extern char compfl;
|
||||||
char *ycomp();
|
|
||||||
char *address();
|
void execute(char *file);
|
||||||
char *text();
|
|
||||||
char *compsub();
|
|
||||||
struct label *search();
|
|
||||||
char *gline();
|
|
||||||
char *place();
|
|
||||||
char compfl;
|
|
||||||
|
|||||||
@@ -19,8 +19,75 @@ char bittab[] = {
|
|||||||
128
|
128
|
||||||
};
|
};
|
||||||
|
|
||||||
main(argc, argv)
|
FILE *fin;
|
||||||
char *argv[];
|
union reptr *abuf[ABUFSIZE];
|
||||||
|
union reptr **aptr;
|
||||||
|
char *lastre;
|
||||||
|
char ibuf[BUFSIZ];
|
||||||
|
char *cbp;
|
||||||
|
char *ebp;
|
||||||
|
char genbuf[LBSIZE];
|
||||||
|
char *loc1;
|
||||||
|
char *loc2;
|
||||||
|
char *locs;
|
||||||
|
char seof;
|
||||||
|
char *reend;
|
||||||
|
char *lbend;
|
||||||
|
char *hend;
|
||||||
|
char *lcomend;
|
||||||
|
union reptr *ptrend;
|
||||||
|
int eflag;
|
||||||
|
int dolflag;
|
||||||
|
int sflag;
|
||||||
|
int jflag;
|
||||||
|
int numbra;
|
||||||
|
int delflag;
|
||||||
|
long lnum;
|
||||||
|
char linebuf[LBSIZE+1];
|
||||||
|
char holdsp[LBSIZE+1];
|
||||||
|
char *spend;
|
||||||
|
char *hspend;
|
||||||
|
int nflag;
|
||||||
|
int gflag;
|
||||||
|
char *braelist[NBRA];
|
||||||
|
char *braslist[NBRA];
|
||||||
|
long tlno[NLINES];
|
||||||
|
int nlno;
|
||||||
|
char fname[12][40];
|
||||||
|
FILE *fcode[12];
|
||||||
|
int nfiles;
|
||||||
|
char *cp;
|
||||||
|
char *reend;
|
||||||
|
char *lbend;
|
||||||
|
union reptr ptrspace[PTRSIZE], *rep;
|
||||||
|
char respace[RESIZE];
|
||||||
|
struct label ltab[LABSIZE];
|
||||||
|
struct label *lab;
|
||||||
|
struct label *labend;
|
||||||
|
int f;
|
||||||
|
int depth;
|
||||||
|
int eargc;
|
||||||
|
char **eargv;
|
||||||
|
char bittab[];
|
||||||
|
union reptr **cmpend[DEPTH];
|
||||||
|
int depth;
|
||||||
|
union reptr *pending;
|
||||||
|
char *badp;
|
||||||
|
char bad;
|
||||||
|
char compfl;
|
||||||
|
|
||||||
|
void fcomp(void);
|
||||||
|
void dechain(void);
|
||||||
|
int rline(char *lbuf);
|
||||||
|
struct label *search(struct label *ptr);
|
||||||
|
char *text(char *textbuf);
|
||||||
|
char *compile(char *expbuf);
|
||||||
|
char *compsub(char *rhsbuf);
|
||||||
|
int cmp(char *a, char *b);
|
||||||
|
char *ycomp(char *expbuf);
|
||||||
|
|
||||||
|
int main(argc, argv)
|
||||||
|
char *argv[];
|
||||||
{
|
{
|
||||||
|
|
||||||
eargc = argc;
|
eargc = argc;
|
||||||
@@ -45,7 +112,7 @@ char *argv[];
|
|||||||
fcode[0] = stdout;
|
fcode[0] = stdout;
|
||||||
nfiles = 1;
|
nfiles = 1;
|
||||||
|
|
||||||
if(eargc == 1)
|
if (eargc == 1)
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
||||||
|
|
||||||
@@ -57,9 +124,9 @@ char *argv[];
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
case 'f':
|
case 'f':
|
||||||
if(eargc-- <= 0) exit(2);
|
if (eargc-- <= 0) exit(2);
|
||||||
|
|
||||||
if((fin = fopen(*++eargv, "r")) == NULL) {
|
if ((fin = fopen(*++eargv, "r")) == NULL) {
|
||||||
fprintf(stderr, "Cannot open pattern-file: %s\n", *eargv);
|
fprintf(stderr, "Cannot open pattern-file: %s\n", *eargv);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -84,7 +151,7 @@ char *argv[];
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(compfl == 0) {
|
if (compfl == 0) {
|
||||||
eargv--;
|
eargv--;
|
||||||
eargc++;
|
eargc++;
|
||||||
eflag++;
|
eflag++;
|
||||||
@@ -94,7 +161,7 @@ char *argv[];
|
|||||||
eflag = 0;
|
eflag = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(depth) {
|
if (depth) {
|
||||||
fprintf(stderr, "Too many {'s");
|
fprintf(stderr, "Too many {'s");
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -103,20 +170,20 @@ char *argv[];
|
|||||||
|
|
||||||
dechain();
|
dechain();
|
||||||
|
|
||||||
/* abort(); /*DEBUG*/
|
/*abort();*/ /*DEBUG*/
|
||||||
|
|
||||||
if(eargc <= 0)
|
if (eargc <= 0)
|
||||||
execute((char *)NULL);
|
execute((char *)NULL);
|
||||||
else while(--eargc >= 0) {
|
else while (--eargc >= 0) {
|
||||||
execute(*eargv++);
|
execute(*eargv++);
|
||||||
}
|
}
|
||||||
fclose(stdout);
|
fclose(stdout);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
fcomp()
|
|
||||||
{
|
|
||||||
|
|
||||||
register char *p, *op, *tp;
|
void fcomp()
|
||||||
|
{
|
||||||
|
char *p, *op, *tp;
|
||||||
char *address();
|
char *address();
|
||||||
union reptr *pt, *pt1;
|
union reptr *pt, *pt1;
|
||||||
int i;
|
int i;
|
||||||
@@ -125,9 +192,9 @@ fcomp()
|
|||||||
compfl = 1;
|
compfl = 1;
|
||||||
op = lastre;
|
op = lastre;
|
||||||
|
|
||||||
if(rline(linebuf) < 0) return;
|
if (rline(linebuf) < 0) return;
|
||||||
if(*linebuf == '#') {
|
if (*linebuf == '#') {
|
||||||
if(linebuf[1] == 'n')
|
if (linebuf[1] == 'n')
|
||||||
nflag = 1;
|
nflag = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -135,50 +202,50 @@ fcomp()
|
|||||||
goto comploop;
|
goto comploop;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(;;) {
|
for (;;) {
|
||||||
if(rline(linebuf) < 0) break;
|
if (rline(linebuf) < 0) break;
|
||||||
|
|
||||||
cp = linebuf;
|
cp = linebuf;
|
||||||
|
|
||||||
comploop:
|
comploop:
|
||||||
/* fprintf(stdout, "cp: %s\n", cp); /*DEBUG*/
|
/*fprintf(stdout, "cp: %s\n", cp);*/ /*DEBUG*/
|
||||||
while(*cp == ' ' || *cp == '\t') cp++;
|
while (*cp == ' ' || *cp == '\t') cp++;
|
||||||
if(*cp == '\0' || *cp == '#') continue;
|
if (*cp == '\0' || *cp == '#') continue;
|
||||||
if(*cp == ';') {
|
if (*cp == ';') {
|
||||||
cp++;
|
cp++;
|
||||||
goto comploop;
|
goto comploop;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = address(rep->A.ad1);
|
p = address(rep->A.ad1);
|
||||||
if(p == badp) {
|
if (p == badp) {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(p == rep->A.ad1) {
|
if (p == rep->A.ad1) {
|
||||||
if(op)
|
if (op)
|
||||||
rep->A.ad1 = op;
|
rep->A.ad1 = op;
|
||||||
else {
|
else {
|
||||||
fprintf(stderr, "First RE may not be null\n");
|
fprintf(stderr, "First RE may not be null\n");
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
} else if(p == 0) {
|
} else if (p == 0) {
|
||||||
p = rep->A.ad1;
|
p = rep->A.ad1;
|
||||||
rep->A.ad1 = 0;
|
rep->A.ad1 = 0;
|
||||||
} else {
|
} else {
|
||||||
op = rep->A.ad1;
|
op = rep->A.ad1;
|
||||||
if(*cp == ',' || *cp == ';') {
|
if (*cp == ',' || *cp == ';') {
|
||||||
cp++;
|
cp++;
|
||||||
if((rep->A.ad2 = p) > reend) {
|
if ((rep->A.ad2 = p) > reend) {
|
||||||
fprintf(stderr, TMMES, linebuf);
|
fprintf(stderr, TMMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
p = address(rep->A.ad2);
|
p = address(rep->A.ad2);
|
||||||
if(p == badp || p == 0) {
|
if (p == badp || p == 0) {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(p == rep->A.ad2)
|
if (p == rep->A.ad2)
|
||||||
rep->A.ad2 = op;
|
rep->A.ad2 = op;
|
||||||
else
|
else
|
||||||
op = rep->A.ad2;
|
op = rep->A.ad2;
|
||||||
@@ -187,15 +254,15 @@ comploop:
|
|||||||
rep->A.ad2 = 0;
|
rep->A.ad2 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(p > reend) {
|
if (p > reend) {
|
||||||
fprintf(stderr, "Too much text: %s\n", linebuf);
|
fprintf(stderr, "Too much text: %s\n", linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
while(*cp == ' ' || *cp == '\t') cp++;
|
while (*cp == ' ' || *cp == '\t') cp++;
|
||||||
|
|
||||||
swit:
|
swit:
|
||||||
switch(*cp++) {
|
switch (*cp++) {
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "Unrecognized command: %s\n", linebuf);
|
fprintf(stderr, "Unrecognized command: %s\n", linebuf);
|
||||||
@@ -209,22 +276,22 @@ swit:
|
|||||||
rep->A.command = BCOM;
|
rep->A.command = BCOM;
|
||||||
rep->A.negfl = !(rep->A.negfl);
|
rep->A.negfl = !(rep->A.negfl);
|
||||||
cmpend[depth++] = &rep->B.lb1;
|
cmpend[depth++] = &rep->B.lb1;
|
||||||
if(++rep >= ptrend) {
|
if (++rep >= ptrend) {
|
||||||
fprintf(stderr, "Too many commands: %s\n", linebuf);
|
fprintf(stderr, "Too many commands: %s\n", linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
rep->A.ad1 = p;
|
rep->A.ad1 = p;
|
||||||
if(*cp == '\0') continue;
|
if (*cp == '\0') continue;
|
||||||
|
|
||||||
goto comploop;
|
goto comploop;
|
||||||
|
|
||||||
case '}':
|
case '}':
|
||||||
if(rep->A.ad1) {
|
if (rep->A.ad1) {
|
||||||
fprintf(stderr, AD0MES, linebuf);
|
fprintf(stderr, AD0MES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(--depth < 0) {
|
if (--depth < 0) {
|
||||||
fprintf(stderr, "Too many }'s\n");
|
fprintf(stderr, "Too many }'s\n");
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -235,39 +302,39 @@ swit:
|
|||||||
|
|
||||||
case '=':
|
case '=':
|
||||||
rep->A.command = EQCOM;
|
rep->A.command = EQCOM;
|
||||||
if(rep->A.ad2) {
|
if (rep->A.ad2) {
|
||||||
fprintf(stderr, AD1MES, linebuf);
|
fprintf(stderr, AD1MES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ':':
|
case ':':
|
||||||
if(rep->A.ad1) {
|
if (rep->A.ad1) {
|
||||||
fprintf(stderr, AD0MES, linebuf);
|
fprintf(stderr, AD0MES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
while(*cp++ == ' ');
|
while (*cp++ == ' ');
|
||||||
cp--;
|
cp--;
|
||||||
|
|
||||||
|
|
||||||
tp = lab->asc;
|
tp = lab->asc;
|
||||||
while((*tp++ = *cp++))
|
while ((*tp++ = *cp++))
|
||||||
if(tp >= &(lab->asc[8])) {
|
if (tp >= &(lab->asc[8])) {
|
||||||
fprintf(stderr, LTL, linebuf);
|
fprintf(stderr, LTL, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
*--tp = '\0';
|
*--tp = '\0';
|
||||||
|
|
||||||
if(lpt = search(lab)) {
|
if ((lpt = search(lab))) {
|
||||||
if(lpt->address) {
|
if (lpt->address) {
|
||||||
fprintf(stderr, "Duplicate labels: %s\n", linebuf);
|
fprintf(stderr, "Duplicate labels: %s\n", linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lab->chain = 0;
|
lab->chain = 0;
|
||||||
lpt = lab;
|
lpt = lab;
|
||||||
if(++lab >= labend) {
|
if (++lab >= labend) {
|
||||||
fprintf(stderr, "Too many labels: %s\n", linebuf);
|
fprintf(stderr, "Too many labels: %s\n", linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -279,12 +346,12 @@ swit:
|
|||||||
|
|
||||||
case 'a':
|
case 'a':
|
||||||
rep->A.command = ACOM;
|
rep->A.command = ACOM;
|
||||||
if(rep->A.ad2) {
|
if (rep->A.ad2) {
|
||||||
fprintf(stderr, AD1MES, linebuf);
|
fprintf(stderr, AD1MES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(*cp == '\\') cp++;
|
if (*cp == '\\') cp++;
|
||||||
if(*cp++ != '\n') {
|
if (*cp++ != '\n') {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -293,8 +360,8 @@ swit:
|
|||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
rep->A.command = CCOM;
|
rep->A.command = CCOM;
|
||||||
if(*cp == '\\') cp++;
|
if (*cp == '\\') cp++;
|
||||||
if(*cp++ != ('\n')) {
|
if (*cp++ != ('\n')) {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -303,12 +370,12 @@ swit:
|
|||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
rep->A.command = ICOM;
|
rep->A.command = ICOM;
|
||||||
if(rep->A.ad2) {
|
if (rep->A.ad2) {
|
||||||
fprintf(stderr, AD1MES, linebuf);
|
fprintf(stderr, AD1MES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(*cp == '\\') cp++;
|
if (*cp == '\\') cp++;
|
||||||
if(*cp++ != ('\n')) {
|
if (*cp++ != ('\n')) {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -339,12 +406,12 @@ swit:
|
|||||||
case 'b':
|
case 'b':
|
||||||
rep->A.command = BCOM;
|
rep->A.command = BCOM;
|
||||||
jtcommon:
|
jtcommon:
|
||||||
while(*cp++ == ' ');
|
while (*cp++ == ' ');
|
||||||
cp--;
|
cp--;
|
||||||
|
|
||||||
if(*cp == '\0') {
|
if (*cp == '\0') {
|
||||||
if(pt = labtab->chain) {
|
if ((pt = labtab->chain)) {
|
||||||
while(pt1 = pt->B.lb1)
|
while ((pt1 = pt->B.lb1))
|
||||||
pt = pt1;
|
pt = pt1;
|
||||||
pt->B.lb1 = rep;
|
pt->B.lb1 = rep;
|
||||||
} else
|
} else
|
||||||
@@ -352,27 +419,27 @@ jtcommon:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tp = lab->asc;
|
tp = lab->asc;
|
||||||
while((*tp++ = *cp++))
|
while ((*tp++ = *cp++))
|
||||||
if(tp >= &(lab->asc[8])) {
|
if (tp >= &(lab->asc[8])) {
|
||||||
fprintf(stderr, LTL, linebuf);
|
fprintf(stderr, LTL, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
cp--;
|
cp--;
|
||||||
*--tp = '\0';
|
*--tp = '\0';
|
||||||
|
|
||||||
if(lpt = search(lab)) {
|
if ((lpt = search(lab))) {
|
||||||
if(lpt->address) {
|
if (lpt->address) {
|
||||||
rep->B.lb1 = lpt->address;
|
rep->B.lb1 = lpt->address;
|
||||||
} else {
|
} else {
|
||||||
pt = lpt->chain;
|
pt = lpt->chain;
|
||||||
while(pt1 = pt->B.lb1)
|
while ((pt1 = pt->B.lb1))
|
||||||
pt = pt1;
|
pt = pt1;
|
||||||
pt->B.lb1 = rep;
|
pt->B.lb1 = rep;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lab->chain = rep;
|
lab->chain = rep;
|
||||||
lab->address = 0;
|
lab->address = 0;
|
||||||
if(++lab >= labend) {
|
if (++lab >= labend) {
|
||||||
fprintf(stderr, "Too many labels: %s\n", linebuf);
|
fprintf(stderr, "Too many labels: %s\n", linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -397,11 +464,11 @@ jtcommon:
|
|||||||
|
|
||||||
case 'r':
|
case 'r':
|
||||||
rep->A.command = RCOM;
|
rep->A.command = RCOM;
|
||||||
if(rep->A.ad2) {
|
if (rep->A.ad2) {
|
||||||
fprintf(stderr, AD1MES, linebuf);
|
fprintf(stderr, AD1MES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(*cp++ != ' ') {
|
if (*cp++ != ' ') {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -420,7 +487,7 @@ jtcommon:
|
|||||||
|
|
||||||
case 'q':
|
case 'q':
|
||||||
rep->A.command = QCOM;
|
rep->A.command = QCOM;
|
||||||
if(rep->A.ad2) {
|
if (rep->A.ad2) {
|
||||||
fprintf(stderr, AD1MES, linebuf);
|
fprintf(stderr, AD1MES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -435,12 +502,12 @@ jtcommon:
|
|||||||
seof = *cp++;
|
seof = *cp++;
|
||||||
rep->A.re1 = p;
|
rep->A.re1 = p;
|
||||||
p = compile(rep->A.re1);
|
p = compile(rep->A.re1);
|
||||||
if(p == badp) {
|
if (p == badp) {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(p == rep->A.re1) {
|
if (p == rep->A.re1) {
|
||||||
if(op)
|
if (op)
|
||||||
rep->A.re1 = op;
|
rep->A.re1 = op;
|
||||||
else {
|
else {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
@@ -451,49 +518,49 @@ jtcommon:
|
|||||||
op = rep->A.re1;
|
op = rep->A.re1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((rep->A.rhs = p) > reend) {
|
if ((rep->A.rhs = p) > reend) {
|
||||||
fprintf(stderr, TMMES, linebuf);
|
fprintf(stderr, TMMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((p = compsub(rep->A.rhs)) == badp) {
|
if ((p = compsub(rep->A.rhs)) == badp) {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(*cp == 'g') {
|
if (*cp == 'g') {
|
||||||
cp++;
|
cp++;
|
||||||
rep->A.gfl++;
|
rep->A.gfl++;
|
||||||
} else if(gflag)
|
} else if (gflag)
|
||||||
rep->A.gfl++;
|
rep->A.gfl++;
|
||||||
|
|
||||||
if(*cp == 'p') {
|
if (*cp == 'p') {
|
||||||
cp++;
|
cp++;
|
||||||
rep->A.pfl = 1;
|
rep->A.pfl = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*cp == 'P') {
|
if (*cp == 'P') {
|
||||||
cp++;
|
cp++;
|
||||||
rep->A.pfl = 2;
|
rep->A.pfl = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*cp == 'w') {
|
if (*cp == 'w') {
|
||||||
cp++;
|
cp++;
|
||||||
if(*cp++ != ' ') {
|
if (*cp++ != ' ') {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(nfiles >= 10) {
|
if (nfiles >= 10) {
|
||||||
fprintf(stderr, "Too many files in w commands\n");
|
fprintf(stderr, "Too many files in w commands\n");
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
text(fname[nfiles]);
|
text(fname[nfiles]);
|
||||||
for(i = nfiles - 1; i >= 0; i--)
|
for (i = nfiles - 1; i >= 0; i--)
|
||||||
if(cmp(fname[nfiles],fname[i]) == 0) {
|
if (cmp(fname[nfiles],fname[i]) == 0) {
|
||||||
rep->A.fcode = fcode[i];
|
rep->A.fcode = fcode[i];
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if((rep->A.fcode = fopen(fname[nfiles], "w")) == NULL) {
|
if ((rep->A.fcode = fopen(fname[nfiles], "w")) == NULL) {
|
||||||
fprintf(stderr, "cannot open %s\n", fname[nfiles]);
|
fprintf(stderr, "cannot open %s\n", fname[nfiles]);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -503,23 +570,23 @@ jtcommon:
|
|||||||
|
|
||||||
case 'w':
|
case 'w':
|
||||||
rep->A.command = WCOM;
|
rep->A.command = WCOM;
|
||||||
if(*cp++ != ' ') {
|
if (*cp++ != ' ') {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(nfiles >= 10){
|
if (nfiles >= 10){
|
||||||
fprintf(stderr, "Too many files in w commands\n");
|
fprintf(stderr, "Too many files in w commands\n");
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
text(fname[nfiles]);
|
text(fname[nfiles]);
|
||||||
for(i = nfiles - 1; i >= 0; i--)
|
for (i = nfiles - 1; i >= 0; i--)
|
||||||
if(cmp(fname[nfiles], fname[i]) == 0) {
|
if (cmp(fname[nfiles], fname[i]) == 0) {
|
||||||
rep->A.fcode = fcode[i];
|
rep->A.fcode = fcode[i];
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((rep->A.fcode = fopen(fname[nfiles], "w")) == NULL) {
|
if ((rep->A.fcode = fopen(fname[nfiles], "w")) == NULL) {
|
||||||
fprintf(stderr, "Cannot create %s\n", fname[nfiles]);
|
fprintf(stderr, "Cannot create %s\n", fname[nfiles]);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -535,11 +602,11 @@ jtcommon:
|
|||||||
seof = *cp++;
|
seof = *cp++;
|
||||||
rep->A.re1 = p;
|
rep->A.re1 = p;
|
||||||
p = ycomp(rep->A.re1);
|
p = ycomp(rep->A.re1);
|
||||||
if(p == badp) {
|
if (p == badp) {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
if(p > reend) {
|
if (p > reend) {
|
||||||
fprintf(stderr, TMMES, linebuf);
|
fprintf(stderr, TMMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -547,15 +614,15 @@ jtcommon:
|
|||||||
|
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
if(++rep >= ptrend) {
|
if (++rep >= ptrend) {
|
||||||
fprintf(stderr, "Too many commands, last: %s\n", linebuf);
|
fprintf(stderr, "Too many commands, last: %s\n", linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
rep->A.ad1 = p;
|
rep->A.ad1 = p;
|
||||||
|
|
||||||
if(*cp++ != '\0') {
|
if (*cp++ != '\0') {
|
||||||
if(cp[-1] == ';')
|
if (cp[-1] == ';')
|
||||||
goto comploop;
|
goto comploop;
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
@@ -565,27 +632,28 @@ done:
|
|||||||
rep->A.command = 0;
|
rep->A.command = 0;
|
||||||
lastre = op;
|
lastre = op;
|
||||||
}
|
}
|
||||||
char *compsub(rhsbuf)
|
|
||||||
char *rhsbuf;
|
char *compsub(rhsbuf)
|
||||||
|
char *rhsbuf;
|
||||||
{
|
{
|
||||||
register char *p, *q;
|
char *p, *q;
|
||||||
|
|
||||||
p = rhsbuf;
|
p = rhsbuf;
|
||||||
q = cp;
|
q = cp;
|
||||||
for(;;) {
|
for (;;) {
|
||||||
if((*p = *q++) == '\\') {
|
if ((*p = *q++) == '\\') {
|
||||||
*p = *q++;
|
*p = *q++;
|
||||||
if(*p > numbra + '0' && *p <= '9')
|
if (*p > numbra + '0' && *p <= '9')
|
||||||
return(badp);
|
return(badp);
|
||||||
*p++ |= 0200;
|
*p++ |= 0200;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(*p == seof) {
|
if (*p == seof) {
|
||||||
*p++ = '\0';
|
*p++ = '\0';
|
||||||
cp = q;
|
cp = q;
|
||||||
return(p);
|
return(p);
|
||||||
}
|
}
|
||||||
if(*p++ == '\0') {
|
if (*p++ == '\0') {
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -593,17 +661,17 @@ char *rhsbuf;
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *compile(expbuf)
|
char *compile(expbuf)
|
||||||
char *expbuf;
|
char *expbuf;
|
||||||
{
|
{
|
||||||
register c;
|
int c;
|
||||||
register char *ep, *sp;
|
char *ep, *sp;
|
||||||
char neg;
|
char neg;
|
||||||
char *lastep, *cstart;
|
char *lastep, *cstart;
|
||||||
int cclcnt;
|
int cclcnt;
|
||||||
int closed;
|
int closed;
|
||||||
char bracket[NBRA], *bracketp;
|
char bracket[NBRA], *bracketp;
|
||||||
|
|
||||||
if(*cp == seof) {
|
if (*cp == seof) {
|
||||||
cp++;
|
cp++;
|
||||||
return(expbuf);
|
return(expbuf);
|
||||||
}
|
}
|
||||||
@@ -624,8 +692,8 @@ char *expbuf;
|
|||||||
cp = sp;
|
cp = sp;
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
if((c = *sp++) == seof) {
|
if ((c = *sp++) == seof) {
|
||||||
if(bracketp != bracket) {
|
if (bracketp != bracket) {
|
||||||
cp = sp;
|
cp = sp;
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
@@ -633,13 +701,13 @@ char *expbuf;
|
|||||||
*ep++ = CEOF;
|
*ep++ = CEOF;
|
||||||
return(ep);
|
return(ep);
|
||||||
}
|
}
|
||||||
if(c != '*')
|
if (c != '*')
|
||||||
lastep = ep;
|
lastep = ep;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
||||||
case '\\':
|
case '\\':
|
||||||
if((c = *sp++) == '(') {
|
if ((c = *sp++) == '(') {
|
||||||
if(numbra >= NBRA) {
|
if (numbra >= NBRA) {
|
||||||
cp = sp;
|
cp = sp;
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
@@ -648,8 +716,8 @@ char *expbuf;
|
|||||||
*ep++ = numbra++;
|
*ep++ = numbra++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(c == ')') {
|
if (c == ')') {
|
||||||
if(bracketp <= bracket) {
|
if (bracketp <= bracket) {
|
||||||
cp = sp;
|
cp = sp;
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
@@ -659,19 +727,19 @@ char *expbuf;
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c >= '1' && c <= '9') {
|
if (c >= '1' && c <= '9') {
|
||||||
if((c -= '1') >= closed)
|
if ((c -= '1') >= closed)
|
||||||
return(badp);
|
return(badp);
|
||||||
|
|
||||||
*ep++ = CBACK;
|
*ep++ = CBACK;
|
||||||
*ep++ = c;
|
*ep++ = c;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(c == '\n') {
|
if (c == '\n') {
|
||||||
cp = sp;
|
cp = sp;
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
if(c == 'n') {
|
if (c == 'n') {
|
||||||
c = '\n';
|
c = '\n';
|
||||||
}
|
}
|
||||||
goto defchar;
|
goto defchar;
|
||||||
@@ -689,7 +757,7 @@ char *expbuf;
|
|||||||
case '*':
|
case '*':
|
||||||
if (lastep == 0)
|
if (lastep == 0)
|
||||||
goto defchar;
|
goto defchar;
|
||||||
if(*lastep == CKET) {
|
if (*lastep == CKET) {
|
||||||
cp = sp;
|
cp = sp;
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
@@ -703,7 +771,7 @@ char *expbuf;
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
case '[':
|
case '[':
|
||||||
if(&ep[17] >= &expbuf[ESIZE]) {
|
if (&ep[17] >= &expbuf[ESIZE]) {
|
||||||
fprintf(stderr, "RE too long: %s\n", linebuf);
|
fprintf(stderr, "RE too long: %s\n", linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -711,14 +779,14 @@ char *expbuf;
|
|||||||
*ep++ = CCL;
|
*ep++ = CCL;
|
||||||
|
|
||||||
neg = 0;
|
neg = 0;
|
||||||
if((c = *sp++) == '^') {
|
if ((c = *sp++) == '^') {
|
||||||
neg = 1;
|
neg = 1;
|
||||||
c = *sp++;
|
c = *sp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
cstart = sp;
|
cstart = sp;
|
||||||
do {
|
do {
|
||||||
if(c == '\0') {
|
if (c == '\0') {
|
||||||
fprintf(stderr, CGMES, linebuf);
|
fprintf(stderr, CGMES, linebuf);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -726,8 +794,8 @@ char *expbuf;
|
|||||||
for (c = sp[-2]; c<*sp; c++)
|
for (c = sp[-2]; c<*sp; c++)
|
||||||
ep[c>>3] |= bittab[c&07];
|
ep[c>>3] |= bittab[c&07];
|
||||||
}
|
}
|
||||||
if(c == '\\') {
|
if (c == '\\') {
|
||||||
switch(c = *sp++) {
|
switch (c = *sp++) {
|
||||||
case 'n':
|
case 'n':
|
||||||
c = '\n';
|
c = '\n';
|
||||||
break;
|
break;
|
||||||
@@ -735,10 +803,10 @@ char *expbuf;
|
|||||||
}
|
}
|
||||||
|
|
||||||
ep[c >> 3] |= bittab[c & 07];
|
ep[c >> 3] |= bittab[c & 07];
|
||||||
} while((c = *sp++) != ']');
|
} while ((c = *sp++) != ']');
|
||||||
|
|
||||||
if(neg)
|
if (neg)
|
||||||
for(cclcnt = 0; cclcnt < 16; cclcnt++)
|
for (cclcnt = 0; cclcnt < 16; cclcnt++)
|
||||||
ep[cclcnt] ^= -1;
|
ep[cclcnt] ^= -1;
|
||||||
ep[0] &= 0376;
|
ep[0] &= 0376;
|
||||||
|
|
||||||
@@ -753,30 +821,31 @@ char *expbuf;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rline(lbuf)
|
|
||||||
char *lbuf;
|
int rline(lbuf)
|
||||||
|
char *lbuf;
|
||||||
{
|
{
|
||||||
register char *p, *q;
|
char *p, *q;
|
||||||
register t;
|
int t;
|
||||||
static char *saveq;
|
static char *saveq;
|
||||||
|
|
||||||
p = lbuf - 1;
|
p = lbuf - 1;
|
||||||
|
|
||||||
if(eflag) {
|
if (eflag) {
|
||||||
if(eflag > 0) {
|
if (eflag > 0) {
|
||||||
eflag = -1;
|
eflag = -1;
|
||||||
if(eargc-- <= 0)
|
if (eargc-- <= 0)
|
||||||
exit(2);
|
exit(2);
|
||||||
q = *++eargv;
|
q = *++eargv;
|
||||||
while(*++p = *q++) {
|
while ((*++p = *q++)) {
|
||||||
if(*p == '\\') {
|
if (*p == '\\') {
|
||||||
if((*++p = *q++) == '\0') {
|
if ((*++p = *q++) == '\0') {
|
||||||
saveq = 0;
|
saveq = 0;
|
||||||
return(-1);
|
return(-1);
|
||||||
} else
|
} else
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(*p == '\n') {
|
if (*p == '\n') {
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
saveq = q;
|
saveq = q;
|
||||||
return(1);
|
return(1);
|
||||||
@@ -785,17 +854,17 @@ char *lbuf;
|
|||||||
saveq = 0;
|
saveq = 0;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
if((q = saveq) == 0) return(-1);
|
if ((q = saveq) == 0) return(-1);
|
||||||
|
|
||||||
while(*++p = *q++) {
|
while ((*++p = *q++)) {
|
||||||
if(*p == '\\') {
|
if (*p == '\\') {
|
||||||
if((*++p = *q++) == '0') {
|
if ((*++p = *q++) == '0') {
|
||||||
saveq = 0;
|
saveq = 0;
|
||||||
return(-1);
|
return(-1);
|
||||||
} else
|
} else
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(*p == '\n') {
|
if (*p == '\n') {
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
saveq = q;
|
saveq = q;
|
||||||
return(1);
|
return(1);
|
||||||
@@ -805,13 +874,13 @@ char *lbuf;
|
|||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
while((t = getc(fin)) != EOF) {
|
while ((t = getc(fin)) != EOF) {
|
||||||
*++p = t;
|
*++p = t;
|
||||||
if(*p == '\\') {
|
if (*p == '\\') {
|
||||||
t = getc(fin);
|
t = getc(fin);
|
||||||
*++p = t;
|
*++p = t;
|
||||||
}
|
}
|
||||||
else if(*p == '\n') {
|
else if (*p == '\n') {
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@@ -820,20 +889,20 @@ char *lbuf;
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *address(expbuf)
|
char *address(expbuf)
|
||||||
char *expbuf;
|
char *expbuf;
|
||||||
{
|
{
|
||||||
register char *rcp;
|
char *rcp;
|
||||||
long lno;
|
long lno;
|
||||||
|
|
||||||
if(*cp == '$') {
|
if (*cp == '$') {
|
||||||
cp++;
|
cp++;
|
||||||
*expbuf++ = CEND;
|
*expbuf++ = CEND;
|
||||||
*expbuf++ = CEOF;
|
*expbuf++ = CEOF;
|
||||||
return(expbuf);
|
return(expbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*cp == '/') {
|
if (*cp == '/') {
|
||||||
seof = '/';
|
seof = '/';
|
||||||
cp++;
|
cp++;
|
||||||
return(compile(expbuf));
|
return(compile(expbuf));
|
||||||
@@ -842,14 +911,14 @@ char *expbuf;
|
|||||||
rcp = cp;
|
rcp = cp;
|
||||||
lno = 0;
|
lno = 0;
|
||||||
|
|
||||||
while(*rcp >= '0' && *rcp <= '9')
|
while (*rcp >= '0' && *rcp <= '9')
|
||||||
lno = lno*10 + *rcp++ - '0';
|
lno = lno*10 + *rcp++ - '0';
|
||||||
|
|
||||||
if(rcp > cp) {
|
if (rcp > cp) {
|
||||||
*expbuf++ = CLNUM;
|
*expbuf++ = CLNUM;
|
||||||
*expbuf++ = nlno;
|
*expbuf++ = nlno;
|
||||||
tlno[nlno++] = lno;
|
tlno[nlno++] = lno;
|
||||||
if(nlno >= NLINES) {
|
if (nlno >= NLINES) {
|
||||||
fprintf(stderr, "Too many line numbers\n");
|
fprintf(stderr, "Too many line numbers\n");
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
@@ -859,51 +928,51 @@ char *expbuf;
|
|||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
cmp(a, b)
|
|
||||||
char *a,*b;
|
int cmp(a, b)
|
||||||
|
char *a,*b;
|
||||||
{
|
{
|
||||||
register char *ra, *rb;
|
char *ra, *rb;
|
||||||
|
|
||||||
ra = a - 1;
|
ra = a - 1;
|
||||||
rb = b - 1;
|
rb = b - 1;
|
||||||
|
|
||||||
while(*++ra == *++rb)
|
while (*++ra == *++rb)
|
||||||
if(*ra == '\0') return(0);
|
if (*ra == '\0') return(0);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *text(textbuf)
|
char *text(textbuf)
|
||||||
char *textbuf;
|
char *textbuf;
|
||||||
{
|
{
|
||||||
register char *p, *q;
|
char *p, *q;
|
||||||
|
|
||||||
p = textbuf;
|
p = textbuf;
|
||||||
q = cp;
|
q = cp;
|
||||||
while(*q == '\t' || *q == ' ') q++;
|
while (*q == '\t' || *q == ' ') q++;
|
||||||
for(;;) {
|
for (;;) {
|
||||||
|
|
||||||
if((*p = *q++) == '\\')
|
if ((*p = *q++) == '\\')
|
||||||
*p = *q++;
|
*p = *q++;
|
||||||
if(*p == '\0') {
|
if (*p == '\0') {
|
||||||
cp = --q;
|
cp = --q;
|
||||||
return(++p);
|
return(++p);
|
||||||
}
|
}
|
||||||
if(*p == '\n') {
|
if (*p == '\n') {
|
||||||
while(*q == '\t' || *q == ' ') q++;
|
while (*q == '\t' || *q == ' ') q++;
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct label *search(ptr)
|
||||||
struct label *search(ptr)
|
struct label *ptr;
|
||||||
struct label *ptr;
|
|
||||||
{
|
{
|
||||||
struct label *rp;
|
struct label *rp;
|
||||||
|
|
||||||
rp = labtab;
|
rp = labtab;
|
||||||
while(rp < ptr) {
|
while (rp < ptr) {
|
||||||
if(cmp(rp->asc, ptr->asc) == 0)
|
if (cmp(rp->asc, ptr->asc) == 0)
|
||||||
return(rp);
|
return(rp);
|
||||||
rp++;
|
rp++;
|
||||||
}
|
}
|
||||||
@@ -911,22 +980,21 @@ struct label *ptr;
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dechain()
|
||||||
dechain()
|
|
||||||
{
|
{
|
||||||
struct label *lptr;
|
struct label *lptr;
|
||||||
union reptr *rptr, *trptr;
|
union reptr *rptr, *trptr;
|
||||||
|
|
||||||
for(lptr = labtab; lptr < lab; lptr++) {
|
for (lptr = labtab; lptr < lab; lptr++) {
|
||||||
|
|
||||||
if(lptr->address == 0) {
|
if (lptr->address == 0) {
|
||||||
fprintf(stderr, "Undefined label: %s\n", lptr->asc);
|
fprintf(stderr, "Undefined label: %s\n", lptr->asc);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lptr->chain) {
|
if (lptr->chain) {
|
||||||
rptr = lptr->chain;
|
rptr = lptr->chain;
|
||||||
while(trptr = rptr->B.lb1) {
|
while ((trptr = rptr->B.lb1)) {
|
||||||
rptr->B.lb1 = lptr->address;
|
rptr->B.lb1 = lptr->address;
|
||||||
rptr = trptr;
|
rptr = trptr;
|
||||||
}
|
}
|
||||||
@@ -936,39 +1004,39 @@ dechain()
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *ycomp(expbuf)
|
char *ycomp(expbuf)
|
||||||
char *expbuf;
|
char *expbuf;
|
||||||
{
|
{
|
||||||
register char c, *ep, *tsp;
|
char c, *ep, *tsp;
|
||||||
char *sp;
|
char *sp;
|
||||||
|
|
||||||
ep = expbuf;
|
ep = expbuf;
|
||||||
sp = cp;
|
sp = cp;
|
||||||
for(tsp = cp; *tsp != seof; tsp++) {
|
for (tsp = cp; *tsp != seof; tsp++) {
|
||||||
if(*tsp == '\\')
|
if (*tsp == '\\')
|
||||||
tsp++;
|
tsp++;
|
||||||
if(*tsp == '\n')
|
if (*tsp == '\n')
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
tsp++;
|
tsp++;
|
||||||
|
|
||||||
while((c = *sp++ & 0177) != seof) {
|
while ((c = *sp++ & 0177) != seof) {
|
||||||
if(c == '\\' && *sp == 'n') {
|
if (c == '\\' && *sp == 'n') {
|
||||||
sp++;
|
sp++;
|
||||||
c = '\n';
|
c = '\n';
|
||||||
}
|
}
|
||||||
if((ep[c] = *tsp++) == '\\' && *tsp == 'n') {
|
if ((ep[c] = *tsp++) == '\\' && *tsp == 'n') {
|
||||||
ep[c] = '\n';
|
ep[c] = '\n';
|
||||||
tsp++;
|
tsp++;
|
||||||
}
|
}
|
||||||
if(ep[c] == seof || ep[c] == '\0')
|
if (ep[c] == seof || ep[c] == '\0')
|
||||||
return(badp);
|
return(badp);
|
||||||
}
|
}
|
||||||
if(*tsp != seof)
|
if (*tsp != seof)
|
||||||
return(badp);
|
return(badp);
|
||||||
cp = ++tsp;
|
cp = ++tsp;
|
||||||
|
|
||||||
for(c = 0; !(c & 0200); c++)
|
for (c = 0; !(c & 0200); c++)
|
||||||
if(ep[c] == 0)
|
if (ep[c] == 0)
|
||||||
ep[c] = c;
|
ep[c] = c;
|
||||||
|
|
||||||
return(ep + 0200);
|
return(ep + 0200);
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include "sed.h"
|
#include "sed.h"
|
||||||
|
|
||||||
char *trans[040] = {
|
char *trans[040] = {
|
||||||
@@ -37,11 +39,20 @@ char *trans[040] = {
|
|||||||
};
|
};
|
||||||
char rub[] = {"\177"};
|
char rub[] = {"\177"};
|
||||||
|
|
||||||
execute(file)
|
char *gline(char *addr);
|
||||||
char *file;
|
int match(char *expbuf, int gf);
|
||||||
|
void command(union reptr *ipc);
|
||||||
|
void arout(void);
|
||||||
|
int advance(char *alp, char *aep);
|
||||||
|
int ecmp(char *a, char *b, int count);
|
||||||
|
void dosub(char *rhsbuf);
|
||||||
|
char *place(char *asp, char *al1, char *al2);
|
||||||
|
|
||||||
|
void execute(file)
|
||||||
|
char *file;
|
||||||
{
|
{
|
||||||
register char *p1, *p2;
|
char *p1, *p2;
|
||||||
register union reptr *ipc;
|
union reptr *ipc;
|
||||||
int c;
|
int c;
|
||||||
char *execp;
|
char *execp;
|
||||||
|
|
||||||
@@ -55,86 +66,86 @@ char *file;
|
|||||||
ebp = ibuf;
|
ebp = ibuf;
|
||||||
cbp = ibuf;
|
cbp = ibuf;
|
||||||
|
|
||||||
if(pending) {
|
if (pending) {
|
||||||
ipc = pending;
|
ipc = pending;
|
||||||
pending = 0;
|
pending = 0;
|
||||||
goto yes;
|
goto yes;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(;;) {
|
for (;;) {
|
||||||
if((execp = gline(linebuf)) == badp) {
|
if ((execp = gline(linebuf)) == badp) {
|
||||||
close(f);
|
close(f);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
spend = execp;
|
spend = execp;
|
||||||
|
|
||||||
for(ipc = ptrspace; ipc->A.command; ) {
|
for (ipc = ptrspace; ipc->A.command; ) {
|
||||||
|
|
||||||
p1 = ipc->A.ad1;
|
p1 = ipc->A.ad1;
|
||||||
p2 = ipc->A.ad2;
|
p2 = ipc->A.ad2;
|
||||||
|
|
||||||
if(p1) {
|
if (p1) {
|
||||||
|
|
||||||
if(ipc->A.inar) {
|
if (ipc->A.inar) {
|
||||||
if(*p2 == CEND) {
|
if (*p2 == CEND) {
|
||||||
p1 = 0;
|
p1 = 0;
|
||||||
} else if(*p2 == CLNUM) {
|
} else if (*p2 == CLNUM) {
|
||||||
c = p2[1];
|
c = p2[1];
|
||||||
if(lnum > tlno[c]) {
|
if (lnum > tlno[c]) {
|
||||||
ipc->A.inar = 0;
|
ipc->A.inar = 0;
|
||||||
if(ipc->A.negfl)
|
if (ipc->A.negfl)
|
||||||
goto yes;
|
goto yes;
|
||||||
ipc++;
|
ipc++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(lnum == tlno[c]) {
|
if (lnum == tlno[c]) {
|
||||||
ipc->A.inar = 0;
|
ipc->A.inar = 0;
|
||||||
}
|
}
|
||||||
} else if(match(p2, 0)) {
|
} else if (match(p2, 0)) {
|
||||||
ipc->A.inar = 0;
|
ipc->A.inar = 0;
|
||||||
}
|
}
|
||||||
} else if(*p1 == CEND) {
|
} else if (*p1 == CEND) {
|
||||||
if(!dolflag) {
|
if (!dolflag) {
|
||||||
if(ipc->A.negfl)
|
if (ipc->A.negfl)
|
||||||
goto yes;
|
goto yes;
|
||||||
ipc++;
|
ipc++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if(*p1 == CLNUM) {
|
} else if (*p1 == CLNUM) {
|
||||||
c = p1[1];
|
c = p1[1];
|
||||||
if(lnum != tlno[c]) {
|
if (lnum != tlno[c]) {
|
||||||
if(ipc->A.negfl)
|
if (ipc->A.negfl)
|
||||||
goto yes;
|
goto yes;
|
||||||
ipc++;
|
ipc++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(p2)
|
if (p2)
|
||||||
ipc->A.inar = 1;
|
ipc->A.inar = 1;
|
||||||
} else if(match(p1, 0)) {
|
} else if (match(p1, 0)) {
|
||||||
if(p2)
|
if (p2)
|
||||||
ipc->A.inar = 1;
|
ipc->A.inar = 1;
|
||||||
} else {
|
} else {
|
||||||
if(ipc->A.negfl)
|
if (ipc->A.negfl)
|
||||||
goto yes;
|
goto yes;
|
||||||
ipc++;
|
ipc++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ipc->A.negfl) {
|
if (ipc->A.negfl) {
|
||||||
ipc++;
|
ipc++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
yes:
|
yes:
|
||||||
command(ipc);
|
command(ipc);
|
||||||
|
|
||||||
if(delflag)
|
if (delflag)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if(jflag) {
|
if (jflag) {
|
||||||
jflag = 0;
|
jflag = 0;
|
||||||
if((ipc = ipc->B.lb1) == 0) {
|
if ((ipc = ipc->B.lb1) == 0) {
|
||||||
ipc = ptrspace;
|
ipc = ptrspace;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -142,13 +153,13 @@ char *file;
|
|||||||
ipc++;
|
ipc++;
|
||||||
|
|
||||||
}
|
}
|
||||||
if(!nflag && !delflag) {
|
if (!nflag && !delflag) {
|
||||||
for(p1 = linebuf; p1 < spend; p1++)
|
for (p1 = linebuf; p1 < spend; p1++)
|
||||||
putc(*p1, stdout);
|
putc(*p1, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(aptr > abuf) {
|
if (aptr > abuf) {
|
||||||
arout();
|
arout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,16 +167,18 @@ char *file;
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
match(expbuf, gf)
|
|
||||||
char *expbuf;
|
|
||||||
{
|
|
||||||
register char *p1, *p2, c;
|
|
||||||
|
|
||||||
if(gf) {
|
int match(expbuf, gf)
|
||||||
if(*expbuf) return(0);
|
char *expbuf;
|
||||||
|
{
|
||||||
|
char *p1, *p2, c;
|
||||||
|
|
||||||
|
if (gf) {
|
||||||
|
if (*expbuf)
|
||||||
|
return(0);
|
||||||
p1 = linebuf;
|
p1 = linebuf;
|
||||||
p2 = genbuf;
|
p2 = genbuf;
|
||||||
while(*p1++ = *p2++);
|
while ((*p1++ = *p2++));
|
||||||
locs = p1 = loc2;
|
locs = p1 = loc2;
|
||||||
} else {
|
} else {
|
||||||
p1 = linebuf;
|
p1 = linebuf;
|
||||||
@@ -173,45 +186,46 @@ char *expbuf;
|
|||||||
}
|
}
|
||||||
|
|
||||||
p2 = expbuf;
|
p2 = expbuf;
|
||||||
if(*p2++) {
|
if (*p2++) {
|
||||||
loc1 = p1;
|
loc1 = p1;
|
||||||
if(*p2 == CCHR && p2[1] != *p1)
|
if (*p2 == CCHR && p2[1] != *p1)
|
||||||
return(0);
|
return(0);
|
||||||
return(advance(p1, p2));
|
return(advance(p1, p2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fast check for first character */
|
/* fast check for first character */
|
||||||
|
|
||||||
if(*p2 == CCHR) {
|
if (*p2 == CCHR) {
|
||||||
c = p2[1];
|
c = p2[1];
|
||||||
do {
|
do {
|
||||||
if(*p1 != c)
|
if (*p1 != c)
|
||||||
continue;
|
continue;
|
||||||
if(advance(p1, p2)) {
|
if (advance(p1, p2)) {
|
||||||
loc1 = p1;
|
loc1 = p1;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
} while(*p1++);
|
} while (*p1++);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if(advance(p1, p2)) {
|
if (advance(p1, p2)) {
|
||||||
loc1 = p1;
|
loc1 = p1;
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
} while(*p1++);
|
} while (*p1++);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
advance(alp, aep)
|
|
||||||
char *alp, *aep;
|
int advance(alp, aep)
|
||||||
|
char *alp, *aep;
|
||||||
{
|
{
|
||||||
register char *lp, *ep, *curlp;
|
char *lp, *ep, *curlp;
|
||||||
char c;
|
char c;
|
||||||
char *bbeg;
|
char *bbeg;
|
||||||
int ct;
|
int ct;
|
||||||
|
|
||||||
/*fprintf(stderr, "*lp = %c, %o\n*ep = %c, %o\n", *lp, *lp, *ep, *ep); /*DEBUG*/
|
/*fprintf(stderr, "*lp = %c, %o\n*ep = %c, %o\n", *lp, *lp, *ep, *ep);*/ /*DEBUG*/
|
||||||
|
|
||||||
lp = alp;
|
lp = alp;
|
||||||
ep = aep;
|
ep = aep;
|
||||||
@@ -239,7 +253,7 @@ char *alp, *aep;
|
|||||||
|
|
||||||
case CCL:
|
case CCL:
|
||||||
c = *lp++ & 0177;
|
c = *lp++ & 0177;
|
||||||
if(ep[c>>3] & bittab[c & 07]) {
|
if (ep[c>>3] & bittab[c & 07]) {
|
||||||
ep += 16;
|
ep += 16;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -257,7 +271,7 @@ char *alp, *aep;
|
|||||||
bbeg = braslist[*ep];
|
bbeg = braslist[*ep];
|
||||||
ct = braelist[*ep++] - bbeg;
|
ct = braelist[*ep++] - bbeg;
|
||||||
|
|
||||||
if(ecmp(bbeg, lp, ct)) {
|
if (ecmp(bbeg, lp, ct)) {
|
||||||
lp += ct;
|
lp += ct;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -267,11 +281,11 @@ char *alp, *aep;
|
|||||||
bbeg = braslist[*ep];
|
bbeg = braslist[*ep];
|
||||||
ct = braelist[*ep++] - bbeg;
|
ct = braelist[*ep++] - bbeg;
|
||||||
curlp = lp;
|
curlp = lp;
|
||||||
while(ecmp(bbeg, lp, ct))
|
while (ecmp(bbeg, lp, ct))
|
||||||
lp += ct;
|
lp += ct;
|
||||||
|
|
||||||
while(lp >= curlp) {
|
while (lp >= curlp) {
|
||||||
if(advance(lp, ep)) return(1);
|
if (advance(lp, ep)) return(1);
|
||||||
lp -= ct;
|
lp -= ct;
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
@@ -292,39 +306,39 @@ char *alp, *aep;
|
|||||||
curlp = lp;
|
curlp = lp;
|
||||||
do {
|
do {
|
||||||
c = *lp++ & 0177;
|
c = *lp++ & 0177;
|
||||||
} while(ep[c>>3] & bittab[c & 07]);
|
} while (ep[c>>3] & bittab[c & 07]);
|
||||||
ep += 16;
|
ep += 16;
|
||||||
goto star;
|
goto star;
|
||||||
|
|
||||||
star:
|
star:
|
||||||
if(--lp == curlp) {
|
if (--lp == curlp) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*ep == CCHR) {
|
if (*ep == CCHR) {
|
||||||
c = ep[1];
|
c = ep[1];
|
||||||
do {
|
do {
|
||||||
if(*lp != c)
|
if (*lp != c)
|
||||||
continue;
|
continue;
|
||||||
if(advance(lp, ep))
|
if (advance(lp, ep))
|
||||||
return(1);
|
return(1);
|
||||||
} while(lp-- > curlp);
|
} while (lp-- > curlp);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*ep == CBACK) {
|
if (*ep == CBACK) {
|
||||||
c = *(braslist[ep[1]]);
|
c = *(braslist[ep[1]]);
|
||||||
do {
|
do {
|
||||||
if(*lp != c)
|
if (*lp != c)
|
||||||
continue;
|
continue;
|
||||||
if(advance(lp, ep))
|
if (advance(lp, ep))
|
||||||
return(1);
|
return(1);
|
||||||
} while(lp-- > curlp);
|
} while (lp-- > curlp);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if(lp == locs) break;
|
if (lp == locs) break;
|
||||||
if (advance(lp, ep))
|
if (advance(lp, ep))
|
||||||
return(1);
|
return(1);
|
||||||
} while (lp-- > curlp);
|
} while (lp-- > curlp);
|
||||||
@@ -334,27 +348,28 @@ char *alp, *aep;
|
|||||||
fprintf(stderr, "RE botch, %o\n", *--ep);
|
fprintf(stderr, "RE botch, %o\n", *--ep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
substitute(ipc)
|
|
||||||
union reptr *ipc;
|
int substitute(ipc)
|
||||||
|
union reptr *ipc;
|
||||||
{
|
{
|
||||||
if(match(ipc->A.re1, 0) == 0) return(0);
|
if (match(ipc->A.re1, 0) == 0) return(0);
|
||||||
|
|
||||||
sflag = 1;
|
sflag = 1;
|
||||||
dosub(ipc->A.rhs);
|
dosub(ipc->A.rhs);
|
||||||
|
|
||||||
if(ipc->A.gfl) {
|
if (ipc->A.gfl) {
|
||||||
while(*loc2) {
|
while (*loc2) {
|
||||||
if(match(ipc->A.re1, 1) == 0) break;
|
if (match(ipc->A.re1, 1) == 0) break;
|
||||||
dosub(ipc->A.rhs);
|
dosub(ipc->A.rhs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
dosub(rhsbuf)
|
void dosub(rhsbuf)
|
||||||
char *rhsbuf;
|
char *rhsbuf;
|
||||||
{
|
{
|
||||||
register char *lp, *sp, *rp;
|
char *lp, *sp, *rp;
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
lp = linebuf;
|
lp = linebuf;
|
||||||
@@ -362,7 +377,7 @@ char *rhsbuf;
|
|||||||
rp = rhsbuf;
|
rp = rhsbuf;
|
||||||
while (lp < loc1)
|
while (lp < loc1)
|
||||||
*sp++ = *lp++;
|
*sp++ = *lp++;
|
||||||
while(c = *rp++) {
|
while ((c = *rp++)) {
|
||||||
if (c == '&') {
|
if (c == '&') {
|
||||||
sp = place(sp, loc1, loc2);
|
sp = place(sp, loc1, loc2);
|
||||||
continue;
|
continue;
|
||||||
@@ -376,19 +391,20 @@ char *rhsbuf;
|
|||||||
}
|
}
|
||||||
lp = loc2;
|
lp = loc2;
|
||||||
loc2 = sp - genbuf + linebuf;
|
loc2 = sp - genbuf + linebuf;
|
||||||
while (*sp++ = *lp++)
|
while ((*sp++ = *lp++))
|
||||||
if (sp >= &genbuf[LBSIZE]) {
|
if (sp >= &genbuf[LBSIZE]) {
|
||||||
fprintf(stderr, "Output line too long.\n");
|
fprintf(stderr, "Output line too long.\n");
|
||||||
}
|
}
|
||||||
lp = linebuf;
|
lp = linebuf;
|
||||||
sp = genbuf;
|
sp = genbuf;
|
||||||
while (*lp++ = *sp++);
|
while ((*lp++ = *sp++));
|
||||||
spend = lp-1;
|
spend = lp-1;
|
||||||
}
|
}
|
||||||
char *place(asp, al1, al2)
|
|
||||||
char *asp, *al1, *al2;
|
char *place(asp, al1, al2)
|
||||||
|
char *asp, *al1, *al2;
|
||||||
{
|
{
|
||||||
register char *sp, *l1, *l2;
|
char *sp, *l1, *l2;
|
||||||
|
|
||||||
sp = asp;
|
sp = asp;
|
||||||
l1 = al1;
|
l1 = al1;
|
||||||
@@ -401,19 +417,19 @@ char *asp, *al1, *al2;
|
|||||||
return(sp);
|
return(sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
command(ipc)
|
void command(ipc)
|
||||||
union reptr *ipc;
|
union reptr *ipc;
|
||||||
{
|
{
|
||||||
register int i;
|
int i;
|
||||||
register char *p1, *p2, *p3;
|
char *p1, *p2, *p3;
|
||||||
char *execp;
|
char *execp;
|
||||||
|
|
||||||
|
|
||||||
switch(ipc->A.command) {
|
switch (ipc->A.command) {
|
||||||
|
|
||||||
case ACOM:
|
case ACOM:
|
||||||
*aptr++ = ipc;
|
*aptr++ = ipc;
|
||||||
if(aptr >= &abuf[ABUFSIZE]) {
|
if (aptr >= &abuf[ABUFSIZE]) {
|
||||||
fprintf(stderr, "Too many appends after line %ld\n",
|
fprintf(stderr, "Too many appends after line %ld\n",
|
||||||
lnum);
|
lnum);
|
||||||
}
|
}
|
||||||
@@ -422,8 +438,8 @@ union reptr *ipc;
|
|||||||
|
|
||||||
case CCOM:
|
case CCOM:
|
||||||
delflag = 1;
|
delflag = 1;
|
||||||
if(!ipc->A.inar || dolflag) {
|
if (!ipc->A.inar || dolflag) {
|
||||||
for(p1 = ipc->A.re1; *p1; )
|
for (p1 = ipc->A.re1; *p1; )
|
||||||
putc(*p1++, stdout);
|
putc(*p1++, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
}
|
}
|
||||||
@@ -434,15 +450,15 @@ union reptr *ipc;
|
|||||||
case CDCOM:
|
case CDCOM:
|
||||||
p1 = p2 = linebuf;
|
p1 = p2 = linebuf;
|
||||||
|
|
||||||
while(*p1 != '\n') {
|
while (*p1 != '\n') {
|
||||||
if(*p1++ == 0) {
|
if (*p1++ == 0) {
|
||||||
delflag++;
|
delflag++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p1++;
|
p1++;
|
||||||
while(*p2++ = *p1++);
|
while ((*p2++ = *p1++));
|
||||||
spend = p2-1;
|
spend = p2-1;
|
||||||
jflag++;
|
jflag++;
|
||||||
break;
|
break;
|
||||||
@@ -454,7 +470,7 @@ union reptr *ipc;
|
|||||||
case GCOM:
|
case GCOM:
|
||||||
p1 = linebuf;
|
p1 = linebuf;
|
||||||
p2 = holdsp;
|
p2 = holdsp;
|
||||||
while(*p1++ = *p2++);
|
while ((*p1++ = *p2++));
|
||||||
spend = p1-1;
|
spend = p1-1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -462,8 +478,8 @@ union reptr *ipc;
|
|||||||
*spend++ = '\n';
|
*spend++ = '\n';
|
||||||
p1 = spend;
|
p1 = spend;
|
||||||
p2 = holdsp;
|
p2 = holdsp;
|
||||||
while(*p1++ = *p2++)
|
while ((*p1++ = *p2++))
|
||||||
if(p1 >= lbend)
|
if (p1 >= lbend)
|
||||||
break;
|
break;
|
||||||
spend = p1-1;
|
spend = p1-1;
|
||||||
break;
|
break;
|
||||||
@@ -471,7 +487,7 @@ union reptr *ipc;
|
|||||||
case HCOM:
|
case HCOM:
|
||||||
p1 = holdsp;
|
p1 = holdsp;
|
||||||
p2 = linebuf;
|
p2 = linebuf;
|
||||||
while(*p1++ = *p2++);
|
while ((*p1++ = *p2++));
|
||||||
hspend = p1-1;
|
hspend = p1-1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -479,14 +495,14 @@ union reptr *ipc;
|
|||||||
*hspend++ = '\n';
|
*hspend++ = '\n';
|
||||||
p1 = hspend;
|
p1 = hspend;
|
||||||
p2 = linebuf;
|
p2 = linebuf;
|
||||||
while(*p1++ = *p2++)
|
while ((*p1++ = *p2++))
|
||||||
if(p1 >= hend)
|
if (p1 >= hend)
|
||||||
break;
|
break;
|
||||||
hspend = p1-1;
|
hspend = p1-1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ICOM:
|
case ICOM:
|
||||||
for(p1 = ipc->A.re1; *p1; )
|
for (p1 = ipc->A.re1; *p1; )
|
||||||
putc(*p1++, stdout);
|
putc(*p1++, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
break;
|
break;
|
||||||
@@ -499,12 +515,12 @@ union reptr *ipc;
|
|||||||
p1 = linebuf;
|
p1 = linebuf;
|
||||||
p2 = genbuf;
|
p2 = genbuf;
|
||||||
genbuf[72] = 0;
|
genbuf[72] = 0;
|
||||||
while(*p1)
|
while (*p1)
|
||||||
if(*p1 >= 040) {
|
if (*p1 >= 040) {
|
||||||
if(*p1 == 0177) {
|
if (*p1 == 0177) {
|
||||||
p3 = rub;
|
p3 = rub;
|
||||||
while(*p2++ = *p3++)
|
while ((*p2++ = *p3++))
|
||||||
if(p2 >= lcomend) {
|
if (p2 >= lcomend) {
|
||||||
*p2 = '\\';
|
*p2 = '\\';
|
||||||
fprintf(stdout, "%s\n", genbuf);
|
fprintf(stdout, "%s\n", genbuf);
|
||||||
p2 = genbuf;
|
p2 = genbuf;
|
||||||
@@ -514,15 +530,15 @@ union reptr *ipc;
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
*p2++ = *p1++;
|
*p2++ = *p1++;
|
||||||
if(p2 >= lcomend) {
|
if (p2 >= lcomend) {
|
||||||
*p2 = '\\';
|
*p2 = '\\';
|
||||||
fprintf(stdout, "%s\n", genbuf);
|
fprintf(stdout, "%s\n", genbuf);
|
||||||
p2 = genbuf;
|
p2 = genbuf;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
p3 = trans[*p1-1];
|
p3 = trans[*p1-1];
|
||||||
while(*p2++ = *p3++)
|
while ((*p2++ = *p3++))
|
||||||
if(p2 >= lcomend) {
|
if (p2 >= lcomend) {
|
||||||
*p2 = '\\';
|
*p2 = '\\';
|
||||||
fprintf(stdout, "%s\n", genbuf);
|
fprintf(stdout, "%s\n", genbuf);
|
||||||
p2 = genbuf;
|
p2 = genbuf;
|
||||||
@@ -535,15 +551,15 @@ union reptr *ipc;
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NCOM:
|
case NCOM:
|
||||||
if(!nflag) {
|
if (!nflag) {
|
||||||
for(p1 = linebuf; p1 < spend; p1++)
|
for (p1 = linebuf; p1 < spend; p1++)
|
||||||
putc(*p1, stdout);
|
putc(*p1, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(aptr > abuf)
|
if (aptr > abuf)
|
||||||
arout();
|
arout();
|
||||||
if((execp = gline(linebuf)) == badp) {
|
if ((execp = gline(linebuf)) == badp) {
|
||||||
pending = ipc;
|
pending = ipc;
|
||||||
delflag = 1;
|
delflag = 1;
|
||||||
break;
|
break;
|
||||||
@@ -552,10 +568,10 @@ union reptr *ipc;
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case CNCOM:
|
case CNCOM:
|
||||||
if(aptr > abuf)
|
if (aptr > abuf)
|
||||||
arout();
|
arout();
|
||||||
*spend++ = '\n';
|
*spend++ = '\n';
|
||||||
if((execp = gline(spend)) == badp) {
|
if ((execp = gline(spend)) == badp) {
|
||||||
pending = ipc;
|
pending = ipc;
|
||||||
delflag = 1;
|
delflag = 1;
|
||||||
break;
|
break;
|
||||||
@@ -564,30 +580,30 @@ union reptr *ipc;
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case PCOM:
|
case PCOM:
|
||||||
for(p1 = linebuf; p1 < spend; p1++)
|
for (p1 = linebuf; p1 < spend; p1++)
|
||||||
putc(*p1, stdout);
|
putc(*p1, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
break;
|
break;
|
||||||
case CPCOM:
|
case CPCOM:
|
||||||
cpcom:
|
cpcom:
|
||||||
for(p1 = linebuf; *p1 != '\n' && *p1 != '\0'; )
|
for (p1 = linebuf; *p1 != '\n' && *p1 != '\0'; )
|
||||||
putc(*p1++, stdout);
|
putc(*p1++, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QCOM:
|
case QCOM:
|
||||||
if(!nflag) {
|
if (!nflag) {
|
||||||
for(p1 = linebuf; p1 < spend; p1++)
|
for (p1 = linebuf; p1 < spend; p1++)
|
||||||
putc(*p1, stdout);
|
putc(*p1, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
}
|
}
|
||||||
if(aptr > abuf) arout();
|
if (aptr > abuf) arout();
|
||||||
fclose(stdout);
|
fclose(stdout);
|
||||||
exit(0);
|
exit(0);
|
||||||
case RCOM:
|
case RCOM:
|
||||||
|
|
||||||
*aptr++ = ipc;
|
*aptr++ = ipc;
|
||||||
if(aptr >= &abuf[ABUFSIZE])
|
if (aptr >= &abuf[ABUFSIZE])
|
||||||
fprintf(stderr, "Too many reads after line%ld\n",
|
fprintf(stderr, "Too many reads after line%ld\n",
|
||||||
lnum);
|
lnum);
|
||||||
|
|
||||||
@@ -597,20 +613,21 @@ union reptr *ipc;
|
|||||||
|
|
||||||
case SCOM:
|
case SCOM:
|
||||||
i = substitute(ipc);
|
i = substitute(ipc);
|
||||||
if(ipc->A.pfl && i)
|
if (ipc->A.pfl && i) {
|
||||||
if(ipc->A.pfl == 1) {
|
if (ipc->A.pfl == 1) {
|
||||||
for(p1 = linebuf; p1 < spend; p1++)
|
for (p1 = linebuf; p1 < spend; p1++)
|
||||||
putc(*p1, stdout);
|
putc(*p1, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
goto cpcom;
|
goto cpcom;
|
||||||
if(i && ipc->A.fcode)
|
}
|
||||||
|
if (i && ipc->A.fcode)
|
||||||
goto wcom;
|
goto wcom;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TCOM:
|
case TCOM:
|
||||||
if(sflag == 0) break;
|
if (sflag == 0) break;
|
||||||
sflag = 0;
|
sflag = 0;
|
||||||
jflag = 1;
|
jflag = 1;
|
||||||
break;
|
break;
|
||||||
@@ -623,32 +640,32 @@ union reptr *ipc;
|
|||||||
case XCOM:
|
case XCOM:
|
||||||
p1 = linebuf;
|
p1 = linebuf;
|
||||||
p2 = genbuf;
|
p2 = genbuf;
|
||||||
while(*p2++ = *p1++);
|
while ((*p2++ = *p1++));
|
||||||
p1 = holdsp;
|
p1 = holdsp;
|
||||||
p2 = linebuf;
|
p2 = linebuf;
|
||||||
while(*p2++ = *p1++);
|
while ((*p2++ = *p1++));
|
||||||
spend = p2 - 1;
|
spend = p2 - 1;
|
||||||
p1 = genbuf;
|
p1 = genbuf;
|
||||||
p2 = holdsp;
|
p2 = holdsp;
|
||||||
while(*p2++ = *p1++);
|
while ((*p2++ = *p1++));
|
||||||
hspend = p2 - 1;
|
hspend = p2 - 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case YCOM:
|
case YCOM:
|
||||||
p1 = linebuf;
|
p1 = linebuf;
|
||||||
p2 = ipc->A.re1;
|
p2 = ipc->A.re1;
|
||||||
while(*p1 = p2[*p1]) p1++;
|
while ((*p1 = p2[*p1]))
|
||||||
|
p1++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *gline(addr)
|
||||||
gline(addr)
|
char *addr;
|
||||||
char *addr;
|
|
||||||
{
|
{
|
||||||
register char *p1, *p2;
|
char *p1, *p2;
|
||||||
register c;
|
int c;
|
||||||
p1 = addr;
|
p1 = addr;
|
||||||
p2 = cbp;
|
p2 = cbp;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@@ -660,10 +677,10 @@ char *addr;
|
|||||||
ebp = ibuf+c;
|
ebp = ibuf+c;
|
||||||
}
|
}
|
||||||
if ((c = *p2++) == '\n') {
|
if ((c = *p2++) == '\n') {
|
||||||
if(p2 >= ebp) {
|
if (p2 >= ebp) {
|
||||||
if((c = read(f, ibuf, BUFSIZ)) <= 0) {
|
if ((c = read(f, ibuf, BUFSIZ)) <= 0) {
|
||||||
close(f);
|
close(f);
|
||||||
if(eargc == 0)
|
if (eargc == 0)
|
||||||
dolflag = 1;
|
dolflag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -672,8 +689,8 @@ char *addr;
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(c)
|
if (c)
|
||||||
if(p1 < lbend)
|
if (p1 < lbend)
|
||||||
*p1++ = c;
|
*p1++ = c;
|
||||||
}
|
}
|
||||||
lnum++;
|
lnum++;
|
||||||
@@ -682,31 +699,32 @@ char *addr;
|
|||||||
|
|
||||||
return(p1);
|
return(p1);
|
||||||
}
|
}
|
||||||
ecmp(a, b, count)
|
|
||||||
char *a, *b;
|
int ecmp(a, b, count)
|
||||||
|
char *a, *b;
|
||||||
{
|
{
|
||||||
while(count--)
|
while (count--)
|
||||||
if(*a++ != *b++) return(0);
|
if (*a++ != *b++) return(0);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
arout()
|
void arout()
|
||||||
{
|
{
|
||||||
register char *p1;
|
char *p1;
|
||||||
FILE *fi;
|
FILE *fi;
|
||||||
char c;
|
char c;
|
||||||
int t;
|
int t;
|
||||||
|
|
||||||
aptr = abuf - 1;
|
aptr = abuf - 1;
|
||||||
while(*++aptr) {
|
while (*++aptr) {
|
||||||
if((*aptr)->A.command == ACOM) {
|
if ((*aptr)->A.command == ACOM) {
|
||||||
for(p1 = (*aptr)->A.re1; *p1; )
|
for (p1 = (*aptr)->A.re1; *p1; )
|
||||||
putc(*p1++, stdout);
|
putc(*p1++, stdout);
|
||||||
putc('\n', stdout);
|
putc('\n', stdout);
|
||||||
} else {
|
} else {
|
||||||
if((fi = fopen((*aptr)->A.re1, "r")) == NULL)
|
if ((fi = fopen((*aptr)->A.re1, "r")) == NULL)
|
||||||
continue;
|
continue;
|
||||||
while((t = getc(fi)) != EOF) {
|
while ((t = getc(fi)) != EOF) {
|
||||||
c = t;
|
c = t;
|
||||||
putc(c, stdout);
|
putc(c, stdout);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,12 +54,13 @@ alloc(nbytes)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
addblok(reqd)
|
addblok(reqd)
|
||||||
unsigned reqd;
|
unsigned reqd;
|
||||||
{
|
{
|
||||||
if (stakbot == NIL)
|
if (stakbot == NIL)
|
||||||
{
|
{
|
||||||
extern end;
|
extern int end;
|
||||||
brkbegin = setbrk(BRKINCR * 5);
|
brkbegin = setbrk(BRKINCR * 5);
|
||||||
bloktop = (struct blk *) &end;
|
bloktop = (struct blk *) &end;
|
||||||
}
|
}
|
||||||
@@ -94,6 +95,7 @@ addblok(reqd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
free(ap)
|
free(ap)
|
||||||
struct blk *ap;
|
struct blk *ap;
|
||||||
{
|
{
|
||||||
@@ -109,9 +111,8 @@ free(ap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
void
|
||||||
chkbptr(ptr)
|
chkbptr(ptr)
|
||||||
struct blk *ptr;
|
struct blk *ptr;
|
||||||
{
|
{
|
||||||
@@ -147,7 +148,7 @@ chkbptr(ptr)
|
|||||||
abort(1);
|
abort(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
chkmem()
|
chkmem()
|
||||||
{
|
{
|
||||||
register struct blk *p = (struct blk *)brkbegin;
|
register struct blk *p = (struct blk *)brkbegin;
|
||||||
@@ -182,6 +183,5 @@ chkmem()
|
|||||||
blank();
|
blank();
|
||||||
prn((char *)bloktop - brkbegin - (un + us));
|
prn((char *)bloktop - brkbegin - (un + us));
|
||||||
newline();
|
newline();
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -93,36 +93,14 @@
|
|||||||
#include "name.h"
|
#include "name.h"
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
/* error catching */
|
/* error catching */
|
||||||
extern int errno;
|
extern int errno;
|
||||||
|
|
||||||
/* result type declarations */
|
/* result type declarations */
|
||||||
|
|
||||||
#define free afree
|
#define free afree
|
||||||
extern char *allat();
|
|
||||||
extern char *make();
|
|
||||||
extern char *alloc();
|
|
||||||
extern char *movstr();
|
|
||||||
extern char *movstrn();
|
|
||||||
extern struct trenod *cmd();
|
|
||||||
extern struct trenod *makefork();
|
|
||||||
extern struct namnod *lookup();
|
|
||||||
extern struct namnod *findnam();
|
|
||||||
extern struct dolnod *useargs();
|
|
||||||
extern float expr();
|
|
||||||
extern char *catpath();
|
|
||||||
extern char *getpath();
|
|
||||||
extern char *nextpath();
|
|
||||||
extern char **scan();
|
|
||||||
extern char *mactrim();
|
|
||||||
extern char *macro();
|
|
||||||
extern int exname();
|
|
||||||
extern int printnam();
|
|
||||||
extern int printro();
|
|
||||||
extern int printexp();
|
|
||||||
extern char **setenvv();
|
|
||||||
extern long time();
|
|
||||||
|
|
||||||
#define attrib(n,f) (n->namflg |= f)
|
#define attrib(n,f) (n->namflg |= f)
|
||||||
#define round(a,b) (((int)(((char *)(a)+b)-1))&~((b)-1))
|
#define round(a,b) (((int)(((char *)(a)+b)-1))&~((b)-1))
|
||||||
@@ -272,8 +250,6 @@ extern unsigned brkincr;
|
|||||||
#define SIGMOD 8
|
#define SIGMOD 8
|
||||||
#define SIGCAUGHT 16
|
#define SIGCAUGHT 16
|
||||||
|
|
||||||
extern void done();
|
|
||||||
extern void fault();
|
|
||||||
extern BOOL trapnote;
|
extern BOOL trapnote;
|
||||||
extern char *trapcom[];
|
extern char *trapcom[];
|
||||||
extern BOOL trapflg[];
|
extern BOOL trapflg[];
|
||||||
@@ -340,7 +316,7 @@ extern char badop[];
|
|||||||
#include "ctype.h"
|
#include "ctype.h"
|
||||||
|
|
||||||
extern int wasintr; /* used to tell if break or delete is hit
|
extern int wasintr; /* used to tell if break or delete is hit
|
||||||
* while executing a wait */
|
* while executing a wait */
|
||||||
extern int eflag;
|
extern int eflag;
|
||||||
|
|
||||||
|
|
||||||
@@ -356,3 +332,10 @@ extern int eflag;
|
|||||||
#define exitset() retval = exitval
|
#define exitset() retval = exitval
|
||||||
|
|
||||||
#define ENDPATH 27 /* see msg.c/defpath */
|
#define ENDPATH 27 /* see msg.c/defpath */
|
||||||
|
|
||||||
|
void addblok(unsigned reqd);
|
||||||
|
char *movstr(char *a, char *b);
|
||||||
|
char *setbrk(int incr);
|
||||||
|
void error(char *s);
|
||||||
|
void free(struct blk *ap);
|
||||||
|
void rmtemp(struct ionod *base);
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
|
|
||||||
/* ======== error handling ======== */
|
/* ======== error handling ======== */
|
||||||
|
void
|
||||||
failed(s1, s2)
|
failed(s1, s2)
|
||||||
char *s1, *s2;
|
char *s1, *s2;
|
||||||
{
|
{
|
||||||
@@ -21,12 +21,14 @@ char *s1, *s2;
|
|||||||
exitsh(ERROR);
|
exitsh(ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
error(s)
|
error(s)
|
||||||
char *s;
|
char *s;
|
||||||
{
|
{
|
||||||
failed(s, NIL);
|
failed(s, NIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
exitsh(xno)
|
exitsh(xno)
|
||||||
int xno;
|
int xno;
|
||||||
{
|
{
|
||||||
@@ -75,6 +77,7 @@ done()
|
|||||||
exit(exitval);
|
exit(exitval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
rmtemp(base)
|
rmtemp(base)
|
||||||
struct ionod *base;
|
struct ionod *base;
|
||||||
{
|
{
|
||||||
@@ -86,6 +89,7 @@ struct ionod *base;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
rmfunctmp()
|
rmfunctmp()
|
||||||
{
|
{
|
||||||
while (fiotemp)
|
while (fiotemp)
|
||||||
|
|||||||
@@ -5,12 +5,9 @@
|
|||||||
*/
|
*/
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
|
|
||||||
char *sbrk();
|
|
||||||
|
|
||||||
char*
|
char*
|
||||||
setbrk(incr)
|
setbrk(incr)
|
||||||
{
|
{
|
||||||
|
|
||||||
register char *a = sbrk(incr);
|
register char *a = sbrk(incr);
|
||||||
|
|
||||||
brkend = a + incr;
|
brkend = a + incr;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ locstak()
|
|||||||
{
|
{
|
||||||
if (brkend - stakbot < BRKINCR)
|
if (brkend - stakbot < BRKINCR)
|
||||||
{
|
{
|
||||||
if (setbrk(brkincr) == -1)
|
if (setbrk(brkincr) == (char*)-1)
|
||||||
error(nostack);
|
error(nostack);
|
||||||
if (brkincr < BRKMAX)
|
if (brkincr < BRKMAX)
|
||||||
brkincr += 256;
|
brkincr += 256;
|
||||||
@@ -56,6 +56,7 @@ register char *argp;
|
|||||||
return(oldstak);
|
return(oldstak);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
tdystak(x) /* try to bring stack back to x */
|
tdystak(x) /* try to bring stack back to x */
|
||||||
register char *x;
|
register char *x;
|
||||||
{
|
{
|
||||||
@@ -65,9 +66,10 @@ register char *x;
|
|||||||
stakbsy = stakbsy->word;
|
stakbsy = stakbsy->word;
|
||||||
}
|
}
|
||||||
staktop = stakbot = max((char *)(x), (char *)(stakbas));
|
staktop = stakbot = max((char *)(x), (char *)(stakbas));
|
||||||
rmtemp(x);
|
rmtemp((struct ionod *)x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
stakchk()
|
stakchk()
|
||||||
{
|
{
|
||||||
if ((brkend - stakbas) > BRKINCR + BRKINCR)
|
if ((brkend - stakbas) > BRKINCR + BRKINCR)
|
||||||
|
|||||||
Reference in New Issue
Block a user