From 1967c25fac882302155231ae888a35b1ab872fee Mon Sep 17 00:00:00 2001 From: jacekm Date: Fri, 8 Feb 2008 11:41:42 +0000 Subject: [PATCH] scc 0.5.3 git-svn-id: svn://kolibrios.org@718 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/scc/CC4.ASM | 4131 ++++++++++++++++++ programs/develop/scc/Cc1.asm | 5066 ++++++++++++++++++++++ programs/develop/scc/Cc2.asm | 3034 ++++++++++++++ programs/develop/scc/Cc3.asm | 6740 ++++++++++++++++++++++++++++++ programs/develop/scc/GETARG.ASM | 128 + programs/develop/scc/GETARG.C | 29 + programs/develop/scc/INTRINS.ASM | 140 + programs/develop/scc/LIBSTD.ASM | 2699 ++++++++++++ programs/develop/scc/Libstd.c | 440 ++ programs/develop/scc/MACROS.INC | 268 ++ programs/develop/scc/NOTICE.H | 6 + programs/develop/scc/OSFUNC.ASM | 681 +++ programs/develop/scc/README.TXT | 18 + programs/develop/scc/SCC.ASM | 392 ++ programs/develop/scc/STDIO.H | 33 + programs/develop/scc/cc.h | 320 ++ programs/develop/scc/cc1.c | 911 ++++ programs/develop/scc/cc2.c | 557 +++ programs/develop/scc/cc3.c | 1093 +++++ programs/develop/scc/cc4.c | 985 +++++ 20 files changed, 27671 insertions(+) create mode 100644 programs/develop/scc/CC4.ASM create mode 100644 programs/develop/scc/Cc1.asm create mode 100644 programs/develop/scc/Cc2.asm create mode 100644 programs/develop/scc/Cc3.asm create mode 100644 programs/develop/scc/GETARG.ASM create mode 100644 programs/develop/scc/GETARG.C create mode 100644 programs/develop/scc/INTRINS.ASM create mode 100644 programs/develop/scc/LIBSTD.ASM create mode 100644 programs/develop/scc/Libstd.c create mode 100644 programs/develop/scc/MACROS.INC create mode 100644 programs/develop/scc/NOTICE.H create mode 100644 programs/develop/scc/OSFUNC.ASM create mode 100644 programs/develop/scc/README.TXT create mode 100644 programs/develop/scc/SCC.ASM create mode 100644 programs/develop/scc/STDIO.H create mode 100644 programs/develop/scc/cc.h create mode 100644 programs/develop/scc/cc1.c create mode 100644 programs/develop/scc/cc2.c create mode 100644 programs/develop/scc/cc3.c create mode 100644 programs/develop/scc/cc4.c diff --git a/programs/develop/scc/CC4.ASM b/programs/develop/scc/CC4.ASM new file mode 100644 index 0000000000..eabd5e1957 --- /dev/null +++ b/programs/develop/scc/CC4.ASM @@ -0,0 +1,4131 @@ +_seq00 DD 0,1,51,0,257,75,0 +_seq01 DD 0,74,0,2046,0,1792,65,1280,0,1795 + DD 68,0,0 +_seq02 DD 0,76,0,2046,0,1792,101,1280,0,1795 + DD 102,0,0 +_seq03 DD 0,65,62,68,0,258,1537,81,0,105 + DD 0 +_seq04 DD 0,65,64,68,0,258,1537,82,0,106 + DD 0 +_seq05 DD 0,65,61,68,0,257,103,257,80,511 + DD 0 +_seq06 DD 0,65,63,68,0,257,103,257,80,511 + DD 0 +_seq07 DD 0,30,33,1,51,28,0,260,1021,511 + DD 89,1021,0 +_seq08 DD 0,30,33,1,51,29,0,260,1021,511 + DD 89,1021,0 +_seq09 DD 0,30,33,1,51,32,0,260,1021,511 + DD 89,1021,0 +_seq10 DD 0,30,89,70,0,258,30,1023,511,1023 + DD 0 +_seq11 DD 0,30,51,0,257,89,1023,0 +_seq12 DD 0,30,60,253,0,257,97,1023,0 +_seq13 DD 0,31,61,253,0,100,257,80,511,2049 + DD 0 +_seq14 DD 0,31,63,253,0,100,257,80,511,2049 + DD 0 +_seq15 DD 0,32,60,253,0,257,98,1023,0 +_seq16 DD 0,88,33,1,51,0,259,76,1022,511 + DD 91,1022,0 +_seq17 DD 0,88,91,70,0,258,88,1023,511,91 + DD 1023,0 +_seq18 DD 0,88,51,0,257,91,1023,0 +_seq19 DD 0,89,31,70,69,0,259,104,1022,511 + DD 30,1022,0 +_seq20 DD 0,33,1,0,257,74,1023,0 +_seq21 DD 0,91,31,70,69,0,259,104,1022,511 + DD 88,1022,0 +_seq22 DD 0,68,61,65,0,257,79,257,80,511 + DD 0 +_seq23 DD 0,68,63,65,0,257,79,257,80,511 + DD 0 +_seq24 DD 0,68,62,65,0,258,1537,92,0,77 + DD 0 +_seq25 DD 0,68,64,65,0,258,1537,93,0,78 + DD 0 +_seq26 DD 0,51,31,70,69,0,259,104,1022,0 +_seq27 DD 0,51,31,251,0,257,33,0 +_seq28 DD 0,25,33,1,51,0,259,94,1022,511 + DD 84,1022,0 +_seq29 DD 0,25,51,253,0,257,83,1023,0 +_seq30 DD 0,25,60,253,254,0,2387,258,0 +_seq31 DD 0,58,33,1,51,0,1025,259,95,1021 + DD 0 +_seq32 DD 0,58,60,51,0,257,95,1023,257,96 + DD 511,0 +_seq33 DD 0,58,60,253,254,0,2399,258,0 +_seq34 DD 0,58,51,0,257,95,1023,0 +_seq35 DD 0,83,28,252,0,257,26,1023,0 +_seq36 DD 0,83,29,252,0,257,27,1023,0 +_seq37 DD 0,83,32,252,0,257,30,1023,0 +_seq38 DD 0,84,94,32,252,0,258,767,1023,511 + DD 87,1023,0 +_seq39 DD 0,95,28,252,0,1025,257,85,1023,0 +_seq40 DD 0,95,29,252,0,1025,257,86,1023,0 +_seq41 DD 0,95,32,60,253,0,1025,258,99,1022 + DD 0 +_seq42 DD 0,95,32,252,0,1025,257,88,1023,0 +_seq43 DD 0,60,255,59,0,258,767,1023,511,51 + DD 0 +_seq44 DD 0,97,254,0,2393,257,0 +_seq45 DD 0,98,255,59,0,258,767,1023,511,90 + DD 1023,0 +_seq46 DD 0,99,254,0,2395,257,0 +_seq47 DD 0,104,0,2046,0,1792,68,1280,0,1795 + DD 65,0,0 +_seq: TIMES 48 DD 0 + +_setseq: +PUSH EBP +MOV EBP,ESP +MOV EAX,_seq +PUSH EAX +MOV EAX,_seq00 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq01 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq02 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,12 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq03 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq04 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,20 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq05 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,24 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq06 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,28 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq07 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,32 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq08 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,36 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq09 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,40 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq10 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,44 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq11 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,48 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq12 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,52 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq13 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,56 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq14 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,60 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq15 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq16 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,68 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq17 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,72 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq18 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,76 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq19 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,80 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq20 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,84 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq21 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,88 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq22 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,92 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq23 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,96 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq24 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,100 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq25 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,104 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq26 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,108 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq27 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,112 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq28 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,116 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq29 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,120 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq30 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,124 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq31 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,128 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq32 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,132 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq33 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,136 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq34 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,140 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq35 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,144 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq36 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,148 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq37 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,152 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq38 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,156 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq39 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,160 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq40 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,164 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq41 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,168 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq42 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,172 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq43 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,176 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq44 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,180 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq45 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,184 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq46 +POP EBX +MOV [EBX],EAX +MOV EAX,_seq +MOV EBX,188 +ADD EAX,EBX +PUSH EAX +MOV EAX,_seq47 +POP EBX +MOV [EBX],EAX +POP EBP +RET +_code: TIMES 116 DD 0 + +_setcodes: +PUSH EBP +MOV EBP,ESP +XOR CL,CL +CALL _setseq +MOV EAX,_code +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+0 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,296 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+15 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,300 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+33 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,304 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+48 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,308 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+66 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,312 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+88 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,316 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+110 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+119 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,12 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+137 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+152 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,20 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+163 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,24 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+189 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,28 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+229 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,32 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+269 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,36 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+281 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,40 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+293 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,44 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+299 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,48 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+312 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,52 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+331 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,320 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+342 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,56 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+350 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,60 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+363 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,324 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+376 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,328 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+394 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+412 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,68 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+429 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,444 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+453 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,448 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+459 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,452 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+470 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,72 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+489 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,76 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+514 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,80 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+557 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,84 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+570 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,88 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+614 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,92 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+627 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,104 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+641 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,108 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+665 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,112 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+689 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,116 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+719 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,340 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+749 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,344 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+776 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,428 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+803 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,432 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+820 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,436 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+849 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,440 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+873 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,120 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+902 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,348 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+926 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,124 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+948 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,128 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+978 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,352 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1009 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,356 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1037 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,132 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1059 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,360 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1088 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,364 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1118 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,136 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1145 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,140 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1188 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,144 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1201 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,368 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1215 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,372 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1233 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,148 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1251 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,152 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1257 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,156 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1270 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,160 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1289 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,164 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1301 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,168 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1310 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,172 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1354 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,176 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1367 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,180 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1381 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,184 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1396 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,188 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1439 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,192 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1452 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,196 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1466 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,200 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1496 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,204 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1533 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,208 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1548 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,212 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1560 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,216 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1571 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,220 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1615 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,224 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1628 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,228 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1640 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,376 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1654 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,96 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1665 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,100 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1685 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,232 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1700 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,332 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1720 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,336 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1735 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,380 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1748 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,236 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1768 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,240 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1779 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,384 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1791 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,388 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1803 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,392 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1815 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,396 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1835 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,400 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1855 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,244 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1864 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,248 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1885 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,456 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1901 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,460 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1924 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,252 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1941 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,256 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1962 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,260 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1978 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,404 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+1991 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,264 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2004 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,268 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2010 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,272 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2042 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,408 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2055 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,412 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2068 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,276 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2077 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,416 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2092 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,420 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2110 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,424 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2127 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,280 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2144 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,284 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2160 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,288 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2195 +POP EBX +MOV [EBX],EAX +MOV EAX,_code +MOV EBX,292 +ADD EAX,EBX +PUSH EAX +MOV EAX,_4_2+2212 +POP EBX +MOV [EBX],EAX +POP EBP +RET +_4_2 DB -119,65,68,68,32,69,65,88,44,69 + DB 66,88,13,10,0,8,63,65,68,68 + DB 32,69,65,88,44,60,110,62,13,10 + DB 63,63,0,-119,65,68,68,32,69,66 + DB 88,44,69,65,88,13,10,0,8,63 + DB 65,68,68,32,69,66,88,44,60,110 + DB 62,13,10,63,63,0,1,65,68,68 + DB 32,66,89,84,69,32,91,69,66,88 + DB 93,44,60,110,62,13,10,0,1,65 + DB 68,68,32,87,79,82,68,32,91,69 + DB 66,88,93,44,60,110,62,13,10,0 + DB 0,65,68,68,32,60,109,62,0,0 + DB 63,65,68,68,32,69,83,80,44,60 + DB 110,62,13,10,63,63,0,-119,65,78 + DB 68,32,69,65,88,44,69,66,88,13 + DB 10,0,8,78,69,71,32,69,65,88 + DB 13,10,0,0,63,77,79,86,32,67 + DB 76,44,60,110,62,63,88,79,82,32 + DB 67,76,44,67,76,63,13,10,0,9 + DB 77,79,86,32,69,67,88,44,69,65 + DB 88,13,10,77,79,86,32,69,65,88 + DB 44,69,66,88,13,10,83,65,76,32 + DB 69,65,88,44,67,76,13,10,0,9 + DB 77,79,86,32,69,67,88,44,69,65 + DB 88,13,10,77,79,86,32,69,65,88 + DB 44,69,66,88,13,10,83,65,82,32 + DB 69,65,88,44,67,76,13,10,0,8 + DB 67,65,76,76,32,69,65,88,13,10 + DB 0,16,67,65,76,76,32,60,109,62 + DB 13,10,0,0,32,68,66,32,0,0 + DB 32,82,69,83,66,32,60,110,62,13 + DB 10,0,0,32,84,73,77,69,83,32 + DB 60,110,62,32,68,66,32,48,13,10 + DB 0,8,78,79,84,32,69,65,88,13 + DB 10,0,0,44,60,110,62,13,10,0 + DB 8,83,72,76,32,69,65,88,44,49 + DB 13,10,0,1,83,72,76,32,69,66 + DB 88,44,49,13,10,0,1,68,69,67 + DB 32,66,89,84,69,32,91,69,66,88 + DB 93,13,10,0,1,68,69,67,32,87 + DB 79,82,68,32,91,69,66,88,93,13 + DB 10,0,9,67,68,81,13,10,73,68 + DB 73,86,32,69,66,88,13,10,0,9 + DB 88,79,82,32,69,68,88,44,69,68 + DB 88,13,10,68,73,86,32,69,66,88 + DB 13,10,0,0,32,68,68,32,0,0 + DB 32,68,68,32,60,110,62,13,10,0 + DB 0,32,84,73,77,69,83,32,60,110 + DB 62,32,68,68,32,48,13,10,0,64 + DB 80,85,83,72,32,69,66,80,13,10 + DB 77,79,86,32,69,66,80,44,69,83 + DB 80,13,10,0,8,60,103,62,79,82 + DB 32,69,65,88,44,69,65,88,13,10 + DB 74,69,32,95,60,100,62,13,10,74 + DB 77,80,32,95,60,110,62,13,10,95 + DB 60,100,62,58,13,10,0,-119,67,65 + DB 76,76,32,95,95,101,113,13,10,0 + DB 8,60,103,62,79,82,32,69,65,88 + DB 44,69,65,88,13,10,74,71,69,32 + DB 95,60,100,62,13,10,74,77,80,32 + DB 95,60,110,62,13,10,95,60,100,62 + DB 58,13,10,0,9,67,65,76,76,32 + DB 95,95,103,101,13,10,0,9,67,65 + DB 76,76,32,95,95,117,103,101,13,10 + DB 0,16,77,79,86,83,88,32,69,65 + DB 88,44,66,89,84,69,32,91,60,109 + DB 62,93,13,10,0,16,77,79,86,90 + DB 88,32,69,65,88,44,66,89,84,69 + DB 32,91,60,109,62,93,13,10,0,17 + DB 77,79,86,83,88,32,69,65,88,44 + DB 66,89,84,69,32,91,69,66,88,63 + DB 60,111,62,63,63,93,13,10,0,17 + DB 77,79,86,90,88,32,69,65,88,44 + DB 66,89,84,69,32,91,69,66,88,63 + DB 60,111,62,63,63,93,13,10,0,16 + DB 77,79,86,83,88,32,69,65,88,44 + DB 66,89,84,69,32,91,69,66,80,60 + DB 111,62,93,13,10,0,16,77,79,86 + DB 90,88,32,69,65,88,44,66,89,84 + DB 69,32,91,69,66,80,60,111,62,93 + DB 13,10,0,16,77,79,86,32,69,65 + DB 88,44,91,60,109,62,93,13,10,0 + DB 16,63,77,79,86,32,69,65,88,44 + DB 60,110,62,63,88,79,82,32,69,65 + DB 88,44,69,65,88,63,13,10,0,17 + DB 77,79,86,32,69,65,88,44,32,91 + DB 69,66,88,63,60,111,62,63,63,93 + DB 13,10,0,2,63,77,79,86,32,69 + DB 66,88,44,60,110,62,63,88,79,82 + DB 32,69,66,88,44,69,66,88,63,13 + DB 10,0,16,77,79,86,83,88,32,69 + DB 65,88,44,87,79,82,68,32,91,60 + DB 109,62,93,13,10,0,16,77,79,86 + DB 83,88,32,69,65,88,44,87,79,82 + DB 68,32,91,60,109,62,93,0,16,63 + DB 77,79,86,32,32,69,65,88,44,60 + DB 110,62,63,88,79,82,32,69,65,88 + DB 44,69,65,88,63,13,10,0,17,77 + DB 79,86,83,88,32,69,65,88,44,32 + DB 87,79,82,68,32,91,69,66,88,63 + DB 60,111,62,63,63,93,13,10,0,16 + DB 77,79,86,83,88,32,69,65,88,44 + DB 32,87,79,82,68,32,91,69,66,80 + DB 60,111,62,93,13,10,0,2,77,79 + DB 86,83,88,32,69,66,88,44,87,79 + DB 82,68,32,60,109,62,13,10,0,2 + DB 63,77,79,86,32,69,66,88,44,60 + DB 110,62,63,88,79,82,32,69,66,88 + DB 44,69,66,88,63,13,10,0,17,77 + DB 79,86,83,88,32,69,66,88,44,87 + DB 79,82,68,32,91,69,66,88,63,60 + DB 111,62,63,63,93,13,10,0,2,77 + DB 79,86,83,88,32,69,66,88,44,87 + DB 79,82,68,32,91,69,66,80,60,111 + DB 62,93,13,10,0,8,60,103,62,79 + DB 82,32,69,65,88,44,69,65,88,13 + DB 10,74,71,32,95,60,100,62,13,10 + DB 74,77,80,32,95,60,110,62,13,10 + DB 95,60,100,62,58,13,10,0,8,67 + DB 65,76,76,32,95,95,103,116,13,10 + DB 0,9,67,65,76,76,32,95,95,117 + DB 103,116,13,10,0,1,73,78,67,32 + DB 66,89,84,69,32,91,69,66,88,93 + DB 13,10,0,1,73,78,67,32,87,79 + DB 82,68,32,91,69,66,88,93,13,10 + DB 0,0,32,68,87,32,0,0,32,82 + DB 69,83,87,32,60,110,62,13,10,0 + DB 0,32,84,73,77,69,83,32,60,110 + DB 62,32,68,87,32,48,13,10,0,0 + DB 74,77,80,32,95,60,110,62,13,10 + DB 0,0,95,60,110,62,58,13,10,0 + DB 8,60,103,62,79,82,32,69,65,88 + DB 44,69,65,88,13,10,74,76,69,32 + DB 95,60,100,62,13,10,74,77,80,32 + DB 95,60,110,62,13,10,95,60,100,62 + DB 58,13,10,0,9,67,65,76,76,32 + DB 95,95,108,101,13,10,0,9,67,65 + DB 76,76,32,95,95,117,108,101,13,10 + DB 0,8,67,65,76,76,32,95,95,108 + DB 110,101,103,13,10,0,8,60,103,62 + DB 79,82,32,69,65,88,44,69,65,88 + DB 13,10,74,76,32,95,60,100,62,13 + DB 10,74,77,80,32,95,60,110,62,13 + DB 10,95,60,100,62,58,13,10,0,9 + DB 67,65,76,76,32,95,95,108,116,13 + DB 10,0,9,67,65,76,76,32,95,95 + DB 117,108,116,13,10,0,9,67,68,81 + DB 13,10,73,68,73,86,32,69,66,88 + DB 13,10,77,79,86,32,69,65,88,44 + DB 69,68,88,13,10,0,9,88,79,82 + DB 32,69,68,88,44,69,68,88,13,10 + DB 68,73,86,32,69,66,88,13,10,77 + DB 79,86,32,69,65,88,44,69,68,88 + DB 13,10,0,10,77,79,86,32,69,66 + DB 88,44,69,65,88,13,10,0,-119,73 + DB 77,85,76,32,69,66,88,13,10,0 + DB -119,77,85,76,32,69,66,88,13,10 + DB 0,8,60,103,62,79,82,32,69,65 + DB 88,44,69,65,88,13,10,74,78,69 + DB 32,95,60,100,62,13,10,74,77,80 + DB 32,95,60,110,62,13,10,95,60,100 + DB 62,58,13,10,0,-119,67,65,76,76 + DB 32,95,95,110,101,13,10,0,0,32 + DB 68,68,32,95,60,110,62,13,10,0 + DB -119,79,82,32,69,65,88,44,69,66 + DB 88,13,10,0,0,63,43,60,110,62 + DB 63,63,13,10,0,16,77,79,86,32 + DB 69,65,88,44,95,60,108,62,43,60 + DB 110,62,13,10,0,16,77,79,86,32 + DB 69,65,88,44,60,109,62,13,10,0 + DB 16,76,69,65,32,69,65,88,44,91 + DB 69,66,80,60,111,62,93,13,10,0 + DB 2,77,79,86,32,69,66,88,44,60 + DB 109,62,13,10,0,2,77,79,86,32 + DB 69,66,88,44,60,109,62,0,2,76 + DB 69,65,32,69,66,88,44,91,69,66 + DB 80,60,111,62,93,13,10,0,2,80 + DB 79,80,32,69,66,88,13,10,0,72 + DB 80,85,83,72,32,69,65,88,13,10 + DB 0,65,80,85,83,72,32,69,66,88 + DB 13,10,0,64,80,85,83,72,32,60 + DB 109,62,13,10,0,64,80,85,83,72 + DB 32,91,69,66,88,63,60,111,62,63 + DB 63,93,13,10,0,64,80,85,83,72 + DB 32,91,69,66,80,63,60,111,62,63 + DB 63,93,13,10,0,0,77,79,86,32 + DB 60,109,62,0,8,77,79,86,32,66 + DB 89,84,69,32,91,60,109,62,93,44 + DB 65,76,13,10,0,9,77,79,86,32 + DB 91,69,66,88,93,44,65,76,13,10 + DB 0,8,77,79,86,32,68,87,79,82 + DB 68,32,91,60,109,62,93,44,69,65 + DB 88,13,10,0,9,77,79,86,32,91 + DB 69,66,88,93,44,69,65,88,13,10 + DB 0,8,77,79,86,32,87,79,82,68 + DB 32,91,60,109,62,93,44,65,88,13 + DB 10,0,9,77,79,86,32,91,69,66 + DB 88,93,44,65,88,13,10,0,8,35 + DB 68,69,67,32,69,65,88,13,10,35 + DB 0,8,35,68,69,67,32,69,66,88 + DB 13,10,35,0,0,95,60,110,62,0 + DB 0,63,77,79,86,32,69,83,80,44 + DB 69,66,80,13,10,63,63,80,79,80 + DB 32,69,66,80,13,10,82,69,84,13 + DB 10,0,8,35,73,78,67,32,69,65 + DB 88,13,10,35,0,8,35,73,78,67 + DB 32,69,66,88,13,10,35,0,0,83 + DB 85,66,32,60,109,62,0,9,83,85 + DB 66,32,69,65,88,44,69,66,88,13 + DB 10,0,8,63,83,85,66,32,69,65 + DB 88,44,60,110,62,13,10,63,63,0 + DB 1,83,85,66,32,91,69,66,88,93 + DB 44,60,110,62,13,10,0,1,83,85 + DB 66,32,91,69,66,88,93,44,60,110 + DB 62,13,10,0,9,88,67,72,71,32 + DB 69,65,88,44,69,66,88,13,10,0 + DB 10,80,79,80,32,69,66,88,13,10 + DB 88,67,72,71,32,69,65,88,44,69 + DB 66,88,13,10,80,85,83,72,32,69 + DB 66,88,13,10,0,10,67,65,76,76 + DB 32,95,95,115,119,105,116,99,104,13 + DB 10,0,-119,88,79,82,32,69,65,88 + DB 44,69,66,88,13,10,0 + +_header: +PUSH EBP +MOV EBP,ESP +MOV EAX,2 +PUSH EAX +MOV CL,1 +CALL _toseg +ADD ESP,4 +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _toseg +ADD ESP,4 +POP EBP +RET + +_trailer: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +MOV EAX,[_symtab] +MOV EBX,400 +ADD EAX,EBX +MOV DWORD [_cptr],EAX +_4_5: +MOV EAX,[_cptr] +PUSH EAX +MOV EAX,[_symtab] +MOV EBX,400 +ADD EAX,EBX +MOV EBX,3980 +ADD EAX,EBX +POP EBX +CALL __ult +OR EAX,EAX +JNE _4_7 +JMP _4_6 +_4_7: +MOV EAX,[_cptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _4_11 +JMP _4_9 +_4_11: +MOV EAX,[_cptr] +MOV EBX,2 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _4_12 +JMP _4_9 +_4_12: +MOV EAX,1 +JMP _4_10 +_4_9: +XOR EAX,EAX +_4_10: +OR EAX,EAX +JNE _4_13 +JMP _4_8 +_4_13: +MOV EAX,[_cptr] +MOV EBX,11 +ADD EAX,EBX +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,3 +CALL _external +ADD ESP,12 +_4_8: +MOV EAX,[_cptr] +MOV EBX,20 +ADD EAX,EBX +MOV DWORD [_cptr],EAX +JMP _4_5 +_4_6: +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _toseg +ADD ESP,4 +MOV ESP,EBP +POP EBP +RET + +_setstage: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_snext] +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JE _4_16 +JMP _4_15 +_4_16: +MOV EAX,[_stage] +MOV DWORD [_snext],EAX +_4_15: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_snext] +POP EBX +MOV [EBX],EAX +POP EBP +RET + +_gen: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +JMP _4_20 +_4_21: +_4_22: +_4_23: +_4_24: +MOV EAX,51 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _4_19 +_4_25: +_4_26: +_4_27: +_4_28: +_4_29: +MOV EAX,70 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _4_19 +_4_30: +MOV EAX,[_csp] +MOV EBX,EAX +MOV EAX,4 +XCHG EAX,EBX +SUB EAX,EBX +MOV DWORD [_csp],EAX +JMP _4_19 +_4_31: +MOV EAX,[_csp] +MOV EBX,4 +ADD EAX,EBX +MOV DWORD [_csp],EAX +JMP _4_19 +_4_32: +_4_33: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_csp] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_csp],EAX +JMP _4_19 +_4_20: +CALL __switch + DD _4_21 + DD 29 + DD _4_22 + DD 28 + DD _4_23 + DD 32 + DD _4_24 + DD 109 + DD _4_25 + DD 69 + DD _4_26 + DD 49 + DD _4_27 + DD 50 + DD _4_28 + DD 16 + DD _4_29 + DD 17 + DD _4_30 + DD 60 + DD _4_31 + DD 59 + DD _4_32 + DD 2 + DD _4_33 + DD 67 + DD 0 +_4_19: +MOV EAX,[_snext] +OR EAX,EAX +JE _4_35 +JMP _4_34 +_4_35: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _outcode +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET +_4_34: +MOV EAX,[_snext] +PUSH EAX +MOV EAX,[_slast] +POP EBX +CALL __uge +OR EAX,EAX +JNE _4_37 +JMP _4_36 +_4_37: +MOV EAX,_4_17+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +MOV ESP,EBP +POP EBP +RET +_4_36: +MOV EAX,[_snext] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +MOV EAX,[_snext] +MOV EBX,8 +ADD EAX,EBX +MOV DWORD [_snext],EAX +MOV ESP,EBP +POP EBP +RET +_4_17 DB 115,116,97,103,105,110,103,32,98,117 + DB 102,102,101,114,32,111,118,101,114,102 + DB 108,111,119,0 + +_clearsta: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _4_40 +JMP _4_39 +_4_40: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_snext],EAX +POP EBP +RET +_4_39: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _4_42 +JMP _4_41 +_4_42: +XOR CL,CL +CALL _dumpstag +_4_41: +XOR EAX,EAX +MOV DWORD [_snext],EAX +POP EBP +RET + +_dumpstag: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +MOV EAX,[_snext] +MOV DWORD [_stail],EAX +MOV EAX,[_stage] +MOV DWORD [_snext],EAX +_4_44: +MOV EAX,[_snext] +PUSH EAX +MOV EAX,[_stail] +POP EBX +CALL __ult +OR EAX,EAX +JNE _4_46 +JMP _4_45 +_4_46: +MOVSX EAX,BYTE [_optimize] +OR EAX,EAX +JNE _4_48 +JMP _4_47 +_4_48: +_4_49: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,-1 +MOV [EBX],EAX +_4_50: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +MOV EBX,EAX +MOV EAX,47 +CALL __le +OR EAX,EAX +JNE _4_52 +JMP _4_51 +_4_52: +MOV EAX,_seq +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _peep +ADD ESP,4 +OR EAX,EAX +JNE _4_54 +JMP _4_53 +_4_54: +JMP _4_49 +_4_53: +JMP _4_50 +_4_51: +_4_47: +MOV EAX,[_snext] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _outcode +ADD ESP,8 +MOV EAX,[_snext] +MOV EBX,8 +ADD EAX,EBX +MOV DWORD [_snext],EAX +JMP _4_44 +_4_45: +MOV ESP,EBP +POP EBP +RET + +_toseg: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_oldseg] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __eq +OR EAX,EAX +JNE _4_57 +JMP _4_56 +_4_57: +POP EBP +RET +_4_56: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_oldseg],EAX +POP EBP +RET + +_public: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _4_60 +JMP _4_59 +_4_60: +MOV EAX,2 +PUSH EAX +MOV CL,1 +CALL _toseg +ADD ESP,4 +JMP _4_61 +_4_59: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _toseg +ADD ESP,4 +_4_61: +XOR CL,CL +CALL _newline +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _outname +ADD ESP,4 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _4_63 +JMP _4_62 +_4_63: +XOR CL,CL +CALL _colon +XOR CL,CL +CALL _newline +_4_62: +POP EBP +RET + +_external: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _4_66 +JMP _4_65 +_4_66: +MOV EAX,2 +PUSH EAX +MOV CL,1 +CALL _toseg +ADD ESP,4 +JMP _4_67 +_4_65: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _toseg +ADD ESP,4 +_4_67: +POP EBP +RET + +_outsize: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _4_70 +JMP _4_69 +_4_70: +MOV EAX,_4_68+0 +PUSH EAX +MOV CL,1 +CALL _outstr +ADD ESP,4 +JMP _4_71 +_4_69: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _4_73 +JMP _4_72 +_4_73: +MOV EAX,_4_68+5 +PUSH EAX +MOV CL,1 +CALL _outstr +ADD ESP,4 +JMP _4_74 +_4_72: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JNE _4_76 +JMP _4_75 +_4_76: +MOV EAX,_4_68+11 +PUSH EAX +MOV CL,1 +CALL _outstr +ADD ESP,4 +JMP _4_77 +_4_75: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _4_79 +JMP _4_78 +_4_79: +MOV EAX,_4_68+16 +PUSH EAX +MOV CL,1 +CALL _outstr +ADD ESP,4 +JMP _4_80 +_4_78: +MOV EAX,_4_68+21 +PUSH EAX +MOV CL,1 +CALL _outstr +ADD ESP,4 +_4_80: +_4_77: +_4_74: +_4_71: +POP EBP +RET +_4_68 DB 78,69,65,82,0,68,87,79,82,68 + DB 0,66,89,84,69,0,87,79,82,68 + DB 0,68,87,79,82,68,0 + +_point: +PUSH EBP +MOV EBP,ESP +MOV EAX,_4_81+0 +PUSH EAX +MOV CL,1 +CALL _outline +ADD ESP,4 +POP EBP +RET +_4_81 DB 32,68,87,32,36,43,50,0 + +_dumplits: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_4_83: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_litptr] +POP EBX +CALL __lt +OR EAX,EAX +JNE _4_85 +JMP _4_84 +_4_85: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JNE _4_87 +JMP _4_86 +_4_87: +MOV EAX,10 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _4_88 +_4_86: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _4_90 +JMP _4_89 +_4_90: +MOV EAX,37 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _4_91 +_4_89: +MOV EAX,111 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_4_91: +_4_88: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,10 +MOV [EBX],EAX +_4_92: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +DEC EAX +MOV [EBX],EAX +INC EAX +OR EAX,EAX +JNE _4_94 +JMP _4_93 +_4_94: +MOV EAX,[_litq] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _getint +ADD ESP,8 +PUSH EAX +MOV CL,1 +CALL _outdec +ADD ESP,4 +LEA EAX,[EBP-8] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JE _4_98 +JMP _4_96 +_4_98: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_litptr] +POP EBX +CALL __ge +OR EAX,EAX +JE _4_99 +JMP _4_96 +_4_99: +XOR EAX,EAX +JMP _4_97 +_4_96: +MOV EAX,1 +_4_97: +OR EAX,EAX +JNE _4_100 +JMP _4_95 +_4_100: +XOR CL,CL +CALL _newline +JMP _4_93 +_4_95: +MOV EAX,44 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +JMP _4_92 +_4_93: +JMP _4_83 +_4_84: +MOV ESP,EBP +POP EBP +RET + +_dumpzero: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JG _4_103 +JMP _4_102 +_4_103: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JNE _4_105 +JMP _4_104 +_4_105: +MOV EAX,12 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _4_106 +_4_104: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _4_108 +JMP _4_107 +_4_108: +MOV EAX,39 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _4_109 +_4_107: +MOV EAX,113 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_4_109: +_4_106: +_4_102: +POP EBP +RET + +_peep: +PUSH EBP +MOV EBP,ESP +ADD ESP,-32 +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_snext] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +INC EAX +INC EAX +INC EAX +MOV [EBX],EAX +DEC EAX +DEC EAX +DEC EAX +DEC EAX +POP EBX +MOV [EBX],EAX +_4_111: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _4_113 +JMP _4_112 +_4_113: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +JMP _4_116 +_4_117: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_stail] +POP EBX +CALL __ult +OR EAX,EAX +JNE _4_119 +JMP _4_118 +_4_119: +JMP _4_115 +_4_118: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_120: +MOV EAX,24 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _isfree +ADD ESP,8 +OR EAX,EAX +JNE _4_122 +JMP _4_121 +_4_122: +JMP _4_115 +_4_121: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_123: +MOV EAX,3 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _isfree +ADD ESP,8 +OR EAX,EAX +JNE _4_125 +JMP _4_124 +_4_125: +JMP _4_115 +_4_124: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_126: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,128 +AND EAX,EBX +OR EAX,EAX +JNE _4_128 +JMP _4_127 +_4_128: +JMP _4_115 +_4_127: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_129: +LEA EAX,[EBP-12] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _getpop +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _4_131 +JMP _4_130 +_4_131: +JMP _4_115 +_4_130: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_132: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_stail] +POP EBX +CALL __uge +OR EAX,EAX +JE _4_136 +JMP _4_134 +_4_136: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ne +OR EAX,EAX +JE _4_137 +JMP _4_134 +_4_137: +XOR EAX,EAX +JMP _4_135 +_4_134: +MOV EAX,1 +_4_135: +OR EAX,EAX +JNE _4_138 +JMP _4_133 +_4_138: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_133: +JMP _4_115 +_4_116: +CALL __switch + DD _4_117 + DD 255 + DD _4_120 + DD 253 + DD _4_123 + DD 252 + DD _4_126 + DD 251 + DD _4_129 + DD 254 + DD 0 +JMP _4_132 +_4_115: +LEA EAX,[EBP-4] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +INC EAX +INC EAX +INC EAX +MOV [EBX],EAX +JMP _4_111 +_4_112: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-28] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +_4_139: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +INC EAX +INC EAX +INC EAX +MOV [EBX],EAX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_143 +JMP _4_141 +_4_143: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_144 +JMP _4_141 +_4_144: +XOR EAX,EAX +JMP _4_142 +_4_141: +MOV EAX,1 +_4_142: +OR EAX,EAX +JNE _4_145 +JMP _4_140 +_4_145: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _4_147 +JMP _4_146 +_4_147: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_149 +JMP _4_148 +_4_149: +LEA EAX,[EBP-20] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_4_148: +JMP _4_139 +_4_146: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,116 +CALL __ge +OR EAX,EAX +JNE _4_151 +JMP _4_150 +_4_151: +LEA EAX,[EBP-32] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,255 +AND EAX,EBX +POP EBX +MOV [EBX],AL +LEA EAX,[EBP-16] +PUSH EAX +LEA EAX,[EBP-32] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,65280 +AND EAX,EBX +JMP _4_154 +_4_155: +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ne +OR EAX,EAX +JNE _4_157 +JMP _4_156 +_4_157: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +_4_156: +JMP _4_153 +_4_158: +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ge +OR EAX,EAX +JNE _4_160 +JMP _4_159 +_4_160: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +_4_159: +JMP _4_153 +_4_161: +MOV EAX,[_snext] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV DWORD [_snext],EAX +JMP _4_153 +_4_162: +MOV EAX,[_snext] +PUSH EAX +MOV EAX,[_snext] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +JMP _4_163 +_4_164: +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +MOV EAX,[_snext] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +MOV EBX,1 +ADD EAX,EBX +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +JMP _4_163 +_4_165: +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_snext] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +MOV EBX,1 +ADD EAX,EBX +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _4_163 +_4_166: +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +NEG EAX +POP EBX +MOV [EBX],EAX +JMP _4_163 +_4_167: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +JMP _4_163 +_4_168: +LEA EAX,[EBP-24] +PUSH EAX +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +MOV EAX,[_snext] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +MOV EAX,[_snext] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +MOV EBX,1 +ADD EAX,EBX +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +MOV EAX,[_snext] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +MOV EBX,1 +ADD EAX,EBX +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_4_163: +LEA EAX,[EBP-28] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +JMP _4_153 +JMP _4_153 +_4_154: +CALL __switch + DD _4_155 + DD 1536 + DD _4_158 + DD 1792 + DD _4_161 + DD 256 + DD _4_162 + DD 512 + DD _4_164 + DD 768 + DD _4_165 + DD 1024 + DD _4_166 + DD 1280 + DD _4_167 + DD 2304 + DD _4_168 + DD 2048 + DD 0 +_4_153: +JMP _4_169 +_4_150: +MOV EAX,[_snext] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_4_169: +JMP _4_139 +_4_140: +LEA EAX,[EBP-28] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET + +_isfree: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +_4_171: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_stail] +POP EBX +CALL __ult +OR EAX,EAX +JNE _4_173 +JMP _4_172 +_4_173: +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,_code +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,9 +AND EAX,EBX +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +AND EAX,EBX +OR EAX,EAX +JNE _4_175 +JMP _4_174 +_4_175: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_174: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,18 +AND EAX,EBX +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +AND EAX,EBX +OR EAX,EAX +JNE _4_177 +JMP _4_176 +_4_177: +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_4_176: +LEA EAX,[EBP+8] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _4_171 +_4_172: +MOV EAX,[_usexpr] +OR EAX,EAX +JNE _4_179 +JMP _4_178 +_4_179: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +AND EAX,EBX +MOV ESP,EBP +POP EBP +RET +_4_178: +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_4_180: +MOV ESP,EBP +POP EBP +RET + +_getpop: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_4_182: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_stail] +POP EBX +CALL __uge +OR EAX,EAX +JNE _4_185 +JMP _4_184 +_4_185: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_184: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,59 +CALL __eq +OR EAX,EAX +JNE _4_187 +JMP _4_186 +_4_187: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _4_189 +JMP _4_188 +_4_189: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +DEC EAX +MOV [EBX],EAX +JMP _4_190 +_4_188: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_4_190: +JMP _4_191 +_4_186: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _4_193 +JMP _4_192 +_4_193: +LEA EAX,[EBP-8] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JL _4_195 +JMP _4_194 +_4_195: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_4_194: +JMP _4_196 +_4_192: +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,_code +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,64 +AND EAX,EBX +OR EAX,EAX +JNE _4_198 +JMP _4_197 +_4_198: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +_4_197: +_4_196: +_4_191: +LEA EAX,[EBP+8] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _4_182 +_4_183: +MOV ESP,EBP +POP EBP +RET + +_colon: +PUSH EBP +MOV EBP,ESP +MOV EAX,58 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +POP EBP +RET + +_newline: +PUSH EBP +MOV EBP,ESP +MOV EAX,13 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +MOV EAX,10 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +POP EBP +RET + +_outcode: +PUSH EBP +MOV EBP,ESP +ADD ESP,-28 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-20] +PUSH EAX +MOV EAX,_code +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,74 +CALL __eq +OR EAX,EAX +JNE _4_203 +JMP _4_202 +_4_203: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JL _4_205 +JMP _4_204 +_4_205: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX,104 +MOV [EBX],EAX +LEA EAX,[EBP+8] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +NEG EAX +POP EBX +MOV [EBX],EAX +_4_204: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,128 +CALL __lt +OR EAX,EAX +JNE _4_207 +JMP _4_206 +_4_207: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +_4_206: +_4_202: +_4_208: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _4_210 +JMP _4_209 +_4_210: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,60 +CALL __eq +OR EAX,EAX +JNE _4_212 +JMP _4_211 +_4_212: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_214 +JMP _4_213 +_4_214: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +JMP _4_217 +_4_218: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,11 +ADD EAX,EBX +PUSH EAX +MOV CL,1 +CALL _outname +ADD ESP,4 +JMP _4_216 +_4_219: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _4_221 +JMP _4_220 +_4_221: +MOV EAX,_4_201+0 +PUSH EAX +MOV CL,1 +CALL _outstr +ADD ESP,4 +_4_220: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _outdec +ADD ESP,4 +JMP _4_216 +_4_222: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _offset +ADD ESP,4 +JMP _4_216 +_4_223: +MOV EAX,[_litlab] +PUSH EAX +MOV CL,1 +CALL _outdec +ADD ESP,4 +JMP _4_216 +_4_224: +LEA EAX,[EBP-28] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +JMP _4_216 +_4_225: +LEA EAX,[EBP-28] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _outdec +ADD ESP,4 +JMP _4_216 +JMP _4_216 +_4_217: +CALL __switch + DD _4_218 + DD 109 + DD _4_219 + DD 110 + DD _4_222 + DD 111 + DD _4_223 + DD 108 + DD _4_224 + DD 103 + DD _4_225 + DD 100 + DD 0 +_4_216: +_4_213: +LEA EAX,[EBP-20] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,2 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _4_226 +_4_211: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,63 +CALL __eq +OR EAX,EAX +JNE _4_228 +JMP _4_227 +_4_228: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +JMP _4_231 +_4_232: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_234 +JMP _4_233 +_4_234: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +_4_233: +JMP _4_230 +_4_235: +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +CALL __lneg +POP EBX +MOV [EBX],EAX +JMP _4_230 +_4_236: +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +JMP _4_230 +JMP _4_230 +_4_231: +CALL __switch + DD _4_232 + DD 1 + DD _4_235 + DD 2 + DD _4_236 + DD 3 + DD 0 +_4_230: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +JMP _4_237 +_4_227: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,35 +CALL __eq +OR EAX,EAX +JNE _4_239 +JMP _4_238 +_4_239: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_241 +JMP _4_240 +_4_241: +LEA EAX,[EBP-12] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +MOV EBX,EAX +MOV EAX,1 +CALL __lt +OR EAX,EAX +JNE _4_243 +JMP _4_242 +_4_243: +_4_244: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _4_248 +JMP _4_246 +_4_248: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,35 +CALL __ne +OR EAX,EAX +JNE _4_249 +JMP _4_246 +_4_249: +MOV EAX,1 +JMP _4_247 +_4_246: +XOR EAX,EAX +_4_247: +OR EAX,EAX +JNE _4_250 +JMP _4_245 +_4_250: +JMP _4_244 +_4_245: +JMP _4_208 +_4_242: +LEA EAX,[EBP-24] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +JMP _4_208 +_4_240: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +DEC EAX +MOV [EBX],EAX +OR EAX,EAX +JG _4_252 +JMP _4_251 +_4_252: +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +JMP _4_253 +_4_251: +LEA EAX,[EBP-24] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_4_253: +JMP _4_254 +_4_238: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_256 +JMP _4_255 +_4_256: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +JMP _4_257 +_4_255: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +_4_257: +_4_254: +_4_237: +_4_226: +JMP _4_208 +_4_209: +MOV ESP,EBP +POP EBP +RET +_4_201 DB 66,89,84,69,32,0 + +_outdec: +PUSH EBP +MOV EBP,ESP +ADD ESP,-20 +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,1000000000 +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JL _4_260 +JMP _4_259 +_4_260: +LEA EAX,[EBP+8] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +NEG EAX +POP EBX +MOV [EBX],EAX +MOV EAX,45 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +_4_259: +_4_261: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __ge +OR EAX,EAX +JNE _4_263 +JMP _4_262 +_4_263: +LEA EAX,[EBP-16] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_4_264: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __uge +OR EAX,EAX +JNE _4_266 +JMP _4_265 +_4_266: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _4_264 +_4_265: +LEA EAX,[EBP-12] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,48 +ADD EAX,EBX +POP EBX +MOV [EBX],AL +LEA EAX,[EBP-12] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,48 +CALL __ne +OR EAX,EAX +JE _4_270 +JMP _4_268 +_4_270: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JE _4_271 +JMP _4_268 +_4_271: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_272 +JMP _4_268 +_4_272: +XOR EAX,EAX +JMP _4_269 +_4_268: +MOV EAX,1 +_4_269: +OR EAX,EAX +JNE _4_273 +JMP _4_267 +_4_273: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +LEA EAX,[EBP-12] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +_4_267: +LEA EAX,[EBP+8] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,10 +XCHG EAX,EBX +CDQ +IDIV EBX +POP EBX +MOV [EBX],EAX +JMP _4_261 +_4_262: +MOV ESP,EBP +POP EBP +RET + +_offset: +PUSH EBP +MOV EBP,ESP +ADD ESP,-20 +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,1000000000 +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JL _4_276 +JMP _4_275 +_4_276: +LEA EAX,[EBP+8] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +NEG EAX +POP EBX +MOV [EBX],EAX +MOV EAX,45 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +JMP _4_277 +_4_275: +MOV EAX,43 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +_4_277: +_4_278: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __ge +OR EAX,EAX +JNE _4_280 +JMP _4_279 +_4_280: +LEA EAX,[EBP-16] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_4_281: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __uge +OR EAX,EAX +JNE _4_283 +JMP _4_282 +_4_283: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _4_281 +_4_282: +LEA EAX,[EBP-12] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,48 +ADD EAX,EBX +POP EBX +MOV [EBX],AL +LEA EAX,[EBP-12] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,48 +CALL __ne +OR EAX,EAX +JE _4_287 +JMP _4_285 +_4_287: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JE _4_288 +JMP _4_285 +_4_288: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _4_289 +JMP _4_285 +_4_289: +XOR EAX,EAX +JMP _4_286 +_4_285: +MOV EAX,1 +_4_286: +OR EAX,EAX +JNE _4_290 +JMP _4_284 +_4_290: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +LEA EAX,[EBP-12] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +_4_284: +LEA EAX,[EBP+8] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,10 +XCHG EAX,EBX +CDQ +IDIV EBX +POP EBX +MOV [EBX],EAX +JMP _4_278 +_4_279: +MOV ESP,EBP +POP EBP +RET + +_outline: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _outstr +ADD ESP,4 +XOR CL,CL +CALL _newline +POP EBP +RET + +_outname: +PUSH EBP +MOV EBP,ESP +MOV EAX,_4_292+0 +PUSH EAX +MOV CL,1 +CALL _outstr +ADD ESP,4 +_4_293: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __ge +OR EAX,EAX +JNE _4_295 +JMP _4_294 +_4_295: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +JMP _4_293 +_4_294: +POP EBP +RET +_4_292 DB 95,0 + +_outstr: +PUSH EBP +MOV EBP,ESP +_4_297: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,9 +CALL __eq +OR EAX,EAX +JE _4_301 +JMP _4_299 +_4_301: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __ge +OR EAX,EAX +JE _4_302 +JMP _4_299 +_4_302: +XOR EAX,EAX +JMP _4_300 +_4_299: +MOV EAX,1 +_4_300: +OR EAX,EAX +JNE _4_303 +JMP _4_298 +_4_303: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +JMP _4_297 +_4_298: +POP EBP +RET + +_outtab: +PUSH EBP +MOV EBP,ESP +MOV EAX,9 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +POP EBP +RET + \ No newline at end of file diff --git a/programs/develop/scc/Cc1.asm b/programs/develop/scc/Cc1.asm new file mode 100644 index 0000000000..4e6c3df0e9 --- /dev/null +++ b/programs/develop/scc/Cc1.asm @@ -0,0 +1,5066 @@ +_nogo: TIMES 1 DD 0 +_noloc: TIMES 1 DD 0 +_opindex: TIMES 1 DD 0 +_opsize: TIMES 1 DD 0 +_swactive: TIMES 1 DD 0 +_swdefaul: TIMES 1 DD 0 +_swnext DD 0 +_swend DD 0 +_stage DD 0 +_wq DD 0 +_argcs: TIMES 1 DD 0 +_argvs DD 0 +_wqptr DD 0 +_litptr: TIMES 1 DD 0 +_macptr: TIMES 1 DD 0 +_pptr: TIMES 1 DD 0 +_ch: TIMES 1 DD 0 +_nch: TIMES 1 DD 0 +_declared: TIMES 1 DD 0 +_iflevel: TIMES 1 DD 0 +_skipleve: TIMES 1 DD 0 +_nxtlab: TIMES 1 DD 0 +_litlab: TIMES 1 DD 0 +_csp: TIMES 1 DD 0 +_argstk: TIMES 1 DD 0 +_argtop: TIMES 1 DD 0 +_ncmp: TIMES 1 DD 0 +_errflag: TIMES 1 DD 0 +_eof: TIMES 1 DD 0 +_output: TIMES 1 DD 0 +_files: TIMES 1 DD 0 +_filearg DD 0 +_input DD -1 +_input2 DD -1 +_usexpr DD 1 +_ccode DD 1 +_snext DD 0 +_stail DD 0 +_slast DD 0 +_listfp: TIMES 1 DD 0 +_lastst: TIMES 1 DD 0 +_oldseg: TIMES 1 DD 0 +_optimize: TIMES 1 DB 0 +_alarm: TIMES 1 DB 0 +_monitor: TIMES 1 DB 0 +_pause: TIMES 1 DB 0 +_symtab DD 0 +_litq DD 0 +_macn DD 0 +_macq DD 0 +_pline DD 0 +_mline DD 0 +_line DD 0 +_lptr DD 0 +_glbptr DD 0 +_locptr DD 0 +_quote DB 34 + TIMES 1 DB 0 +_cptr DD 0 +_cptr2 DD 0 +_cptr3 DD 0 +_msname: TIMES 9 DB 0 +_ssname: TIMES 9 DB 0 +_op DD 57,73,3,20,55,43,22,47,35,7 + DD 6,1,69,52,16,49 +_op2 DD 57,73,3,20,55,44,23,48,36,7 + DD 6,1,69,53,17,50 + +_main: +PUSH EBP +MOV EBP,ESP +MOV EAX,_1_1+0 +PUSH EAX +MOV EAX,__iob +MOV EBX,32 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,_1_1+47 +PUSH EAX +MOV EAX,__iob +MOV EBX,32 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,_1_1+95 +PUSH EAX +MOV EAX,__iob +MOV EBX,32 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_argcs],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_argvs],EAX +MOV EAX,360 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_swnext],EAX +MOV EAX,[_swnext] +MOV EBX,1424 +ADD EAX,EBX +MOV DWORD [_swend],EAX +MOV EAX,200 +PUSH EAX +MOV EAX,8 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_stage],EAX +MOV EAX,30 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_wq],EAX +MOV DWORD [_wqptr],EAX +MOV EAX,3000 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_litq],EAX +MOV EAX,3300 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_macn],EAX +MOV EAX,2100 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_macq],EAX +MOV EAX,128 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_pline],EAX +MOV EAX,128 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_mline],EAX +MOV EAX,[_stage] +MOV EBX,6400 +ADD EAX,EBX +MOV DWORD [_slast],EAX +MOV EAX,4400 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _OS_callo +ADD ESP,8 +MOV DWORD [_symtab],EAX +MOV EAX,[_symtab] +MOV DWORD [_locptr],EAX +MOV EAX,[_symtab] +MOV EBX,400 +ADD EAX,EBX +MOV DWORD [_glbptr],EAX +XOR CL,CL +CALL _ask +XOR CL,CL +CALL _openfile +XOR CL,CL +CALL _preproce +XOR CL,CL +CALL _header +XOR CL,CL +CALL _setcodes +XOR CL,CL +CALL _parse +XOR CL,CL +CALL _trailer +MOV EAX,[_output] +PUSH EAX +MOV CL,1 +CALL _OS_fclos +ADD ESP,4 +POP EBP +RET +_1_1 DB 83,109,97,108,108,32,67,32,51,56 + DB 54,47,78,84,44,32,86,101,114,115 + DB 105,111,110,32,51,46,49,44,32,82 + DB 101,118,105,115,105,111,110,32,76,101 + DB 118,101,108,32,49,10,0,67,111,112 + DB 121,114,105,103,104,116,32,49,57,56 + DB 50,44,32,49,57,56,51,44,32,49 + DB 57,56,53,44,32,49,57,56,56,32 + DB 74,46,32,69,46,32,72,101,110,100 + DB 114,105,120,10,0,67,111,112,121,114 + DB 105,103,104,116,32,49,57,57,56,32 + DB 32,72,32,84,32,87,97,108,104,101 + DB 105,109,10,10,0 + +_parse: +PUSH EBP +MOV EBP,ESP +_1_3: +MOV EAX,[_eof] +OR EAX,EAX +JE _1_5 +JMP _1_4 +_1_5: +MOV EAX,_1_2+0 +PUSH EAX +MOV EAX,6 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_7 +JMP _1_6 +_1_7: +MOV EAX,3 +PUSH EAX +MOV CL,1 +CALL _dodeclar +ADD ESP,4 +JMP _1_8 +_1_6: +MOV EAX,2 +PUSH EAX +MOV CL,1 +CALL _dodeclar +ADD ESP,4 +OR EAX,EAX +JNE _1_10 +JMP _1_9 +_1_10: +JMP _1_11 +_1_9: +MOV EAX,_1_2+7 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_13 +JMP _1_12 +_1_13: +XOR CL,CL +CALL _doasm +JMP _1_14 +_1_12: +MOV EAX,_1_2+12 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_16 +JMP _1_15 +_1_16: +XOR CL,CL +CALL _doinclud +JMP _1_17 +_1_15: +MOV EAX,_1_2+21 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_19 +JMP _1_18 +_1_19: +XOR CL,CL +CALL _dodefine +JMP _1_20 +_1_18: +XOR CL,CL +CALL _dofuncti +_1_20: +_1_17: +_1_14: +_1_11: +_1_8: +XOR CL,CL +CALL _blanks +JMP _1_3 +_1_4: +POP EBP +RET +_1_2 DB 101,120,116,101,114,110,0,35,97,115 + DB 109,0,35,105,110,99,108,117,100,101 + DB 0,35,100,101,102,105,110,101,0 + +_dodeclar: +PUSH EBP +MOV EBP,ESP +MOV EAX,_1_21+0 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_23 +JMP _1_22 +_1_23: +MOV EAX,4 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _declglb +ADD ESP,8 +JMP _1_24 +_1_22: +MOV EAX,_1_21+5 +PUSH EAX +MOV EAX,8 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_26 +JMP _1_25 +_1_26: +MOV EAX,_1_21+14 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_28 +JMP _1_27 +_1_28: +MOV EAX,5 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _declglb +ADD ESP,8 +JMP _1_29 +_1_27: +MOV EAX,_1_21+19 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +MOV EAX,17 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _declglb +ADD ESP,8 +_1_29: +JMP _1_30 +_1_25: +MOV EAX,_1_21+23 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JE _1_34 +JMP _1_32 +_1_34: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JE _1_35 +JMP _1_32 +_1_35: +XOR EAX,EAX +JMP _1_33 +_1_32: +MOV EAX,1 +_1_33: +OR EAX,EAX +JNE _1_36 +JMP _1_31 +_1_36: +MOV EAX,16 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _declglb +ADD ESP,8 +JMP _1_37 +_1_31: +XOR EAX,EAX +POP EBP +RET +_1_37: +_1_30: +_1_24: +XOR CL,CL +CALL _ns +MOV EAX,1 +POP EBP +RET +_1_21 DB 99,104,97,114,0,117,110,115,105,103 + DB 110,101,100,0,99,104,97,114,0,105 + DB 110,116,0,105,110,116,0 + +_declglb: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +_1_39: +XOR CL,CL +CALL _endst +OR EAX,EAX +JNE _1_42 +JMP _1_41 +_1_42: +MOV ESP,EBP +POP EBP +RET +_1_41: +MOV EAX,_1_38+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_44 +JMP _1_43 +_1_44: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,3 +MOV [EBX],EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +JMP _1_45 +_1_43: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +_1_45: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +OR EAX,EAX +JE _1_47 +JMP _1_46 +_1_47: +XOR CL,CL +CALL _illname +_1_46: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _findglb +ADD ESP,4 +OR EAX,EAX +JNE _1_49 +JMP _1_48 +_1_49: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _multidef +ADD ESP,4 +_1_48: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JNE _1_51 +JMP _1_50 +_1_51: +MOV EAX,_1_38+2 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_53 +JMP _1_52 +_1_53: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,4 +MOV [EBX],EAX +MOV EAX,_1_38+4 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +JMP _1_54 +_1_52: +MOV EAX,_1_38+6 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_56 +JMP _1_55 +_1_56: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,2 +MOV [EBX],EAX +LEA EAX,[EBP-8] +PUSH EAX +XOR CL,CL +CALL _needsub +POP EBX +MOV [EBX],EAX +_1_55: +_1_54: +_1_50: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _1_58 +JMP _1_57 +_1_58: +MOV EAX,_ssname +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _external +ADD ESP,12 +JMP _1_59 +_1_57: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __ne +OR EAX,EAX +JNE _1_61 +JMP _1_60 +_1_61: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _initials +ADD ESP,12 +_1_60: +_1_59: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _1_63 +JMP _1_62 +_1_63: +MOV EAX,_ssname +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,4 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,_glbptr +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,7 +CALL _addsym +ADD ESP,28 +JMP _1_64 +_1_62: +MOV EAX,_ssname +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +POP EBX +IMUL EBX +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,_glbptr +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,7 +CALL _addsym +ADD ESP,28 +_1_64: +MOV EAX,_1_38+8 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_66 +JMP _1_65 +_1_66: +MOV ESP,EBP +POP EBP +RET +_1_65: +JMP _1_39 +_1_40: +MOV ESP,EBP +POP EBP +RET +_1_38 DB 42,0,40,0,41,0,91,0,44,0 + +_initials: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +XOR EAX,EAX +MOV DWORD [_litptr],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _1_69 +JMP _1_68 +_1_69: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX,-1 +MOV [EBX],EAX +_1_68: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +MOV EAX,_1_67+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_71 +JMP _1_70 +_1_71: +MOV EAX,_1_67+2 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_73 +JMP _1_72 +_1_73: +_1_74: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _1_76 +JMP _1_75 +_1_76: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +PUSH EAX +MOV CL,3 +CALL _init +ADD ESP,12 +MOV EAX,_1_67+4 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_78 +JMP _1_77 +_1_78: +JMP _1_75 +_1_77: +JMP _1_74 +_1_75: +MOV EAX,_1_67+6 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +JMP _1_79 +_1_72: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +PUSH EAX +MOV CL,3 +CALL _init +ADD ESP,12 +_1_79: +_1_70: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,-1 +CALL __eq +OR EAX,EAX +JNE _1_83 +JMP _1_81 +_1_83: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,-1 +CALL __eq +OR EAX,EAX +JNE _1_84 +JMP _1_81 +_1_84: +MOV EAX,1 +JMP _1_82 +_1_81: +XOR EAX,EAX +_1_82: +OR EAX,EAX +JNE _1_85 +JMP _1_80 +_1_85: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _1_87 +JMP _1_86 +_1_87: +MOV EAX,_1_67+8 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_86: +XOR EAX,EAX +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX,4 +MOV [EBX],EAX +PUSH EAX +MOV CL,2 +CALL _stowlit +ADD ESP,8 +_1_80: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _public +ADD ESP,4 +MOV EAX,[_litptr] +OR EAX,EAX +JG _1_89 +JMP _1_88 +_1_89: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _dumplits +ADD ESP,4 +JMP _1_90 +_1_88: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JG _1_92 +JMP _1_91 +_1_92: +MOV EAX,58 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +_1_91: +_1_90: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _dumpzero +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET +_1_67 DB 61,0,123,0,44,0,125,0,110,101 + DB 101,100,32,97,114,114,97,121,32,115 + DB 105,122,101,0 + +_init: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +MOV CL,1 +CALL _string +ADD ESP,4 +OR EAX,EAX +JNE _1_95 +JMP _1_94 +_1_95: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JE _1_99 +JMP _1_97 +_1_99: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __ne +OR EAX,EAX +JE _1_100 +JMP _1_97 +_1_100: +XOR EAX,EAX +JMP _1_98 +_1_97: +MOV EAX,1 +_1_98: +OR EAX,EAX +JNE _1_101 +JMP _1_96 +_1_101: +MOV EAX,_1_93+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_96: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_litptr] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _1_103 +JMP _1_102 +_1_103: +XOR CL,CL +CALL _point +_1_102: +JMP _1_104 +_1_94: +LEA EAX,[EBP-4] +PUSH EAX +MOV CL,1 +CALL _constexp +ADD ESP,4 +OR EAX,EAX +JNE _1_106 +JMP _1_105 +_1_106: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _1_108 +JMP _1_107 +_1_108: +MOV EAX,_1_93+42 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_107: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _stowlit +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +MOV [EBX],EAX +_1_105: +_1_104: +MOV ESP,EBP +POP EBP +RET +_1_93 DB 109,117,115,116,32,97,115,115,105,103 + DB 110,32,116,111,32,99,104,97,114,32 + DB 112,111,105,110,116,101,114,32,111,114 + DB 32,99,104,97,114,32,97,114,114,97 + DB 121,0,99,97,110,110,111,116,32,97 + DB 115,115,105,103,110,32,116,111,32,112 + DB 111,105,110,116,101,114,0 + +_needsub: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +MOV EAX,_1_109+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_111 +JMP _1_110 +_1_111: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_1_110: +LEA EAX,[EBP-4] +PUSH EAX +MOV CL,1 +CALL _constexp +ADD ESP,4 +OR EAX,EAX +JE _1_113 +JMP _1_112 +_1_113: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +_1_112: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JL _1_115 +JMP _1_114 +_1_115: +MOV EAX,_1_109+2 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +NEG EAX +POP EBX +MOV [EBX],EAX +_1_114: +MOV EAX,_1_109+24 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_1_109 DB 93,0,110,101,103,97,116,105,118,101 + DB 32,115,105,122,101,32,105,108,108,101 + DB 103,97,108,0,93,0 + +_doinclud: +PUSH EBP +MOV EBP,ESP +ADD ESP,-36 +XOR CL,CL +CALL _blanks +MOV EAX,[_lptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,34 +CALL __eq +OR EAX,EAX +JE _1_120 +JMP _1_118 +_1_120: +MOV EAX,[_lptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,60 +CALL __eq +OR EAX,EAX +JE _1_121 +JMP _1_118 +_1_121: +XOR EAX,EAX +JMP _1_119 +_1_118: +MOV EAX,1 +_1_119: +OR EAX,EAX +JNE _1_122 +JMP _1_117 +_1_122: +MOV EAX,[_lptr] +INC EAX +MOV DWORD [_lptr],EAX +_1_117: +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_1_123: +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _1_127 +JMP _1_125 +_1_127: +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,34 +CALL __ne +OR EAX,EAX +JNE _1_128 +JMP _1_125 +_1_128: +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,62 +CALL __ne +OR EAX,EAX +JNE _1_129 +JMP _1_125 +_1_129: +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,10 +CALL __ne +OR EAX,EAX +JNE _1_130 +JMP _1_125 +_1_130: +MOV EAX,1 +JMP _1_126 +_1_125: +XOR EAX,EAX +_1_126: +OR EAX,EAX +JNE _1_131 +JMP _1_124 +_1_131: +LEA EAX,[EBP-36] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +PUSH EAX +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +JMP _1_123 +_1_124: +LEA EAX,[EBP-36] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +LEA EAX,[EBP-36] +PUSH EAX +MOV EAX,_1_116+0 +PUSH EAX +MOV CL,2 +CALL _OS_fopen +ADD ESP,8 +MOV DWORD [_input2],EAX +OR EAX,EAX +JE _1_133 +JMP _1_132 +_1_133: +MOV EAX,-1 +MOV DWORD [_input2],EAX +MOV EAX,_1_116+2 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_132: +XOR CL,CL +CALL _kill +MOV ESP,EBP +POP EBP +RET +_1_116 DB 114,0,111,112,101,110,32,102,97,105 + DB 108,117,114,101,32,111,110,32,105,110 + DB 99,108,117,100,101,32,102,105,108,101 + DB 0 + +_dodefine: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +MOV EAX,_msname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +OR EAX,EAX +JE _1_136 +JMP _1_135 +_1_136: +XOR CL,CL +CALL _illname +XOR CL,CL +CALL _kill +MOV ESP,EBP +POP EBP +RET +_1_135: +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +MOV EAX,_msname +PUSH EAX +MOV EAX,[_macn] +PUSH EAX +MOV EAX,11 +PUSH EAX +MOV EAX,[_macn] +MOV EBX,3300 +ADD EAX,EBX +PUSH EAX +MOV EAX,300 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,6 +CALL _search +ADD ESP,24 +OR EAX,EAX +JE _1_138 +JMP _1_137 +_1_138: +MOV EAX,[_cptr] +MOV DWORD [_cptr2],EAX +OR EAX,EAX +JNE _1_140 +JMP _1_139 +_1_140: +_1_141: +MOV EAX,[_cptr2] +INC EAX +MOV DWORD [_cptr2],EAX +DEC EAX +PUSH EAX +MOV EAX,_msname +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +OR EAX,EAX +JNE _1_143 +JMP _1_142 +_1_143: +JMP _1_141 +_1_142: +JMP _1_144 +_1_139: +MOV EAX,_1_134+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +MOV ESP,EBP +POP EBP +RET +_1_144: +_1_137: +MOV EAX,[_macptr] +PUSH EAX +MOV EAX,[_cptr] +MOV EBX,9 +ADD EAX,EBX +PUSH EAX +MOV EAX,2 +PUSH EAX +MOV CL,3 +CALL _putint +ADD ESP,12 +_1_145: +XOR CL,CL +CALL _white +OR EAX,EAX +JNE _1_147 +JMP _1_146 +_1_147: +XOR CL,CL +CALL _gch +JMP _1_145 +_1_146: +_1_148: +XOR CL,CL +CALL _gch +PUSH EAX +MOV CL,1 +CALL _putmac +ADD ESP,4 +OR EAX,EAX +JNE _1_150 +JMP _1_149 +_1_150: +JMP _1_148 +_1_149: +MOV EAX,[_macptr] +MOV EBX,EAX +MOV EAX,2099 +CALL __ge +OR EAX,EAX +JNE _1_152 +JMP _1_151 +_1_152: +MOV EAX,_1_134+22 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +MOV EAX,7 +PUSH EAX +MOV CL,1 +CALL _OS_exit +ADD ESP,4 +_1_151: +MOV ESP,EBP +POP EBP +RET +_1_134 DB 109,97,99,114,111,32,110,97,109,101 + DB 32,116,97,98,108,101,32,102,117,108 + DB 108,0,109,97,99,114,111,32,115,116 + DB 114,105,110,103,32,113,117,101,117,101 + DB 32,102,117,108,108,0 + +_putmac: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_macq] +PUSH EAX +MOV EAX,[_macptr] +POP EBX +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +MOV EAX,[_macptr] +MOV EBX,EAX +MOV EAX,2099 +CALL __lt +OR EAX,EAX +JNE _1_155 +JMP _1_154 +_1_155: +MOV EAX,[_macptr] +INC EAX +MOV DWORD [_macptr],EAX +_1_154: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBP +RET + +_dofuncti: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +XOR EAX,EAX +MOV DWORD [_litptr],EAX +MOV DWORD [_lastst],EAX +MOV DWORD [_noloc],EAX +MOV DWORD [_nogo],EAX +XOR CL,CL +CALL _getlabel +MOV DWORD [_litlab],EAX +MOV EAX,[_symtab] +MOV DWORD [_locptr],EAX +MOV EAX,_1_156+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_158 +JMP _1_157 +_1_158: +XOR CL,CL +CALL _blanks +_1_157: +MOVSX EAX,BYTE [_monitor] +OR EAX,EAX +JNE _1_160 +JMP _1_159 +_1_160: +MOV EAX,[_line] +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _lout +ADD ESP,8 +_1_159: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +OR EAX,EAX +JE _1_162 +JMP _1_161 +_1_162: +MOV EAX,_1_156+5 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +XOR EAX,EAX +MOV DWORD [_errflag],EAX +XOR CL,CL +CALL _kill +MOV ESP,EBP +POP EBP +RET +_1_161: +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _findglb +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _1_164 +JMP _1_163 +_1_164: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,2 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _1_166 +JMP _1_165 +_1_166: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,2 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,2 +MOV [EBX],AL +JMP _1_167 +_1_165: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _multidef +ADD ESP,4 +_1_167: +JMP _1_168 +_1_163: +MOV EAX,_ssname +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV EAX,16 +PUSH EAX +XOR EAX,EAX +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,_glbptr +PUSH EAX +MOV EAX,2 +PUSH EAX +MOV CL,7 +CALL _addsym +ADD ESP,28 +_1_168: +MOV EAX,4 +PUSH EAX +MOV CL,1 +CALL _public +ADD ESP,4 +XOR EAX,EAX +MOV DWORD [_argstk],EAX +MOV EAX,_1_156+37 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_170 +JMP _1_169 +_1_170: +MOV EAX,_1_156+39 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_169: +_1_171: +MOV EAX,_1_156+53 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_173 +JMP _1_172 +_1_173: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +OR EAX,EAX +JNE _1_175 +JMP _1_174 +_1_175: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _findloc +ADD ESP,4 +OR EAX,EAX +JNE _1_177 +JMP _1_176 +_1_177: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _multidef +ADD ESP,4 +JMP _1_178 +_1_176: +MOV EAX,_ssname +PUSH EAX +XOR EAX,EAX +PUSH EAX +XOR EAX,EAX +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,[_argstk] +PUSH EAX +MOV EAX,_locptr +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,7 +CALL _addsym +ADD ESP,28 +MOV EAX,[_argstk] +MOV EBX,4 +ADD EAX,EBX +MOV DWORD [_argstk],EAX +_1_178: +JMP _1_179 +_1_174: +MOV EAX,_1_156+55 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +XOR CL,CL +CALL _skip +_1_179: +XOR CL,CL +CALL _blanks +MOV EAX,[_lptr] +PUSH EAX +MOV EAX,_1_156+77 +PUSH EAX +MOV CL,2 +CALL _streq +ADD ESP,8 +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JNE _1_183 +JMP _1_181 +_1_183: +MOV EAX,_1_156+79 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JNE _1_184 +JMP _1_181 +_1_184: +MOV EAX,1 +JMP _1_182 +_1_181: +XOR EAX,EAX +_1_182: +OR EAX,EAX +JNE _1_185 +JMP _1_180 +_1_185: +MOV EAX,_1_156+81 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_180: +XOR CL,CL +CALL _endst +OR EAX,EAX +JNE _1_187 +JMP _1_186 +_1_187: +JMP _1_172 +_1_186: +JMP _1_171 +_1_172: +XOR EAX,EAX +MOV DWORD [_csp],EAX +MOV EAX,[_argstk] +MOV EBX,4 +ADD EAX,EBX +MOV DWORD [_argtop],EAX +_1_188: +MOV EAX,[_argstk] +OR EAX,EAX +JNE _1_190 +JMP _1_189 +_1_190: +MOV EAX,_1_156+90 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_192 +JMP _1_191 +_1_192: +MOV EAX,4 +PUSH EAX +MOV CL,1 +CALL _doargs +ADD ESP,4 +XOR CL,CL +CALL _ns +JMP _1_193 +_1_191: +MOV EAX,_1_156+95 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_195 +JMP _1_194 +_1_195: +MOV EAX,16 +PUSH EAX +MOV CL,1 +CALL _doargs +ADD ESP,4 +XOR CL,CL +CALL _ns +JMP _1_196 +_1_194: +MOV EAX,_1_156+99 +PUSH EAX +MOV EAX,8 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_198 +JMP _1_197 +_1_198: +MOV EAX,_1_156+108 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_200 +JMP _1_199 +_1_200: +MOV EAX,5 +PUSH EAX +MOV CL,1 +CALL _doargs +ADD ESP,4 +XOR CL,CL +CALL _ns +JMP _1_201 +_1_199: +MOV EAX,_1_156+113 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +MOV EAX,17 +PUSH EAX +MOV CL,1 +CALL _doargs +ADD ESP,4 +XOR CL,CL +CALL _ns +_1_201: +JMP _1_202 +_1_197: +MOV EAX,_1_156+117 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +JMP _1_189 +_1_202: +_1_196: +_1_193: +JMP _1_188 +_1_189: +MOV EAX,18 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _statemen +MOV EAX,[_lastst] +MOV EBX,EAX +MOV EAX,3 +CALL __ne +OR EAX,EAX +JNE _1_206 +JMP _1_204 +_1_206: +MOV EAX,[_lastst] +MOV EBX,EAX +MOV EAX,13 +CALL __ne +OR EAX,EAX +JNE _1_207 +JMP _1_204 +_1_207: +MOV EAX,1 +JMP _1_205 +_1_204: +XOR EAX,EAX +_1_205: +OR EAX,EAX +JNE _1_208 +JMP _1_203 +_1_208: +MOV EAX,67 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_1_203: +MOV EAX,[_litptr] +OR EAX,EAX +JNE _1_210 +JMP _1_209 +_1_210: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _toseg +ADD ESP,4 +MOV EAX,66 +PUSH EAX +MOV EAX,[_litlab] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _dumplits +ADD ESP,4 +_1_209: +MOV ESP,EBP +POP EBP +RET +_1_156 DB 118,111,105,100,0,105,108,108,101,103 + DB 97,108,32,102,117,110,99,116,105,111 + DB 110,32,111,114,32,100,101,99,108,97 + DB 114,97,116,105,111,110,0,40,0,110 + DB 111,32,111,112,101,110,32,112,97,114 + DB 101,110,0,41,0,105,108,108,101,103 + DB 97,108,32,97,114,103,117,109,101,110 + DB 116,32,110,97,109,101,0,41,0,44 + DB 0,110,111,32,99,111,109,109,97,0 + DB 99,104,97,114,0,105,110,116,0,117 + DB 110,115,105,103,110,101,100,0,99,104 + DB 97,114,0,105,110,116,0,119,114,111 + DB 110,103,32,110,117,109,98,101,114,32 + DB 111,102,32,97,114,103,117,109,101,110 + DB 116,115,0 + +_doargs: +PUSH EBP +MOV EBP,ESP +ADD ESP,-16 +_1_212: +MOV EAX,[_argstk] +OR EAX,EAX +JE _1_215 +JMP _1_214 +_1_215: +MOV ESP,EBP +POP EBP +RET +_1_214: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,3 +PUSH EAX +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-8] +PUSH EAX +MOV CL,4 +CALL _decl +ADD ESP,16 +OR EAX,EAX +JNE _1_217 +JMP _1_216 +_1_217: +LEA EAX,[EBP-16] +PUSH EAX +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _findloc +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _1_219 +JMP _1_218 +_1_219: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],AL +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],AL +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,3 +ADD EAX,EBX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,3 +CALL _putint +ADD ESP,12 +MOV EAX,[_argtop] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,5 +ADD EAX,EBX +MOV EBX,2 +ADD EAX,EBX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _getint +ADD ESP,8 +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,5 +ADD EAX,EBX +MOV EBX,2 +ADD EAX,EBX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,3 +CALL _putint +ADD ESP,12 +JMP _1_220 +_1_218: +MOV EAX,_1_211+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_220: +_1_216: +MOV EAX,[_argstk] +MOV EBX,EAX +MOV EAX,4 +XCHG EAX,EBX +SUB EAX,EBX +MOV DWORD [_argstk],EAX +XOR CL,CL +CALL _endst +OR EAX,EAX +JNE _1_222 +JMP _1_221 +_1_222: +MOV ESP,EBP +POP EBP +RET +_1_221: +MOV EAX,_1_211+16 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_224 +JMP _1_223 +_1_224: +MOV EAX,_1_211+18 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_223: +JMP _1_212 +_1_213: +MOV ESP,EBP +POP EBP +RET +_1_211 DB 110,111,116,32,97,110,32,97,114,103 + DB 117,109,101,110,116,0,44,0,110,111 + DB 32,99,111,109,109,97,0 + +_decl: +PUSH EBP +MOV EBP,ESP +ADD ESP,-12 +MOV EAX,_1_225+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_227 +JMP _1_226 +_1_227: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +JMP _1_228 +_1_226: +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_1_228: +MOV EAX,_1_225+2 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_230 +JMP _1_229 +_1_230: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,4 +MOV [EBX],EAX +JMP _1_231 +_1_229: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +POP EBX +MOV [EBX],EAX +_1_231: +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JE _1_233 +JMP _1_232 +_1_233: +XOR CL,CL +CALL _illname +_1_232: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _1_237 +JMP _1_235 +_1_237: +MOV EAX,_1_225+4 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_238 +JMP _1_235 +_1_238: +MOV EAX,1 +JMP _1_236 +_1_235: +XOR EAX,EAX +_1_236: +OR EAX,EAX +JNE _1_239 +JMP _1_234 +_1_239: +_1_234: +MOV EAX,_1_225+6 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_241 +JMP _1_240 +_1_241: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +CALL __lneg +OR EAX,EAX +JE _1_245 +JMP _1_243 +_1_245: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __ne +OR EAX,EAX +JE _1_246 +JMP _1_243 +_1_246: +XOR EAX,EAX +JMP _1_244 +_1_243: +MOV EAX,1 +_1_244: +OR EAX,EAX +JNE _1_247 +JMP _1_242 +_1_247: +MOV EAX,_1_225+8 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_242: +MOV EAX,_1_225+21 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +JMP _1_248 +_1_240: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JNE _1_252 +JMP _1_250 +_1_252: +MOV EAX,_1_225+23 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_253 +JMP _1_250 +_1_253: +MOV EAX,1 +JMP _1_251 +_1_250: +XOR EAX,EAX +_1_251: +OR EAX,EAX +JNE _1_254 +JMP _1_249 +_1_254: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR CL,CL +CALL _needsub +POP EBX +IMUL EBX +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JE _1_256 +JMP _1_255 +_1_256: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _1_258 +JMP _1_257 +_1_258: +MOV EAX,_1_225+25 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_257: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,4 +MOV [EBX],EAX +_1_255: +_1_249: +_1_248: +LEA EAX,[EBP-12] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,4 +XCHG EAX,EBX +CDQ +IDIV EBX +MOV EAX,EDX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _1_260 +JMP _1_259 +_1_260: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +_1_259: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_1_225 DB 40,0,42,0,41,0,40,0,116,114 + DB 121,32,40,42,46,46,46,41,40,41 + DB 0,41,0,91,0,110,101,101,100,32 + DB 97,114,114,97,121,32,115,105,122,101 + DB 0 + +_statemen: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_ch] +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JNE _1_265 +JMP _1_263 +_1_265: +MOV EAX,[_eof] +OR EAX,EAX +JNE _1_266 +JMP _1_263 +_1_266: +MOV EAX,1 +JMP _1_264 +_1_263: +XOR EAX,EAX +_1_264: +OR EAX,EAX +JNE _1_267 +JMP _1_262 +_1_267: +POP EBP +RET +_1_262: +MOV EAX,_1_261+0 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_270 +JMP _1_269 +_1_270: +MOV EAX,4 +PUSH EAX +MOV CL,1 +CALL _declloc +ADD ESP,4 +XOR CL,CL +CALL _ns +JMP _1_271 +_1_269: +MOV EAX,_1_261+5 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_273 +JMP _1_272 +_1_273: +MOV EAX,16 +PUSH EAX +MOV CL,1 +CALL _declloc +ADD ESP,4 +XOR CL,CL +CALL _ns +JMP _1_274 +_1_272: +MOV EAX,_1_261+9 +PUSH EAX +MOV EAX,8 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_276 +JMP _1_275 +_1_276: +MOV EAX,_1_261+18 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_278 +JMP _1_277 +_1_278: +MOV EAX,5 +PUSH EAX +MOV CL,1 +CALL _declloc +ADD ESP,4 +XOR CL,CL +CALL _ns +JMP _1_279 +_1_277: +MOV EAX,_1_261+23 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +MOV EAX,17 +PUSH EAX +MOV CL,1 +CALL _declloc +ADD ESP,4 +XOR CL,CL +CALL _ns +_1_279: +JMP _1_280 +_1_275: +MOV EAX,[_declared] +OR EAX,EAX +JGE _1_282 +JMP _1_281 +_1_282: +MOV EAX,[_ncmp] +MOV EBX,EAX +MOV EAX,1 +CALL __gt +OR EAX,EAX +JNE _1_284 +JMP _1_283 +_1_284: +MOV EAX,[_declared] +MOV DWORD [_nogo],EAX +_1_283: +MOV EAX,2 +PUSH EAX +MOV EAX,[_csp] +PUSH EAX +MOV EAX,[_declared] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,-1 +MOV DWORD [_declared],EAX +_1_281: +MOV EAX,_1_261+27 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_286 +JMP _1_285 +_1_286: +XOR CL,CL +CALL _compound +JMP _1_287 +_1_285: +MOV EAX,_1_261+29 +PUSH EAX +MOV EAX,2 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_289 +JMP _1_288 +_1_289: +XOR CL,CL +CALL _doif +MOV EAX,1 +MOV DWORD [_lastst],EAX +JMP _1_290 +_1_288: +MOV EAX,_1_261+32 +PUSH EAX +MOV EAX,5 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_292 +JMP _1_291 +_1_292: +XOR CL,CL +CALL _dowhile +MOV EAX,2 +MOV DWORD [_lastst],EAX +JMP _1_293 +_1_291: +MOV EAX,_1_261+38 +PUSH EAX +MOV EAX,2 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_295 +JMP _1_294 +_1_295: +XOR CL,CL +CALL _dodo +MOV EAX,8 +MOV DWORD [_lastst],EAX +JMP _1_296 +_1_294: +MOV EAX,_1_261+41 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_298 +JMP _1_297 +_1_298: +XOR CL,CL +CALL _dofor +MOV EAX,9 +MOV DWORD [_lastst],EAX +JMP _1_299 +_1_297: +MOV EAX,_1_261+45 +PUSH EAX +MOV EAX,6 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_301 +JMP _1_300 +_1_301: +XOR CL,CL +CALL _doswitch +MOV EAX,10 +MOV DWORD [_lastst],EAX +JMP _1_302 +_1_300: +MOV EAX,_1_261+52 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_304 +JMP _1_303 +_1_304: +XOR CL,CL +CALL _docase +MOV EAX,11 +MOV DWORD [_lastst],EAX +JMP _1_305 +_1_303: +MOV EAX,_1_261+57 +PUSH EAX +MOV EAX,7 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_307 +JMP _1_306 +_1_307: +XOR CL,CL +CALL _dodefaul +MOV EAX,12 +MOV DWORD [_lastst],EAX +JMP _1_308 +_1_306: +MOV EAX,_1_261+65 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_310 +JMP _1_309 +_1_310: +XOR CL,CL +CALL _dogoto +MOV EAX,13 +MOV DWORD [_lastst],EAX +JMP _1_311 +_1_309: +XOR CL,CL +CALL _dolabel +OR EAX,EAX +JNE _1_313 +JMP _1_312 +_1_313: +MOV EAX,14 +MOV DWORD [_lastst],EAX +JMP _1_314 +_1_312: +MOV EAX,_1_261+70 +PUSH EAX +MOV EAX,6 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_316 +JMP _1_315 +_1_316: +XOR CL,CL +CALL _doreturn +XOR CL,CL +CALL _ns +MOV EAX,3 +MOV DWORD [_lastst],EAX +JMP _1_317 +_1_315: +MOV EAX,_1_261+77 +PUSH EAX +MOV EAX,5 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_319 +JMP _1_318 +_1_319: +XOR CL,CL +CALL _dobreak +XOR CL,CL +CALL _ns +MOV EAX,4 +MOV DWORD [_lastst],EAX +JMP _1_320 +_1_318: +MOV EAX,_1_261+83 +PUSH EAX +MOV EAX,8 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _1_322 +JMP _1_321 +_1_322: +XOR CL,CL +CALL _docont +XOR CL,CL +CALL _ns +MOV EAX,5 +MOV DWORD [_lastst],EAX +JMP _1_323 +_1_321: +MOV EAX,_1_261+92 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_325 +JMP _1_324 +_1_325: +XOR EAX,EAX +MOV DWORD [_errflag],EAX +JMP _1_326 +_1_324: +MOV EAX,_1_261+94 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_328 +JMP _1_327 +_1_328: +XOR CL,CL +CALL _doasm +MOV EAX,6 +MOV DWORD [_lastst],EAX +JMP _1_329 +_1_327: +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _doexpr +ADD ESP,4 +XOR CL,CL +CALL _ns +MOV EAX,7 +MOV DWORD [_lastst],EAX +_1_329: +_1_326: +_1_323: +_1_320: +_1_317: +_1_314: +_1_311: +_1_308: +_1_305: +_1_302: +_1_299: +_1_296: +_1_293: +_1_290: +_1_287: +_1_280: +_1_274: +_1_271: +_1_268: +MOV EAX,[_lastst] +POP EBP +RET +_1_261 DB 99,104,97,114,0,105,110,116,0,117 + DB 110,115,105,103,110,101,100,0,99,104 + DB 97,114,0,105,110,116,0,123,0,105 + DB 102,0,119,104,105,108,101,0,100,111 + DB 0,102,111,114,0,115,119,105,116,99 + DB 104,0,99,97,115,101,0,100,101,102 + DB 97,117,108,116,0,103,111,116,111,0 + DB 114,101,116,117,114,110,0,98,114,101 + DB 97,107,0,99,111,110,116,105,110,117 + DB 101,0,59,0,35,97,115,109,0 + +_declloc: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +MOV EAX,[_swactive] +OR EAX,EAX +JNE _1_332 +JMP _1_331 +_1_332: +MOV EAX,_1_330+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_331: +MOV EAX,[_noloc] +OR EAX,EAX +JNE _1_334 +JMP _1_333 +_1_334: +MOV EAX,_1_330+22 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_333: +MOV EAX,[_declared] +OR EAX,EAX +JL _1_336 +JMP _1_335 +_1_336: +MOV EAX,_1_330+44 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_335: +_1_337: +XOR CL,CL +CALL _endst +OR EAX,EAX +JNE _1_340 +JMP _1_339 +_1_340: +MOV ESP,EBP +POP EBP +RET +_1_339: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,2 +PUSH EAX +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-8] +PUSH EAX +MOV CL,4 +CALL _decl +ADD ESP,16 +MOV EAX,[_declared] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV DWORD [_declared],EAX +MOV EAX,_ssname +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_csp] +PUSH EAX +MOV EAX,[_declared] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +PUSH EAX +MOV EAX,_locptr +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,7 +CALL _addsym +ADD ESP,28 +MOV EAX,_1_330+72 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_342 +JMP _1_341 +_1_342: +MOV ESP,EBP +POP EBP +RET +_1_341: +JMP _1_337 +_1_338: +MOV ESP,EBP +POP EBP +RET +_1_330 DB 110,111,116,32,97,108,108,111,119,101 + DB 100,32,105,110,32,115,119,105,116,99 + DB 104,0,110,111,116,32,97,108,108,111 + DB 119,101,100,32,119,105,116,104,32,103 + DB 111,116,111,0,109,117,115,116,32,100 + DB 101,99,108,97,114,101,32,102,105,114 + DB 115,116,32,105,110,32,98,108,111,99 + DB 107,0,44,0 + +_compound: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_csp] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-8] +PUSH EAX +MOV EAX,[_locptr] +POP EBX +MOV [EBX],EAX +XOR EAX,EAX +MOV DWORD [_declared],EAX +MOV EAX,[_ncmp] +INC EAX +MOV DWORD [_ncmp],EAX +_1_344: +MOV EAX,_1_343+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_346 +JMP _1_345 +_1_346: +MOV EAX,[_eof] +OR EAX,EAX +JNE _1_348 +JMP _1_347 +_1_348: +MOV EAX,_1_343+2 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +JMP _1_345 +JMP _1_349 +_1_347: +XOR CL,CL +CALL _statemen +_1_349: +JMP _1_344 +_1_345: +MOV EAX,[_ncmp] +DEC EAX +MOV DWORD [_ncmp],EAX +OR EAX,EAX +JNE _1_353 +JMP _1_351 +_1_353: +MOV EAX,[_lastst] +MOV EBX,EAX +MOV EAX,3 +CALL __ne +OR EAX,EAX +JNE _1_354 +JMP _1_351 +_1_354: +MOV EAX,[_lastst] +MOV EBX,EAX +MOV EAX,13 +CALL __ne +OR EAX,EAX +JNE _1_355 +JMP _1_351 +_1_355: +MOV EAX,1 +JMP _1_352 +_1_351: +XOR EAX,EAX +_1_352: +OR EAX,EAX +JNE _1_356 +JMP _1_350 +_1_356: +MOV EAX,2 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_1_350: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_cptr],EAX +_1_357: +MOV EAX,[_cptr] +PUSH EAX +MOV EAX,[_locptr] +POP EBX +CALL __ult +OR EAX,EAX +JNE _1_359 +JMP _1_358 +_1_359: +MOV EAX,[_cptr] +PUSH EAX +MOV CL,1 +CALL _nextsym +ADD ESP,4 +MOV DWORD [_cptr2],EAX +MOV EAX,[_cptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JE _1_361 +JMP _1_360 +_1_361: +_1_362: +MOV EAX,[_cptr] +PUSH EAX +MOV EAX,[_cptr2] +POP EBX +CALL __ult +OR EAX,EAX +JNE _1_364 +JMP _1_363 +_1_364: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +PUSH EAX +MOV EAX,[_cptr] +INC EAX +MOV DWORD [_cptr],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +JMP _1_362 +_1_363: +JMP _1_365 +_1_360: +MOV EAX,[_cptr2] +MOV DWORD [_cptr],EAX +_1_365: +JMP _1_357 +_1_358: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_locptr],EAX +MOV EAX,-1 +MOV DWORD [_declared],EAX +MOV ESP,EBP +POP EBP +RET +_1_343 DB 125,0,110,111,32,102,105,110,97,108 + DB 32,125,0 + +_doif: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +LEA EAX,[EBP-4] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _test +ADD ESP,8 +XOR CL,CL +CALL _statemen +MOV EAX,_1_366+0 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JE _1_368 +JMP _1_367 +_1_368: +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET +_1_367: +LEA EAX,[EBP-8] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +MOV EAX,[_lastst] +MOV EBX,EAX +MOV EAX,3 +CALL __ne +OR EAX,EAX +JNE _1_372 +JMP _1_370 +_1_372: +MOV EAX,[_lastst] +MOV EBX,EAX +MOV EAX,13 +CALL __ne +OR EAX,EAX +JNE _1_373 +JMP _1_370 +_1_373: +MOV EAX,1 +JMP _1_371 +_1_370: +XOR EAX,EAX +_1_371: +OR EAX,EAX +JNE _1_374 +JMP _1_369 +_1_374: +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_1_369: +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _statemen +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET +_1_366 DB 101,108,115,101,0 + +_dowhile: +PUSH EBP +MOV EBP,ESP +ADD ESP,-16 +LEA EAX,[EBP-16] +PUSH EAX +MOV CL,1 +CALL _addwhile +ADD ESP,4 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP-16] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _test +ADD ESP,8 +XOR CL,CL +CALL _statemen +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _delwhile +MOV ESP,EBP +POP EBP +RET + +_dodo: +PUSH EBP +MOV EBP,ESP +ADD ESP,-16 +LEA EAX,[EBP-16] +PUSH EAX +MOV CL,1 +CALL _addwhile +ADD ESP,4 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _statemen +MOV EAX,_1_376+0 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +LEA EAX,[EBP-16] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _test +ADD ESP,8 +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _delwhile +XOR CL,CL +CALL _ns +MOV ESP,EBP +POP EBP +RET +_1_376 DB 119,104,105,108,101,0 + +_dofor: +PUSH EBP +MOV EBP,ESP +ADD ESP,-24 +LEA EAX,[EBP-16] +PUSH EAX +MOV CL,1 +CALL _addwhile +ADD ESP,4 +LEA EAX,[EBP-20] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-24] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +MOV EAX,_1_377+0 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +MOV EAX,_1_377+2 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_379 +JMP _1_378 +_1_379: +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _doexpr +ADD ESP,4 +XOR CL,CL +CALL _ns +_1_378: +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,_1_377+4 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_381 +JMP _1_380 +_1_381: +LEA EAX,[EBP-16] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _test +ADD ESP,8 +XOR CL,CL +CALL _ns +_1_380: +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,_1_377+6 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _1_383 +JMP _1_382 +_1_383: +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _doexpr +ADD ESP,4 +MOV EAX,_1_377+8 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +_1_382: +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _statemen +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _delwhile +MOV ESP,EBP +POP EBP +RET +_1_377 DB 40,0,59,0,59,0,41,0,41,0 + +_doswitch: +PUSH EBP +MOV EBP,ESP +ADD ESP,-36 +LEA EAX,[EBP-24] +PUSH EAX +MOV EAX,[_swactive] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV EAX,[_swdefaul] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-32] +PUSH EAX +LEA EAX,[EBP-36] +PUSH EAX +MOV EAX,[_swnext] +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-16] +PUSH EAX +MOV CL,1 +CALL _addwhile +ADD ESP,4 +MOV EAX,[_wqptr] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,12 +XCHG EAX,EBX +SUB EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +MOV EAX,_1_384+0 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _doexpr +ADD ESP,4 +MOV EAX,_1_384+2 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +XOR EAX,EAX +MOV DWORD [_swdefaul],EAX +MOV EAX,1 +MOV DWORD [_swactive],EAX +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-20] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _statemen +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,72 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_1_385: +LEA EAX,[EBP-36] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_swnext] +POP EBX +CALL __ult +OR EAX,EAX +JNE _1_387 +JMP _1_386 +_1_387: +MOV EAX,56 +PUSH EAX +LEA EAX,[EBP-36] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +INC EAX +INC EAX +INC EAX +MOV [EBX],EAX +DEC EAX +DEC EAX +DEC EAX +DEC EAX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,112 +PUSH EAX +LEA EAX,[EBP-36] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +INC EAX +INC EAX +INC EAX +MOV [EBX],EAX +DEC EAX +DEC EAX +DEC EAX +DEC EAX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _1_385 +_1_386: +MOV EAX,112 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,[_swdefaul] +OR EAX,EAX +JNE _1_389 +JMP _1_388 +_1_389: +MOV EAX,40 +PUSH EAX +MOV EAX,[_swdefaul] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_1_388: +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _delwhile +LEA EAX,[EBP-32] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_swnext],EAX +LEA EAX,[EBP-28] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_swdefaul],EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_swactive],EAX +MOV ESP,EBP +POP EBP +RET +_1_384 DB 40,0,41,0 + +_docase: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_swactive] +OR EAX,EAX +JE _1_392 +JMP _1_391 +_1_392: +MOV EAX,_1_390+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_391: +MOV EAX,[_swnext] +PUSH EAX +MOV EAX,[_swend] +POP EBX +CALL __ugt +OR EAX,EAX +JNE _1_394 +JMP _1_393 +_1_394: +MOV EAX,_1_390+14 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +POP EBP +RET +_1_393: +MOV EAX,41 +PUSH EAX +MOV EAX,[_swnext] +INC EAX +INC EAX +INC EAX +INC EAX +MOV DWORD [_swnext],EAX +DEC EAX +DEC EAX +DEC EAX +DEC EAX +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,[_swnext] +INC EAX +INC EAX +INC EAX +INC EAX +MOV DWORD [_swnext],EAX +DEC EAX +DEC EAX +DEC EAX +DEC EAX +PUSH EAX +MOV CL,1 +CALL _constexp +ADD ESP,4 +MOV EAX,_1_390+29 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +POP EBP +RET +_1_390 DB 110,111,116,32,105,110,32,115,119,105 + DB 116,99,104,0,116,111,111,32,109,97 + DB 110,121,32,99,97,115,101,115,0,58 + DB 0 + +_dodefaul: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_swactive] +OR EAX,EAX +JNE _1_397 +JMP _1_396 +_1_397: +MOV EAX,[_swdefaul] +OR EAX,EAX +JNE _1_399 +JMP _1_398 +_1_399: +MOV EAX,_1_395+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_398: +JMP _1_400 +_1_396: +MOV EAX,_1_395+18 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_400: +MOV EAX,_1_395+32 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +MOV EAX,41 +PUSH EAX +XOR CL,CL +CALL _getlabel +MOV DWORD [_swdefaul],EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +POP EBP +RET +_1_395 DB 109,117,108,116,105,112,108,101,32,100 + DB 101,102,97,117,108,116,115,0,110,111 + DB 116,32,105,110,32,115,119,105,116,99 + DB 104,0,58,0 + +_dogoto: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_nogo] +OR EAX,EAX +JG _1_403 +JMP _1_402 +_1_403: +MOV EAX,_1_401+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +JMP _1_404 +_1_402: +MOV EAX,1 +MOV DWORD [_noloc],EAX +_1_404: +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +OR EAX,EAX +JNE _1_406 +JMP _1_405 +_1_406: +MOV EAX,40 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _addlabel +ADD ESP,4 +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _1_407 +_1_405: +MOV EAX,_1_401+30 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_1_407: +XOR CL,CL +CALL _ns +POP EBP +RET +_1_401 DB 110,111,116,32,97,108,108,111,119,101 + DB 100,32,119,105,116,104,32,98,108,111 + DB 99,107,45,108,111,99,97,108,115,0 + DB 98,97,100,32,108,97,98,101,108,0 + +_dolabel: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +XOR CL,CL +CALL _blanks +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_lptr] +POP EBX +MOV [EBX],EAX +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +OR EAX,EAX +JNE _1_410 +JMP _1_409 +_1_410: +XOR CL,CL +CALL _gch +MOV EBX,EAX +MOV EAX,58 +CALL __eq +OR EAX,EAX +JNE _1_412 +JMP _1_411 +_1_412: +MOV EAX,41 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _addlabel +ADD ESP,4 +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_1_411: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_lptr] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +_1_413: +_1_409: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET + +_addlabel: +PUSH EBP +MOV EBP,ESP +MOV EAX,_ssname +PUSH EAX +MOV CL,1 +CALL _findloc +ADD ESP,4 +MOV DWORD [_cptr],EAX +OR EAX,EAX +JNE _1_416 +JMP _1_415 +_1_416: +MOV EAX,[_cptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _1_418 +JMP _1_417 +_1_418: +MOV EAX,_1_414+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +JMP _1_419 +_1_417: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _1_421 +JMP _1_420 +_1_421: +MOV EAX,[_cptr] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _1_423 +JMP _1_422 +_1_423: +MOV EAX,_1_414+12 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +JMP _1_424 +_1_422: +MOV EAX,[_cptr] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],AL +_1_424: +_1_420: +_1_419: +JMP _1_425 +_1_415: +MOV EAX,_ssname +PUSH EAX +XOR EAX,EAX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +XOR CL,CL +CALL _getlabel +PUSH EAX +MOV EAX,_locptr +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,7 +CALL _addsym +ADD ESP,28 +MOV DWORD [_cptr],EAX +_1_425: +MOV EAX,[_cptr] +MOV EBX,5 +ADD EAX,EBX +MOV EBX,2 +ADD EAX,EBX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _getint +ADD ESP,8 +POP EBP +RET +_1_414 DB 110,111,116,32,97,32,108,97,98,101 + DB 108,0,100,117,112,108,105,99,97,116 + DB 101,32,108,97,98,101,108,0 + +_doreturn: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +XOR CL,CL +CALL _endst +OR EAX,EAX +JE _1_428 +JMP _1_427 +_1_428: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _doexpr +ADD ESP,4 +_1_427: +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_csp] +POP EBX +MOV [EBX],EAX +MOV EAX,67 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_csp],EAX +MOV ESP,EBP +POP EBP +RET + +_dobreak: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_wqptr] +PUSH EAX +MOV CL,1 +CALL _readwhil +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JE _1_431 +JMP _1_430 +_1_431: +MOV ESP,EBP +POP EBP +RET +_1_430: +MOV EAX,2 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET + +_docont: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_wqptr] +POP EBX +MOV [EBX],EAX +_1_433: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _readwhil +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JE _1_436 +JMP _1_435 +_1_436: +MOV ESP,EBP +POP EBP +RET +_1_435: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _1_438 +JMP _1_437 +_1_438: +JMP _1_434 +_1_437: +JMP _1_433 +_1_434: +MOV EAX,2 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET + +_doasm: +PUSH EBP +MOV EBP,ESP +XOR EAX,EAX +MOV DWORD [_ccode],EAX +_1_440: +XOR CL,CL +CALL _inline +MOV EAX,_1_439+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _1_443 +JMP _1_442 +_1_443: +JMP _1_441 +_1_442: +MOV EAX,[_eof] +OR EAX,EAX +JNE _1_445 +JMP _1_444 +_1_445: +JMP _1_441 +_1_444: +MOV EAX,[_line] +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +JMP _1_440 +_1_441: +XOR CL,CL +CALL _kill +MOV EAX,1 +MOV DWORD [_ccode],EAX +POP EBP +RET +_1_439 DB 35,101,110,100,97,115,109,0 + +_doexpr: +PUSH EBP +MOV EBP,ESP +ADD ESP,-16 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_usexpr],EAX +_1_447: +LEA EAX,[EBP-12] +PUSH EAX +LEA EAX,[EBP-16] +PUSH EAX +MOV CL,2 +CALL _setstage +ADD ESP,8 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-8] +PUSH EAX +MOV CL,2 +CALL _expressi +ADD ESP,8 +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,44 +CALL __ne +OR EAX,EAX +JNE _1_450 +JMP _1_449 +_1_450: +JMP _1_448 +_1_449: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +JMP _1_447 +_1_448: +MOV EAX,1 +MOV DWORD [_usexpr],EAX +MOV ESP,EBP +POP EBP +RET + +_ask: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +LEA EAX,[EBP-4] +PUSH EAX +XOR EAX,EAX +MOV DWORD [_nxtlab],EAX +MOV DWORD [_listfp],EAX +POP EBX +MOV [EBX],EAX +MOV EAX,__iob +MOV EBX,32 +ADD EAX,EBX +MOV DWORD [_output],EAX +XOR EAX,EAX +MOV BYTE [_optimize],AL +XOR EAX,EAX +MOV BYTE [_pause],AL +MOV BYTE [_monitor],AL +MOV BYTE [_alarm],AL +MOV EAX,[_mline] +MOV DWORD [_line],EAX +_1_452: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +PUSH EAX +MOV EAX,[_line] +PUSH EAX +MOV EAX,128 +PUSH EAX +MOV EAX,[_argcs] +PUSH EAX +MOV EAX,[_argvs] +PUSH EAX +MOV CL,5 +CALL _getarg +ADD ESP,20 +MOV EBX,EAX +MOV EAX,-1 +CALL __ne +OR EAX,EAX +JNE _1_454 +JMP _1_453 +_1_454: +MOV EAX,[_line] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,45 +CALL __ne +OR EAX,EAX +JNE _1_458 +JMP _1_456 +_1_458: +MOV EAX,[_line] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,47 +CALL __ne +OR EAX,EAX +JNE _1_459 +JMP _1_456 +_1_459: +MOV EAX,1 +JMP _1_457 +_1_456: +XOR EAX,EAX +_1_457: +OR EAX,EAX +JNE _1_460 +JMP _1_455 +_1_460: +JMP _1_452 +_1_455: +MOV EAX,[_line] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,76 +CALL __eq +OR EAX,EAX +JNE _1_464 +JMP _1_462 +_1_464: +MOV EAX,[_line] +MOV EBX,2 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _isdigit +ADD ESP,4 +OR EAX,EAX +JNE _1_465 +JMP _1_462 +_1_465: +MOV EAX,[_line] +MOV EBX,3 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __le +OR EAX,EAX +JNE _1_466 +JMP _1_462 +_1_466: +MOV EAX,1 +JMP _1_463 +_1_462: +XOR EAX,EAX +_1_463: +OR EAX,EAX +JNE _1_467 +JMP _1_461 +_1_467: +MOV EAX,[_line] +MOV EBX,2 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,48 +XCHG EAX,EBX +SUB EAX,EBX +MOV DWORD [_listfp],EAX +JMP _1_452 +_1_461: +MOV EAX,[_line] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,78 +CALL __eq +OR EAX,EAX +JNE _1_471 +JMP _1_469 +_1_471: +MOV EAX,[_line] +MOV EBX,2 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,79 +CALL __eq +OR EAX,EAX +JNE _1_472 +JMP _1_469 +_1_472: +MOV EAX,[_line] +MOV EBX,3 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __le +OR EAX,EAX +JNE _1_473 +JMP _1_469 +_1_473: +MOV EAX,1 +JMP _1_470 +_1_469: +XOR EAX,EAX +_1_470: +OR EAX,EAX +JNE _1_474 +JMP _1_468 +_1_474: +XOR EAX,EAX +MOV BYTE [_optimize],AL +JMP _1_452 +_1_468: +MOV EAX,[_line] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,68 +CALL __eq +OR EAX,EAX +JNE _1_476 +JMP _1_475 +_1_476: +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +MOV EAX,[_line] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,2 +ADD EAX,EBX +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV DWORD [_ch],EAX +MOV EAX,[_line] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,2 +ADD EAX,EBX +MOV DWORD [_lptr],EAX +XOR CL,CL +CALL _dodefine +JMP _1_452 +_1_475: +MOV EAX,[_line] +MOV EBX,2 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __le +OR EAX,EAX +JNE _1_478 +JMP _1_477 +_1_478: +MOV EAX,[_line] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,65 +CALL __eq +OR EAX,EAX +JNE _1_480 +JMP _1_479 +_1_480: +MOV EAX,1 +MOV BYTE [_alarm],AL +JMP _1_452 +_1_479: +MOV EAX,[_line] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,77 +CALL __eq +OR EAX,EAX +JNE _1_482 +JMP _1_481 +_1_482: +MOV EAX,1 +MOV BYTE [_monitor],AL +JMP _1_452 +_1_481: +MOV EAX,[_line] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,80 +CALL __eq +OR EAX,EAX +JNE _1_484 +JMP _1_483 +_1_484: +MOV EAX,1 +MOV BYTE [_pause],AL +JMP _1_452 +_1_483: +_1_477: +MOV EAX,_1_451+0 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,_1_451+57 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,_1_451+74 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,_1_451+89 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,_1_451+104 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,_1_451+118 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,_1_451+139 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,7 +PUSH EAX +MOV CL,1 +CALL _OS_exit +ADD ESP,4 +JMP _1_452 +_1_453: +MOV ESP,EBP +POP EBP +RET +_1_451 DB 117,115,97,103,101,58,32,99,99,32 + DB 91,102,105,108,101,93,46,46,46,32 + DB 91,45,109,93,32,91,45,97,93,32 + DB 91,45,112,93,32,91,45,108,35,93 + DB 32,91,45,110,111,93,32,91,45,100 + DB 60,105,100,62,93,10,0,32,45,109 + DB 32,32,32,32,32,109,111,110,105,116 + DB 111,114,10,0,32,45,97,32,32,32 + DB 32,32,97,108,97,114,109,10,0,32 + DB 45,112,32,32,32,32,32,112,97,117 + DB 115,101,10,0,32,45,108,35,32,32 + DB 32,32,108,105,115,116,10,0,32,45 + DB 110,111,32,32,32,32,110,111,32,111 + DB 112,116,105,109,105,122,101,10,0,32 + DB 45,100,60,105,100,62,32,112,114,101 + DB 45,35,100,101,102,105,110,101,32,105 + DB 100,10,0 + +_openfile: +PUSH EBP +MOV EBP,ESP +ADD ESP,-28 +MOV EAX,-1 +MOV DWORD [_input],EAX +_1_486: +MOV EAX,[_filearg] +INC EAX +MOV DWORD [_filearg],EAX +PUSH EAX +MOV EAX,[_pline] +PUSH EAX +MOV EAX,128 +PUSH EAX +MOV EAX,[_argcs] +PUSH EAX +MOV EAX,[_argvs] +PUSH EAX +MOV CL,5 +CALL _getarg +ADD ESP,20 +MOV EBX,EAX +MOV EAX,-1 +CALL __ne +OR EAX,EAX +JNE _1_488 +JMP _1_487 +_1_488: +MOV EAX,[_pline] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,45 +CALL __eq +OR EAX,EAX +JE _1_492 +JMP _1_490 +_1_492: +MOV EAX,[_pline] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,47 +CALL __eq +OR EAX,EAX +JE _1_493 +JMP _1_490 +_1_493: +XOR EAX,EAX +JMP _1_491 +_1_490: +MOV EAX,1 +_1_491: +OR EAX,EAX +JNE _1_494 +JMP _1_489 +_1_494: +JMP _1_486 +_1_489: +LEA EAX,[EBP-28] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX,-1 +MOV [EBX],EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_1_495: +MOV EAX,[_pline] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _1_497 +JMP _1_496 +_1_497: +MOV EAX,[_pline] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,46 +CALL __eq +OR EAX,EAX +JNE _1_499 +JMP _1_498 +_1_499: +LEA EAX,[EBP-28] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +JMP _1_496 +_1_498: +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,10 +CALL __lt +OR EAX,EAX +JNE _1_501 +JMP _1_500 +_1_501: +LEA EAX,[EBP-16] +PUSH EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +POP EBX +ADD EAX,EBX +PUSH EAX +MOV EAX,[_pline] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +_1_500: +JMP _1_495 +_1_496: +LEA EAX,[EBP-28] +MOV EBX,EAX +MOV EAX, [EBX] +CALL __lneg +OR EAX,EAX +JNE _1_503 +JMP _1_502 +_1_503: +MOV EAX,[_pline] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +PUSH EAX +MOV EAX,_1_485+0 +PUSH EAX +MOV CL,2 +CALL _strcpy +ADD ESP,8 +_1_502: +MOV EAX,[_pline] +PUSH EAX +MOV EAX,_1_485+3 +PUSH EAX +MOV CL,2 +CALL _mustopen +ADD ESP,8 +MOV DWORD [_input],EAX +MOV EAX,[_files] +CALL __lneg +OR EAX,EAX +JNE _1_505 +JMP _1_504 +_1_505: +LEA EAX,[EBP-16] +PUSH EAX +LEA EAX,[EBP-24] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +PUSH EAX +MOV EAX,_1_485+5 +PUSH EAX +MOV CL,2 +CALL _strcpy +ADD ESP,8 +LEA EAX,[EBP-16] +PUSH EAX +MOV EAX,_1_485+10 +PUSH EAX +MOV CL,2 +CALL _mustopen +ADD ESP,8 +MOV DWORD [_output],EAX +_1_504: +MOV EAX,1 +MOV DWORD [_files],EAX +XOR CL,CL +CALL _kill +MOV ESP,EBP +POP EBP +RET +JMP _1_486 +_1_487: +MOV EAX,[_files] +INC EAX +MOV DWORD [_files],EAX +DEC EAX +OR EAX,EAX +JNE _1_507 +JMP _1_506 +_1_507: +MOV EAX,1 +MOV DWORD [_eof],EAX +JMP _1_508 +_1_506: +MOV EAX,__iob +MOV DWORD [_input],EAX +_1_508: +XOR CL,CL +CALL _kill +MOV ESP,EBP +POP EBP +RET +_1_485 DB 46,67,0,114,0,46,65,83,77,0 + DB 119,0 + +_mustopen: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _OS_fopen +ADD ESP,8 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _1_511 +JMP _1_510 +_1_511: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_1_510: +MOV EAX,_1_509+0 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _lout +ADD ESP,8 +MOV EAX,7 +PUSH EAX +MOV CL,1 +CALL _OS_exit +ADD ESP,4 +MOV ESP,EBP +POP EBP +RET +_1_509 DB 111,112,101,110,32,101,114,114,111,114 + DB 32,111,110,32,0 diff --git a/programs/develop/scc/Cc2.asm b/programs/develop/scc/Cc2.asm new file mode 100644 index 0000000000..35e0f9cef9 --- /dev/null +++ b/programs/develop/scc/Cc2.asm @@ -0,0 +1,3034 @@ +_preproce: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +MOV EAX,[_ccode] +OR EAX,EAX +JNE _2_3 +JMP _2_2 +_2_3: +MOV EAX,[_mline] +MOV DWORD [_line],EAX +XOR CL,CL +CALL _ifline +MOV EAX,[_eof] +OR EAX,EAX +JNE _2_5 +JMP _2_4 +_2_5: +MOV ESP,EBP +POP EBP +RET +_2_4: +JMP _2_6 +_2_2: +XOR CL,CL +CALL _inline +MOV ESP,EBP +POP EBP +RET +_2_6: +MOV EAX,-1 +MOV DWORD [_pptr],EAX +_2_7: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,10 +CALL __ne +OR EAX,EAX +JNE _2_11 +JMP _2_9 +_2_11: +MOV EAX,[_ch] +OR EAX,EAX +JNE _2_12 +JMP _2_9 +_2_12: +MOV EAX,1 +JMP _2_10 +_2_9: +XOR EAX,EAX +_2_10: +OR EAX,EAX +JNE _2_13 +JMP _2_8 +_2_13: +XOR CL,CL +CALL _white +OR EAX,EAX +JNE _2_15 +JMP _2_14 +_2_15: +MOV EAX,32 +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +_2_16: +XOR CL,CL +CALL _white +OR EAX,EAX +JNE _2_18 +JMP _2_17 +_2_18: +XOR CL,CL +CALL _gch +JMP _2_16 +_2_17: +JMP _2_19 +_2_14: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,34 +CALL __eq +OR EAX,EAX +JNE _2_21 +JMP _2_20 +_2_21: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +XOR CL,CL +CALL _gch +_2_22: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,34 +CALL __ne +OR EAX,EAX +JE _2_28 +JMP _2_24 +_2_28: +MOV EAX,[_lptr] +MOV EBX,EAX +MOV EAX,1 +XCHG EAX,EBX +SUB EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,92 +CALL __eq +OR EAX,EAX +JNE _2_29 +JMP _2_25 +_2_29: +MOV EAX,[_lptr] +MOV EBX,EAX +MOV EAX,2 +XCHG EAX,EBX +SUB EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,92 +CALL __ne +OR EAX,EAX +JNE _2_30 +JMP _2_25 +_2_30: +MOV EAX,1 +JMP _2_26 +_2_25: +XOR EAX,EAX +_2_26: +OR EAX,EAX +JE _2_31 +JMP _2_24 +_2_31: +XOR EAX,EAX +JMP _2_27 +_2_24: +MOV EAX,1 +_2_27: +OR EAX,EAX +JNE _2_32 +JMP _2_23 +_2_32: +MOV EAX,[_ch] +OR EAX,EAX +JE _2_34 +JMP _2_33 +_2_34: +MOV EAX,_2_1+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +JMP _2_23 +_2_33: +XOR CL,CL +CALL _gch +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +JMP _2_22 +_2_23: +XOR CL,CL +CALL _gch +MOV EAX,34 +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +JMP _2_35 +_2_20: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,39 +CALL __eq +OR EAX,EAX +JNE _2_37 +JMP _2_36 +_2_37: +MOV EAX,39 +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +XOR CL,CL +CALL _gch +_2_38: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,39 +CALL __ne +OR EAX,EAX +JE _2_44 +JMP _2_40 +_2_44: +MOV EAX,[_lptr] +MOV EBX,EAX +MOV EAX,1 +XCHG EAX,EBX +SUB EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,92 +CALL __eq +OR EAX,EAX +JNE _2_45 +JMP _2_41 +_2_45: +MOV EAX,[_lptr] +MOV EBX,EAX +MOV EAX,2 +XCHG EAX,EBX +SUB EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,92 +CALL __ne +OR EAX,EAX +JNE _2_46 +JMP _2_41 +_2_46: +MOV EAX,1 +JMP _2_42 +_2_41: +XOR EAX,EAX +_2_42: +OR EAX,EAX +JE _2_47 +JMP _2_40 +_2_47: +XOR EAX,EAX +JMP _2_43 +_2_40: +MOV EAX,1 +_2_43: +OR EAX,EAX +JNE _2_48 +JMP _2_39 +_2_48: +MOV EAX,[_ch] +OR EAX,EAX +JE _2_50 +JMP _2_49 +_2_50: +MOV EAX,_2_1+9 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +JMP _2_39 +_2_49: +XOR CL,CL +CALL _gch +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +JMP _2_38 +_2_39: +XOR CL,CL +CALL _gch +MOV EAX,39 +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +JMP _2_51 +_2_36: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,47 +CALL __eq +OR EAX,EAX +JNE _2_55 +JMP _2_53 +_2_55: +MOV EAX,[_nch] +MOV EBX,EAX +MOV EAX,42 +CALL __eq +OR EAX,EAX +JNE _2_56 +JMP _2_53 +_2_56: +MOV EAX,1 +JMP _2_54 +_2_53: +XOR EAX,EAX +_2_54: +OR EAX,EAX +JNE _2_57 +JMP _2_52 +_2_57: +MOV EAX,2 +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +_2_58: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,42 +CALL __eq +OR EAX,EAX +JNE _2_62 +JMP _2_60 +_2_62: +MOV EAX,[_nch] +MOV EBX,EAX +MOV EAX,47 +CALL __eq +OR EAX,EAX +JNE _2_63 +JMP _2_60 +_2_63: +MOV EAX,1 +JMP _2_61 +_2_60: +XOR EAX,EAX +_2_61: +OR EAX,EAX +JE _2_64 +JMP _2_59 +_2_64: +MOV EAX,[_ch] +OR EAX,EAX +JNE _2_66 +JMP _2_65 +_2_66: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +JMP _2_67 +_2_65: +XOR CL,CL +CALL _ifline +MOV EAX,[_eof] +OR EAX,EAX +JNE _2_69 +JMP _2_68 +_2_69: +JMP _2_59 +_2_68: +_2_67: +JMP _2_58 +_2_59: +MOV EAX,2 +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +JMP _2_70 +_2_52: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,47 +CALL __eq +OR EAX,EAX +JNE _2_74 +JMP _2_72 +_2_74: +MOV EAX,[_nch] +MOV EBX,EAX +MOV EAX,47 +CALL __eq +OR EAX,EAX +JNE _2_75 +JMP _2_72 +_2_75: +MOV EAX,1 +JMP _2_73 +_2_72: +XOR EAX,EAX +_2_73: +OR EAX,EAX +JNE _2_76 +JMP _2_71 +_2_76: +MOV EAX,2 +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +_2_77: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,10 +CALL __ne +OR EAX,EAX +JNE _2_79 +JMP _2_78 +_2_79: +MOV EAX,[_ch] +OR EAX,EAX +JNE _2_81 +JMP _2_80 +_2_81: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +JMP _2_82 +_2_80: +MOV EAX,[_eof] +OR EAX,EAX +JNE _2_84 +JMP _2_83 +_2_84: +JMP _2_78 +_2_83: +_2_82: +JMP _2_77 +_2_78: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +JMP _2_85 +_2_71: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JNE _2_87 +JMP _2_86 +_2_87: +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_2_88: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JNE _2_92 +JMP _2_90 +_2_92: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,8 +CALL __lt +OR EAX,EAX +JNE _2_93 +JMP _2_90 +_2_93: +MOV EAX,1 +JMP _2_91 +_2_90: +XOR EAX,EAX +_2_91: +OR EAX,EAX +JNE _2_94 +JMP _2_89 +_2_94: +MOV EAX,_msname +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +POP EBX +ADD EAX,EBX +PUSH EAX +MOV EAX,[_ch] +POP EBX +MOV [EBX],AL +XOR CL,CL +CALL _gch +JMP _2_88 +_2_89: +MOV EAX,_msname +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +MOV EAX,_msname +PUSH EAX +MOV EAX,[_macn] +PUSH EAX +MOV EAX,11 +PUSH EAX +MOV EAX,[_macn] +MOV EBX,3300 +ADD EAX,EBX +PUSH EAX +MOV EAX,300 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,6 +CALL _search +ADD ESP,24 +OR EAX,EAX +JNE _2_96 +JMP _2_95 +_2_96: +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_cptr] +MOV EBX,9 +ADD EAX,EBX +PUSH EAX +MOV EAX,2 +PUSH EAX +MOV CL,2 +CALL _getint +ADD ESP,8 +POP EBX +MOV [EBX],EAX +_2_97: +LEA EAX,[EBP-8] +PUSH EAX +MOV EAX,[_macq] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +OR EAX,EAX +JNE _2_99 +JMP _2_98 +_2_99: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +JMP _2_97 +_2_98: +_2_100: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JNE _2_102 +JMP _2_101 +_2_102: +XOR CL,CL +CALL _gch +JMP _2_100 +_2_101: +JMP _2_103 +_2_95: +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_2_104: +LEA EAX,[EBP-8] +PUSH EAX +MOV EAX,_msname +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +OR EAX,EAX +JNE _2_106 +JMP _2_105 +_2_106: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +JMP _2_104 +_2_105: +_2_103: +JMP _2_107 +_2_86: +XOR CL,CL +CALL _gch +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +_2_107: +_2_85: +_2_70: +_2_51: +_2_35: +_2_19: +JMP _2_7 +_2_8: +MOV EAX,[_pptr] +MOV EBX,EAX +MOV EAX,127 +CALL __ge +OR EAX,EAX +JNE _2_109 +JMP _2_108 +_2_109: +MOV EAX,_2_1+23 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_2_108: +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _keepch +ADD ESP,4 +MOV EAX,[_pline] +MOV DWORD [_line],EAX +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +MOV ESP,EBP +POP EBP +RET +_2_1 DB 110,111,32,113,117,111,116,101,0,110 + DB 111,32,97,112,111,115,116,114,111,112 + DB 104,101,0,108,105,110,101,32,116,111 + DB 111,32,108,111,110,103,0 + +_keepch: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_pptr] +MOV EBX,EAX +MOV EAX,127 +CALL __lt +OR EAX,EAX +JNE _2_112 +JMP _2_111 +_2_112: +MOV EAX,[_pline] +PUSH EAX +MOV EAX,[_pptr] +INC EAX +MOV DWORD [_pptr],EAX +POP EBX +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +_2_111: +POP EBP +RET + +_ifline: +PUSH EBP +MOV EBP,ESP +_2_114: +XOR CL,CL +CALL _inline +MOV EAX,[_eof] +OR EAX,EAX +JNE _2_117 +JMP _2_116 +_2_117: +POP EBP +RET +_2_116: +MOV EAX,_2_113+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _2_119 +JMP _2_118 +_2_119: +MOV EAX,[_iflevel] +INC EAX +MOV DWORD [_iflevel],EAX +MOV EAX,[_skipleve] +OR EAX,EAX +JNE _2_121 +JMP _2_120 +_2_121: +JMP _2_114 +_2_120: +MOV EAX,_msname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +MOV EAX,_msname +PUSH EAX +MOV EAX,[_macn] +PUSH EAX +MOV EAX,11 +PUSH EAX +MOV EAX,[_macn] +MOV EBX,3300 +ADD EAX,EBX +PUSH EAX +MOV EAX,300 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,6 +CALL _search +ADD ESP,24 +OR EAX,EAX +JE _2_123 +JMP _2_122 +_2_123: +MOV EAX,[_iflevel] +MOV DWORD [_skipleve],EAX +_2_122: +JMP _2_114 +_2_118: +MOV EAX,_2_113+7 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _2_125 +JMP _2_124 +_2_125: +MOV EAX,[_iflevel] +INC EAX +MOV DWORD [_iflevel],EAX +MOV EAX,[_skipleve] +OR EAX,EAX +JNE _2_127 +JMP _2_126 +_2_127: +JMP _2_114 +_2_126: +MOV EAX,_msname +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +MOV EAX,_msname +PUSH EAX +MOV EAX,[_macn] +PUSH EAX +MOV EAX,11 +PUSH EAX +MOV EAX,[_macn] +MOV EBX,3300 +ADD EAX,EBX +PUSH EAX +MOV EAX,300 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,6 +CALL _search +ADD ESP,24 +OR EAX,EAX +JNE _2_129 +JMP _2_128 +_2_129: +MOV EAX,[_iflevel] +MOV DWORD [_skipleve],EAX +_2_128: +JMP _2_114 +_2_124: +MOV EAX,_2_113+15 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _2_131 +JMP _2_130 +_2_131: +MOV EAX,[_iflevel] +OR EAX,EAX +JNE _2_133 +JMP _2_132 +_2_133: +MOV EAX,[_skipleve] +PUSH EAX +MOV EAX,[_iflevel] +POP EBX +CALL __eq +OR EAX,EAX +JNE _2_135 +JMP _2_134 +_2_135: +XOR EAX,EAX +MOV DWORD [_skipleve],EAX +JMP _2_136 +_2_134: +MOV EAX,[_skipleve] +OR EAX,EAX +JE _2_138 +JMP _2_137 +_2_138: +MOV EAX,[_iflevel] +MOV DWORD [_skipleve],EAX +_2_137: +_2_136: +JMP _2_139 +_2_132: +XOR CL,CL +CALL _noiferr +_2_139: +JMP _2_114 +_2_130: +MOV EAX,_2_113+21 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _2_141 +JMP _2_140 +_2_141: +MOV EAX,[_iflevel] +OR EAX,EAX +JNE _2_143 +JMP _2_142 +_2_143: +MOV EAX,[_skipleve] +PUSH EAX +MOV EAX,[_iflevel] +POP EBX +CALL __eq +OR EAX,EAX +JNE _2_145 +JMP _2_144 +_2_145: +XOR EAX,EAX +MOV DWORD [_skipleve],EAX +_2_144: +MOV EAX,[_iflevel] +DEC EAX +MOV DWORD [_iflevel],EAX +JMP _2_146 +_2_142: +XOR CL,CL +CALL _noiferr +_2_146: +JMP _2_114 +_2_140: +MOV EAX,[_skipleve] +OR EAX,EAX +JNE _2_148 +JMP _2_147 +_2_148: +JMP _2_114 +_2_147: +MOV EAX,[_ch] +OR EAX,EAX +JE _2_150 +JMP _2_149 +_2_150: +JMP _2_114 +_2_149: +JMP _2_115 +JMP _2_114 +_2_115: +POP EBP +RET +_2_113 DB 35,105,102,100,101,102,0,35,105,102 + DB 110,100,101,102,0,35,101,108,115,101 + DB 0,35,101,110,100,105,102,0 + +_inline: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +MOV EAX,[_input] +MOV EBX,EAX +MOV EAX,-1 +CALL __eq +OR EAX,EAX +JNE _2_153 +JMP _2_152 +_2_153: +XOR CL,CL +CALL _openfile +_2_152: +MOV EAX,[_eof] +OR EAX,EAX +JNE _2_155 +JMP _2_154 +_2_155: +MOV ESP,EBP +POP EBP +RET +_2_154: +LEA EAX,[EBP-8] +PUSH EAX +MOV EAX,[_input2] +POP EBX +MOV [EBX],EAX +MOV EBX,EAX +MOV EAX,-1 +CALL __eq +OR EAX,EAX +JNE _2_157 +JMP _2_156 +_2_157: +LEA EAX,[EBP-8] +PUSH EAX +MOV EAX,[_input] +POP EBX +MOV [EBX],EAX +_2_156: +MOV EAX,[_line] +PUSH EAX +MOV EAX,127 +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _fgets +ADD ESP,12 +OR EAX,EAX +JE _2_159 +JMP _2_158 +_2_159: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _OS_fclos +ADD ESP,4 +MOV EAX,[_input2] +MOV EBX,EAX +MOV EAX,-1 +CALL __ne +OR EAX,EAX +JNE _2_161 +JMP _2_160 +_2_161: +MOV EAX,-1 +MOV DWORD [_input2],EAX +JMP _2_162 +_2_160: +MOV EAX,-1 +MOV DWORD [_input],EAX +_2_162: +MOV EAX,[_line] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +JMP _2_163 +_2_158: +MOV EAX,[_listfp] +OR EAX,EAX +JNE _2_165 +JMP _2_164 +_2_165: +MOV EAX,[_listfp] +PUSH EAX +MOV EAX,[_output] +POP EBX +CALL __eq +OR EAX,EAX +JNE _2_167 +JMP _2_166 +_2_167: +MOV EAX,59 +PUSH EAX +MOV EAX,[_output] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +_2_166: +MOV EAX,[_line] +PUSH EAX +MOV EAX,[_listfp] +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +_2_164: +_2_163: +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +MOV ESP,EBP +POP EBP +RET + +_inbyte: +PUSH EBP +MOV EBP,ESP +_2_169: +MOV EAX,[_ch] +OR EAX,EAX +JE _2_171 +JMP _2_170 +_2_171: +MOV EAX,[_eof] +OR EAX,EAX +JNE _2_173 +JMP _2_172 +_2_173: +XOR EAX,EAX +POP EBP +RET +_2_172: +XOR CL,CL +CALL _preproce +JMP _2_169 +_2_170: +XOR CL,CL +CALL _gch +POP EBP +RET + +_symname: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +XOR CL,CL +CALL _blanks +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _alpha +ADD ESP,4 +OR EAX,EAX +JE _2_176 +JMP _2_175 +_2_176: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +MOV ESP,EBP +POP EBP +RET +_2_175: +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_2_177: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JNE _2_179 +JMP _2_178 +_2_179: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +PUSH EAX +XOR CL,CL +CALL _gch +POP EBX +MOV [EBX],AL +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,8 +CALL __lt +OR EAX,EAX +JNE _2_181 +JMP _2_180 +_2_181: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +_2_180: +JMP _2_177 +_2_178: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET + +_need: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _2_184 +JMP _2_183 +_2_184: +MOV EAX,_2_182+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_2_183: +POP EBP +RET +_2_182 DB 109,105,115,115,105,110,103,32,116,111 + DB 107,101,110,0 + +_ns: +PUSH EBP +MOV EBP,ESP +MOV EAX,_2_185+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _2_187 +JMP _2_186 +_2_187: +MOV EAX,_2_185+2 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +JMP _2_188 +_2_186: +XOR EAX,EAX +MOV DWORD [_errflag],EAX +_2_188: +POP EBP +RET +_2_185 DB 59,0,110,111,32,115,101,109,105,99 + DB 111,108,111,110,0 + +_match: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +XOR CL,CL +CALL _blanks +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _streq +ADD ESP,8 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _2_191 +JMP _2_190 +_2_191: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_2_190: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET + +_streq: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_2_193: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _2_195 +JMP _2_194 +_2_195: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +CALL __ne +OR EAX,EAX +JNE _2_197 +JMP _2_196 +_2_197: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_2_196: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +JMP _2_193 +_2_194: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET + +_amatch: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +XOR CL,CL +CALL _blanks +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _astreq +ADD ESP,12 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _2_200 +JMP _2_199 +_2_200: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_2_199: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET + +_astreq: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_2_202: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __lt +OR EAX,EAX +JNE _2_204 +JMP _2_203 +_2_204: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +CALL __ne +OR EAX,EAX +JNE _2_206 +JMP _2_205 +_2_206: +JMP _2_203 +_2_205: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __lt +OR EAX,EAX +JNE _2_208 +JMP _2_207 +_2_208: +JMP _2_203 +_2_207: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __lt +OR EAX,EAX +JNE _2_210 +JMP _2_209 +_2_210: +JMP _2_203 +_2_209: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +JMP _2_202 +_2_203: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JE _2_214 +JMP _2_212 +_2_214: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JE _2_215 +JMP _2_212 +_2_215: +XOR EAX,EAX +JMP _2_213 +_2_212: +MOV EAX,1 +_2_213: +OR EAX,EAX +JNE _2_216 +JMP _2_211 +_2_216: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_2_211: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET + +_nextop: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +XOR EAX,EAX +MOV DWORD [_opindex],EAX +XOR CL,CL +CALL _blanks +_2_218: +XOR EAX,EAX +MOV DWORD [_opsize],EAX +_2_220: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __gt +OR EAX,EAX +JNE _2_222 +JMP _2_221 +_2_222: +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_opsize] +INC EAX +MOV DWORD [_opsize],EAX +DEC EAX +POP EBX +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +JMP _2_220 +_2_221: +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_opsize] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP-4] +PUSH EAX +MOV CL,2 +CALL _streq +ADD ESP,8 +MOV DWORD [_opsize],EAX +OR EAX,EAX +JNE _2_224 +JMP _2_223 +_2_224: +MOV EAX,[_lptr] +PUSH EAX +MOV EAX,[_opsize] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,61 +CALL __ne +OR EAX,EAX +JNE _2_228 +JMP _2_226 +_2_228: +MOV EAX,[_lptr] +PUSH EAX +MOV EAX,[_opsize] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV EAX,[_lptr] +PUSH EAX +MOV EAX,[_opsize] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,1 +XCHG EAX,EBX +SUB EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +CALL __ne +OR EAX,EAX +JNE _2_229 +JMP _2_226 +_2_229: +MOV EAX,1 +JMP _2_227 +_2_226: +XOR EAX,EAX +_2_227: +OR EAX,EAX +JNE _2_230 +JMP _2_225 +_2_230: +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_2_225: +_2_223: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _2_232 +JMP _2_231 +_2_232: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +MOV EAX,[_opindex] +INC EAX +MOV DWORD [_opindex],EAX +JMP _2_233 +_2_231: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_2_233: +JMP _2_218 +_2_219: +MOV ESP,EBP +POP EBP +RET + +_blanks: +PUSH EBP +MOV EBP,ESP +_2_235: +_2_237: +MOV EAX,[_ch] +OR EAX,EAX +JNE _2_239 +JMP _2_238 +_2_239: +XOR CL,CL +CALL _white +OR EAX,EAX +JNE _2_241 +JMP _2_240 +_2_241: +XOR CL,CL +CALL _gch +JMP _2_242 +_2_240: +POP EBP +RET +_2_242: +JMP _2_237 +_2_238: +MOV EAX,[_line] +PUSH EAX +MOV EAX,[_mline] +POP EBX +CALL __eq +OR EAX,EAX +JNE _2_244 +JMP _2_243 +_2_244: +POP EBP +RET +_2_243: +XOR CL,CL +CALL _preproce +MOV EAX,[_eof] +OR EAX,EAX +JNE _2_246 +JMP _2_245 +_2_246: +JMP _2_236 +_2_245: +JMP _2_235 +_2_236: +POP EBP +RET + +_white: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_lptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __le +OR EAX,EAX +JNE _2_250 +JMP _2_248 +_2_250: +MOV EAX,[_lptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _2_251 +JMP _2_248 +_2_251: +MOV EAX,1 +JMP _2_249 +_2_248: +XOR EAX,EAX +_2_249: +POP EBP +RET + +_gch: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_ch] +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _2_254 +JMP _2_253 +_2_254: +MOV EAX,1 +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +_2_253: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET + +_bump: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _2_257 +JMP _2_256 +_2_257: +MOV EAX,[_lptr] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV DWORD [_lptr],EAX +JMP _2_258 +_2_256: +MOV EAX,[_line] +MOV DWORD [_lptr],EAX +_2_258: +MOV EAX,[_lptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV DWORD [_nch],EAX +MOV DWORD [_ch],EAX +OR EAX,EAX +JNE _2_260 +JMP _2_259 +_2_260: +MOV EAX,[_lptr] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV DWORD [_nch],EAX +_2_259: +POP EBP +RET + +_kill: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_line] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +POP EBP +RET + +_skip: +PUSH EBP +MOV EBP,ESP +XOR CL,CL +CALL _inbyte +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JNE _2_264 +JMP _2_263 +_2_264: +_2_265: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JNE _2_267 +JMP _2_266 +_2_267: +XOR CL,CL +CALL _gch +JMP _2_265 +_2_266: +JMP _2_268 +_2_263: +_2_269: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JE _2_271 +JMP _2_270 +_2_271: +MOV EAX,[_ch] +OR EAX,EAX +JE _2_273 +JMP _2_272 +_2_273: +JMP _2_270 +_2_272: +XOR CL,CL +CALL _gch +JMP _2_269 +_2_270: +_2_268: +XOR CL,CL +CALL _blanks +POP EBP +RET + +_endst: +PUSH EBP +MOV EBP,ESP +XOR CL,CL +CALL _blanks +MOV EAX,[_lptr] +PUSH EAX +MOV EAX,_2_274+0 +PUSH EAX +MOV CL,2 +CALL _streq +ADD ESP,8 +OR EAX,EAX +JE _2_277 +JMP _2_275 +_2_277: +MOV EAX,[_ch] +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JE _2_278 +JMP _2_275 +_2_278: +XOR EAX,EAX +JMP _2_276 +_2_275: +MOV EAX,1 +_2_276: +POP EBP +RET +_2_274 DB 59,0 + +_addsym: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,_glbptr +POP EBX +CALL __eq +OR EAX,EAX +JNE _2_281 +JMP _2_280 +_2_281: +LEA EAX,[EBP+32] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _findglb +ADD ESP,4 +MOV DWORD [_cptr2],EAX +OR EAX,EAX +JNE _2_283 +JMP _2_282 +_2_283: +MOV EAX,[_cptr2] +POP EBP +RET +_2_282: +MOV EAX,[_cptr] +OR EAX,EAX +JE _2_285 +JMP _2_284 +_2_285: +MOV EAX,_2_279+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +XOR EAX,EAX +POP EBP +RET +_2_284: +JMP _2_286 +_2_280: +MOV EAX,[_locptr] +PUSH EAX +MOV EAX,[_symtab] +MOV EBX,400 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,20 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +CALL __ugt +OR EAX,EAX +JNE _2_288 +JMP _2_287 +_2_288: +MOV EAX,_2_279+29 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +MOV EAX,7 +PUSH EAX +MOV CL,1 +CALL _OS_exit +ADD ESP,4 +_2_287: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_cptr],EAX +_2_286: +MOV EAX,[_cptr] +PUSH EAX +LEA EAX,[EBP+28] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +MOV EAX,[_cptr] +MOV EBX,1 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +MOV EAX,[_cptr] +MOV EBX,2 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],AL +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_cptr] +MOV EBX,3 +ADD EAX,EBX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,3 +CALL _putint +ADD ESP,12 +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_cptr] +MOV EBX,5 +ADD EAX,EBX +MOV EBX,2 +ADD EAX,EBX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,3 +CALL _putint +ADD ESP,12 +MOV EAX,[_cptr] +MOV EBX,11 +ADD EAX,EBX +MOV DWORD [_cptr2],EAX +MOV DWORD [_cptr3],EAX +_2_289: +LEA EAX,[EBP+32] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _an +ADD ESP,4 +OR EAX,EAX +JNE _2_291 +JMP _2_290 +_2_291: +MOV EAX,[_cptr2] +INC EAX +MOV DWORD [_cptr2],EAX +DEC EAX +PUSH EAX +LEA EAX,[EBP+32] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +JMP _2_289 +_2_290: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,_locptr +POP EBX +CALL __eq +OR EAX,EAX +JNE _2_293 +JMP _2_292 +_2_293: +MOV EAX,[_cptr2] +PUSH EAX +MOV EAX,[_cptr2] +PUSH EAX +MOV EAX,[_cptr3] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +MOV [EBX],AL +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_cptr2] +INC EAX +MOV DWORD [_cptr2],EAX +POP EBX +MOV [EBX],EAX +_2_292: +MOV EAX,[_cptr] +POP EBP +RET +_2_279 DB 103,108,111,98,97,108,32,115,121,109 + DB 98,111,108,32,116,97,98,108,101,32 + DB 111,118,101,114,102,108,111,119,0,108 + DB 111,99,97,108,32,115,121,109,98,111 + DB 108,32,116,97,98,108,101,32,111,118 + DB 101,114,102,108,111,119,0 + +_search: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+28] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _hash +ADD ESP,4 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +XCHG EAX,EBX +CDQ +IDIV EBX +MOV EAX,EDX +PUSH EAX +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +IMUL EBX +POP EBX +ADD EAX,EBX +MOV DWORD [_cptr2],EAX +MOV DWORD [_cptr],EAX +_2_295: +MOV EAX,[_cptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JNE _2_297 +JMP _2_296 +_2_297: +LEA EAX,[EBP+28] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_cptr] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +PUSH EAX +MOV EAX,8 +PUSH EAX +MOV CL,3 +CALL _astreq +ADD ESP,12 +OR EAX,EAX +JNE _2_299 +JMP _2_298 +_2_299: +MOV EAX,1 +POP EBP +RET +_2_298: +MOV EAX,[_cptr] +PUSH EAX +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV DWORD [_cptr],EAX +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __uge +OR EAX,EAX +JNE _2_301 +JMP _2_300 +_2_301: +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +MOV DWORD [_cptr],EAX +_2_300: +MOV EAX,[_cptr] +PUSH EAX +MOV EAX,[_cptr2] +POP EBX +CALL __eq +OR EAX,EAX +JNE _2_303 +JMP _2_302 +_2_303: +XOR EAX,EAX +MOV DWORD [_cptr],EAX +POP EBP +RET +_2_302: +JMP _2_295 +_2_296: +XOR EAX,EAX +POP EBP +RET + +_hash: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_2_305: +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _2_307 +JMP _2_306 +_2_307: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _2_305 +_2_306: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET + +_findglb: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_symtab] +MOV EBX,400 +ADD EAX,EBX +PUSH EAX +MOV EAX,20 +PUSH EAX +MOV EAX,[_symtab] +MOV EBX,400 +ADD EAX,EBX +MOV EBX,3980 +ADD EAX,EBX +PUSH EAX +MOV EAX,200 +PUSH EAX +MOV EAX,11 +PUSH EAX +MOV CL,6 +CALL _search +ADD ESP,24 +OR EAX,EAX +JNE _2_310 +JMP _2_309 +_2_310: +MOV EAX,[_cptr] +POP EBP +RET +_2_309: +XOR EAX,EAX +POP EBP +RET + +_findloc: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_locptr] +MOV EBX,EAX +MOV EAX,1 +XCHG EAX,EBX +SUB EAX,EBX +MOV DWORD [_cptr],EAX +_2_312: +MOV EAX,[_cptr] +PUSH EAX +MOV EAX,[_symtab] +POP EBX +CALL __ugt +OR EAX,EAX +JNE _2_314 +JMP _2_313 +_2_314: +MOV EAX,[_cptr] +PUSH EAX +MOV EAX,[_cptr] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +MOV DWORD [_cptr],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_cptr] +PUSH EAX +MOV EAX,8 +PUSH EAX +MOV CL,3 +CALL _astreq +ADD ESP,12 +OR EAX,EAX +JNE _2_316 +JMP _2_315 +_2_316: +MOV EAX,[_cptr] +MOV EBX,EAX +MOV EAX,11 +XCHG EAX,EBX +SUB EAX,EBX +POP EBP +RET +_2_315: +MOV EAX,[_cptr] +MOV EBX,EAX +MOV EAX,11 +XCHG EAX,EBX +SUB EAX,EBX +MOV EBX,EAX +MOV EAX,1 +XCHG EAX,EBX +SUB EAX,EBX +MOV DWORD [_cptr],EAX +JMP _2_312 +_2_313: +XOR EAX,EAX +POP EBP +RET + +_nextsym: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,11 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +_2_318: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,32 +CALL __ge +OR EAX,EAX +JNE _2_320 +JMP _2_319 +_2_320: +JMP _2_318 +_2_319: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBP +RET + +_addwhile: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_csp] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +MOV EAX,[_wqptr] +PUSH EAX +MOV EAX,[_wq] +MOV EBX,120 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,12 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +CALL __eq +OR EAX,EAX +JNE _2_323 +JMP _2_322 +_2_323: +MOV EAX,_2_321+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +MOV EAX,7 +PUSH EAX +MOV CL,1 +CALL _OS_exit +ADD ESP,4 +_2_322: +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_2_324: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __lt +OR EAX,EAX +JNE _2_326 +JMP _2_325 +_2_326: +MOV EAX,[_wqptr] +INC EAX +INC EAX +INC EAX +INC EAX +MOV DWORD [_wqptr],EAX +DEC EAX +DEC EAX +DEC EAX +DEC EAX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +JMP _2_324 +_2_325: +MOV ESP,EBP +POP EBP +RET +_2_321 DB 99,111,110,116,114,111,108,32,115,116 + DB 97,116,101,109,101,110,116,32,110,101 + DB 115,116,105,110,103,32,108,105,109,105 + DB 116,0 + +_readwhil: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_wq] +POP EBX +CALL __ule +OR EAX,EAX +JNE _2_329 +JMP _2_328 +_2_329: +MOV EAX,_2_327+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +XOR EAX,EAX +POP EBP +RET +_2_328: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,12 +XCHG EAX,EBX +SUB EAX,EBX +POP EBP +RET +_2_330: +POP EBP +RET +_2_327 DB 111,117,116,32,111,102,32,99,111,110 + DB 116,101,120,116,0 + +_delwhile: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_wqptr] +PUSH EAX +MOV EAX,[_wq] +POP EBX +CALL __ugt +OR EAX,EAX +JNE _2_333 +JMP _2_332 +_2_333: +MOV EAX,[_wqptr] +MOV EBX,EAX +MOV EAX,12 +XCHG EAX,EBX +SUB EAX,EBX +MOV DWORD [_wqptr],EAX +_2_332: +POP EBP +RET + +_alpha: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _isalpha +ADD ESP,4 +OR EAX,EAX +JE _2_337 +JMP _2_335 +_2_337: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,95 +CALL __eq +OR EAX,EAX +JE _2_338 +JMP _2_335 +_2_338: +XOR EAX,EAX +JMP _2_336 +_2_335: +MOV EAX,1 +_2_336: +POP EBP +RET + +_an: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _alpha +ADD ESP,4 +OR EAX,EAX +JE _2_342 +JMP _2_340 +_2_342: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +PUSH EAX +MOV CL,1 +CALL _isdigit +ADD ESP,4 +OR EAX,EAX +JE _2_343 +JMP _2_340 +_2_343: +XOR EAX,EAX +JMP _2_341 +_2_340: +MOV EAX,1 +_2_341: +POP EBP +RET + +_getlabel: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_nxtlab] +INC EAX +MOV DWORD [_nxtlab],EAX +POP EBP +RET + +_getint: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +DEC EAX +MOV [EBX],EAX +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +_2_346: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +DEC EAX +MOV [EBX],EAX +INC EAX +OR EAX,EAX +JNE _2_348 +JMP _2_347 +_2_348: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,8 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,255 +AND EAX,EBX +POP EBX +OR EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _2_346 +_2_347: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET + +_putint: +PUSH EBP +MOV EBP,ESP +_2_350: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +DEC EAX +MOV [EBX],EAX +INC EAX +OR EAX,EAX +JNE _2_352 +JMP _2_351 +_2_352: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],AL +LEA EAX,[EBP+16] +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,8 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +POP EBX +MOV [EBX],EAX +JMP _2_350 +_2_351: +POP EBP +RET + +_lout: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +MOV EAX,10 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +POP EBP +RET + +_illname: +PUSH EBP +MOV EBP,ESP +MOV EAX,_2_354+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +XOR CL,CL +CALL _skip +POP EBP +RET +_2_354 DB 105,108,108,101,103,97,108,32,115,121 + DB 109,98,111,108,0 + +_multidef: +PUSH EBP +MOV EBP,ESP +MOV EAX,_2_355+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +POP EBP +RET +_2_355 DB 97,108,114,101,97,100,121,32,100,101 + DB 102,105,110,101,100,0 + +_needlval: +PUSH EBP +MOV EBP,ESP +MOV EAX,_2_356+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +POP EBP +RET +_2_356 DB 109,117,115,116,32,98,101,32,108,118 + DB 97,108,117,101,0 + +_noiferr: +PUSH EBP +MOV EBP,ESP +MOV EAX,_2_357+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +XOR EAX,EAX +MOV DWORD [_errflag],EAX +POP EBP +RET +_2_357 DB 110,111,32,109,97,116,99,104,105,110 + DB 103,32,35,105,102,46,46,46,0 + +_error: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_errflag] +OR EAX,EAX +JNE _2_360 +JMP _2_359 +_2_360: +POP EBP +RET +_2_359: +MOV EAX,1 +MOV DWORD [_errflag],EAX +_2_361: +MOV EAX,[_line] +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _lout +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _errout +ADD ESP,8 +MOVSX EAX,BYTE [_alarm] +OR EAX,EAX +JNE _2_363 +JMP _2_362 +_2_363: +MOV EAX,7 +PUSH EAX +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +_2_362: +MOVSX EAX,BYTE [_pause] +OR EAX,EAX +JNE _2_365 +JMP _2_364 +_2_365: +_2_366: +MOV EAX,__iob +MOV EBX,64 +ADD EAX,EBX +PUSH EAX +MOV CL,1 +CALL _OS_fgetc +ADD ESP,4 +MOV EBX,EAX +MOV EAX,10 +CALL __ne +OR EAX,EAX +JNE _2_368 +JMP _2_367 +_2_368: +JMP _2_366 +_2_367: +_2_364: +MOV EAX,[_listfp] +OR EAX,EAX +JG _2_370 +JMP _2_369 +_2_370: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_listfp] +PUSH EAX +MOV CL,2 +CALL _errout +ADD ESP,8 +_2_369: +POP EBP +RET + +_errout: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,[_line] +MOV EBX,2 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +_2_372: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +DEC EAX +PUSH EAX +MOV EAX,[_lptr] +POP EBX +CALL __ule +OR EAX,EAX +JNE _2_374 +JMP _2_373 +_2_374: +MOV EAX,32 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _OS_fputc +ADD ESP,8 +JMP _2_372 +_2_373: +MOV EAX,_2_371+0 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _lout +ADD ESP,8 +MOV EAX,_2_371+3 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _fputs +ADD ESP,8 +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _lout +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET +_2_371 DB 47,92,0,42,42,42,42,32,0 + diff --git a/programs/develop/scc/Cc3.asm b/programs/develop/scc/Cc3.asm new file mode 100644 index 0000000000..0bd9b8d35e --- /dev/null +++ b/programs/develop/scc/Cc3.asm @@ -0,0 +1,6740 @@ + +_constexp: +PUSH EBP +MOV EBP,ESP +ADD ESP,-12 +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP-12] +PUSH EAX +MOV CL,2 +CALL _setstage +ADD ESP,8 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _expressi +ADD ESP,8 +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_3 +JMP _3_2 +_3_3: +MOV EAX,_3_1+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_3_2: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_1 DB 109,117,115,116,32,98,101,32,99,111 + DB 110,115,116,97,110,116,32,101,120,112 + DB 114,101,115,115,105,111,110,0 + +_null_is: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_3_7: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,7 +CALL __lt +OR EAX,EAX +JNE _3_9 +JMP _3_6 +_3_9: +JMP _3_8 +_3_5: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +JMP _3_7 +_3_8: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +JMP _3_5 +_3_6: +MOV ESP,EBP +POP EBP +RET + +_expressi: +PUSH EBP +MOV EBP,ESP +ADD ESP,-32 +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _null_is +ADD ESP,4 +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _level1 +ADD ESP,4 +OR EAX,EAX +JNE _3_12 +JMP _3_11 +_3_12: +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_11: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-32] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-32] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +MOV ESP,EBP +POP EBP +RET + +_test: +PUSH EBP +MOV EBP,ESP +ADD ESP,-36 +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,1 +CALL _null_is +ADD ESP,4 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_15 +JMP _3_14 +_3_15: +MOV EAX,_3_13+0 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +_3_14: +_3_16: +LEA EAX,[EBP-32] +PUSH EAX +LEA EAX,[EBP-36] +PUSH EAX +MOV CL,2 +CALL _setstage +ADD ESP,8 +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,1 +CALL _level1 +ADD ESP,4 +OR EAX,EAX +JNE _3_19 +JMP _3_18 +_3_19: +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_18: +MOV EAX,_3_13+2 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_21 +JMP _3_20 +_3_21: +LEA EAX,[EBP-32] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-36] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +JMP _3_22 +_3_20: +JMP _3_17 +_3_22: +JMP _3_16 +_3_17: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_24 +JMP _3_23 +_3_24: +MOV EAX,_3_13+4 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +_3_23: +LEA EAX,[EBP-28] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_26 +JMP _3_25 +_3_26: +LEA EAX,[EBP-32] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +LEA EAX,[EBP-28] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_28 +JMP _3_27 +_3_28: +MOV ESP,EBP +POP EBP +RET +_3_27: +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET +_3_25: +LEA EAX,[EBP-28] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_30 +JMP _3_29 +_3_30: +LEA EAX,[EBP-28] +MOV EBX,20 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +JMP _3_33 +_3_34: +_3_35: +MOV EAX,19 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,3 +CALL _zerojump +ADD ESP,12 +JMP _3_32 +_3_36: +_3_37: +MOV EAX,54 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,3 +CALL _zerojump +ADD ESP,12 +JMP _3_32 +_3_38: +MOV EAX,34 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,3 +CALL _zerojump +ADD ESP,12 +JMP _3_32 +_3_39: +MOV EAX,21 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,3 +CALL _zerojump +ADD ESP,12 +JMP _3_32 +_3_40: +LEA EAX,[EBP-28] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +JMP _3_32 +_3_41: +MOV EAX,46 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,3 +CALL _zerojump +ADD ESP,12 +JMP _3_32 +_3_42: +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,3 +CALL _zerojump +ADD ESP,12 +JMP _3_32 +_3_43: +MOV EAX,42 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,3 +CALL _zerojump +ADD ESP,12 +JMP _3_32 +_3_44: +MOV EAX,54 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_32 +JMP _3_32 +_3_33: +CALL __switch + DD _3_34 + DD 20 + DD _3_35 + DD 44 + DD _3_36 + DD 55 + DD _3_37 + DD 36 + DD _3_38 + DD 35 + DD _3_39 + DD 22 + DD _3_40 + DD 23 + DD _3_41 + DD 47 + DD _3_42 + DD 48 + DD _3_43 + DD 43 + DD 0 +JMP _3_44 +_3_32: +JMP _3_45 +_3_29: +MOV EAX,54 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_45: +LEA EAX,[EBP-32] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-36] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET +_3_13 DB 40,0,44,0,41,0 + +_zerojump: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +POP EBP +RET + +_level1: +PUSH EBP +MOV EBP,ESP +ADD ESP,-48 +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _null_is +ADD ESP,4 +LEA EAX,[EBP-40] +PUSH EAX +MOV CL,1 +CALL _null_is +ADD ESP,4 +LEA EAX,[EBP-4] +PUSH EAX +MOV EAX,_level2 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _down1 +ADD ESP,8 +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_49 +JMP _3_48 +_3_49: +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_48: +MOV EAX,_3_47+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_51 +JMP _3_50 +_3_51: +LEA EAX,[EBP-44] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,57 +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_52 +_3_50: +MOV EAX,_3_47+3 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_54 +JMP _3_53 +_3_54: +LEA EAX,[EBP-44] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,73 +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_55 +_3_53: +MOV EAX,_3_47+6 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_57 +JMP _3_56 +_3_57: +LEA EAX,[EBP-44] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,3 +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_58 +_3_56: +MOV EAX,_3_47+9 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_60 +JMP _3_59 +_3_60: +LEA EAX,[EBP-44] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_61 +_3_59: +MOV EAX,_3_47+12 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_63 +JMP _3_62 +_3_63: +LEA EAX,[EBP-44] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,69 +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_64 +_3_62: +MOV EAX,_3_47+15 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_66 +JMP _3_65 +_3_66: +LEA EAX,[EBP-44] +MOV EBX,EAX +MOV EAX,52 +MOV [EBX],EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,53 +MOV [EBX],EAX +JMP _3_67 +_3_65: +MOV EAX,_3_47+18 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_69 +JMP _3_68 +_3_69: +LEA EAX,[EBP-44] +MOV EBX,EAX +MOV EAX,16 +MOV [EBX],EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,17 +MOV [EBX],EAX +JMP _3_70 +_3_68: +MOV EAX,_3_47+21 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_72 +JMP _3_71 +_3_72: +LEA EAX,[EBP-44] +MOV EBX,EAX +MOV EAX,49 +MOV [EBX],EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,50 +MOV [EBX],EAX +JMP _3_73 +_3_71: +MOV EAX,_3_47+24 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_75 +JMP _3_74 +_3_75: +LEA EAX,[EBP-44] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,7 +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_76 +_3_74: +MOV EAX,_3_47+28 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_78 +JMP _3_77 +_3_78: +LEA EAX,[EBP-44] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX,6 +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_79 +_3_77: +MOV EAX,_3_47+32 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_81 +JMP _3_80 +_3_81: +LEA EAX,[EBP-44] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_82 +_3_80: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_82: +_3_79: +_3_76: +_3_73: +_3_70: +_3_67: +_3_64: +_3_61: +_3_58: +_3_55: +_3_52: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_84 +JMP _3_83 +_3_84: +XOR CL,CL +CALL _needlval +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_83: +LEA EAX,[EBP-40] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-40] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_86 +JMP _3_85 +_3_86: +LEA EAX,[EBP-44] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_88 +JMP _3_87 +_3_88: +MOV EAX,60 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_87: +LEA EAX,[EBP-44] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,_level1 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,5 +CALL _down2 +ADD ESP,20 +LEA EAX,[EBP-44] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_90 +JMP _3_89 +_3_90: +MOV EAX,59 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_89: +JMP _3_91 +_3_85: +LEA EAX,[EBP-44] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_93 +JMP _3_92 +_3_93: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +LEA EAX,[EBP-44] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-48] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,_level1 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,5 +CALL _down2 +ADD ESP,20 +JMP _3_94 +_3_92: +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _level1 +ADD ESP,4 +OR EAX,EAX +JNE _3_96 +JMP _3_95 +_3_96: +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_95: +_3_94: +_3_91: +LEA EAX,[EBP-40] +PUSH EAX +MOV CL,1 +CALL _store +ADD ESP,4 +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_47 DB 124,61,0,94,61,0,38,61,0,43 + DB 61,0,45,61,0,42,61,0,47,61 + DB 0,37,61,0,62,62,61,0,60,60 + DB 61,0,61,0 + +_level2: +PUSH EBP +MOV EBP,ESP +ADD ESP,-76 +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,1 +CALL _null_is +ADD ESP,4 +LEA EAX,[EBP-56] +PUSH EAX +MOV CL,1 +CALL _null_is +ADD ESP,4 +LEA EAX,[EBP-60] +PUSH EAX +MOV EAX,_level3 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _down1 +ADD ESP,8 +POP EBX +MOV [EBX],EAX +MOV EAX,_3_97+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _3_99 +JMP _3_98 +_3_99: +LEA EAX,[EBP-60] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_98: +LEA EAX,[EBP-60] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,54 +PUSH EAX +LEA EAX,[EBP-64] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _dropout +ADD ESP,16 +MOV EAX,_level2 +PUSH EAX +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,2 +CALL _down1 +ADD ESP,8 +OR EAX,EAX +JNE _3_101 +JMP _3_100 +_3_101: +LEA EAX,[EBP-28] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +JMP _3_102 +_3_100: +LEA EAX,[EBP-28] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_104 +JMP _3_103 +_3_104: +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP-28] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_103: +_3_102: +MOV EAX,_3_97+2 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-68] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-64] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,_level2 +PUSH EAX +LEA EAX,[EBP-56] +PUSH EAX +MOV CL,2 +CALL _down1 +ADD ESP,8 +OR EAX,EAX +JNE _3_106 +JMP _3_105 +_3_106: +LEA EAX,[EBP-56] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +JMP _3_107 +_3_105: +LEA EAX,[EBP-56] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_109 +JMP _3_108 +_3_109: +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP-56] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_108: +_3_107: +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-68] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-28] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_113 +JMP _3_111 +_3_113: +LEA EAX,[EBP-56] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_114 +JMP _3_111 +_3_114: +MOV EAX,1 +JMP _3_112 +_3_111: +XOR EAX,EAX +_3_112: +OR EAX,EAX +JNE _3_115 +JMP _3_110 +_3_115: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_116 +_3_110: +LEA EAX,[EBP-56] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_118 +JMP _3_117 +_3_118: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-28] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-28] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-28] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +JMP _3_119 +_3_117: +LEA EAX,[EBP-28] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_123 +JMP _3_121 +_3_123: +LEA EAX,[EBP-28] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-56] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __eq +OR EAX,EAX +JE _3_124 +JMP _3_121 +_3_124: +XOR EAX,EAX +JMP _3_122 +_3_121: +MOV EAX,1 +_3_122: +OR EAX,EAX +JNE _3_125 +JMP _3_120 +_3_125: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-56] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-56] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-56] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +JMP _3_126 +_3_120: +MOV EAX,_3_97+4 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_3_126: +_3_119: +_3_116: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_97 DB 63,0,58,0,109,105,115,109,97,116 + DB 99,104,101,100,32,101,120,112,114,101 + DB 115,115,105,111,110,115,0 + +_level3: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_127+0 +PUSH EAX +MOV EAX,19 +PUSH EAX +MOV EAX,1 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,_level4 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,6 +CALL _skim +ADD ESP,24 +POP EBP +RET +_3_127 DB 124,124,0 + +_level4: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_128+0 +PUSH EAX +MOV EAX,54 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV EAX,_level5 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,6 +CALL _skim +ADD ESP,24 +POP EBP +RET +_3_128 DB 38,38,0 + +_level5: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_129+0 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,_level6 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _down +ADD ESP,16 +POP EBP +RET +_3_129 DB 124,0 + +_level6: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_130+0 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV EAX,_level7 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _down +ADD ESP,16 +POP EBP +RET +_3_130 DB 94,0 + +_level7: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_131+0 +PUSH EAX +MOV EAX,2 +PUSH EAX +MOV EAX,_level8 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _down +ADD ESP,16 +POP EBP +RET +_3_131 DB 38,0 + +_level8: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_132+0 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV EAX,_level9 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _down +ADD ESP,16 +POP EBP +RET +_3_132 DB 61,61,32,33,61,0 + +_level9: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_133+0 +PUSH EAX +MOV EAX,5 +PUSH EAX +MOV EAX,_level10 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _down +ADD ESP,16 +POP EBP +RET +_3_133 DB 60,61,32,62,61,32,60,32,62,0 + +_level10: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_134+0 +PUSH EAX +MOV EAX,9 +PUSH EAX +MOV EAX,_level11 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _down +ADD ESP,16 +POP EBP +RET +_3_134 DB 62,62,32,60,60,0 + +_level11: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_135+0 +PUSH EAX +MOV EAX,11 +PUSH EAX +MOV EAX,_level12 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _down +ADD ESP,16 +POP EBP +RET +_3_135 DB 43,32,45,0 + +_level12: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_136+0 +PUSH EAX +MOV EAX,13 +PUSH EAX +MOV EAX,_level13 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _down +ADD ESP,16 +POP EBP +RET +_3_136 DB 42,32,47,32,37,0 + +_level13: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +MOV EAX,_3_137+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_139 +JMP _3_138 +_3_139: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level13 +ADD ESP,4 +OR EAX,EAX +JE _3_141 +JMP _3_140 +_3_141: +XOR CL,CL +CALL _needlval +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_140: +MOV EAX,68 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,3 +CALL _step +ADD ESP,12 +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_138: +MOV EAX,_3_137+3 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_144 +JMP _3_143 +_3_144: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level13 +ADD ESP,4 +OR EAX,EAX +JE _3_146 +JMP _3_145 +_3_146: +XOR CL,CL +CALL _needlval +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_145: +MOV EAX,65 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,3 +CALL _step +ADD ESP,12 +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_143: +MOV EAX,_3_137+6 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_149 +JMP _3_148 +_3_149: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level13 +ADD ESP,4 +OR EAX,EAX +JNE _3_151 +JMP _3_150 +_3_151: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_150: +MOV EAX,13 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +NOT EAX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +MOV ESP,EBP +POP EBP +RET +_3_148: +MOV EAX,_3_137+8 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_154 +JMP _3_153 +_3_154: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level13 +ADD ESP,4 +OR EAX,EAX +JNE _3_156 +JMP _3_155 +_3_156: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_155: +MOV EAX,45 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +CALL __lneg +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +MOV ESP,EBP +POP EBP +RET +_3_153: +MOV EAX,_3_137+10 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_159 +JMP _3_158 +_3_159: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level13 +ADD ESP,4 +OR EAX,EAX +JNE _3_161 +JMP _3_160 +_3_161: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_160: +MOV EAX,4 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +NEG EAX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +MOV ESP,EBP +POP EBP +RET +_3_158: +MOV EAX,_3_137+12 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_164 +JMP _3_163 +_3_164: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level13 +ADD ESP,4 +OR EAX,EAX +JNE _3_166 +JMP _3_165 +_3_166: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_165: +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_168 +JMP _3_167 +_3_168: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +JMP _3_169 +_3_167: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,16 +MOV [EBX],EAX +_3_169: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_3_163: +MOV EAX,_3_137+14 +PUSH EAX +MOV EAX,6 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _3_172 +JMP _3_171 +_3_172: +ADD ESP,-24 +MOV EAX,_3_137+21 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_174 +JMP _3_173 +_3_174: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +JMP _3_175 +_3_173: +LEA EAX,[EBP-16] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_3_175: +LEA EAX,[EBP-12] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +MOV EAX,_3_137+23 +PUSH EAX +MOV EAX,8 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _3_177 +JMP _3_176 +_3_177: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX,4 +MOV [EBX],EAX +_3_176: +MOV EAX,_3_137+32 +PUSH EAX +MOV EAX,3 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _3_179 +JMP _3_178 +_3_179: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX,4 +MOV [EBX],EAX +JMP _3_180 +_3_178: +MOV EAX,_3_137+36 +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _amatch +ADD ESP,8 +OR EAX,EAX +JNE _3_182 +JMP _3_181 +_3_182: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +_3_181: +_3_180: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_184 +JMP _3_183 +_3_184: +MOV EAX,_3_137+41 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_186 +JMP _3_185 +_3_186: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX,4 +MOV [EBX],EAX +_3_185: +JMP _3_187 +_3_183: +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +OR EAX,EAX +JNE _3_193 +JMP _3_189 +_3_193: +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _findloc +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JE _3_194 +JMP _3_190 +_3_194: +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _findglb +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JE _3_195 +JMP _3_190 +_3_195: +XOR EAX,EAX +JMP _3_191 +_3_190: +MOV EAX,1 +_3_191: +OR EAX,EAX +JNE _3_196 +JMP _3_189 +_3_196: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __ne +OR EAX,EAX +JNE _3_197 +JMP _3_189 +_3_197: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +XOR EAX,EAX +CALL __ne +OR EAX,EAX +JNE _3_198 +JMP _3_189 +_3_198: +MOV EAX,1 +JMP _3_192 +_3_189: +XOR EAX,EAX +_3_192: +OR EAX,EAX +JNE _3_199 +JMP _3_188 +_3_199: +LEA EAX,[EBP-12] +PUSH EAX +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,3 +ADD EAX,EBX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _getint +ADD ESP,8 +POP EBX +MOV [EBX],EAX +JMP _3_200 +_3_188: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_202 +JMP _3_201 +_3_202: +MOV EAX,_3_137+43 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +_3_201: +_3_200: +_3_187: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_204 +JMP _3_203 +_3_204: +MOV EAX,_3_137+66 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +_3_203: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,16 +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_171: +MOV EAX,_3_137+68 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_207 +JMP _3_206 +_3_207: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level13 +ADD ESP,4 +OR EAX,EAX +JE _3_209 +JMP _3_208 +_3_209: +MOV EAX,_3_137+70 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_208: +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_211 +JMP _3_210 +_3_211: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_210: +MOV EAX,25 +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_206: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level14 +ADD ESP,4 +POP EBX +MOV [EBX],EAX +MOV EAX,_3_137+86 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_214 +JMP _3_213 +_3_214: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_216 +JMP _3_215 +_3_216: +XOR CL,CL +CALL _needlval +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_215: +MOV EAX,68 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,65 +PUSH EAX +MOV CL,3 +CALL _step +ADD ESP,12 +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_213: +MOV EAX,_3_137+89 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_219 +JMP _3_218 +_3_219: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_221 +JMP _3_220 +_3_221: +XOR CL,CL +CALL _needlval +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_220: +MOV EAX,65 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,68 +PUSH EAX +MOV CL,3 +CALL _step +ADD ESP,12 +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_218: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_222: +_3_217: +_3_212: +_3_205: +_3_170: +_3_162: +_3_157: +_3_152: +_3_147: +_3_142: +MOV ESP,EBP +POP EBP +RET +_3_137 DB 43,43,0,45,45,0,126,0,33,0 + DB 45,0,42,0,115,105,122,101,111,102 + DB 0,40,0,117,110,115,105,103,110,101 + DB 100,0,105,110,116,0,99,104,97,114 + DB 0,42,0,109,117,115,116,32,98,101 + DB 32,111,98,106,101,99,116,32,111,114 + DB 32,116,121,112,101,0,41,0,38,0 + DB 105,108,108,101,103,97,108,32,97,100 + DB 100,114,101,115,115,0,43,43,0,45 + DB 45,0 + +_level14: +PUSH EBP +MOV EBP,ESP +ADD ESP,-24 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _primary +ADD ESP,4 +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-16] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +XOR CL,CL +CALL _blanks +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,91 +CALL __eq +OR EAX,EAX +JE _3_227 +JMP _3_225 +_3_227: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,40 +CALL __eq +OR EAX,EAX +JE _3_228 +JMP _3_225 +_3_228: +XOR EAX,EAX +JMP _3_226 +_3_225: +MOV EAX,1 +_3_226: +OR EAX,EAX +JNE _3_229 +JMP _3_224 +_3_229: +ADD ESP,-28 +LEA EAX,[EBP-52] +PUSH EAX +MOV CL,1 +CALL _null_is +ADD ESP,4 +_3_230: +MOV EAX,_3_223+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_233 +JMP _3_232 +_3_233: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_235 +JMP _3_234 +_3_235: +MOV EAX,_3_223+2 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +XOR CL,CL +CALL _skip +MOV EAX,_3_223+18 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_234: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_237 +JMP _3_236 +_3_237: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_239 +JMP _3_238 +_3_239: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_238: +JMP _3_240 +_3_236: +MOV EAX,_3_223+20 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_3_240: +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP-24] +PUSH EAX +MOV CL,2 +CALL _setstage +ADD ESP,8 +LEA EAX,[EBP-52] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +XOR EAX,EAX +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,_level1 +PUSH EAX +LEA EAX,[EBP-52] +PUSH EAX +LEA EAX,[EBP-52] +PUSH EAX +MOV CL,5 +CALL _down2 +ADD ESP,20 +MOV EAX,_3_223+36 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +LEA EAX,[EBP-52] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_242 +JMP _3_241 +_3_242: +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +LEA EAX,[EBP-52] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_244 +JMP _3_243 +_3_244: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _3_246 +JMP _3_245 +_3_246: +MOV EAX,110 +PUSH EAX +LEA EAX,[EBP-52] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_247 +_3_245: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_249 +JMP _3_248 +_3_249: +MOV EAX,110 +PUSH EAX +LEA EAX,[EBP-52] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_250 +_3_248: +MOV EAX,110 +PUSH EAX +LEA EAX,[EBP-52] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_250: +_3_247: +MOV EAX,1 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_243: +JMP _3_251 +_3_241: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _3_253 +JMP _3_252 +_3_253: +MOV EAX,14 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,14 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_254 +_3_252: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_256 +JMP _3_255 +_3_256: +MOV EAX,14 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_255: +_3_254: +MOV EAX,1 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_251: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +JMP _3_257 +_3_232: +MOV EAX,_3_223+38 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_259 +JMP _3_258 +_3_259: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_261 +JMP _3_260 +_3_261: +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _callfunc +ADD ESP,4 +JMP _3_262 +_3_260: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __ne +OR EAX,EAX +JNE _3_264 +JMP _3_263 +_3_264: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_268 +JMP _3_266 +_3_268: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +CALL __lneg +OR EAX,EAX +JNE _3_269 +JMP _3_266 +_3_269: +MOV EAX,1 +JMP _3_267 +_3_266: +XOR EAX,EAX +_3_267: +OR EAX,EAX +JNE _3_270 +JMP _3_265 +_3_270: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_265: +XOR EAX,EAX +PUSH EAX +MOV CL,1 +CALL _callfunc +ADD ESP,4 +JMP _3_271 +_3_263: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _callfunc +ADD ESP,4 +_3_271: +_3_262: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +JMP _3_272 +_3_258: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_272: +_3_257: +JMP _3_230 +_3_231: +ADD ESP,28 +_3_224: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_276 +JMP _3_274 +_3_276: +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _3_277 +JMP _3_274 +_3_277: +MOV EAX,1 +JMP _3_275 +_3_274: +XOR EAX,EAX +_3_275: +OR EAX,EAX +JNE _3_278 +JMP _3_273 +_3_278: +MOV EAX,25 +PUSH EAX +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_273: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_223 DB 91,0,99,97,110,39,116,32,115,117 + DB 98,115,99,114,105,112,116,0,93,0 + DB 99,97,110,39,116,32,115,117,98,115 + DB 99,114,105,112,116,0,93,0,40,0 + +_primary: +PUSH EBP +MOV EBP,ESP +ADD ESP,-20 +MOV EAX,_3_279+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_281 +JMP _3_280 +_3_281: +_3_282: +LEA EAX,[EBP-20] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _level1 +ADD ESP,4 +POP EBX +MOV [EBX],EAX +MOV EAX,_3_279+2 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_284 +JMP _3_283 +_3_284: +JMP _3_282 +_3_283: +MOV EAX,_3_279+4 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +LEA EAX,[EBP-20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_280: +XOR EAX,EAX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,14 +PUSH EAX +MOV CL,3 +CALL _putint +ADD ESP,12 +LEA EAX,[EBP-16] +PUSH EAX +MOV CL,1 +CALL _symname +ADD ESP,4 +OR EAX,EAX +JNE _3_286 +JMP _3_285 +_3_286: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-16] +PUSH EAX +MOV CL,1 +CALL _findloc +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_288 +JMP _3_287 +_3_288: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +OR EAX,EAX +JE _3_290 +JMP _3_289 +_3_290: +XOR CL,CL +CALL _experr +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_289: +MOV EAX,58 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,5 +ADD EAX,EBX +MOV EBX,2 +ADD EAX,EBX +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,2 +CALL _getint +ADD ESP,8 +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_292 +JMP _3_291 +_3_292: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_291: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _3_294 +JMP _3_293 +_3_294: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,17 +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +_3_293: +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_3_287: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-16] +PUSH EAX +MOV CL,1 +CALL _findglb +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_296 +JMP _3_295 +_3_296: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,4 +CALL __ne +OR EAX,EAX +JNE _3_298 +JMP _3_297 +_3_298: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_300 +JMP _3_299 +_3_300: +MOV EAX,25 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_299: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _3_302 +JMP _3_301 +_3_302: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],EAX +_3_301: +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_3_297: +JMP _3_303 +_3_295: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-16] +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV EAX,16 +PUSH EAX +XOR EAX,EAX +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV EAX,_glbptr +PUSH EAX +MOV EAX,4 +PUSH EAX +MOV CL,7 +CALL _addsym +ADD ESP,28 +POP EBX +MOV [EBX],EAX +_3_303: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_285: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _constant +ADD ESP,4 +OR EAX,EAX +JE _3_305 +JMP _3_304 +_3_305: +XOR CL,CL +CALL _experr +_3_304: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_279 DB 40,0,44,0,41,0 + +_experr: +PUSH EBP +MOV EBP,ESP +MOV EAX,_3_306+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +MOV EAX,108 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +XOR CL,CL +CALL _skip +POP EBP +RET +_3_306 DB 105,110,118,97,108,105,100,32,101,120 + DB 112,114,101,115,115,105,111,110,0 + +_callfunc: +PUSH EBP +MOV EBP,ESP +ADD ESP,-12 +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +XOR CL,CL +CALL _blanks +_3_308: +MOV EAX,[_lptr] +PUSH EAX +MOV EAX,_3_307+0 +PUSH EAX +MOV CL,2 +CALL _streq +ADD ESP,8 +OR EAX,EAX +JE _3_310 +JMP _3_309 +_3_310: +XOR CL,CL +CALL _endst +OR EAX,EAX +JNE _3_312 +JMP _3_311 +_3_312: +JMP _3_309 +_3_311: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_314 +JMP _3_313 +_3_314: +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP-12] +PUSH EAX +MOV CL,2 +CALL _expressi +ADD ESP,8 +MOV EAX,60 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_315 +_3_313: +MOV EAX,60 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP-12] +PUSH EAX +MOV CL,2 +CALL _expressi +ADD ESP,8 +MOV EAX,71 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_315: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +MOV EAX,_3_307+2 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _3_317 +JMP _3_316 +_3_317: +JMP _3_309 +_3_316: +JMP _3_308 +_3_309: +MOV EAX,_3_307+4 +PUSH EAX +MOV CL,1 +CALL _need +ADD ESP,4 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_321 +JMP _3_319 +_3_321: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,11 +ADD EAX,EBX +PUSH EAX +MOV EAX,_3_307+6 +PUSH EAX +MOV CL,2 +CALL _streq +ADD ESP,8 +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JNE _3_322 +JMP _3_319 +_3_322: +MOV EAX,1 +JMP _3_320 +_3_319: +XOR EAX,EAX +_3_320: +OR EAX,EAX +JNE _3_323 +JMP _3_318 +_3_323: +MOV EAX,5 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_318: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_325 +JMP _3_324 +_3_325: +MOV EAX,9 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_326 +_3_324: +MOV EAX,8 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_326: +MOV EAX,2 +PUSH EAX +MOV EAX,[_csp] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV ESP,EBP +POP EBP +RET +_3_307 DB 41,0,44,0,41,0,67,67,65,82 + DB 71,67,0 + +_fdouble: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JE _3_333 +JMP _3_329 +_3_333: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,69 +CALL __eq +OR EAX,EAX +JE _3_334 +JMP _3_329 +_3_334: +XOR EAX,EAX +JMP _3_330 +_3_329: +MOV EAX,1 +_3_330: +OR EAX,EAX +JNE _3_335 +JMP _3_331 +_3_335: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JNE _3_336 +JMP _3_331 +_3_336: +MOV EAX,1 +JMP _3_332 +_3_331: +XOR EAX,EAX +_3_332: +OR EAX,EAX +JNE _3_337 +JMP _3_328 +_3_337: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +JMP _3_340 +_3_341: +_3_342: +XOR EAX,EAX +POP EBP +RET +_3_343: +MOV EAX,1 +POP EBP +RET +_3_344: +MOV EAX,2 +POP EBP +RET +JMP _3_339 +_3_340: +CALL __switch + DD _3_342 + DD 1 + DD _3_343 + DD 2 + DD _3_344 + DD 4 + DD 0 +JMP _3_341 +_3_339: +_3_328: +XOR EAX,EAX +POP EBP +RET + +_step: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_348 +JMP _3_346 +_3_348: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +JMP _3_347 +_3_346: +MOV EAX,1 +_3_347: +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _store +ADD ESP,4 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_350 +JMP _3_349 +_3_350: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_353 +JMP _3_351 +_3_353: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +JMP _3_352 +_3_351: +MOV EAX,1 +_3_352: +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_349: +POP EBP +RET + +_store: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_356 +JMP _3_355 +_3_356: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JNE _3_358 +JMP _3_357 +_3_358: +MOV EAX,62 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_359 +_3_357: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_361 +JMP _3_360 +_3_361: +MOV EAX,64 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_362 +_3_360: +MOV EAX,115 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_362: +_3_359: +JMP _3_363 +_3_355: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _3_365 +JMP _3_364 +_3_365: +MOV EAX,114 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_366 +_3_364: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JNE _3_368 +JMP _3_367 +_3_368: +MOV EAX,61 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_369 +_3_367: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_371 +JMP _3_370 +_3_371: +MOV EAX,63 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_372 +_3_370: +MOV EAX,114 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_372: +_3_369: +_3_366: +_3_363: +MOV ESP,EBP +POP EBP +RET + +_fetch: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_375 +JMP _3_374 +_3_375: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _3_377 +JMP _3_376 +_3_377: +MOV EAX,109 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_378 +_3_376: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_380 +JMP _3_379 +_3_380: +MOV EAX,32 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_381 +_3_379: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,1 +AND EAX,EBX +OR EAX,EAX +JNE _3_383 +JMP _3_382 +_3_383: +MOV EAX,29 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_384 +_3_382: +MOV EAX,28 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_384: +_3_381: +_3_378: +JMP _3_385 +_3_374: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,3 +CALL __eq +OR EAX,EAX +JNE _3_387 +JMP _3_386 +_3_387: +MOV EAX,107 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_388 +_3_386: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,4 +CALL __eq +OR EAX,EAX +JNE _3_390 +JMP _3_389 +_3_390: +MOV EAX,107 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_391 +_3_389: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_393 +JMP _3_392 +_3_393: +MOV EAX,30 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_394 +_3_392: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,1 +AND EAX,EBX +OR EAX,EAX +JNE _3_396 +JMP _3_395 +_3_396: +MOV EAX,27 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_397 +_3_395: +MOV EAX,26 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_397: +_3_394: +_3_391: +_3_388: +_3_385: +MOV ESP,EBP +POP EBP +RET + +_constant: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +MOV CL,1 +CALL _number +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_400 +JMP _3_399 +_3_400: +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_401 +_3_399: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +MOV CL,1 +CALL _chrcon +ADD ESP,4 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_403 +JMP _3_402 +_3_403: +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_404 +_3_402: +LEA EAX,[EBP-4] +PUSH EAX +MOV CL,1 +CALL _string +ADD ESP,4 +OR EAX,EAX +JNE _3_406 +JMP _3_405 +_3_406: +MOV EAX,24 +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_407 +_3_405: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_407: +_3_404: +_3_401: +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET + +_number: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +_3_409: +MOV EAX,_3_408+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_412 +JMP _3_411 +_3_412: +JMP _3_413 +_3_411: +MOV EAX,_3_408+2 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JNE _3_415 +JMP _3_414 +_3_415: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX,1 +MOV [EBX],EAX +JMP _3_416 +_3_414: +JMP _3_410 +_3_416: +_3_413: +JMP _3_409 +_3_410: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _isdigit +ADD ESP,4 +OR EAX,EAX +JE _3_418 +JMP _3_417 +_3_418: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_417: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,48 +CALL __eq +OR EAX,EAX +JNE _3_420 +JMP _3_419 +_3_420: +_3_421: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,48 +CALL __eq +OR EAX,EAX +JNE _3_423 +JMP _3_422 +_3_423: +XOR CL,CL +CALL _inbyte +JMP _3_421 +_3_422: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,88 +CALL __eq +OR EAX,EAX +JNE _3_425 +JMP _3_424 +_3_425: +XOR CL,CL +CALL _inbyte +_3_426: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _isxdigit +ADD ESP,4 +OR EAX,EAX +JNE _3_428 +JMP _3_427 +_3_428: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _isdigit +ADD ESP,4 +OR EAX,EAX +JNE _3_430 +JMP _3_429 +_3_430: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,16 +IMUL EBX +PUSH EAX +XOR CL,CL +CALL _inbyte +MOV EBX,EAX +MOV EAX,48 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _3_431 +_3_429: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,16 +IMUL EBX +MOV EBX,10 +ADD EAX,EBX +PUSH EAX +XOR CL,CL +CALL _inbyte +PUSH EAX +MOV CL,1 +CALL _toupper +ADD ESP,4 +MOV EBX,EAX +MOV EAX,65 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +_3_431: +JMP _3_426 +_3_427: +JMP _3_432 +_3_424: +_3_433: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,48 +CALL __ge +OR EAX,EAX +JNE _3_437 +JMP _3_435 +_3_437: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,55 +CALL __le +OR EAX,EAX +JNE _3_438 +JMP _3_435 +_3_438: +MOV EAX,1 +JMP _3_436 +_3_435: +XOR EAX,EAX +_3_436: +OR EAX,EAX +JNE _3_439 +JMP _3_434 +_3_439: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,8 +IMUL EBX +PUSH EAX +XOR CL,CL +CALL _inbyte +MOV EBX,EAX +MOV EAX,48 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _3_433 +_3_434: +_3_432: +JMP _3_440 +_3_419: +_3_441: +MOV EAX,[_ch] +PUSH EAX +MOV CL,1 +CALL _isdigit +ADD ESP,4 +OR EAX,EAX +JNE _3_443 +JMP _3_442 +_3_443: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,10 +IMUL EBX +PUSH EAX +XOR CL,CL +CALL _inbyte +MOV EBX,EAX +MOV EAX,48 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _3_441 +_3_442: +_3_440: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_445 +JMP _3_444 +_3_445: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +NEG EAX +POP EBX +MOV [EBX],EAX +MOV EAX,16 +MOV ESP,EBP +POP EBP +RET +_3_444: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JL _3_447 +JMP _3_446 +_3_447: +MOV EAX,17 +MOV ESP,EBP +POP EBP +RET +_3_446: +MOV EAX,16 +MOV ESP,EBP +POP EBP +RET +_3_448: +MOV ESP,EBP +POP EBP +RET +_3_408 DB 43,0,45,0 + +_chrcon: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +MOV EAX,_3_449+0 +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _3_451 +JMP _3_450 +_3_451: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_450: +_3_452: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,39 +CALL __ne +OR EAX,EAX +JNE _3_454 +JMP _3_453 +_3_454: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,8 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +XOR CL,CL +CALL _litchar +MOV EBX,EAX +MOV EAX,255 +AND EAX,EBX +POP EBX +ADD EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _3_452 +_3_453: +XOR CL,CL +CALL _gch +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +MOV EAX,16 +MOV ESP,EBP +POP EBP +RET +_3_449 DB 39,0 + +_string: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +MOV EAX,_quote +PUSH EAX +MOV CL,1 +CALL _match +ADD ESP,4 +OR EAX,EAX +JE _3_457 +JMP _3_456 +_3_457: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_456: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_litptr] +POP EBX +MOV [EBX],EAX +_3_458: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,34 +CALL __ne +OR EAX,EAX +JNE _3_460 +JMP _3_459 +_3_460: +MOV EAX,[_ch] +OR EAX,EAX +JE _3_462 +JMP _3_461 +_3_462: +JMP _3_459 +_3_461: +XOR CL,CL +CALL _litchar +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _stowlit +ADD ESP,8 +JMP _3_458 +_3_459: +XOR CL,CL +CALL _gch +MOV EAX,[_litq] +PUSH EAX +MOV EAX,[_litptr] +INC EAX +MOV DWORD [_litptr],EAX +DEC EAX +POP EBX +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET + +_stowlit: +PUSH EBP +MOV EBP,ESP +MOV EAX,[_litptr] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,2999 +CALL __ge +OR EAX,EAX +JNE _3_465 +JMP _3_464 +_3_465: +MOV EAX,_3_463+0 +PUSH EAX +MOV CL,1 +CALL _error +ADD ESP,4 +MOV EAX,7 +PUSH EAX +MOV CL,1 +CALL _OS_exit +ADD ESP,4 +_3_464: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,[_litq] +PUSH EAX +MOV EAX,[_litptr] +POP EBX +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _putint +ADD ESP,12 +MOV EAX,[_litptr] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV DWORD [_litptr],EAX +POP EBP +RET +_3_463 DB 108,105,116,101,114,97,108,32,113,117 + DB 101,117,101,32,111,118,101,114,102,108 + DB 111,119,0 + +_litchar: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,92 +CALL __ne +OR EAX,EAX +JE _3_470 +JMP _3_468 +_3_470: +MOV EAX,[_nch] +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JE _3_471 +JMP _3_468 +_3_471: +XOR EAX,EAX +JMP _3_469 +_3_468: +MOV EAX,1 +_3_469: +OR EAX,EAX +JNE _3_472 +JMP _3_467 +_3_472: +XOR CL,CL +CALL _gch +MOV ESP,EBP +POP EBP +RET +_3_467: +XOR CL,CL +CALL _gch +MOV EAX,[_ch] +JMP _3_475 +_3_476: +XOR CL,CL +CALL _gch +MOV EAX,10 +MOV ESP,EBP +POP EBP +RET +_3_477: +XOR CL,CL +CALL _gch +MOV EAX,13 +MOV ESP,EBP +POP EBP +RET +_3_478: +XOR CL,CL +CALL _gch +MOV EAX,9 +MOV ESP,EBP +POP EBP +RET +_3_479: +XOR CL,CL +CALL _gch +MOV EAX,8 +MOV ESP,EBP +POP EBP +RET +_3_480: +XOR CL,CL +CALL _gch +MOV EAX,12 +MOV ESP,EBP +POP EBP +RET +JMP _3_474 +_3_475: +CALL __switch + DD _3_476 + DD 110 + DD _3_477 + DD 114 + DD _3_478 + DD 116 + DD _3_479 + DD 98 + DD _3_480 + DD 102 + DD 0 +_3_474: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX,3 +MOV [EBX],EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_3_481: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +DEC EAX +MOV [EBX],EAX +INC EAX +MOV EBX,EAX +XOR EAX,EAX +CALL __gt +OR EAX,EAX +JNE _3_485 +JMP _3_483 +_3_485: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,48 +CALL __ge +OR EAX,EAX +JNE _3_486 +JMP _3_483 +_3_486: +MOV EAX,[_ch] +MOV EBX,EAX +MOV EAX,55 +CALL __le +OR EAX,EAX +JNE _3_487 +JMP _3_483 +_3_487: +MOV EAX,1 +JMP _3_484 +_3_483: +XOR EAX,EAX +_3_484: +OR EAX,EAX +JNE _3_488 +JMP _3_482 +_3_488: +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,3 +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +XOR CL,CL +CALL _gch +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,48 +XCHG EAX,EBX +SUB EAX,EBX +POP EBX +MOV [EBX],EAX +JMP _3_481 +_3_482: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_490 +JMP _3_489 +_3_490: +XOR CL,CL +CALL _gch +MOV ESP,EBP +POP EBP +RET +_3_489: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_491: +MOV ESP,EBP +POP EBP +RET + +_skim: +PUSH EBP +MOV EBP,ESP +ADD ESP,-12 +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +_3_493: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _down1 +ADD ESP,8 +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+28] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _nextop +ADD ESP,4 +OR EAX,EAX +JNE _3_496 +JMP _3_495 +_3_496: +MOV EAX,[_opsize] +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_498 +JMP _3_497 +_3_498: +LEA EAX,[EBP-8] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +_3_497: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _dropout +ADD ESP,16 +JMP _3_499 +_3_495: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_501 +JMP _3_500 +_3_501: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,4 +CALL _dropout +ADD ESP,16 +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,40 +PUSH EAX +LEA EAX,[EBP-12] +PUSH EAX +XOR CL,CL +CALL _getlabel +POP EBX +MOV [EBX],EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,41 +PUSH EAX +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +POP EBX +MOV [EBX],EAX +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_500: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_502: +_3_499: +JMP _3_493 +_3_494: +MOV ESP,EBP +POP EBP +RET + +_dropout: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_505 +JMP _3_504 +_3_505: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +JMP _3_506 +_3_504: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_508 +JMP _3_507 +_3_508: +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_507: +_3_506: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +POP EBP +RET + +_down: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _down1 +ADD ESP,8 +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _nextop +ADD ESP,4 +OR EAX,EAX +JE _3_511 +JMP _3_510 +_3_511: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET +_3_510: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_513 +JMP _3_512 +_3_513: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_512: +_3_514: +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _nextop +ADD ESP,4 +OR EAX,EAX +JNE _3_517 +JMP _3_516 +_3_517: +ADD ESP,-28 +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,1 +CALL _null_is +ADD ESP,4 +MOV EAX,[_opsize] +PUSH EAX +MOV CL,1 +CALL _bump +ADD ESP,4 +MOV EAX,[_opindex] +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV DWORD [_opindex],EAX +MOV EAX,_op +PUSH EAX +MOV EAX,[_opindex] +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV EAX,_op2 +PUSH EAX +MOV EAX,[_opindex] +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-32] +PUSH EAX +MOV CL,5 +CALL _down2 +ADD ESP,20 +ADD ESP,28 +JMP _3_518 +_3_516: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET +_3_518: +JMP _3_514 +_3_515: +MOV ESP,EBP +POP EBP +RET + +_down1: +PUSH EBP +MOV EBP,ESP +ADD ESP,-12 +LEA EAX,[EBP-8] +PUSH EAX +LEA EAX,[EBP-12] +PUSH EAX +MOV CL,2 +CALL _setstage +ADD ESP,8 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +PUSH EBX +CALL EAX +ADD ESP,4 +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_521 +JMP _3_520 +_3_521: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +_3_520: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET + +_down2: +PUSH EBP +MOV EBP,ESP +ADD ESP,-16 +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP-8] +PUSH EAX +MOV CL,2 +CALL _setstage +ADD ESP,8 +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_524 +JMP _3_523 +_3_524: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _down1 +ADD ESP,8 +OR EAX,EAX +JNE _3_526 +JMP _3_525 +_3_526: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_525: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_528 +JMP _3_527 +_3_528: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +PUSH EAX +MOV EAX,[_snext] +POP EBX +MOV [EBX],EAX +_3_527: +MOV EAX,33 +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _fdouble +ADD ESP,12 +POP EBX +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_529 +_3_523: +MOV EAX,60 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,2 +CALL _down1 +ADD ESP,8 +OR EAX,EAX +JNE _3_531 +JMP _3_530 +_3_531: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _fetch +ADD ESP,4 +_3_530: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_533 +JMP _3_532 +_3_533: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_535 +JMP _3_534 +_3_535: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,24 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_3_534: +MOV EAX,[_csp] +MOV EBX,4 +ADD EAX,EBX +MOV DWORD [_csp],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JNE _3_537 +JMP _3_536 +_3_537: +MOV EAX,110 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _fdouble +ADD ESP,12 +POP EBX +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +JMP _3_538 +_3_536: +MOV EAX,51 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,108 +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _fdouble +ADD ESP,12 +POP EBX +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_538: +JMP _3_539 +_3_532: +MOV EAX,59 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP-16] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _fdouble +ADD ESP,12 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_541 +JMP _3_540 +_3_541: +MOV EAX,14 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __gt +OR EAX,EAX +JNE _3_543 +JMP _3_542 +_3_543: +MOV EAX,14 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_542: +_3_540: +LEA EAX,[EBP-16] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _fdouble +ADD ESP,12 +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_545 +JMP _3_544 +_3_545: +MOV EAX,15 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP-16] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __gt +OR EAX,EAX +JNE _3_547 +JMP _3_546 +_3_547: +MOV EAX,15 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_546: +_3_544: +_3_539: +_3_529: +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_549 +JMP _3_548 +_3_549: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _nosign +ADD ESP,4 +OR EAX,EAX +JE _3_553 +JMP _3_551 +_3_553: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,1 +CALL _nosign +ADD ESP,4 +OR EAX,EAX +JE _3_554 +JMP _3_551 +_3_554: +XOR EAX,EAX +JMP _3_552 +_3_551: +MOV EAX,1 +_3_552: +OR EAX,EAX +JNE _3_555 +JMP _3_550 +_3_555: +LEA EAX,[EBP+24] +PUSH EAX +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_3_550: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +AND EAX,EBX +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_557 +JMP _3_556 +_3_557: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,16 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _calc +ADD ESP,12 +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _clearsta +ADD ESP,8 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,17 +CALL __eq +OR EAX,EAX +JNE _3_559 +JMP _3_558 +_3_559: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX,17 +MOV [EBX],EAX +_3_558: +JMP _3_560 +_3_556: +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,69 +CALL __eq +OR EAX,EAX +JNE _3_564 +JMP _3_562 +_3_564: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_565 +JMP _3_562 +_3_565: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,2 +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +MOV EBX,EAX +MOV EAX,2 +CALL __eq +OR EAX,EAX +JNE _3_566 +JMP _3_562 +_3_566: +MOV EAX,1 +JMP _3_563 +_3_562: +XOR EAX,EAX +_3_563: +OR EAX,EAX +JNE _3_567 +JMP _3_561 +_3_567: +MOV EAX,70 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,31 +PUSH EAX +MOV EAX,1 +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +MOV EAX,7 +PUSH EAX +XOR EAX,EAX +PUSH EAX +MOV CL,2 +CALL _gen +ADD ESP,8 +_3_561: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,20 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_3_560: +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,69 +CALL __eq +OR EAX,EAX +JE _3_571 +JMP _3_569 +_3_571: +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,1 +CALL __eq +OR EAX,EAX +JE _3_572 +JMP _3_569 +_3_572: +XOR EAX,EAX +JMP _3_570 +_3_569: +MOV EAX,1 +_3_570: +OR EAX,EAX +JNE _3_573 +JMP _3_568 +_3_573: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_577 +JMP _3_575 +_3_577: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_578 +JMP _3_575 +_3_578: +MOV EAX,1 +JMP _3_576 +_3_575: +XOR EAX,EAX +_3_576: +OR EAX,EAX +JNE _3_579 +JMP _3_574 +_3_579: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +JMP _3_580 +_3_574: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JNE _3_582 +JMP _3_581 +_3_582: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,4 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_3_581: +_3_580: +_3_568: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +XOR EAX,EAX +CALL __eq +OR EAX,EAX +JE _3_588 +JMP _3_584 +_3_588: +LEA EAX,[EBP-12] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_589 +JMP _3_585 +_3_589: +LEA EAX,[EBP-12] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,1 +AND EAX,EBX +OR EAX,EAX +JNE _3_590 +JMP _3_585 +_3_590: +MOV EAX,1 +JMP _3_586 +_3_585: +XOR EAX,EAX +_3_586: +OR EAX,EAX +JE _3_591 +JMP _3_584 +_3_591: +XOR EAX,EAX +JMP _3_587 +_3_584: +MOV EAX,1 +_3_587: +OR EAX,EAX +JNE _3_592 +JMP _3_583 +_3_592: +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_3_583: +_3_548: +MOV ESP,EBP +POP EBP +RET + +_nosign: +PUSH EBP +MOV EBP,ESP +ADD ESP,-4 +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,8 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +OR EAX,EAX +JE _3_599 +JMP _3_595 +_3_599: +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,12 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX,17 +CALL __eq +OR EAX,EAX +JE _3_600 +JMP _3_595 +_3_600: +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +OR EAX,EAX +JNE _3_601 +JMP _3_596 +_3_601: +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,1 +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +MOV EBX,EAX +MOV EAX,1 +AND EAX,EBX +OR EAX,EAX +JNE _3_602 +JMP _3_596 +_3_602: +MOV EAX,1 +JMP _3_597 +_3_596: +XOR EAX,EAX +_3_597: +OR EAX,EAX +JE _3_603 +JMP _3_595 +_3_603: +XOR EAX,EAX +JMP _3_598 +_3_595: +MOV EAX,1 +_3_598: +OR EAX,EAX +JNE _3_604 +JMP _3_594 +_3_604: +MOV EAX,1 +MOV ESP,EBP +POP EBP +RET +_3_594: +XOR EAX,EAX +MOV ESP,EBP +POP EBP +RET + +_calc: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +JMP _3_608 +_3_609: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +POP EBP +RET +_3_610: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +SUB EAX,EBX +POP EBP +RET +_3_611: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +IMUL EBX +POP EBP +RET +_3_612: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +CDQ +IDIV EBX +POP EBP +RET +_3_613: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +CDQ +IDIV EBX +MOV EAX,EDX +POP EBP +RET +_3_614: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __eq +POP EBP +RET +_3_615: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ne +POP EBP +RET +_3_616: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __le +POP EBP +RET +_3_617: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ge +POP EBP +RET +_3_618: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __lt +POP EBP +RET +_3_619: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __gt +POP EBP +RET +_3_620: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +AND EAX,EBX +POP EBP +RET +_3_621: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +OR EAX,EBX +POP EBP +RET +_3_622: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XOR EAX,EBX +POP EBP +RET +_3_623: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV ECX,EAX +MOV EAX,EBX +SAR EAX,CL +POP EBP +RET +_3_624: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV ECX,EAX +MOV EAX,EBX +SAL EAX,CL +POP EBP +RET +JMP _3_607 +_3_608: +CALL __switch + DD _3_609 + DD 1 + DD _3_610 + DD 69 + DD _3_611 + DD 52 + DD _3_612 + DD 16 + DD _3_613 + DD 49 + DD _3_614 + DD 20 + DD _3_615 + DD 55 + DD _3_616 + DD 43 + DD _3_617 + DD 22 + DD _3_618 + DD 47 + DD _3_619 + DD 35 + DD _3_620 + DD 3 + DD _3_621 + DD 57 + DD _3_622 + DD 73 + DD _3_623 + DD 7 + DD _3_624 + DD 6 + DD 0 +_3_607: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +MOV CL,3 +CALL _calc2 +ADD ESP,12 +POP EBP +RET + +_calc2: +PUSH EBP +MOV EBP,ESP +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +JMP _3_628 +_3_629: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MUL EBX +POP EBP +RET +_3_630: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +XOR EDX,EDX +DIV EBX +POP EBP +RET +_3_631: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +XCHG EAX,EBX +XOR EDX,EDX +DIV EBX +MOV EAX,EDX +POP EBP +RET +_3_632: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ule +POP EBP +RET +_3_633: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __uge +POP EBP +RET +_3_634: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ult +POP EBP +RET +_3_635: +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ugt +POP EBP +RET +JMP _3_627 +_3_628: +CALL __switch + DD _3_629 + DD 53 + DD _3_630 + DD 17 + DD _3_631 + DD 50 + DD _3_632 + DD 44 + DD _3_633 + DD 23 + DD _3_634 + DD 48 + DD _3_635 + DD 36 + DD 0 +_3_627: +XOR EAX,EAX +POP EBP +RET diff --git a/programs/develop/scc/GETARG.ASM b/programs/develop/scc/GETARG.ASM new file mode 100644 index 0000000000..3454f1bb04 --- /dev/null +++ b/programs/develop/scc/GETARG.ASM @@ -0,0 +1,128 @@ + +_getarg: +PUSH EBP +MOV EBP,ESP +ADD ESP,-8 +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +XOR EAX,EAX +CALL __lt +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+12] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __ge +POP EBX +OR EAX,EBX +OR EAX,EAX +JNE _0_3 +JMP _0_2 +_0_3: +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +MOV EAX,-1 +MOV ESP,EBP +POP EBP +RET +_0_2: +LEA EAX,[EBP-8] +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],EAX +LEA EAX,[EBP-4] +PUSH EAX +LEA EAX,[EBP+8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+24] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +SHL EAX,1 +SHL EAX,1 +ADD EAX,EBX +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +MOV [EBX],EAX +_0_4: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP+16] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +CALL __lt +OR EAX,EAX +JNE _0_6 +JMP _0_5 +_0_6: +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +PUSH EAX +LEA EAX,[EBP-4] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +MOVSX EAX,BYTE [EBX] +POP EBX +MOV [EBX],AL +OR EAX,EAX +JE _0_8 +JMP _0_7 +_0_8: +JMP _0_5 +_0_7: +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +INC EAX +MOV [EBX],EAX +JMP _0_4 +_0_5: +LEA EAX,[EBP+20] +MOV EBX,EAX +MOV EAX, [EBX] +PUSH EAX +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +POP EBX +ADD EAX,EBX +MOV EBX,EAX +XOR EAX,EAX +MOV [EBX],AL +LEA EAX,[EBP-8] +MOV EBX,EAX +MOV EAX, [EBX] +MOV ESP,EBP +POP EBP +RET + \ No newline at end of file diff --git a/programs/develop/scc/GETARG.C b/programs/develop/scc/GETARG.C new file mode 100644 index 0000000000..d06c2c175b --- /dev/null +++ b/programs/develop/scc/GETARG.C @@ -0,0 +1,29 @@ +#include +/* +** Get command line argument. +** Entry: n = Number of the argument. +** s = Destination string pointer. +** size = Size of destination string. +** argc = Argument count from main(). +** argv = Argument vector(s) from main(). +** Returns number of characters moved on success, +** else EOF. +*/ +getarg(n,s,size,argc,argv) + int n; char *s; int size,argc,argv[]; +{char *str; + int i; + + if(n<0 | n>=argc) + {*s=NULL; + return EOF; + } + i=0; + str=argv[n]; + while(i='a') return (c-32); + return (c); +} + +/* +** atoi(s) - convert s to integer. +*/ +atoi(s) char *s; +{int sign,n; + + while(isspace(*s)) ++s; + sign = 1; + switch(*s) + {case '-': sign=-1; + case '+': ++s; + } + n=0; + while(isdigit(*s)) n=10*n+*s++ -'0'; + return (sign*n); +} + +/* +** atoib(s,b) - Convert s to "unsigned" integer in base b. +** NOTE: This is a non-standard function. +*/ +atoib(s,b) char *s; int b; +{int n, digit; + + n=0; + while(isspace(*s)) ++s; + while((digit=(127 & *s++))>='0') + { if(digit>='a') digit-=87; + else if(digit>='A') digit-=55; + else digit -= '0'; + if(digit>=b) break; + n=b*n+digit; + } + return (n); +} + +/* +** Gets an entire string (including its newline +** terminator) or size-1 characters, whichever comes +** first. The input is terminated by a null character. +** Entry: str = Pointer to destination buffer. +** size = Size of the destination buffer. +** fd = File descriptor of pertinent file. +** Returns str on success, else NULL. +*/ +fgets(str,size,fd) char *str; unsigned size,fd; +{return (_gets(str,size,fd,1)); +} + +/* +** Gets an entire string from stdin (excluding its newline +** terminator) or size-1 characters, whichever comes +** first. The input is terminated by a null character. +** The user buffer must be large enough to hold the data. +** Entry: str = Pointer to destination buffer. +** Returns str on success, else NULL. +*/ +gets(str) char *str; +{return (_gets(str,32767,stdin,0)); +} + +_gets(str,size,fd,nl) char *str; unsigned size,fd,nl; +{int backup; char *next; + + next=str; + while(--size>0) + {switch (*next=fgetc(fd)) + {case EOF: + *next=NULL; + if(next==str) return (NULL); + return (str); + + case '\n': + *(next+nl)=NULL; + return (str); + + case RUB: /* \b */ + if(next>str) backup=1; + else backup=0; + goto backout; + + case WIPE: /* \r */ + backup=next-str; +backout: + if(0/*iscons(fd)*/) + {++size; + while(backup--) + {fputs("\b \b",stderr); + --next;++size; + } + continue; + } + + default: + ++next; + } + } + *next = NULL; + return (str); +} + +/* +** fprintf(fd, ctlstring, arg, arg, ...) - Formatted print. +** Operates as described by Kernighan & Ritchie. +** b, c, d, o, s, u, and x specifications are supported. +** Note: b (binary) is a non-standard extension. +*/ +fprintf(argc) int argc; +{int *nxtarg; + + nxtarg=CCARGC()+&argc; + return(_print(*(--nxtarg),--nxtarg)); +} + +/* +** printf(ctlstring, arg, arg, ...) - Formatted print. +** Operates as described by Kernighan & Ritchie. +** b, c, d, o, s, u, and x specifications are supported. +** Note: b (binary) is a non-standard extension. +*/ +printf(argc) int argc; +{return(_print(stdout,CCARGC()+&argc-1)); +} + +/* +** _print(fd, ctlstring, arg, arg, ...) +** Called by fprintf() and printf(). +*/ +_print(fd,nxtarg) int fd,*nxtarg; +{int arg,left,pad,cc,len,maxchr,width; + char *ctl,*sptr,str[17]; + + cc=0; + ctl=*nxtarg--; + while(*ctl) + {if(*ctl!='%') {OS_fputc(*ctl++,fd); ++cc; continue;} + else ++ctl; + if(*ctl=='%') {OS_fputc(*ctl++,fd); ++cc; continue;} + if(*ctl=='-') {left=1; ++ctl;} else left=0; + if(*ctl=='0') pad='0'; + else pad=' '; + if(isdigit(*ctl)) + {width=atoi(ctl++); + while(isdigit(*ctl)) ++ctl; + }else width=0; + if(*ctl=='.') + {maxchr=atoi(++ctl); + while(isdigit(*ctl)) ++ctl; + }else maxchr=0; + arg=*nxtarg--; + sptr=str; + switch(*ctl++) + {case 'c': str[0]=arg; str[1]=NULL; break; + case 's': sptr=arg; break; + case 'd': itoa(arg,str); break; + case 'b': itoab(arg,str,2); break; + case 'o': itoab(arg,str,8); break; + case 'u': itoab(arg,str,10); break; + case 'x': itoab(arg,str,16); break; + default: return (cc); + } + len=strlen(sptr); + if(maxchr && maxchrlen) width=width-len; else width=0; + if(!left) while(width--) {OS_fputc(pad,fd); ++cc;} + while(len--) {OS_fputc(*sptr++,fd); ++cc;} + if(left) while(width--) {OS_fputc(pad,fd); ++cc;} + } + return (cc); +} + +/* +** Write a string to fd. +** Entry: string = Pointer to null-terminated string. +** fd = File descriptor of pertinent file. +*/ +fputs(string,fd) char *string; int fd; +{while(*string) + OS_fputc(*string++,fd); +} + +/* +** All character classification functions except isascii(). +** Integer argument (c) must be in ASCII range (0-127) for +** dependable answers. +*/ + +#define ALNUM 1 +#define ALPHA 2 +#define CNTRL 4 +#define DIGIT 8 +#define GRAPH 16 +#define LOWER 32 +#define PRINT 64 +#define PUNCT 128 +#define BLANK 256 +#define UPPER 512 +#define XDIGIT 1024 + +int _is[128] = +{0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x004, 0x104, 0x104, 0x104, 0x104, 0x104, 0x004, 0x004, + 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x140, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, + 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, + 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, + 0x459, 0x459, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, + 0x0D0, 0x653, 0x653, 0x653, 0x653, 0x653, 0x653, 0x253, + 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, + 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, + 0x253, 0x253, 0x253, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, + 0x0D0, 0x473, 0x473, 0x473, 0x473, 0x473, 0x473, 0x073, + 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, + 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, + 0x073, 0x073, 0x073, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x004 +}; + +isalnum (c) int c; {return (_is[c] & ALNUM );} /* 'a'-'z', 'A'-'Z', '0'-'9' */ +isalpha (c) int c; {return (_is[c] & ALPHA );} /* 'a'-'z', 'A'-'Z' */ +iscntrl (c) int c; {return (_is[c] & CNTRL );} /* 0-31, 127 */ +isdigit (c) int c; {return (_is[c] & DIGIT );} /* '0'-'9' */ +isgraph (c) int c; {return (_is[c] & GRAPH );} /* '!'-'~' */ +islower (c) int c; {return (_is[c] & LOWER );} /* 'a'-'z' */ +isprint (c) int c; {return (_is[c] & PRINT );} /* ' '-'~' */ +ispunct (c) int c; {return (_is[c] & PUNCT );} /* !alnum && !cntrl && !space */ +isspace (c) int c; {return (_is[c] & BLANK );} /* HT, LF, VT, FF, CR, ' ' */ +isupper (c) int c; {return (_is[c] & UPPER );} /* 'A'-'Z' */ +isxdigit(c) int c; {return (_is[c] & XDIGIT);} /* '0'-'9', 'a'-'f', 'A'-'F' */ + +/* +** itoa(n,s) - Convert n to characters in s +*/ +itoa(n,s) char *s; int n; +{int sign; + char *ptr; + + ptr=s; + if((sign=n)<0) n=-n; + do + {*ptr++ =n%10+'0'; + }while((n=n/10)>0); + if(sign<0) *ptr++='-'; + *ptr='\0'; + reverse(s); +} + +/* +** itoab(n,s,b) - Convert "unsigned" n to characters in s using base b. +** NOTE: This is a non-standard function. +*/ +itoab(n,s,b) int n; char *s; int b; +{char *ptr; + int lowbit; + ptr=s; + b >>= 1; + do + {lowbit=n&1; + n=(n>>1)&32767; + *ptr=((n%b)<<1)+lowbit; + if(*ptr<10) *ptr+='0'; + else *ptr+=55; + ++ptr; + }while(n/=b); + *ptr=0; + reverse(s); +} + +/* +** itod -- convert nbr to signed decimal string of width sz +** right adjusted, blank filled; returns str +** +** if sz > 0 terminate with null byte +** if sz = 0 find end of string +** if sz < 0 use last byte for data +*/ +itod(nbr,str,sz) int nbr; char str[]; int sz; +{char sgn; + + if(nbr<0) {nbr=-nbr; sgn='-';} + else sgn=' '; + if(sz>0) str[--sz]=NULL; + else if(sz<0) sz=-sz; + else while(str[sz]!=NULL) ++sz; + while(sz) + {str[--sz]=(nbr%10+'0'); + if((nbr=nbr/10)==0) break; + } + if(sz) str[--sz]=sgn; + while(sz>0) str[--sz]=' '; + return str; +} + +/* +** itoo -- converts nbr to octal string of length sz +** right adjusted and blank filled, returns str +** +** if sz > 0 terminate with null byte +** if sz = 0 find end of string +** if sz < 0 use last byte for data +*/ +itoo(nbr,str,sz) int nbr; char str[]; int sz; +{int digit; + + if(sz>0) str[--sz]=0; + else if(sz<0) sz=-sz; + else while(str[sz]!=0) ++sz; + while(sz) + {digit=nbr&7;nbr=(nbr>>3)&8191; + str[--sz]=digit+48; + if(nbr==0) break; + } + while(sz) str[--sz]=' '; + return str; +} + +/* +** itou -- convert nbr to unsigned decimal string of width sz +** right adjusted, blank filled; returns str +** +** if sz > 0 terminate with null byte +** if sz = 0 find end of string +** if sz < 0 use last byte for data +*/ +itou(nbr,str,sz) int nbr; char str[]; int sz; +{int lowbit; + + if(sz>0) str[--sz]=NULL; + else if(sz<0) sz=-sz; + else while(str[sz]!=NULL) ++sz; + while(sz) + {lowbit=nbr&1; + nbr=(nbr>>1)&32767; /* divide by 2 */ + str[--sz]=((nbr%5)<<1)+lowbit+'0'; + if((nbr=nbr/5)==0) break; + } + while(sz) str[--sz]=' '; + return str; +} + +/* +** itox -- converts nbr to hex string of length sz +** right adjusted and blank filled, returns str +** +** if sz > 0 terminate with null byte +** if sz = 0 find end of string +** if sz < 0 use last byte for data +*/ + +itox(nbr,str,sz) int nbr; char str[]; int sz; +{int digit,offset; + + if(sz>0) str[--sz]=0; + else if(sz<0) sz=-sz; + else while(str[sz]!=0) ++sz; + while(sz) + {digit=nbr&15; + nbr=nbr/16; +/* + nbr=(nbr>>4)&4095; // 268435455; // 0xFFFFFFF +*/ + if(digit<10) offset=48; + else offset=55; + str[--sz]=digit+offset; + if(nbr==0) break; + } + while(sz) str[--sz]=' '; + return str; +} + diff --git a/programs/develop/scc/MACROS.INC b/programs/develop/scc/MACROS.INC new file mode 100644 index 0000000000..cd445840ed --- /dev/null +++ b/programs/develop/scc/MACROS.INC @@ -0,0 +1,268 @@ +; new application structure +macro meos_app_start + { + use32 + org 0x0 + + db 'MENUET01' + dd 0x01 + dd __start + dd __end + dd __memory + dd __stack + + if used __params & ~defined __params + dd __params + else + dd 0x0 + end if + + dd 0x0 + } +MEOS_APP_START fix meos_app_start + +macro code + { + __start: + } +CODE fix code + +macro data + { + __data: + } +DATA fix data + +macro udata + { + if used __params & ~defined __params + __params: + db 0 + __end: + rb 255 + else + __end: + end if + __udata: + } +UDATA fix udata + +macro meos_app_end + { + align 32 + rb 2048 + __stack: + __memory: + } +MEOS_APP_END fix meos_app_end + + +; macro for defining multiline text data +struc mstr [sstring] + { + forward + local ssize + virtual at 0 + db sstring + ssize = $ + end virtual + dd ssize + db sstring + common + dd -1 + } + + +; strings +macro sz name,[data] { ; from MFAR [mike.dld] + common + if used name + label name + end if + forward + if used name + db data + end if + common + if used name + .size = $-name + end if +} + +macro lsz name,[lng,data] { ; from MFAR [mike.dld] + common + if used name + label name + end if + forward + if (used name)&(lang eq lng) + db data + end if + common + if used name + .size = $-name + end if +} + + + +; easy system call macro +macro mpack dest, hsrc, lsrc +{ + if (hsrc eqtype 0) & (lsrc eqtype 0) + mov dest, (hsrc) shl 16 + lsrc + else + if (hsrc eqtype 0) & (~lsrc eqtype 0) + mov dest, (hsrc) shl 16 + add dest, lsrc + else + mov dest, hsrc + shl dest, 16 + add dest, lsrc + end if + end if +} + +macro __mov reg,a,b { ; mike.dld + if (~a eq)&(~b eq) + mpack reg,a,b + else if (~a eq)&(b eq) + mov reg,a + end if +} + +macro mcall a,b,c,d,e,f { ; mike.dld + __mov eax,a + __mov ebx,b + __mov ecx,c + __mov edx,d + __mov esi,e + __mov edi,f + int 0x40 +} + + + +; language for programs +lang fix ru ; ru en fr ge fi + + + +; optimize the code for size +__regs fix + +macro add arg1,arg2 + { + if (arg2 eqtype 0) + if (arg2) = 1 + inc arg1 + else + add arg1,arg2 + end if + else + add arg1,arg2 + end if + } + +macro sub arg1,arg2 + { + if (arg2 eqtype 0) + if (arg2) = 1 + dec arg1 + else + sub arg1,arg2 + end if + else + sub arg1,arg2 + end if + } + +macro mov arg1,arg2 + { + if (arg1 in __regs) & (arg2 eqtype 0) + if (arg2) = 0 + xor arg1,arg1 + else if (arg2) = 1 + xor arg1,arg1 + inc arg1 + else if (arg2) = -1 + or arg1,-1 + else if (arg2) > -128 & (arg2) < 128 + push arg2 + pop arg1 + else + mov arg1,arg2 + end if + else + mov arg1,arg2 + end if + } + + +macro struct name + { + virtual at 0 + name name + sizeof.#name = $ - name + end virtual + } + +; structures used in MeOS +struc process_information + { + .cpu_usage dd ? ; +0 + .window_stack_position dw ? ; +4 + .window_stack_value dw ? ; +6 + .not_used1 dw ? ; +8 + .process_name rb 12 ; +10 + .memory_start dd ? ; +22 + .used_memory dd ? ; +26 + .PID dd ? ; +30 + .x_start dd ? ; +34 + .y_start dd ? ; +38 + .x_size dd ? ; +42 + .y_size dd ? ; +46 + .slot_state dw ? ; +50 + rb (1024-52) + } +struct process_information + +struc system_colors + { + .frame dd ? + .grab dd ? + .grab_button dd ? + .grab_button_text dd ? + .grab_text dd ? + .work dd ? + .work_button dd ? + .work_button_text dd ? + .work_text dd ? + .work_graph dd ? + } +struct system_colors + + +; constants + +; events +EV_IDLE = 0 +EV_TIMER = 0 +EV_REDRAW = 1 +EV_KEY = 2 +EV_BUTTON = 3 +EV_EXIT = 4 +EV_BACKGROUND = 5 +EV_MOUSE = 6 +EV_IPC = 7 +EV_STACK = 8 + +; event mask bits for function 40 +EVM_REDRAW = 1b +EVM_KEY = 10b +EVM_BUTTON = 100b +EVM_EXIT = 1000b +EVM_BACKGROUND = 10000b +EVM_MOUSE = 100000b +EVM_IPC = 1000000b +EVM_STACK = 10000000b \ No newline at end of file diff --git a/programs/develop/scc/NOTICE.H b/programs/develop/scc/NOTICE.H new file mode 100644 index 0000000000..1da217c0f3 --- /dev/null +++ b/programs/develop/scc/NOTICE.H @@ -0,0 +1,6 @@ +/* +** NOTICE.H -- Small C Signon Notice. +*/ +#define VERSION "Small C 386/NT, Version 3.1, Revision Level 1\n" +#define CRIGHT1 "Copyright 1982-1998 J. E. Hendrix H T Walheim\n" +#define CRIGHT2 "2008 - port to KolibriOS (jacekm.pl@gmail.com)\n\n" diff --git a/programs/develop/scc/OSFUNC.ASM b/programs/develop/scc/OSFUNC.ASM new file mode 100644 index 0000000000..fc6eba83dc --- /dev/null +++ b/programs/develop/scc/OSFUNC.ASM @@ -0,0 +1,681 @@ +include "macros.inc" +; +; OS function implementation +; SmallC for KolibriOS +; + +;B+ General definitions + +;B+ File defs + ;const + ;param + BAD equ -1 + files equ 100 + save_buffer equ 0x20000 ;32 + save_buffer_w equ 0x400000 ;32 + save_file_name equ 0x20000 + + ;system + EOF equ -1 + + ;memory + fileinfo equ I_END + start_data equ (fileinfo+16384) + ; + mem_heap equ 0x100000 + ; + g_handle equ 0x300000 + ;dword - pointer - relative to file + ;dword - begin of file + ;dword - file size + ;dword - 0/1 <=> read/write +;E:. + +;E:. + +init_osfunc: +;B+ Init OS functions +;B+ Clear file handles + mov edi,g_handle + mov ecx,files + shl ecx,2 ;*4 + xor eax,eax + cld +rep stosd +;E:. + ret +;E:. + +;B+ Main OS functions +ppp dd 70 + +_OS_fopen: +;B+ Implement "fopen" + ;esp+4 - mode + ;esp+8 - file name + +; mov eax,-1 +; int 0x40 + +; mov ebx,[esp+8]; +; push dword 10 +; push dword [ppp] +; push ebx +; push dword 12 +; call _outstrg +; add esp,4*4 +; add [ppp],10 + +; cmp byte [ebx+8],0 +; jne .l +; mov byte [ebx+8],'?' +;.l: +; cmp [ppp],80 +; je .l + + mov ecx , [esp+4] ; file mode + mov [file_mode],ecx +;B+ Copy file name + + + mov esi,[esp+8] + mov edi,[p_filename] + mov ecx,12 +.next_copy: +lodsb + ;fill name (space) + or al,al + jz .fill_space + ;set upper case + cmp al,'a' + jb .good_char + cmp al,'z' + ja .good_char + add al,'A'-'a' +.good_char: +stosb + dec ecx + jnz .next_copy +.fill_space: + mov al,' ' + cld +rep stosb + +mov eax,[file_mode] + cmp byte [eax],'w' + jne .no_wri + + +;B+ Copy file name + mov esi,[esp+8] + mov edi,[w_file_name] + mov ecx,12 +.next_copy2: +lodsb + ;fill name (space) + or al,al + jz .fill_space2 + ;set upper case + cmp al,'a' + jb .good_char2 + cmp al,'z' + ja .good_char2 + add al,'A'-'a' +.good_char2: +stosb + dec ecx + jnz .next_copy2 +.fill_space2: + mov al,' ' + cld +rep stosb + +.no_wri: + + + +;E:. +;B+ Find file handle + mov eax,g_handle +.new_handle: + cmp dword [eax+4],0 + je .find_place + add eax,16 + cmp eax,g_handle+files*16-16 + jne .new_handle + xor eax,eax ; no free handle + ret +.find_place: +; TMP: mov eax,[.ccc] +; TMP: add [.ccc],16 +;E:. + push eax +;B+ Test open mode + mov eax,[esp+4+4] + cmp byte [eax],'r' + je .open_read + cmp byte [eax],'w' + je .open_write + ;bad mode + add esp,4 + mov eax,eax ; invalid open mode + ret +;E:. + +; TMP:.ccc dd g_handle + +.open_read: +;B+ Open for read +;B+ Read file + + ;Wait to read correct + mov ebx,100 + mov eax,5 + int 0x40 + + mov eax,[g_fileend] + mov dword [file_parameters+2*4],2000 ;read all + mov dword [file_parameters+3*4],eax + + mov dword [file_parameters],0 + mov ebx,file_parameters + mov eax,58 + int 0x40 +;E:. + +;B+ TEST FILE FOUND + or eax,eax + jz .file_found + cmp eax,5 + je .file_found + +; mov ecx,eax ; eax +; mov ebx,8 shl 16 + 0x0100 +; mov edx,100 shl 16 + 120 +; mov esi,0xffffff +; mov eax,47 +; int 0x40 + + ;file not found - return 0 + add esp,4 + xor eax,eax + ret +.file_found: +;E:. + pop eax + push ebx + xchg eax,ebx +;B+ Fill file handle + ;save current pointer + xor eax,eax + mov [ebx],eax + + ;save file begin + mov eax,[g_fileend] + mov [ebx+4],eax + + ;save file size + pop eax + mov [ebx+8],eax + ;reserve file zone + add eax,7 + and eax,not 7 + add [g_fileend],eax + + ;save file mode + mov eax,0 ;read + mov [ebx+12],eax +;E:. + xchg eax,ebx ;return pointer place + ret +;E:. + +.open_write: +;B+ Open for write +;B+ Reserve filename + +; p_filename -> w_file_name + +;pusha +; mov eax, w_file_name +; mov ebx, [p_filename] +;.ncpy: +; mov ch, byte [ebx] +; cmp ch, 0 +; je .ecpy +; mov [eax], ch +; inc dword [eax] +; inc dword [ebx] +;jmp .ncpy +; +;.ecpy: +; +;popa + + mov [save_buffer_p], save_buffer_w + + mov esi,[p_filename] + mov edi,[g_fileend] + mov ecx,12 + cld +rep movsb + add [g_fileend],16 +;E:. + pop ebx +;B+ Fill file handle + ;save begin pointer + xor eax,eax + mov [ebx],eax + + ;save file begin + mov eax,[g_fileend] + mov [ebx+4],eax + + ;save file zone + mov dword [ebx+8],save_buffer + ;reserve file zone + add [g_fileend],save_buffer + + ;save file mode + mov eax,1 ;write + mov [ebx+12],eax +;E:. + xchg eax,ebx ;return pointer place + ret +;E:. + +;E:. + +_OS_fclos: +;B+ Close file + ;esp+4 - file handle + +;B+ Test write mode - save file + mov eax,[esp+4] + mov eax,[eax+12] + cmp eax,1 +;E:. + jne .no_write + + mov eax, [esp+4] + mov ecx, [eax] + mov ebx, [eax+8] + + mov ebx, [save_buffer_p] + sub ebx, save_buffer_w + ; ebx = number of read bytes = file size + ; save loaded file + mov [dest_info.bytes],ebx ; file size in bytes + + mov [dest_info.bytes+4], save_buffer_w + ;mov eax, [p_filename];[w_file_name] + ;mov [destination],eax + mov eax,70 + mov ebx,dest_info + mcall + + ; check if 58 function failed + test eax,eax + je .ok_write + add eax,7 ; error number += 7 + cmp eax,6+7 + jna .copy_error + mov eax,7+7 + jmp .copy_error + +.copy_error: + .ok_write: + + +;E:. + jmp .read + + .no_write: +;B+ Test read mode - if no error end + cmp eax,0 + je .read + mov eax,BAD + ret +;E:. +.read: + +;B+ Relace memory + ;find file size + mov eax,[esp+4] + mov ecx,[eax+8] + add ecx,7 + and ecx,not 7 + push ecx + + ;mov memory + mov esi,[eax+4] + mov edi,esi + add esi,ecx + mov ecx,[g_fileend] + sub ecx,edi + jz .is_last + shr ecx,2 + inc ecx ;not neccessery + cld +rep movsd + ;update gl. memory +.is_last: + pop ecx + sub dword [g_fileend],ecx + + ;update file pointers + mov edx,ecx + mov ecx,[eax+4] + mov eax,g_handle +.new_handle1: + mov ebx,[eax+4] + cmp ebx,ecx + jbe .no_update + sub ebx,edx + mov [eax+4],ebx +.no_update: + add eax,16 + cmp eax,g_handle+files*16 + jne .new_handle1 + + ;clear handle + mov edi,[esp+4] + xor eax,eax + cld + stosd + stosd + stosd + stosd +;E:. + ret +;E:. + +_OS_fgetc: +;B+ Load char from file + ;esp+4 - input file + + mov eax,[esp+4] + mov ebx,[eax] + cmp ebx,[eax+8] + je .eof + inc dword [eax] + add ebx,[eax+4] + movzx eax,byte [ebx] + ret +.eof: + mov eax,EOF + ret +;E:. + +;rrr db 'g',0 + +_OS_fputc: +;B+ Save char to file + ;esp+4 - output file + ;esp+8 - char to write + +;push dword '<' +;mov cl,1 +;push dword 0 +;call test_outch +;add esp,8 + + + +;B+ Temp - write direct. + cmp dword [esp+4],__iob + jne .real_write0 + jmp _OS_exit +.real_write0: + cmp dword [esp+4],__iob+32 + jne .real_write1 + mov [print_textcolor],0x00ffff + jmp test_outch +.real_write1: + cmp dword [esp+4],__iob+64 + jne .real_write2 + mov [print_textcolor],0x77ffff + jmp test_outch +.real_write2: +;E:. + +mov ebx,[save_buffer_p] +mov eax,[esp+8] +mov [ebx],eax +inc dword [save_buffer_p] + + +ret + +;push dword '<' +;mov cl,1 +;push dword 0 +;call test_outch +;add esp,8 + + mov eax,[esp+4] + mov ebx,[eax] + push ebx + cmp ebx,[eax+8] + jne .write_normal + + + +;B+ Alloc save_buffer bytes + ;mov memory + mov ebx,[esp+4+4] + mov esi,[g_fileend] + mov edi,esi + add edi,save_buffer-4 + mov ecx,esi + sub ecx,[ebx+4] + sub ecx,[ebx+8] + shr ecx,2 + jz .is_last + sub esi,4 + std +rep movsd +.is_last: + + ;expand file size + add dword [eax+8],save_buffer + + ;update file pointers + mov ebx,g_handle +.new_handle: + mov ecx,[ebx+4] + cmp [eax+4],ecx + jae .no_update + add dword [ebx+4],save_buffer +.no_update: + add ebx,16 + cmp ebx,g_handle+files*16-16 + jne .new_handle +;E:. + +.write_normal: + pop ebx + inc dword [eax] + add ebx,[eax+4] + mov cl,[esp+8] + mov byte [ebx],cl + +;sub [test_outch.x_coord],2 +; +;push dword '>' +;mov cl,1 +;push dword 0 +;call test_outch +;add esp,8 +; +;sub [test_outch.x_coord],6 + + xor eax,eax + ret +;E:. + +_OS_callo: +;B+ Alloc memory + ;find all size + mov eax,[esp+4] + mov ebx,[esp+8] + mul ebx + push eax + + ;clear memory + mov edi,[.mem_p] + xor eax,eax + mov ecx,[esp] + cld +rep stosb + + ;update new memory pointer + pop ebx + push dword [.mem_p] + add ebx,7 + and ebx,not 7 + add [.mem_p],ebx + + ;return value + pop eax + ret + +.mem_p dd mem_heap +;E:. + +_OS_exit: +;B+ Exit program +; ;TMP +; mov eax,-1 +; int 0x40 + mov esp,[exit_esp] + sub esp,4 + ret +;E:. + +;E:. + + + + +;B+ Test procedures + +;B+ Definitions +LEFTMARGIN equ 11 +BEGIN_CHARS equ 20 +NL equ 10 +;E:. + +print_textcolor dd 0x00ffff + +_file_beg: +;B+ Show begin of file - test fopen + ;esp+4 - file handle (descriptor) + + mov eax,[esp+4] + mov ebx,10 shl 16 + 30 + mov ecx,[print_textcolor] + mov edx,[eax+4] + mov esi,BEGIN_CHARS + mov eax,4 + int 0x40 + ret +;E:. + +_outstrg: +;B+ Draw black text - test function call + ;esp+4*4 - x + ;esp+4*3 - y + ;esp+4*2 - *c + ;esp+4*1 - len + + mov ebx,[esp+4*4] + shl ebx,16 + mov bx,[esp+4*3] + mov ecx,[print_textcolor] + mov edx,[esp+4*2] + mov esi,[esp+4] + mov eax,4 + int 0x40 + ret +;E:. + +test_outch: +;B+ Draw one char - use as _OS_fputc, to test printf(...) + ;esp+8 - char to write + + ;this is test! \b \r - not nesessary + + mov al,[esp+8] + cmp al,NL + jne .no_newline + add [.y_coord],10 + mov [.x_coord],LEFTMARGIN + ret +.no_newline: + + mov ebx,[.x_coord] + shl ebx,16 + mov bx,word [.y_coord] + mov ecx,[print_textcolor] + mov [.out_char],al + mov edx,.out_char + mov esi,1 + mov eax,4 + int 0x40 + + add [.x_coord],6 +;mov eax,5 +;mov ebx,5 +;int 0x40 + ret + +.x_coord dd LEFTMARGIN +.y_coord dd 60 +.out_char db 0 +;E:. + +;E:. + +;B+ Data section +;B+ Memory managment +g_fileend dd g_handle+files*4*4 ;from 2MB+100*4*4 +;w_buff dd +;E:. + +save_buffer_p dd save_buffer_w +;B+ File parameters +file_parameters: + dd 0x0 ; mode + dd 0x0 ; first block + dd 1000 ; block read + dd -1 ; return place + dd fileinfo ; work area +filepath: times 100 db 0 + +file_mode dd 0 ;file mode + +dest_info: ; DESTINATION FILEINFO + dd 2 + dd 0 + dd 0 +.bytes dd ? + dd save_buffer + db 0 +destination: + dd save_file_name + ;db "EXAMPLE.ASM",0 + + + +w_file_name dd save_file_name + +p_filename dd 0x0 +;E:. +;E:. + + ;TO DO + mov eax,-1 + int 0x40 + ;TO DO + diff --git a/programs/develop/scc/README.TXT b/programs/develop/scc/README.TXT new file mode 100644 index 0000000000..bac753132e --- /dev/null +++ b/programs/develop/scc/README.TXT @@ -0,0 +1,18 @@ +############################## +# SCC (simple c compiler) +# port of CCOMP to KolibriOS +# +###### +# contact: jacekm.pl@gmail.com +############################## + +KNOWN BUGS: + * only directiory /rd/1/ works + +HISTORY: + * 0.5.3: + - output dir fixed + * 0.5.2: + - static output file + * 0.5.1: + - first realase \ No newline at end of file diff --git a/programs/develop/scc/SCC.ASM b/programs/develop/scc/SCC.ASM new file mode 100644 index 0000000000..8406710b57 --- /dev/null +++ b/programs/develop/scc/SCC.ASM @@ -0,0 +1,392 @@ +; +; Port to KolibliOS +; (jacekm.pl@gmail.com) +; + +;B+ System header +use32 +org 0x0 + db 'MENUET01' + dd 0x01 + dd START + dd I_END + dd 0x500000 + dd 0x7fff0 + dd 0x0,0x0 +;E:. + +;B+ Include C files + ; Compiler tools + include "INTRINS.ASM" + + ; C Library ("stdio.asm") + include "LIBSTD.ASM" + + ; MenuetOS implement + include "OSFUNC.ASM" + +_fopen equ _OS_fopen +_fputc equ _OS_fputc +_fgetc equ _OS_fgetc +_fclose equ _OS_fclos + + ;Main program (compiled from C) + include "GETARG.ASM" + include "CC1.ASM" + include "CC2.ASM" + include "CC3.ASM" + include "CC4.ASM" +;E:. + +START: +;B+ Main cycle + call draw_window +still: + mov eax,10 + int 0x40 +still1: + + cmp eax,1 + je red + cmp eax,2 + je key + cmp eax,3 + je button + jmp still + +red: + call draw_window + jmp still + +key: + mov eax,2 + int 0x40 + jmp still + +button: + mov eax,17 + int 0x40 + + cmp ah,1 + jne .noclose + mov eax,-1 + int 0x40 +.noclose: + + cmp ah,2 + jne .no_run +; call begin_osfunc +;B+ Copy file path + mov esi,inp_path + mov edi,filepath + mov ecx,[p_len] + push ecx + cld +rep movsb + pop ecx + add ecx,filepath + mov [p_filename],ecx +;E:. +;B+ Clear word area + mov ebx,10 shl 16 + 280 + mov ecx,60 shl 16 + 250 + mov edx,0x303030 + mov eax,13 + int 0x40 +;E:. +;B+ Init parameters + mov ecx,_input + sub ecx,_nogo + mov edi,_nogo + xor eax,eax + cld +rep stosb + mov [_input],-1 + mov [_input2],-1 + mov [_usexpr],1 + mov [_ccode],1 + mov [_quote],34 + mov [test_outch.y_coord],60 +;E:. + call init_osfunc + push dword 4 + push args +;B+ Save exit ESP + mov [exit_esp],esp +;E:. + call _main + add esp,8 +; call end_osfunc +.no_run: + + cmp ah,3 + jne .no_path + mov eax,inp_path + mov bx,27 + call read_string + mov edx,[r_pos] + mov [p_len],edx + ; + cmp ah,10 + je still + jmp still1 +.no_path: + + cmp ah,4 + jne .no_file + mov eax,inp_file + mov bx,42 + call read_string + mov edx,[r_pos] + mov [f_len],edx + ; + cmp ah,10 + je still + jmp still1 +.no_file: + + jmp still +;E:. + +read_string: +;B+ Read string + mov [c_place],eax + mov [r_pos],0 + mov [rel_x],60 + mov [rel_y],bx + + mov ebx,60 + shl ebx,16 + mov bx,6*26+1 + movzx ecx,[rel_y] + shl ecx,16 + mov cx,10 + mov edx,0x000000 + mov eax,13 + int 0x40 + + add ecx,11 shl 16 + mov cx,2 + mov edx,0x999999 + int 0x40 + +.next: + mov ebx,[rel_x] + shl ebx,16 + mov bx,7 + movzx ecx,[rel_y] + shl ecx,16 + mov cx,10 + mov edx,0x000000 + mov eax,13 + int 0x40 + + mov ebx,[c_place] + mov byte [ebx],0 + + mov eax,10 + int 0x40 + cmp eax,2 + je .key + jmp .to_ret +.key: + + mov eax,2 + int 0x40 + cmp ah,13 + jne .no_enter + jmp .to_ret +.no_enter: + + cmp ah,8 + jne .no_back + cmp [r_pos],0 + je .next + dec [r_pos] + dec [c_place] + sub [rel_x],6 + jmp .next +.no_back: + + cmp [r_pos],25 + je .next + + cmp ah,'a' + jb .no_sm_l + cmp ah,'z' + ja .no_sm_l + add ah,'A'-'a' +.no_sm_l: + + mov byte [ebx],ah + mov [char],ah + inc [c_place] + inc [r_pos] + + mov ebx,[rel_x] + inc ebx + shl ebx,16 + mov bx,[rel_y] + inc bx + mov ecx,0x00ffff + mov edx,char + mov esi,1 + mov eax,4 + int 0x40 + + add [rel_x],6 + jmp .next + +.to_ret: + push eax + mov ebx,60 + shl ebx,16 + mov bx,6*26+1 + movzx ecx,[rel_y] + add ecx,11 + shl ecx,16 + mov cx,2 + mov edx,0x000000 + mov eax,13 + int 0x40 + pop eax + ret + +rel_x dd 60 +rel_y dw 0x0 +c_place dd 0x0 +r_pos dd 0x0 +char db '?' +;E:. + +draw_window: +;B+ Draw window + mov eax,12 + mov ebx,1 + int 0x40 + + mov ebx,100*65536+300 + mov ecx,100*65536+320 + mov edx,0x035555DD + mov esi,0x805080d0 + mov edi,0x005080d0 + mov eax,0 + int 0x40 + + mov ebx,8*65536+8 + mov ecx,0x10ddeeff + mov edx,caption + mov esi,caption_end-caption + mov eax,4 + int 0x40 + + ;mov ebx,(300-19)*65536+12 + ;mov ecx,5*65536+12 + ;mov edx,1 + ;mov esi,0x6688dd + ;mov eax,8 + ;int 0x40 + +;B+ Hot buttons + mov ebx,220 shl 16 + 70 + mov ecx,25 shl 16 + 29 + mov edx,2 ; compile + mov esi,0x6688dd + mov eax,8 + int 0x40 + + mov ebx,10 shl 16 + 47 + mov ecx,26 shl 16 + 12 + mov edx,3 ; path + mov esi,0x6688dd + mov eax,8 + int 0x40 + + mov ebx,10 shl 16 + 47 + mov ecx,41 shl 16 + 12 + mov edx,4 ; file name + mov esi,0x6688dd + mov eax,8 + int 0x40 +;E:. + +;B+ Text in buttons + mov ebx,231 shl 16 + 36 + mov ecx,0x10ffffff + mov edx,txt_compile + mov esi,txt_compile_end-txt_compile + mov eax,4 + int 0x40 + + mov ebx,14 shl 16 + 28 + mov ecx,0xffffff + mov edx,txt_path + mov esi,txt_path_end-txt_path + int 0x40 + + mov ebx,14 shl 16 + 43 + mov edx,txt_file + mov esi,txt_file_end-txt_file + int 0x40 +;E:. + +;B+ Draw path / file name + mov ebx,61 shl 16 + 28 + mov ecx,0x00ffff + mov edx,inp_path + mov esi,[p_len] + mov eax,4 + int 0x40 + + mov ebx,61 shl 16 + 43 + mov ecx,0x00ffff + mov edx,inp_file + mov esi,[f_len] + mov eax,4 + int 0x40 +;E:. + + mov eax,12 + mov ebx,2 + int 0x40 + + ret +;E:. + +;B+ Data area + +;B+ Interface +inp_path: times 100 db '/RD/1/',0 +p_len dd 6 +inp_file: times 100 db 'EXAMPLE',0 +f_len dd 7 + +txt_compile db 'Compile' +txt_compile_end: +txt_path db 'Path ->' +txt_path_end: +txt_file db 'File ->' +txt_file_end: +;E:. + +;B+ Main arguments +args dd arg_str0,inp_file,arg_str2,arg_str3,arg_str4 + +arg_str0 db 'CC',0 +arg_str1 db 'prog',0 +arg_str2 db '-m',0 +arg_str3 db '-a',0 +arg_str4 db '-p',0 +;E:. + +;B+ System parameters +exit_esp dd 0x0 +;E:. + +caption db 'Small C compiler for KolibriOS v 0.5.3' +caption_end: + +times 8-($ mod 8) db 0 +;E:. + +I_END: diff --git a/programs/develop/scc/STDIO.H b/programs/develop/scc/STDIO.H new file mode 100644 index 0000000000..cd1f4a737b --- /dev/null +++ b/programs/develop/scc/STDIO.H @@ -0,0 +1,33 @@ +/* +** STDIO.H -- Standard Small C Definitions. +*/ + +extern char _iob[]; + +#define exit OS_exit +#define fopen OS_fopen +#define fgetc OS_fgetc +#define fputc OS_fputc +#define fclose OS_fclose +#define calloc OS_calloc // stdlib.h + +#define SIZEOF_FILE 32 // sizeof (FILE) + +#define stdin (&_iob[0]) +#define stdout (&_iob[1*SIZEOF_FILE]) +#define stderr (&_iob[2*SIZEOF_FILE]) + +#define stdaux 3 /* file descriptor for standard auxiliary port */ +#define stdprn 4 /* file descriptor for standard printer */ +#define FILE char /* supports "FILE *fp;" declarations */ +#define ERR (-2) /* return value for errors */ +#define EOF (-1) /* return value for end-of-file */ +#define YES 1 /* true */ +#define NO 0 /* false */ +#define NULL 0 /* zero */ +#define CR 13 /* ASCII carriage return */ +#define LF 10 /* ASCII line feed */ +#define BELL 7 /* ASCII bell */ +#define SPACE ' ' /* ASCII space */ +#define NEWLINE LF /* Small C newline character */ + diff --git a/programs/develop/scc/cc.h b/programs/develop/scc/cc.h new file mode 100644 index 0000000000..6aa0d245cf --- /dev/null +++ b/programs/develop/scc/cc.h @@ -0,0 +1,320 @@ +/* +** CC.H -- Symbol Definitions for Small-C compiler. +*/ + +#ifdef _MSC_VER +#define YES 1 /* true */ +#define NO 0 /* false */ +#define CR 13 /* ASCII carriage return */ +#define LF 10 /* ASCII line feed */ +#define BELL 7 /* ASCII bell */ +#define SPACE ' ' /* ASCII space */ +#define NEWLINE LF /* Small C newline character */ + +#endif + +/* +** size of 'int' +*/ + +#define INT32 /* if #defined int = 32 bits, else 16 */ + +/* +** ALIGNMENT +*/ + +#define ALIGN 4 + + +/* +** machine dependent parameters +*/ +#define BPD 4 /* bytes per dword */ +#define LBPD 2 /* log2(BPD) */ +#define BPW 2 /* bytes per word */ +#define LBPW 1 /* log2(BPW) */ +#define SBPC 1 /* stack bytes per character */ +#define ERRCODE 7 /* op sys return code */ +#define INTSIZE 4 + +/* +** symbol table format +*/ +#define IDENT 0 +#define TYPE 1 +#define CLASS 2 +#define SIZE 3 +#define OFFSET 5+2 +#define NAME (7+4) + +#define SYMAVG (12+4) +#define SYMMAX (16+4) + +/* +** symbol table parameters +*/ +#define NUMLOCS 25 +#define STARTLOC symtab +#define ENDLOC (symtab+NUMLOCS*SYMAVG) +#define NUMGLBS 200 +#define STARTGLB ENDLOC +#define ENDGLB (ENDLOC+(NUMGLBS-1)*SYMMAX) +#define SYMTBSZ /*3050*/ (NUMLOCS*SYMAVG + NUMGLBS*SYMMAX) + +/* +** system wide name size (for symbols) +*/ +#define NAMESIZE 9 +#define NAMEMAX 8 + +/* +** values for "IDENT" +*/ +#define LABEL 0 +#define VARIABLE 1 +#define ARRAY 2 +#define POINTER 3 +#define FUNCTION 4 + +#define PTRSIZE INTSIZE /* Size of pointer (must match an int!) */ + + +/* +** values for "TYPE" +** high order 14 bits give length of object +** low order 2 bits make type unique within length +*/ +/* LABEL 0 */ +#define CHR ( 1 << 2) +#define SHORT (BPW << 2) +#define INT (INTSIZE << 2) +#define UCHR (( 1 << 2) + 1) +#define USHORT ((BPW << 2) + 1) +#define UINT ((INTSIZE << 2) + 1) +#define UNSIGNED 1 + +/* +** values for "CLASS" +*/ +/* LABEL 0 */ +#define AUTOMATIC 1 +#define STATIC 2 +#define EXTERNAL 3 +#define AUTOEXT 4 + +/* +** segment types +*/ +#define DATASEG 1 +#define CODESEG 2 + +/* +** "switch" table +*/ +#define SWSIZ (2*BPW) +#define SWTABSZ (90*SWSIZ) + +/* +** "while" queue +*/ +#define WQTABSZ 30 +#define WQSIZ 3 +#define WQMAX (wq+WQTABSZ-WQSIZ) + +/* +** field offsets in "while" queue +*/ +#define WQSP 0 +#define WQLOOP 1 +#define WQEXIT 2 + +/* +** literal pool +*/ +#define LITABSZ 3000 +#define LITMAX (LITABSZ-1) + +/* +** input line +*/ +#define LINEMAX 127 +#define LINESIZE 128 + +/* +** entries in staging buffer +*/ +#define STAGESIZE 200 + +/* +** macro (#define) pool +*/ +#define MACNBR 300 +#define MACNSIZE (MACNBR*(NAMESIZE+2)) +#define MACNEND (macn+MACNSIZE) +#define MACQSIZE (MACNBR*7) +#define MACMAX (MACQSIZE-1) + +/* +** statement types +*/ +#define STIF 1 +#define STWHILE 2 +#define STRETURN 3 +#define STBREAK 4 +#define STCONT 5 +#define STASM 6 +#define STEXPR 7 +#define STDO 8 +#define STFOR 9 +#define STSWITCH 10 +#define STCASE 11 +#define STDEF 12 +#define STGOTO 13 +#define STLABEL 14 + +/* +** p-code symbols +** +** legend: +** 1 = primary register (pr in comments) +** 2 = secondary register (sr in comments) +** b = byte +** f = jump on false condition +** l = current literal pool label number +** m = memory reference by label +** n = numeric constant +** p = indirect reference thru pointer in sr +** r = repeated r times +** s = stack frame reference +** u = unsigned +** w = word +** _ (tail) = another p-code completes this one +*/ + + /* compiler-generated */ +#define ADD12 1 /* add sr to pr */ +#define ADDSP 2 /* add to stack pointer */ +#define AND12 3 /* AND sr to pr */ +#define ANEG1 4 /* arith negate pr */ +#define ARGCNTn 5 /* pass arg count to function */ +#define ASL12 6 /* arith shift left sr by pr into pr */ +#define ASR12 7 /* arith shift right sr by pr into pr */ +#define CALL1 8 /* call function thru pr */ +#define CALLm 9 /* call function directly */ +#define BYTE_ 10 /* define bytes (part 1) */ +#define BYTEn 11 /* define byte of value n */ +#define BYTEr0 12 /* define r bytes of value 0 */ +#define COM1 13 /* ones complement pr */ +#define DBL1 14 /* double pr */ +#define DBL2 15 /* double sr */ +#define DIV12 16 /* div pr by sr */ +#define DIV12u 17 /* div pr by sr unsigned */ + +#define DWORD_ 111 /* define dword (part 1) */ +#define DWORDn 112 /* define dword of value n */ +#define DWORDr0 113 /* define r dwords of value 0 */ + +#define ENTER 18 /* set stack frame on function entry */ +#define EQ10f 19 /* jump if (pr == 0) is false */ +#define EQ12 20 /* set pr TRUE if (sr == pr) */ +#define GE10f 21 /* jump if (pr >= 0) is false */ +#define GE12 22 /* set pr TRUE if (sr >= pr) */ +#define GE12u 23 /* set pr TRUE if (sr >= pr) unsigned */ +#define POINT1l 24 /* point pr to function's literal pool */ +#define POINT1m 25 /* point pr to mem item thru label */ +#define GETb1m 26 /* get byte into pr from mem thru label */ +#define GETb1mu 27 /* get unsigned byte into pr from mem thru label */ +#define GETb1p 28 /* get byte into pr from mem thru sr ptr */ +#define GETb1pu 29 /* get unsigned byte into pr from mem thru sr ptr */ + +#define GETd1m 107 /* get dword into pr from mem thru label */ +#define GETd1n 108 /* get dword of value n into pr */ +#define GETd1p 109 /* get dword into pr from mem thru sr ptr */ +#define GETd2n 110 /* get word of value n into sr */ + +#define GETw1m 30 /* get word into pr from mem thru label */ +#define GETw1n 31 /* get word of value n into pr */ +#define GETw1p 32 /* get word into pr from mem thru sr ptr */ +#define GETw2n 33 /* get word of value n into sr */ +#define GT10f 34 /* jump if (pr > 0) is false */ +#define GT12 35 /* set pr TRUE if (sr > pr) */ +#define GT12u 36 /* set pr TRUE if (sr > pr) unsigned */ +#define WORD_ 37 /* define word (part 1) */ +#define WORDn 38 /* define word of value n */ +#define WORDr0 39 /* define r words of value 0 */ +#define JMPm 40 /* jump to label */ +#define LABm 41 /* define label m */ +#define LE10f 42 /* jump if (pr <= 0) is false */ +#define LE12 43 /* set pr TRUE if (sr <= pr) */ +#define LE12u 44 /* set pr TRUE if (sr <= pr) unsigned */ +#define LNEG1 45 /* logical negate pr */ +#define LT10f 46 /* jump if (pr < 0) is false */ +#define LT12 47 /* set pr TRUE if (sr < pr) */ +#define LT12u 48 /* set pr TRUE if (sr < pr) unsigned */ +#define MOD12 49 /* modulo pr by sr */ +#define MOD12u 50 /* modulo pr by sr unsigned */ +#define MOVE21 51 /* move pr to sr */ +#define MUL12 52 /* multiply pr by sr */ +#define MUL12u 53 /* multiply pr by sr unsigned */ +#define NE10f 54 /* jump if (pr != 0) is false */ +#define NE12 55 /* set pr TRUE if (sr != pr) */ +#define NEARm 56 /* define near pointer thru label */ +#define OR12 57 /* OR sr onto pr */ +#define POINT1s 58 /* point pr to stack item */ +#define POP2 59 /* pop stack into sr */ +#define PUSH1 60 /* push pr onto stack */ +#define PUTbm1 61 /* put pr byte in mem thru label */ +#define PUTbp1 62 /* put pr byte in mem thru sr ptr */ + +#define PUTdm1 114 /* put pr dword in mem thru label */ +#define PUTdp1 115 /* put pr dword in mem thru sr ptr */ + +#define PUTwm1 63 /* put pr word in mem thru label */ +#define PUTwp1 64 /* put pr word in mem thru sr ptr */ +#define rDEC1 65 /* dec pr (may repeat) */ +#define REFm 66 /* finish instruction with label */ +#define RETURN 67 /* restore stack and return */ +#define rINC1 68 /* inc pr (may repeat) */ +#define SUB12 69 /* sub sr from pr */ +#define SWAP12 70 /* swap pr and sr */ +#define SWAP1s 71 /* swap pr and top of stack */ +#define SWITCH 72 /* find switch case */ +#define XOR12 73 /* XOR pr with sr */ + + /* optimizer-generated */ +#define ADD1n 74 /* add n to pr */ +#define ADD21 75 /* add pr to sr */ +#define ADD2n 76 /* add immediate to sr */ +#define ADDbpn 77 /* add n to mem byte thru sr ptr */ +#define ADDwpn 78 /* add n to mem word thru sr ptr */ +#define ADDm_ 79 /* add n to mem byte/word thru label (part 1) */ +#define COMMAn 80 /* finish instruction with ,n */ +#define DECbp 81 /* dec mem byte thru sr ptr */ +#define DECwp 82 /* dec mem word thru sr ptr */ +#define POINT2m 83 /* point sr to mem thru label */ +#define POINT2m_ 84 /* point sr to mem thru label (part 1) */ +#define GETb1s 85 /* get byte into pr from stack */ +#define GETb1su 86 /* get unsigned byte into pr from stack */ +#define GETw1m_ 87 /* get word into pr from mem thru label (part 1) */ +#define GETw1s 88 /* get word into pr from stack */ +#define GETw2m 89 /* get word into sr from mem (label) */ +#define GETw2p 90 /* get word into sr thru sr ptr */ +#define GETw2s 91 /* get word into sr from stack */ +#define INCbp 92 /* inc byte in mem thru sr ptr */ +#define INCwp 93 /* inc word in mem thru sr ptr */ +#define PLUSn 94 /* finish instruction with +n */ +#define POINT2s 95 /* point sr to stack */ +#define PUSH2 96 /* push sr */ +#define PUSHm 97 /* push word from mem thru label */ +#define PUSHp 98 /* push word from mem thru sr ptr */ +#define PUSHs 99 /* push word from stack */ +#define PUT_m_ 100 /* put byte/word into mem thru label (part 1) */ +#define rDEC2 101 /* dec sr (may repeat) */ +#define rINC2 102 /* inc sr (may repeat) */ +#define SUB_m_ 103 /* sub from mem byte/word thru label (part 1) */ +#define SUB1n 104 /* sub n from pr */ +#define SUBbpn 105 /* sub n from mem byte thru sr ptr */ +#define SUBwpn 106 /* sub n from mem word thru sr ptr */ + +#define PCODES 116 /* size of code[] (it's a [+ 1]) */ + diff --git a/programs/develop/scc/cc1.c b/programs/develop/scc/cc1.c new file mode 100644 index 0000000000..6bf987c41b --- /dev/null +++ b/programs/develop/scc/cc1.c @@ -0,0 +1,911 @@ +/* +** Small-C Compiler -- Part 1 -- Top End. +** Copyright 1982, 1983, 1985, 1988 J. E. Hendrix +** Copyright 1998 H T Walheim +** All rights reserved. +*/ + +#include +#include "notice.h" +#include "cc.h" + +/* +** miscellaneous storage +*/ +int + nogo, /* disable goto statements? */ + noloc, /* disable block locals? */ + opindex, /* index to matched operator */ + opsize, /* size of operator in characters */ + swactive, /* inside a switch? */ + swdefault,/* default label #, else 0 */ + *swnext, /* address of next entry */ + *swend, /* address of last entry */ + *stage, /* staging buffer address */ + *wq, /* while queue */ + argcs, /* static argc */ + *argvs, /* static argv */ + *wqptr, /* ptr to next entry */ + litptr, /* ptr to next entry */ + macptr, /* macro buffer index */ + pptr, /* ptr to parsing buffer */ + ch, /* current character of input line */ + nch, /* next character of input line */ + declared, /* # of local bytes to declare, -1 when declared */ + iflevel, /* #if... nest level */ + skiplevel,/* level at which #if... skipping started */ + nxtlab, /* next avail label # */ + litlab, /* label # assigned to literal pool */ + csp, /* compiler relative stk ptr */ + argstk, /* function arg sp */ + argtop, /* highest formal argument offset */ + ncmp, /* # open compound statements */ + errflag, /* true after 1st error in statement */ + eof, /* true on final input eof */ + output, /* fd for output file */ + files, /* true if file list specified on cmd line */ + filearg = 0, /* cur file arg index */ + input = EOF, /* fd for input file */ + input2 = EOF, /* fd for "#include" file */ + usexpr = YES, /* true if value of expression is used */ + ccode = YES, /* true while parsing C code */ + *snext, /* next addr in stage */ + *stail, /* last addr of data in stage */ + *slast, /* last addr in stage */ + listfp, /* file pointer to list device */ + lastst, /* last parsed statement type */ + oldseg; /* current segment (0, DATASEG, CODESEG) */ + +char + optimize, /* optimize output of staging buffer? */ + alarm, /* audible alarm on errors? */ + monitor, /* monitor function headers? */ + pause, /* pause for operator on errors? */ + *symtab, /* symbol table */ + *litq, /* literal pool */ + *macn, /* macro name buffer */ + *macq, /* macro string buffer */ + *pline, /* parsing buffer */ + *mline, /* macro buffer */ + *line, /* ptr to pline or mline */ + *lptr, /* ptr to current character in "line" */ + *glbptr, /* global symbol table */ + *locptr, /* next local symbol table entry */ + quote[2] = {'"'}, /* literal string for '"' */ + *cptr, /* work ptrs to any char buffer */ + *cptr2, + *cptr3, + msname[NAMESIZE], /* macro symbol name */ + ssname[NAMESIZE]; /* static symbol name */ + +int op[16] = { /* p-codes of signed binary operators */ + OR12, /* level5 */ + XOR12, /* level6 */ + AND12, /* level7 */ + EQ12, NE12, /* level8 */ + LE12, GE12, LT12, GT12, /* level9 */ + ASR12, ASL12, /* level10 */ + ADD12, SUB12, /* level11 */ + MUL12, DIV12, MOD12 /* level12 */ + }; + +int op2[16] = { /* p-codes of unsigned binary operators */ + OR12, /* level5 */ + XOR12, /* level6 */ + AND12, /* level7 */ + EQ12, NE12, /* level8 */ + LE12u, GE12u, LT12u, GT12u, /* level9 */ + ASR12, ASL12, /* level10 */ + ADD12, SUB12, /* level11 */ + MUL12u, DIV12u, MOD12u /* level12 */ + }; + +/* +** execution begins here +*/ +main(argc, argv) int argc, *argv; { + fputs(VERSION, stdout); + fputs(CRIGHT1, stdout); + fputs(CRIGHT2, stdout); + argcs = argc; + argvs = argv; + swnext = calloc(SWTABSZ, 1); + swend = swnext+(SWTABSZ-SWSIZ); + stage = calloc(STAGESIZE, 2*INTSIZE); + wqptr = + wq = calloc(WQTABSZ, INTSIZE); + litq = calloc(LITABSZ, 1); + macn = calloc(MACNSIZE, 1); + macq = calloc(MACQSIZE, 1); + pline = calloc(LINESIZE, 1); + mline = calloc(LINESIZE, 1); + slast = stage+(STAGESIZE*2*INTSIZE); + symtab = calloc((NUMLOCS*SYMAVG + NUMGLBS*SYMMAX), 1); + locptr = STARTLOC; + glbptr = STARTGLB; + + ask(); /* get user options */ + openfile(); /* and initial input file */ + preprocess(); /* fetch first line */ + header(); /* intro code */ + setcodes(); /* initialize code pointer array */ + parse(); /* process ALL input */ + trailer(); /* follow-up code */ + fclose(output); /* explicitly close output */ + } + +/******************** high level parsing *******************/ + +/* +** process all input text +** +** At this level, only static declarations, +** defines, includes and function +** definitions are legal... +*/ +parse() { + while (eof == 0) { + if (amatch("extern", 6)) dodeclare(EXTERNAL); + else if(dodeclare(STATIC)) ; + else if( match("#asm")) doasm(); + else if( match("#include")) doinclude(); + else if( match("#define")) dodefine(); + else dofunction(); + blanks(); /* force eof if pending */ + } + } + +/* +** test for global declarations +*/ +dodeclare(class) int class; { + if (amatch("char", 4)) declglb(CHR, class); + else if(amatch("unsigned", 8)) { + if (amatch("char", 4)) declglb(UCHR, class); + else {amatch("int", 3); declglb(UINT, class);} + } + else if(amatch("int", 3) + || class == EXTERNAL) declglb(INT, class); + else return 0; + ns(); + return 1; + } + +/* +** declare a static variable +*/ +declglb(type, class) +int type, class; + { + int id, dim; + + while(1) + { + if(endst()) + return; /* do line */ + if(match("*")) + { + id = POINTER; dim = 0; + } + else + { + id = VARIABLE; dim = 1; + } + if(symname(ssname) == 0) + illname(); + if(findglb(ssname)) + multidef(ssname); + if(id == VARIABLE) + { + if (match("(")) + { + id = FUNCTION; need(")"); + } + else if(match("[")) + { + id = ARRAY; dim = needsub(); + } + } + if (class == EXTERNAL) + external(ssname, type >> 2, id); + else if (id != FUNCTION) + initials(type >> 2, id, dim); + if(id == POINTER) + addsym(ssname, id, type, PTRSIZE, 0, &glbptr, class); + else + addsym(ssname, id, type, dim * (type >> 2), 0, &glbptr, class); + if(match(",") == 0) + return; + } + } + +/* +** initialize global objects +*/ +initials(size, ident, dim) int size, ident, dim; { + int savedim; + litptr = 0; + if(dim == 0) dim = -1; /* *... or ...[] */ + savedim = dim; +/* public(ident); */ + if(match("=")) { + if(match("{")) { + while(dim) { + init(size, ident, &dim); + if(match(",") == 0) break; + } + need("}"); + } + else init(size, ident, &dim); + } + if(savedim == -1 && dim == -1) { + if(ident == ARRAY) error("need array size"); + stowlit(0, size = PTRSIZE); + } + +/* FASM */ + public(ident); + if(litptr>0) dumplits(size); + else if(dim>0) + {/*In FASM: ": TIMES D 0" */ + fputc(':',output); + } + dumpzero(size, dim); /* only if dim > 0 */ +/* FASM */ + } + +/* +** evaluate one initializer +*/ +init(size, ident, dim) int size, ident, *dim; { + int value; + if(string(&value)) { + if(ident == VARIABLE || size != 1) + error("must assign to char pointer or char array"); + *dim -= (litptr - value); + if(ident == POINTER) point(); + } + else if(constexpr(&value)) { + if(ident == POINTER) error("cannot assign to pointer"); + stowlit(value, size); + *dim -= 1; + } + } + +/* +** get required array size +*/ +needsub() { + int val; + if(match("]")) return 0; /* null size */ + if(constexpr(&val) == 0) val = 1; + if(val < 0) { + error("negative size illegal"); + val = -val; + } + need("]"); /* force single dimension */ + return val; /* and return size */ + } + +/* +** open an include file +*/ +doinclude() { + int i; char str[30]; + blanks(); /* skip over to name */ + if(*lptr == '"' || *lptr == '<') ++lptr; + i = 0; + while(lptr[i] + && lptr[i] != '"' + && lptr[i] != '>' + && lptr[i] != '\n') { + str[i] = lptr[i]; + ++i; + } + str[i] = NULL; + if((input2 = fopen(str,"r")) == NULL) { + input2 = EOF; + error("open failure on include file"); + } + kill(); /* make next read come from new file (if open) */ + } + +/* +** define a macro symbol +*/ +dodefine() { + int k; + if(symname(msname) == 0) { + illname(); + kill(); + return; + } +/* + puts (msname); + puts (" is #defined\n"); +*/ + k = 0; + if(search(msname, macn, NAMESIZE+2, MACNEND, MACNBR, 0) == 0) { + if(cptr2 = cptr) + while(*cptr2++ = msname[k++]) ; + else { + error("macro name table full"); + return; + } + } + putint(macptr, cptr+NAMESIZE, 2 /*INTSIZE*/); + while(white()) gch(); + while(putmac(gch())); + if(macptr >= MACMAX) { + error("macro string queue full"); + exit(ERRCODE); + } + } + +putmac(c) char c; { + macq[macptr] = c; + if(macptr < MACMAX) ++macptr; + return c; + } + +/* +** begin a function +** +** called from "parse" and tries to make a function +** out of the following text +*/ +dofunction() { + char *ptr; + nogo = /* enable goto statements */ + noloc = /* enable block-local declarations */ + lastst = /* no statement yet */ + litptr = 0; /* clear lit pool */ + litlab = getlabel(); /* label next lit pool */ + locptr = STARTLOC; /* clear local variables */ + if(match("void")) blanks(); /* skip "void" & locate header */ + if(monitor) lout(line, stderr); + if(symname(ssname) == 0) { + error("illegal function or declaration"); + errflag = 0; + kill(); /* invalidate line */ + return; + } + if(ptr = findglb(ssname)) { /* already in symbol table? */ + if(ptr[CLASS] == AUTOEXT) + ptr[CLASS] = STATIC; + else multidef(ssname); + } + else addsym(ssname, FUNCTION, INT, 0, 0, &glbptr, STATIC); + public(FUNCTION); + argstk = 0; /* init arg count */ + if(match("(") == 0) error("no open paren"); + while(match(")") == 0) { /* then count args */ + if(symname(ssname)) { + if(findloc(ssname)) multidef(ssname); + else { + addsym(ssname, 0, 0, 0, argstk, &locptr, AUTOMATIC); + argstk += INTSIZE; + } + } + else { + error("illegal argument name"); + skip(); + } + blanks(); + if(streq(lptr,")") == 0 && match(",") == 0) + error("no comma"); + if(endst()) break; + } + csp = 0; /* preset stack ptr */ + argtop = argstk+INTSIZE; /* account for the pushed BP */ + while(argstk) { + if (amatch("char", 4)) {doargs(CHR); ns();} + else if(amatch("int", 3)) {doargs(INT); ns();} + else if(amatch("unsigned", 8)) { + if (amatch("char", 4)) {doargs(UCHR); ns();} + else {amatch("int", 3); doargs(UINT); ns();} + } + else {error("wrong number of arguments"); break;} + } + gen(ENTER, 0); + statement(); + if(lastst != STRETURN && lastst != STGOTO) + gen(RETURN, 0); + if(litptr) { + toseg(DATASEG); + gen(REFm, litlab); + dumplits(1); /* dump literals */ + } + } + +/* +** declare argument types +*/ +doargs(type) int type; { + int id, sz; + char c, *ptr; + while(1) { + if(argstk == 0) return; /* no arguments */ + if(decl(type, POINTER, &id, &sz)) { + if(ptr = findloc(ssname)) { + ptr[IDENT] = id; + ptr[TYPE] = type; + putint(sz, ptr+SIZE, INTSIZE); + putint(argtop-getint(ptr+OFFSET, INTSIZE), ptr+OFFSET, INTSIZE); + } + else error("not an argument"); + } + argstk = argstk - INTSIZE; /* cnt down */ + if(endst()) return; + if(match(",") == 0) error("no comma"); + } + } + +/* +** parse next local or argument declaration +*/ +decl(type, aid, id, sz) +int type, aid, *id, *sz; +{ + int n, p; + int mod; + if(match("(")) p = 1; + else p = 0; + if(match("*")) {*id = POINTER; *sz = PTRSIZE;} + else {*id = VARIABLE; *sz = type >> 2;} + if((n = symname(ssname)) == 0) illname(); + if(p && match(")")) ; + if(match("(")) + { + if(!p || *id != POINTER) + error("try (*...)()"); + need(")"); + } + else if(*id == VARIABLE && match("[")) + { + *id = aid; + if((*sz *= needsub()) == 0) + { + if(aid == ARRAY) error("need array size"); + *sz = PTRSIZE; /* size of pointer argument */ + } + } + mod = *sz % ALIGN; + + if (mod) + { + *sz = *sz + (ALIGN-mod); + } + return n; + } + +/******************** start 2nd level parsing *******************/ + +/* +** statement parser +*/ +statement() { + if(ch == 0 && eof) return; + else if(amatch("char", 4)) {declloc(CHR); ns();} + else if(amatch("int", 3)) {declloc(INT); ns();} + else if(amatch("unsigned", 8)) { + if (amatch("char", 4)) {declloc(UCHR); ns();} + else {amatch("int", 3); declloc(UINT); ns();} + } + else { + if(declared >= 0) { + if(ncmp > 1) nogo = declared; /* disable goto */ + gen(ADDSP, csp - declared); + declared = -1; + } + if(match("{")) compound(); + else if(amatch("if", 2)) {doif(); lastst = STIF;} + else if(amatch("while", 5)) {dowhile(); lastst = STWHILE;} + else if(amatch("do", 2)) {dodo(); lastst = STDO;} + else if(amatch("for", 3)) {dofor(); lastst = STFOR;} + else if(amatch("switch", 6)) {doswitch(); lastst = STSWITCH;} + else if(amatch("case", 4)) {docase(); lastst = STCASE;} + else if(amatch("default", 7)) {dodefault(); lastst = STDEF;} + else if(amatch("goto", 4)) {dogoto(); lastst = STGOTO;} + else if(dolabel()) lastst = STLABEL; + else if(amatch("return", 6)) {doreturn(); ns(); lastst = STRETURN;} + else if(amatch("break", 5)) {dobreak(); ns(); lastst = STBREAK;} + else if(amatch("continue", 8)) {docont(); ns(); lastst = STCONT;} + else if(match(";")) errflag = 0; + else if(match("#asm")) {doasm(); lastst = STASM;} + else {doexpr(NO); ns(); lastst = STEXPR;} + } + return lastst; + } + +/* +** declare local variables +*/ +declloc(type) int type; { + int id, sz; + if(swactive) error("not allowed in switch"); + if(noloc) error("not allowed with goto"); + if(declared < 0) error("must declare first in block"); + while(1) { + if(endst()) return; + decl(type, ARRAY, &id, &sz); + declared += sz; + addsym(ssname, id, type, sz, csp - declared, &locptr, AUTOMATIC); + if(match(",") == 0) return; + } + } + +compound() { + int savcsp; + char *savloc; + savcsp = csp; + savloc = locptr; + declared = 0; /* may now declare local variables */ + ++ncmp; /* new level open */ + while (match("}") == 0) + if(eof) { + error("no final }"); + break; + } + else statement(); /* do one */ + if(--ncmp /* close current level */ + && lastst != STRETURN + && lastst != STGOTO) + gen(ADDSP, savcsp); /* delete local variable space */ + cptr = savloc; /* retain labels */ + while(cptr < locptr) { + cptr2 = nextsym(cptr); + if(cptr[IDENT] == LABEL) { + while(cptr < cptr2) *savloc++ = *cptr++; + } + else cptr = cptr2; + } + locptr = savloc; /* delete local symbols */ + declared = -1; /* may not declare variables */ + } + +doif() { + int flab1, flab2; + test(flab1 = getlabel(), YES); /* get expr, and branch false */ + statement(); /* if true, do a statement */ + if(amatch("else", 4) == 0) { /* if...else ? */ + /* simple "if"...print false label */ + gen(LABm, flab1); + return; /* and exit */ + } + flab2 = getlabel(); + if(lastst != STRETURN && lastst != STGOTO) + gen(JMPm, flab2); + gen(LABm, flab1); /* print false label */ + statement(); /* and do "else" clause */ + gen(LABm, flab2); /* print true label */ + } + +dowhile() { + int wq[4]; /* allocate local queue */ + addwhile(wq); /* add entry to queue for "break" */ + gen(LABm, wq[WQLOOP]); /* loop label */ + test(wq[WQEXIT], YES); /* see if true */ + statement(); /* if so, do a statement */ + gen(JMPm, wq[WQLOOP]); /* loop to label */ + gen(LABm, wq[WQEXIT]); /* exit label */ + delwhile(); /* delete queue entry */ + } + +dodo() { + int wq[4]; + addwhile(wq); + gen(LABm, wq[WQLOOP]); + statement(); + need("while"); + test(wq[WQEXIT], YES); + gen(JMPm, wq[WQLOOP]); + gen(LABm, wq[WQEXIT]); + delwhile(); + ns(); + } + +dofor() { + int wq[4], lab1, lab2; + addwhile(wq); + lab1 = getlabel(); + lab2 = getlabel(); + need("("); + if(match(";") == 0) { + doexpr(NO); /* expr 1 */ + ns(); + } + gen(LABm, lab1); + if(match(";") == 0) { + test(wq[WQEXIT], NO); /* expr 2 */ + ns(); + } + gen(JMPm, lab2); + gen(LABm, wq[WQLOOP]); + if(match(")") == 0) { + doexpr(NO); /* expr 3 */ + need(")"); + } + gen(JMPm, lab1); + gen(LABm, lab2); + statement(); + gen(JMPm, wq[WQLOOP]); + gen(LABm, wq[WQEXIT]); + delwhile(); + } + +doswitch() { + int wq[4], endlab, swact, swdef, *swnex, *swptr; + swact = swactive; + swdef = swdefault; + swnex = swptr = swnext; + addwhile(wq); + *(wqptr + WQLOOP - WQSIZ) = 0; + need("("); + doexpr(YES); /* evaluate switch expression */ + need(")"); + swdefault = 0; + swactive = 1; + gen(JMPm, endlab = getlabel()); + statement(); /* cases, etc. */ + gen(JMPm, wq[WQEXIT]); + gen(LABm, endlab); + gen(SWITCH, 0); /* match cases */ + while(swptr < swnext) { + gen(NEARm, *swptr++); +#ifdef INT32 + gen(DWORDn, *swptr++); /* case value */ +#else + gen(WORDn, *swptr++); /* case value */ +#endif + } +#ifdef INT32 + gen(DWORDn, 0); +#else + gen(WORDn, 0); +#endif + if(swdefault) gen(JMPm, swdefault); + gen(LABm, wq[WQEXIT]); + delwhile(); + swnext = swnex; + swdefault = swdef; + swactive = swact; + } + +docase() { + if(swactive == 0) error("not in switch"); + if(swnext > swend) { + error("too many cases"); + return; + } + gen(LABm, *swnext++ = getlabel()); + constexpr(swnext++); + need(":"); + } + +dodefault() { + if(swactive) { + if(swdefault) error("multiple defaults"); + } + else error("not in switch"); + need(":"); + gen(LABm, swdefault = getlabel()); + } + +dogoto() { + if(nogo > 0) error("not allowed with block-locals"); + else noloc = 1; + if(symname(ssname)) gen(JMPm, addlabel(NO)); + else error("bad label"); + ns(); + } + +dolabel() { + char *savelptr; + blanks(); + savelptr = lptr; + if(symname(ssname)) { + if(gch() == ':') { + gen(LABm, addlabel(YES)); + return 1; + } + else bump(savelptr-lptr); + } + return 0; + } + +addlabel(def) int def; { + if(cptr = findloc(ssname)) { + if(cptr[IDENT] != LABEL) error("not a label"); + else if(def) { + if(cptr[TYPE]) error("duplicate label"); + else cptr[TYPE] = YES; + } + } + else cptr = addsym(ssname, LABEL, def, 0, getlabel(), &locptr, LABEL); + return (getint(cptr+OFFSET, INTSIZE)); + } + +doreturn() { + int savcsp; + if(endst() == 0) doexpr(YES); + savcsp = csp; + gen(RETURN, 0); + csp = savcsp; + } + +dobreak() { + int *ptr; + if((ptr = readwhile(wqptr)) == 0) return; + gen(ADDSP, ptr[WQSP]); + gen(JMPm, ptr[WQEXIT]); + } + +docont() { + int *ptr; + ptr = wqptr; + while (1) { + if((ptr = readwhile(ptr)) == 0) return; + if(ptr[WQLOOP]) break; + } + gen(ADDSP, ptr[WQSP]); + gen(JMPm, ptr[WQLOOP]); + } + +doasm() { + ccode = 0; /* mark mode as "asm" */ + while (1) { + inline(); + if(match("#endasm")) break; + if(eof)break; + fputs(line, output); + } + kill(); + ccode = 1; + } + +doexpr(use) int use; { + int constant, val; + int *before, *start; + usexpr = use; /* tell isfree() whether expr value is used */ + while(1) { + setstage(&before, &start); + expression(&constant, &val); + clearstage(before, start); + if(ch != ',') break; + bump(1); + } + usexpr = YES; /* return to normal value */ + } + +/******************** miscellaneous functions *******************/ + +/* +** get run options +*/ +ask() + { + int i; + int j; + i = listfp = nxtlab = 0; + output = stdout; +#ifdef LATER + optimize = YES; // Not working for 32 bit int's yer +#else + optimize = NO; +#endif + alarm = monitor = pause = NO; + line = mline; + while(getarg(++i, line, LINESIZE, argcs, argvs) != EOF) + { + if(line[0] != '-' && line[0] != '/') + continue; + if(toupper(line[1]) == 'L' // List + && isdigit(line[2]) + && line[3] <= ' ') + { + listfp = line[2]-'0'; + continue; + } + if(toupper(line[1]) == 'N' // No optimize + && toupper(line[2]) == 'O' + && line[3] <= ' ') + { + optimize = NO; + continue; + } + if(toupper(line[1]) == 'D') + { + j = 0; + ch = line[j+2]; + lptr = line + j+2; + /* + while (line[j+2] != ' ') + { + if (j < (NAMEMAX-1)) + { + msname[j] = line[j+1]; + ++j; + } + else + { + break; + } + } + msname[j] = '\0'; + */ + dodefine (); + continue; + } + + if(line[2] <= ' ') + { + if(toupper(line[1]) == 'A') {alarm = YES; continue;} + if(toupper(line[1]) == 'M') {monitor = YES; continue;} + if(toupper(line[1]) == 'P') {pause = YES; continue;} + } + fputs("usage: cc [file]... [-m] [-a] [-p] [-l#] [-no] [-d]\n", stderr); + fputs(" -m monitor\n", stderr); + fputs(" -a alarm\n", stderr); + fputs(" -p pause\n", stderr); + fputs(" -l# list\n", stderr); + fputs(" -no no optimize\n", stderr); + fputs(" -d pre-#define id\n", stderr); + exit(ERRCODE); + } + } + +/* +** input and output file opens +*/ +openfile() { /* entire function revised */ + char outfn[15]; + int i, j, ext; + input = EOF; + while(getarg(++filearg, pline, LINESIZE, argcs, argvs) != EOF) { + if(pline[0] == '-' || pline[0] == '/') continue; + ext = NO; + i = -1; + j = 0; + while(pline[++i]) { + if(pline[i] == '.') { + ext = YES; + break; + } + if(j < 10) outfn[j++] = pline[i]; + } + if(!ext) strcpy(pline + i, ".C"); + input = mustopen(pline, "r"); +#ifdef _MSC_VER + + if(!files) { + strcpy(outfn + j, ".ASM"); + output = mustopen(outfn, "w"); + } + +#else + if(!files /* && iscons(stdout)*/) { + strcpy(outfn + j, ".ASM"); + output = mustopen(outfn, "w"); + } +#endif + files = YES; + kill(); + return; + } + if(files++) eof = YES; + else input = stdin; + kill(); + } + +/* +** open a file with error checking +*/ +mustopen(fn, mode) char *fn, *mode; { + int fd; + if(fd = fopen(fn, mode)) return fd; + fputs("open error on ", stderr); + lout(fn, stderr); + exit(ERRCODE); + } + diff --git a/programs/develop/scc/cc2.c b/programs/develop/scc/cc2.c new file mode 100644 index 0000000000..f8ed7d9ddb --- /dev/null +++ b/programs/develop/scc/cc2.c @@ -0,0 +1,557 @@ +/* +** Small-C Compiler -- Part 2 -- Front End and Miscellaneous. +** Copyright 1982, 1983, 1985, 1988 J. E. Hendrix +** Copyright 1998 H T Walheim +** All rights reserved. +*/ + +#include +#include "cc.h" + +extern char + *symtab, *macn, *macq, *pline, *mline, optimize, + alarm, *glbptr, *line, *lptr, *cptr, *cptr2, *cptr3, + *locptr, msname[NAMESIZE], pause, quote[2]; + +extern int + *wq, ccode, ch, csp, eof, errflag, iflevel, + input, input2, listfp, macptr, nch, + nxtlab, op[16], opindex, opsize, output, pptr, + skiplevel, *wqptr; + +/********************** input functions **********************/ + +preprocess() { + int k; + char c; + if(ccode) { + line = mline; + ifline(); + if(eof) return; + } + else { + inline(); + return; + } + pptr = -1; + while(ch != NEWLINE && ch) { + if(white()) { + keepch(' '); + while(white()) gch(); + } + else if(ch == '"') { + keepch(ch); + gch(); + while(ch != '"' || (*(lptr-1) == 92 && *(lptr-2) != 92)) { + if(ch == NULL) { + error("no quote"); + break; + } + keepch(gch()); + } + gch(); + keepch('"'); + } + else if(ch == 39) { + keepch(39); + gch(); + while(ch != 39 || (*(lptr-1) == 92 && *(lptr-2) != 92)) { + if(ch == NULL) { + error("no apostrophe"); + break; + } + keepch(gch()); + } + gch(); + keepch(39); + } + else if(ch == '/' && nch == '*') + { + bump(2); + while((ch == '*' && nch == '/') == 0) + { + if(ch) + bump(1); + else + { + ifline(); + if(eof) + break; + } + } + bump(2); + } + else if(ch == '/' && nch == '/') + { + bump(2); + while(ch != NEWLINE) + { + if(ch) + bump(1); + else + { + if(eof) + break; + } + } + bump(1); + } + else if(an(ch)) { + k = 0; + while(an(ch) && k < NAMEMAX) { + msname[k++] = ch; + gch(); + } + msname[k] = NULL; + if(search(msname, macn, NAMESIZE+2, MACNEND, MACNBR, 0)) { + k = getint(cptr+NAMESIZE, 2/*INTSIZE*/); + while(c = macq[k++]) keepch(c); + while(an(ch)) gch(); + } + else { + k = 0; + while(c = msname[k++]) keepch(c); + } + } + else keepch(gch()); + } + if(pptr >= LINEMAX) error("line too long"); + keepch(NULL); + line = pline; + bump(0); + } + +keepch(c) char c; { + if(pptr < LINEMAX) pline[++pptr] = c; + } + +ifline() { + while(1) { + inline(); + if(eof) return; + if(match("#ifdef")) { + ++iflevel; + if(skiplevel) continue; + symname(msname); + if(search(msname, macn, NAMESIZE+2, MACNEND, MACNBR, 0) == 0) + skiplevel = iflevel; + continue; + } + if(match("#ifndef")) { + ++iflevel; + if(skiplevel) continue; + symname(msname); + if(search(msname, macn, NAMESIZE+2, MACNEND, MACNBR, 0)) + skiplevel = iflevel; + continue; + } + if(match("#else")) { + if(iflevel) { + if(skiplevel == iflevel) skiplevel = 0; + else if(skiplevel == 0) skiplevel = iflevel; + } + else noiferr(); + continue; + } + if(match("#endif")) { + if(iflevel) { + if(skiplevel == iflevel) skiplevel = 0; + --iflevel; + } + else noiferr(); + continue; + } + if(skiplevel) continue; + if(ch == 0) continue; + break; + } + } + +inline() { /* numerous revisions */ + int k, unit; + + if(input == EOF) openfile(); + if(eof) return; + if((unit = input2) == EOF) unit = input; + if(fgets(line, LINEMAX, unit) == NULL) { + fclose(unit); + if(input2 != EOF) + input2 = EOF; + else input = EOF; + *line = NULL; + } + else if(listfp) + { + if(listfp == output) fputc(';', output); + fputs(line, listfp); + } +#ifdef _MSC_VER + else + { + fputc(';', output); + fputs(line, output); + } +#endif + bump(0); + } + +inbyte() { + while(ch == 0) { + if(eof) return 0; + preprocess(); + } + return gch(); + } + +/********************* scanning functions ********************/ + +/* +** test if next input string is legal symbol name +*/ +symname(sname) char *sname; { + int k;char c; + blanks(); + if(alpha(ch) == 0) return (*sname = 0); + k = 0; + while(an(ch)) { + sname[k] = gch(); + if(k < NAMEMAX) ++k; + } + sname[k] = 0; + return 1; + } + +need(str) char *str; { + if(match(str) == 0) error("missing token"); + } + +ns() { + if(match(";") == 0) error("no semicolon"); + else errflag = 0; + } + +match(lit) char *lit; { + int k; + blanks(); + if(k = streq(lptr, lit)) { + bump(k); + return 1; + } + return 0; + } + +streq(str1, str2) char str1[], str2[]; { + int k; + k = 0; + while (str2[k]) { + if(str1[k] != str2[k]) return 0; + ++k; + } + return k; + } + +amatch(lit, len) char *lit; int len; { + int k; + blanks(); + if(k = astreq(lptr, lit, len)) { + bump(k); + return 1; + } + return 0; + } + +astreq(str1, str2, len) char str1[], str2[]; int len; { + int k; + k = 0; + while (k < len) { + if(str1[k] != str2[k]) break; + /* + ** must detect end of symbol table names terminated by + ** symbol length in binary + */ + if(str2[k] < ' ') break; + if(str1[k] < ' ') break; + ++k; + } + if(an(str1[k]) || an(str2[k])) return 0; + return k; + } + +nextop(list) char *list; { + char op[4]; + opindex = 0; + blanks(); + while(1) { + opsize = 0; + while(*list > ' ') op[opsize++] = *list++; + op[opsize] = 0; + if(opsize = streq(lptr, op)) + if(*(lptr+opsize) != '=' && + *(lptr+opsize) != *(lptr+opsize-1)) + return 1; + if(*list) { + ++list; + ++opindex; + } + else return 0; + } + } + +blanks() { + while(1) { + while(ch) { + if(white()) gch(); + else return; + } + if(line == mline) return; + preprocess(); + if(eof) break; + } + } + +white() { + return (*lptr <= ' ' && *lptr); + } + +gch() { + int c; + if(c = ch) bump(1); + return c; + } + +bump(n) int n; { + if(n) lptr += n; + else lptr = line; + if(ch = nch = *lptr) nch = *(lptr+1); + } + +kill() { + *line = 0; + bump(0); + } + +skip() { + if(an(inbyte())) + while(an(ch)) gch(); + else while(an(ch) == 0) { + if(ch == 0) break; + gch(); + } + blanks(); + } + +endst() { + blanks(); + return (streq(lptr, ";") || ch == 0); + } + +/*********** symbol table management functions ***********/ + +addsym(sname, id, type, size, value, lgpp, class) +char *sname, id, type; +int size, value, *lgpp, class; + { + if(lgpp == &glbptr) + { + if(cptr2 = findglb(sname)) + return cptr2; + if(cptr == 0) + { + error("global symbol table overflow"); + return 0; + } + } + else + { + if(locptr > (ENDLOC-SYMMAX)) + { + error("local symbol table overflow"); + exit(ERRCODE); + } + cptr = *lgpp; + } + cptr[IDENT] = id; + cptr[TYPE] = type; + cptr[CLASS] = class; + putint(size, cptr + SIZE, INTSIZE); + putint(value, cptr + OFFSET, INTSIZE); + cptr3 = cptr2 = cptr + NAME; + while(an(*sname)) + *cptr2++ = *sname++; + + if(lgpp == &locptr) + { + *cptr2 = cptr2 - cptr3; /* set length */ + *lgpp = ++cptr2; + } + return cptr; + } + +/* +** search for symbol match +** on return cptr points to slot found or empty slot +*/ +search(sname, buf, len, end, max, off) + char *sname, *buf, *end; int len, max, off; { + cptr = + cptr2 = buf+((hash(sname)%(max-1))*len); + while(*cptr != NULL) { + if(astreq(sname, cptr+off, NAMEMAX)) return 1; + if((cptr = cptr+len) >= end) cptr = buf; + if(cptr == cptr2) return (cptr = 0); + } + return 0; + } + +hash(sname) char *sname; { + int i, c; + i = 0; + while(c = *sname++) i = (i << 1) + c; + return i; + } + +findglb(sname) char *sname; { + if(search(sname, STARTGLB, SYMMAX, ENDGLB, NUMGLBS, NAME)) + return cptr; + return 0; + } + +findloc(sname) char *sname; { + cptr = locptr - 1; /* search backward for block locals */ + while(cptr > STARTLOC) { + cptr = cptr - *cptr; + if(astreq(sname, cptr, NAMEMAX)) return (cptr - NAME); + cptr = cptr - NAME - 1; + } + return 0; + } + +nextsym(entry) char *entry; { + entry = entry + NAME; + while(*entry++ >= ' '); /* find length byte */ + return entry; + } + +/******** while queue management functions *********/ + +addwhile(ptr) int ptr[]; { + int k; + ptr[WQSP] = csp; /* and stk ptr */ + ptr[WQLOOP] = getlabel(); /* and looping label */ + ptr[WQEXIT] = getlabel(); /* and exit label */ + if(wqptr == WQMAX) { + error("control statement nesting limit"); + exit(ERRCODE); + } + k = 0; + while (k < WQSIZ) *wqptr++ = ptr[k++]; + } + +readwhile(ptr) int *ptr; { + if(ptr <= wq) { + error("out of context"); + return 0; + } + else return (ptr - WQSIZ); + } + +delwhile() { + if(wqptr > wq) wqptr -= WQSIZ; + } + +/****************** utility functions ********************/ + +/* +** test if c is alphabetic +*/ +alpha(c) char c; { + return (isalpha(c) || c == '_'); + } + +/* +** test if given character is alphanumeric +*/ +an(c) char c; { + return (alpha(c) || isdigit(c)); + } + +/* +** return next avail internal label number +*/ +getlabel() { + return(++nxtlab); + } + +/* +** get integer of length len from address addr +** (byte sequence set by "putint") +*/ +getint(addr, len) char *addr; int len; { + int i; + i = *(addr + --len); /* high order byte sign extended */ + while(len--) i = (i << 8) | *(addr + len) & 255; + return i; + } + +/* +** put integer i of length len into address addr +** (low byte first) +*/ +putint(i, addr, len) char *addr; int i, len; { + while(len--) { + *addr++ = i; + i = i >> 8; + } + } + +lout(line, fd) char *line; int fd; { + fputs(line, fd); + fputc(NEWLINE, fd); + } + +/******************* error functions *********************/ + +illname() { + error("illegal symbol"); + skip(); + } + +multidef(sname) char *sname; { + error("already defined"); + } + +needlval() { + error("must be lvalue"); + } + +noiferr() { + error("no matching #if..."); + errflag = 0; + } + +error(msg) +char msg[]; + { + if(errflag) + return; + else + errflag = 1; + + lout(line, stderr); + errout(msg, stderr); + if(alarm) + fputc(7, stderr); + if(pause) + while(fgetc(stderr) != NEWLINE); + if(listfp > 0) + errout(msg, listfp); + } + +errout(msg, fp) char msg[]; int fp; { + int k; + k = line+2; + while(k++ <= lptr) fputc(' ', fp); + lout("/\\", fp); + fputs("**** ", fp); lout(msg, fp); + } + diff --git a/programs/develop/scc/cc3.c b/programs/develop/scc/cc3.c new file mode 100644 index 0000000000..a8f71d4187 --- /dev/null +++ b/programs/develop/scc/cc3.c @@ -0,0 +1,1093 @@ +/* +** Small-C Compiler -- Part 3 -- Expression Analyzer. +** Copyright 1982, 1983, 1985, 1988 J. E. Hendrix +** Copyright 1998 H T Walheim +** All rights reserved. +*/ + +#include +#include "cc.h" + +#define ST 0 /* is[ST] - symbol table address, else 0 */ +#define TI 1 /* is[TI] - type of indirect obj to fetch, else 0 */ +#define TA 2 /* is[TA] - type of address, else 0 */ +#define TC 3 /* is[TC] - type of constant (INT or UINT), else 0 */ +#define CV 4 /* is[CV] - value of constant (+ auxiliary uses) */ +#define OP 5 /* is[OP] - code of highest/last binary operator */ +#define SA 6 /* is[SA] - stage address of "op 0" code, else 0 */ + +extern char + *litq, *glbptr, *lptr, ssname[NAMESIZE], quote[2]; +extern int + ch, csp, litlab, litptr, nch, op[16], op2[16], + opindex, opsize, *snext; + +/***************** lead-in functions *******************/ + +constexpr(val) int *val; { + int constant; + int *before, *start; + setstage(&before, &start); + expression(&constant, val); + clearstage(before, 0); /* scratch generated code */ + if(constant == 0) error("must be constant expression"); + return constant; + } + +null_is (is) +int is[7]; + { + int i; + + for (i = 0; i < 7; ++i) + { + is[i] = 0; /* <-- */ + } + } + + +expression(con, val) int *con, *val; + { + int i; + int is[7]; + + null_is (is); + + if(level1(is)) fetch(is); + *con = is[TC]; + *val = is[CV]; + } + +test(label, parens) int label, parens; { + int is[7]; + int *before, *start; + + null_is (is); + + if(parens) need("("); + while(1) { + setstage(&before, &start); + if(level1(is)) fetch(is); + if(match(",")) clearstage(before, start); + else break; + } + if(parens) need(")"); + if(is[TC]) { /* constant expression */ + clearstage(before, 0); + if(is[CV]) return; + gen(JMPm, label); + return; + } + if(is[SA]) { /* stage address of "oper 0" code */ + switch(is[OP]) { /* operator code */ + case EQ12: + case LE12u: zerojump(EQ10f, label, is); break; + case NE12: + case GT12u: zerojump(NE10f, label, is); break; + case GT12: zerojump(GT10f, label, is); break; + case GE12: zerojump(GE10f, label, is); break; + case GE12u: clearstage(is[SA], 0); break; + case LT12: zerojump(LT10f, label, is); break; + case LT12u: zerojump(JMPm, label, is); break; + case LE12: zerojump(LE10f, label, is); break; + default: gen(NE10f, label); break; + } + } + else gen(NE10f, label); + clearstage(before, start); + } + +/* +** test primary register against zero and jump if false +*/ +zerojump(oper, label, is) int oper, label, is[]; { + clearstage(is[SA], 0); /* purge conventional code */ + gen(oper, label); + } + +/***************** precedence levels ******************/ +#ifdef _MSC_VER +level2(); +level3(); +level4(); +level5(); +level6(); +level7(); +level8(); +level9(); +level10(); +level11(); +level12(); +level13(); +#endif + +level1(is) int is[]; { + int k, is2[7], is3[2], oper, oper2; + + null_is (is2); + null_is (is3); + + k = down1(level2, is); + if(is[TC]) + { +#ifdef INT32 + gen(GETd1n, is[CV]); +#else + gen(GETw1n, is[CV]); +#endif + } + if(match("|=")) {oper = oper2 = OR12;} + else if(match("^=")) {oper = oper2 = XOR12;} + else if(match("&=")) {oper = oper2 = AND12;} + else if(match("+=")) {oper = oper2 = ADD12;} + else if(match("-=")) {oper = oper2 = SUB12;} + else if(match("*=")) {oper = MUL12; oper2 = MUL12u;} + else if(match("/=")) {oper = DIV12; oper2 = DIV12u;} + else if(match("%=")) {oper = MOD12; oper2 = MOD12u;} + else if(match(">>=")) {oper = oper2 = ASR12;} + else if(match("<<=")) {oper = oper2 = ASL12;} + else if(match("=")) {oper = oper2 = 0;} + else return k; + /* have an assignment operator */ + if(k == 0) { + needlval(); + return 0; + } + is3[ST] = is[ST]; + is3[TI] = is[TI]; + if(is[TI]) { /* indirect target */ + if(oper) { /* ?= */ + gen(PUSH1, 0); /* save address */ + fetch(is); /* fetch left side */ + } + down2(oper, oper2, level1, is, is2); /* parse right side */ + if(oper) gen(POP2, 0); /* retrieve address */ + } + else { /* direct target */ + if(oper) { /* ?= */ + fetch(is); /* fetch left side */ + down2(oper, oper2, level1, is, is2); /* parse right side */ + } + else { /* = */ + if(level1(is2)) fetch(is2); /* parse right side */ + } + } + store(is3); /* store result */ + return 0; + } + +level2(is1) int is1[]; { + int is2[7], is3[7], k, flab, endlab, *before, *after; + + null_is (is2); + null_is (is3); + + k = down1(level3, is1); /* expression 1 */ + if(match("?") == 0) return k; + dropout(k, NE10f, flab = getlabel(), is1); + if(down1(level2, is2)) fetch(is2); /* expression 2 */ + else if(is2[TC]) + { +#ifdef INT32 + gen(GETd1n, is2[CV]); +#else + gen(GETw1n, is2[CV]); +#endif + } + need(":"); + gen(JMPm, endlab = getlabel()); + gen(LABm, flab); + if(down1(level2, is3)) fetch(is3); /* expression 3 */ + else if(is3[TC]) + { +#ifdef INT32 + gen(GETd1n, is3[CV]); +#else + gen(GETw1n, is3[CV]); +#endif + } + gen(LABm, endlab); + + is1[TC] = is1[CV] = 0; + if(is2[TC] && is3[TC]) { /* expr1 ? const2 : const3 */ + is1[TA] = is1[TI] = is1[SA] = 0; + } + else if(is3[TC]) { /* expr1 ? var2 : const3 */ + is1[TA] = is2[TA]; + is1[TI] = is2[TI]; + is1[SA] = is2[SA]; + } + else if((is2[TC]) /* expr1 ? const2 : var3 */ + || (is2[TA] == is3[TA])) { /* expr1 ? same2 : same3 */ + is1[TA] = is3[TA]; + is1[TI] = is3[TI]; + is1[SA] = is3[SA]; + } + else error("mismatched expressions"); + return 0; + } + +level3 (is) int is[]; {return skim("||", EQ10f, 1, 0, level4, is);} +level4 (is) int is[]; {return skim("&&", NE10f, 0, 1, level5, is);} +level5 (is) int is[]; {return down("|", 0, level6, is);} +level6 (is) int is[]; {return down("^", 1, level7, is);} +level7 (is) int is[]; {return down("&", 2, level8, is);} +level8 (is) int is[]; {return down("== !=", 3, level9, is);} +level9 (is) int is[]; {return down("<= >= < >", 5, level10, is);} +level10(is) int is[]; {return down(">> <<", 9, level11, is);} +level11(is) int is[]; {return down("+ -", 11, level12, is);} +level12(is) int is[]; {return down("* / %", 13, level13, is);} + +level13(is) int is[]; { + int k; + char *ptr; + if(match("++")) { /* ++lval */ + if(level13(is) == 0) { + needlval(); + return 0; + } + step(rINC1, is, 0); + return 0; + } + else if(match("--")) { /* --lval */ + if(level13(is) == 0) { + needlval(); + return 0; + } + step(rDEC1, is, 0); + return 0; + } + else if(match("~")) { /* ~ */ + if(level13(is)) fetch(is); + gen(COM1, 0); + is[CV] = ~ is[CV]; + return (is[SA] = 0); + } + else if(match("!")) { /* ! */ + if(level13(is)) fetch(is); + gen(LNEG1, 0); + is[CV] = ! is[CV]; + return (is[SA] = 0); + } + else if(match("-")) { /* unary - */ + if(level13(is)) fetch(is); + gen(ANEG1, 0); + is[CV] = -is[CV]; + return (is[SA] = 0); + } + else if(match("*")) { /* unary * */ + if(level13(is)) fetch(is); + if(ptr = is[ST]) is[TI] = ptr[TYPE]; + else is[TI] = INT; + is[SA] = /* no (op 0) stage address */ + is[TA] = /* not an address */ + is[TC] = 0; /* not a constant */ + is[CV] = 1; /* omit fetch() on func call */ + return 1; + } + else if(amatch("sizeof", 6)) { /* sizeof() */ + int sz, p; char *ptr, sname[NAMESIZE]; + if(match("(")) p = 1; + else p = 0; + sz = 0; + if (amatch("unsigned", 8)) sz = INTSIZE; + if (amatch("int", 3)) sz = INTSIZE; + else if(amatch("char", 4)) sz = 1; + if(sz) {if(match("*")) sz = PTRSIZE;} + else if(symname(sname) + && ((ptr = findloc(sname)) || + (ptr = findglb(sname))) + && ptr[IDENT] != FUNCTION + && ptr[IDENT] != LABEL) sz = getint(ptr+SIZE, INTSIZE); + else if(sz == 0) error("must be object or type"); + if(p) need(")"); + is[TC] = INT; + is[CV] = sz; + is[TA] = is[TI] = is[ST] = 0; + return 0; + } + else if(match("&")) { /* unary & */ + if(level13(is) == 0) { + error("illegal address"); + return 0; + } + ptr = is[ST]; + is[TA] = ptr[TYPE]; + if(is[TI]) return 0; + gen(POINT1m, ptr); + is[TI] = ptr[TYPE]; + return 0; + } + else { + k = level14(is); + if(match("++")) { /* lval++ */ + if(k == 0) { + needlval(); + return 0; + } + step(rINC1, is, rDEC1); + return 0; + } + else if(match("--")) { /* lval-- */ + if(k == 0) { + needlval(); + return 0; + } + step(rDEC1, is, rINC1); + return 0; + } + else return k; + } + } + +level14(is) int *is; { + int k, consta, val; + char *ptr, *before, *start; + k = primary(is); + ptr = is[ST]; + blanks(); + if(ch == '[' || ch == '(') { + int is2[7]; /* allocate only if needed */ + + null_is (is2); + + while(1) { + if(match("[")) { /* [subscript] */ + if(ptr == 0) { + error("can't subscript"); + skip(); + need("]"); + return 0; + } + if(is[TA]) {if(k) fetch(is);} + else {error("can't subscript"); k = 0;} + setstage(&before, &start); + is2[TC] = 0; + down2(0, 0, level1, is2, is2); + need("]"); + if(is2[TC]) { + clearstage(before, 0); + if(is2[CV]) + { /* only add if non-zero */ + if(ptr[TYPE] >> 2 == BPD) + { +#ifdef INT32 + gen(GETd2n, is2[CV] << LBPD); +#else + gen(GETw2n, is2[CV] << LBPD); +#endif + } + else if(ptr[TYPE] >> 2 == BPW) + { +#ifdef INT32 + gen(GETd2n, is2[CV] << LBPW); +#else + gen(GETw2n, is2[CV] << LBPW); +#endif + } + else + { +#ifdef INT32 + gen(GETd2n, is2[CV]); +#else + gen(GETw2n, is2[CV]); +#endif + } + gen(ADD12, 0); + } + } + else + { + if(ptr[TYPE] >> 2 == BPD) + { + gen(DBL1, 0); + gen(DBL1, 0); + } + else if(ptr[TYPE] >> 2 == BPW) + { + gen(DBL1, 0); + } + gen(ADD12, 0); + } + is[TA] = 0; + is[TI] = ptr[TYPE]; + k = 1; + } + else if(match("(")) { /* function(...) */ + if(ptr == 0) callfunc(0); + else if(ptr[IDENT] != FUNCTION) { + if(k && !is[CV]) fetch(is); + callfunc(0); + } + else callfunc(ptr); + k = is[ST] = is[TC] = is[CV] = 0; + } + else return k; + } + } + if(ptr && ptr[IDENT] == FUNCTION) { + gen(POINT1m, ptr); + is[ST] = 0; + return 0; + } + return k; + } + +primary(is) int *is; { + char *ptr, sname[NAMESIZE]; + int k; + if(match("(")) { /* (subexpression) */ + do k = level1(is); while(match(",")); + need(")"); + return k; + } + putint(0, is, 7 << LBPW); /* clear "is" array */ + if(symname(sname)) { /* is legal symbol */ + if(ptr = findloc(sname)) { /* is local */ + if(ptr[IDENT] == LABEL) { + experr(); + return 0; + } + gen(POINT1s, getint(ptr+OFFSET, INTSIZE)); + is[ST] = ptr; + is[TI] = ptr[TYPE]; + if(ptr[IDENT] == ARRAY) { + is[TA] = ptr[TYPE]; + return 0; + } + if(ptr[IDENT] == POINTER) { + is[TI] = UINT; + is[TA] = ptr[TYPE]; + } + return 1; + } + if(ptr = findglb(sname)) { /* is global */ + is[ST] = ptr; + if(ptr[IDENT] != FUNCTION) { + if(ptr[IDENT] == ARRAY) { + gen(POINT1m, ptr); + is[TI] = + is[TA] = ptr[TYPE]; + return 0; + } + if(ptr[IDENT] == POINTER) + is[TA] = ptr[TYPE]; + return 1; + } + } + else is[ST] = addsym(sname, FUNCTION, INT, 0, 0, &glbptr, AUTOEXT); + return 0; + } + if(constant(is) == 0) experr(); + return 0; + } + +experr() { + error("invalid expression"); +#ifdef INT32 + gen(GETd1n, 0); +#else + gen(GETw1n, 0); +#endif + skip(); + } + +/* attempt at right to left - do it later */ +#ifdef LATER +pushargs (ptr, nargs) +char *ptr; +int nargs; + { + if (streq(lptr, ")") != 0) + return; + + if(endst()) + return; + + if(ptr) + { + expression(&consta, &val); + gen(PUSH1, 0); + } + else + { + gen(PUSH1, 0); + expression(&consta, &val); + gen(SWAP1s, 0); /* don't push addr */ + } + nargs = nargs + INTSIZE; /* count args*BPW */ + + if(match(",") == 0) break; + + } +#endif + +callfunc(ptr) +char *ptr; /* symbol table entry or 0 */ + { + int nargs, consta, val; + + nargs = 0; + blanks(); /* already saw open paren */ + + while(streq(lptr, ")") == 0) + { + if(endst()) + break; + if(ptr) + { + expression(&consta, &val); + gen(PUSH1, 0); + } + else + { + gen(PUSH1, 0); + expression(&consta, &val); + gen(SWAP1s, 0); /* don't push addr */ + } + nargs = nargs + INTSIZE; /* count args*BPW */ + + if(match(",") == 0) break; + } + need(")"); + if(ptr && (streq(ptr + NAME, "CCARGC") == 0)) /* accessing ... like va_args */ +#ifdef INT32 + gen(ARGCNTn, nargs >> LBPD); /* to get start of frame */ +#else + gen(ARGCNTn, nargs >> LBPW); /* to get start of frame */ +#endif + + if(ptr) + gen(CALLm, ptr); + else + gen(CALL1, 0); + gen(ADDSP, csp + nargs); + } + +/* +** true if is2's operand should be doubled +*/ +fdouble (oper, is1, is2) +int oper, is1[], is2[]; +{ + ////////////////////////////////////////////////////// + // This is a 'magic' function, its usage and function + // are not so obvious + // + // Purpose: when indexing an address we must know + // what we are pointing at so that the indexsize is + // proper, e,g, + // charptr++, should multiply index by a 1 + // shortptr++, should multiply index by a 2 + // intptr++, should multiply index by a 4 + // + // Algorithm: + // IF + // operation is ADD12 or SUB12 + // AND + // is1 is an address (pointer, array or via & operator + // AND + // is2 is NOT an address (pointer, array or via & operator + // THEN + // return the multiplication factor based on s1 (or true) + // ELSE + // return 0 (or false) + // + // Usage: The return value is used as a 'boolean' + // for nonconstant values, indicating that runtime code + // is necessary to do the necessary multiplication + // For contant value the return value is used to do a compile-time + // multiplication (shift actually) + // + + if ((oper == ADD12 || oper == SUB12) + && (is2[TA] == 0)) + { + switch (is1[TA]>>2) + { + default: + case 1: // char + return (0); + case 2: // short + return (1); + case 4: // int + return (2); + } + } + + return (0); + + + +/* + - original code - + if((oper != ADD12 && oper != SUB12) + || (is1[TA] >> 2 != BPW) + || (is2[TA])) + + return 0; + + + return 1; +*/ +} + + +step (oper, is, oper2) int oper, is[], oper2; { + fetch(is); + gen(oper, is[TA] ? (is[TA] >> 2) : 1); + store(is); + if(oper2) gen(oper2, is[TA] ? (is[TA] >> 2) : 1); + } + +store(is) +int is[]; + { + char *ptr; + + if(is[TI]) + { /* putstk */ + if(is[TI] >> 2 == 1) + { + gen(PUTbp1, 0); + } + else if(is[TI] >> 2 == 2) + { + gen(PUTwp1, 0); + } + else + { + gen(PUTdp1, 0); + } + } + else + { /* putmem */ + ptr = is[ST]; + if(ptr[IDENT] == POINTER) + { +#ifdef INT32 /* int and ptr-size are ALWAYS the same */ + gen(PUTdm1, ptr); +#else + gen(PUTwm1, ptr); +#endif + } + else if (ptr[TYPE] >> 2 == 1) + { + gen(PUTbm1, ptr); + } + else if (ptr[TYPE] >> 2 == BPW) + { + gen(PUTwm1, ptr); + } + else + { + gen(PUTdm1, ptr); + } + } + } + +fetch(is) +int is[]; + { + char *ptr; + + ptr = is[ST]; + if(is[TI]) /* indirect */ + { + if(is[TI] >> 2 == BPD) /* pointer to DWORD */ + { + gen(GETd1p, 0); + } + else if(is[TI] >> 2 == BPW) /* pointer to WORD */ + { + /* if INT32 must make distinction between signed/unsigned <-- */ + gen(GETw1p, 0); + } + else + { + if(ptr[TYPE] & UNSIGNED) + gen(GETb1pu, 0); + else + gen(GETb1p, 0); + } + } + else + { /* direct */ + + if(ptr[IDENT] == POINTER) + { +#ifdef INT32 + gen(GETd1m, ptr); +#else + gen(GETw1m, ptr); +#endif + } + else if (ptr[TYPE] >> 2 == BPD) + { + gen(GETd1m, ptr); + } + else if (ptr[TYPE] >> 2 == BPW) + { + gen(GETw1m, ptr); + } + else + { + if(ptr[TYPE] & UNSIGNED) + gen(GETb1mu, ptr); + else + gen(GETb1m, ptr); + } + } + } + +constant(is) +int is[]; + { + int offset; + + if (is[TC] = number(is + CV)) + { +#ifdef INT32 + gen(GETd1n, is[CV]); +#else + gen(GETw1n, is[CV]); +#endif + } + else if(is[TC] = chrcon(is + CV)) + { +#ifdef INT32 + gen(GETd1n, is[CV]); +#else + gen(GETw1n, is[CV]); +#endif + } + else if(string(&offset)) + { + gen(POINT1l, offset); + } + else + { + return 0; + } + return 1; + } + +number(value) int *value; { + int k, minus; + k = minus = 0; + while(1) { + if(match("+")) ; + else if(match("-")) minus = 1; + else break; + } + if(isdigit(ch) == 0) return 0; + if(ch == '0') { + while(ch == '0') inbyte(); + if(toupper(ch) == 'X') { + inbyte(); + while(isxdigit(ch)) { + if(isdigit(ch)) + k = k*16 + (inbyte() - '0'); + else k = k*16 + 10 + (toupper(inbyte()) - 'A'); + } + } + else while (ch >= '0' && ch <= '7') + k = k*8 + (inbyte() - '0'); + } + else while (isdigit(ch)) k = k*10 + (inbyte() - '0'); + if(minus) { + *value = -k; + return (INT); + } + if((*value = k) < 0) return (UINT); + else return (INT); + } + +chrcon(value) +int *value; + { + int k; + + k = 0; + if(match("'") == 0) + return 0; + while(ch != '\'') + k = (k << 8) + (litchar() & 255); + gch(); + *value = k; + return (INT); + } + +string(offset) int *offset; { + char c; + if(match(quote) == 0) return 0; + *offset = litptr; + while (ch != '"') { + if(ch == 0) break; + stowlit(litchar(), 1); + } + gch(); + litq[litptr++] = 0; + return 1; + } + +stowlit(value, size) int value, size; { + if((litptr+size) >= LITMAX) { + error("literal queue overflow"); + exit(ERRCODE); + } + putint(value, litq+litptr, size); + litptr += size; + } + +litchar() { + int i, oct; + if(ch != '\\' || nch == 0) return gch(); + gch(); + switch(ch) { + case 'n': gch(); return NEWLINE; + case 't': gch(); return 9; /* HT */ + case 'b': gch(); return 8; /* BS */ + case 'f': gch(); return 12; /* FF */ + } + i = 3; + oct = 0; + while((i--) > 0 && ch >= '0' && ch <= '7') + oct = (oct << 3) + gch() - '0'; + if(i == 2) return gch(); + else return oct; + } + +/***************** pipeline functions ******************/ + +/* +** skim over terms adjoining || and && operators +*/ +skim(opstr, tcode, dropval, endval, level, is) + char *opstr; + int tcode, dropval, endval, (*level)(), is[]; { + int k, droplab, endlab; + droplab = 0; + while(1) { + k = down1(level, is); + if(nextop(opstr)) { + bump(opsize); + if(droplab == 0) droplab = getlabel(); + dropout(k, tcode, droplab, is); + } + else if(droplab) { + dropout(k, tcode, droplab, is); +#ifdef INT32 + gen(GETd1n, endval); +#else + gen(GETw1n, endval); +#endif + gen(JMPm, endlab = getlabel()); + gen(LABm, droplab); +#ifdef INT32 + gen(GETd1n, dropval); +#else + gen(GETw1n, dropval); +#endif + gen(LABm, endlab); + is[TI] = is[TA] = is[TC] = is[CV] = is[SA] = 0; + return 0; + } + else return k; + } + } + +/* +** test for early dropout from || or && sequences +*/ +dropout(k, tcode, exit1, is) + int k, tcode, exit1, is[]; { + if(k) fetch(is); + else if(is[TC]) + { +#ifdef INT32 + gen(GETd1n, is[CV]); +#else + gen(GETw1n, is[CV]); +#endif + } + gen(tcode, exit1); /* jumps on false */ + } + +/* +** drop to a lower level +*/ +down(opstr, opoff, level, is) + char *opstr; int opoff, (*level)(), is[]; { + int k; + k = down1(level, is); + if(nextop(opstr) == 0) return k; + if(k) fetch(is); + while(1) { + if(nextop(opstr)) { + int is2[7]; /* allocate only if needed */ + + null_is (is2); + + bump(opsize); + opindex += opoff; + down2(op[opindex], op2[opindex], level, is, is2); + } + else return 0; + } + } + +/* +** unary drop to a lower level +*/ +down1(level, is) int (*level)(), is[]; { + int k, *before, *start; + setstage(&before, &start); + k = (*level)(is); + if(is[TC]) clearstage(before, 0); /* load constant later */ + return k; + } + +/* +** binary drop to a lower level +*/ +down2(oper, oper2, level, is, is2) + int oper, oper2, (*level)(), is[], is2[]; { + int *before, *start; + char *ptr; + int value; + setstage(&before, &start); + is[SA] = 0; /* not "... op 0" syntax */ + if(is[TC]) { /* consant op unknown */ + if(down1(level, is2)) fetch(is2); + if(is[CV] == 0) is[SA] = snext; + gen(GETw2n, is[CV] << fdouble(oper, is2, is)); + } + else { /* variable op unknown */ + gen(PUSH1, 0); /* at start in the buffer */ + if(down1(level, is2)) fetch(is2); + if(is2[TC]) { /* variable op constant */ + if(is2[CV] == 0) is[SA] = start; +#ifdef INT32 + csp += BPD; /* adjust stack and */ +#else + csp += BPW; /* adjust stack and */ +#endif + clearstage(before, 0); /* discard the PUSH */ + if(oper == ADD12) { /* commutative */ +#ifdef INT32 + gen(GETd2n, is2[CV] << fdouble(oper, is, is2)); +#else + gen(GETw2n, is2[CV] << fdouble(oper, is, is2)); +#endif + } + else { /* non-commutative */ + gen(MOVE21, 0); +#ifdef INT32 + gen(GETd1n, is2[CV] << fdouble(oper, is, is2)); +#else + gen(GETw1n, is2[CV] << fdouble(oper, is, is2)); +#endif + } + } + else { /* variable op variable */ + gen(POP2, 0); + if(value = fdouble(oper, is, is2)) + { + gen(DBL1, 0); // index size 2 + if (value > 1) + gen(DBL1, 0); // .. or even 4 + } + if(value = fdouble(oper, is2, is)) + { + gen(DBL2, 0); + if (value > 1) + gen(DBL2, 0); + } + } + } + if(oper) { + if(nosign(is) || nosign(is2)) oper = oper2; + if(is[TC] = is[TC] & is2[TC]) { /* constant result */ + is[CV] = calc(is[CV], oper, is2[CV]); + clearstage(before, 0); + if(is2[TC] == UINT) is[TC] = UINT; + } + else { /* variable result */ + gen(oper, 0); + if(oper == SUB12 + && is [TA] >> 2 == BPW + && is2[TA] >> 2 == BPW) { /* difference of two word addresses */ + gen(SWAP12, 0); + gen(GETw1n, 1); + gen(ASR12, 0); /* div by 2 */ + } + is[OP] = oper; /* identify the operator */ + } + if(oper == SUB12 || oper == ADD12) { + if(is[TA] && is2[TA]) /* addr +/- addr */ + is[TA] = 0; + else if(is2[TA]) { /* value +/- addr */ + is[ST] = is2[ST]; + is[TI] = is2[TI]; + is[TA] = is2[TA]; + } + } + if(is[ST] == 0 || ((ptr = is2[ST]) && (ptr[TYPE] & UNSIGNED))) + is[ST] = is2[ST]; + } + } + +/* +** unsigned operand? +*/ +nosign(is) int is[]; { + char *ptr; + if(is[TA] + || is[TC] == UINT + || ((ptr = is[ST]) && (ptr[TYPE] & UNSIGNED)) + ) return 1; + return 0; + } + +/* +** calcualte signed constant result +*/ +calc(left, oper, right) int left, oper, right; { + switch(oper) { + case ADD12: return (left + right); + case SUB12: return (left - right); + case MUL12: return (left * right); + case DIV12: return (left / right); + case MOD12: return (left % right); + case EQ12: return (left == right); + case NE12: return (left != right); + case LE12: return (left <= right); + case GE12: return (left >= right); + case LT12: return (left < right); + case GT12: return (left > right); + case AND12: return (left & right); + case OR12: return (left | right); + case XOR12: return (left ^ right); + case ASR12: return (left >> right); + case ASL12: return (left << right); + } + return (calc2(left, oper, right)); + } + +/* +** calcualte unsigned constant result +*/ +calc2(left, oper, right) unsigned left, right; int oper; { + switch(oper) { + case MUL12u: return (left * right); + case DIV12u: return (left / right); + case MOD12u: return (left % right); + case LE12u: return (left <= right); + case GE12u: return (left >= right); + case LT12u: return (left < right); + case GT12u: return (left > right); + } + return (0); + } + diff --git a/programs/develop/scc/cc4.c b/programs/develop/scc/cc4.c new file mode 100644 index 0000000000..4c817bee61 --- /dev/null +++ b/programs/develop/scc/cc4.c @@ -0,0 +1,985 @@ +/* +** Small-C Compiler -- Part 4 -- Back End. +** Copyright 1982, 1983, 1985, 1988 J. E. Hendrix +** Copyright 1998 H T Walheim +** All rights reserved. +*/ +#include +#include "cc.h" + +/* #define DISOPT */ /* display optimizations values */ + +/*************************** externals ****************************/ + +extern char + *cptr, *macn, *litq, *symtab, optimize, ssname[NAMESIZE]; + +extern int + *stage, litlab, litptr, csp, output, oldseg, usexpr, + *snext, *stail, *slast; + + +/***************** optimizer command definitions ******************/ + + /* -- p-codes must not overlap these */ +#define any 0x00FF /* matches any p-code */ +#define _pop 0x00FE /* matches if corresponding POP2 exists */ +#define pfree 0x00FD /* matches if pri register free */ +#define sfree 0x00FC /* matches if sec register free */ +#define comm 0x00FB /* matches if registers are commutative */ + + /* -- these digits are reserved for n */ +#define go 0x0100 /* go n entries */ +#define gc 0x0200 /* get code from n entries away */ +#define gv 0x0300 /* get value from n entries away */ +#define sum 0x0400 /* add value from nth entry away */ +#define neg 0x0500 /* negate the value */ +#define ife 0x0600 /* if value == n do commands to next 0 */ +#define ifl 0x0700 /* if value < n do commands to next 0 */ +#define swv 0x0800 /* swap value with value n entries away */ +#define topop 0x0900 /* moves |code and current value to POP2 */ + +#define p1 0x0001 /* plus 1 */ +#define p2 0x0002 /* plus 2 */ +#define p3 0x0003 /* plus 3 */ +#define p4 0x0004 /* plus 4 */ +#define m1 0x00FF /* minus 1 */ +#define m2 0x00FE /* minus 2 */ +#define m3 0x00FD /* minus 3 */ +#define m4 0x00FC /* minus 4 */ + +#define PRI 0030 /* primary register bits */ +#define SEC 0003 /* secondary register bits */ +#define USES 0011 /* use register contents */ +#define ZAPS 0022 /* zap register contents */ +#define PUSHES 0100 /* pushes onto the stack */ +#define COMMUTES 0200 /* commutative p-code */ + +/******************** optimizer command lists *********************/ + +int + seq00[] = {0,ADD12,MOVE21,0, /* ADD21 */ + go|p1,ADD21,0}, + + seq01[] = {0,ADD1n,0, /* rINC1 or rDEC1 ? */ + ifl|m2,0,ifl|0,rDEC1,neg,0,ifl|p3,rINC1,0,0}, + + seq02[] = {0,ADD2n,0, /* rINC2 or rDEC2 ? */ + ifl|m2,0,ifl|0,rDEC2,neg,0,ifl|p3,rINC2,0,0}, + + seq03[] = {0,rDEC1,PUTbp1,rINC1,0, /* SUBbpn or DECbp */ + go|p2,ife|p1,DECbp,0,SUBbpn,0}, + + seq04[] = {0,rDEC1,PUTwp1,rINC1,0, /* SUBwpn or DECwp */ + go|p2,ife|p1,DECwp,0,SUBwpn,0}, + + seq05[] = {0,rDEC1,PUTbm1,rINC1,0, /* SUB_m_ COMMAn */ + go|p1,SUB_m_,go|p1,COMMAn,go|m1,0}, + + seq06[] = {0,rDEC1,PUTwm1,rINC1,0, /* SUB_m_ COMMAn */ + go|p1,SUB_m_,go|p1,COMMAn,go|m1,0}, + + seq07[] = {0,GETw1m,GETw2n,ADD12,MOVE21,GETb1p,0, /* GETw2m GETb1p */ + go|p4,gv|m3,go|m1,GETw2m,gv|m3,0}, + + seq08[] = {0,GETw1m,GETw2n,ADD12,MOVE21,GETb1pu,0, /* GETw2m GETb1pu */ + go|p4,gv|m3,go|m1,GETw2m,gv|m3,0}, + + seq09[] = {0,GETw1m,GETw2n,ADD12,MOVE21,GETw1p,0, /* GETw2m GETw1p */ + go|p4,gv|m3,go|m1,GETw2m,gv|m3,0}, + + seq10[] = {0,GETw1m,GETw2m,SWAP12,0, /* GETw2m GETw1m */ + go|p2,GETw1m,gv|m1,go|m1,gv|m1,0}, + + seq11[] = {0,GETw1m,MOVE21,0, /* GETw2m */ + go|p1,GETw2m,gv|m1,0}, + + seq12[] = {0,GETw1m,PUSH1,pfree,0, /* PUSHm */ + go|p1,PUSHm,gv|m1,0}, + + seq13[] = {0,GETw1n,PUTbm1,pfree,0, /* PUT_m_ COMMAn */ + PUT_m_,go|p1,COMMAn,go|m1,swv|p1,0}, + + seq14[] = {0,GETw1n,PUTwm1,pfree,0, /* PUT_m_ COMMAn */ + PUT_m_,go|p1,COMMAn,go|m1,swv|p1,0}, + + seq15[] = {0,GETw1p,PUSH1,pfree,0, /* PUSHp */ + go|p1,PUSHp,gv|m1,0}, + + seq16[] = {0,GETw1s,GETw2n,ADD12,MOVE21,0, /* GETw2s ADD2n */ + go|p3,ADD2n,gv|m2,go|m1,GETw2s,gv|m2,0}, + + seq17[] = {0,GETw1s,GETw2s,SWAP12,0, /* GETw2s GETw1s */ + go|p2,GETw1s,gv|m1,go|m1,GETw2s,gv|m1,0}, + + seq18[] = {0,GETw1s,MOVE21,0, /* GETw2s */ + go|p1,GETw2s,gv|m1,0}, + + seq19[] = {0,GETw2m,GETw1n,SWAP12,SUB12,0, /* GETw1m SUB1n */ + go|p3,SUB1n,gv|m2,go|m1,GETw1m,gv|m2,0}, + + seq20[] = {0,GETw2n,ADD12,0, /* ADD1n */ + go|p1,ADD1n,gv|m1,0}, + + seq21[] = {0,GETw2s,GETw1n,SWAP12,SUB12,0, /* GETw1s SUB1n */ + go|p3,SUB1n,gv|m2,go|m1,GETw1s,gv|m2,0}, + + seq22[] = {0,rINC1,PUTbm1,rDEC1,0, /* ADDm_ COMMAn */ + go|p1,ADDm_,go|p1,COMMAn,go|m1,0}, + + seq23[] = {0,rINC1,PUTwm1,rDEC1,0, /* ADDm_ COMMAn */ + go|p1,ADDm_,go|p1,COMMAn,go|m1,0}, + + seq24[] = {0,rINC1,PUTbp1,rDEC1,0, /* ADDbpn or INCbp */ + go|p2,ife|p1,INCbp,0,ADDbpn,0}, + + seq25[] = {0,rINC1,PUTwp1,rDEC1,0, /* ADDwpn or INCwp */ + go|p2,ife|p1,INCwp,0,ADDwpn,0}, + + seq26[] = {0,MOVE21,GETw1n,SWAP12,SUB12,0, /* SUB1n */ + go|p3,SUB1n,gv|m2,0}, + + seq27[] = {0,MOVE21,GETw1n,comm,0, /* GETw2n comm */ + go|p1,GETw2n,0}, + + seq28[] = {0,POINT1m,GETw2n,ADD12,MOVE21,0, /* POINT2m_ PLUSn */ + go|p3,PLUSn,gv|m2,go|m1,POINT2m_,gv|m2,0}, + + seq29[] = {0,POINT1m,MOVE21,pfree,0, /* POINT2m */ + go|p1,POINT2m,gv|m1,0}, + + seq30[] = {0,POINT1m,PUSH1,pfree,_pop,0, /* ... POINT2m */ + topop|POINT2m,go|p2,0}, + + seq31[] = {0,POINT1s,GETw2n,ADD12,MOVE21,0, /* POINT2s */ + sum|p1,go|p3,POINT2s,gv|m3,0}, + + seq32[] = {0,POINT1s,PUSH1,MOVE21,0, /* POINT2s PUSH2 */ + go|p1,POINT2s,gv|m1,go|p1,PUSH2,go|m1,0}, + + seq33[] = {0,POINT1s,PUSH1,pfree,_pop,0, /* ... POINT2s */ + topop|POINT2s,go|p2,0}, + + seq34[] = {0,POINT1s,MOVE21,0, /* POINT2s */ + go|p1,POINT2s,gv|m1,0}, + + seq35[] = {0,POINT2m,GETb1p,sfree,0, /* GETb1m */ + go|p1,GETb1m,gv|m1,0}, + + seq36[] = {0,POINT2m,GETb1pu,sfree,0, /* GETb1mu */ + go|p1,GETb1mu,gv|m1,0}, + + seq37[] = {0,POINT2m,GETw1p,sfree,0, /* GETw1m */ + go|p1,GETw1m,gv|m1,0}, + + seq38[] = {0,POINT2m_,PLUSn,GETw1p,sfree,0, /* GETw1m_ PLUSn */ + go|p2,gc|m1,gv|m1,go|m1,GETw1m_,gv|m1,0}, + + seq39[] = {0,POINT2s,GETb1p,sfree,0, /* GETb1s */ + sum|p1,go|p1,GETb1s,gv|m1,0}, + + seq40[] = {0,POINT2s,GETb1pu,sfree,0, /* GETb1su */ + sum|p1,go|p1,GETb1su,gv|m1,0}, + + seq41[] = {0,POINT2s,GETw1p,PUSH1,pfree,0, /* PUSHs */ + sum|p1,go|p2,PUSHs,gv|m2,0}, + + seq42[] = {0,POINT2s,GETw1p,sfree,0, /* GETw1s */ + sum|p1,go|p1,GETw1s,gv|m1,0}, + + seq43[] = {0,PUSH1,any,POP2,0, /* MOVE21 any */ + go|p2,gc|m1,gv|m1,go|m1,MOVE21,0}, + + seq44[] = {0,PUSHm,_pop,0, /* ... GETw2m */ + topop|GETw2m,go|p1,0}, + + seq45[] = {0,PUSHp,any,POP2,0, /* GETw2p ... */ + go|p2,gc|m1,gv|m1,go|m1,GETw2p,gv|m1,0}, + + seq46[] = {0,PUSHs,_pop,0, /* ... GETw2s */ + topop|GETw2s,go|p1,0}, + + seq47[] = {0,SUB1n,0, /* rDEC1 or rINC1 ? */ + ifl|m2,0,ifl|0,rINC1,neg,0,ifl|p3,rDEC1,0,0}; + +#define HIGH_SEQ 47 +int seq[HIGH_SEQ + 1]; +setseq() { + seq[ 0] = seq00; seq[ 1] = seq01; seq[ 2] = seq02; seq[ 3] = seq03; + seq[ 4] = seq04; seq[ 5] = seq05; seq[ 6] = seq06; seq[ 7] = seq07; + seq[ 8] = seq08; seq[ 9] = seq09; seq[10] = seq10; seq[11] = seq11; + seq[12] = seq12; seq[13] = seq13; seq[14] = seq14; seq[15] = seq15; + seq[16] = seq16; seq[17] = seq17; seq[18] = seq18; seq[19] = seq19; + seq[20] = seq20; seq[21] = seq21; seq[22] = seq22; seq[23] = seq23; + seq[24] = seq24; seq[25] = seq25; seq[26] = seq26; seq[27] = seq27; + seq[28] = seq28; seq[29] = seq29; seq[30] = seq30; seq[31] = seq31; + seq[32] = seq32; seq[33] = seq33; seq[34] = seq34; seq[35] = seq35; + seq[36] = seq36; seq[37] = seq37; seq[38] = seq38; seq[39] = seq39; + seq[40] = seq40; seq[41] = seq41; seq[42] = seq42; seq[43] = seq43; + seq[44] = seq44; seq[45] = seq45; seq[46] = seq46; seq[47] = seq47; + } + +/***************** assembly-code strings ******************/ + +int code[PCODES]; + +/* +** First byte contains flag bits indicating: +** the value in ax is needed (010) or zapped (020) +** the value in bx is needed (001) or zapped (002) +*/ +setcodes() { + setseq(); + code[ADD12] = "\211ADD EAX,EBX\15\n"; + code[ADD1n] = "\010?ADD EAX,\15\n??"; + code[ADD21] = "\211ADD EBX,EAX\15\n"; + code[ADD2n] = "\010?ADD EBX,\15\n??"; + code[ADDbpn] = "\001ADD BYTE [EBX],\15\n"; + code[ADDwpn] = "\001ADD WORD [EBX],\15\n"; + code[ADDm_] = "\000ADD "; + code[ADDSP] = "\000?ADD ESP,\15\n??"; + code[AND12] = "\211AND EAX,EBX\15\n"; + code[ANEG1] = "\010NEG EAX\15\n"; + code[ARGCNTn] = "\000?MOV CL,?XOR CL,CL?\15\n"; + code[ASL12] = "\011MOV ECX,EAX\15\nMOV EAX,EBX\15\nSAL EAX,CL\15\n"; + code[ASR12] = "\011MOV ECX,EAX\15\nMOV EAX,EBX\15\nSAR EAX,CL\15\n"; + code[CALL1] = "\010CALL EAX\15\n"; + code[CALLm] = "\020CALL \15\n"; + code[BYTE_] = "\000 DB "; + code[BYTEn] = "\000 RESB \15\n"; + code[BYTEr0] = "\000 TIMES DB 0\15\n"; + code[COM1] = "\010NOT EAX\15\n"; + code[COMMAn] = "\000,\15\n"; + code[DBL1] = "\010SHL EAX,1\15\n"; + code[DBL2] = "\001SHL EBX,1\15\n"; + code[DECbp] = "\001DEC BYTE [EBX]\15\n"; + code[DECwp] = "\001DEC WORD [EBX]\15\n"; + code[DIV12] = "\011CDQ\15\nIDIV EBX\15\n"; /* see gen() */ + code[DIV12u] = "\011XOR EDX,EDX\15\nDIV EBX\15\n"; /* see gen() */ + + code[DWORD_] = "\000 DD "; + code[DWORDn] = "\000 DD \15\n"; + code[DWORDr0] = "\000 TIMES DD 0\15\n"; + + code[ENTER] = "\100PUSH EBP\15\nMOV EBP,ESP\15\n"; + code[EQ10f] = "\010OR EAX,EAX\15\nJE _\15\nJMP _\15\n_:\15\n"; + code[EQ12] = "\211CALL __eq\15\n"; + code[GE10f] = "\010OR EAX,EAX\15\nJGE _\15\nJMP _\15\n_:\15\n"; + code[GE12] = "\011CALL __ge\15\n"; + code[GE12u] = "\011CALL __uge\15\n"; + code[GETb1m] = "\020MOVSX EAX,BYTE []\15\n"; + code[GETb1mu] = "\020MOVZX EAX,BYTE []\15\n"; + code[GETb1p] = "\021MOVSX EAX,BYTE [EBX???]\15\n"; /* see gen() */ + code[GETb1pu] = "\021MOVZX EAX,BYTE [EBX???]\15\n"; /* see gen() */ + code[GETb1s] = "\020MOVSX EAX,BYTE [EBP]\15\n"; + code[GETb1su] = "\020MOVZX EAX,BYTE [EBP]\15\n"; + + code[GETd1m] = "\020MOV EAX,[]\15\n"; + code[GETd1n] = "\020?MOV EAX,?XOR EAX,EAX?\15\n"; + code[GETd1p] = "\021MOV EAX, [EBX???]\15\n"; /* see gen() */ + code[GETd2n] = "\002?MOV EBX,?XOR EBX,EBX?\15\n"; + + code[GETw1m] = "\020MOVSX EAX,WORD []\15\n"; + code[GETw1m_] = "\020MOVSX EAX,WORD []"; + code[GETw1n] = "\020?MOV EAX,?XOR EAX,EAX?\15\n"; + code[GETw1p] = "\021MOVSX EAX, WORD [EBX???]\15\n"; /* see gen() */ + code[GETw1s] = "\020MOVSX EAX, WORD [EBP]\15\n"; + code[GETw2m] = "\002MOVSX EBX,WORD \15\n"; + code[GETw2n] = "\002?MOV EBX,?XOR EBX,EBX?\15\n"; + code[GETw2p] = "\021MOVSX EBX,WORD [EBX???]\15\n"; + code[GETw2s] = "\002MOVSX EBX,WORD [EBP]\15\n"; + code[GT10f] = "\010OR EAX,EAX\15\nJG _\15\nJMP _\15\n_:\15\n"; + code[GT12] = "\010CALL __gt\15\n"; + code[GT12u] = "\011CALL __ugt\15\n"; + code[INCbp] = "\001INC BYTE [EBX]\15\n"; + code[INCwp] = "\001INC WORD [EBX]\15\n"; + code[WORD_] = "\000 DW "; + code[WORDn] = "\000 RESW \15\n"; + code[WORDr0] = "\000 TIMES DW 0\15\n"; + code[JMPm] = "\000JMP _\15\n"; + code[LABm] = "\000_:\15\n"; + code[LE10f] = "\010OR EAX,EAX\15\nJLE _\15\nJMP _\15\n_:\15\n"; + code[LE12] = "\011CALL __le\15\n"; + code[LE12u] = "\011CALL __ule\15\n"; + code[LNEG1] = "\010CALL __lneg\15\n"; + code[LT10f] = "\010OR EAX,EAX\15\nJL _\15\nJMP _\15\n_:\15\n"; + code[LT12] = "\011CALL __lt\15\n"; + code[LT12u] = "\011CALL __ult\15\n"; + code[MOD12] = "\011CDQ\15\nIDIV EBX\15\nMOV EAX,EDX\15\n"; /* see gen() */ + code[MOD12u] = "\011XOR EDX,EDX\15\nDIV EBX\15\nMOV EAX,EDX\15\n"; /* see gen() */ + code[MOVE21] = "\012MOV EBX,EAX\15\n"; + code[MUL12] = "\211IMUL EBX\15\n"; + code[MUL12u] = "\211MUL EBX\15\n"; + code[NE10f] = "\010OR EAX,EAX\15\nJNE _\15\nJMP _\15\n_:\15\n"; + code[NE12] = "\211CALL __ne\15\n"; + code[NEARm] = "\000 DD _\15\n"; + code[OR12] = "\211OR EAX,EBX\15\n"; + code[PLUSn] = "\000?+??\15\n"; + code[POINT1l] = "\020MOV EAX,_+\15\n"; + code[POINT1m] = "\020MOV EAX,\15\n"; + code[POINT1s] = "\020LEA EAX,[EBP]\15\n"; + code[POINT2m] = "\002MOV EBX,\15\n"; + code[POINT2m_]= "\002MOV EBX,"; + code[POINT2s] = "\002LEA EBX,[EBP]\15\n"; + code[POP2] = "\002POP EBX\15\n"; + code[PUSH1] = "\110PUSH EAX\15\n"; + code[PUSH2] = "\101PUSH EBX\15\n"; + code[PUSHm] = "\100PUSH \15\n"; + code[PUSHp] = "\100PUSH [EBX???]\15\n"; + code[PUSHs] = "\100PUSH [EBP???]\15\n"; + code[PUT_m_] = "\000MOV "; + code[PUTbm1] = "\010MOV BYTE [],AL\15\n"; + code[PUTbp1] = "\011MOV [EBX],AL\15\n"; + code[PUTdm1] = "\010MOV DWORD [],EAX\15\n"; + code[PUTdp1] = "\011MOV [EBX],EAX\15\n"; + code[PUTwm1] = "\010MOV WORD [],AX\15\n"; + code[PUTwp1] = "\011MOV [EBX],AX\15\n"; + code[rDEC1] = "\010#DEC EAX\15\n#"; + code[rDEC2] = "\010#DEC EBX\15\n#"; + code[REFm] = "\000_"; + code[RETURN] = "\000?MOV ESP,EBP\15\n??POP EBP\15\nRET\15\n"; + code[rINC1] = "\010#INC EAX\15\n#"; + code[rINC2] = "\010#INC EBX\15\n#"; + code[SUB_m_] = "\000SUB "; + code[SUB12] = "\011SUB EAX,EBX\15\n"; /* see gen() */ + code[SUB1n] = "\010?SUB EAX,\15\n??"; + code[SUBbpn] = "\001SUB [EBX],\15\n"; + code[SUBwpn] = "\001SUB [EBX],\15\n"; + code[SWAP12] = "\011XCHG EAX,EBX\15\n"; + code[SWAP1s] = "\012POP EBX\15\nXCHG EAX,EBX\15\nPUSH EBX\15\n"; + code[SWITCH] = "\012CALL __switch\15\n"; + code[XOR12] = "\211XOR EAX,EBX\15\n"; + } + +/***************** code generation functions *****************/ + +/* +** print all assembler info before any code is generated +** and ensure that the segments appear in the correct order. +*/ +header() { +/* outline(" .386"); + outline(" .MODEL FLAT"); +*/ toseg(CODESEG); + +/* - FASM + outline("EXTERN __eq"); + outline("EXTERN __ne"); + outline("EXTERN __le"); + outline("EXTERN __lt"); + outline("EXTERN __ge"); + outline("EXTERN __gt"); + outline("EXTERN __ule"); + outline("EXTERN __ult"); + outline("EXTERN __uge"); + outline("EXTERN __ugt"); + outline("EXTERN __lneg"); + outline("EXTERN __switch"); +*/ + + /* outline("dw 0"); *//* force non-zero code pointers, word alignment */ + toseg(DATASEG); + /* outline("dw 0"); *//* force non-zero data pointers, word alignment */ + } + +/* +** print any assembler stuff needed at the end +*/ +trailer() { + char *cp; + cptr = STARTGLB; + while(cptr < ENDGLB) { + if(cptr[IDENT] == FUNCTION && cptr[CLASS] == AUTOEXT) + external(cptr + NAME, 0, FUNCTION); + cptr += SYMMAX; + } +/* + if((cp = findglb("main")) && cp[CLASS]==STATIC) + external("_main", 0, FUNCTION); +*/ + toseg(NULL); +/* outline("END"); */ +#ifdef DISOPT + { + int i, *count; + printf(";opt count\n"); + for(i = -1; ++i <= HIGH_SEQ; ) { + count = seq[i]; + printf("; %2u %5u\n", i, *count); + } + } +#endif + } + +/* +** remember where we are in the queue in case we have to back up. +*/ +setstage(before, start) int *before, *start; { + if((*before = snext) == 0) + snext = stage; + *start = snext; + } + +/* +** generate code in staging buffer. +*/ +gen(pcode, value) +int pcode, value; + { + int newcsp; + switch(pcode) + { + case GETb1pu: + case GETb1p: + case GETw1p: + case GETd1p: + gen(MOVE21, 0); + break; + case SUB12: + case MOD12: + case MOD12u: + case DIV12: + case DIV12u: + gen(SWAP12, 0); + break; + case PUSH1: +#ifdef INT32 + csp -= BPD; +#else + csp -= BPW; +#endif + break; + case POP2: +#ifdef INT32 + csp += BPD; +#else + csp += BPW; +#endif + break; + case ADDSP: + case RETURN: + newcsp = value; + value -= csp; + csp = newcsp; + } + if(snext == 0) + { + outcode(pcode, value); + return; + } + if(snext >= slast) + { + error("staging buffer overflow"); + return; + } + snext[0] = pcode; + snext[1] = value; + snext += 2; + } + +/* +** dump the contents of the queue. +** If start = 0, throw away contents. +** If before != 0, don't dump queue yet. +*/ +clearstage(before, start) +int *before, *start; + { + if(before) + { + snext = before; + return; + } + if(start) + dumpstage(); + snext = 0; + } + +/* +** dump the staging buffer +*/ +dumpstage() + { + int i; + stail = snext; + snext = stage; + while(snext < stail) + { + if(optimize) + { +restart: + i = -1; + while(++i <= HIGH_SEQ) + if(peep(seq[i])) + { +#ifdef DISOPT + if(isatty(output)) + fprintf(stderr, " optimized %2u\n", i); +#endif + goto restart; + } + } + outcode(snext[0], snext[1]); + snext += 2; + } + } + +/* +** change to a new segment +** may be called with NULL, CODESEG, or DATASEG +** With NASM the section names are case-sensitive +*/ +toseg(newseg) +int newseg; + { + if(oldseg == newseg) + return; +/* if(oldseg == CODESEG) + outline("_TEXT ENDS"); + else if(oldseg == DATASEG) + outline("_DATA ENDS"); <-- */ + +/* - FASM + if(newseg == CODESEG) + { + outline("SECTION .text"); + } + else if(newseg == DATASEG) + outline("SECTION .data"); +*/ + oldseg = newseg; + } + +/* +** declare entry point +*/ +public(ident) int ident;{ + if(ident == FUNCTION) + toseg(CODESEG); + else toseg(DATASEG); +/* - FASM + outstr("GLOBAL "); + outname(ssname); +*/ + newline(); + outname(ssname); + if(ident == FUNCTION) { + colon(); + newline(); + } + } + +/* +** declare external reference +*/ +external(name, size, ident) char *name; int size, ident; { + if(ident == FUNCTION) + toseg(CODESEG); + else toseg(DATASEG); +/* - FASM + outstr("EXTERN "); + outname(name); +/# colon(); + outsize(size, ident); <-- #/ + newline(); +*/ + } + +/* +** output the size of the object pointed to. +*/ +outsize(size, ident) int size, ident; + { + /* why not size on FUNCTION and POINTER ? */ + if (ident == FUNCTION) + outstr("NEAR"); + else if (ident == POINTER) + outstr("DWORD"); + else if(size == 1) + outstr("BYTE"); + else if(size == 2) + outstr("WORD"); + else + outstr("DWORD"); + } + +/* +** point to following object(s) +*/ +point() { + outline(" DW $+2"); + } + +/* +** dump the literal pool +*/ +dumplits(size) int size; +{ + int j, k; + k = 0; + while (k < litptr) + { + if(size == 1) + { + gen(BYTE_, NULL); + } + else if (size == 2) + { + gen(WORD_, NULL); + } + else + { + gen(DWORD_,NULL); + } + j = 10; + while(j--) + { + outdec(getint(litq + k, size)); + k += size; + if(j == 0 || k >= litptr) + { + newline(); + break; + } + fputc(',', output); + } + } +} + +/* +** dump zeroes for default initial values +*/ +dumpzero(size, count) +int size, count; +{ + if(count > 0) + { + if(size == 1) + gen(BYTEr0, count); + else if (size == 2) + gen(WORDr0, count); + else + gen(DWORDr0, count); + } + } + +/******************** optimizer functions ***********************/ + +/* +** Try to optimize sequence at snext in the staging buffer. +*/ +peep(seq) int *seq; { + int *next, *count, *pop, n, skip, tmp, reply; + char c; + next = snext; + count = seq++; + while(*seq) { + switch(*seq) { + case any: if(next < stail) break; return (NO); + case pfree: if(isfree(PRI, next)) break; return (NO); + case sfree: if(isfree(SEC, next)) break; return (NO); + case comm: if(*next & COMMUTES) break; return (NO); + case _pop: if(pop = getpop(next)) break; return (NO); + default: if(next >= stail || *next != *seq) return (NO); + } + next += 2; ++seq; + } + + /****** have a match, now optimize it ******/ + + *count += 1; + reply = skip = NO; + while(*(++seq) || skip) { + if(skip) { + if(*seq == 0) skip = NO; + continue; + } + if(*seq >= PCODES) { + c = *seq & 0xFF; /* get low byte of command */ + n = c; /* and sign extend into n */ + switch(*seq & 0xFF00) { + case ife: if(snext[1] != n) skip = YES; break; + case ifl: if(snext[1] >= n) skip = YES; break; + case go: snext += (n<<1); break; + case gc: snext[0] = snext[(n<<1)]; goto done; + case gv: snext[1] = snext[(n<<1)+1]; goto done; + case sum: snext[1] += snext[(n<<1)+1]; goto done; + case neg: snext[1] = -snext[1]; goto done; + case topop: pop[0] = n; pop[1] = snext[1]; goto done; + case swv: tmp = snext[1]; + snext[1] = snext[(n<<1)+1]; + snext[(n<<1)+1] = tmp; + done: reply = YES; + break; + } + } + else snext[0] = *seq; /* set p-code */ + } + return (reply); + } + +/* +** Is the primary or secondary register free? +** Is it zapped or unused by the p-code at pp +** or a successor? If the primary register is +** unused by it still may not be free if the +** context uses the value of the expression. +*/ +isfree(reg, pp) int reg, *pp; { + char *cp; + while(pp < stail) { + cp = code[*pp]; + if(*cp & USES & reg) return (NO); + if(*cp & ZAPS & reg) return (YES); + pp += 2; + } + if(usexpr) return (reg & 001); /* PRI => NO, SEC => YES at end */ + else return (YES); + } + +/* +** Get place where the currently pushed value is popped? +** NOTE: Function arguments are not popped, they are +** wasted with an ADDSP. +*/ +getpop(next) int *next; { + char *cp; + int level; level = 0; + while(YES) { + if(next >= stail) /* compiler error */ + return 0; + if(*next == POP2) + if(level) --level; + else return next; /* have a matching POP2 */ + else if(*next == ADDSP) { /* after func call */ + if((level -= (next[1]>>LBPW)) < 0) + return 0; + } + else { + cp = code[*next]; /* code string ptr */ + if(*cp & PUSHES) ++level; /* must be a push */ + } + next += 2; + } + } + +/******************* output functions *********************/ + +colon() { + fputc(':', output); + } + +newline() { + fputc('\15', output); + fputc(NEWLINE, output); + } + +/* +** output assembly code. +** +*/ +outcode(pcode, value) +int pcode, value; + { + int part, skip, count; + int byte_opt; + char *cp, *back; + int loc_label; + part = back = 0; + skip = NO; + byte_opt = 0; + + cp = code[pcode] + 1; /* skip 1st byte of code string */ + +#ifdef _MSC_VER + + switch (pcode) + { + case BYTE_: + case BYTEn: + case BYTEr0: + case WORD_: + case WORDn: + case WORDr0: + case DWORD_: + case DWORDn: + case DWORDr0: + case REFm: + case COMMAn: + case PLUSn: + break; + + default: + + dump_debug (pcode, value); + outtab (); + } +#endif + + if (pcode == ADD1n) + { + if (value < 0) + { + pcode = SUB1n; + value = -value; + } + if (value < 128) + { + byte_opt = 1; + } + } + + while(*cp) + { + if(*cp == '<') + { + ++cp; /* skip to action code */ + if(skip == NO) + switch(*cp) + { + case 'm': + outname(value+NAME); + break; /* mem ref by label */ + case 'n': + if (byte_opt) + { + outstr ("BYTE "); + } + outdec(value); + break; /* numeric constant */ + case 'o': + offset(value); + break; /* numeric constant */ + case 'l': + outdec(litlab); + break; /* current literal label */ + case 'g': /* generate local label */ + loc_label = getlabel (); + break; + case 'd': /* dump local label */ + outdec(loc_label); + break; + } + cp += 2; /* skip past > */ + } + else if(*cp == '?') /* ?..if value...?...if not value...? */ + { + switch(++part) + { + case 1: + if(value == 0) + skip = YES; + break; + case 2: + skip = !skip; + break; + case 3: + part = 0; + skip = NO; + break; + } + ++cp; /* skip past ? */ + } + else if(*cp == '#') + { /* repeat #...# value times */ + ++cp; + if(back == 0) + { + if((count = value) < 1) + { + while(*cp && *cp++ != '#') + ; + continue; + } + back = cp; + continue; + } + if(--count > 0) + cp = back; + else + back = 0; + } + else if(skip == NO) + fputc(*cp++, output); + else + ++cp; + } + } + +outdec(number) int number; { + int k, zs; + char c, *q, *r; + zs = 0; + k = 1000000000; + +#ifdef _MSC_VER +// fprintf(output, "/* %d */", number); +#endif + + if(number < 0) { + number = -number; + fputc('-', output); + } + + while (k >= 1) { + q = 0; + r = number; + while(r >= k) {++q; r = r - k;} + c = q + '0'; + if(c != '0' || k == 1 || zs) { + zs = 1; + fputc(c, output); + } + number = r; + k /= 10; + } + } + +offset(number) +int number; +{ + int k, zs; + char c, *q, *r; + zs = 0; + k = 1000000000; + if(number < 0) { + number = -number; + fputc('-', output); + } + else + { + fputc('+',output); + } + + while (k >= 1) { + q = 0; + r = number; + while(r >= k) {++q; r = r - k;} + c = q + '0'; + if(c != '0' || k == 1 || zs) { + zs = 1; + fputc(c, output); + } + number = r; + k /= 10; + } + } + +outline(ptr) char ptr[]; { + outstr(ptr); + newline(); + } + +outname(ptr) char ptr[]; { + outstr("_"); + while(*ptr >= ' ') fputc(*ptr++, output); + } + +outstr(ptr) char ptr[]; { + while(*ptr == '\t' || *ptr >= ' ') fputc(*ptr++, output); + } + +outtab () + { + fputc ('\t', output); + } \ No newline at end of file