home *** CD-ROM | disk | FTP | other *** search
/ ftp.parl.clemson.edu / 2015-02-07.ftp.parl.clemson.edu.tar / ftp.parl.clemson.edu / pub / coven / coven-utils-1.1.tgz / coven-utils-1.1.tar / utils / coven-module-parser / main.c < prev    next >
C/C++ Source or Header  |  2003-01-28  |  2KB  |  122 lines

  1. /*
  2.  * (C) 2001 Clemson University
  3.  *
  4.  * See COPYING in top-level directory.
  5.  */
  6.  
  7.  
  8. #include <stdio.h>
  9. #include <getopt.h>
  10. #include <module_lang.h>
  11. #include <symbol.h>
  12.  
  13. static void initialize();
  14. static void parse_args(int argc, char **argv);
  15. static void finalize();
  16.  
  17. /*
  18.  * Global Variables
  19.  */
  20.  
  21. extern FILE *yyin;
  22. extern FILE *yyout;
  23.  
  24. int header_flag = 0;
  25. int input_file_flag = 0;
  26. int list_flag = 0;
  27. int out_file_flag = 0;
  28. FILE *out_file;
  29. FILE *list_file;
  30. int list_file_flag = 0;
  31. int line = 1;
  32.  
  33. main(int argc, char **argv)
  34. {
  35.     initialize();
  36.     parse_args(argc, argv);
  37.     yyparse();
  38.     finalize();
  39. }
  40.  
  41. static void initialize()
  42. {
  43.     sym_ent_p sym;
  44.     init_symbol_table();
  45.     sym = symenter("int", NULL, TYPE_TYPE);
  46.     sym->type = TYPE_TYPE;
  47.     sym = symenter("uint", NULL, TYPE_TYPE);
  48.     sym->type = TYPE_TYPE;
  49.     sym = symenter("string", NULL, TYPE_TYPE);
  50.     sym->type = TYPE_TYPE;
  51.     sym = symenter("float", NULL, TYPE_TYPE);
  52.     sym->type = TYPE_TYPE;
  53.     sym = symenter("double", NULL, TYPE_TYPE);
  54.     sym->type = TYPE_TYPE;
  55.     sym = symenter("char", NULL, TYPE_TYPE);
  56.     sym->type = TYPE_TYPE;
  57.     sym = symenter("uchar", NULL, TYPE_TYPE);
  58.     sym->type = TYPE_TYPE;
  59.     sym = symenter("short", NULL, TYPE_TYPE);
  60.     sym->type = TYPE_TYPE;
  61.     sym = symenter("ushort", NULL, TYPE_TYPE);
  62.     sym->type = TYPE_TYPE;
  63. }
  64.  
  65. static void parse_args(int argc, char **argv)
  66. {
  67.     int c;
  68.     int digit_optind = 0;
  69.     while(1)
  70.     {
  71.         int this_option_optind = optind ? optind : 1;
  72.         int option_index = 0;
  73.         static struct option long_options[] = {
  74.             /* {"option_name", has_arg, *flag, val}, */
  75.             {"option_name", 0, NULL, 0},
  76.             {0, 0, 0, 0}
  77.         };
  78.         c = getopt_long ( argc, argv, "hli:o:", long_options, &option_index);
  79.         if (c == -1)
  80.             break;
  81.         switch (c) {
  82.             case 0 : /* a long option */
  83.                 break;
  84.             
  85.             case 'h' : /* head option */
  86.                 header_flag = 1;
  87.                 break;
  88.             
  89.             case 'i' : /* use this input file instead of stdin */
  90.                 input_file_flag = 1;
  91.                 yyin = fopen(optarg, "r");
  92.                 break;
  93.             
  94.             case 'o' : /* set output file */
  95.                 yyout = fopen(optarg,"w");
  96.                 out_file_flag = 1;
  97.                 break;
  98.  
  99.             default:
  100.                 fprintf(stderr,"%s: undefined option %c given\n", argv[0], c);
  101.         }
  102.     }
  103. }
  104.  
  105. static void finalize()
  106. {
  107. }
  108.  
  109. yyerror(s)
  110. {
  111.     fprintf(stderr,"syntax error line %d: %s\n", line, s);
  112.     exit(1);
  113. }
  114.  
  115. void produce_listing(int line, char *listing)
  116. {
  117.     /* fprintf(stderr, "produce_listing\n"); /* */
  118.     if (list_flag)
  119.         fprintf(list_file, "[%d]\t%s\n", line, listing);
  120. }
  121.  
  122.