Implemented charmap stack

New commands:
 .PUSHCHARMAP: will push the current charmap state into an internal stack
 .POPCHARMAP: will restore the current charmap to the last pushed charmap

Details:
  The push and pop facilities are implemented directly inside the tgttrans.h,
  to facilitate its reuse on the C compiler.
This commit is contained in:
Marco Aurelio da Costa
2021-04-16 14:42:16 -03:00
committed by Oliver Schmidt
parent ffc30c0c6e
commit c915b5d7f3
5 changed files with 101 additions and 0 deletions

View File

@@ -1568,6 +1568,19 @@ static void DoPageLength (void)
static void DoPopCharmap (void)
/* Restore a charmap */
{
if (TgtTranslateStackIsEmpty ()) {
ErrorSkip ("Charmap stack is empty");
return;
}
TgtTranslatePop ();
}
static void DoPopCPU (void)
/* Pop an old CPU setting from the CPU stack */
{
@@ -1657,6 +1670,16 @@ static void DoPSC02 (void)
static void DoPushCharmap (void)
/* Save the current charmap */
{
if (!TgtTranslatePush ()) {
ErrorSkip ("Charmap stack overflow");
}
}
static void DoPushCPU (void)
/* Push the current CPU setting onto the CPU stack */
{
@@ -2101,10 +2124,12 @@ static CtrlDesc CtrlCmdTab [] = {
{ ccNone, DoUnexpected }, /* .PARAMCOUNT */
{ ccNone, DoPC02 },
{ ccNone, DoPDTV },
{ ccNone, DoPopCharmap },
{ ccNone, DoPopCPU },
{ ccNone, DoPopSeg },
{ ccNone, DoProc },
{ ccNone, DoPSC02 },
{ ccNone, DoPushCharmap },
{ ccNone, DoPushCPU },
{ ccNone, DoPushSeg },
{ ccNone, DoUnexpected }, /* .REFERENCED */
@@ -2183,4 +2208,7 @@ void CheckPseudo (void)
if (!IS_IsEmpty (&CPUStack)) {
Warning (1, "CPU stack is not empty");
}
if (!TgtTranslateStackIsEmpty ()) {
Warning (1, "Charmap stack is not empty");
}
}

View File

@@ -260,10 +260,12 @@ struct DotKeyword {
{ ".PARAMCOUNT", TOK_PARAMCOUNT },
{ ".PC02", TOK_PC02 },
{ ".PDTV", TOK_PDTV },
{ ".POPCHARMAP", TOK_POPCHARMAP },
{ ".POPCPU", TOK_POPCPU },
{ ".POPSEG", TOK_POPSEG },
{ ".PROC", TOK_PROC },
{ ".PSC02", TOK_PSC02 },
{ ".PUSHCHARMAP", TOK_PUSHCHARMAP },
{ ".PUSHCPU", TOK_PUSHCPU },
{ ".PUSHSEG", TOK_PUSHSEG },
{ ".REF", TOK_REFERENCED },

View File

@@ -231,10 +231,12 @@ typedef enum token_t {
TOK_PARAMCOUNT,
TOK_PC02,
TOK_PDTV,
TOK_POPCHARMAP,
TOK_POPCPU,
TOK_POPSEG,
TOK_PROC,
TOK_PSC02,
TOK_PUSHCHARMAP,
TOK_PUSHCPU,
TOK_PUSHSEG,
TOK_REFERENCED,