Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 717 → Rev 718

/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
/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
/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
 
/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
/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
/programs/develop/scc/GETARG.C
0,0 → 1,29
#include <stdio.h>
/*
** 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<size)
{if((s[i]=str[i])==NULL) break;
++i;
}
s[i]=NULL;
return i;
}
/programs/develop/scc/INTRINS.ASM
0,0 → 1,140
;
; Small-C Run Time Library for Win NT
;
; Nasm version 17/Nov/98 H T Walheim
; Revised: 20/Nov/98 HTW [Bugs in switch]
;
 
_CCARGC:
;B+ Ellipses arguments ( ,...)
;cl - argument count
 
xor eax,eax
movzx eax,cl ; No sign-extension
ret
;E:.
 
;B+ Compare
 
__ult:
;B+ ???
cmp eax,ebx
ja true
xor eax,eax
ret
;E:.
 
__ugt:
;B+ ???
cmp eax,ebx
jb true
xor eax,eax
ret
;E:.
 
__ule:
;B+ ???
cmp eax,ebx
jae true
xor eax,eax
ret
;E:.
 
__uge:
;B+ ???
cmp eax,ebx
jbe true
xor eax,eax
ret
;E:.
 
__eq:
;B+ ???
cmp eax,ebx
je true
xor eax,eax
ret
;E:.
 
__ne:
;B+ ???
cmp eax,ebx
jne true
xor eax,eax
ret
;E:.
 
__lt:
;B+ ???
cmp eax,ebx
jg true
xor eax,eax
ret
;E:.
 
__gt:
;B+ ???
cmp eax,ebx
jl true
xor eax,eax
ret
;E:.
 
__le:
;B+ ???
cmp eax,ebx
jge true
xor eax,eax
ret
;E:.
 
__ge:
;B+ ???
cmp eax,ebx
jle true
xor eax,eax
ret
;E:.
 
;E:.
 
__lneg:
;B+ Logical Negate of Primary
or eax,eax
jnz false
true:
mov eax,1
ret
 
false:
xor eax,eax
ret
;E:.
 
__switch:
;B+ Execute "switch" statement
 
;eax - switch value
;[esp] - pointer to switch table
; dd addr1,value1
; ...
; dd 0
; [jmp default]
; continuation
;
; Revised: 20/Nov/98 [JECXZ needed]
 
pop ebx
jmp skip
back:
add ebx,8 ;next case-pair
skip:
mov ecx,[ebx] ;case-label location (adress)
jecxz default
cmp eax,[ebx+4] ;test case-value
jnz back
jmp ecx ;match -- jump to case
default:
add ebx,4
jmp ebx ;jump to default/continuation
;E:.
/programs/develop/scc/LIBSTD.ASM
0,0 → 1,2699
 
_puts:
PUSH EBP
MOV EBP,ESP
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV EAX,__iob
MOV EBX,32
ADD EAX,EBX
PUSH EAX
MOV CL,2
CALL _fputs
ADD ESP,8
MOV EAX,10
PUSH EAX
MOV EAX,__iob
MOV EBX,32
ADD EAX,EBX
PUSH EAX
MOV CL,2
CALL _OS_fputc
ADD ESP,8
POP EBP
RET
 
_reverse:
PUSH EBP
MOV EBP,ESP
ADD ESP,-8
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]
PUSH EAX
MOV CL,1
CALL _strlen
ADD ESP,4
POP EBX
ADD EAX,EBX
MOV EBX,EAX
MOV EAX,1
XCHG EAX,EBX
SUB EAX,EBX
POP EBX
MOV [EBX],EAX
_lib_3:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
CALL __ult
OR EAX,EAX
JNE _lib_5
JMP _lib_4
_lib_5:
LEA EAX,[EBP-8]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
PUSH EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
POP EBX
MOV [EBX],AL
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
MOV [EBX],EAX
INC EAX
PUSH EAX
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],AL
JMP _lib_3
_lib_4:
MOV ESP,EBP
POP EBP
RET
 
_strcpy:
PUSH EBP
MOV EBP,ESP
ADD ESP,-4
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
_lib_7:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
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
OR EAX,EAX
JNE _lib_9
JMP _lib_8
_lib_9:
JMP _lib_7
_lib_8:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
 
_strlen:
PUSH EBP
MOV EBP,ESP
ADD ESP,-4
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
_lib_11:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
OR EAX,EAX
JNE _lib_13
JMP _lib_12
_lib_13:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_11
_lib_12:
LEA EAX,[EBP-4]
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
MOV ESP,EBP
POP EBP
RET
 
_toupper:
PUSH EBP
MOV EBP,ESP
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,122
CALL __le
OR EAX,EAX
JNE _lib_18
JMP _lib_16
_lib_18:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,97
CALL __ge
OR EAX,EAX
JNE _lib_19
JMP _lib_16
_lib_19:
MOV EAX,1
JMP _lib_17
_lib_16:
XOR EAX,EAX
_lib_17:
OR EAX,EAX
JNE _lib_20
JMP _lib_15
_lib_20:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,32
XCHG EAX,EBX
SUB EAX,EBX
POP EBP
RET
_lib_15:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBP
RET
 
_atoi:
PUSH EBP
MOV EBP,ESP
ADD ESP,-8
_lib_22:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
MOV CL,1
CALL _isspace
ADD ESP,4
OR EAX,EAX
JNE _lib_24
JMP _lib_23
_lib_24:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_22
_lib_23:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX,1
MOV [EBX],EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
JMP _lib_27
_lib_28:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX,-1
MOV [EBX],EAX
_lib_29:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_26
_lib_27:
CALL __switch
DD _lib_28
DD 45
DD _lib_29
DD 43
DD 0
_lib_26:
LEA EAX,[EBP-8]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],EAX
_lib_30:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
MOV CL,1
CALL _isdigit
ADD ESP,4
OR EAX,EAX
JNE _lib_32
JMP _lib_31
_lib_32:
LEA EAX,[EBP-8]
PUSH EAX
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,10
IMUL 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
ADD EAX,EBX
MOV EBX,EAX
MOV EAX,48
XCHG EAX,EBX
SUB EAX,EBX
POP EBX
MOV [EBX],EAX
JMP _lib_30
_lib_31:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
IMUL EBX
MOV ESP,EBP
POP EBP
RET
 
_atoib:
PUSH EBP
MOV EBP,ESP
ADD ESP,-8
LEA EAX,[EBP-4]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],EAX
_lib_34:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
MOV CL,1
CALL _isspace
ADD ESP,4
OR EAX,EAX
JNE _lib_36
JMP _lib_35
_lib_36:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_34
_lib_35:
_lib_37:
LEA EAX,[EBP-8]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,127
AND EAX,EBX
POP EBX
MOV [EBX],EAX
MOV EBX,EAX
MOV EAX,48
CALL __ge
OR EAX,EAX
JNE _lib_39
JMP _lib_38
_lib_39:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,97
CALL __ge
OR EAX,EAX
JNE _lib_41
JMP _lib_40
_lib_41:
LEA EAX,[EBP-8]
PUSH EAX
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,87
XCHG EAX,EBX
SUB EAX,EBX
POP EBX
MOV [EBX],EAX
JMP _lib_42
_lib_40:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,65
CALL __ge
OR EAX,EAX
JNE _lib_44
JMP _lib_43
_lib_44:
LEA EAX,[EBP-8]
PUSH EAX
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,55
XCHG EAX,EBX
SUB EAX,EBX
POP EBX
MOV [EBX],EAX
JMP _lib_45
_lib_43:
LEA EAX,[EBP-8]
PUSH EAX
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,48
XCHG EAX,EBX
SUB EAX,EBX
POP EBX
MOV [EBX],EAX
_lib_45:
_lib_42:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
CALL __ge
OR EAX,EAX
JNE _lib_47
JMP _lib_46
_lib_47:
JMP _lib_38
_lib_46:
LEA EAX,[EBP-4]
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
IMUL EBX
PUSH EAX
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
ADD EAX,EBX
POP EBX
MOV [EBX],EAX
JMP _lib_37
_lib_38:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
 
_fgets:
PUSH EBP
MOV EBP,ESP
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 EAX,1
PUSH EAX
MOV CL,4
CALL __gets
ADD ESP,16
POP EBP
RET
 
_gets:
PUSH EBP
MOV EBP,ESP
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV EAX,32767
PUSH EAX
MOV EAX,__iob
PUSH EAX
XOR EAX,EAX
PUSH EAX
MOV CL,4
CALL __gets
ADD ESP,16
POP EBP
RET
 
__gets:
PUSH EBP
MOV EBP,ESP
ADD ESP,-8
LEA EAX,[EBP-8]
PUSH EAX
LEA EAX,[EBP+20]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
_lib_51:
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
MOV [EBX],EAX
OR EAX,EAX
JNE _lib_53
JMP _lib_52
_lib_53:
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,1
CALL _OS_fgetc
ADD ESP,4
POP EBX
MOV [EBX],AL
JMP _lib_56
_lib_57:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],AL
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP+20]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
CALL __eq
OR EAX,EAX
JNE _lib_59
JMP _lib_58
_lib_59:
XOR EAX,EAX
MOV ESP,EBP
POP EBP
RET
_lib_58:
LEA EAX,[EBP+20]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
_lib_60:
LEA EAX,[EBP-8]
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],EAX
LEA EAX,[EBP+20]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
_lib_61:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP+20]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
CALL __ugt
OR EAX,EAX
JNE _lib_63
JMP _lib_62
_lib_63:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX,1
MOV [EBX],EAX
JMP _lib_64
_lib_62:
LEA EAX,[EBP-4]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],EAX
_lib_64:
JMP _lib_65
_lib_66:
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP+20]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
XCHG EAX,EBX
SUB EAX,EBX
POP EBX
MOV [EBX],EAX
_lib_65:
JMP _lib_67
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
_lib_68:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
MOV [EBX],EAX
INC EAX
OR EAX,EAX
JNE _lib_70
JMP _lib_69
_lib_70:
MOV EAX,_lib_50+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-8]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
MOV [EBX],EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_68
_lib_69:
JMP _lib_51
_lib_67:
_lib_71:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_55
_lib_56:
CALL __switch
DD _lib_57
DD -1
DD _lib_60
DD 10
DD _lib_61
DD 8
DD _lib_66
DD 24
DD 0
JMP _lib_71
_lib_55:
JMP _lib_51
_lib_52:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],AL
LEA EAX,[EBP+20]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
_lib_50 DB 8,32,8,0
 
_fprintf:
PUSH EBP
MOV EBP,ESP
ADD ESP,-4
LEA EAX,[EBP-4]
PUSH EAX
CALL _CCARGC
PUSH EAX
LEA EAX,[EBP+8]
POP EBX
SHL EBX,1
SHL EBX,1
ADD EAX,EBX
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
DEC EAX
DEC EAX
DEC EAX
MOV [EBX],EAX
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
DEC EAX
DEC EAX
DEC EAX
MOV [EBX],EAX
PUSH EAX
MOV CL,2
CALL __print
ADD ESP,8
MOV ESP,EBP
POP EBP
RET
 
_printf:
PUSH EBP
MOV EBP,ESP
MOV EAX,__iob
MOV EBX,32
ADD EAX,EBX
PUSH EAX
CALL _CCARGC
PUSH EAX
LEA EAX,[EBP+8]
POP EBX
SHL EBX,1
SHL EBX,1
ADD EAX,EBX
MOV EBX,EAX
MOV EAX,4
XCHG EAX,EBX
SUB EAX,EBX
PUSH EAX
MOV CL,2
CALL __print
ADD ESP,8
POP EBP
RET
 
__print:
PUSH EBP
MOV EBP,ESP
ADD ESP,-56
LEA EAX,[EBP-16]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],EAX
LEA EAX,[EBP-32]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
DEC EAX
DEC EAX
DEC EAX
MOV [EBX],EAX
INC EAX
INC EAX
INC EAX
INC EAX
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
_lib_75:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
OR EAX,EAX
JNE _lib_77
JMP _lib_76
_lib_77:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,EAX
MOV EAX,37
CALL __ne
OR EAX,EAX
JNE _lib_79
JMP _lib_78
_lib_79:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,2
CALL _OS_fputc
ADD ESP,8
LEA EAX,[EBP-16]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_75
JMP _lib_80
_lib_78:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
_lib_80:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,EAX
MOV EAX,37
CALL __eq
OR EAX,EAX
JNE _lib_82
JMP _lib_81
_lib_82:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,2
CALL _OS_fputc
ADD ESP,8
LEA EAX,[EBP-16]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_75
_lib_81:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,EAX
MOV EAX,45
CALL __eq
OR EAX,EAX
JNE _lib_84
JMP _lib_83
_lib_84:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX,1
MOV [EBX],EAX
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_85
_lib_83:
LEA EAX,[EBP-8]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],EAX
_lib_85:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,EAX
MOV EAX,48
CALL __eq
OR EAX,EAX
JNE _lib_87
JMP _lib_86
_lib_87:
LEA EAX,[EBP-12]
MOV EBX,EAX
MOV EAX,48
MOV [EBX],EAX
JMP _lib_88
_lib_86:
LEA EAX,[EBP-12]
MOV EBX,EAX
MOV EAX,32
MOV [EBX],EAX
_lib_88:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
MOV CL,1
CALL _isdigit
ADD ESP,4
OR EAX,EAX
JNE _lib_90
JMP _lib_89
_lib_90:
LEA EAX,[EBP-28]
PUSH EAX
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
PUSH EAX
MOV CL,1
CALL _atoi
ADD ESP,4
POP EBX
MOV [EBX],EAX
_lib_91:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
MOV CL,1
CALL _isdigit
ADD ESP,4
OR EAX,EAX
JNE _lib_93
JMP _lib_92
_lib_93:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_91
_lib_92:
JMP _lib_94
_lib_89:
LEA EAX,[EBP-28]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],EAX
_lib_94:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,EAX
MOV EAX,46
CALL __eq
OR EAX,EAX
JNE _lib_96
JMP _lib_95
_lib_96:
LEA EAX,[EBP-24]
PUSH EAX
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
PUSH EAX
MOV CL,1
CALL _atoi
ADD ESP,4
POP EBX
MOV [EBX],EAX
_lib_97:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
MOV CL,1
CALL _isdigit
ADD ESP,4
OR EAX,EAX
JNE _lib_99
JMP _lib_98
_lib_99:
LEA EAX,[EBP-32]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_97
_lib_98:
JMP _lib_100
_lib_95:
LEA EAX,[EBP-24]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],EAX
_lib_100:
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
DEC EAX
DEC EAX
DEC EAX
MOV [EBX],EAX
INC EAX
INC EAX
INC EAX
INC EAX
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP-36]
PUSH EAX
LEA EAX,[EBP-56]
POP EBX
MOV [EBX],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]
JMP _lib_103
_lib_104:
LEA EAX,[EBP-56]
PUSH EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],AL
LEA EAX,[EBP-56]
MOV EBX,1
ADD EAX,EBX
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],AL
JMP _lib_102
_lib_105:
LEA EAX,[EBP-36]
PUSH EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
JMP _lib_102
_lib_106:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-56]
PUSH EAX
MOV CL,2
CALL _itoa
ADD ESP,8
JMP _lib_102
_lib_107:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-56]
PUSH EAX
MOV EAX,2
PUSH EAX
MOV CL,3
CALL _itoab
ADD ESP,12
JMP _lib_102
_lib_108:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-56]
PUSH EAX
MOV EAX,8
PUSH EAX
MOV CL,3
CALL _itoab
ADD ESP,12
JMP _lib_102
_lib_109:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-56]
PUSH EAX
MOV EAX,10
PUSH EAX
MOV CL,3
CALL _itoab
ADD ESP,12
JMP _lib_102
_lib_110:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-56]
PUSH EAX
MOV EAX,16
PUSH EAX
MOV CL,3
CALL _itoab
ADD ESP,12
JMP _lib_102
_lib_111:
LEA EAX,[EBP-16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
JMP _lib_102
_lib_103:
CALL __switch
DD _lib_104
DD 99
DD _lib_105
DD 115
DD _lib_106
DD 100
DD _lib_107
DD 98
DD _lib_108
DD 111
DD _lib_109
DD 117
DD _lib_110
DD 120
DD 0
JMP _lib_111
_lib_102:
LEA EAX,[EBP-20]
PUSH EAX
LEA EAX,[EBP-36]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,1
CALL _strlen
ADD ESP,4
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP-24]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_115
JMP _lib_113
_lib_115:
LEA EAX,[EBP-24]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-20]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
CALL __lt
OR EAX,EAX
JNE _lib_116
JMP _lib_113
_lib_116:
MOV EAX,1
JMP _lib_114
_lib_113:
XOR EAX,EAX
_lib_114:
OR EAX,EAX
JNE _lib_117
JMP _lib_112
_lib_117:
LEA EAX,[EBP-20]
PUSH EAX
LEA EAX,[EBP-24]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
_lib_112:
LEA EAX,[EBP-28]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-20]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
CALL __gt
OR EAX,EAX
JNE _lib_119
JMP _lib_118
_lib_119:
LEA EAX,[EBP-28]
PUSH EAX
LEA EAX,[EBP-28]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP-20]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
XCHG EAX,EBX
SUB EAX,EBX
POP EBX
MOV [EBX],EAX
JMP _lib_120
_lib_118:
LEA EAX,[EBP-28]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],EAX
_lib_120:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
CALL __lneg
OR EAX,EAX
JNE _lib_122
JMP _lib_121
_lib_122:
_lib_123:
LEA EAX,[EBP-28]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
MOV [EBX],EAX
INC EAX
OR EAX,EAX
JNE _lib_125
JMP _lib_124
_lib_125:
LEA EAX,[EBP-12]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,2
CALL _OS_fputc
ADD ESP,8
LEA EAX,[EBP-16]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_123
_lib_124:
_lib_121:
_lib_126:
LEA EAX,[EBP-20]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
MOV [EBX],EAX
INC EAX
OR EAX,EAX
JNE _lib_128
JMP _lib_127
_lib_128:
LEA EAX,[EBP-36]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,2
CALL _OS_fputc
ADD ESP,8
LEA EAX,[EBP-16]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_126
_lib_127:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_130
JMP _lib_129
_lib_130:
_lib_131:
LEA EAX,[EBP-28]
MOV EBX,EAX
MOV EAX, [EBX]
DEC EAX
MOV [EBX],EAX
INC EAX
OR EAX,EAX
JNE _lib_133
JMP _lib_132
_lib_133:
LEA EAX,[EBP-12]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,2
CALL _OS_fputc
ADD ESP,8
LEA EAX,[EBP-16]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_131
_lib_132:
_lib_129:
JMP _lib_75
_lib_76:
LEA EAX,[EBP-16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
 
_fputs:
PUSH EBP
MOV EBP,ESP
_lib_135:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
OR EAX,EAX
JNE _lib_137
JMP _lib_136
_lib_137:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,2
CALL _OS_fputc
ADD ESP,8
JMP _lib_135
_lib_136:
POP EBP
RET
__is DD 4,4,4,4,4,4,4,4,4,260
DD 260,260,260,260,4,4,4,4,4,4
DD 4,4,4,4,4,4,4,4,4,4
DD 4,4,320,208,208,208,208,208,208,208
DD 208,208,208,208,208,208,208,208,1113,1113
DD 1113,1113,1113,1113,1113,1113,1113,1113,208,208
DD 208,208,208,208,208,1619,1619,1619,1619,1619
DD 1619,595,595,595,595,595,595,595,595,595
DD 595,595,595,595,595,595,595,595,595,595
DD 595,208,208,208,208,208,208,1139,1139,1139
DD 1139,1139,1139,115,115,115,115,115,115,115
DD 115,115,115,115,115,115,115,115,115,115
DD 115,115,115,208,208,208,208,4
 
_isalnum:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,1
AND EAX,EBX
POP EBP
RET
 
_isalpha:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,2
AND EAX,EBX
POP EBP
RET
 
_iscntrl:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,4
AND EAX,EBX
POP EBP
RET
 
_isdigit:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,8
AND EAX,EBX
POP EBP
RET
 
_isgraph:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,16
AND EAX,EBX
POP EBP
RET
 
_islower:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,32
AND EAX,EBX
POP EBP
RET
 
_isprint:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,64
AND EAX,EBX
POP EBP
RET
 
_ispunct:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,128
AND EAX,EBX
POP EBP
RET
 
_isspace:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,256
AND EAX,EBX
POP EBP
RET
 
_isupper:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,512
AND EAX,EBX
POP EBP
RET
 
_isxdigit:
PUSH EBP
MOV EBP,ESP
MOV EAX,__is
PUSH EAX
LEA EAX,[EBP+8]
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,EAX
MOV EAX,1024
AND EAX,EBX
POP EBP
RET
 
_itoa:
PUSH EBP
MOV EBP,ESP
ADD ESP,-8
LEA EAX,[EBP-8]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
OR EAX,EAX
JL _lib_151
JMP _lib_150
_lib_151:
LEA EAX,[EBP+12]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
NEG EAX
POP EBX
MOV [EBX],EAX
_lib_150:
_lib_152:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,10
XCHG EAX,EBX
CDQ
IDIV EBX
MOV EAX,EDX
MOV EBX,48
ADD EAX,EBX
POP EBX
MOV [EBX],AL
LEA EAX,[EBP+12]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,10
XCHG EAX,EBX
CDQ
IDIV EBX
POP EBX
MOV [EBX],EAX
OR EAX,EAX
JG _lib_154
JMP _lib_153
_lib_154:
JMP _lib_152
_lib_153:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JL _lib_156
JMP _lib_155
_lib_156:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
DEC EAX
MOV EBX,EAX
MOV EAX,45
MOV [EBX],AL
_lib_155:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],AL
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,1
CALL _reverse
ADD ESP,4
MOV ESP,EBP
POP EBP
RET
 
_itoab:
PUSH EBP
MOV EBP,ESP
ADD ESP,-8
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP+8]
PUSH EAX
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,1
MOV ECX,EAX
MOV EAX,EBX
SAR EAX,CL
POP EBX
MOV [EBX],EAX
_lib_158:
LEA EAX,[EBP-8]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,1
AND EAX,EBX
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP+16]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,1
MOV ECX,EAX
MOV EAX,EBX
SAR EAX,CL
MOV EBX,EAX
MOV EAX,32767
AND EAX,EBX
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
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
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],AL
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,EAX
MOV EAX,10
CALL __lt
OR EAX,EAX
JNE _lib_161
JMP _lib_160
_lib_161:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,48
ADD EAX,EBX
POP EBX
MOV [EBX],AL
JMP _lib_162
_lib_160:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
MOV EBX,55
ADD EAX,EBX
POP EBX
MOV [EBX],AL
_lib_162:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
LEA EAX,[EBP+16]
PUSH EAX
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 EBX
MOV [EBX],EAX
OR EAX,EAX
JNE _lib_163
JMP _lib_159
_lib_163:
JMP _lib_158
_lib_159:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
XOR EAX,EAX
MOV [EBX],AL
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
PUSH EAX
MOV CL,1
CALL _reverse
ADD ESP,4
MOV ESP,EBP
POP EBP
RET
 
_itod:
PUSH EBP
MOV EBP,ESP
ADD ESP,-4
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JL _lib_166
JMP _lib_165
_lib_166:
LEA EAX,[EBP+16]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
NEG EAX
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX,45
MOV [EBX],AL
JMP _lib_167
_lib_165:
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX,32
MOV [EBX],AL
_lib_167:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JG _lib_169
JMP _lib_168
_lib_169:
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
XOR EAX,EAX
MOV [EBX],AL
JMP _lib_170
_lib_168:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JL _lib_172
JMP _lib_171
_lib_172:
LEA EAX,[EBP+8]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
NEG EAX
POP EBX
MOV [EBX],EAX
JMP _lib_173
_lib_171:
_lib_174:
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]
OR EAX,EAX
JNE _lib_176
JMP _lib_175
_lib_176:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_174
_lib_175:
_lib_173:
_lib_170:
_lib_177:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_179
JMP _lib_178
_lib_179:
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
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,10
XCHG EAX,EBX
CDQ
IDIV EBX
MOV EAX,EDX
MOV EBX,48
ADD 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,10
XCHG EAX,EBX
CDQ
IDIV EBX
POP EBX
MOV [EBX],EAX
OR EAX,EAX
JE _lib_181
JMP _lib_180
_lib_181:
JMP _lib_178
_lib_180:
JMP _lib_177
_lib_178:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_183
JMP _lib_182
_lib_183:
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
PUSH EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOVSX EAX,BYTE [EBX]
POP EBX
MOV [EBX],AL
_lib_182:
_lib_184:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JG _lib_186
JMP _lib_185
_lib_186:
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
MOV EAX,32
MOV [EBX],AL
JMP _lib_184
_lib_185:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
 
_itoo:
PUSH EBP
MOV EBP,ESP
ADD ESP,-4
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JG _lib_189
JMP _lib_188
_lib_189:
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
XOR EAX,EAX
MOV [EBX],AL
JMP _lib_190
_lib_188:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JL _lib_192
JMP _lib_191
_lib_192:
LEA EAX,[EBP+8]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
NEG EAX
POP EBX
MOV [EBX],EAX
JMP _lib_193
_lib_191:
_lib_194:
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]
OR EAX,EAX
JNE _lib_196
JMP _lib_195
_lib_196:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_194
_lib_195:
_lib_193:
_lib_190:
_lib_197:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_199
JMP _lib_198
_lib_199:
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,7
AND EAX,EBX
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP+16]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,3
MOV ECX,EAX
MOV EAX,EBX
SAR EAX,CL
MOV EBX,EAX
MOV EAX,8191
AND EAX,EBX
POP EBX
MOV [EBX],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
PUSH EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,48
ADD EAX,EBX
POP EBX
MOV [EBX],AL
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JE _lib_201
JMP _lib_200
_lib_201:
JMP _lib_198
_lib_200:
JMP _lib_197
_lib_198:
_lib_202:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_204
JMP _lib_203
_lib_204:
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
MOV EAX,32
MOV [EBX],AL
JMP _lib_202
_lib_203:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
 
_itou:
PUSH EBP
MOV EBP,ESP
ADD ESP,-4
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JG _lib_207
JMP _lib_206
_lib_207:
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
XOR EAX,EAX
MOV [EBX],AL
JMP _lib_208
_lib_206:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JL _lib_210
JMP _lib_209
_lib_210:
LEA EAX,[EBP+8]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
NEG EAX
POP EBX
MOV [EBX],EAX
JMP _lib_211
_lib_209:
_lib_212:
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]
OR EAX,EAX
JNE _lib_214
JMP _lib_213
_lib_214:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_212
_lib_213:
_lib_211:
_lib_208:
_lib_215:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_217
JMP _lib_216
_lib_217:
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,1
AND EAX,EBX
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP+16]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,1
MOV ECX,EAX
MOV EAX,EBX
SAR EAX,CL
MOV EBX,EAX
MOV EAX,32767
AND EAX,EBX
POP EBX
MOV [EBX],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
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,5
XCHG EAX,EBX
CDQ
IDIV EBX
MOV EAX,EDX
MOV EBX,EAX
MOV EAX,1
MOV ECX,EAX
MOV EAX,EBX
SAL EAX,CL
PUSH EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
POP EBX
ADD EAX,EBX
MOV EBX,48
ADD 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,5
XCHG EAX,EBX
CDQ
IDIV EBX
POP EBX
MOV [EBX],EAX
OR EAX,EAX
JE _lib_219
JMP _lib_218
_lib_219:
JMP _lib_216
_lib_218:
JMP _lib_215
_lib_216:
_lib_220:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_222
JMP _lib_221
_lib_222:
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
MOV EAX,32
MOV [EBX],AL
JMP _lib_220
_lib_221:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
 
_itox:
PUSH EBP
MOV EBP,ESP
ADD ESP,-8
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JG _lib_225
JMP _lib_224
_lib_225:
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
XOR EAX,EAX
MOV [EBX],AL
JMP _lib_226
_lib_224:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JL _lib_228
JMP _lib_227
_lib_228:
LEA EAX,[EBP+8]
PUSH EAX
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
NEG EAX
POP EBX
MOV [EBX],EAX
JMP _lib_229
_lib_227:
_lib_230:
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]
OR EAX,EAX
JNE _lib_232
JMP _lib_231
_lib_232:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
INC EAX
MOV [EBX],EAX
JMP _lib_230
_lib_231:
_lib_229:
_lib_226:
_lib_233:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_235
JMP _lib_234
_lib_235:
LEA EAX,[EBP-4]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,15
AND EAX,EBX
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP+16]
PUSH EAX
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,16
XCHG EAX,EBX
CDQ
IDIV EBX
POP EBX
MOV [EBX],EAX
LEA EAX,[EBP-4]
MOV EBX,EAX
MOV EAX, [EBX]
MOV EBX,EAX
MOV EAX,10
CALL __lt
OR EAX,EAX
JNE _lib_237
JMP _lib_236
_lib_237:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX,48
MOV [EBX],EAX
JMP _lib_238
_lib_236:
LEA EAX,[EBP-8]
MOV EBX,EAX
MOV EAX,55
MOV [EBX],EAX
_lib_238:
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
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
POP EBX
MOV [EBX],AL
LEA EAX,[EBP+16]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JE _lib_240
JMP _lib_239
_lib_240:
JMP _lib_234
_lib_239:
JMP _lib_233
_lib_234:
_lib_241:
LEA EAX,[EBP+8]
MOV EBX,EAX
MOV EAX, [EBX]
OR EAX,EAX
JNE _lib_243
JMP _lib_242
_lib_243:
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
MOV EAX,32
MOV [EBX],AL
JMP _lib_241
_lib_242:
LEA EAX,[EBP+12]
MOV EBX,EAX
MOV EAX, [EBX]
MOV ESP,EBP
POP EBP
RET
 
__iob:
times 3*32 db 0x0
/programs/develop/scc/Libstd.c
0,0 → 1,440
#include "stdio.h"
#include "clib.h"
 
/*
** Write string to standard output.
*/
puts(string) char *string;
{fputs(string,stdout);
OS_fputc('\n',stdout);
}
 
