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

  1. /*
  2.    build_rel: build a relative output format 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 rel_out_st *
  13. build_rel(field, name, type)
  14. char *name, *type;
  15. int field;
  16. {
  17.     extern struct out_fmt_st *key;
  18.     extern int parse_error;
  19.     extern char *myname;
  20.     struct rel_out_st *p;
  21.  
  22.     p = allocate(struct rel_out_st);
  23.     p->name = name;
  24.     p->field = field;
  25.     p->next = NULL;
  26.  
  27.     if (type[1] != '\0' || index("dfsk", type[0]) == NULL) {
  28.         fprintf(stderr,"%s: Invalid type specifier ", myname);
  29.         fprintf(stderr,"'%s' for '%s' (rel fmt).\n", type, p->name);
  30.         fprintf(stderr, "Expecting one of 'dfsk'\n");
  31.         parse_error = True;
  32.         return p;
  33.     }
  34.  
  35.     switch (type[0]) {
  36.         case 'd':
  37.             p->type = INTEGER;
  38.             break;
  39.         case 'f':
  40.             p->type = FLOAT;
  41.             break;
  42.         case 's':
  43.             p->type = STRING;
  44.             break;
  45.         case 'k':
  46.             p->type = KEY;
  47.             key = allocate(struct out_fmt_st);
  48.             key->out_fmt.rel_fmt = p;
  49.             key->type = COLUMN;
  50.             break;
  51.         default:
  52.             /* checked in if above */
  53.             fprintf(stderr,"impossible condition in build_rel\n");
  54.             exit(1);
  55.     }
  56.  
  57.     return p;
  58. }
  59.