Annotation of 43BSDReno/kerberosIV/compile_et/compile_et.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *
                      3:  * Copyright 1986, 1987 by MIT Student Information Processing Board
                      4:  *
                      5:  * For copyright info, see "mit-sipb-copyright.h".
                      6:  *
                      7:  */
                      8: 
                      9: #include <stdio.h>
                     10: #include <sys/file.h>
                     11: #include <strings.h>
                     12: #include <sys/param.h>
                     13: #include "mit-sipb-copyright.h"
                     14: 
                     15: static char copyright[] = "Copyright 1987 by MIT Student Information Processing Board";
                     16: 
                     17: extern char *gensym();
                     18: extern char *current_token;
                     19: extern int table_number, current;
                     20: char buffer[BUFSIZ];
                     21: char *table_name = (char *)NULL;
                     22: FILE *hfile, *cfile;
                     23:      
                     24: /* C library */
                     25: extern char *malloc();
                     26: extern int errno;
                     27:      
                     28: /* lex stuff */
                     29: extern FILE *yyin;
                     30: extern int yylineno;
                     31:      
                     32: /* pathnames */
                     33: char c_file[MAXPATHLEN];       /* temporary file */
                     34: char h_file[MAXPATHLEN];       /* output */
                     35: char o_file[MAXPATHLEN];       /* output */
                     36: char et_file[MAXPATHLEN];      /* input */
                     37: 
                     38: main(argc, argv)
                     39:      int argc;
                     40:      char **argv;
                     41: {
                     42:      register char *p;
                     43:      int n_flag = 0, debug = 0;
                     44:      
                     45:      while (argc > 2) {
                     46:          register char *arg, ch;
                     47:          arg = argv[--argc];
                     48:          if (strlen(arg) != 2 || arg[0] != '-')
                     49:               goto usage;
                     50:          ch = arg[1];
                     51:          if (ch == 'n')
                     52:               n_flag++;
                     53:          else if (ch == 'd')
                     54:               debug++;
                     55:          else
                     56:               goto usage;
                     57:      }
                     58: 
                     59:      if (argc != 2) {
                     60:      usage:
                     61:          fprintf(stderr, "Usage:  %s et_file [-n]\n", argv[0]);
                     62:          exit(1);
                     63:      }
                     64:      
                     65:      strcpy(et_file, argv[1]);
                     66:      p = rindex(et_file, '/');
                     67:      if (p == (char *)NULL)
                     68:          p = et_file;
                     69:      else
                     70:          p++;
                     71:      p = rindex(p, '.');
                     72:      if (!strcmp(p, ".et"))
                     73:          *++p = '\0';
                     74:      else {
                     75:          if (!p)
                     76:               p = et_file;
                     77:          while (*p)
                     78:               p++;
                     79:          *p++ = '.';
                     80:          *p = '\0';
                     81:      }
                     82:      /* p points at null where suffix should be */
                     83:      strcpy(p, "et.c");
                     84:      strcpy(c_file, et_file);
                     85:      p[0] = 'h';
                     86:      p[1] = '\0';
                     87:      strcpy(h_file, et_file);
                     88:      p[0] = 'o';
                     89:      strcpy(o_file, et_file);
                     90:      p[0] = 'e';
                     91:      p[1] = 't';
                     92:      p[2] = '\0';
                     93: 
                     94:      yyin = fopen(et_file, "r");
                     95:      if (!yyin) {
                     96:          perror(et_file);
                     97:          exit(1);
                     98:      }
                     99:      
                    100:      hfile = fopen(h_file, "w");
                    101:      if (hfile == (FILE *)NULL) {
                    102:          perror(h_file);
                    103:          exit(1);
                    104:      }
                    105:      
                    106:      cfile = fopen(c_file, "w");
                    107:      if (cfile == (FILE *)NULL) {
                    108:          perror("Can't open temp file");
                    109:          exit(1);
                    110:      }
                    111:      
                    112:      /* parse it */
                    113:      fputs("#define NULL 0\n", cfile);
                    114:      fputs("static char *_et[] = {\n", cfile);
                    115:      
                    116:      yyparse();
                    117:      fclose(yyin);             /* bye bye input file */
                    118:      
                    119:      fputs("\t(char *)0\n};\n", cfile);
                    120:      fputs("extern int init_error_table();\n\n", cfile);
                    121:      fprintf(cfile, "int %s_err_base = %d;\n\n", table_name, table_number);
                    122:      fprintf(cfile, "int\ninit_%s_err_tbl()\n", table_name);
                    123:      fprintf(cfile, "{\n\treturn(init_error_table(_et, %d, %d));\n}\n",
                    124:             table_number, current);
                    125:      fclose(cfile);
                    126:      
                    127:      fputs("extern int init_", hfile);
                    128:      fputs(table_name, hfile);
                    129:      fputs("_err_tbl();\nextern int ", hfile);
                    130:      fputs(table_name, hfile);
                    131:      fputs("_err_base;\n", hfile);
                    132:      fclose(hfile);            /* bye bye hfile */
                    133:      
                    134:      if (n_flag)
                    135:          exit(0);
                    136: 
                    137:      if (!fork()) {
                    138:          p = rindex(c_file, '/');
                    139:          if (p) {
                    140:               *p++ = '\0';
                    141:               chdir(c_file);
                    142:          }
                    143:          else
                    144:               p = c_file;
                    145:          execlp("cc", "cc", "-c", "-R", "-O", p, 0);
                    146:          perror("cc");
                    147:          exit(1);
                    148:      }
                    149:      else wait(0);
                    150: 
                    151:      if (!debug)
                    152:          (void) unlink(c_file);
                    153:      /* make it .o file name */
                    154:      c_file[strlen(c_file)-1] = 'o';
                    155:      if (!fork()) {
                    156:          execlp("cp", "cp", c_file, o_file, 0);
                    157:          perror("cp");
                    158:          exit(1);
                    159:      }
                    160:      else wait(0);
                    161:      if (!debug)
                    162:          (void) unlink(c_file);
                    163: 
                    164:      exit(0);
                    165: }
                    166: 
                    167: yyerror(s)
                    168:      char *s;
                    169: {
                    170:      fputs(s, stderr);
                    171:      fprintf(stderr, "\nLine number %d; last token was '%s'\n",
                    172:             yylineno, current_token);
                    173: }

unix.superglobalmegacorp.com

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