/*********************************************************************
 *                                                                   *
 *      HAPPy  assembler & interpriter common header                 *
 *                                                                   *
 *                Copyright (c) H.Asano 1992-1994.                   *
 *                                                                   *
 *********************************************************************/


#define Maxstore   13000                /* 記憶装置の大きさ(ワード数) */
#define Maxint     2147483647L          /* 最大整数値                 */
#define Largeint   32768L               /* shortより大きい数　        */

#define NilValue   Maxstore + 1        /*  ポインタのnilの値          */

#define inputadr  5                     /* input バッファアドレス     */
#define outputadr 6                     /* outputバッファアドレス     */

#define MaxIDlng 32                     /* 名前の最大識別可能文字数   */
#define MaxRFlen 32                     /* 実ファイル名の最大長       */
#define Maxfileno 8                     /* 最大ファイル数(input,output以外)*/
#define addset(Set,pos) ((Set) |= ( (long)1 << (pos) ))

typedef long integer ;                  /* integer は long型とする    */
typedef enum bool  {false ,             /* 偽                         */
                    true                /* 真                         */
}  boolean ;                            /* pascalのboolean型と同じ    */

typedef struct  {             /*********  命令格納域 型定義           */
  unsigned char  op  ;                  /* operation                  */
  char           p   ;                  /* p operand                  */
  short          q   ;                  /* q operand                  */
} _code ;

typedef union {                         /******  記憶装置 型定義      */
  integer        vi    ;                /* integer                    */
  float          vr    ;                /* real                       */
  short          vb    ;                /* boolean                    */
  long           vs    ;                /* set (0..31)                */
  short          vc    ;                /* char                       */
  short          va    ;                /* address                    */
  _code          vo    ;                /* object code                */
}  _store ;

typedef enum fmode {
           undefined  ,         /* 不定                               */
           inspection ,         /* 検査モード                         */
           generation           /* 生成モード                         */
} fmode ;

typedef struct fileinfo {       /* ファイル情報テーブル               */
  char filename[MaxIDlng+1] ;   /* 外部ファイル  論理ファイル名       */
  boolean askflag    ;          /* 実ファイル名を問い合わせる時 真    */
  short  fileadr     ;          /* P-code上の ファイル変数アドレス    */
  short  filesize    ;          /* バッファ変数の大きさ               */
  char   rfname[MaxRFlen+1] ;   /* 実ファイル名                       */
  _store *filebuf    ;          /* バッファ変数アドレス               */
  boolean textfile   ;          /* テキストファイルの時 真            */
  boolean eolnflag   ;          /* テキストファイルのeolnの時 真      */
  boolean writelnflag;          /* 最後が改行の時 真                  */
  FILE *fp           ;          /* ファイルポインタ                   */
  fmode mode         ;          /* 生成モード / 検査モード / 不定     */
} fileinfo           ;

EXTERN fileinfo fi[Maxfileno+2] ;
