home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / security / Watcher / build_col.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-07-14  |  1.2 KB  |  66 lines

  1. /*
  2.   build_col: build a column out structure for the parser.
  3.  
  4.   Kenneth Ingham
  5.  
  6.   Copyright (C) 1988 The University of New Mexico
  7. */
  8.  
  9. #include "defs.h"
  10. #include "y.tab.h"
  11.  
  12. struct col_out_st *
  13. build_col(start, end, name, type)
  14. char *name, *type;
  15. int start, end;
  16. {
  17.     extern struct out_fmt_st *key;
  18.     extern int parse_error;
  19.     extern char *myname;
  20.     struct col_out_st *p;
  21.  
  22.     p = allocate(struct col_out_st);
  23.     p->name = name;
  24.     p->start = start;
  25.     p->end = end;
  26.     p->next = NULL;
  27.  
  28.     if (type[1] != '\0' || index("dfsk", type[0]) == NULL) {
  29.         fprintf(stderr,"%s: Invalid type specifier ", myname);
  30.         fprintf(stderr,"'%s' for '%s' (col fmt).\n", type, p->name);
  31.         fprintf(stderr, "Expecting one of 'dfsk'\n");
  32.         parse_error = True;
  33.         return p;
  34.     }
  35.  
  36.     switch (*type) {
  37.         case 'd':
  38.             p->type = INTEGER;
  39.             break;
  40.         case 'f':
  41.             p->type = FLOAT;
  42.             break;
  43.         case 's':
  44.             p->type = STRING;
  45.             break;
  46.         case 'k':
  47.             p->type = KEY;
  48.             key = allocate(struct out_fmt_st);
  49.             key->out_fmt.col_fmt = p;
  50.             key->type = COLUMN;
  51.             break;
  52.         default:
  53.             /* checked above in if */
  54.             fprintf(stderr,"Impossible condition in build_col\n");
  55.             exit(1);
  56.     }
  57.  
  58.     if (start > end) {
  59.         fprintf(stderr,"%s: start %d larger than end %d!\n",
  60.             myname, start, end);
  61.         parse_error = True;
  62.     }
  63.  
  64.     return p;
  65. }
  66.