root/src/comet2monitor.c

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

DEFINITIONS

This source file includes following definitions.
  1. addcerrlist_comet2monitor
  2. main

   1 #include "package.h"
   2 #include "exec.h"
   3 #include "load.h"
   4 #include "monitor.h"
   5 
   6 /**
   7  * comet2monitorコマンドのオプション
   8  */
   9 static struct option longopts[] = {
  10     {"memorysize", required_argument, NULL, 'M'},
  11     {"clocks", required_argument, NULL, 'C'},
  12     {"version", no_argument, NULL, 'v' },
  13     {"help", no_argument, NULL, 'h'},
  14     {0, 0, 0, 0},
  15 };
  16 
  17 /**
  18  * @brief casl2のエラー定義
  19  */
  20 CERR cerr_comet2monitor[] = {
  21     { 401, "invalid option" },
  22 };
  23 
  24 void addcerrlist_comet2monitor()
  25 {
  26     addcerrlist(ARRAYSIZE(cerr_comet2monitor), cerr_comet2monitor);
  27 }
  28 
  29 /**
  30  * @brief comet2monitorコマンドのメイン
  31  *
  32  * @return 正常終了時は0、異常終了時は1
  33  *
  34  * @param argc コマンドライン引数の数
  35  * @param *argv[] コマンドライン引数の配列
  36  */
  37 int main(int argc, char *argv[])
  38 {
  39     int memsize = DEFAULT_MEMSIZE;
  40     int clocks = DEFAULT_CLOCKS;
  41     int opt = 0;
  42     int stat = 0;
  43     const char *version = PACKAGE_VERSION;
  44     const char *cmdversion = "comet2monitor: COMET II machine code monitor of YACASL2 version %s\n";
  45     const char *usage = "Usage: %s [-vh] [-M <MEMORYSIZE>] [-C <CLOCKS>]\n";
  46 
  47     /* エラーの定義 */
  48     cerr_init();
  49     addcerrlist_load();
  50     addcerrlist_exec();
  51     addcerrlist_comet2monitor();
  52 
  53     /* オプションの処理 */
  54     while((opt = getopt_long(argc, argv, "M:C:vh", longopts, NULL)) != -1) {
  55         switch(opt) {
  56         case 'M':
  57             memsize = atoi(optarg);
  58             break;
  59         case 'C':
  60             clocks = atoi(optarg);
  61             break;
  62         case 'v':
  63             fprintf(stdout, cmdversion, version);
  64             return 0;
  65         case 'h':
  66             fprintf(stdout, usage, argv[0]);
  67             goto comet2monitorfin;
  68         case '?':
  69             fprintf(stderr, usage, argv[0]);
  70             setcerr(212, "");    /* invalid option */
  71             goto comet2monitorfin;
  72         }
  73     }
  74     /* 残りの引数(オプション以外の引数)があるかチェック */
  75     if (optind < argc) {
  76         warn_ignore_arg(argc - optind, argv + optind);
  77     }
  78     create_cmdtable(HASH_CMDTYPE);
  79     reset(memsize, clocks);     /* COMET II仮想マシンのリセット */
  80     execptr->start = 0;
  81     execmode.monitor = true;
  82     exec();                     /* プログラム実行 */
  83     shutdown();
  84 comet2monitorfin:
  85     free_cmdtable(HASH_CMDTYPE);
  86     free_cmdtable(HASH_CODE);
  87     if(cerr->num > 0) {
  88         stat = 1;
  89     }
  90     freecerr();                 /* エラーの解放 */
  91     return stat;
  92 }

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