1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-09-26 22:57:09 +00:00
C02/src/vars.h

95 lines
4.1 KiB
C
Raw Normal View History

2018-02-13 22:25:57 +00:00
/*************************************
* C02 Variable Management Routines *
*************************************/
/* Variable Record */
struct varrec {
char name[VARLEN+1]; //Variable Name Table (string)
char modifr; //Variable Modifier (MTxxx)
char type; //Variable Type (VTxxx)
char size[4]; //Variable Array Size (string)
char stcidx; //Variable Struct Index
};
struct varrec vartbl[MAXVAR+1]; //Variable Table
struct varrec varble; //Variable Table Entry
2018-03-08 13:23:05 +00:00
int varcnt; //Number of Variables in Table
int varidx; //Index into Variable Tables
char vrname[MAXVAR+1]; //Variable Name
int vrwrtn; //Variables Written Flag
2018-03-08 14:39:32 +00:00
struct strctd { //Struct Definition
char name[STCLEN+1]; //Struct Name
int size; //Total Length of Struct
};
struct strctd strcts[MAXSTC+1]; //Table of Defined Structs
struct strctd strct; //Defined Struct
2018-03-08 13:23:05 +00:00
int stccnt; //Number of Structs Defined
int stcidx; //Index into Struct Tables
2018-03-08 14:39:32 +00:00
struct membrd { //Struct Membetr Definition
char name[STMLEN+1]; //Member Name
int strcti; //Parent Struct Index
int stype; //Member Symbol Type
int symidx; //Member Symbol Index
2018-03-08 14:39:32 +00:00
int offset; //Offset into Struct
int size; //Member Size
};
struct membrd membrs[MAXSTM+1]; //Table of Defined Members
struct membrd membr; //Defined Member
int mbrcnt; //Number of Struct Members Defined
int mbridx; //Index into Struct Member Tables
int mbrofs; //Member Offset
2018-03-08 13:23:05 +00:00
enum vtypes {VTVOID, VTCHAR, VTINT, VTSTRUCT}; //Variable Types
2018-02-13 22:25:57 +00:00
char datvar[DATASPC+1]; //Variable Data Storage
int datlen[MAXVAR+1]; //Variable Data Length
2018-02-13 22:25:57 +00:00
char dattyp[MAXVAR+1]; //Variable Data Type
char dattmp[DATASPC+1]; //Variable Temporary Data
2018-02-13 22:25:57 +00:00
int dtype; //Data Type
int dlen; //Length of Variable Data
int dsize; //Total Data Length
enum dtypes {DTBYTE, DTINT, DTSTR, DTARRY}; //Variable Data Types
2018-02-13 22:25:57 +00:00
/* Variable Modifier Types (Bit Mask) */
2018-08-03 20:38:20 +00:00
#define MTNONE 0 //No Modifier
#define MTALS 1 //Alias
#define MTCONST 2 //Constant
#define MTZP 4 //Zero Page
2018-08-03 20:38:20 +00:00
#define MTALGN 128 //Aligned
2018-02-13 22:25:57 +00:00
2018-12-03 21:27:25 +00:00
/*Value Parsing Flags (BitMask) */
#define ALWDEF 0 //Allow Default
#define ALWREG 1 //Allow Register
#define ALWCON 2 //Allow CONST Variable
#define ALWINT 4 //Allow Integer
2018-02-13 22:25:57 +00:00
int symdef(char *name); //Is Variable defined (TRUE or FALSE)
int rambas; //RAM Base Address (0=None)
int wrtbas; //Write Base Address (0=None)
2018-02-13 22:25:57 +00:00
int zpaddr; //Current Zero-Page Address
char wrtofs[6]; //Write Address Offset
2018-02-13 22:25:57 +00:00
2018-03-08 13:23:05 +00:00
void addvar(int m, int t); //Parse and Compile Variable Declaration
void addstc(); //Parse and Compile Structure Declaration
void defstc(); //Parse Structure Definition
2018-08-03 20:38:20 +00:00
void chksym(int alwreg, int alwcon, char *name); //Error if Variable not defined
2018-03-08 13:23:05 +00:00
void prsdts(); //Parse Data String
void setdat(); //Set Variable Data
void setvar(int m, int t); //Set Variable Name and Size
void prsdts(); //Parse Data String
2018-08-03 20:38:20 +00:00
void prsvar(int alwreg, int alwcon); //Parse Variable
2018-03-09 01:07:31 +00:00
void prsmbr(char* name); //Parse Struct Member
int psizof(void); //Parse SizeOf Operator
int pidxof(void); //Parse IndexOf Operator
2018-03-08 13:23:05 +00:00
void reqvar(int alwary); //Require and Parse Variable Name
void setdat(); //Store variable data
void setvar(int m, int t); //Add Variable to Variable table
void wvrtbl(); //Create Variable Table
2018-03-08 14:39:32 +00:00
void logstc(void); //Print Struct Tables to Log File