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 return 0;
75 case 'h':
76 fprintf(stdout, usage, argv[0]);
77 return 0;
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 create_cmdtable(HASH_CMDTYPE);
90 comet2_init(memsize, clocks);
91 execptr->start = 0;
92 execptr->end = loadassemble(argv[optind++], execptr->start);
93
94 if(optind < argc) {
95 warn_ignore_arg(argc - optind, argv + optind);
96 }
97 if(execptr->end > 0 && cerr->num == 0) {
98 exec();
99 }
100 comet2_shutdown();
101 comet2fin:
102 free_cmdtable(HASH_CMDTYPE);
103 if(cerr->num > 0) {
104 stat = 1;
105 }
106 freecerr();
107 return stat;
108 }