YACASL2
Loading...
Searching...
No Matches
comet2.c
Go to the documentation of this file.
1#define _GNU_SOURCE
2#include "package.h"
3#include "exec.h"
4#include "load.h"
5
9static 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
31int 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();
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 memsize = atoi(optarg);
64 break;
65 case 'C':
66 clocks = atoi(optarg);
67 break;
68 case 'v':
69 fprintf(stdout, cmdversion, version);
70 goto comet2fin;
71 case 'h':
72 fprintf(stdout, usage, argv[0]);
73 goto comet2fin;
74 case '?':
75 fprintf(stderr, usage, argv[0]);
76 setcerr(212, ""); /* invalid option */
77 goto comet2fin;
78 }
79 }
80 if(argv[optind] == NULL) {
81 setcerr(211, ""); /* object file not specified */
82 fprintf(stderr, "comet2 error - %d: %s\n", cerr->num, cerr->msg);
83 goto comet2fin;
84 }
85 comet2_init(memsize, clocks); /* COMET II仮想マシンの初期化 */
86 execptr->start = 0;
87 execptr->end = loadassemble(argv[optind], execptr->start);
88 if(execptr->end > 0 && cerr->num == 0) {
89 exec(); /* プログラム実行 */
90 }
91 comet2_shutdown(); /* COMET II仮想マシンのシャットダウン */
92comet2fin:
93 if(cerr->num > 0) {
94 stat = 1;
95 }
96 freecerr(); /* エラーの解放 */
97 return stat;
98}
static struct option longopts[]
casl2コマンドのオプション
Definition casl2.c:24
CERR * cerr
現在のエラー
Definition cerr.c:9
void freecerr()
エラーリストと現在のエラーを解放する
Definition cerr.c:72
void cerr_init()
エラーを初期化する
Definition cerr.c:3
void setcerr(int num, const char *str)
現在のエラーを設定する
Definition cerr.c:45
int main(int argc, char *argv[])
comet2コマンドのメイン
Definition comet2.c:31
void exec()
COMET II仮想マシンを実行する
Definition exec.c:673
void addcerrlist_exec()
実行エラーをエラーリストに追加する
Definition exec.c:210
WORD loadassemble(const char *file, WORD start)
指定されたファイルからアセンブル結果を読み込む
Definition load.c:20
void addcerrlist_load()
アセンブル結果読み込みエラーをエラーリストに追加する
Definition load.c:15
@ DEFAULT_MEMSIZE
Definition struct.h:18
@ DEFAULT_CLOCKS
Definition struct.h:19
void comet2_shutdown()
Definition struct.c:306
EXECPTR * execptr
Definition struct.c:12
void comet2_init(int memsize, int clocks)
Definition struct.c:267
EXECMODE execmode
実行モード: trace, logical, dump, monitor, step
Definition exec.c:88
#define PACKAGE_VERSION
Definition version.h:4