1 #ifndef YACASL2_ASSEMBLE_INCLUDED
2 #define YACASL2_ASSEMBLE_INCLUDED
22 LABELSIZE = 8, /**<ラベルの最大文字数 */
23 OPDSIZE = 40, /**<オペラントの最大数。CASL IIシミュレータの制限 */
30 LINESIZE = 1024, /**<行の最大文字数 */
31 TOKENSIZE = 256, /**<トークンの最大文字数 */
35 * @brief アセンブルモードを表すデータ型
38 bool src; /**<ソースを表示する場合はtrue */
39 bool label; /**<ラベル表を表示する場合はtrue */
40 bool onlylabel; /**<ラベル表を表示して終了する場合はtrue */
41 bool asdetail; /**<アセンブラ詳細結果を表示する場合はtrue */
42 bool onlyassemble; /**<アセンブルだけを行う場合はtrue */
46 * @brief アセンブルモード: src, label, onlylabel, asdetail, onlyassemble
51 * @brief アセンブル時の現在およびリテラルのアドレスとプログラム入口名を表すデータ型
54 WORD ptr; /**<現在のアドレス */
55 WORD lptr; /**<リテラル(=付きの値)のアドレス */
56 char *prog; /**<他のプログラムで参照する入口名 */
60 * @brief アセンブル時の、現在およびリテラルのアドレスとプログラム入口名: ptr, lptr, prog
68 char *prog; /**<プログラム */
69 char *label; /**<ラベル */
76 typedef struct _LABELTAB {
77 struct _LABELTAB *next; /**<リスト次項目へのポインタ */
78 LABELARRAY *label; /**<ラベル配列 */
85 LABELTABSIZE = 251, /**<ラベル表のサイズ */
89 * @brief アセンブラが、1回目か2回目かを表す数値
92 FIRST = 0, /**<アセンブラ1回目 */
93 SECOND = 1, /**<アセンブラ2回目 */
97 * @brief ラベルのエラーをエラーリストに追加する
101 void addcerrlist_label();
104 * @brief プログラム名とラベルに対応するアドレスをラベル表から検索する
106 * @return プログラム名とラベルに対応するアドレス
108 * @param *prog プログラム名
111 WORD getlabel(const char *prog, const char *label);
114 * @brief プログラム名、ラベル、アドレスをラベル表に追加する
116 * @return 追加に成功した時はtrue、失敗した時はfalse
118 * @param *prog プログラム名
122 bool addlabel(const char *prog, const char *label, WORD adr);
139 * @brief オペランドを表すデータ型
142 int opdc; /**<オペランド数 */
143 char *opdv[OPDSIZE]; /**<オペランド配列 */
150 char *label; /**<ラベル */
151 char *cmd; /**<コマンド */
152 OPD *opd; /**<オペランド */
156 * @brief トークン取得のエラーを追加する
160 void addcerrlist_tok();
163 * @brief 行から、ラベル・コマンド・オペランドを取得する
165 * @return ラベル・コマンド・オペランド
169 CMDLINE *linetok(const char *line);
172 * @brief アセンブルエラーをエラーリストに追加する
176 void addcerrlist_assemble();
179 * @brief 指定された名前のファイルをアセンブル\n
181 * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
183 * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
186 * @param pass アセンブラが何回目かを表す数
188 bool assemblefile(const char *file, PASS pass);
191 * @brief 指定された1つまたは複数のファイルを2回アセンブル
195 * @param filec アセンブルするファイルの数
196 * @param filev アセンブルするファイル名の配列
197 * @param adr アセンブル結果を格納するアドレス
199 void assemble(int filec, char *filev[], WORD adr);
202 * @brief ファイルにアセンブル結果を書き込む
208 void outassemble(const char *file);
210 #endif /* YACASL2_ASSEMBLE_INCLUDEDの終端 */