root/src/comet2.c

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

DEFINITIONS

This source file includes following definitions.
  1. main

   1 #define _GNU_SOURCE
   2 #include "package.h"
   3 #include "exec.h"
   4 #include "load.h"
   5 
   6 /**
   7  * comet2コマンドのオプション
   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     {"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 
  23 /**
  24  * @brief comet2コマンドのメイン
  25  *
  26  * @return 正常終了時は0、異常終了時は1
  27  *
  28  * @param argc コマンドライン引数の数
  29  * @param *argv[] コマンドライン引数の配列
  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 [-tTdmvh] [-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, "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             if((memsize = memsize_str2word(optarg)) == 0) {
  64                 goto comet2fin;
  65             }
  66             break;
  67         case 'C':
  68             if((clocks = clock_str2clock(optarg)) == 0) {
  69                 goto comet2fin;
  70             }
  71             break;
  72         case 'v':
  73             fprintf(stdout, cmdversion, version);
  74             goto comet2fin;
  75         case 'h':
  76             fprintf(stdout, usage, argv[0]);
  77             goto comet2fin;
  78         case '?':
  79             fprintf(stderr, usage, argv[0]);
  80             setcerr(212, "");    /* invalid option */
  81             goto comet2fin;
  82         }
  83     }
  84     if(argv[optind] == NULL) {
  85         setcerr(211, "");    /* object file not specified */
  86         fprintf(stderr, "comet2 error - %d: %s\n", cerr->num, cerr->msg);
  87         goto comet2fin;
  88     }
  89     comet2_init(memsize, clocks);     /* COMET II仮想マシンの初期化 */
  90     execptr->start = 0;
  91     execptr->end = loadassemble(argv[optind], execptr->start);
  92     if(execptr->end > 0 && cerr->num == 0) {
  93         exec();                 /* プログラム実行 */
  94     }
  95     comet2_shutdown();          /* COMET II仮想マシンのシャットダウン */
  96 comet2fin:
  97     if(cerr->num > 0) {
  98         stat = 1;
  99     }
 100     freecerr();                 /* エラーの解放 */
 101     return stat;
 102 }

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