1 #ifndef YACASL2_ASSEMBLE_INCLUDED
2 #define YACASL2_ASSEMBLE_INCLUDED
21 LABELSIZE = 8, /**<ラベルの最大文字数 */
22 OPDSIZE = 40, /**<オペラントの最大数。CASL IIシミュレータの制限 */
29 LINESIZE = 1024, /**<行の最大文字数 */
30 TOKENSIZE = 256, /**<トークンの最大文字数 */
34 * @brief アセンブルモードを表すデータ型
37 bool src; /**<ソースを表示する場合はtrue */
38 bool label; /**<ラベル表を表示する場合はtrue */
39 bool onlylabel; /**<ラベル表を表示して終了する場合はtrue */
40 bool asdetail; /**<アセンブラ詳細結果を表示する場合はtrue */
41 bool onlyassemble; /**<アセンブルだけを行う場合はtrue */
45 * @brief アセンブルモード: src, label, onlylabel, asdetail, onlyassemble
50 * @brief アセンブル時の現在およびリテラルのアドレスとプログラム入口名を表すデータ型
53 WORD ptr; /**<現在のアドレス */
54 WORD lptr; /**<リテラル(=付きの値)のアドレス */
55 char *prog; /**<他のプログラムで参照する入口名 */
59 * @brief アセンブル時の、現在およびリテラルのアドレスとプログラム入口名: ptr, lptr, prog
67 char *prog; /**<プログラム */
68 char *label; /**<ラベル */
75 typedef struct _LABELTAB {
76 struct _LABELTAB *next; /**<リスト次項目へのポインタ */
77 LABELARRAY *label; /**<ラベル配列 */
84 LABELTABSIZE = 251, /**<ラベル表のサイズ */
88 * @brief アセンブラが、1回目か2回目かを表す数値
91 FIRST = 0, /**<アセンブラ1回目 */
92 SECOND = 1, /**<アセンブラ2回目 */
96 * @brief ラベルのエラーをエラーリストに追加する
100 void addcerrlist_label();
103 * @brief プログラム名とラベルに対応するアドレスをラベル表から検索する
105 * @return プログラム名とラベルに対応するアドレス
107 * @param *prog プログラム名
110 WORD getlabel(const char *prog, const char *label);
113 * @brief プログラム名、ラベル、アドレスをラベル表に追加する
115 * @return 追加に成功した時はtrue、失敗した時はfalse
117 * @param *prog プログラム名
121 bool addlabel(const char *prog, const char *label, WORD adr);
138 * @brief オペランドを表すデータ型
141 int opdc; /**<オペランド数 */
142 char *opdv[OPDSIZE]; /**<オペランド配列 */
149 char *label; /**<ラベル */
150 char *cmd; /**<コマンド */
151 OPD *opd; /**<オペランド */
155 * @brief トークン取得のエラーを追加する
159 void addcerrlist_tok();
162 * @brief 行から、ラベル・コマンド・オペランドを取得する
164 * @return ラベル・コマンド・オペランド
168 CMDLINE *linetok(const char *line);
171 * @brief アセンブルエラーをエラーリストに追加する
175 void addcerrlist_assemble();
178 * @brief 指定された名前のファイルをアセンブル\n
180 * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
182 * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
185 * @param pass アセンブラが何回目かを表す数
187 bool assemblefile(const char *file, PASS pass);
190 * @brief ファイルにアセンブル結果を書き込む
196 void outassemble(const char *file);
198 #endif /* YACASL2_ASSEMBLE_INCLUDEDの終端 */