1: #
   2: /*
   3:  * UNIX shell
   4:  *
   5:  * S. R. Bourne
   6:  * Bell Telephone Laboratories
   7:  *
   8:  */
   9: 
  10: #include    "defs.h"
  11: #include    "dup.h"
  12: 
  13: 
  14: /* ========	input output and file copying ======== */
  15: 
  16: initf(fd)
  17:     UFD     fd;
  18: {
  19:     REG FILE    f=standin;
  20: 
  21:     f->fdes=fd; f->fsiz=((flags&(oneflg|ttyflg))==0 ? BUFSIZ : 1);
  22:     f->fnxt=f->fend=f->fbuf; f->feval=0; f->flin=1;
  23:     f->feof=FALSE;
  24: }
  25: 
  26: estabf(s)
  27:     REG STRING  s;
  28: {
  29:     REG FILE    f;
  30: 
  31:     (f=standin)->fdes = -1;
  32:     f->fend=length(s)+(f->fnxt=s);
  33:     f->flin=1;
  34:     return(f->feof=(s==0));
  35: }
  36: 
  37: push(af)
  38:     FILE        af;
  39: {
  40:     REG FILE    f;
  41: 
  42:     (f=af)->fstak=standin;
  43:     f->feof=0; f->feval=0;
  44:     standin=f;
  45: }
  46: 
  47: pop()
  48: {
  49:     REG FILE    f;
  50: 
  51:     IF (f=standin)->fstak
  52:     THEN    IF f->fdes>=0 THEN close(f->fdes) FI
  53:         standin=f->fstak;
  54:         return(TRUE);
  55:     ELSE    return(FALSE);
  56:     FI
  57: }
  58: 
  59: chkpipe(pv)
  60:     INT     *pv;
  61: {
  62:     IF pipe(pv)<0 ORF pv[INPIPE]<0 ORF pv[OTPIPE]<0
  63:     THEN    error(piperr);
  64:     FI
  65: }
  66: 
  67: chkopen(idf)
  68:     STRING      idf;
  69: {
  70:     REG INT     rc;
  71: 
  72:     IF (rc=open(idf,0))<0
  73:     THEN    failed(idf,badopen);
  74:     ELSE    return(rc);
  75:     FI
  76: }
  77: 
  78: rename(f1,f2)
  79:     REG INT     f1, f2;
  80: {
  81:     IF f1!=f2
  82:     THEN    dup(f1|DUPFLG, f2);
  83:         close(f1);
  84:         IF f2==0 THEN ioset|=1 FI
  85:     FI
  86: }
  87: 
  88: create(s)
  89:     STRING      s;
  90: {
  91:     REG INT     rc;
  92: 
  93:     IF (rc=creat(s,0666))<0
  94:     THEN    failed(s,badcreate);
  95:     ELSE    return(rc);
  96:     FI
  97: }
  98: 
  99: tmpfil()
 100: {
 101:     itos(serial++); movstr(numbuf,tmpnam);
 102:     return(create(tmpout));
 103: }
 104: 
 105: /* set by trim */
 106: BOOL        nosubst;
 107: 
 108: copy(ioparg)
 109:     IOPTR       ioparg;
 110: {
 111:     CHAR        c, *ends;
 112:     REG CHAR    *cline, *clinep;
 113:     INT     fd;
 114:     REG IOPTR   iop;
 115: 
 116:     IF iop=ioparg
 117:     THEN    copy(iop->iolst);
 118:         ends=mactrim(iop->ioname); IF nosubst THEN iop->iofile &= ~IODOC FI
 119:         fd=tmpfil();
 120:         iop->ioname=cpystak(tmpout);
 121:         iop->iolst=iotemp; iotemp=iop;
 122:         cline=locstak();
 123: 
 124:         LOOP    clinep=cline; chkpr(NL);
 125:             WHILE (c = (nosubst ? readc() :  nextc(*ends)),  !eolchar(c)) DO *clinep++ = c OD
 126:             *clinep=0;
 127:             IF eof ORF eq(cline,ends) THEN break FI
 128:             *clinep++=NL;
 129:             write(fd,cline,clinep-cline);
 130:         POOL
 131:         close(fd);
 132:     FI
 133: }

Defined functions

chkopen defined in line 67; used 6 times
chkpipe defined in line 59; used 2 times
copy defined in line 108; used 2 times
create defined in line 88; used 2 times
estabf defined in line 26; used 5 times
initf defined in line 16; used 5 times
pop defined in line 47; used 6 times
push defined in line 37; used 5 times
rename defined in line 78; used 5 times
tmpfil defined in line 99; used 2 times
Last modified: 1981-07-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 860
Valid CSS Valid XHTML 1.0 Strict