1*48309Sbostic /*-
2*48309Sbostic * %sccs.include.proprietary.c%
3*48309Sbostic */
418578Sralph
5*48309Sbostic #ifndef lint
6*48309Sbostic static char sccsid[] = "@(#)sed1.c 4.4 (Berkeley) 04/18/91";
7*48309Sbostic #endif /* not lint */
8*48309Sbostic
918578Sralph #include <stdio.h>
1018578Sralph #include "sed.h"
1118578Sralph
1218578Sralph char *trans[040] = {
1318578Sralph "\\01",
1418578Sralph "\\02",
1518578Sralph "\\03",
1618578Sralph "\\04",
1718578Sralph "\\05",
1818578Sralph "\\06",
1918578Sralph "\\07",
2018578Sralph "<-",
2118578Sralph ">-",
2218578Sralph "\n",
2318578Sralph "\\13",
2418578Sralph "\\14",
2518578Sralph "\\15",
2618578Sralph "\\16",
2718578Sralph "\\17",
2818578Sralph "\\20",
2918578Sralph "\\21",
3018578Sralph "\\22",
3118578Sralph "\\23",
3218578Sralph "\\24",
3318578Sralph "\\25",
3418578Sralph "\\26",
3518578Sralph "\\27",
3618578Sralph "\\30",
3718578Sralph "\\31",
3818578Sralph "\\32",
3918578Sralph "\\33",
4018578Sralph "\\34",
4118578Sralph "\\35",
4218578Sralph "\\36",
4318578Sralph "\\37"
4418578Sralph };
4518578Sralph char rub[] = {"\177"};
4618578Sralph
execute(file)4718578Sralph execute(file)
4818578Sralph char *file;
4918578Sralph {
5018578Sralph register char *p1, *p2;
5133077Sbostic register struct reptr *ipc;
5218578Sralph int c;
5318578Sralph char *execp;
5418578Sralph
5518578Sralph if (file) {
5618578Sralph if ((f = open(file, 0)) < 0) {
5718578Sralph fprintf(stderr, "Can't open %s\n", file);
5818578Sralph }
5918578Sralph } else
6018578Sralph f = 0;
6118578Sralph
6218578Sralph ebp = ibuf;
6318578Sralph cbp = ibuf;
6418578Sralph
6518578Sralph if(pending) {
6618578Sralph ipc = pending;
6718578Sralph pending = 0;
6818578Sralph goto yes;
6918578Sralph }
7018578Sralph
7118578Sralph for(;;) {
7218578Sralph if((execp = gline(linebuf)) == badp) {
7318578Sralph close(f);
7418578Sralph return;
7518578Sralph }
7618578Sralph spend = execp;
7718578Sralph
7818578Sralph for(ipc = ptrspace; ipc->command; ) {
7918578Sralph
8018578Sralph p1 = ipc->ad1;
8118578Sralph p2 = ipc->ad2;
8218578Sralph
8318578Sralph if(p1) {
8418578Sralph
8518578Sralph if(ipc->inar) {
8618578Sralph if(*p2 == CEND) {
8718578Sralph p1 = 0;
8818578Sralph } else if(*p2 == CLNUM) {
8918578Sralph c = p2[1];
9018578Sralph if(lnum > tlno[c]) {
9118578Sralph ipc->inar = 0;
9218578Sralph if(ipc->negfl)
9318578Sralph goto yes;
9418578Sralph ipc++;
9518578Sralph continue;
9618578Sralph }
9718578Sralph if(lnum == tlno[c]) {
9818578Sralph ipc->inar = 0;
9918578Sralph }
10018578Sralph } else if(match(p2, 0)) {
10118578Sralph ipc->inar = 0;
10218578Sralph }
10318578Sralph } else if(*p1 == CEND) {
10418578Sralph if(!dolflag) {
10518578Sralph if(ipc->negfl)
10618578Sralph goto yes;
10718578Sralph ipc++;
10818578Sralph continue;
10918578Sralph }
11018578Sralph
11118578Sralph } else if(*p1 == CLNUM) {
11218578Sralph c = p1[1];
11318578Sralph if(lnum != tlno[c]) {
11418578Sralph if(ipc->negfl)
11518578Sralph goto yes;
11618578Sralph ipc++;
11718578Sralph continue;
11818578Sralph }
11918578Sralph if(p2)
12018578Sralph ipc->inar = 1;
12118578Sralph } else if(match(p1, 0)) {
12218578Sralph if(p2)
12318578Sralph ipc->inar = 1;
12418578Sralph } else {
12518578Sralph if(ipc->negfl)
12618578Sralph goto yes;
12718578Sralph ipc++;
12818578Sralph continue;
12918578Sralph }
13018578Sralph }
13118578Sralph
13218578Sralph if(ipc->negfl) {
13318578Sralph ipc++;
13418578Sralph continue;
13518578Sralph }
13618578Sralph yes:
13718578Sralph command(ipc);
13818578Sralph
13918578Sralph if(delflag)
14018578Sralph break;
14118578Sralph
14218578Sralph if(jflag) {
14318578Sralph jflag = 0;
14418578Sralph if((ipc = ipc->lb1) == 0) {
14518578Sralph ipc = ptrspace;
14618578Sralph break;
14718578Sralph }
14818578Sralph } else
14918578Sralph ipc++;
15018578Sralph
15118578Sralph }
15218578Sralph if(!nflag && !delflag) {
15318578Sralph for(p1 = linebuf; p1 < spend; p1++)
15418578Sralph putc(*p1, stdout);
15518578Sralph putc('\n', stdout);
15618578Sralph }
15718578Sralph
15818578Sralph if(aptr > abuf) {
15918578Sralph arout();
16018578Sralph }
16118578Sralph
16218578Sralph delflag = 0;
16318578Sralph
16418578Sralph }
16518578Sralph }
match(expbuf,gf)16618578Sralph match(expbuf, gf)
16718578Sralph char *expbuf;
16818578Sralph {
16918578Sralph register char *p1, *p2, c;
17018578Sralph
17118578Sralph if(gf) {
17218578Sralph if(*expbuf) return(0);
17318578Sralph p1 = linebuf;
17418578Sralph p2 = genbuf;
17518578Sralph while(*p1++ = *p2++);
17618578Sralph locs = p1 = loc2;
17718578Sralph } else {
17818578Sralph p1 = linebuf;
17918578Sralph locs = 0;
18018578Sralph }
18118578Sralph
18218578Sralph p2 = expbuf;
18318578Sralph if(*p2++) {
18418578Sralph loc1 = p1;
18518578Sralph if(*p2 == CCHR && p2[1] != *p1)
18618578Sralph return(0);
18718578Sralph return(advance(p1, p2));
18818578Sralph }
18918578Sralph
19018578Sralph /* fast check for first character */
19118578Sralph
19218578Sralph if(*p2 == CCHR) {
19318578Sralph c = p2[1];
19418578Sralph do {
19518578Sralph if(*p1 != c)
19618578Sralph continue;
19718578Sralph if(advance(p1, p2)) {
19818578Sralph loc1 = p1;
19918578Sralph return(1);
20018578Sralph }
20118578Sralph } while(*p1++);
20218578Sralph return(0);
20318578Sralph }
20418578Sralph
20518578Sralph do {
20618578Sralph if(advance(p1, p2)) {
20718578Sralph loc1 = p1;
20818578Sralph return(1);
20918578Sralph }
21018578Sralph } while(*p1++);
21118578Sralph return(0);
21218578Sralph }
advance(alp,aep)21318578Sralph advance(alp, aep)
21418578Sralph char *alp, *aep;
21518578Sralph {
21618578Sralph register char *lp, *ep, *curlp;
21718578Sralph char c;
21818578Sralph char *bbeg;
21918578Sralph int ct;
22018578Sralph
22118578Sralph /*fprintf(stderr, "*lp = %c, %o\n*ep = %c, %o\n", *lp, *lp, *ep, *ep); /*DEBUG*/
22218578Sralph
22318578Sralph lp = alp;
22418578Sralph ep = aep;
22518578Sralph for (;;) switch (*ep++) {
22618578Sralph
22718578Sralph case CCHR:
22818578Sralph if (*ep++ == *lp++)
22918578Sralph continue;
23018578Sralph return(0);
23118578Sralph
23218578Sralph case CDOT:
23318578Sralph if (*lp++)
23418578Sralph continue;
23518578Sralph return(0);
23618578Sralph
23718578Sralph case CNL:
23818578Sralph case CDOL:
23918578Sralph if (*lp == 0)
24018578Sralph continue;
24118578Sralph return(0);
24218578Sralph
24318578Sralph case CEOF:
24418578Sralph loc2 = lp;
24518578Sralph return(1);
24618578Sralph
24718578Sralph case CCL:
24818578Sralph c = *lp++ & 0177;
24918578Sralph if(ep[c>>3] & bittab[c & 07]) {
25018578Sralph ep += 16;
25118578Sralph continue;
25218578Sralph }
25318578Sralph return(0);
25418578Sralph
25518578Sralph case CBRA:
25618578Sralph braslist[*ep++] = lp;
25718578Sralph continue;
25818578Sralph
25918578Sralph case CKET:
26018578Sralph braelist[*ep++] = lp;
26118578Sralph continue;
26218578Sralph
26318578Sralph case CBACK:
26418578Sralph bbeg = braslist[*ep];
26518578Sralph ct = braelist[*ep++] - bbeg;
26618578Sralph
26718578Sralph if(ecmp(bbeg, lp, ct)) {
26818578Sralph lp += ct;
26918578Sralph continue;
27018578Sralph }
27118578Sralph return(0);
27218578Sralph
27318578Sralph case CBACK|STAR:
27418578Sralph bbeg = braslist[*ep];
27518578Sralph ct = braelist[*ep++] - bbeg;
27618578Sralph curlp = lp;
27718578Sralph while(ecmp(bbeg, lp, ct))
27818578Sralph lp += ct;
27918578Sralph
28018578Sralph while(lp >= curlp) {
28118578Sralph if(advance(lp, ep)) return(1);
28218578Sralph lp -= ct;
28318578Sralph }
28418578Sralph return(0);
28518578Sralph
28618578Sralph
28718578Sralph case CDOT|STAR:
28818578Sralph curlp = lp;
28918578Sralph while (*lp++);
29018578Sralph goto star;
29118578Sralph
29218578Sralph case CCHR|STAR:
29318578Sralph curlp = lp;
29418578Sralph while (*lp++ == *ep);
29518578Sralph ep++;
29618578Sralph goto star;
29718578Sralph
29818578Sralph case CCL|STAR:
29918578Sralph curlp = lp;
30018578Sralph do {
30118578Sralph c = *lp++ & 0177;
30218578Sralph } while(ep[c>>3] & bittab[c & 07]);
30318578Sralph ep += 16;
30418578Sralph goto star;
30518578Sralph
30618578Sralph star:
30718578Sralph if(--lp == curlp) {
30818578Sralph continue;
30918578Sralph }
31018578Sralph
31118578Sralph if(*ep == CCHR) {
31218578Sralph c = ep[1];
31318578Sralph do {
31418578Sralph if(*lp != c)
31518578Sralph continue;
31618578Sralph if(advance(lp, ep))
31718578Sralph return(1);
31818578Sralph } while(lp-- > curlp);
31918578Sralph return(0);
32018578Sralph }
32118578Sralph
32218578Sralph if(*ep == CBACK) {
32318578Sralph c = *(braslist[ep[1]]);
32418578Sralph do {
32518578Sralph if(*lp != c)
32618578Sralph continue;
32718578Sralph if(advance(lp, ep))
32818578Sralph return(1);
32918578Sralph } while(lp-- > curlp);
33018578Sralph return(0);
33118578Sralph }
33218578Sralph
33318578Sralph do {
33418578Sralph if(lp == locs) break;
33518578Sralph if (advance(lp, ep))
33618578Sralph return(1);
33718578Sralph } while (lp-- > curlp);
33818578Sralph return(0);
33918578Sralph
34018578Sralph default:
34118578Sralph fprintf(stderr, "RE botch, %o\n", *--ep);
34218578Sralph }
34318578Sralph }
34418578Sralph substitute(ipc)
34533077Sbostic struct reptr *ipc;
34618578Sralph {
34718578Sralph if(match(ipc->re1, 0) == 0) return(0);
34818578Sralph
34918578Sralph sflag = 1;
35018578Sralph dosub(ipc->rhs);
35118578Sralph
35218578Sralph if(ipc->gfl) {
35318578Sralph while(*loc2) {
35418578Sralph if(match(ipc->re1, 1) == 0) break;
35518578Sralph dosub(ipc->rhs);
35618578Sralph }
35718578Sralph }
35818578Sralph return(1);
35918578Sralph }
36018578Sralph
dosub(rhsbuf)36118578Sralph dosub(rhsbuf)
36218578Sralph char *rhsbuf;
36318578Sralph {
36418578Sralph register char *lp, *sp, *rp;
36518578Sralph int c;
36618578Sralph
36718578Sralph lp = linebuf;
36818578Sralph sp = genbuf;
36918578Sralph rp = rhsbuf;
37018578Sralph while (lp < loc1)
37118578Sralph *sp++ = *lp++;
37218578Sralph while(c = *rp++) {
37318578Sralph if (c == '&') {
37418578Sralph sp = place(sp, loc1, loc2);
37518578Sralph continue;
37618578Sralph } else if (c&0200 && (c &= 0177) >= '1' && c < NBRA+'1') {
37718578Sralph sp = place(sp, braslist[c-'1'], braelist[c-'1']);
37818578Sralph continue;
37918578Sralph }
38018578Sralph *sp++ = c&0177;
38118578Sralph if (sp >= &genbuf[LBSIZE])
38218578Sralph fprintf(stderr, "output line too long.\n");
38318578Sralph }
38418578Sralph lp = loc2;
38518578Sralph loc2 = sp - genbuf + linebuf;
38618578Sralph while (*sp++ = *lp++)
38718578Sralph if (sp >= &genbuf[LBSIZE]) {
38818578Sralph fprintf(stderr, "Output line too long.\n");
38918578Sralph }
39018578Sralph lp = linebuf;
39118578Sralph sp = genbuf;
39218578Sralph while (*lp++ = *sp++);
39318578Sralph spend = lp-1;
39418578Sralph }
place(asp,al1,al2)39518578Sralph char *place(asp, al1, al2)
39618578Sralph char *asp, *al1, *al2;
39718578Sralph {
39818578Sralph register char *sp, *l1, *l2;
39918578Sralph
40018578Sralph sp = asp;
40118578Sralph l1 = al1;
40218578Sralph l2 = al2;
40318578Sralph while (l1 < l2) {
40418578Sralph *sp++ = *l1++;
40518578Sralph if (sp >= &genbuf[LBSIZE])
40618578Sralph fprintf(stderr, "Output line too long.\n");
40718578Sralph }
40818578Sralph return(sp);
40918578Sralph }
41018578Sralph
41118578Sralph command(ipc)
41233077Sbostic struct reptr *ipc;
41318578Sralph {
41418578Sralph register int i;
41518578Sralph register char *p1, *p2, *p3;
41618578Sralph char *execp;
41718578Sralph
41818578Sralph
41918578Sralph switch(ipc->command) {
42018578Sralph
42118578Sralph case ACOM:
42218578Sralph *aptr++ = ipc;
42318578Sralph if(aptr >= &abuf[ABUFSIZE]) {
42418578Sralph fprintf(stderr, "Too many appends after line %ld\n",
42518578Sralph lnum);
42618578Sralph }
42718578Sralph *aptr = 0;
42818578Sralph break;
42918578Sralph
43018578Sralph case CCOM:
43118578Sralph delflag = 1;
43218578Sralph if(!ipc->inar || dolflag) {
43318578Sralph for(p1 = ipc->re1; *p1; )
43418578Sralph putc(*p1++, stdout);
43518578Sralph putc('\n', stdout);
43618578Sralph }
43718578Sralph break;
43818578Sralph case DCOM:
43918578Sralph delflag++;
44018578Sralph break;
44118578Sralph case CDCOM:
44218578Sralph p1 = p2 = linebuf;
44318578Sralph
44418578Sralph while(*p1 != '\n') {
44518578Sralph if(*p1++ == 0) {
44618578Sralph delflag++;
44718578Sralph return;
44818578Sralph }
44918578Sralph }
45018578Sralph
45118578Sralph p1++;
45218578Sralph while(*p2++ = *p1++);
45318578Sralph spend = p2-1;
45418578Sralph jflag++;
45518578Sralph break;
45618578Sralph
45718578Sralph case EQCOM:
45818578Sralph fprintf(stdout, "%ld\n", lnum);
45918578Sralph break;
46018578Sralph
46118578Sralph case GCOM:
46218578Sralph p1 = linebuf;
46318578Sralph p2 = holdsp;
46418578Sralph while(*p1++ = *p2++);
46518578Sralph spend = p1-1;
46618578Sralph break;
46718578Sralph
46818578Sralph case CGCOM:
46918578Sralph *spend++ = '\n';
47018578Sralph p1 = spend;
47118578Sralph p2 = holdsp;
47218578Sralph while(*p1++ = *p2++)
47318578Sralph if(p1 >= lbend)
47418578Sralph break;
47518578Sralph spend = p1-1;
47618578Sralph break;
47718578Sralph
47818578Sralph case HCOM:
47918578Sralph p1 = holdsp;
48018578Sralph p2 = linebuf;
48118578Sralph while(*p1++ = *p2++);
48218578Sralph hspend = p1-1;
48318578Sralph break;
48418578Sralph
48518578Sralph case CHCOM:
48618578Sralph *hspend++ = '\n';
48718578Sralph p1 = hspend;
48818578Sralph p2 = linebuf;
48918578Sralph while(*p1++ = *p2++)
49018578Sralph if(p1 >= hend)
49118578Sralph break;
49218578Sralph hspend = p1-1;
49318578Sralph break;
49418578Sralph
49518578Sralph case ICOM:
49618578Sralph for(p1 = ipc->re1; *p1; )
49718578Sralph putc(*p1++, stdout);
49818578Sralph putc('\n', stdout);
49918578Sralph break;
50018578Sralph
50118578Sralph case BCOM:
50218578Sralph jflag = 1;
50318578Sralph break;
50418578Sralph
50518578Sralph case LCOM:
50618578Sralph p1 = linebuf;
50718578Sralph p2 = genbuf;
50818578Sralph genbuf[72] = 0;
50918578Sralph while(*p1)
51018578Sralph if(*p1 >= 040) {
51118578Sralph if(*p1 == 0177) {
51218578Sralph p3 = rub;
51318578Sralph while(*p2++ = *p3++)
51418578Sralph if(p2 >= lcomend) {
51518578Sralph *p2 = '\\';
51618578Sralph fprintf(stdout, "%s\n", genbuf);
51718578Sralph p2 = genbuf;
51818578Sralph }
51918578Sralph p2--;
52018578Sralph p1++;
52118578Sralph continue;
52218578Sralph }
52318578Sralph *p2++ = *p1++;
52418578Sralph if(p2 >= lcomend) {
52518578Sralph *p2 = '\\';
52618578Sralph fprintf(stdout, "%s\n", genbuf);
52718578Sralph p2 = genbuf;
52818578Sralph }
52918578Sralph } else {
53018578Sralph p3 = trans[*p1-1];
53118578Sralph while(*p2++ = *p3++)
53218578Sralph if(p2 >= lcomend) {
53318578Sralph *p2 = '\\';
53418578Sralph fprintf(stdout, "%s\n", genbuf);
53518578Sralph p2 = genbuf;
53618578Sralph }
53718578Sralph p2--;
53818578Sralph p1++;
53918578Sralph }
54018578Sralph *p2 = 0;
54118578Sralph fprintf(stdout, "%s\n", genbuf);
54218578Sralph break;
54318578Sralph
54418578Sralph case NCOM:
54518578Sralph if(!nflag) {
54618578Sralph for(p1 = linebuf; p1 < spend; p1++)
54718578Sralph putc(*p1, stdout);
54818578Sralph putc('\n', stdout);
54918578Sralph }
55018578Sralph
55118578Sralph if(aptr > abuf)
55218578Sralph arout();
55318578Sralph if((execp = gline(linebuf)) == badp) {
55418578Sralph pending = ipc;
55518578Sralph delflag = 1;
55618578Sralph break;
55718578Sralph }
55818578Sralph spend = execp;
55918578Sralph
56018578Sralph break;
56118578Sralph case CNCOM:
56218578Sralph if(aptr > abuf)
56318578Sralph arout();
56418578Sralph *spend++ = '\n';
56518578Sralph if((execp = gline(spend)) == badp) {
56618578Sralph pending = ipc;
56718578Sralph delflag = 1;
56818578Sralph break;
56918578Sralph }
57018578Sralph spend = execp;
57118578Sralph break;
57218578Sralph
57318578Sralph case PCOM:
57418578Sralph for(p1 = linebuf; p1 < spend; p1++)
57518578Sralph putc(*p1, stdout);
57618578Sralph putc('\n', stdout);
57718578Sralph break;
57818578Sralph case CPCOM:
57918578Sralph cpcom:
58018578Sralph for(p1 = linebuf; *p1 != '\n' && *p1 != '\0'; )
58118578Sralph putc(*p1++, stdout);
58218578Sralph putc('\n', stdout);
58318578Sralph break;
58418578Sralph
58518578Sralph case QCOM:
58618578Sralph if(!nflag) {
58718578Sralph for(p1 = linebuf; p1 < spend; p1++)
58818578Sralph putc(*p1, stdout);
58918578Sralph putc('\n', stdout);
59018578Sralph }
59118578Sralph if(aptr > abuf) arout();
59218578Sralph fclose(stdout);
59318578Sralph exit(0);
59418578Sralph case RCOM:
59518578Sralph
59618578Sralph *aptr++ = ipc;
59718578Sralph if(aptr >= &abuf[ABUFSIZE])
59818578Sralph fprintf(stderr, "Too many reads after line%ld\n",
59918578Sralph lnum);
60018578Sralph
60118578Sralph *aptr = 0;
60218578Sralph
60318578Sralph break;
60418578Sralph
60518578Sralph case SCOM:
60618578Sralph i = substitute(ipc);
60718578Sralph if(ipc->pfl && i)
60818578Sralph if(ipc->pfl == 1) {
60918578Sralph for(p1 = linebuf; p1 < spend; p1++)
61018578Sralph putc(*p1, stdout);
61118578Sralph putc('\n', stdout);
61218578Sralph }
61318578Sralph else
61418578Sralph goto cpcom;
61518578Sralph if(i && ipc->fcode)
61618578Sralph goto wcom;
61718578Sralph break;
61818578Sralph
61918578Sralph case TCOM:
62018578Sralph if(sflag == 0) break;
62118578Sralph sflag = 0;
62218578Sralph jflag = 1;
62318578Sralph break;
62418578Sralph
62518578Sralph wcom:
62618578Sralph case WCOM:
62718578Sralph fprintf(ipc->fcode, "%s\n", linebuf);
62818579Sralph fflush(ipc->fcode);
62918578Sralph break;
63018578Sralph case XCOM:
63118578Sralph p1 = linebuf;
63218578Sralph p2 = genbuf;
63318578Sralph while(*p2++ = *p1++);
63418578Sralph p1 = holdsp;
63518578Sralph p2 = linebuf;
63618578Sralph while(*p2++ = *p1++);
63718578Sralph spend = p2 - 1;
63818578Sralph p1 = genbuf;
63918578Sralph p2 = holdsp;
64018578Sralph while(*p2++ = *p1++);
64118578Sralph hspend = p2 - 1;
64218578Sralph break;
64318578Sralph
64418578Sralph case YCOM:
64518578Sralph p1 = linebuf;
64618578Sralph p2 = ipc->re1;
64718578Sralph while(*p1 = p2[*p1]) p1++;
64818578Sralph break;
64918578Sralph }
65018578Sralph
65118578Sralph }
65218578Sralph
65318578Sralph char *
gline(addr)65418578Sralph gline(addr)
65518578Sralph char *addr;
65618578Sralph {
65718578Sralph register char *p1, *p2;
65818578Sralph register c;
65918578Sralph p1 = addr;
66018578Sralph p2 = cbp;
66118578Sralph for (;;) {
66218578Sralph if (p2 >= ebp) {
66318578Sralph if ((c = read(f, ibuf, BUFSIZ)) <= 0) {
66418578Sralph return(badp);
66518578Sralph }
66618578Sralph p2 = ibuf;
66718578Sralph ebp = ibuf+c;
66818578Sralph }
66918578Sralph if ((c = *p2++) == '\n') {
67018578Sralph if(p2 >= ebp) {
67118578Sralph if((c = read(f, ibuf, BUFSIZ)) <= 0) {
67218578Sralph close(f);
67318578Sralph if(eargc == 0)
67418578Sralph dolflag = 1;
67518578Sralph }
67618578Sralph
67718578Sralph p2 = ibuf;
67818578Sralph ebp = ibuf + c;
67918578Sralph }
68018578Sralph break;
68118578Sralph }
68218578Sralph if(c)
68318578Sralph if(p1 < lbend)
68418578Sralph *p1++ = c;
68518578Sralph }
68618578Sralph lnum++;
68718578Sralph *p1 = 0;
68818578Sralph cbp = p2;
68918578Sralph
69018578Sralph return(p1);
69118578Sralph }
ecmp(a,b,count)69218578Sralph ecmp(a, b, count)
69318578Sralph char *a, *b;
69418578Sralph {
69518578Sralph while(count--)
69618578Sralph if(*a++ != *b++) return(0);
69718578Sralph return(1);
69818578Sralph }
69918578Sralph
arout()70018578Sralph arout()
70118578Sralph {
70218578Sralph register char *p1;
70318578Sralph FILE *fi;
70418578Sralph char c;
70518578Sralph int t;
70618578Sralph
70718578Sralph aptr = abuf - 1;
70818578Sralph while(*++aptr) {
70918578Sralph if((*aptr)->command == ACOM) {
71018578Sralph for(p1 = (*aptr)->re1; *p1; )
71118578Sralph putc(*p1++, stdout);
71218578Sralph putc('\n', stdout);
71318578Sralph } else {
71418578Sralph if((fi = fopen((*aptr)->re1, "r")) == NULL)
71518578Sralph continue;
71618578Sralph while((t = getc(fi)) != EOF) {
71718578Sralph c = t;
71818578Sralph putc(c, stdout);
71918578Sralph }
72018578Sralph fclose(fi);
72118578Sralph }
72218578Sralph }
72318578Sralph aptr = abuf;
72418578Sralph *aptr = 0;
72518578Sralph }
72618578Sralph
727