X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=include%2Fassemble.h;h=f8faf8108df8e7cd02fc99b684eacf723b19856e;hp=1a3c566541016d4889b7f43d4af1e3b3ef918cb8;hb=e8b475a846a6c819b5f7b4afbca67aa072294349;hpb=60d4c2573a30a48520545195b9ef89814fc60708 diff --git a/include/assemble.h b/include/assemble.h index 1a3c566..f8faf81 100644 --- a/include/assemble.h +++ b/include/assemble.h @@ -1,28 +1,23 @@ #ifndef YACASL2_ASSEMBLE_INCLUDED #define YACASL2_ASSEMBLE_INCLUDED +#include +#include +#include #include +#include +#include +#include +#include "cerr.h" +#include "cmem.h" +#include "exec.h" +#include "hash.h" #include "struct.h" #include "word.h" +#include "token.h" /** - * CASL IIの仕様 - */ -enum { - LABELSIZE = 8, /**<ラベルの最大文字数 */ - OPDSIZE = 40, /**<オペラントの最大数。CASL IIシミュレータの制限 */ -}; - -/** - * YACASL2の制限 - */ -enum { - LINESIZE = 1024, /**<行の最大文字数 */ - TOKENSIZE = 256, /**<トークンの最大文字数 */ -}; - -/** - * アセンブルモード + * @brief アセンブルモードを表すデータ型 */ typedef struct { bool src; /**<ソースを表示する場合はtrue */ @@ -32,10 +27,13 @@ typedef struct { bool onlyassemble; /**<アセンブルだけを行う場合はtrue */ } ASMODE; +/** + * @brief アセンブルモード: src, label, onlylabel, asdetail, onlyassemble + */ extern ASMODE asmode; /** - * アセンブル時の、現在およびリテラルのアドレスとプログラム入口名 + * @brief アセンブル時の現在およびリテラルのアドレスとプログラム入口名を表すデータ型 */ typedef struct { WORD ptr; /**<現在のアドレス */ @@ -43,10 +41,13 @@ typedef struct { char *prog; /**<他のプログラムで参照する入口名 */ } ASPTR; +/** + * @brief アセンブル時の、現在およびリテラルのアドレスとプログラム入口名: ptr, lptr, prog + */ extern ASPTR *asptr; /** - * ラベル配列 + * @brief ラベル配列を表すデータ型 */ typedef struct { char *prog; /**<プログラム */ @@ -55,96 +56,106 @@ typedef struct { } LABELARRAY; /** - * ラベル表 + * @brief ラベル表を表すデータ型 */ typedef struct _LABELTAB { struct _LABELTAB *next; /**<リスト次項目へのポインタ */ - char *prog; /**<プログラム名 */ - char *label; /**<ラベル名 */ - WORD adr; /**<アドレス */ + LABELARRAY *label; /**<ラベル配列 */ } LABELTAB; +/** + * ラベル表のサイズ + */ enum { - /** - * ラベル表のサイズ - */ - LABELTABSIZE = 251, + LABELTABSIZE = 251, /**<ラベル表のサイズ */ }; /** - * アセンブラが、1回目か2回目か + * @brief アセンブラが、1回目か2回目かを表す数値 */ typedef enum { - FIRST = 0, - SECOND = 1, + FIRST = 0, /**<アセンブラ1回目 */ + SECOND = 1, /**<アセンブラ2回目 */ } PASS; /** - * ラベルのエラーをエラーリストに追加 + * @brief ラベルのエラーをエラーリストに追加する + * + * @return なし */ void addcerrlist_label(); /** - * プログラム名とラベルに対応するアドレスをラベル表から検索する + * @brief プログラム名とラベルに対応するアドレスをラベル表から検索する + * + * @return プログラム名とラベルに対応するアドレス + * + * @param *prog プログラム名 + * @param *label ラベル */ WORD getlabel(const char *prog, const char *label); /** - * プログラム名、ラベル、アドレスをラベル表に追加する + * @brief プログラム名、ラベル、アドレスをラベル表に追加する + * + * @return 追加に成功した時はtrue、失敗した時はfalse + * + * @param *prog プログラム名 + * @param *label ラベル + * @param adr アドレス */ -bool addlabel(const char *prog, const char *label, WORD word); +bool addlabel(const char *prog, const char *label, WORD adr); /** - * ラベル表を表示する + * @brief ラベル表を表示する + * + * @return なし */ void printlabel(); /** - * ラベル表を解放する + * @brief ラベル表を解放する + * + * @return なし */ void freelabel(); /** - * オペランド - */ -typedef struct { - int opdc; /**<オペランド数 */ - char *opdv[OPDSIZE]; /**<オペランド配列 */ -} OPD; - -/** - * 命令行 - */ -typedef struct { - char *label; /**<ラベル */ - char *cmd; /**<コマンド */ - OPD *opd; /**<オペランド */ -} CMDLINE; - -/** - * トークン取得のエラーを追加 - */ -void addcerrlist_tok(); - -/** - * 空白またはタブで区切られた1行から、トークンを取得する - */ -CMDLINE *linetok(const char *line); - -/** - * アセンブルエラーをエラーリストに追加 + * @brief アセンブルエラーをエラーリストに追加する + * + * @return なし */ void addcerrlist_assemble(); /** - * 指定された名前のファイルをアセンブル + * @brief 指定された名前のファイルをアセンブル\n + * * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む - * アセンブル完了時はtrue、エラー発生時はfalseを返す + * + * @return アセンブル完了時はtrue、エラー発生時はfalseを返す + * + * @param *file ファイル名 + * @param pass アセンブラが何回目かを表す数 */ bool assemblefile(const char *file, PASS pass); /** - * 引数で指定したファイルにアセンブル結果を書込 + * @brief 指定された1つまたは複数のファイルを2回アセンブル + * + * @return なし + * + * @param filec アセンブルするファイルの数 + * @param filev アセンブルするファイル名の配列 + * @param adr アセンブル結果を格納するアドレス + */ +void assemble(int filec, char *filev[], WORD adr); + +/** + * @brief ファイルにアセンブル結果を書き込む + * + * @return なし + * + * @param *file ファイル名 */ void outassemble(const char *file);