This source file includes following definitions.
- addcerrlist_comet2monitor
- main
1 #define _GNU_SOURCE
2 #include "package.h"
3 #include "exec.h"
4 #include "load.h"
5 #include "monitor.h"
6
7
8
9
10 static struct option longopts[] = {
11 {"trace", no_argument, NULL, 't'},
12 {"tracearithmetic", no_argument, NULL, 't'},
13 {"tracelogical", no_argument, NULL, 'T'},
14 {"dump", no_argument, NULL, 'd'},
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 CERR cerr_comet2monitor[] = {
27 { 401, "invalid option" },
28 };
29
30 void addcerrlist_comet2monitor()
31 {
32 addcerrlist(ARRAYSIZE(cerr_comet2monitor), cerr_comet2monitor);
33 }
34
35
36
37
38
39
40
41
42
43 int main(int argc, char *argv[])
44 {
45 int memsize = DEFAULT_MEMSIZE;
46 int clocks = DEFAULT_CLOCKS;
47 int opt = 0;
48 int stat = 0;
49 const char *version = PACKAGE_VERSION;
50 const char *cmdversion = "comet2monitor: COMET II machine code monitor of YACASL2 version %s\n";
51 const char *usage = "Usage: %s [-tTdrvh] [-M <MEMORYSIZE>] [-C <CLOCKS>] FILE\n";
52
53
54 cerr_init();
55 addcerrlist_load();
56 addcerrlist_exec();
57 addcerrlist_comet2monitor();
58
59 execmode.reverse = true;
60
61 while((opt = getopt_long(argc, argv, "tTdqM:C:vh", longopts, NULL)) != -1) {
62 switch(opt) {
63 case 't':
64 execmode.trace = true;
65 break;
66 case 'T':
67 execmode.trace = true;
68 execmode.logical = true;
69 break;
70 case 'd':
71 execmode.dump = true;
72 break;
73 case 'q':
74 execmode.reverse = false;
75 break;
76 case 'M':
77 if((memsize = memsize_str2word(optarg)) == 0) {
78 goto comet2monitorfin;
79 }
80 break;
81 case 'C':
82 if((clocks = clock_str2clock(optarg)) == 0) {
83 goto comet2monitorfin;
84 }
85 break;
86 case 'v':
87 fprintf(stdout, cmdversion, version);
88 return 0;
89 case 'h':
90 fprintf(stdout, usage, argv[0]);
91 return 0;
92 case '?':
93 fprintf(stderr, usage, argv[0]);
94 setcerr(212, "");
95 goto comet2monitorfin;
96 }
97 }
98 create_cmdtable(HASH_CMDTYPE);
99 comet2_init(memsize, clocks);
100 execptr->start = 0;
101 if(argv[optind] != NULL) {
102 execptr->end = loadassemble(argv[optind++], execptr->start);
103 }
104
105 if (optind < argc) {
106 warn_ignore_arg(argc - optind, argv + optind);
107 }
108 execmode.monitor = true;
109 exec();
110 comet2_shutdown();
111 comet2monitorfin:
112 free_cmdtable(HASH_CMDTYPE);
113 if(cerr->num > 0) {
114 stat = 1;
115 }
116 freecerr();
117 return stat;
118 }