Annotation of researchv8dc/netfs/ps.y, revision 1.1.1.1

1.1       root        1: %token MACHINE
                      2: %token LP RP NUMBER
                      3: %{
                      4: #include "stdio.h"
                      5: FILE *infd;
                      6: #define YYDEBUG
                      7: %}
                      8: %%
                      9: file:
                     10:        | machine-list ;
                     11: machine-list:  machine
                     12:        | machine-list machine
                     13:        ;
                     14: machine:       MACHINE perm-list
                     15:        ;
                     16: perm-list:
                     17:        | perm
                     18:        | perm-list perm
                     19:        ;
                     20: perm:  LP client host RP
                     21:        ;
                     22: client:        uid
                     23:                { doclient($1, -1); }
                     24:        | LP uid gid RP
                     25:                { doclient($2, $3); }
                     26:        ;
                     27: host:  uid
                     28:                { dohost($1, -1); }
                     29:        | LP uid gid RP
                     30:                { dohost($2, $3); }
                     31:        ;
                     32: uid:   NUMBER ;
                     33: gid:   NUMBER ;
                     34: %%
                     35: int lineno = 1;
                     36: yyerror(s)
                     37: char *s;
                     38: {      char buf[128];
                     39:        sprintf(buf, "%s line %d", s, lineno);
                     40:        perror(buf);
                     41: }
                     42: 
                     43: pparse(fd)
                     44: FILE *fd;
                     45: {
                     46:        infd = fd;
                     47:        yyparse();
                     48: }
                     49: 
                     50: yylex()
                     51: {      int c;
                     52: again:
                     53:        c = getc(infd);
                     54:        if(c == '\n')
                     55:                lineno++;
                     56: loop:
                     57:        if(c == EOF)
                     58:                return(0);
                     59:        if(c == '#') {
                     60:                do {
                     61:                        c = getc(infd);
                     62:                } while(c != '\n' && c != EOF);
                     63:                if(c == '\n')
                     64:                        lineno++;
                     65:                goto loop;
                     66:        }
                     67:        if(c == ' ' || c == ',' || c == '\n' || c == '\t')
                     68:                goto again;
                     69:        if(c == '(')
                     70:                return(LP);
                     71:        if(c == ')')
                     72:                return(RP);
                     73:        if(c == '+' || c == '-' || c >= '0' && c <= '9') {
                     74:                donumber(c);
                     75:                return(NUMBER);
                     76:        }
                     77:        if(c >= 'a' && c <= 'z' || c == '/') {
                     78:                domachine(c);
                     79:                lineno++;
                     80:                return(MACHINE);
                     81:        }
                     82:        debug("bad char in people (%c) 0%o ignored\n", c, c);
                     83:        goto again;
                     84: }
                     85: 
                     86: donumber(c)
                     87: int c;
                     88: {      int n, i, sign;
                     89:        n = 0;
                     90:        sign = 1;
                     91:        if(c == '-')
                     92:                sign = -1;
                     93:        else if(c != '+')
                     94:                n = c - '0';
                     95:        for(c = getc(infd); c >= '0' && c <= '9'; c = getc(infd))
                     96:                n = 10 * n + c - '0';
                     97:        ungetc(c, infd);
                     98:        yylval = sign * n;
                     99: }
                    100: 
                    101: static char nmbuf[128];
                    102: domachine(c)
                    103: {      char *p = nmbuf;
                    104:        *p++ = c;
                    105:        for(c = getc(infd); (c >= 'a' && c <= 'z' || c == '/') && p < nmbuf + 127; c=getc(infd))
                    106:                *p++ = c;
                    107:        *p = 0;
                    108:        newhost(nmbuf);
                    109: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.