// TinC - Tiny, in C
// tinc13.h
#define COMPILER "TinC v1.3\n\n"
/*--------------------------------------------------------------*/
/* A clutch of constants */
#define FALSE 0
#define TRUE -1
#define EXIT_SUCCESS 0
#define EXIT_FAIL 1
#define STRTMPSIZE 256
#define TAB '\t'
#define CR '\015'
#define LF '\n'
#define MAXSYMSIZE 16
#define MAXGLOBALS 1000
#define MAXLOCALS 64
#define MAXSTAGE 128000
#define MAXDEFS 5000
#define MAXLINESIZE 80
#define MAXPARAMS 16
#define MAXCONSTS 100
#define MAXCONSTSIZE 80
#define MAXINCL 9
/*--------------------------------------------------------------*/
/* Register control and data type bits */
#define DT_UCHAR 1
#define DT_CHAR 2
#define DT_INT 4
#define DT_UINT 8
#define DT_CPTR 16
#define DT_IPTR 32
#define DT_UCPTR 64
#define DT_UIPTR 128
#define DT_PROCEDURE 256
#define DT_INTERRUPT 512
#define DT_XCHAR DT_CHAR | DT_UCHAR
#define DT_XINT DT_INT | DT_UINT
#define DT_XCPTR DT_CPTR | DT_UCPTR
#define DT_XIPTR DT_IPTR | DT_UIPTR
#define DT_XPTR DT_XCPTR | DT_XIPTR
#define DT_ALL DT_XCHAR | DT_XINT | DT_XPTR
#define TYPEDESCSIZE 10
/*--------------------------------------------------------------*/
/* Definition of Token Types, etc */
typedef char Symbol[MAXSYMSIZE+1];
#define NKW 20
#define NKW1 21
static Symbol KWlist[NKW] = {"if", "else", "endif", "while",
"endwhile", "char", "end",
"int", "#define", "unsigned",
"#inline", "#ifdef", "#endif",
"program", "procedure", "begin",
"interrupt", "#include", "for",
"endfor"
};
#define TOK_IDENTIFIER 'x'
#define TOK_IF 'i'
#define TOK_ELSE 'l'
#define TOK_ENDIF 'e'
#define TOK_WHILE 'w'
#define TOK_ENDWHILE 'e'
#define TOK_CHARDEF 'C'
#define TOK_END 'e'
#define TOK_NUM 'N'
#define TOK_INTDEF 'I'
#define TOK_DEFINE 'd'
#define TOK_UNSIGNED 'U'
#define TOK_INLINE 'a'
#define TOK_IFDEF 0x03
#define TOK_ENDIFDEF 0x04
#define TOK_PROGRAM 'P'
#define TOK_PROCEDURE 'R'
#define TOK_BEGIN 'B'
#define TOK_INTERRUPT 'S'
#define TOK_INCLUDE 'E'
#define TOK_FOR 'f'
#define TOK_ENDFOR 'e'
#define TOK_HEX 'H'
#define TOK_DIRECTIVE '#'
#define TOK_BLOCK_COMMENT 0x01
#define TOK_LINE_COMMENT 0x02
#define TOK_UCHARDEF 'D'
#define TOK_UINTDEF 'J'
static char KWcode[NKW1 + 1] = {TOK_IDENTIFIER, TOK_IF, TOK_ELSE,
TOK_ENDIF, TOK_WHILE, TOK_ENDWHILE,
TOK_CHARDEF, TOK_END,TOK_INTDEF,
TOK_DEFINE, TOK_UNSIGNED, TOK_INLINE,
TOK_IFDEF, TOK_ENDIFDEF, TOK_PROGRAM,
TOK_PROCEDURE, TOK_BEGIN, TOK_INTERRUPT,
TOK_INCLUDE, TOK_FOR, TOK_ENDFOR
};
/*--------------------------------------------------------------*/
/* return codes for WhatIs() */
#define UNKNOWN 0
#define PARAM 1
#define LOCAL 2
#define GLOBAL 3
/*--------------------------------------------------------------*/
/* pcode definitions - DO NOT CHANGE */
#define PC_GETREG 1
#define PC_FREEREG 2
#define PC_FIRST_REAL 3
#define PC_LABEL 3
#define PC_BRANCH 4
#define PC_BRANCH_FALSE 5
#define PC_HEADER 6
#define PC_PROLOG 7
#define PC_EPILOG 8
#define PC_ALLOCATE 9
#define PC_GROWSTACK 10
#define PC_SHRINKSTACK 11
#define PC_MOVE_REG 12
#define PC_ADD_REG 13
#define PC_SUB_REG 14
#define PC_MOVE_VAR_REG 15
#define PC_MOVE_LVAR_REG 16
#define PC_MOVE_REG_VAR 17
#define PC_MOVE_REG_LVAR 18
#define PC_MUL_REG 19
#define PC_DIV_REG 20
#define PC_CLEAR_REG 21
#define PC_COMPARE_REG 22
#define PC_AND_REG 23
#define PC_OR_REG 24
#define PC_XOR_REG 25
#define PC_NOT_REG 26
#define PC_MOVE_A_REG 27
#define PC_MOVE_AL_REG 28
#define PC_MOVE_I_REG 29
#define PC_ADJUST_REG 30
#define PC_MOVE_REG_I 31
#define PC_MOVE_CONST_REG 32
#define PC_SET_REG_EQ 33
#define PC_SET_REG_NE 34
#define PC_SET_REG_LT 35
#define PC_SET_REG_GT 36
#define PC_SET_REG_GE 37
#define PC_SET_REG_LE 38
#define PC_INLINE 39
#define PC_SHIFTRIGHT 40
#define PC_SHIFTLEFT 41
#define PC_SETFP 42
#define PC_PUSHFP 43
#define PC_POPFP 44
#define PC_DOCALL 45
#define PC_CALLRET 46
#define PC_INTRET 47
#define PC_MOVE_PVAR_REG 48
#define PC_MOVE_REG_PVAR 49
#define PC_MOVE_AP_REG 50
#define PC_PUSH_REG 51
#define PC_PROGSEC 52
#define PC_DATASEC 53
#define PC_CONST 54
#define PC_OPTSTART 55
#include "tinct13.h"