root/include/assemble.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 #ifndef YACASL2_ASSEMBLE_H_INCLUDED
   2 #define YACASL2_ASSEMBLE_H_INCLUDED
   3 
   4 #include <stdbool.h>
   5 #include "cerr.h"
   6 #include "struct.h"
   7 #include "token.h"
   8 
   9 
  10 /**
  11  * @brief アセンブルモードを表すデータ型
  12  */
  13 typedef struct {
  14     bool src;             /**<ソースを表示する場合はtrue */
  15     bool label;           /**<ラベル表を表示する場合はtrue */
  16     bool onlylabel;       /**<ラベル表を表示して終了する場合はtrue */
  17     bool asdetail;        /**<アセンブラ詳細結果を表示する場合はtrue */
  18     bool onlyassemble;    /**<アセンブルだけを行う場合はtrue */
  19 } ASMODE;
  20 
  21 /**
  22  * @brief アセンブルモード: src, label, onlylabel, asdetail, onlyassemble
  23  */
  24 extern ASMODE asmode;
  25 
  26 /**
  27  * @brief アセンブル時の現在およびリテラルのアドレスとプログラム入口名を表すデータ型
  28  */
  29 typedef struct {
  30     WORD ptr;     /**<現在のアドレス */
  31     WORD lptr;    /**<リテラル(=付きの値)のアドレス */
  32     char *prog;   /**<他のプログラムで参照する入口名 */
  33 } ASPTR;
  34 
  35 /**
  36  * @brief アセンブル時の、現在およびリテラルのアドレスとプログラム入口名: ptr, lptr, prog
  37  */
  38 extern ASPTR *asptr;
  39 
  40 /**
  41  * @brief ラベル配列を表すデータ型
  42  */
  43 typedef struct {
  44     char *prog;                 /**<プログラム  */
  45     char *label;                /**<ラベル */
  46     WORD adr;                   /**<アドレス */
  47 } LABELARRAY;
  48 
  49 /**
  50  * @brief ラベル表を表すデータ型
  51  */
  52 typedef struct _LABELTAB {
  53     struct _LABELTAB *next;     /**<リスト次項目へのポインタ */
  54     LABELARRAY *label;          /**<ラベル配列 */
  55 } LABELTAB;
  56 
  57 /**
  58  * ラベル表のサイズ
  59  */
  60 enum {
  61     LABELTABSIZE = 251,         /**<ラベル表のサイズ */
  62 };
  63 
  64 /**
  65  * @brief アセンブラが、1回目か2回目かを表す数値
  66  */
  67 typedef enum {
  68     FIRST = 0,                  /**<アセンブラ1回目 */
  69     SECOND = 1,                 /**<アセンブラ2回目 */
  70 } PASS;
  71 
  72 /**
  73  * @brief ラベルのエラーをエラーリストに追加する
  74  *
  75  */
  76 void addcerrlist_label();
  77 
  78 /**
  79  * @brief プログラム名とラベルに対応するアドレスをラベル表から検索する
  80  *
  81  * @return プログラム名とラベルに対応するアドレス
  82  *
  83  * @param *prog プログラム名
  84  * @param *label ラベル
  85  */
  86 WORD getlabel(const char *prog, const char *label);
  87 
  88 /**
  89  * @brief プログラム名、ラベル、アドレスをラベル表に追加する
  90  *
  91  * @return 追加に成功した時はtrue、失敗した時はfalse
  92  *
  93  * @param *prog プログラム名
  94  * @param *label ラベル
  95  * @param adr アドレス
  96  */
  97 bool addlabel(const char *prog, const char *label, WORD adr);
  98 
  99 /**
 100  * @brief ラベル表を表示する
 101  *
 102  */
 103 void printlabel();
 104 
 105 /**
 106  * @brief ラベル表を解放する
 107  *
 108  */
 109 void freelabel();
 110 
 111 /**
 112  * @brief アセンブルエラーをエラーリストに追加する
 113  *
 114  */
 115 void addcerrlist_assemble();
 116 
 117 /**
 118  * @brief 指定された名前のファイルをアセンブル\n
 119  *
 120  * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
 121  *
 122  * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
 123  *
 124  * @param *file ファイル名
 125  * @param pass アセンブラが何回目かを表す数
 126  */
 127 bool assemblefile(const char *file, PASS pass);
 128 
 129 /**
 130  * @brief 指定された1つまたは複数のファイルを2回アセンブル
 131  *
 132  * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
 133  *
 134  * @param filec アセンブルするファイルの数
 135  * @param filev アセンブルするファイル名の配列
 136  * @param adr アセンブル結果を格納するアドレス
 137  */
 138 bool assemble(int filec, char *filev[], WORD adr);
 139 
 140 /**
 141  * @brief ファイルにアセンブル結果を書き込む
 142  *
 143  * @param *file ファイル名
 144  */
 145 void outassemble(const char *file);
 146 
 147 #endif

/* [<][>][^][v][top][bottom][index][help] */