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 { "reverse", no_argument, NULL, 'r' },
16 { "memorysize", required_argument, NULL, 'M'},
17 { "clocks", required_argument, NULL, 'C' },
18 { "version", no_argument, NULL, 'v' },
19 { "help", no_argument, NULL, 'h' },
20 { 0, 0, 0, 0},
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 [-tTdmrvh] [-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, "tTdmrM: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 execmode.reverse = true;
62 break;
63 case 'r':
64 execmode.reverse = true;
65 break;
66 case 'M':
67 if((memsize = memsize_str2word(optarg)) == 0) {
68 goto comet2fin;
69 }
70 break;
71 case 'C':
72 if((clocks = clock_str2clock(optarg)) == 0) {
73 goto comet2fin;
74 }
75 break;
76 case 'v':
77 fprintf(stdout, cmdversion, version);
78 goto comet2fin;
79 case 'h':
80 fprintf(stdout, usage, argv[0]);
81 goto comet2fin;
82 case '?':
83 fprintf(stderr, usage, argv[0]);
84 setcerr(212, "");
85 goto comet2fin;
86 }
87 }
88 if(argv[optind] == NULL) {
89 setcerr(211, "");
90 fprintf(stderr, "comet2 error - %d: %s\n", cerr->num, cerr->msg);
91 goto comet2fin;
92 }
93 create_cmdtable(HASH_CMDTYPE);
94 comet2_init(memsize, clocks);
95 execptr->start = 0;
96 execptr->end = loadassemble(argv[optind++], execptr->start);
97
98 if(optind < argc) {
99 warn_ignore_arg(argc - optind, argv + optind);
100 }
101 if(execptr->end > 0 && cerr->num == 0) {
102 exec();
103 }
104 comet2_shutdown();
105 free_cmdtable(HASH_CMDTYPE);
106 comet2fin:
107 if(cerr->num > 0) {
108 stat = 1;
109 }
110 freecerr();
111 return stat;
112 }