mirror of
https://github.com/RevCurtisP/C02.git
synced 2025-02-19 19:31:04 +00:00
Added multiple case arguments and optimized argument 0
This commit is contained in:
parent
eec6b17878
commit
998b2e11e6
144
c02.ppx
144
c02.ppx
@ -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>
|
||||
|
10
label.c
10
label.c
@ -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
24
stmnt.c
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user