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