YACAL2: CASL2処理系
[YACASL2.git] / src / comet2.c
1 #include "casl2.h"
2 #include "exec.h"
3 #define _GNU_SOURCE
4 #include <getopt.h>
5
6 /* 指定されたファイルからCOMET II仮想メモリ(アセンブル結果)を読込 */
7 bool inassemble(char *file) {
8     FILE *fp;
9     if((fp = fopen(file, "r")) == NULL) {
10         perror(file);
11         return false;
12     }
13     fread(memory, sizeof(WORD), MEMSIZE, fp);
14     fclose(fp);
15     return true;
16 }
17
18 static struct option longopts[] = {
19     {"trace", no_argument, NULL, 't'},
20     {"tracearithmetic", no_argument, NULL, 't'},
21     {"tracelogical", no_argument, NULL, 'T'},
22     {"dump", no_argument, NULL, 'd'},
23     {"help", no_argument, NULL, 'h'},
24     {0, 0, 0, 0}
25 };
26
27 int main(int argc, char *argv[])
28 {
29     int opt;
30     const char *usage = "Usage: %s [-tTdh] FILE\n";
31
32     while((opt = getopt_long(argc, argv, "tTdh", longopts, NULL)) != -1) {
33         switch(opt) {
34         case 't':
35             tracemode = true;
36             break;
37         case 'T':
38             tracemode = true;
39             logicalmode = true;
40             break;
41         case 'd':
42             dumpmode = true;
43             break;
44         case 'h':
45             fprintf(stdout, usage, argv[0]);
46             exit(-1);
47         case '?':
48             fprintf(stderr, usage, argv[0]);
49             exit(-1);
50         }
51     }
52     if(inassemble(argv[optind]) == true) {
53         exec();    /* プログラム実行 */
54     }
55     if(cerrno > 0) {
56         freecerr();
57         exit(-1);
58     }
59     return 0;
60 }