1 #ifndef YACASL2_ASSEMBLE_INCLUDED
2 #define YACASL2_ASSEMBLE_INCLUDED
12 LABELSIZE = 8, /**<ラベルの最大文字数 */
13 OPDSIZE = 40, /**<オペラントの最大数。CASL IIシミュレータの制限 */
20 LINESIZE = 1024, /**<行の最大文字数 */
21 TOKENSIZE = 256, /**<トークンの最大文字数 */
25 * @brief アセンブルモードを表すデータ型
28 bool src; /**<ソースを表示する場合はtrue */
29 bool label; /**<ラベル表を表示する場合はtrue */
30 bool onlylabel; /**<ラベル表を表示して終了する場合はtrue */
31 bool asdetail; /**<アセンブラ詳細結果を表示する場合はtrue */
32 bool onlyassemble; /**<アセンブルだけを行う場合はtrue */
36 * @brief アセンブルモード: src, label, onlylabel, asdetail, onlyassemble
41 * @brief アセンブル時の現在およびリテラルのアドレスとプログラム入口名を表すデータ型
44 WORD ptr; /**<現在のアドレス */
45 WORD lptr; /**<リテラル(=付きの値)のアドレス */
46 char *prog; /**<他のプログラムで参照する入口名 */
50 * @brief アセンブル時の、現在およびリテラルのアドレスとプログラム入口名: ptr, lptr, prog
58 char *prog; /**<プログラム */
59 char *label; /**<ラベル */
66 typedef struct _LABELTAB {
67 struct _LABELTAB *next; /**<リスト次項目へのポインタ */
68 char *prog; /**<プログラム名 */
69 char *label; /**<ラベル名 */
77 LABELTABSIZE = 251, /**<ラベル表のサイズ */
81 * @brief アセンブラが、1回目か2回目かを表す数値
84 FIRST = 0, /**<アセンブラ1回目 */
85 SECOND = 1, /**<アセンブラ2回目 */
89 * @brief ラベルのエラーをエラーリストに追加する
93 void addcerrlist_label();
96 * @brief プログラム名とラベルに対応するアドレスをラベル表から検索する
98 * @return プログラム名とラベルに対応するアドレス
100 * @param *prog プログラム名
103 WORD getlabel(const char *prog, const char *label);
106 * @brief プログラム名、ラベル、アドレスをラベル表に追加する
108 * @return 追加に成功した時はtrue、失敗した時はfalse
110 * @param *prog プログラム名
114 bool addlabel(const char *prog, const char *label, WORD adr);
131 * @brief オペランドを表すデータ型
134 int opdc; /**<オペランド数 */
135 char *opdv[OPDSIZE]; /**<オペランド配列 */
142 char *label; /**<ラベル */
143 char *cmd; /**<コマンド */
144 OPD *opd; /**<オペランド */
148 * @brief トークン取得のエラーを追加する
152 void addcerrlist_tok();
155 * @brief 行から、ラベル・コマンド・オペランドを取得する
157 * @return ラベル・コマンド・オペランド
161 CMDLINE *linetok(const char *line);
164 * @brief アセンブルエラーをエラーリストに追加する
168 void addcerrlist_assemble();
171 * @brief 指定された名前のファイルをアセンブル\n
173 * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
175 * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
178 * @param pass アセンブラが何回目かを表す数
180 bool assemblefile(const char *file, PASS pass);
183 * @brief ファイルにアセンブル結果を書き込む
189 void outassemble(const char *file);
191 #endif /* YACASL2_ASSEMBLE_INCLUDEDの終端 */