/*
** reverse string in place
*/
reverse(s) char *s;
{char *j; int c;
 
j=s+strlen(s)-1;
while(s<j)
{c=*s;
*s++ =*j;
*j-- =c;
}
}
 
/*
** copy t to s
*/
strcpy(s,t) char *s,*t;
{char *d;
 
d=s;
while(*s++ =*t++);
return (d);
}
 
/*
** return length of string s (fast version)
*/
strlen(s) char *s;
{char *ptr;
 
ptr=s;
while(*ptr)
{++ptr;
}
 
return (ptr-s);
#ifdef _INASM
#asm
xor al,al ; set search value to zero
mov cx,65535 ; set huge maximum
mov di,[bp+4] ; get address of s
cld ; set direction flag forward
repne scasb ; scan for zero
mov ax,65534
sub ax,cx ; calc and return length
#endasm
#endif
}
 
/*
** return upper-case of c if it is lower-case, else c
*/
toupper(c) int c;
{if(c<='z' && c>='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 && maxchr<len) len=maxchr;
if(width>len) 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;
}
 
/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 <eax,ebx,ecx,edx,esi,edi,ebp,esp>
 
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
/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"
/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
 
/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
/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:
/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 */
 
/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]) */
 
/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 <stdio.h>
#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: "<variable>: TIMES <number> D<type> 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<id>]\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<id> 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);
}
 
