1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-09-30 18:57:25 +00:00

Added multiple case arguments and optimized argument 0

This commit is contained in:
Curtis F Kaylor 2018-02-06 21:31:19 -05:00
parent eec6b17878
commit 998b2e11e6
5 changed files with 104 additions and 74 deletions

BIN
c02.exe

Binary file not shown.

144
c02.ppx
View File

@ -3,16 +3,6 @@
<category name="expr.h" />
<category name="cond.h" />
<category name="asm.h">
<category name="Window">
<property name="Left" type="integer">78</property>
<property name="Top" type="integer">78</property>
<property name="Right" type="integer">786</property>
<property name="Bottom" type="integer">388</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="c02.c">
<category name="Window">
<property name="Left" type="integer">0</property>
<property name="Top" type="integer">0</property>
@ -22,7 +12,7 @@
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="stmnt.c">
<category name="c02.c">
<category name="Window">
<property name="Left" type="integer">26</property>
<property name="Top" type="integer">26</property>
@ -32,58 +22,7 @@
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="asm.c">
<category name="Window">
<property name="Left" type="integer">52</property>
<property name="Top" type="integer">52</property>
<property name="Right" type="integer">760</property>
<property name="Bottom" type="integer">362</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="vars.c">
<category name="Window">
<property name="Left" type="integer">52</property>
<property name="Top" type="integer">52</property>
<property name="Right" type="integer">1004</property>
<property name="Bottom" type="integer">362</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="parse.c">
<category name="Window">
<property name="Left" type="integer">78</property>
<property name="Top" type="integer">78</property>
<property name="Right" type="integer">1030</property>
<property name="Bottom" type="integer">388</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="include.c">
<category name="Window">
<property name="Left" type="integer">104</property>
<property name="Top" type="integer">104</property>
<property name="Right" type="integer">1056</property>
<property name="Bottom" type="integer">414</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="expr.c">
<category name="Window">
<property name="Left" type="integer">130</property>
<property name="Top" type="integer">130</property>
<property name="Right" type="integer">1082</property>
<property name="Bottom" type="integer">440</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="parse.h" />
<category name="common.h">
<category name="stmnt.c">
<category name="Window">
<property name="Left" type="integer">-8</property>
<property name="Top" type="integer">-31</property>
@ -93,8 +32,47 @@
<property name="Active" type="integer">1</property>
</category>
</category>
<category name="files.c" />
<category name="common.c">
<category name="asm.c">
<category name="Window">
<property name="Left" type="integer">78</property>
<property name="Top" type="integer">78</property>
<property name="Right" type="integer">1030</property>
<property name="Bottom" type="integer">388</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="vars.c">
<category name="Window">
<property name="Left" type="integer">104</property>
<property name="Top" type="integer">104</property>
<property name="Right" type="integer">1056</property>
<property name="Bottom" type="integer">414</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="parse.c">
<category name="Window">
<property name="Left" type="integer">130</property>
<property name="Top" type="integer">130</property>
<property name="Right" type="integer">1082</property>
<property name="Bottom" type="integer">440</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="include.c">
<category name="Window">
<property name="Left" type="integer">0</property>
<property name="Top" type="integer">0</property>
<property name="Right" type="integer">952</property>
<property name="Bottom" type="integer">310</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="expr.c">
<category name="Window">
<property name="Left" type="integer">26</property>
<property name="Top" type="integer">26</property>
@ -104,11 +82,33 @@
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="parse.h" />
<category name="common.h">
<category name="Window">
<property name="Left" type="integer">52</property>
<property name="Top" type="integer">52</property>
<property name="Right" type="integer">1004</property>
<property name="Bottom" type="integer">362</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="files.c" />
<category name="common.c">
<category name="Window">
<property name="Left" type="integer">78</property>
<property name="Top" type="integer">78</property>
<property name="Right" type="integer">1030</property>
<property name="Bottom" type="integer">388</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="label.c">
<category name="Window">
<property name="Left" type="integer">104</property>
<property name="Top" type="integer">104</property>
<property name="Right" type="integer">812</property>
<property name="Right" type="integer">1056</property>
<property name="Bottom" type="integer">414</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
@ -118,10 +118,20 @@
<category name="Window">
<property name="Left" type="integer">130</property>
<property name="Top" type="integer">130</property>
<property name="Right" type="integer">838</property>
<property name="Right" type="integer">1082</property>
<property name="Bottom" type="integer">440</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
<category name="label.h">
<category name="Window">
<property name="Left" type="integer">0</property>
<property name="Top" type="integer">0</property>
<property name="Right" type="integer">952</property>
<property name="Bottom" type="integer">310</property>
<property name="Maximized" type="integer">0</property>
<property name="Active" type="integer">0</property>
</category>
</category>
</settings>

BIN
c02.tag

Binary file not shown.

10
label.c
View File

@ -71,6 +71,13 @@ void newlbl(char* lbname)
DEBUG("Generated new label '%s'\n", lbname);
}
/* if label is blank, generate a new one */
void chklbl(char* lbname)
{
if (lbname[0]) return;
newlbl(lbname);
}
/* require label *
* if label is already set, returns that label *
* else generates new label and sets it */
@ -81,8 +88,7 @@ void reqlbl(char* lbname)
else {
newlbl(lbname);
setlbl(lbname);
}
}
}
/* Pop Label from Stack and Emit on Next Line */

24
stmnt.c
View File

@ -329,16 +329,30 @@ void ecase() {
/* parse and compile select statement */
void pcase() {
if (strcmp(xstmnt, "CASE") == 0)
int fcase = (strcmp(xstmnt, "CASE") == 0);
if (fcase)
xstmnt[0] = 0; //Clear xstmnt
else
ecase("CASE"); //Process end of case block
prstrm(); //Parse CASE argument
asmlin("CMP", term); //Emit Comparison
expect(':');
skplbl[0] = 0; //Clear Skip Label
newlbl(cndlbl); //Create Conditional Label
pshlbl(LTCASE, cndlbl); //and Push onto Stack
asmlin("BNE", cndlbl); //Emit skip of CASE body
while(TRUE) {
prstrm(); //Parse CASE argument
if (!fcase || valtyp != CONSTANT || cnstnt)
asmlin("CMP", term); //Emit Comparison
if (look(',')) {
chklbl(skplbl); //Emit skip to beginning of CASE block
asmlin("BEQ", skplbl);
fcase = 0;
continue; //Parse next argument
}
expect(':'); //Emit branch to end of CASE block
asmlin("BNE", cndlbl);
break;
}
if (skplbl[0])
setlbl(skplbl); //Set CASE block label if defined
}
/* parse and compile default statement */