shithub: rgbds

Download patch

ref: 215d6f0c5b57b6be70fc4eac8f14859151c17f2d
parent: f3394f46b4d322bc746540c16122a5f69585927c
author: Anthony J. Bentley <[email protected]>
date: Tue Sep 23 23:40:50 EDT 2014

Revert 97d431d1f4ad404e282e3781bd195be3f053734d; it breaks things.

--- a/include/asm/asm.h
+++ b/include/asm/asm.h
@@ -24,7 +24,7 @@
 extern ULONG nPC;
 extern ULONG nPass;
 extern ULONG nIFDepth;
-extern char *tzCurrentFileName;
+extern char tzCurrentFileName[_MAX_PATH + 1];
 extern struct Section *pCurrentSection;
 extern struct sSymbol *tHashedSymbols[HASHSIZE];
 extern struct sSymbol *pPCSymbol;
--- a/include/asm/fstack.h
+++ b/include/asm/fstack.h
@@ -19,7 +19,7 @@
 	YY_BUFFER_STATE FlexHandle;
 	struct sSymbol *pMacro;
 	struct sContext *pNext;
-	char *tzFileName;
+	char tzFileName[_MAX_PATH + 1];
 	char *tzMacroArgs[MAXMACROARGS + 1];
 	SLONG nLine;
 	ULONG nStatus;
--- a/src/asm/fstack.c
+++ b/src/asm/fstack.c
@@ -31,7 +31,7 @@
 YY_BUFFER_STATE CurrentFlexHandle;
 FILE *pCurrentFile;
 ULONG nCurrentStatus;
-char *tzCurrentFileName;
+char tzCurrentFileName[_MAX_PATH + 1];
 char IncludePaths[MAXINCPATHS][_MAX_PATH + 1];
 SLONG NextIncPath = 0;
 ULONG nMacroCount;
@@ -70,7 +70,8 @@
 		(struct sContext *) malloc(sizeof(struct sContext))) != NULL) {
 		(*ppFileStack)->FlexHandle = CurrentFlexHandle;
 		(*ppFileStack)->pNext = NULL;
-		(*ppFileStack)->tzFileName = tzCurrentFileName;
+		strcpy((char *) (*ppFileStack)->tzFileName,
+		    (char *) tzCurrentFileName);
 		(*ppFileStack)->nLine = nLineNo;
 		switch ((*ppFileStack)->nStatus = nCurrentStatus) {
 		case STAT_isMacroArg:
@@ -131,7 +132,8 @@
 			nLineNo += 1;
 
 		CurrentFlexHandle = pLastFile->FlexHandle;
-		tzCurrentFileName = pLastFile->tzFileName;
+		strcpy((char *) tzCurrentFileName,
+		    (char *) pLastFile->tzFileName);
 		switch (nCurrentStatus = pLastFile->nStatus) {
 		case STAT_isMacroArg:
 		case STAT_isMacro:
@@ -247,7 +249,7 @@
 	pushcontext();
 	nLineNo = 1;
 	nCurrentStatus = STAT_isInclude;
-	tzCurrentFileName = tzFileName;
+	strcpy(tzCurrentFileName, tzFileName);
 	pCurrentFile = f;
 	CurrentFlexHandle = yy_create_buffer(pCurrentFile);
 	yy_switch_to_buffer(CurrentFlexHandle);
@@ -275,7 +277,7 @@
 		nLineNo = -1;
 		sym_UseNewMacroArgs();
 		nCurrentStatus = STAT_isMacro;
-		tzCurrentFileName = s;
+		strcpy(tzCurrentFileName, s);
 		pCurrentMacro = sym;
 		CurrentFlexHandle =
 		    yy_scan_bytes(pCurrentMacro->pMacro,
@@ -285,7 +287,32 @@
 	} else
 		return (0);
 }
+/*
+ * RGBAsm - FSTACK.C (FileStack routines)
+ *
+ * Set up a macroargument for parsing
+ *
+ */
 
+void 
+fstk_RunMacroArg(SLONG s)
+{
+	char *sym;
+
+	if (s == '@')
+		s = -1;
+	else
+		s -= '0';
+
+	if ((sym = sym_FindMacroArg(s)) != NULL) {
+		pushcontext();
+		nCurrentStatus = STAT_isMacroArg;
+		sprintf(tzCurrentFileName, "%c", (UBYTE) s);
+		CurrentFlexHandle = yy_scan_bytes(sym, strlen(sym));
+		yy_switch_to_buffer(CurrentFlexHandle);
+	} else
+		fatalerror("No such macroargument");
+}
 /*
  * RGBAsm - FSTACK.C (FileStack routines)
  *
@@ -301,7 +328,7 @@
 	if ((pSym = sym_FindSymbol(s)) != NULL) {
 		pushcontext();
 		nCurrentStatus = STAT_isMacroArg;
-		tzCurrentFileName = s;
+		strcpy(tzCurrentFileName, s);
 		CurrentFlexHandle =
 		    yy_scan_bytes(pSym->pMacro, strlen(pSym->pMacro));
 		yy_switch_to_buffer(CurrentFlexHandle);
@@ -355,7 +382,7 @@
 
 	nMacroCount = 0;
 	nCurrentStatus = STAT_isInclude;
-	tzCurrentFileName = tzFileName;
+	strcpy(tzCurrentFileName, tzFileName);
 	CurrentFlexHandle = yy_create_buffer(pCurrentFile);
 	yy_switch_to_buffer(CurrentFlexHandle);
 	nLineNo = 1;