# 2.11BSD#431 - /usr/src/usr.bin/ratfor/rio.c

##### Functions

    getchr            X
    getfname          X
    gnbtok            X
    gtok              X
    pbstr             X
    peek              X

##### Variables

    ibuf              X
    ip                X
    type              X

       1: #ifndef lint
       2: static char sccsid[] = "@(#)rio.c	1.2 (Berkeley) 8/11/83";
       3: #endif
       4:
       5: #include "r.h"
       6: char    ibuf[BUFSIZ];
       7: char    *ip = ibuf;
       8:
       9: char    type[] = {
      10:     0,  CRAP,   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,
      11:     CRAP,   '\t',   '\n',   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,
      12:     CRAP,   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,
      13:     CRAP,   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,   CRAP,
      14:     ' ',    '!',    '"',    '#',    '$',    '%',    '&',    '\'',
      15:     '(',    ')',    '*',    '+',    ',',    '-',    '.',    '/',
      16:     DIG,    DIG,    DIG,    DIG,    DIG,    DIG,    DIG,    DIG,
      17:     DIG,    DIG,    ':',    ';',    '<',    '=',    '>',    '?',
      18:     '@',    LET,    LET,    LET,    LET,    LET,    LET,    LET,
      19:     LET,    LET,    LET,    LET,    LET,    LET,    LET,    LET,
      20:     LET,    LET,    LET,    LET,    LET,    LET,    LET,    LET,
      21:     LET,    LET,    LET,    '[',    '\\',   ']',    '^',    '_',
      22:     '`',    LET,    LET,    LET,    LET,    LET,    LET,    LET,
      23:     LET,    LET,    LET,    LET,    LET,    LET,    LET,    LET,
      24:     LET,    LET,    LET,    LET,    LET,    LET,    LET,    LET,
      25:     LET,    LET,    LET,    '{',    '|',    '}',    '~',    0,
      26: };
      27:
      28: gtok(s) char *s; {  /* get token into s */
      29:     register c, t;
      30:     register char *p;
      31:     struct nlist *q;
      32:
      33:     for(;;) {
      34:         p = s;
      35:         *p++ = c = getchr();
      36:         switch(t = type[c]) {
      37:         case 0:
      38:             if (infptr > 0) {
      39:                 fclose(infile[infptr]);
      40:                 infptr--;
      41:                 continue;
      42:             }
      43:             if (svargc > 1) {
      44:                 svargc--;
      45:                 svargv++;
      46:                 if (infile[infptr] != stdin)
      47:                     fclose(infile[infptr]);
      48:                 if( (infile[infptr] = fopen(*svargv,"r")) == NULL )
      49:                     cant(*svargv);
      50:                 linect[infptr] = 0;
      51:                 curfile[infptr] = *svargv;
      52:                 continue;
      53:             }
      54:             return(EOF);    /* real eof */
      55:         case ' ':
      56:         case '\t':
      57:             while ((c = getchr()) == ' ' || c == '\t')
      58:                 ;   /* skip others */
      59:             if (c == COMMENT || c == '_') {
      60:                 putbak(c);
      61:                 continue;
      62:             }
      63:             if (c != '\n') {
      64:                 putbak(c);
      65:                 *p = '\0';
      66:                 return(' ');
      67:             } else {
      68:                 *s = '\n';
      69:                 *(s+1) = '\0';
      70:                 return(*s);
      71:             }
      72:         case '_':
      73:             while ((c = getchr()) == ' ' || c == '\t')
      74:                 ;
      75:             if (c == COMMENT) {
      76:                 putbak(c);
      77:                 gtok(s);    /* recursive */
      78:             }
      79:             else if (c != '\n')
      80:                 putbak(c);
      81:             continue;
      82:         case LET:
      83:         case DIG:
      84:             while ((t=type[*p = getchr()]) == LET || t == DIG)
      85:                 p++;
      86:             putbak(*p);
      87:             *p = '\0';
      88:             if ((q = lookup(s))->name != NULL && q->ydef == 0) {    /* found but not keyword */
      89:                 if (q->def != fcnloc) { /* not "function" */
      90:                     pbstr(q->def);
      91:                     continue;
      92:                 }
      93:                 getfname(); /* recursive gtok */
      94:             }
      95:             for (p=s; *p; p++)
      96:                 if (*p>='A' && *p<='Z')
      97:                     *p += 'a' - 'A';
      98:             for (p=s; *p; p++)
      99:                 if (*p < '0' || *p > '9')
     100:                     return(LET);
     101:             return(DIG);
     102:         case '[':
     103:             *p = '\0';
     104:             return('{');
     105:         case ']':
     106:             *p = '\0';
     107:             return('}');
     108:         case '$':
     109:         case '\\':
     110:             if ((*p = getchr()) == '(' || *p == ')') {
     111:                 putbak(*p=='(' ? '{' : '}');
     112:                 continue;
     113:             }
     114:             if (*p == '"' || *p == '\'')
     115:                 p++;
     116:             else
     117:                 putbak(*p);
     118:             *p = '\0';
     119:             return('$');
     120:         case COMMENT:
     121:             comment[comptr++] = 'c';
     122:             while ((comment[comptr++] = getchr()) != '\n')
     123:                 ;
     124:             flushcom();
     125:             *s = '\n';
     126:             *(s+1) = '\0';
     127:             return(*s);
     128:         case '"':
     129:         case '\'':
     130:             for (; (*p = getchr()) != c; p++) {
     131:                 if (*p == '\\')
     132:                     *++p = getchr();
     133:                 if (*p == '\n') {
     134:                     error("missing quote");
     135:                     putbak('\n');
     136:                     break;
     137:                 }
     138:             }
     139:             *p++ = c;
     140:             *p = '\0';
     141:             return(QUOTE);
     142:         case '%':
     143:             while ((*p = getchr()) != '\n')
     144:                 p++;
     145:             putbak(*p);
     146:             *p = '\0';
     147:             return('%');
     148:         case '>': case '<': case '=': case '!': case '^':
     149:             return(peek(p, '='));
     150:         case '&':
     151:             return(peek(p, '&'));
     152:         case '|':
     153:             return(peek(p, '|'));
     154:         case CRAP:
     155:             continue;
     156:         default:
     157:             *p = '\0';
     158:             return(*s);
     159:         }
     160:     }
     161: }
     162:
     163: gnbtok(s) char *s; {
     164:     register c;
     165:     while ((c = gtok(s)) == ' ' || c == '\t')
     166:         ;
     167:     return(c);
     168: }
     169:
     170: getfname() {
     171:     while (gtok(fcname) == ' ')
     172:         ;
     173:     pbstr(fcname);
     174:     putbak(' ');
     175: }
     176:
     177: peek(p, c1) char *p, c1; {
     178:     register c;
     179:     c = *(p-1);
     180:     if ((*p = getchr()) == c1)
     181:         p++;
     182:     else
     183:         putbak(*p);
     184:     *p = '\0';
     185:     return(c);
     186: }
     187:
     188: pbstr(str)
     189: register char *str;
     190: {
     191:     register char *p;
     192:
     193:     p = str;
     194:     while (*p++);
     195:     --p;
     196:     if (ip >= &ibuf[BUFSIZ]) {
     197:         error("pushback overflow");
     198:         exit(1);
     199:     }
     200:     while (p > str)
     201:         putbak(*--p);
     202: }
     203:
     204: getchr() {
     205:     register c;
     206:
     207:     if (ip > ibuf)
     208:         return(*--ip);
     209:     c = getc(infile[infptr]);
     210:     if (c == '\n')
     211:         linect[infptr]++;
     212:     if (c == EOF)
     213:         return(0);
     214:     return(c);
     215: }

