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

1.1       root        1: # include      <stdio.h>
                      2: # include      "constants.h"
                      3: # include      "globals.h"
                      4: # include      <sccs.h>
                      5: 
                      6: SCCSID(@(#)comment.c   8.1     12/31/84)
                      7: 
                      8: 
                      9: /*
                     10: **  COMMENT.C -- routine to scan comments inside an equel statement
                     11: **
                     12: **     Uses the endcmnt token code to find the endcmnt
                     13: **     terminal string, then reads the input until it sees this 
                     14: **     terminal (must be <= 2 characters), returning EOF_TOK and
                     15: **     giving an error diagnostic if end-of-file is encountered.
                     16: **
                     17: **     Parameters:
                     18: **             none
                     19: **
                     20: **     Returns:
                     21: **             CONTINUE -- valid comment
                     22: **             EOF_TOK -- EOF in comment
                     23: **
                     24: **     Side Effects:
                     25: **             deletes comments from within an equel statement
                     26: */
                     27: 
                     28: 
                     29: comment()
                     30: {
                     31:        register int            i, l;
                     32:        register struct optab   *op;
                     33:        char                    buf [3];
                     34: 
                     35:        /* find end of comment operator */
                     36:        for (op = Optab; op->op_term; op++)
                     37:                if (op->op_token == Tokens.sp_endcmnt)
                     38:                        break;
                     39: 
                     40:        if (!op->op_term)
                     41:                syserr("no end of comment operator in the parse tables");
                     42:        /* scan for the end of comment */
                     43:        l = length(op->op_term);
                     44:        if (l > sizeof buf - 1)
                     45:                syserr("comment : buf too short for endcmnt %s %d",
                     46:                op->op_term, l);
                     47: 
                     48:        /* fill buffer to length of endmnt terminal */
                     49:        for (i = 0; i < l; i++)         
                     50:        {
                     51:                if ((buf [i] = getch()) == EOF_TOK)
                     52:                {
                     53: nontermcom :
                     54:                        /* non-terminated comment */
                     55:                        yysemerr("premature EOF encountered in comment", 0);
                     56:                        return (EOF_TOK);
                     57:                }
                     58:        }
                     59: 
                     60:        /* shift on input until endcmnt */
                     61:        while (!bequal(buf, op->op_term, l))
                     62:        {
                     63:                for (i = 0; i < l - 1; i++)
                     64:                        buf [i] = buf [i + 1];
                     65:                if ((buf [l - 1] = getch()) == EOF_TOK)
                     66:                        goto nontermcom;
                     67:        }
                     68:        return (CONTINUE);
                     69: }

unix.superglobalmegacorp.com

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