2018-02-13 22:25:57 +00:00
|
|
|
/*************************************
|
|
|
|
* C02 Variable Management Routines *
|
|
|
|
*************************************/
|
|
|
|
|
|
|
|
/* Variable Table */
|
2018-03-08 13:23:05 +00:00
|
|
|
char varnam[MAXVAR+1][VARLEN+1]; //Variable Name Table
|
|
|
|
char varmod[MAXVAR+1]; //Variable Modifier
|
|
|
|
char vartyp[MAXVAR+1]; //Variable Type
|
|
|
|
char varsiz[MAXVAR+1][4]; //Variable Array Size
|
2018-03-08 19:35:00 +00:00
|
|
|
char varstc[MAXVAR+1]; //Variable Struct Index
|
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
|
2018-11-07 05:13:29 +00:00
|
|
|
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
|
2018-11-07 05:13:29 +00:00
|
|
|
int mbrofs; //Member Offset
|
2018-03-08 13:23:05 +00:00
|
|
|
|
|
|
|
enum vtypes {VTVOID, VTCHAR, VTSTRUCT}; //Variable Types
|
2018-02-13 22:25:57 +00:00
|
|
|
|
|
|
|
char datvar[DATASPC+1]; //Variable Data Storage
|
2018-08-14 18:51:04 +00:00
|
|
|
int datlen[MAXVAR+1]; //Variable Data Length
|
2018-02-13 22:25:57 +00:00
|
|
|
char dattyp[MAXVAR+1]; //Variable Data Type
|
2018-08-14 18:51:04 +00:00
|
|
|
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, DTSTR, DTARRY}; //Variable Data Types
|
|
|
|
|
2018-08-03 20:38:20 +00:00
|
|
|
/*Variable Modifier Types (Bit Mask) */
|
|
|
|
#define MTNONE 0 //No Modifier
|
2018-09-09 20:10:21 +00:00
|
|
|
#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)
|
2018-08-16 20:26:44 +00:00
|
|
|
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
|
2018-08-16 20:26:44 +00:00
|
|
|
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
|
2018-07-30 17:03:54 +00:00
|
|
|
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 vartbl(); //Create Variable Table
|
2018-03-08 14:39:32 +00:00
|
|
|
void logstc(void); //Print Struct Tables to Log File
|