/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 <stdio.h>
#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);
}
 
/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 <stdio.h>
#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);
}
 
/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 <stdio.h>
#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,<n>\15\n??";
code[ADD21] = "\211ADD EBX,EAX\15\n";
code[ADD2n] = "\010?ADD EBX,<n>\15\n??";
code[ADDbpn] = "\001ADD BYTE [EBX],<n>\15\n";
code[ADDwpn] = "\001ADD WORD [EBX],<n>\15\n";
code[ADDm_] = "\000ADD <m>";
code[ADDSP] = "\000?ADD ESP,<n>\15\n??";
code[AND12] = "\211AND EAX,EBX\15\n";
code[ANEG1] = "\010NEG EAX\15\n";
code[ARGCNTn] = "\000?MOV CL,<n>?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 <m>\15\n";
code[BYTE_] = "\000 DB ";
code[BYTEn] = "\000 RESB <n>\15\n";
code[BYTEr0] = "\000 TIMES <n> DB 0\15\n";
code[COM1] = "\010NOT EAX\15\n";
code[COMMAn] = "\000,<n>\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 <n>\15\n";
code[DWORDr0] = "\000 TIMES <n> DD 0\15\n";
code[ENTER] = "\100PUSH EBP\15\nMOV EBP,ESP\15\n";
code[EQ10f] = "\010<g>OR EAX,EAX\15\nJE _<d>\15\nJMP _<n>\15\n_<d>:\15\n";
code[EQ12] = "\211CALL __eq\15\n";
code[GE10f] = "\010<g>OR EAX,EAX\15\nJGE _<d>\15\nJMP _<n>\15\n_<d>:\15\n";
code[GE12] = "\011CALL __ge\15\n";
code[GE12u] = "\011CALL __uge\15\n";
code[GETb1m] = "\020MOVSX EAX,BYTE [<m>]\15\n";
code[GETb1mu] = "\020MOVZX EAX,BYTE [<m>]\15\n";
code[GETb1p] = "\021MOVSX EAX,BYTE [EBX?<o>??]\15\n"; /* see gen() */
code[GETb1pu] = "\021MOVZX EAX,BYTE [EBX?<o>??]\15\n"; /* see gen() */
code[GETb1s] = "\020MOVSX EAX,BYTE [EBP<o>]\15\n";
code[GETb1su] = "\020MOVZX EAX,BYTE [EBP<o>]\15\n";
 
code[GETd1m] = "\020MOV EAX,[<m>]\15\n";
code[GETd1n] = "\020?MOV EAX,<n>?XOR EAX,EAX?\15\n";
code[GETd1p] = "\021MOV EAX, [EBX?<o>??]\15\n"; /* see gen() */
code[GETd2n] = "\002?MOV EBX,<n>?XOR EBX,EBX?\15\n";
code[GETw1m] = "\020MOVSX EAX,WORD [<m>]\15\n";
code[GETw1m_] = "\020MOVSX EAX,WORD [<m>]";
code[GETw1n] = "\020?MOV EAX,<n>?XOR EAX,EAX?\15\n";
code[GETw1p] = "\021MOVSX EAX, WORD [EBX?<o>??]\15\n"; /* see gen() */
code[GETw1s] = "\020MOVSX EAX, WORD [EBP<o>]\15\n";
code[GETw2m] = "\002MOVSX EBX,WORD <m>\15\n";
code[GETw2n] = "\002?MOV EBX,<n>?XOR EBX,EBX?\15\n";
code[GETw2p] = "\021MOVSX EBX,WORD [EBX?<o>??]\15\n";
code[GETw2s] = "\002MOVSX EBX,WORD [EBP<o>]\15\n";
code[GT10f] = "\010<g>OR EAX,EAX\15\nJG _<d>\15\nJMP _<n>\15\n_<d>:\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 <n>\15\n";
code[WORDr0] = "\000 TIMES <n> DW 0\15\n";
code[JMPm] = "\000JMP _<n>\15\n";
code[LABm] = "\000_<n>:\15\n";
code[LE10f] = "\010<g>OR EAX,EAX\15\nJLE _<d>\15\nJMP _<n>\15\n_<d>:\15\n";
code[LE12] = "\011CALL __le\15\n";
code[LE12u] = "\011CALL __ule\15\n";
code[LNEG1] = "\010CALL __lneg\15\n";
code[LT10f] = "\010<g>OR EAX,EAX\15\nJL _<d>\15\nJMP _<n>\15\n_<d>:\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] = "\010<g>OR EAX,EAX\15\nJNE _<d>\15\nJMP _<n>\15\n_<d>:\15\n";
code[NE12] = "\211CALL __ne\15\n";
code[NEARm] = "\000 DD _<n>\15\n";
code[OR12] = "\211OR EAX,EBX\15\n";
code[PLUSn] = "\000?+<n>??\15\n";
code[POINT1l] = "\020MOV EAX,_<l>+<n>\15\n";
code[POINT1m] = "\020MOV EAX,<m>\15\n";
code[POINT1s] = "\020LEA EAX,[EBP<o>]\15\n";
code[POINT2m] = "\002MOV EBX,<m>\15\n";
code[POINT2m_]= "\002MOV EBX,<m>";
code[POINT2s] = "\002LEA EBX,[EBP<o>]\15\n";
code[POP2] = "\002POP EBX\15\n";
code[PUSH1] = "\110PUSH EAX\15\n";
code[PUSH2] = "\101PUSH EBX\15\n";
code[PUSHm] = "\100PUSH <m>\15\n";
code[PUSHp] = "\100PUSH [EBX?<o>??]\15\n";
code[PUSHs] = "\100PUSH [EBP?<o>??]\15\n";
code[PUT_m_] = "\000MOV <m>";
code[PUTbm1] = "\010MOV BYTE [<m>],AL\15\n";
code[PUTbp1] = "\011MOV [EBX],AL\15\n";
code[PUTdm1] = "\010MOV DWORD [<m>],EAX\15\n";
code[PUTdp1] = "\011MOV [EBX],EAX\15\n";
code[PUTwm1] = "\010MOV WORD [<m>],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_<n>";
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 <m>";
code[SUB12] = "\011SUB EAX,EBX\15\n"; /* see gen() */
code[SUB1n] = "\010?SUB EAX,<n>\15\n??";
code[SUBbpn] = "\001SUB [EBX],<n>\15\n";
code[SUBwpn] = "\001SUB [EBX],<n>\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);
}