メモリリークの修正
[YACASL2.git] / include / monitor.h
1 #ifndef MONITOR_INCLUDE
2 #define MONITOR_INCLUDE
3
4 #include <stdio.h>
5 #include <string.h>
6 #include <assert.h>
7 #include "token.h"
8 #include "assemble.h"
9 #include "hash.h"
10 #include "cmem.h"
11 #include "cerr.h"
12 #include "disassemble.h"
13 #include "word.h"
14
15 /**
16  * @brief モニター
17  */
18 enum {
19     MONARGSIZE = 3,          /**<モニター引数の最大数 */
20 };
21
22 /**
23  * @brief モニター引数を表すデータ型
24  */
25 typedef struct {
26     int argc;                   /**<オペランド数 */
27     char *argv[MONARGSIZE];      /**<オペランド配列 */
28 } MONARGS;
29
30 /**
31  * @brief モニター命令行を表すデータ型
32  */
33 typedef struct {
34     char *cmd;                  /**<コマンド */
35     MONARGS *args;               /**<引数 */
36 } MONCMDLINE;
37
38 /**
39  * @brief ブレークポイント表を表すデータ型
40  */
41 typedef struct _BPSLIST {
42     struct _BPSLIST *next;        /**<リスト次項目へのポインタ */
43     WORD adr;                   /**<アドレス */
44 } BPSLIST;
45
46 /**
47  * ブレークポイント表のサイズ
48  */
49 enum {
50     BPSTABSIZE = 251,         /**<ブレークポイント表のサイズ */
51 };
52
53 enum {
54     MONINSIZE = 40    /**<モニターの、入力領域 */
55 };
56
57 typedef enum {
58     MONREPEAT = 0,
59     MONNEXT = 1,
60     MONQUIT = 2,
61 } MONCMDTYPE;
62
63 /**
64  * @brief アドレスのハッシュ値を返す
65  *
66  * @return ハッシュ値
67  *
68  * @param adr アドレス
69  */
70 unsigned adrhash(WORD adr);
71
72 /**
73  * @brief 文字列から、モニターの引数を取得する
74  *
75  * @return モニターの引数
76  *
77  * @param *str 文字列
78  */
79 MONARGS *monargstok(const char *str);
80
81 /**
82  * @brief 行から、モニターの命令と引数を取得する
83  *
84  * @return モニターの命令と引数
85  *
86  * @param *line 行
87  */
88 MONCMDLINE *monlinetok(const char *line);
89
90 /**
91  * @brief モニターの命令を実行する
92  *
93  * @return モニター命令の種類
94  *
95  * @param *cmd モニター命令
96  * @param *args モニター命令の引数
97  */
98 MONCMDTYPE monitorcmd(char *cmd, MONARGS *args);
99
100 /**
101  * @brief ブレークポイント表にアドレスがある場合はtrue、ない場合はfalseを返す
102  *
103  * @return trueまたはfalse
104  *
105  * @param *adr アドレス
106  */
107 bool getbps(WORD adr);
108
109 /**
110  * @brief ブレークポイント表にアドレスを追加する
111  *
112  * @return 追加した場合はtrue、追加しなかった場合はfalse
113  *
114  * @param *adr アドレス
115  */
116 bool addbps(WORD adr);
117
118
119 /**
120  * @brief ブレークポイント表からアドレスを削除する
121  *
122  * @return 削除した場合はtrue、削除しなかった場合はfalse
123  *
124  * @param *adr アドレス
125  */
126 bool delbps(WORD adr);
127
128 /**
129  * @brief ブレークポイント表を解放する
130  *
131  * @return なし
132  */
133 void freebps();
134
135 /**
136  * @brief COMET IIモニターを起動する
137  *
138  * @return なし
139  */
140 void monitor();
141
142 #endif        /* end of MONITOR_INCLUDE */