?? defines.h
字號:
#ifndef __ZSC_DEFINES_H
#define __ZSC_DEFINES_H
#define NERROR throw CPascalCompiler::error(-1,CString(""))
#define MAX_SYMB 1000
// defining the DWORD type if not defined
#ifndef DWORD
#define DWORD unsigned __int32
#endif
#ifndef BYTE
#define BYTE unsigned __int8
#endif
#ifndef QWORD
#define QWORD unsigned __int64
#endif
// definirea modului de reprezentare a tipurilor in memorie
// se poate alege MOD1 sau MOD2
#define MOD2
#ifdef MOD1 // define MOD1
// Constante cu pentru rezolvarea corecpondentei tipurilor Pascal -> C
#define REAL double
#define INTEGER int
#define CHAR TCHAR
#define BOOLEAN BOOL // you can't declare variables of this type in this version of pascal
// informatia de dimensiune maxima
#define INFOTYPE QWORD
// Constante cu dimensiunea diverselor tipuri elementare
#define SC_REAL 1
#define SC_INT 1
#define SC_CHAR 1
#endif
#ifdef MOD2 // define MOD2
// Constante cu pentru rezolvarea corecpondentei tipurilor Pascal -> C
#define REAL float
#define INTEGER int
#define CHAR TCHAR
// informatia de dimensiune maxima
#define INFOTYPE DWORD
// Constante cu dimensiunea diverselor tipuri elementare
#define SC_REAL 1
#define SC_INT 1
#define SC_CHAR 1
#endif
// Constante de eroare
#define SET_GENERAL -1
#define SET_EXPECTED -10
#define SET_INVALID_OP_TYPES -11
#define SET_INVALID_OP -12
// Constante de clasa symbol
#define CT_PROCEDURE 1
#define CT_FUNCTION 2
#define CT_VAR_SIMP 3
#define CT_VAR_RECORD 4
#define CT_VAR_RECORD_FIELD 5
#define CT_VAR_ARRAY 6
#define CT_PARAM_VAL 7
#define CT_PARAM_ADR 8
#define CT_CONST 9
#define CT_PROGNAME 10
// Constante tip simplu
// EXPRESION TYPE CONSTANTS
#define ET_INTEGER 2
#define ET_REAL 3
#define ET_CHAR 1
// LValue types
#define LV_ADDRESS 1
#define LV_VALUE 2
// Compiler settings
#define CODE_BLOCKSIZE 16000
// defining some VM characteristics
#define MACH32
// define 32 bit machine characteristics
#ifdef MACH32
#define VM_BYTES 4 // Processor bytes
#define VM_ICSIZE 1 // Instruction code size
#define AD(ADDR) (*((DWORD*) (m_pbMem + ADDR)))
#define REGISTER DWORD
#define OFFSET int
#endif
#ifdef MACH16
#define VM_BYTES 2 // Processor bytes
#define VM_ICSIZE 1 // Instruction code size
#define AD(ADDR) (*((__int16*) (m_pbMem + ADDR)))
#define REGISTER __int16
#define OFFSET __int16
#endif
// Memory addressing macros, addressing a stack entry from the memory
#define SE(ADDR) (*((StackEntry*) (m_pbMem + ADDR)))
#define OFFS(ADDR) (*((OFFSET*) (m_pbMem + ADDR)))
// Now defining the stack entry Types
#define SE_ADDRESS 10
#define SE_OFFSET 11
#define SE_BOOLEAN 12
#define SE_CHAR ET_CHAR
#define SE_INTEGER ET_INTEGER
#define SE_REAL ET_REAL
#define SE_UNDEFINED 0
#define SE_SIZE sizeof(StackEntry) // Stack Entry Size
// Now some macros for converting the info type
// Theese conversions make a bit conversion, not a value conversion
#define CV_REAL(something) (*((REAL *) &something))
#define CV_CHAR(something) (*((CHAR *) &something))
#define CV_INTEGER(something) (*((INTEGER *) &something))
#define CV_ADDRESS(something) (*((REGISTER *) &something))
#define CV_OFFSET(something) (*((OFFSET *) &something))
#define CV_BOOLEAN(something) (*((BOOL *) &something))
// now define some useful conversion macros
// the machine states
#define MS_ACTIVE 1
#define MS_STOP 2
#define MS_ERROR 4
// the machine instructions
#define INSTR_NUMBER 40
#define INSTR_NOP 0
#define INSTR_OR 1
#define INSTR_OUTP 2
#define INSTR_INP 3
#define INSTR_ERR 4
#define INSTR_STOP 5
#define INSTR_RET 6
#define INSTR_CALL 7
#define INSTR_MOD 8
#define INSTR_DIV 9
#define INSTR_MUL 10
#define INSTR_SUB 11
#define INSTR_ADD 12
#define INSTR_NEQ 13
#define INSTR_EQU 14
#define INSTR_GEQ 15
#define INSTR_GRT 16
#define INSTR_LEQ 17
#define INSTR_LES 18
#define INSTR_FJP 19
#define INSTR_UJP 20
#define INSTR_RED 21
#define INSTR_MVRX 22
#define INSTR_STO 23
#define INSTR_COPY 24
#define INSTR_LODIX 25
#define INSTR_LODI 26
#define INSTR_LOD 27
#define INSTR_AND 28
#define INSTR_ENTER 29
#define INSTR_LEAVE 30
#define INSTR_CHGSFP 31
#define INSTR_RSTSFP 32
#define INSTR_LODA 33
#define INSTR_LODAX 34
#define INSTR_LODEA 35
#define INSTR_USTO 36
#define INSTR_PUSH 37 // Unused
#define INSTR_POP 38 // Unused
#define INSTR_NFJP 39
////////////////////////////////////////////////
// Defining the Bynary file header struct
struct BinHeader
{
char signature[3];
DWORD version;
DWORD headerSize;
DWORD entryPoint;
DWORD codeSize;
};
/////////////////////////////////////////////////////////////
// end of the defines stuff
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -