root/src/comet2.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 #include "package.h"
   2 #include "exec.h"
   3 #include "load.h"
   4 
   5 /**
   6  * comet2コマンドのオプション
   7  */
   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 
  22 /**
  23  * @brief comet2コマンドのメイン
  24  *
  25  * @return 正常終了時は0、異常終了時は1
  26  *
  27  * @param argc コマンドライン引数の数
  28  * @param *argv[] コマンドライン引数の配列
  29  */
  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();
  42     addcerrlist_load();
  43     addcerrlist_exec();
  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 }

/* [<][>][^][v][top][bottom][index][help] */