This source file includes following definitions.
- main
1 #define _GNU_SOURCE
2 #include "package.h"
3 #include "exec.h"
4 #include "load.h"
5
6
7
8
9 static struct option longopts[] = {
10 {"trace", no_argument, NULL, 't'},
11 {"tracearithmetic", no_argument, NULL, 't'},
12 {"tracelogical", no_argument, NULL, 'T'},
13 {"dump", no_argument, NULL, 'd'},
14 {"monitor", no_argument, NULL, 'm'},
15 {"memorysize", required_argument, NULL, 'M'},
16 {"clocks", required_argument, NULL, 'C'},
17 {"version", no_argument, NULL, 'v' },
18 {"help", no_argument, NULL, 'h'},
19 {0, 0, 0, 0},
20 };
21
22
23
24
25
26
27
28
29
30
31 int main(int argc, char *argv[])
32 {
33 int memsize = DEFAULT_MEMSIZE;
34 int clocks = DEFAULT_CLOCKS;
35 int opt = 0;
36 int stat = 0;
37 const char *version = PACKAGE_VERSION;
38 const char *cmdversion = "comet2 of YACASL2 version %s\n";
39 const char *usage = "Usage: %s [-tTdmvh] [-M <MEMORYSIZE>] [-C <CLOCKS>] FILE\n";
40
41
42 cerr_init();
43 addcerrlist_load();
44 addcerrlist_exec();
45
46
47 while((opt = getopt_long(argc, argv, "tTdmM:C:vh", longopts, NULL)) != -1) {
48 switch(opt) {
49 case 't':
50 execmode.trace = true;
51 break;
52 case 'T':
53 execmode.trace = true;
54 execmode.logical = true;
55 break;
56 case 'd':
57 execmode.dump = true;
58 break;
59 case 'm':
60 execmode.monitor = true;
61 break;
62 case 'M':
63 if((memsize = memsize_str2word(optarg)) == 0) {
64 goto comet2fin;
65 }
66 break;
67 case 'C':
68 if((clocks = clock_str2clock(optarg)) == 0) {
69 goto comet2fin;
70 }
71 break;
72 case 'v':
73 fprintf(stdout, cmdversion, version);
74 goto comet2fin;
75 case 'h':
76 fprintf(stdout, usage, argv[0]);
77 goto comet2fin;
78 case '?':
79 fprintf(stderr, usage, argv[0]);
80 setcerr(212, "");
81 goto comet2fin;
82 }
83 }
84 if(argv[optind] == NULL) {
85 setcerr(211, "");
86 fprintf(stderr, "comet2 error - %d: %s\n", cerr->num, cerr->msg);
87 goto comet2fin;
88 }
89 comet2_init(memsize, clocks);
90 execptr->start = 0;
91 execptr->end = loadassemble(argv[optind], execptr->start);
92 if(execptr->end > 0 && cerr->num == 0) {
93 exec();
94 }
95 comet2_shutdown();
96 comet2fin:
97 if(cerr->num > 0) {
98 stat = 1;
99 }
100 freecerr();
101 return stat;
102 }