Annotation of 43BSD/ingres/source/equel/name.c, revision 1.1.1.1

1.1       root        1: # include      <stdio.h>
                      2: # include      "constants.h"
                      3: # include      "globals.h"
                      4: # include      "y.tab.h"
                      5: # include      <sccs.h>
                      6: 
                      7: SCCSID(@(#)name.c      8.1     12/31/84)
                      8: 
                      9: 
                     10: /*
                     11: **  NAME -- Process an identifier or keyword token.
                     12: **
                     13: **     Name gets the identifier that follows in the std.
                     14: **     input, and checks if it is a keyword.
                     15: **     An identifier is defined as a sequence of
                     16: **     MAXNAME or fewer alphanumerics, starting with an
                     17: **     alphabetic character.
                     18: **
                     19: **     Parameters:
                     20: **             chr - the first character of the identifier
                     21: **
                     22: **     Returns:
                     23: **             Tokens.sp_name - for a user-defined name
                     24: **             Tokens.sp_struct_var -- if the name is declared 
                     25: **                     a structurw variable
                     26: **             other - lexical codes for keys
                     27: **
                     28: **     Side Effects:
                     29: **             Adds a token to the symbol space.
                     30: **             yylval is set to the new node in the space.
                     31: **             If the identifier is a keyword, sets Opcode to
                     32: **             op_code from tokens.y.
                     33: */
                     34: 
                     35: name(chr)
                     36: char           chr;
                     37: {
                     38:        int                     lval;
                     39:        register                i;
                     40:        char                    wbuf [MAXNAME + 1];
                     41:        register char           *cp;
                     42:        register char           c;
                     43:        struct optab            *op;
                     44:        struct optab            *getkey();
                     45:        struct cvar             *getcvar();
                     46:        struct cvar             *hold;
                     47: 
                     48:        c = chr;
                     49:        cp = wbuf;
                     50:        for (i = 0; i <= MAXNAME; i++)
                     51:        {
                     52:                lval = Cmap [c];
                     53:                if (i < MAXNAME &&
                     54:                   (lval == ALPHA || lval == NUMBR))
                     55:                {
                     56:                        *cp++ = c;
                     57:                        c = getch();
                     58:                }
                     59:                else if (lval == ALPHA || lval == NUMBR)
                     60:                {
                     61:                        /* {i == MAXNAME && "c is legal" && 
                     62:                         *  cp == &wbuf [MAXNAME]} 
                     63:                         */
                     64:                        *cp = '\0';
                     65:                        yysemerr("name too long", wbuf);
                     66:                        /* chomp to end of identifier */
                     67: 
                     68:                        do
                     69:                        {
                     70:                                c = getch();
                     71:                                lval = Cmap [c];
                     72:                        }  while (lval == ALPHA || lval == NUMBR);
                     73:                        backup(c);
                     74:                        
                     75:                        /* take first MAXNAME characters as IDENTIFIER 
                     76:                         * (non-key)
                     77:                         */
                     78:                        yylval.u_dn = addsym(salloc(wbuf));
                     79:                        return (Tokens.sp_name);
                     80:                }
                     81:                else
                     82:                {
                     83:                        /* {cp <= &wbuf [MAXNAME] && i <= MAXNAME
                     84:                         * && "c is not part of id"}
                     85:                         */
                     86:                        backup(c);
                     87:                        *cp = '\0';
                     88:                        i = 0;
                     89:                        break;
                     90:                }
                     91:        }
                     92:        op = getkey(wbuf);
                     93: 
                     94:        /* Is it a keyword ? */
                     95:        if (op)
                     96:        {
                     97:                yylval.u_dn = addsym(op->op_term);
                     98:                Opcode = op->op_code;
                     99:                return (op->op_token);
                    100:        }
                    101:        /* user-defined name */
                    102:        yylval.u_dn = addsym(salloc(wbuf));
                    103:        hold = getcvar(wbuf);
                    104:        if (hold != 0 && hold->c_type == opSTRUCT)
                    105:                return(Tokens.sp_struct_var);
                    106:        return (Tokens.sp_name);
                    107: }

unix.superglobalmegacorp.com

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