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

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