YACASL2
comet2.c
Go to the documentation of this file.
1 #include "package.h"
2 #include "exec.h"
3 #include "load.h"
4 
8 static struct option longopts[] = {
9  {"trace", no_argument, NULL, 't'},
10  {"tracearithmetic", no_argument, NULL, 't'},
11  {"tracelogical", no_argument, NULL, 'T'},
12  {"dump", no_argument, NULL, 'd'},
13  {"monitor", no_argument, NULL, 'm'},
14  {"memorysize", required_argument, NULL, 'M'},
15  {"clocks", required_argument, NULL, 'C'},
16  {"version", no_argument, NULL, 'v' },
17  {"help", no_argument, NULL, 'h'},
18  {0, 0, 0, 0},
19 };
20 
21 
30 int main(int argc, char *argv[])
31 {
32  int memsize = DEFAULT_MEMSIZE;
33  int clocks = DEFAULT_CLOCKS;
34  int opt = 0;
35  int stat = 0;
36  const char *version = PACKAGE_VERSION;
37  const char *cmdversion = "comet2 of YACASL2 version %s\n";
38  const char *usage = "Usage: %s [-tTdmvh] [-M <MEMORYSIZE>] [-C <CLOCKS>] FILE\n";
39 
40  /* エラーの定義 */
41  cerr_init();
44 
45  /* オプションの処理 */
46  while((opt = getopt_long(argc, argv, "tTdmM:C:vh", longopts, NULL)) != -1) {
47  switch(opt) {
48  case 't':
49  execmode.trace = true;
50  break;
51  case 'T':
52  execmode.trace = true;
53  execmode.logical = true;
54  break;
55  case 'd':
56  execmode.dump = true;
57  break;
58  case 'm':
59  execmode.monitor = true;
60  break;
61  case 'M':
62  memsize = atoi(optarg);
63  break;
64  case 'C':
65  clocks = atoi(optarg);
66  break;
67  case 'v':
68  fprintf(stdout, cmdversion, version);
69  goto comet2fin;
70  case 'h':
71  fprintf(stdout, usage, argv[0]);
72  goto comet2fin;
73  case '?':
74  fprintf(stderr, usage, argv[0]);
75  setcerr(212, ""); /* invalid option */
76  goto comet2fin;
77  }
78  }
79  if(argv[optind] == NULL) {
80  setcerr(211, ""); /* object file not specified */
81  fprintf(stderr, "comet2 error - %d: %s\n", cerr->num, cerr->msg);
82  goto comet2fin;
83  }
84  reset(memsize, clocks); /* COMET II仮想マシンのリセット */
85  execptr->start = 0;
86  execptr->end = loadassemble(argv[optind], execptr->start);
87  if(execptr->end > 0 && cerr->num == 0) {
88  exec(); /* プログラム実行 */
89  }
90  shutdown(); /* COMET II仮想マシンのシャットダウン */
91 comet2fin:
92  if(cerr->num > 0) {
93  stat = 1;
94  }
95  freecerr(); /* エラーの解放 */
96  return stat;
97 }
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
void exec()
COMET II仮想マシンを実行する
int main(int argc, char *argv[])
comet2コマンドのメイン
Definition: comet2.c:30
static struct option longopts[]
Definition: comet2.c:8
void addcerrlist_exec()
実行エラーをエラーリストに追加する
Definition: exec.c:213
WORD loadassemble(const char *file, WORD start)
指定されたファイルからアセンブル結果を読み込む
Definition: load.c:27
void addcerrlist_load()
アセンブル結果読み込みエラーをエラーリストに追加する
Definition: load.c:22
@ DEFAULT_MEMSIZE
Definition: struct.h:19
@ DEFAULT_CLOCKS
Definition: struct.h:20
void reset(int memsize, int clocks)
Definition: struct.c:253
EXECPTR * execptr
Definition: struct.c:12
void shutdown()
Definition: struct.c:278
EXECMODE execmode
実行モード: trace, logical, dump, monitor, step
Definition: exec.c:91
char * msg
Definition: cerr.h:17
int num
Definition: cerr.h:16
bool dump
Definition: struct.h:144
bool trace
Definition: struct.h:142
bool logical
Definition: struct.h:143
bool monitor
Definition: struct.h:147
WORD start
Definition: struct.h:131
WORD end
Definition: struct.h:132
#define PACKAGE_VERSION
Definition: version.h:4