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  */
  81 void addcerrlist_label();
  82 
  83 /**
  84  * @brief プログラム名とラベルに対応するアドレスをラベル表から検索する
  85  *
  86  * @return プログラム名とラベルに対応するアドレス
  87  *
  88  * @param *prog プログラム名
  89  * @param *label ラベル
  90  */
  91 WORD getlabel(const char *prog, const char *label);
  92 
  93 /**
  94  * @brief プログラム名、ラベル、アドレスをラベル表に追加する
  95  *
  96  * @return 追加に成功した時はtrue、失敗した時はfalse
  97  *
  98  * @param *prog プログラム名
  99  * @param *label ラベル
 100  * @param adr アドレス
 101  */
 102 bool addlabel(const char *prog, const char *label, WORD adr);
 103 
 104 /**
 105  * @brief ラベル表を表示する
 106  *
 107  */
 108 void printlabel();
 109 
 110 /**
 111  * @brief ラベル表を解放する
 112  *
 113  */
 114 void freelabel();
 115 
 116 /**
 117  * @brief アセンブルエラーをエラーリストに追加する
 118  *
 119  */
 120 void addcerrlist_assemble();
 121 
 122 /**
 123  * @brief 指定された名前のファイルをアセンブル\n
 124  *
 125  * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
 126  *
 127  * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
 128  *
 129  * @param *file ファイル名
 130  * @param pass アセンブラが何回目かを表す数
 131  */
 132 bool assemblefile(const char *file, PASS pass);
 133 
 134 /**
 135  * @brief 指定された1つまたは複数のファイルを2回アセンブル
 136  *
 137  * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
 138  *
 139  * @param filec アセンブルするファイルの数
 140  * @param filev アセンブルするファイル名の配列
 141  * @param adr アセンブル結果を格納するアドレス
 142  */
 143 bool assemble(int filec, char *filev[], WORD adr);
 144 
 145 /**
 146  * @brief ファイルにアセンブル結果を書き込む
 147  *
 148  * @param *file ファイル名
 149  */
 150 void outassemble(const char *file);
 151 
 152 #endif

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