Annotation of 43BSD/ingres/source/parser/s_string.c, revision 1.1.1.1

1.1       root        1: # include <ingres.h>
                      2: # include "scanner.h"
                      3: # include      <sccs.h>
                      4: # include <errors.h>
                      5: 
                      6: SCCSID(@(#)s_string.c  8.2     2/8/85)
                      7: 
                      8: /*
                      9: ** STRING
                     10: ** A string is defined as any sequence of MAXSTRING or fewer characters,
                     11: ** surrounded by string delimiters.  New-line ;characters are purged
                     12: ** from strings unless preceeded by a '\'; QUOTE's must be similarly
                     13: ** prefixed in order to be correctly inserted within a string.  Each
                     14: ** string is entered in the symbol table, indexed by 'yylval'.  A
                     15: ** token or the error condition -1 is returned.
                     16: */
                     17: string(op)
                     18: struct optab   *op;
                     19: {
                     20:        extern char     Cmap[];
                     21:        extern char     *yylval;
                     22:        extern char     *syment();
                     23:        register int    esc;
                     24:        register int    save;
                     25:        register char   *ptr;
                     26:        char            buf[MAXSTRING + 1];
                     27: 
                     28:        /* disable case conversion and fill in string */
                     29:        ptr = buf;
                     30:        save = Lcase;
                     31:        Lcase = 0;
                     32:        do
                     33:        {
                     34:                /* get next character */
                     35:                if ((*ptr = get_scan(NORMAL)) <= 0)
                     36:                {
                     37:                        Lcase = save;
                     38:                        /* non term string */
                     39:                        par_error(STRTERM, FATAL, 0);
                     40:                }
                     41: 
                     42:                /* handle escape characters */
                     43:                esc = (*ptr == '\\');
                     44:                if (*ptr == '\n')
                     45:                {
                     46:                        if ((*ptr = get_scan(NORMAL)) <= 0)
                     47:                        {
                     48:                                Lcase = save;
                     49:                                *ptr = 0;
                     50:                                /* non term string */
                     51:                                par_error(STRTERM, FATAL, 0);
                     52:                        }
                     53:                }
                     54:                if (esc == 1)
                     55:                {
                     56:                        if ((*++ptr = get_scan(NORMAL)) <= 0)
                     57:                        {
                     58:                                Lcase = save;
                     59:                                *ptr = 0;
                     60:                                /* non term string */
                     61:                                par_error(STRTERM, FATAL, 0);
                     62:                        }
                     63:                        if (*ptr == *(op->term))
                     64:                                *--ptr = *(op->term);
                     65:                }
                     66: 
                     67:                /* check length */
                     68:                if ((ptr - buf) > MAXSTRING - 1)
                     69:                {
                     70:                        Lcase = save;
                     71:                        /* string too long */
                     72:                        par_error(STRLONG, WARN, 0);
                     73:                }
                     74:                if (Cmap[*ptr] == CNTRL)
                     75:                        /* cntrl in string from equel */
                     76:                        par_error(CNTRLCHR, WARN, 0);
                     77:        } while (*ptr++ != *(op->term) || esc == 1);
                     78: 
                     79:        /* restore case conversion and return */
                     80:        *--ptr = '\0';
                     81:        Lcase = save;
                     82: #      ifdef   xSTR2
                     83:        tTfp(71, 8, "STRING: %s\n", buf);
                     84: #      endif
                     85:        yylval = syment(buf, (ptr - buf) + 1);
                     86:        Lastok.tok = yylval;
                     87:        Lastok.toktyp = Tokens.sconst;
                     88:        return (Tokens.sconst);
                     89: }

unix.superglobalmegacorp.com

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