Annotation of researchv8dc/netfs/ps.y, revision 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.