#### Defined functions

getchr defined in line 204; used 22 times

- in line 35, 57, 73, 84, 110, 122, 130-132(2), 143, 180
- in /usr/src/usr.bin/ratfor/r1.c line 372
- in /usr/src/usr.bin/ratfor/rlex.c line 146-155(4), 203-206(2), 213, 226-235(4)

getfname defined in line 170; used 1 times

- in line 93

gnbtok defined in line 163; used 8 times

- in /usr/src/usr.bin/ratfor/r0.c line 70
- in /usr/src/usr.bin/ratfor/r1.c line 189-194(2), 203, 211, 271, 317, 334

gtok defined in line 28; used 11 times

- in line 77, 165, 171
- in /usr/src/usr.bin/ratfor/r0.c line 43
- in /usr/src/usr.bin/ratfor/r1.c line 95, 104, 114, 147, 155, 232
- in /usr/src/usr.bin/ratfor/rlex.c line 172

pbstr defined in line 188; used 13 times

- in line 90, 173
- in /usr/src/usr.bin/ratfor/r1.c line 106, 116, 150, 157, 191-195(2), 206, 272, 280, 320, 337

peek defined in line 177; used 3 times

- in line 149-153(3)

#### Defined variables

ibuf defined in line 6; used 6 times

- in line 7, 196, 207
- in /usr/src/usr.bin/ratfor/rio.c line 7, 196, 207

ip defined in line 7; used 7 times

- in line 196, 207-208(2)
- in /usr/src/usr.bin/ratfor/r.h line 7
- in /usr/src/usr.bin/ratfor/rio.c line 196, 207-208(2)

sccsid defined in line 2; never used
type defined in line 9; used 8 times

- in line 36, 84
- in /usr/src/usr.bin/ratfor/r2.c line 43(2)
- in /usr/src/usr.bin/ratfor/rio.c line 36, 84
- in /usr/src/usr.bin/ratfor/rlex.c line 214(2)

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1160 |