「make check」でのテストが、コマンド更新時だけに実行されるよう修正
[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     reset();
10     if((fp = fopen(file, "r")) == NULL) {
11         perror(file);
12         return false;
13     }
14     fread(memory, sizeof(WORD), memsize, fp);
15     fclose(fp);
16     return true;
17 }
18
19 static struct option longopts[] = {
20     {"trace", no_argument, NULL, 't'},
21     {"tracearithmetic", no_argument, NULL, 't'},
22     {"tracelogical", no_argument, NULL, 'T'},
23     {"dump", no_argument, NULL, 'd'},
24     {"memsize", required_argument, NULL, 'M'},
25     {"clocks", required_argument, NULL, 'C'},
26     {"help", no_argument, NULL, 'h'},
27     {0, 0, 0, 0}
28 };
29
30 int main(int argc, char *argv[])
31 {
32     int opt;
33     const char *usage = "Usage: %s [-tTdh] [-M<memsize>] [-C<clocks>] FILE\n";
34
35     while((opt = getopt_long(argc, argv, "tTdM:C:h", longopts, NULL)) != -1) {
36         switch(opt) {
37         case 't':
38             tracemode = true;
39             break;
40         case 'T':
41             tracemode = true;
42             logicalmode = true;
43             break;
44         case 'd':
45             dumpmode = true;
46             break;
47         case 'M':
48             memsize = atoi(optarg);
49             break;
50         case 'C':
51             clocks = atoi(optarg);
52             break;
53         case 'h':
54             fprintf(stdout, usage, argv[0]);
55             exit(-1);
56         case '?':
57             fprintf(stderr, usage, argv[0]);
58             exit(-1);
59         }
60     }
61     if(inassemble(argv[optind]) == true) {
62         exec();    /* プログラム実行 */
63     }
64     if(cerrno > 0) {
65         freecerr();
66         exit(-1);
67     }
68     return 0;
69 }