/****************************************************** * C02 Label Parsing, Generation, and Lookup Routines * ******************************************************/ char labnam[MAXLAB+1][LABLEN+1]; //Program Label Names int labcnt; //Number of Program Labels int labidx; //Index into labnam[] char curlbl[LBLLEN+1]; //Most recently generated label char cmplbl[LBLLEN+1]; //Label for Comparison char cndlbl[LBLLEN+1]; //Label for Conditional Code char endlbl[LBLLEN+1]; //End Label char forlbl[LBLLEN+1]; //For Loop Label char loplbl[LBLLEN+1]; //Skip Increment Label char skplbl[LBLLEN+1]; //Skip Increment Label char tmplbl[LBLLEN+1]; //Temporary Label char lblnam[MAXLBL+1][LBLLEN+1]; //Label Name Table int lbltyp[MAXLBL+1]; //Label Type int lblblk[MAXLBL+1]; //Label Ends Program Block int lblcnt; //Number of Labels in stack int lblnxt; //Sequence of next label to be generated char lbltmp[LBLLEN+1]; //Label Temporary Storage enum ltypes {LTNONE, LTIF, LTELSE, LTLOOP, LTEND, LTDO, LTDWHL, LTSLCT, LTCASE, LTFUNC}; //Label Types enum lflags {LFNONE, LFBGN, LFEND}; //Label Flag Types void addlab(char *name); //Add Program Label int fndlab(char *name); //Find Program Label void prslab(); //Parse Program Label void loglab(void); //Print Program Label Table void chklbl(char* lbname); //Check Label Contents int lstlbl(int lbflag); //Find Last Label of Specified Types * void newlbl(char* lbname); //Generate New Block Label int poplbl(); //Pop Last Label and Emit on Next Line void pshlbl(int lbtype, char* lbname); //Push Label onto Stack void reqlbl(char* lbname); //Require Label void setblk(int blkflg); //Set Block Flag for Last Label void setlbl(char *lblset); //Emit word as Label on Next Line int toplbl(char *rtlbl); //Get Top Label and Return Type