Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4867 leency 1
\ Оптимизирующий макроподстановшик        Максимов М.О.
2
\ http://wiki.forth.org.ru/optimizer
3
 
4
[UNDEFINED] C>S
5
[IF]
6
: C>S ( c -- n )  0xFF AND [ 0x7F INVERT ] LITERAL XOR 0x80 + ;
7
[THEN]
8
 
9
BASE @ HEX
10
 
11
\ : REL! ( ADDR' ADDR  --  )
12
\        TUCK - SWAP ! ;
13
 
14
: REL@ ( ADDR -- ADDR' )
15
         DUP @ + ;
16
 
17
\  FALSE VALUE OPT?
18
   TRUE VALUE OPT?
19
 
20
  084 VALUE J_COD
21
 
22
: SET-OPT TRUE TO OPT? ;
23
 
24
: DIS-OPT FALSE TO OPT? ;
25
 
26
INLINEVAR
27
[IF]
28
0x20 VALUE MM_SIZE
29
 
30
 
31
 
32
 
33
 
34
 
35
 
36
 
37
 
38
 
39
 
40
0x44 CELLS DUP CONSTANT OpBuffSize
41
 
42
CREATE OP0 HERE >T DUP , 0 , SWAP ALLOT
43
 
44
DUP OpBuffSize + CELL- CONSTANT OPLast
45
 
46
CELL+ DUP CONSTANT OP1
47
CELL+ DUP CONSTANT OP2
48
CELL+ DUP CONSTANT OP3
49
CELL+ DUP CONSTANT OP4
50
CELL+ DUP CONSTANT OP5
51
CELL+ DUP CONSTANT OP6
52
CELL+ DUP CONSTANT OP7
53
CELL+ DUP CONSTANT OP8
54
 
55
DROP
56
 
57
: SetOP ( -- )
58
 OP0 OP1 OpBuffSize CELL- CMOVE>
59
 DP @ OP0 !
60
;
61
 
62
: ToOP0 ( OPn -- )
63
     OP0 OpBuffSize CELL- CMOVE ;
64
 
65
0x11 CELLS DUP CONSTANT JpBuffSize
66
 
67
CREATE JP0 HERE DUP , OVER ALLOT
68
 
69
 
70
DUP ROT ERASE
71
 
72
CELL+ DUP CONSTANT JP1
73
 
74
 
75
CELL+ DUP CONSTANT JP2
76
 
77
 
78
CELL+ DUP CONSTANT JP3
79
 
80
 
81
CELL+ DUP CONSTANT JP4
82
 
83
DROP
84
 
85
[THEN]
86
 
87
: ClearJpBuff JP0 JpBuffSize ERASE ;
88
 
89
:  J@ 1+   REL@    CELL+ ;
90
 
91
: SJ@ 1+ DUP C@ C>S + 1+ ;
92
 
93
: J_@
94
        DUP C@ F0
95
           AND 70 = IF   SJ@ ELSE
96
        DUP C@ EB = IF   SJ@ ELSE
97
        DUP C@ E9 = IF    J@ ELSE
98
        DUP W@ F0FF
99
         AND 800F = IF 1+ J@ ELSE
100
        HEX U. 1 ." J_@ ERR" ABORT
101
        THEN  THEN THEN THEN
102
;
103
 
104
: SetJP ( -- )
105
 JP0 JpBuffSize + CELL- @  DUP
106
 IF J_@
107
 THEN
108
\  DP @ UMIN
109
 J-SET UMAX TO J-SET
110
 JP0 JP1 JpBuffSize CELL- CMOVE>
111
 DP @ JP0 ! ;
112
 
113
\ : ToJP0 ( OPn -- )
114
\     JP0 JpBuffSize CELL- CMOVE
115
\ JP0 JpBuffSize + CELL- 0!  ;
116
 
117
: ?SET DP @
118
       DUP LAST-HERE <> IF DUP TO :-SET DUP TO J-SET THEN
119
       DUP    OP0 @ U< IF OP0 0! THEN
120
       DUP    OP1 @ U< IF OP1 0! THEN
121
       DUP    JP0 @ U< IF JP0 0! THEN
122
              JP1 @ U< IF JP1 0! THEN
123
;
124
 
125
: SHORT? ( n -- -129 < n < 128 )
126
  0x80 + 0x100 U<
127
;
128
 
129
M\ VECT DTST
130
 
131
\ \\\\\\\\\\
132
 
133
[DEFINED] [TTO] \ CR .( TTO=) DUP .
134
[IF]
135
 
136
GET-CURRENT
137
 
138
WORDLIST CONSTANT MACROOPT-WL
139
 
140
\ запишем адрес имени словаря
141
' MACROOPT-WL EXECUTE CELL+ ( name_addr )
142
LAST @ SWAP !
143
 
144
ALSO ' MACROOPT-WL EXECUTE CONTEXT ! DEFINITIONS
145
TC-WL ALSO TC-IMM
146
 
147
[THEN]
148
 
149
\ \\\\\\\\\\\\
150
 
151
: EVEN-EAX OFF-EAX
152
   IF      M\ 1000 DTST
153
 SetOP OFF-EAX DUP SHORT?
154
     IF    0408D W, C,
155
     ELSE  0808D W,  ,
156
     THEN   \  LEA   EAX,  OFF-EBP [EAX]
157
 
158
       M\ 1001 DTST
159
   THEN
160
;
161
 
162
: EVEN-EBP OFF-EBP
163
   IF SetOP  OFF-EBP  06D8D W, C, \   LEA   ebp,  OFF-EBP [EBP]
164
 
165
   THEN
166
;
167
 
168
: +>OFF-EBP ( C -- )
169
   C>S OFF-EBP + TO OFF-EBP ;
170
 
171
: ADD|XOR|OR|AND=  ( W -- FLAG )
172
   CASE
173
  DUP 4503 <> IF   \ ADD EAX, X2 [EBP]
174
  DUP 450B <> IF   \  OR
175
  DUP 4523 <> IF   \ AND
176
  DUP 4533 <> IF   \ XOR
177
             DROP FALSE EXIT
178
  DUPENDCASE DROP TRUE ;
179
 
180
: DUP3B?[EBP]  ( W -- W FLAG )
181
   CASE
182
  DUP 0E7C4 AND 04500 <> IF      \ 010X.X101 00XX.X0XX
183
\ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP  _L | E_X | X [EBP]  , _L | E_X | X [EBP]
184
 
185
  DUP  E7FD AND  4589 <> IF  \ 010X.X101 1000.10X1
186
\ MOV  X [EBP], E(ABCD)X | E(ABCD)X , X [EBP]
187
\   DUP           5503 <> IF \ ADD   EDX , 0 [EBP]
188
   DUP           758B <> IF \ MOV   ESI , X [EBP]
189
 
190
  DUP  EFFF AND  6DDB <> IF  \ FLD | FSTP     EXTENDED 0 [EBP]
191
 
192
  DUP            45DB <> IF  \ FILD DWORD FC [EBP]
193
  DUP            65F7 <> IF  \  MUL  X [EBP]
194
  DUP            6DF7 <> IF  \ IMUL  X [EBP]
195
  DUP           04587 <> IF  \ XCHG EAX , X [EBP]
196
             FALSE EXIT
197
  DUPENDCASE TRUE ;
198
 
199
: DUP3B?      ( W -- W FLAG )
200
   CASE
201
\  11XX.X000 1000.0011
202
   DUP C7FF AND  C083 <> IF \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP  EAX, # X
203
   DUP          0478B <> IF \ MOV  EAX, X [EDI]
204
   DUP          0488B <> IF \ MOV  ECX, X [EAX]
205
   DUP          0588B <> IF \ MOV  EBX, X [EAX]
206
   DUP          0508B <> IF \ MOV  EDX, X [EAX]
207
   DUP          0788B <> IF \ MOV  EDI, X [EAX]
208
   DUP          0708B <> IF \ MOV  ESI, X [EAX]
209
 
210
 
211
   DUP          0588D <> IF \ LEA  EBX, X [EAX]
212
   DUP          0508D <> IF \ LEA  EDX, X [EAX]
213
   DUP          05089 <> IF \ MOV X [EAX], EDX
214
   DUP          05189 <> IF \ MOV X [ECX] , EDX
215
   DUP          07589 <> IF \ MOV X [EAX], ESI
216
 
217
   DUP          0F8C1 <> IF \ SAR  EAX, # X
218
   DUP          0E0C1 <> IF \ SHL  EAX, # X
219
   DUP          0E1C1 <> IF \ SHL  ECX, # X
220
 
221
   DUP          0E8C1 <> IF \ SHR  EAX, # X
222
   DUP          0408D <> IF \ LEA  EAX , X [EAX]
223
   DUP          0408B <> IF \ MOV  EAX , X [EAX]
224
             FALSE EXIT
225
  DUPENDCASE TRUE ;
226
 
227
: DUP2B?      ( W -- W FLAG )
228
   CASE
229
  DUP 0E4C5 AND 0C001 <> IF
230
\ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP  E_X , E_X
231
 
232
\  DUP           01801 <> IF  \ ADD  [EAX], EBX
233
 
234
  DUP           01001 <> IF  \ ADD  [EAX], EDX
235
  DUP            0003 <> IF  \ ADD  EAX, [EAX]
236
  DUP		F633 <> IF  \ XOR  ESI, ESI
237
  DUP		108B <> IF  \ MOV     EDX , [EAX]
238
  DUP 0C0FF AND  C085 <> IF \ TEST E__ , E__
239
 
240
\ 110X.X0XX  1000.10X1
241
  DUP 0E4FC AND 0C088 <> IF \  MOV    E(ABCD)X , E(ABCD)X | (ABCD)L , (ABCD)L
242
 
243
\ 00XX.X0XX  1000.100X
244
 
245
  DUP 0C4FE AND 00088 <> IF \  MOV  [E(ABCD)X] , E(ABCD)X | (ABCD)(HL)
246
  DUP           0008B <> IF \ MOV EAX, [EAX]
247
  DUP            028B <> IF \ MOV EAX, [EDX]
248
  DUP           0C78B <> IF \ MOV EAX,  EDI
249
  DUP           0F88B <> IF \ MOV EDI,  EAX
250
  DUP           0F08B <> IF \ MOV ESI,  EAX
251
  DUP           0C88B <> IF \ MOV ECX , EAX
252
  DUP           0D18B <> IF \ MOV EDX , ECX
253
  DUP           0C68B <> IF \ MOV EAX,  ESI
254
\ 111X.X0XX  1101.00XX
255
  DUP 0E4FC AND 0E0D0 <> IF \  S(AH)(LR)  (ABCD)L | E(ABCD)X,  CL | 1
256
  DUP           0C0DD <> IF \ FFREE ST
257
 
258
  DUP  F0FF AND  C0D9 <> IF \  FLD     ST(X)  | FXCH    ST(X)
259
\     1100.XXXX.1101.1001
260
 
261
  DUP  FAFF AND  E0D9 <> IF \  FCHS|FABS|FTST|FXAM
262
\     1110.0X0X.1101.1001
263
  DUP  E8FF AND  E8D9 <> IF \ FLD1 FLDL2T FLDL2E FLDPI FLDLG2 FLDLN2 FLDZ ???
264
\     1110.1XXX.1101.1001
265
 
266
  DUP  F0FF AND  F0D9 <> IF   \ F2XM1 FYL2X FPTAN FPATAN
267
\     1111.XXXX.1101.1001    \ FXTRACT FPREM1  FDECSTP FINCSTP
268
                             \ FPREM   FYL2XP1 FSQRT   FSINCOS
269
                             \ FRNDINT FSCALE  FSIN    FCOS
270
  DUP  E8FF AND  20DB <> IF \  FLD     EXTENDED [E_X]  | FST  EXTENDED [E_X]
271
\   001X.0XXX.1101.1011
272
 
273
  DUP  E8FF AND  00DD <> IF \  FLD    DOUBLE [E_X]  | FST  DOUBLE [E_X]
274
\   000X.0XXX.1101.1101
275
 
276
  DUP  F0FF AND  C0DE <> IF \  FADDP   ST(X) | FMULP   ST(X)
277
  DUP  E0FF AND  E0DE <> IF \  FSUBRP  ST(X) | FSUBP   ST(X)
278
\     111X.XXXX.1101.1110  \  FDIVRP  ST(X) | FDIVP   ST(X)
279
 
280
  DUP            00FF <> IF \ INC [EAX]
281
\   DUP 0C0FF <> IF \ INC  EAX
282
\   DUP 0C3FF <> IF \ INC  EBX
283
\   DUP 0C8FF <> IF \ DEC  EAX
284
  DUP           0D0F7 <> IF \ NOT EAX
285
  DUP           0D1F7 <> IF \ NOT ECX
286
  DUP           0D8F7 <> IF \ NEG EAX
287
  DUP           0D9F7 <> IF \ NEG ECX
288
  DUP           0DAF7 <> IF \ NEG EDX
289
  DUP           0E9F7 <> IF \ IMUL ECX
290
  DUP           0F1F7 <> IF \  DIV ECX
291
  DUP           0F9F7 <> IF \ IDIV ECX
292
             FALSE EXIT
293
  DUPENDCASE TRUE ;
294
 
295
: DUP6B?      ( W -- W FLAG )
296
   CASE
297
\ X00X.X101 1000.10X1
298
  DUP   67FD AND 0589 <> IF  \ MOV X {[EBP]}, E(ACDB)X | E(ACDB)X , X {[EBP]}
299
 
300
  DUP   C3FF AND C081 <> IF \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP  EAX, # X
301
 
302
  DUP           00501 <> IF    \ ADD  X , EAX
303
  DUP            0503 <> IF \ ADD  EAX,  X
304
  DUP            053B <> IF \ CMP  EAX,  X
305
  DUP            873B <> IF \ CMP  EAX,  X [EDI]
306
  DUP            F281 <> IF \ XOR  EDX , # 80000000
307
  DUP            928D <> IF \ LEA  EDX , [EDX+80000000H]
308
 
309
\  DUP   0589 <> IF \ MOV X , EAX
310
\  DUP   058B <> IF \ MOV EAX,  X
311
  DUP            808B <> IF \ MOV EAX, X [EAX]
312
  DUP            808D <> IF \ LEA EAX, X [EAX]
313
  DUP            8703 <> IF \ MOV EAX, X [EDI]
314
 
315
  DUP            878B <> IF \ MOV EAX, X [EDI]
316
  DUP            878D <> IF \ LEA EAX, X [EDI]
317
  DUP             0C7 <> IF \ MOV [EAX], # X
318
  DUP            0081 <> IF \ ADD [EAX], # X
319
  DUP            05FF <> IF \ INC X
320
 
321
\  DUP  FCFF AND C0C7 <> IF \ MOV EAX|EBX|ECX|EDX, # X
322
             FALSE EXIT
323
  DUPENDCASE TRUE ;
324
 
325
: DUP5B?      ( C -- C FLAG )
326
 
327
 
328
  DUP   0C7 AND   5 =    \  ADD|OR|ADC|SBB|AND|SUB|XOR|CMP  EAX, # X
329
  OVER  0FC AND 0B8 = OR \  MOV EAX|EBX|ECX|EDX, # X
330
  OVER  0FD AND 0A1 = OR \  MOV EAX, X  | X , EAX
331
;
332
 
333
: DUP7B?      ( N -- N FLAG )
334
\ XX00.0101 0000.0100 1000.10X1
335
  DUP  3FFFFD AND 050489 =    \  MOV   X [EAX*_] , EAX  | MOV EAX , X [EAX*_]
336
\ XX00.0101 0000.0100 1000.1X01
337
  OVER 3FFFFB AND 050489 = OR \  MOV   X [EAX*_] , EAX  | LEA EAX , X [EAX*_]
338
  OVER 80B60F = OR \ MOVZX EAX, BYTE PTR [EAX]
339
  OVER 45048D = OR \ LEA  EAX, X [EAX*2]
340
 
341
;
342
 
343
 
344
 
345
\ 0 VALUE ZZZZ \ VECT VVV
346
 
347
: ?ChEAX  ( ADDR --  FALSE | TRUE )
348
   CASE
349
   DUP C@
350
   DUP       B8 <> IF   \  MOV  EAX, # X
351
   DUP       A1 <> IF   \  MOV  EAX,   X
352
   DROP
353
   DUP W@
354
\   DUP ADD|XOR|OR|AND= 0= IF
355
   DUP     C033 <> IF   \  XOR  EAX, EAX
356
   DUP     C031 <> IF   \  XOR  EAX, EAX
357
   DUP     D889 <> IF   \  MOV  EAX, EBX
358
 
359
   38FF AND
360
   DUP  008B <> IF   \  MOV  EAX, ___
361
   DUP  008D <> IF   \  LEA  EAX, ___
362
   DROP
363
   DUP  @  FFFFFF AND
364
   DUP  02048D <> IF   \  LEA  EAX, [EDX] [EAX]
365
 
366
             2DROP TRUE EXIT
367
  DUPENDCASE 2DROP FALSE ;
368
 
369
: ^?EAX=  ( ADDR --  FALSE | TRUE )
370
\ FALSE
371
   DUP ?ChEAX IF DROP TRUE EXIT THEN
372
   DUP W@
373
   DUP  00F9
374
   AND  0089 <> IF 2DROP FALSE EXIT THEN
375
\ LEA MOV
376
   CASE
377
   FF00 AND
378
   DUP 0100 AND
379
       0100 <> IF   \  MOV  EAX,
380
 
381
   DUP  C200 <> IF   \  MOV  EAX, EDX
382
   DUP  D800 <> IF   \  MOV  EAX, EBX
383
   DROP
384
   DUP @ FFFF00 AND
385
 
386
   DUP   240400 <> IF   \  MOV  EAX,   [ESP]
387
   DUP   244400 <> IF   \  MOV  EAX, X [ESP]
388
   DUP   95048B <> IF   \ 8B0495F0065A00        MOV     EAX , 5A06F0 [EDX*4]
389
             2DROP TRUE EXIT
390
  DUPENDCASE 2DROP FALSE ;
391
 
392
\   DUP   8B00 =     \  MOV  EAX, [EAX]
393
 
394
: OP_SIZE ( OP - n )
395
  DUP IF THEN  DUP CELL- @ SWAP @ -
396
;
397
 
398
: OPexcise ( OPX -- )
399
      DUP OP0 = IF @ DP ! OP1 ToOP0 EXIT THEN
400
      >R
401
      R@ CELL- @ R@ @  DP @ R@ CELL- @ - CMOVE
402
 
403
      R@ OP_SIZE NEGATE
404
      R@ OP0 DO DUP I +! CELL +LOOP
405
      ALLOT
406
      R@ CELL+ R@ OpBuffSize CELL- R> - OP0 + CMOVE
407
;
408
: ?OPlast  ( OPX -- OPX flag )
409
     DUP OP0 OpBuffSize + CELL- CELL- U> ;
410
 
411
: XX_STEP ( OPX -- OPX+CELL FALSE | { OPX | FALSE } TRUE )
412
\ Проверка на не изменение  EAX
413
     ?OPlast
414
     IF DROP FALSE TRUE EXIT THEN
415
     DUP @
416
     DUP  :-SET U< IF 2DROP FALSE TRUE EXIT THEN
417
     C@
418
   CASE
419
     DUP 3D <> IF   \ CMP EAX, # X
420
     DUP 3B <> IF   \ CMP E_X , X
421
     DUP A3 <> IF   \ MOV X , EAX
422
     DUP B9 <> IF   \ MOV ECX , # X
423
     DUP BA <> IF   \ MOV EDX , # X
424
     DUP BB <> IF   \ MOV EBX , # X
425
     DUP 50 <> IF   \ PUSH EAX
426
     DROP
427
     DUP @ W@
428
     DUP 04FF AND 04C7 <> IF \ MOV 4444 , # 5555
429
     DUP 40FE AND 0088 <> IF \ MOV   [EAX] , DL
430
     DUP 4D89 <> IF \ MOV 4 [EBP] , ECX
431
     DUP 558B <> IF \ MOV EDX , FC [EBP]
432
     DUP 4C8B <> IF \ MOV ECX , FC [E__] [E__]
433
     DUP 648D <> IF \ LEA  ESP , 8 [ESP]
434
     DUP 34FF AND 04FF <> IF \ INC 0 [ESP]
435
     DUP C00B <> IF \ OR  EAX, EAX
436
     DUP D00B <> IF \ OR  EDX, EAX
437
     DUP D02B <> IF \ SUB EDX, EAX
438
   DUP 0401 <> IF \ ADD [E_X]
439
     DUP 06FD  \ CMP X [EBP], # Z   \ CMP 44444, # 55555
440
     AND 0481 <> IF
441
     DUP FFFD
442
     AND 4589 =
443
       IF   OVER @ 2+ C@ OP0 @  2+ C@ =
444
         IF  DROP TRUE
445
             EXIT
446
         THEN
447
         458B = IF DROP FALSE TRUE EXIT THEN
448
             CELL+ FALSE EXIT
449
       THEN
450
     2DROP
451
     FALSE TRUE EXIT
452
  DUPENDCASE  DROP CELL+ FALSE ;
453
 
454
: ?EDX_[EBP]   ( OPX -  FLAG )
455
  DUP @   @ FFFFFF AND
456
  DUP  24048B =  \  8B0424		MOV     EAX , [ESP]
457
        IF 2DROP FALSE EXIT THEN
458
  FFFF AND
459
 
460
  DUP  458B XOR     \  8B4500	      MOV     EAX , 0 [EBP]
461
  OVER 4589 XOR OR  \ OPX N F MOV     FC [EBP] , EAX
462
0=      IF DROP
463
            @ 2+ C@ OP0 @ 2+ C@ =
464
            EXIT
465
        THEN
466
  NIP
467
  DUP  ADD|XOR|OR|AND=
468
        IF DROP FALSE EXIT THEN
469
  DUP  E8C1  =   \  C1E819            SHR     EAX , 19
470
        IF DROP FALSE EXIT THEN
471
  DUP  418D  =   \  8D41FF            LEA     EAX , FF [ECX]
472
        IF DROP FALSE EXIT THEN
473
  DUP  408D  =   \  8D40FF            LEA     EAX , FF [EAX]
474
        IF DROP FALSE EXIT THEN
475
  DUP  878D  =   \  8D873C100000      LEA     EAX , 103C [EDI]
476
        IF DROP FALSE EXIT THEN
477
  DUP  D0F7  =   \  F7D0	      NOT     EAX
478
        IF DROP FALSE EXIT THEN
479
  DUP  D8F7  =   \  F7D8	      NEG     EAX
480
        IF DROP FALSE EXIT THEN
481
  DUP  C123  =   \  23C1              AND     EAX , ECX
482
        IF DROP FALSE EXIT THEN
483
 
484
  DUP  C033  =    \       XOR     EAX , EAX
485
        IF DROP FALSE EXIT THEN
486
 
487
  DUP  808D  =   \  8D8024475A00	LEA     EAX , 5A4724  [EAX]
488
        IF DROP FALSE EXIT THEN
489
 
490
  DUP  088B  =   \  MOV     ECX , [EAX]
491
        IF DROP FALSE EXIT THEN
492
 
493
  DUP  C00B  =   \  0BC0         OR      EAX , EAX
494
        IF DROP FALSE EXIT THEN
495
 
496
  DUP  488D  =   \ 8D4820		LEA     ECX , 20 [EAX]
497
        IF DROP FALSE EXIT THEN
498
 
499
  DUP  E0D3  =   \ D3E0           SHL     EAX , CL
500
        IF DROP FALSE EXIT THEN
501
 
502
  FF AND
503
  DUP  A1    =  \  A1047A5800        MOV     EAX , 587A04
504
        IF DROP FALSE EXIT THEN
505
  DUP  58    =  \        58         POP     EAX
506
        IF DROP FALSE EXIT THEN
507
  DUP  B9    =  \  B907000000 MOV    ECX , # 7
508
        IF DROP FALSE EXIT THEN
509
  DROP TRUE
510
;
511
 
512
: MOV_EDX_[EBP]  ( OPX - OPX' FALSE | FLAG TRUE )
513
        ?OPlast  IF DROP FALSE TRUE EXIT THEN
514
  DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN
515
  DUP @ ?ChEAX 0= IF CELL+ FALSE EXIT THEN
516
  DUP  ?EDX_[EBP] 0= IF CELL+ FALSE EXIT THEN
517
  DUP @ W@
518
 
519
  DUP 448B =              \ MOV     EAX , 4 [EDX] [EAX*4]
520
        IF DROP CELL+ FALSE EXIT THEN
521
 
522
  DUP 1489 =              \ MOV     59C2E4 [EAX*4] , EDX
523
        IF DROP CELL+ FALSE EXIT THEN
524
  DUP 8BCA =              \ MOV     ECX , EDX
525
        IF DROP CELL+ FALSE EXIT THEN
526
  DUP FFFD AND 5589 =              \ OPX N F
527
        IF DROP @ 2+ C@  OP0 @ 2+ C@ = TRUE EXIT
528
        THEN
529
  2DROP FALSE  TRUE
530
;
531
 
532
: OPresize ( OPX n -- )
533
  DUP >R
534
  OVER OP0 ?DO DUP I +! CELL +LOOP
535
  ALLOT
536
  @ DUP  R> +  DUP DP @ - NEGATE MOVE
537
;
538
 
539
: OPinsert ( OPX n -- )
540
  DUP >R
541
  2DUP OPresize DROP
542
  DUP
543
  DUP CELL + OVER OP0 CC -  OpBuffSize CELL- - NEGATE MOVE
544
  R> SWAP +!
545
;
546
 
547
VARIABLE ?~EAX
548
VARIABLE SAVE-?~EAX
549
: ?~EAX{ ( FLAG -- )
550
 ?~EAX @  SAVE-?~EAX ! ?~EAX ! ;
551
 
552
: }?~EAX (  -- )
553
   SAVE-?~EAX @ ?~EAX ! ;
554
 
555
 
556
: ?EAX>EBX  ( OPX - OPX' FALSE | FALSE TRUE | OPX' TRUE TRUE )
557
\     TTTT 0= IF DROP FALSE TRUE EXIT THEN
558
\  ." $="  DUP @ @ U.
559
\  TTTT IF HEX DUP @ U. THEN
560
\ DROP FALSE TRUE EXIT
561
     ?OPlast     IF DROP FALSE TRUE EXIT THEN
562
  DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN
563
  DUP @ W@
564
   DUP 4589 =     \ OPX N F  MOV     FC [EBP] , EAX
565
  OVER 458B = OR  \ OPX N F  MOV     EAX , FC [EBP]
566
        IF DROP DUP @ 2+ C@  OP0 @ 2+ C@ =
567
           IF   CELL- TRUE TRUE
568
           ELSE DUP @ W@ 458B =  IF ?~EAX 0! THEN
569
                CELL+ FALSE
570
           THEN      EXIT
571
        THEN
572
 
573
   CASE
574
\ ." $="  DUP @ U.
575
  DUP 083B <> \ 	CMP     ECX , [EAX]
576
        IF
577
  DUP C83B <> \ 	CMP     ECX , EAX
578
        IF
579
  DUP C13B <> \ 	CMP     EAX , ECX
580
        IF
581
  DUP 508B <> \ 	MOV     EDX , 4 [EAX]
582
        IF
583
  DUP 088B <> \ 	MOV     ECX , [EAX]
584
        IF
585
  DUP 098B <> \ 	MOV     ECX , [ECX]
586
        IF
587
  DUP C88B <> \ 	MOV     ECX , EAX
588
        IF
589
  DUP 0889 <> \ 	MOV     [EAX] , ECX
590
        IF
591
  DUP 1089 <> \ 	MOV     [EAX] , EDX
592
        IF
593
  DUP 4889 <> \ 	MOV     4 [EAX] , ECX
594
        IF
595
 
596
  DUP 408D <> \		LEA     EAX , 1 [EAX]
597
        IF
598
  DUP 808D <> \		LEA     EAX , 1 [EAX]
599
        IF
600
  DUP 008B <> \		MOV     EAX , [EAX]
601
        IF
602
\  TTTT IF HEX ." M="  DUP  U. THEN
603
 
604
  DUP C18B <> \		MOV     EAX , ECX
605
        IF
606
TRUE ?~EAX !
607
  DUP D8F7 <>       \ NEG     EAX
608
        IF
609
}?~EAX
610
  DROP
611
  DUP @ @  FFFFFF AND
612
  DUP 240C8B <>     \ MOV     ECX , [ESP]
613
        IF
614
  DUP 8D0489 <>     \ MOV     X [ECX*4] , EAX
615
        IF
616
 
617
  DUP 24048B <>     \ MOV     EAX , [ESP]
618
        IF
619
TRUE ?~EAX !
620
  DUP 24442B <> \ 	SUB     EAX , 4 [ESP]
621
        IF
622
}?~EAX
623
  0xFFFF AND
624
  OVER @ 2+ C@  OP0 @ 2+ C@
625
\  TTTT IF HEX ." N="  2DUP U. U. THEN
626
 =
627
        IF   2DROP FALSE  TRUE EXIT
628
        THEN
629
  DUP 4D8B <> \		MOV     ECX , [EBP]
630
        IF
631
  DUP 5589 <> \	        MOV     [EBP] , EDX
632
        IF
633
 
634
  2DROP FALSE  TRUE EXIT
635
  DUPENDCASE  DROP CELL+ FALSE ;
636
 
637
: EAX>EBX0  ( OPX - OPX' FLAG )
638
 
639
 
640
  DUP OP0 = IF  TRUE EXIT THEN
641
\  TTTT IF 1 EMIT DUP U. DUP @ U. THEN
642
  DUP @ W@
643
 
644
  DUP 508B =  \ MOV     EDX , [EAX+4]
645
        IF DROP CELL- FALSE EXIT THEN
646
  DUP 088B = \ 	MOV     ECX , [EAX]
647
        IF DROP CELL- FALSE EXIT THEN
648
  DUP 098B = \ 	MOV     ECX , [ECX]
649
        IF DROP CELL- FALSE EXIT THEN
650
  DUP 4D8B = \ 	MOV     ECX , [EBP]
651
        IF DROP CELL- FALSE EXIT THEN
652
  DUP 5589 = \  MOV     0 [EBP] , EDX
653
        IF DROP CELL- FALSE EXIT THEN
654
  DUP C88B = \ 	MOV     ECX , EAX
655
        IF DROP CELL- FALSE EXIT THEN
656
  DUP 0889 = \ 	MOV     [EAX] , ECX
657
        IF DROP CELL- FALSE EXIT THEN
658
  DUP 1089 = \ 	MOV     [EAX] , EDX
659
        IF DROP CELL- FALSE EXIT THEN
660
  DUP 4889 = \ 	MOV     4 [EAX] , ECX
661
        IF DROP CELL- FALSE EXIT THEN
662
  DUP 408D =              \ LEA     EAX , 1 [EAX]
663
        IF DROP
664
           58 OVER @ 1+ C!  CELL- TRUE EXIT
665
        THEN
666
 
667
  DUP 808D =              \ LEA     EAX , 1 [EAX]
668
        IF DROP
669
           98 OVER @ 1+ C!  CELL- TRUE EXIT
670
        THEN
671
  DUP 008B =     \ MOV     EAX , [EAX]
672
        IF DROP
673
           18  OVER @ 1+ C!  CELL- TRUE EXIT
674
        THEN
675
 
676
  DUP C18B =     \ MOV     EAX , ECX
677
        IF DROP
678
           D9  OVER @ 1+ C!  CELL- TRUE EXIT
679
        THEN
680
 
681
  DUP 458B =       \ MOV     EAX , [EBP+X]
682
        IF DROP
683
           5D  OVER @ 1+ C!  CELL- TRUE EXIT
684
        THEN
685
 
686
  DUP D8F7 =       \ NEG     EAX
687
        IF DROP
688
           DB OVER @ 1+ C!  CELL- FALSE EXIT
689
        THEN
690
 
691
  DROP
692
  DUP @ @  FFFFFF AND
693
 
694
  DUP 8D0489 =     \ MOV     X [ECX*4] , EAX
695
        IF DROP CELL- FALSE EXIT THEN
696
 
697
  DUP 24048B =              \ MOV     EAX , [ESP]
698
        IF DROP
699
           1C OVER @ 1+ C!  CELL- TRUE EXIT
700
        THEN
701
  DUP 240C8B =              \ MOV     ECX , [ESP]
702
        IF DROP CELL- FALSE EXIT THEN
703
\ BASE @ >R HEX DUP U. R> BASE !
704
  FF AND
705
  DUP   3B =       \ CMP
706
        IF DROP CELL- FALSE EXIT THEN
707
 HEX  U. U. ." EAX>EBX0" ABORT
708
;
709
 
710
: EAX>EBX  ( OPX - OPX' FLAG )
711
 
712
 
713
  DUP OP0 = IF  TRUE EXIT THEN
714
  DUP @ W@ \ ." #=" DUP U.
715
 
716
  DUP 508B =     \ MOV     EDX , [EAX+4]
717
        IF DROP
718
           53  OVER @ 1+ C!  CELL- FALSE EXIT
719
        THEN
720
 
721
  DUP 083B = \ 	CMP     ECX , [EAX]
722
        IF DROP
723
           0B  OVER @ 1+ W!  CELL- FALSE EXIT
724
        THEN
725
 
726
  DUP C83B = \ 	CMP     ECX , EAX
727
        IF DROP
728
           CB  OVER @ 1+ W!  CELL- FALSE EXIT
729
        THEN
730
 
731
  DUP C13B = \ 	CMP     EAX , ECX
732
        IF DROP
733
           D9  OVER @ 1+ W!  CELL- FALSE EXIT
734
        THEN
735
 
736
  DUP 088B = \ 	MOV     ECX , [EAX]
737
        IF DROP
738
           0B  OVER @ 1+ C!  CELL- FALSE EXIT
739
        THEN
740
  DUP 458B =       \ MOV     EAX , [EBP+X]
741
        IF DROP
742
           5D  OVER @ 1+ C!  CELL- FALSE EXIT
743
        THEN
744
  DUP 098B = \ 	MOV     ECX , [ECX]
745
        IF DROP CELL- FALSE EXIT THEN
746
 
747
  DUP 4D8B = \ 	MOV     ECX , [EBP]
748
        IF DROP CELL- FALSE EXIT THEN
749
 
750
  DUP 5589 = \  MOV     0 [EBP] , EDX
751
        IF DROP CELL- FALSE EXIT THEN
752
 
753
  DUP C88B = \ 	MOV     ECX , EAX
754
        IF DROP
755
           CB  OVER @ 1+ C!  CELL- FALSE EXIT
756
        THEN
757
 
758
  DUP 0889 = \ 	MOV     [EAX] , ECX
759
        IF DROP
760
           0B  OVER @ 1+ C!  CELL- FALSE EXIT
761
        THEN
762
 
763
  DUP 1089 = \ 	MOV     [EAX] , EDX
764
        IF DROP
765
           13  OVER @ 1+ C!  CELL- FALSE EXIT
766
        THEN
767
  DUP 4889 = \ 	MOV     4 [EAX] , ECX
768
        IF DROP
769
           4B  OVER @ 1+ C!  CELL- FALSE EXIT
770
        THEN
771
  DUP 4589 =     \ OPX N F  MOV     FC [EBP] , EAX
772
        IF DROP
773
           5D OVER @ 1+ C!  CELL- FALSE EXIT
774
        THEN
775
  DUP 408D =              \ LEA     EAX , 1 [EAX]
776
        IF DROP
777
           5B OVER @ 1+ C!  CELL- FALSE EXIT
778
        THEN
779
 
780
  DUP 808D =              \ LEA     EAX , X [EAX]
781
        IF DROP
782
           9B OVER @ 1+ C!  CELL- FALSE EXIT
783
        THEN
784
  DUP 008B =     \ MOV     EAX , [EAX]
785
        IF DROP
786
           1B OVER @ 1+ C!  CELL- FALSE EXIT
787
        THEN
788
 
789
  DUP C18B =     \ MOV     EAX , ECX
790
        IF DROP
791
           D9  OVER @ 1+ C!  CELL- FALSE EXIT
792
        THEN
793
 
794
 
795
  DUP D8F7 =       \ NEG     EAX
796
        IF DROP
797
           DB OVER @ 1+ C!  CELL- FALSE EXIT
798
        THEN
799
 
800
  DROP
801
  DUP @ @  FFFFFF AND
802
 
803
  DUP 8D0489 =     \ MOV     X [ECX*4] , EAX
804
        IF DROP
805
           1C OVER @ 1+ C!  CELL-  FALSE EXIT
806
        THEN
807
 
808
  DUP 24048B =              \ MOV     EAX , [ESP]
809
        IF DROP
810
           1C OVER @ 1+ C!  CELL-  FALSE EXIT
811
        THEN
812
  DUP 240C8B =              \ MOV     ECX , [ESP]
813
        IF DROP CELL- FALSE EXIT THEN
814
  DUP 24442B =        \ SUB     EAX , [ESP+4]
815
        IF DROP
816
           5C OVER @ 1+ C!  CELL- FALSE EXIT
817
        THEN
818
 
819
HEX  U. U. ." EAX>EBX" ABORT
820
;
821
 
822
: ?EAX>ECX  ( OPX -   OPX' FALSE | FALSE TRUE | OPX' TRUE TRUE )
823
\   ZZZZ 0= IF DROP FALSE TRUE EXIT THEN
824
\ DROP FALSE TRUE EXIT
825
     ?OPlast     IF DROP FALSE TRUE EXIT THEN
826
  DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN
827
\  TTTT IF HEX DUP @ U. THEN
828
  DUP @ W@
829
   DUP 4589 =     \ OPX N F  MOV     FC [EBP] , EAX
830
  OVER 458B = OR  \ OPX N F  MOV     EAX , FC [EBP]
831
        IF DROP DUP @ 2+ C@  OP0 @ 2+ C@ =
832
           IF   CELL- TRUE TRUE
833
           ELSE  DUP @ W@ 458B = IF ?~EAX 0! THEN
834
                CELL+ FALSE
835
           THEN      EXIT
836
        THEN
837
  DUP 5589 =      \ OPX N F  MOV     FC [EBP] , EDX
838
        IF DROP DUP @ 2+ C@  OP0 @ 2+ C@ =
839
           IF   DROP  FALSE TRUE
840
           ELSE CELL+ FALSE
841
           THEN      EXIT
842
        THEN
843
 
844
   CASE
845
 
846
 
847
\ 8B00		MOV     EAX , [EAX]
848
\ 3B05E3745400	CMP     EAX , 5474E3  ( :-SET+5  )
849
  DUP 3AFF AND 028B <>   \ MOV     EAX , [EDX]
850
        IF
851
  DUP 008B <>       \ MOV     EAX , [EAX]
852
        IF
853
  DUP 408D <>       \ LEA     EAX , 1 [EAX]
854
        IF
855
  DUP 408B <>       \ MOV     EAX , 1 [EAX]
856
        IF
857
  DUP 428D <>       \ LEA     EAX , 1 [EDX]
858
        IF
859
\  DUP 808D <>       \ LEA     EAX , X [EAX]
860
\        IF
861
  DUP C28B <> 	    \ MOV     EAX , EDX
862
        IF
863
TRUE ?~EAX !
864
  DUP C00B <>       \ OR      EAX , EAX
865
        IF
866
  DUP C01B <>       \ SBB     EAX , EAX
867
        IF
868
  DUP F8D1 <>       \ SAR     EAX , 1
869
        IF
870
  DUP E8C1 <>       \ SHR     EAX , 1
871
        IF
872
  DUP D8F7 <>       \ NEG     EAX
873
        IF
874
  DUP D0F7 <>       \ NOT     EAX
875
        IF
876
  DUP D0F7 <>       \ NOT     EAX
877
        IF
878
  DUP 4503 <>       \ ADD     EAX , 0 [EBP]
879
        IF
880
  DUP 0523 <>       \ AND     EAX , 587744  ( D+5  )
881
        IF
882
  DUP E0C1 <> 	    \ SHL     EAX , 7
883
        IF
884
  DUP C223 <> 	    \ AND     EAX , EDX
885
        IF
886
 }?~EAX
887
  DUP 508B <>       \ MOV     EDX , [EAX+4]
888
        IF
889
  DUP 053B <>       \ CMP     EAX , 5474E3  ( :-SET+5  )
890
        IF
891
  DUP 103B <>       \ CMP     EDX , [EAX]
892
        IF
893
  DUP 558B <>       \ OPX N F  MOV     F8 [EBP] , EDX
894
        IF
895
  DUP 158B <>       \ MOV     EDX , 587A88
896
        IF
897
  DUP D08B <>       \ MOV     EDX , EAX
898
        IF
899
  DUP 0501 <>       \ MOV     ADD     555555 , EAX
900
        IF
901
  DUP 5089 <>       \ MOV     C [EAX] , EDX
902
        IF
903
  DUP 1089 <>       \ MOV     [EAX] , EDX
904
        IF
905
 
906
  DUP 80C6 <>       \ MOV   BYTE [EAX] , # X
907
        IF
908
  DUP 45C7 <>       \ MOV     FC [EBP] , # 1
909
        IF
910
  FF AND
911
  DUP 50 <>         \  PUSH EAX
912
        IF
913
  DUP A3 <>         \  MOV     1000 , EAX
914
        IF
915
 
916
  DUP B8 <>         \  MOV     EAX , # 1000
917
        IF
918
  DUP A1 <>         \  MOV     EAX ,   1000
919
        IF
920
TRUE ?~EAX !
921
  DUP 25 <>       \ AND     EAX , # X
922
        IF
923
 
924
}?~EAX
925
  DUP BA <>         \  MOV     EDX , # 1000
926
        IF
927
  DUP 3D <>         \  CMP     EAX , # 1000
928
        IF
929
  DROP
930
  DUP @ @
931
 
932
  DUP 0244B60F <>     \ MOVZX   EAX , BYTE PTR 2 [EDX] [EAX]
933
        IF
934
  FFFFFF AND
935
  DUP 85048D <>     \ LEA     EAX , 0 [EAX*4]
936
        IF
937
  DUP 85048B <>     \ MOV     EAX , X [EAX*4]
938
        IF
939
  DUP 80B60F <>     \ MOVZX   EAX , BYTE PTR X [EAX]
940
        IF
941
  DUP 40B70F <>     \ MOVZX   EAX , WORD PTR X [EAX]
942
        IF
943
  DUP 00B70F <>     \ MOVZX   EAX , WORD [EAX]
944
        IF
945
  DUP 82448B <>     \ MOV     EAX , 4 [EDX] [EAX*4]
946
        IF
947
  DUP 24048B <>     \ MOV     EAX , [ESP]
948
        IF
949
  DUP 24448B <>     \ MOV     EAX , [ESP+4]
950
        IF
951
TRUE ?~EAX !
952
  DUP 24442B <>     \ SUB     EAX , [ESP+4]
953
        IF
954
}?~EAX
955
  DUP 24043B <>    \ CMP     EAX , [ESP]
956
        IF
957
  DUP 24443B <>    \ CMP     EAX , 20 [ESP]
958
        IF
959
  DUP 24548B <>    \ MOV     EDX , C [ESP]
960
        IF
961
  2DROP FALSE  TRUE EXIT
962
  DUPENDCASE  DROP CELL+ FALSE ;
963
 
964
: EAX>ECX0  ( OPX - OPX' FLAG )
965
 
966
  DUP OP0 = IF  TRUE EXIT THEN
967
  DUP @ W@
968
  DUP EFFF AND 4589 =     \ OPX N F
969
        IF DROP CELL- FALSE EXIT THEN
970
 
971
  DUP 0501 =       \ ADD  [444444H]  , EAX
972
        IF DROP CELL- FALSE EXIT THEN
973
 
974
  DUP 5589 =       \ MOV     X [EBP] , EDX
975
        IF DROP CELL- FALSE EXIT THEN
976
  DUP 38FF AND 008B =     \ MOV     EAX , ___
977
        IF DROP
978
           0800  OVER @  +!  CELL- TRUE EXIT
979
        THEN
980
  DUP C28B =  	    \ MOV     EAX , EDX
981
        IF DROP
982
           CA OVER @ 1+ C!  CELL- TRUE EXIT
983
        THEN
984
  DUP 808D =              \ LEA     EAX , 1 [EAX]
985
        IF DROP
986
           88 OVER @ 1+ C!  CELL- TRUE EXIT
987
        THEN
988
  DUP 408D =              \ LEA     EAX , 1 [EAX]
989
        IF DROP
990
           48 OVER @ 1+ C!  CELL- TRUE EXIT
991
        THEN
992
 
993
  DUP 408B =              \ MOV     EAX , 1 [EAX]
994
        IF DROP
995
           48 OVER @ 1+ C!  CELL- TRUE EXIT
996
        THEN
997
 
998
  DUP FF AND 8B =         \  MOV   ~EAX , ___
999
        IF DROP CELL- FALSE EXIT THEN
1000
 
1001
  DUP 38FF AND 008D =     \  LEA    EAX , ___
1002
        IF DROP
1003
           0800  OVER @  +!  CELL- TRUE EXIT
1004
        THEN
1005
  DUP 428D =       \ LEA     EAX , 1 [EDX]
1006
        IF DROP
1007
           0800  OVER @  +!  CELL- TRUE EXIT
1008
        THEN
1009
 
1010
  DUP C00B =     \ OR     EAX , EAX
1011
        IF DROP CELL- FALSE EXIT THEN
1012
 
1013
  DUP 5089 =           \ MOV     C [EAX] , EDX
1014
        IF DROP CELL- FALSE EXIT THEN
1015
 
1016
  DUP 1089 =           \ MOV      [EAX] , EDX
1017
        IF DROP CELL- FALSE EXIT THEN
1018
  DUP 80C6 =       \ MOV   BYTE [EAX] , # X
1019
        IF DROP CELL- FALSE EXIT THEN
1020
 
1021
  DUP 45C7 =       \ MOV     FC [EBP] , # 1
1022
        IF DROP CELL- FALSE EXIT THEN
1023
  DROP
1024
  DUP @ @
1025
  DUP 0244B60F =     \ MOVZX   EAX , BYTE PTR 2 [EDX] [EAX]
1026
        IF DROP
1027
           4C OVER @ 2+ C!  CELL- TRUE EXIT
1028
        THEN
1029
 
1030
 FFFFFF AND
1031
 
1032
  DUP 80B60F =     \ MOVZX   EAX , BYTE PTR X [EAX]
1033
        IF DROP
1034
           88 OVER @ 2+ C!  CELL- TRUE EXIT
1035
        THEN
1036
 
1037
  DUP 40B70F =     \ MOVZX   EAX , WORD PTR x [EAX]
1038
        IF DROP
1039
           48 OVER @ 2+ C!  CELL- TRUE EXIT
1040
        THEN
1041
 
1042
  DUP 00B70F =     \ MOVZX   EAX , WORD PTR [EAX]
1043
        IF DROP
1044
           08 OVER @ 2+ C!  CELL- TRUE EXIT
1045
        THEN
1046
 
1047
\  DUP 24442B =        \ SUB     EAX , [ESP+4]
1048
\        IF DROP
1049
\           4C OVER @ 1+ C!  CELL- TRUE EXIT
1050
\        THEN
1051
 
1052
  FF AND
1053
  DUP 50 =          \  PUSH EAX
1054
        IF DROP CELL- FALSE EXIT THEN
1055
  DUP B8 =         \  MOV     EAX , # 1000
1056
        IF DROP
1057
           B9 OVER @  C!  CELL- TRUE EXIT
1058
        THEN
1059
  DUP BA =         \  MOV     EDX , # 1000
1060
        IF DROP CELL- FALSE EXIT THEN
1061
  DUP 3D =       \  CMP     EAX , # 1000
1062
        IF DROP CELL- FALSE EXIT THEN
1063
  DUP 3B =       \  CMP
1064
        IF DROP CELL- FALSE EXIT THEN
1065
 
1066
  DUP A3 =         \  MOV     1000 , EAX
1067
        IF DROP CELL- FALSE EXIT THEN
1068
 
1069
  DUP A1 =         \  MOV     EAX , 1000
1070
        IF DROP  DUP 1 OPresize
1071
           0D8B OVER @  W!  CELL- TRUE EXIT
1072
        THEN
1073
 
1074
HEX  U. DUP @ @ U.  U. ." EAX>ECX0" ABORT
1075
;
1076
 
1077
: EAX>ECX  ( OPX - OPX' F | T )
1078
 
1079
  DUP OP0  = IF  TRUE EXIT THEN
1080
  DUP @  W@
1081
\ 8B00		MOV     EAX , [EAX]
1082
\ 3B05E3745400	CMP     EAX , 5474E3  ( :-SET+5  )
1083
 
1084
  DUP 5589 =       \ MOV     X [EBP] , EDX
1085
        IF DROP CELL- FALSE EXIT THEN
1086
 
1087
  DUP 3AFF AND 028B =   \ MOV     EAX , [EDX]
1088
        IF DROP
1089
           0800  OVER @ +!  CELL- FALSE EXIT
1090
        THEN
1091
  DUP 458B =       \ MOV     EAX , [EBP+X]
1092
        IF DROP
1093
           4D  OVER @ 1+ C!  CELL- FALSE EXIT
1094
        THEN
1095
 
1096
  DUP 008B =     \ MOV     EAX , [EAX]
1097
        IF DROP
1098
           09  OVER @ 1+ C!  CELL- FALSE EXIT
1099
        THEN
1100
 
1101
  DUP D08B =     \ MOV     EDX , EAX
1102
        IF DROP
1103
           D1  OVER @ 1+ C!  CELL- FALSE EXIT
1104
        THEN
1105
 
1106
  DUP C28B =  	    \ MOV     EAX , EDX
1107
        IF DROP
1108
           CA OVER @ 1+ C!  CELL- FALSE EXIT
1109
        THEN
1110
 
1111
  DUP E0C1 =  	    \ SHL     EAX , 7
1112
        IF DROP
1113
           E1 OVER @ 1+ C!  CELL- FALSE EXIT
1114
        THEN
1115
 
1116
  DUP C223 = 	    \ AND     EAX , EDX
1117
        IF DROP
1118
           CA OVER @ 1+ C!  CELL- FALSE EXIT
1119
        THEN
1120
 
1121
  DUP 0501 =       \ ADD  [444444H]  , EAX
1122
        IF DROP
1123
          0D01  OVER @  W!  CELL- FALSE EXIT
1124
        THEN
1125
 
1126
  DUP 508B =     \ MOV     EDX , [EAX+4]
1127
        IF DROP
1128
           51  OVER @ 1+ C!  CELL- FALSE EXIT
1129
        THEN
1130
 
1131
  DUP 053B =     \ CMP     EAX , 5474E3  ( :-SET+5  )
1132
        IF DROP
1133
           0D  OVER @ 1+ C!  CELL- FALSE EXIT
1134
        THEN
1135
 
1136
  DUP 103B =     \ CMP     EDX , [EAX]
1137
        IF DROP
1138
           11  OVER @ 1+ C!  CELL- FALSE EXIT
1139
        THEN
1140
 
1141
  DUP C23B =     \ CMP     EAX , EDX
1142
        IF DROP
1143
           CA  OVER @ 1+ C!  CELL- FALSE EXIT
1144
        THEN
1145
 
1146
  DUP C00B =     \ OR     EAX , EAX
1147
        IF DROP
1148
           C9  OVER @ 1+ C!  CELL- FALSE EXIT
1149
        THEN
1150
  DUP C01B =       \ SBB     EAX , EAX
1151
        IF DROP
1152
           C9  OVER @ 1+ C!  CELL- FALSE EXIT
1153
        THEN
1154
  DUP F8D1 =       \ SAR     EAX , 1
1155
        IF DROP
1156
           F9  OVER @ 1+ C!  CELL- FALSE EXIT
1157
        THEN
1158
 
1159
  DUP E8C1 =       \ SAR     EAX , 1
1160
        IF DROP
1161
           E9  OVER @ 1+ C!  CELL- FALSE EXIT
1162
        THEN
1163
 
1164
  DUP 4589 =     \ OPX N F  MOV     FC [EBP] , EAX
1165
        IF DROP
1166
           4D OVER @ 1+ C!  CELL- FALSE EXIT
1167
        THEN
1168
  DUP 5089 =           \ MOV     C [EAX] , EDX
1169
        IF DROP
1170
           51 OVER @ 1+ C!  CELL- FALSE EXIT
1171
        THEN
1172
  DUP 1089 =           \ MOV      [EAX] , EDX
1173
        IF DROP
1174
           11 OVER @ 1+ C!  CELL- FALSE EXIT
1175
        THEN
1176
 
1177
  DUP 80C6 =       \ MOV   BYTE [EAX] , # X
1178
        IF DROP
1179
           81 OVER @ 1+ C!  CELL- FALSE EXIT
1180
        THEN
1181
 
1182
  DUP 408D =              \ LEA     EAX , 1 [EAX]
1183
        IF DROP
1184
           49 OVER @ 1+ C!  CELL- FALSE EXIT
1185
        THEN
1186
 
1187
  DUP 408B =              \ MOV    EAX , 1 [EAX]
1188
        IF DROP
1189
           49 OVER @ 1+ C!  CELL- FALSE EXIT
1190
        THEN
1191
 
1192
  DUP 428D =       \ LEA     EAX , 1 [EDX]
1193
        IF DROP
1194
           0800  OVER @  +!  CELL- FALSE EXIT
1195
        THEN
1196
 
1197
  DUP 808D =              \ LEA     EAX , 1 [EAX]
1198
        IF DROP
1199
           89 OVER @ 1+ C!  CELL- FALSE EXIT
1200
        THEN
1201
  DUP C28B =  	    \ MOV     EAX , EDX
1202
        IF DROP
1203
           CA OVER @ 1+ C!  CELL- FALSE EXIT
1204
        THEN
1205
 
1206
  DUP D8F7 =       \ NEG     EAX
1207
        IF DROP
1208
           D9 OVER @ 1+ C!  CELL- FALSE EXIT
1209
        THEN
1210
  DUP D0F7 =       \ NOT     EAX
1211
        IF DROP
1212
           D1 OVER @ 1+ C!  CELL- FALSE EXIT
1213
        THEN
1214
 
1215
  DUP D0F7 =       \ NOT     EAX
1216
        IF DROP
1217
           D1 OVER @ 1+ C!  CELL- FALSE EXIT
1218
        THEN
1219
  DUP 4503 =       \ ADD     EAX , 0 [EBP]
1220
        IF DROP
1221
           4D OVER @ 1+ C!  CELL- FALSE EXIT
1222
        THEN
1223
  DUP 0523 =       \ AND     EAX , 587744  ( D+5  )
1224
        IF DROP
1225
           0D OVER @ 1+ C!  CELL- FALSE EXIT
1226
        THEN
1227
 
1228
  DUP 558B =              \ OPX N F  MOV     F8 [EBP] , EDX
1229
        IF DROP CELL- FALSE EXIT THEN
1230
  DUP 158B =       \ MOV     EDX , 587A88
1231
        IF DROP CELL- FALSE EXIT THEN
1232
  DUP 45C7 =       \ MOV     FC [EBP] , # 1
1233
        IF DROP CELL- FALSE EXIT THEN
1234
  DROP
1235
  DUP @ @
1236
  DUP 0244B60F =     \ MOVZX   EAX , BYTE PTR 2 [EDX] [EAX]
1237
        IF DROP
1238
           0A4C OVER @ 2+ W!  CELL- TRUE EXIT
1239
        THEN
1240
 FFFFFF AND
1241
  DUP 85048D =     \ LEA     EAX , 0 [EAX*4]
1242
        IF DROP
1243
           8D0C OVER @ 1+ W!  CELL- FALSE EXIT
1244
        THEN
1245
 
1246
  DUP 85048B =     \ MOV     EAX , X [EAX*4]
1247
        IF DROP
1248
           8D0C OVER @ 1+ W!  CELL- FALSE EXIT
1249
        THEN
1250
  DUP 80B60F =     \ MOVZX   EAX , BYTE PTR X [EAX]
1251
        IF DROP
1252
           89  OVER @ 2+ C!  CELL- FALSE EXIT
1253
        THEN
1254
 
1255
  DUP 40B70F =     \ MOVZX   EAX , WORD PTR x [EAX]
1256
        IF DROP
1257
           49 OVER @ 2+ C!  CELL-  FALSE EXIT
1258
        THEN
1259
 
1260
  DUP 00B70F =     \ MOVZX   EAX , WORD PTR [EAX]
1261
        IF DROP
1262
           09 OVER @ 2+ C!  CELL- FALSE EXIT
1263
        THEN
1264
 
1265
  DUP 82448B =              \ MOV     EAX , 4 [EDX] [EAX*4]
1266
        IF DROP
1267
           8A4C OVER @ 1+ W!  CELL- FALSE EXIT
1268
        THEN
1269
  DUP 24048B =              \ MOV     EAX , [ESP]
1270
        IF DROP
1271
           0C OVER @ 1+ C!  CELL-  FALSE EXIT
1272
        THEN
1273
  DUP 24448B =              \ MOV     EAX , [ESP+4]
1274
        IF DROP
1275
           4C OVER @ 1+ C!  CELL- FALSE EXIT
1276
        THEN
1277
 
1278
  DUP 24043B =              \ CMP     EAX , [ESP]
1279
        IF DROP
1280
           0C OVER @ 1+ C!  CELL-  FALSE EXIT
1281
        THEN
1282
  DUP 24443B =              \ CMP     EAX , 20 [ESP]
1283
        IF DROP
1284
           4C OVER @ 1+ C!  CELL-  FALSE EXIT
1285
        THEN
1286
  DUP 24548B =    \ MOV     EDX , C [ESP]
1287
        IF DROP CELL- FALSE EXIT THEN
1288
  DUP 24442B =        \ SUB     EAX , [ESP+4]
1289
        IF DROP
1290
           4C OVER @ 1+ C!  CELL- FALSE EXIT
1291
        THEN
1292
 
1293
  FF AND
1294
  DUP 50 =          \  PUSH EAX
1295
        IF DROP
1296
           51 OVER @  C!  CELL- FALSE EXIT
1297
        THEN
1298
  DUP B8 =         \  MOV     EAX , # 1000
1299
        IF DROP
1300
           B9 OVER @  C!  CELL- FALSE EXIT
1301
        THEN
1302
  DUP A3 =         \  MOV     1000 , EAX
1303
        IF DROP  DUP 1 OPresize
1304
           0D89 OVER @  W!  CELL- FALSE EXIT
1305
        THEN
1306
  DUP A1 =         \  MOV     EAX , # 1000
1307
        IF DROP  DUP 1 OPresize
1308
           0D8B OVER @  W!  CELL- FALSE EXIT
1309
        THEN
1310
  DUP 25 =       \ AND     EAX , # X
1311
        IF DROP  DUP 1 OPresize
1312
           E181 OVER @  W!  CELL- FALSE EXIT
1313
        THEN
1314
  DUP BA =         \  MOV     EDX , # 1000
1315
        IF DROP CELL- FALSE EXIT THEN
1316
  DUP 3D =         \  CMP     EAX , # 1000
1317
        IF DROP  DUP 1 OPresize
1318
           F981 OVER @  W!  CELL- FALSE EXIT
1319
        THEN
1320
  U. DUP @ @ U.  U. ." EAX>ECX" ABORT
1321
;
1322
 
1323
: -EBPLIT   ( n OPX  -- n OPX' )
1324
   DUP @  :-SET  U> 0= IF EXIT THEN
1325
  BEGIN
1326
          ?OPlast     IF EXIT THEN
1327
     DUP @ W@ 6D8D =  IF EXIT THEN \ LEA     EBP , X [EBP]
1328
     DUP @ C@ E8   =  IF EXIT THEN \ CALL
1329
     DUP @ C@ E9   =  IF EXIT THEN \ JMP
1330
     DUP @ C@ F0
1331
          AND 70   =  IF EXIT THEN \ Jx
1332
     DUP @ C@ EB   =  IF EXIT THEN
1333
     DUP @ W@ F0FF
1334
          AND 800F =  IF EXIT THEN
1335
     2DUP @ 2+ C@  =  IF EXIT THEN
1336
    CELL+   DUP @  :-SET   U> 0=
1337
  UNTIL ;
1338
1 [IF]
1339
:  -EBPCLR   ( FLAG OPX  -- FLAG' )
1340
   DUP @  :-SET  U< IF DROP EXIT THEN
1341
  OFF-EBP CELL- TO OFF-EBP
1342
  BEGIN
1343
          ?OPlast    IF DROP EXIT THEN
1344
     DUP @ W@ 6D8D = IF DROP EXIT THEN
1345
     DUP @ C@ E8   = IF DROP EXIT THEN \ CALL
1346
     DUP @ C@ E9   = IF DROP EXIT THEN \ JMP
1347
     DUP @ C@ F0
1348
          AND 70   = IF DROP EXIT THEN \ Jx
1349
     DUP @ C@ EB   = IF DROP EXIT THEN
1350
     DUP @ W@ F0FF
1351
          AND 800F = IF DROP EXIT THEN
1352
     DUP @ @ FFFFFF AND 85448B = \ MOV  EAX , FC [EBP] [EAX*4]
1353
              IF DROP EXIT THEN
1354
 
1355
\     DUP @  2+ C@ DUP U. OFF-EBP FF AND DUP U. =
1356
     DUP @ 2+ C@ OFF-EBP FF AND =
1357
     IF   DUP  @ W@  E7FF AND  4589 =    \ MOV X [EBP] , EAX|EDX|EBX|ECX
1358
          OVER @ W@            45C7 = OR \ MOV     F8 [EBP] , # 2710
1359
          IF M\ 20A DTST
1360
\ ." ^"   DUP @ U. :-SET U. \  OPexcise NIP TRUE SWAP CELL-
1361
               DUP  OPexcise NIP TRUE SWAP CELL-
1362
          ELSE DROP EXIT
1363
          THEN
1364
     THEN
1365
    CELL+   DUP @  :-SET  U<
1366
  UNTIL DROP ;
1367
 
1368
[ELSE]
1369
:  -EBPCLR   ( FLAG OPX  -- FLAG' )
1370
  OFF-EBP CELL-  TO OFF-EBP
1371
   BEGIN
1372
       OFF-EBP  SWAP  -EBPLIT NIP
1373
    ?OPlast    IF DROP EXIT THEN
1374
   :-SET  OVER  @   U<
1375
   WHILE  DUP @ 2+ C@  OFF-EBP FF AND =
1376
          IF  DUP @ W@  E7FF AND  4589  =  \ MOV X [EBP] , EAX|EDX|EBX|ECX
1377
              IF M\ 20A DTST
1378
                DUP  OPexcise NIP TRUE SWAP \ CELL-
1379
              ELSE DROP EXIT
1380
              THEN
1381
          ELSE
1382
    DUP @ @ FFFFFF AND 85448B = \ MOV  EAX , FC [EBP] [EAX*4]
1383
              IF DROP EXIT THEN
1384
              CELL+
1385
                     ?OPlast    IF DROP EXIT THEN
1386
               DUP @  :-SET  U< IF DROP EXIT THEN
1387
          THEN
1388
   REPEAT  DROP
1389
;
1390
[THEN]
1391
 
1392
:  T?EAX>ECX   (  FALSE | OPX' TRUE -- ... )
1393
   IF  CELL+ CELL+ FALSE
1394
   ELSE FALSE TRUE
1395
   THEN ;
1396
 
1397
: F?EAX>ECX ( FLAG -- ... )
1398
   IF \   TRUE TRUE
1399
       ?~EAX @
1400
       IF   DROP FALSE
1401
       ELSE TRUE
1402
       THEN TRUE
1403
   ELSE FALSE
1404
   THEN ;
1405
: ECX:=EAX ( OPX -- OPX- )
1406
     DUP 2 OPinsert
1407
     C88B OVER CELL+ @ W! \ MOV     ECX , EAX
1408
\     CELL-
1409
;
1410
 
1411
: EBX:=EAX ( OPX -- OPX- )
1412
     DUP 2 OPinsert
1413
     D88B OVER CELL+ @ W! \ MOV     EBX , EAX
1414
\     CELL-
1415
;
1416
 
1417
TRUE VALUE  ~BR-OPT
1418
 
1419
: ?EAX:=ECX  ( -- )
1420
   ?~EAX @
1421
   IF SetOP 8B C, C1 C, \ MOV     EAX , ECX
1422
   THEN  ;
1423
: DO_EAX>ECX ( -- FLAG )
1424
      OP1
1425
      BEGIN ?EAX>ECX
1426
         DUP  0= \ TTTT AND
1427
         IF   DROP CELL-
1428
              ?OPlast     IF DROP FALSE EXIT THEN
1429
           DUP @ :-SET U< IF DROP FALSE EXIT THEN
1430
              DUP @  W@  4D89 =  \ OPX N F  MOV     FC [EBP] , ECX
1431
              IF   DUP @ 2+ C@
1432
                   OP0 @ 2+ C@ =
1433
                       IF    M\ 410 DTST
1434
                           DROP    ?~EAX 0!
1435
                           OP0 2 OPinsert
1436
                           C18B OP1 @ W! \ MOV     EAX , ECX
1437
                           OP0 TRUE TRUE
1438
                       ELSE DROP  FALSE TRUE
1439
                       THEN
1440
              ELSE CELL+ FALSE
1441
              THEN
1442
         THEN
1443
      UNTIL DUP >R
1444
      IF   M\ 40E DTST
1445
         ?~EAX @
1446
         IF    ECX:=EAX
1447
         ELSE  BEGIN EAX>ECX0 UNTIL
1448
         THEN  BEGIN EAX>ECX  UNTIL
1449
         DROP
1450
         OP1 ToOP0
1451
         -3 ALLOT
1452
         M\ 40F DTST
1453
      THEN R>
1454
;
1455
M\  VARIABLE VPPP : PPPP DUP VPPP @ <> IF 0 @ THEN ;
1456
 
1457
VECT FPOP
1458
 
1459
: ?EAX=RULES ( ADDR  -- ADDR' FLAG )
1460
 
1461
   BEGIN  OP1 @ :-SET
1462
\ TTTT  IF ." T=" 2DUP HEX U. U. THEN
1463
 U< IF TRUE EXIT THEN
1464
          OP1 @ ?ChEAX 0=
1465
          ~BR-OPT AND
1466
\          OP1 @ W@ ADD|XOR|OR|AND= OR
1467
   WHILE   M\ 0 DTST
1468
           OP1 OPexcise
1469
           M\ 1 DTST
1470
   REPEAT
1471
   OP1 @ @ FC458B58 = \ POP     EAX   MOV     EAX , FC [EBP]
1472
   IF      M\ F0 DTST
1473
           0424648D OP1 @ !
1474
           OP1 ToOP0
1475
           FALSE    M\ F1 DTST
1476
           EXIT
1477
   THEN
1478
 M\ PPPP
1479
 
1480
   OP2 @ :-SET U< 0= IF  \ GOTO OP2>
1481
   OP2 @ C@ B8 =    \  MOV     EAX , # 44444
1482
   IF
1483
     OP1 @ @ FFFFFF AND 240401 =  \ ADD     [ESP] , EAX
1484
     IF   M\ B0E DTST
1485
        OP2 @ 1+ @
1486
        240481  OP2 @ !	  \  ADD  [ESP] , #
1487
        OP2 @ 3 + !
1488
        2 OP1  +!
1489
        OP0 @ 2@ OP1 @ 2!
1490
        OP1 ToOP0
1491
        FALSE  -1 ALLOT M\ B0F DTST
1492
        EXIT
1493
     THEN
1494
 M\ PPPP
1495
     OP1 @ W@ 00C7 =  \ MOV     [EAX] , # X
1496
     IF   M\ C0E DTST
1497
                   OP1 @ 2+ @
1498
        OP2 @ 1+ @
1499
        05C7  OP2 @ W!	  \  MOV  44444 , # X
1500
        OP2 @ 2+ ! OP2 @ 6 + !
1501
        5 OP1  +!
1502
        OP0 @ 2@ OP1 @ 2!
1503
        OP1 ToOP0
1504
        FALSE  -1 ALLOT M\ C0F DTST
1505
        EXIT
1506
     THEN
1507
   THEN
1508
 M\ PPPP
1509
 
1510
   OP2 @ ?ChEAX
1511
   OP1 @ W@ 5589 XOR        \ 8955FC            MOV     FC [EBP] , EDX
1512
   OP1 @ W@ 1501 <> AND     \ 011544444400      ADD     444444 , EDX
1513
   OP1 @ W@ 1589 <> AND  OR \ 891544444400      MOV     444444 , EDX
1514
\ EAX=
1515
0=   IF  M\ C2 DTST
1516
       OP2 OPexcise
1517
       FALSE  M\ C3 DTST
1518
       EXIT
1519
     THEN
1520
              THEN   \ LAB: OP2>
1521
 
1522
   OP0 @  W@  458B = \ MOV     EAX , X [EBP]
1523
   IF
1524
 OP1  \ ." $"
1525
      BEGIN  XX_STEP
1526
      UNTIL
1527
      IF  M\ 90E DTST
1528
         OP1 ToOP0 -3 ALLOT FALSE   M\ 90F DTST
1529
         EXIT
1530
      THEN
1531
      DO_EAX>ECX IF FALSE EXIT THEN
1532
      TRUE ?~EAX !
1533
      OP1
1534
      BEGIN ?EAX>EBX
1535
      UNTIL
1536
      IF   M\ 80E DTST
1537
         ?~EAX @
1538
         IF    EBX:=EAX
1539
         ELSE  BEGIN EAX>EBX0 UNTIL
1540
         THEN  BEGIN EAX>EBX  UNTIL
1541
           DROP
1542
           OP1 ToOP0
1543
           FALSE
1544
           -3 ALLOT  M\ 80F DTST
1545
           EXIT
1546
       THEN
1547
 
1548
        :-SET OP2 @ U< IF   \ GOTO OP2 MOV     EAX , X [EBP]
1549
 
1550
 
1551
OP2 @ W@ 5589 XOR    \ 8955FC		MOV     FC [EBP] , EDX
1552
OP1 @ W@  889 XOR OR \ 8908		MOV     [EAX] , ECX
1553
\ MOV     EAX , X [EBP]
1554
OP2 @  2+ C@ OP0 @  2+  C@ XOR OR  \   X2=X0
1555
0=     IF M\ 11E DTST
1556
          C28B  OP0 @ W!          \ MOV     EAX , EDX
1557
          -1 ALLOT
1558
          FALSE M\ 11F DTST
1559
          EXIT
1560
       THEN
1561
\ $ DUP >R
1562
       OP2 @  W@ 4589 XOR           \  MOV     X2 [EBP] , EAX
1563
       OP1 @  C@ 50   XOR       OR  \  PUSH    EAX
1564
\      OP0 @  W@ 458B XOR       OR  \  MOV     EAX , X0 [EBP]
1565
       OP2 @  2+ C@ OP0 @  2+  C@ XOR OR 0=  \   X2=X0
1566
       IF M\ 1E DTST
1567
          50 OP2 @ C!
1568
          OP2 ToOP0
1569
          -6 ALLOT
1570
          FALSE M\ 1F DTST
1571
          EXIT
1572
       THEN
1573
 
1574
  DUP C@    C3 XOR
1575
OP2 @ C@    BA XOR OR \ MOV     EDX , # 1000
1576
OP1 @ W@  1089 XOR OR \	MOV     [EAX] , EDX
1577
\ MOV     EAX , FC [EBP]
1578
       0= IF  M\ 52 DTST
1579
             OP2 1 OPresize
1580
             00C7 OP2 @ W!  \ MOV     [EAX] , # 1000
1581
             OP1 OPexcise
1582
             FALSE  M\ 53 DTST
1583
             EXIT
1584
          THEN
1585
 
1586
        :-SET OP4 @ U< IF   \ GOTO OP4 MOV     EAX , X [EBP]
1587
 
1588
       DUP   C@  0C3 XOR
1589
       \ CR ." XX"
1590
       OP4 @ W@ 4D89 XOR OR \ 567F5A 894DF8		MOV     F8 [EBP] , ECX
1591
       OP3 @ W@ 1089 XOR OR \ 567F5D 8910		MOV     [EAX] , EDX
1592
       OP2 @ W@ 558B XOR OR \ 567F5F 8B55F8		MOV     EDX , F8 [EBP]
1593
       OP1 @ W@ 5089 XOR OR \ 567F62 895004		MOV     4 [EAX] , EDX
1594
\      OP0 @ W@ 458B XOR OR \ 567F65 8B45FC		MOV     EAX , FC [EBP]
1595
       OP4 @ 2+ C@ OP2 @ 2+ C@ XOR OR  \  X0=X2  \ ГРУБО
1596
       0= IF  M\ 232 DTST
1597
             OP2 OPexcise
1598
             4889 OP1 @ W!  \ MOV     [EAX+4] , ECX
1599
             FALSE  M\ 233 DTST
1600
             EXIT
1601
          THEN
1602
   THEN     \ L: OP4 MOV     EAX , X [EBP]
1603
   THEN     \ L: OP2 MOV     EAX , X [EBP]
1604
   THEN
1605
DUP C@ C3 XOR
1606
OP0 @  C@  A1 XOR OR \ MOV     EAX , X
1607
0= IF  OP1
1608
      BEGIN   ?EAX>ECX
1609
         IF  T?EAX>ECX
1610
         ELSE   CELL-  ?OPlast >R
1611
                DUP @ :-SET U< R> OR
1612
           IF   DROP FALSE TRUE
1613
           ELSE DUP >R
1614
                R@ CELL- @  CELL- @
1615
                OP0 @ 1+ @ =
1616
                IF R@  @   C@ FD AND A1 =  \	MOV    { EAX , X } | { X ,EAX }
1617
                     DUP
1618
                     IF  F?EAX>ECX
1619
                     ELSE 2DROP FALSE TRUE
1620
                     THEN
1621
                ELSE  DROP FALSE TRUE
1622
                THEN  RDROP
1623
            THEN
1624
         THEN
1625
      UNTIL
1626
      IF   M\ F0E DTST
1627
           CELL- \ DROP TRUE EXIT
1628
           BEGIN EAX>ECX0 UNTIL
1629
           BEGIN EAX>ECX  UNTIL
1630
           DROP \ ." #"
1631
           OP1 ToOP0
1632
           FALSE
1633
           -5 ALLOT  M\ F0F DTST
1634
           EXIT
1635
       THEN
1636
 
1637
   THEN
1638
 M\ PPPP
1639
DUP C@ C3 XOR
1640
OP0 @  C@  58 XOR OR \ POP     EAX
1641
0= IF   OP1 \   TTTT IF ."  ?EAX>ECX" THEN
1642
      BEGIN   ?EAX>ECX
1643
         IF  T?EAX>ECX
1644
         ELSE   CELL-
1645
		?OPlast
1646
                OVER @ :-SET U< OR
1647
                OVER @ @ FF00FF AND 24008B = OR \  8B0424   MOV   ___ , [ESP]
1648
           IF   DROP  FALSE TRUE
1649
           ELSE DUP  @   C@  50 XOR    \	PUSH     EAX , X
1650
\           0=  F?EAX>ECX
1651
            0=  IF   TRUE TRUE
1652
                ELSE CELL+ FALSE
1653
                THEN
1654
 
1655
            THEN
1656
         THEN
1657
      UNTIL
1658
      IF   M\ CA DTST  \ ." $"
1659
           DUP OPexcise
1660
           CELL- \ DROP TRUE EXIT
1661
         ?~EAX @
1662
         IF    ECX:=EAX
1663
         ELSE  BEGIN EAX>ECX0 UNTIL
1664
         THEN  BEGIN EAX>ECX  UNTIL
1665
           DROP
1666
         OP1 ToOP0
1667
           FALSE
1668
           -1 ALLOT
1669
\            ?EAX:=ECX
1670
  M\ CB DTST
1671
           EXIT
1672
       THEN
1673
 
1674
   THEN
1675
 
1676
OP1 @ @ 24048B50 = \  50      PUSH    EAX
1677
                   \  8B0424  MOV     EAX , [ESP]
1678
   IF  M\ E2 DTST
1679
       OP0 OPexcise
1680
       FALSE  M\ E3 DTST
1681
       EXIT
1682
   THEN
1683
 
1684
DUP C@ C3 XOR
1685
OP1 @ W@ D08B XOR OR \ 8BD0              MOV     EDX , EAX
1686
OP0 @ @ FFFFFF AND 95048B XOR OR \ 8B0495F0065A00        MOV     EAX , 5A06F0 [EDX*4]
1687
0= IF  M\ 13C DTST
1688
         OP1 OPexcise
1689
       85  OP0 @ 2+ C!      \ MOV     EAX , 5982D8 [EAX*4]
1690
 
1691
       FALSE  M\ 13D DTST
1692
       EXIT
1693
   THEN
1694
 
1695
OP1 @ 2+  @
1696
OP0 @ 1+  @  XOR
1697
OP1 @ W@ 589 XOR OR \  890577770700       MOV     77777 , EAX
1698
OP0 @ C@ A1  XOR OR \  A177770700  MOV     EAX , 77777
1699
0= IF  M\ 150 DTST
1700
       OP0 OPexcise
1701
       FALSE  M\ 151 DTST
1702
       EXIT
1703
   THEN
1704
 
1705
 
1706
OP2 @ :-SET U< IF TRUE EXIT THEN M\ PPPP
1707
 
1708
   OP1 @  C@ A3 =  \ MOV ' VVVV >BODY ,  EAX
1709
   IF   OP2 @  C@ B8 =       \ MOV  EAX, # X
1710
     IF      M\ 20E DTST
1711
        OP2 @ 1+ @    OP1 @ 1+ @
1712
        OP2 @ 2+ !    OP1 @ 1+ !
1713
        05C7 OP2 @ W!
1714
        OP0 @  OP1 !
1715
        FALSE
1716
        OP1  ToOP0  M\ 20F DTST
1717
        EXIT
1718
     THEN
1719
        OP2 @  W@ C033 =  \ XOR     EAX , EAX
1720
     IF      M\ 30E DTST
1721
        3 ALLOT
1722
        OP0 @ @ OP0 @ 3 + !
1723
        05C7 OP2 @ W!
1724
        OP1 @ 1+ @ OP1 @ !
1725
        OP1 @ CELL+ 0!
1726
        OP1 @ 08 + OP1 !
1727
        FALSE
1728
        OP1  ToOP0  M\ 30F DTST
1729
        EXIT
1730
     THEN
1731
           OP3 @ :-SET U< IF TRUE EXIT THEN  M\ PPPP
1732
     OP3 @ 1+ @
1733
     OP1 @ 1+ @   XOR
1734
     OP3 @ C@ 0A1 XOR  OR   \ MOV   EAX , XX \ MOV  XX ,  EAX \ EAX=
1735
0=   IF
1736
      OP2 @ C@ 025 =     \ AND     EAX , # ZZ
1737
       IF
1738
         M\ 530 DTST
1739
          OP3 @ 1+ @
1740
          OP2 @ 1+ @
1741
          OP3 OPexcise
1742
          OP2 OPexcise
1743
          OP1 OPexcise
1744
          OP0 0A OPinsert
1745
           2581  OP1 @ !  OP1 @ 6 + !  OP1 @ 2+ !
1746
          FALSE  M\ 531 DTST
1747
          EXIT
1748
       THEN
1749
       OP2 @ W@ 408D =
1750
       IF
1751
          OP2 @ 2+ C@ FF =  \ LEA     EAX , FF [EAX]
1752
         IF
1753
           M\ 632 DTST
1754
            OP3 01 OPresize
1755
            0DFF OP3 @ W!
1756
            OP2 OPexcise
1757
            OP1 OPexcise
1758
            FALSE M\ 633 DTST
1759
            EXIT
1760
         THEN
1761
       THEN
1762
     THEN   TRUE EXIT
1763
   THEN
1764
 
1765
 \ $ 4444 TO VVVV
1766
 
1767
    OP2 @ C@ A1 XOR     \ MOV     EAX , 44444
1768
    OP1 @ C@ 3D XOR OR  \ CMP     EAX , # 55555
1769
0= IF M\ 218 DTST
1770
       OP2 @ 1+ @ OP2 @ 2+ !
1771
       3D81 OP2 @ W!         \ CMP  44444 , # 55555
1772
       OP0 @ OP1 !
1773
       OP1 ToOP0
1774
       FALSE
1775
       EXIT M\ 219 DTST
1776
   THEN
1777
 
1778
\   OP0 @ C@ 58 =    \ POP EAX
1779
\  IF
1780
   OP1 @  C@ 50 =   \ PUSH EAX
1781
   IF
1782
     \  444 >R
1783
       OP2 @  C@ B8 = \ MOV EAX , # 5
1784
       IF    M\ 1A DTST
1785
             68 OP2 @ C!
1786
             OP0 @ 2@ OP1 @ 2!
1787
             OP1 ToOP0
1788
           FALSE  -1 ALLOT M\ 1B DTST
1789
           EXIT
1790
       THEN
1791
   THEN
1792
   OP1 @  W@ 4589 =  \ MOV X [EBP], EAX   EAX=
1793
   IF
1794
     \    444 555
1795
       OP2 @  C@ B8 =  \ MOV EAX ,  5
1796
       IF    M\ 1C DTST
1797
             OP2 @ 1+ @
1798
                   45C7   OP2 @    W!
1799
              OP1 @ 2+ C@ OP2 @ 2+ C!
1800
                          OP2 @ 3 + !
1801
             2 OP1  +!
1802
             OP0 @ 2@ OP1 @ 2!
1803
             OP1 ToOP0
1804
           FALSE  -1 ALLOT M\ 1D DTST
1805
           EXIT
1806
       THEN
1807
   THEN
1808
\  THEN
1809
M\ PPPP
1810
OP2 @  C@   B8 XOR    \	MOV     EAX , # 789
1811
OP1 @  W@ C88B XOR OR \	MOV     ECX , EAX
1812
\ EAX=
1813
0= IF   M\ 830 DTST
1814
       B9 OP2 @ C!
1815
       OP1 OPexcise
1816
       FALSE  M\ 831 DTST
1817
       EXIT
1818
   THEN
1819
 
1820
OP2 @  W@ 878D XOR    \ LEA     EAX , 1448 [EDI]
1821
OP1 @  W@ 00FF XOR OR \ INC     [EAX]
1822
\ EAX=
1823
0= IF   M\ 930 DTST
1824
       FF OP2 @ C!
1825
       OP1 OPexcise
1826
       FALSE  M\ 931 DTST
1827
       EXIT
1828
   THEN
1829
OP2 @ @ FFFFFF AND 8D048D XOR \     LEA     EAX , X [ECX*4]
1830
OP1 @ W@ 1089 XOR OR \    MOV     [EAX] , EDX
1831
\ EAX=
1832
0= IF  M\ 5E DTST
1833
       1489 OP2 @ W!  \   MOV   [44444H+ECX*4], EDX
1834
       OP1 OPexcise
1835
       FALSE  M\ 5F DTST
1836
       EXIT
1837
   THEN
1838
M\ PPPP
1839
 DUP C@   0C3 XOR
1840
OP2 @ W@ D08B XOR OR  \     MOV     EDX , EAX
1841
OP1 @ @ FFFFFF AND 8D1489 XOR OR \     MOV   X [ECX*4] , EDX
1842
\ EAX=
1843
0= IF  M\ 60 DTST
1844
       OP2 OPexcise
1845
       0489 OP1 @ W!  \   MOV   [44444H+ECX*4], EAX
1846
       FALSE  M\ 61 DTST
1847
       EXIT
1848
   THEN
1849
 
1850
OP2 @ 2+ C@
1851
OP0 @ 2+ C@   XOR
1852
OP2 @ W@ 5589 XOR OR \ MOV     F8 [EBP] , EDX
1853
OP1 @ W@ 4589 XOR OR \ MOV     F4 [EBP] , EAX
1854
OP0 @ W@ 458B XOR OR \ MOV     EAX , F8 [EBP]
1855
0= IF  M\ 64 DTST
1856
       C28B  OP0 @ W!  \   MOV     EAX , EDX
1857
       -1 ALLOT
1858
       FALSE  M\ 65 DTST
1859
       EXIT
1860
   THEN
1861
OP2 @ W@ C033 XOR  \ 57DD80 33C0              XOR     EAX , EAX
1862
OP1 @ W@ 4589 XOR OR \ 57DD82 8945F8            MOV     F8 [EBP] , EAX
1863
\ EAX=
1864
0= IF  M\ 6C DTST
1865
       OP2 OPexcise
1866
       OP0 4 OPresize 4 OP0 +!
1867
       45C7  OP1 @ W! OP1 @ 3 + 0!  \  MOV     F8 [EBP] , # 0
1868
       FALSE  M\ 6D DTST
1869
       EXIT
1870
   THEN
1871
OP2 @  @ 45C7D08B XOR  \     MOV     EDX , EAX  MOV     F8 [EBP] , # X
1872
OP0 @ W@     C28B XOR OR \   MOV     EAX , EDX
1873
0= IF  M\ 6E DTST
1874
       OP0 OPexcise
1875
       FALSE  M\ 6F DTST
1876
       EXIT
1877
   THEN
1878
 
1879
  DUP C@   C3 XOR
1880
OP2 @ C@   BA XOR OR \  MOV     EDX , # 0
1881
OP1 @ W@ 1088 XOR OR \  MOV     [EAX] , DL
1882
\ EAX=
1883
0= IF  M\ 70 DTST
1884
       OP2 @ 1+ C@
1885
       OP2  OPexcise
1886
       OP1 1 OPresize
1887
       00C6  OP1 @ W!    \  MOV   BYTE PTR  [EAX] , 44H
1888
       OP1 @ 2+ C!
1889
       FALSE  M\ 71 DTST
1890
       EXIT
1891
   THEN
1892
OP2 @ W@ 808D XOR  \   LEA     EAX , X [EAX]
1893
OP1 @ W@ 00C6 XOR OR \   MOV     [EAX] , # 0
1894
\ EAX=
1895
0= IF  M\ 72 DTST
1896
       80C6 OP2 @ W!
1897
       OP1 @ 2+ C@ OP1 @ C!
1898
       1 OP1 +!
1899
       OP1 OPexcise
1900
       FALSE  M\ 73 DTST
1901
       EXIT
1902
   THEN
1903
 
1904
  DUP C@   C3 XOR
1905
OP2 @ W@ D18B XOR OR \ 596C15 8BD1              MOV     EDX , ECX
1906
OP1 @ W@ 1089 XOR OR \ 596C17 8910              MOV     [EAX] , EDX
1907
\ EAX=
1908
0= IF  M\ 72 DTST
1909
       OP2 OPexcise
1910
       0889 OP1 @ W!
1911
       FALSE  M\ 73 DTST
1912
       EXIT
1913
   THEN
1914
 
1915
OP2 @ @ FFFFFF AND 24448B XOR  \   MOV     EAX , 30 [ESP]
1916
OP1 @ W@  F7FF AND 44FF XOR OR \ FF4424  INC DEC    30 [ESP]
1917
\ EAX=
1918
0= IF  M\ 8A DTST
1919
       OP2 OPexcise
1920
       FALSE  M\ 8B DTST
1921
       EXIT
1922
   THEN
1923
 
1924
OP2 @ C@ B8 XOR \   MOV     EAX , # 1
1925
OP1 @ @ FFFFFF AND 21C8D XOR OR \         LEA     EBX , [EDX] [EAX]
1926
\ EAX=
1927
0= IF  M\ AA DTST
1928
       OP2 1 OPresize
1929
       9A8D   OP2 @ W!
1930
       OP1 OPexcise
1931
       FALSE  M\ AB DTST
1932
       EXIT
1933
   THEN
1934
OP2 @ C@ BA XOR  \  MOV     EDX , # 7FFFFFEE
1935
OP1 @ W@ 9A8D XOR OR \   LEA     EBX , 1 [EDX]
1936
\ EAX=
1937
0= IF  M\ AC DTST
1938
       OP1 @ 2+ @
1939
       OP1 OPexcise
1940
       OP0 5 OPinsert
1941
       BB OP1 @ C!        \     MOV     EBX , #
1942
       OP2 @ 1+ @ +  OP1 @ 1+ !
1943
       FALSE  M\ AD DTST
1944
       EXIT
1945
   THEN
1946
 
1947
OP2 @ W@ C28B XOR       \  8BC2        MOV     EAX , EDX
1948
OP1 @ @ C28BC00B XOR OR \  0BC0        OR      EAX , EAX
1949
                        \  8BC2        MOV     EAX , EDX
1950
0= IF  M\ C4 DTST
1951
       OP2 OPexcise
1952
       C28BD20B   OP1 @ !    \  OR      EDX , EDX   MOV     EAX , EDX
1953
       FALSE  M\ C5 DTST
1954
       EXIT
1955
   THEN
1956
 
1957
 DUP C@    C3 XOR
1958
OP2 @ W@ D18B XOR OR \ 58270A 8BD1              MOV     EDX , ECX
1959
OP1 @ W@ 4589 XOR OR \ 58270C 8945F8            MOV     F8 [EBP] , EAX
1960
OP0 @ W@ C28B XOR OR \ 58270F 8BC2              MOV     EAX , EDX
1961
0= IF  M\ D4 DTST
1962
       OP2 OPexcise
1963
       C18B  OP0 @ W!    \  MOV     EAX , ECX
1964
       FALSE  M\ D5 DTST
1965
       EXIT
1966
   THEN
1967
 
1968
DUP C@ C3 XOR
1969
                             \ 8BD0            MOV     EDX , EAX
1970
OP2 @ @ 501D08B XOR          \ 010544440400    ADD     44444 , EAX
1971
OP2 @ @ 589D08B <>  AND OR   \ 890544440400    MOV     44444 , EAX
1972
OP0 @ W@ 458B XOR OR         \ 8B4500          MOV     EAX , 0 [EBP]
1973
0= IF  M\ D4 DTST
1974
       OP2 OPexcise
1975
       FALSE  M\ D5 DTST
1976
       EXIT
1977
   THEN
1978
 
1979
OP2 @ @ 1589D08B = \  8BD0           MOV     EDX , EAX
1980
                   \  891555550500      MOV     55555 , EDX
1981
   IF  M\ E8 DTST
1982
       0589 OP1 @ W!        \  MOV  5800E0  , EAX
1983
       FALSE  M\ E9 DTST
1984
       EXIT
1985
   THEN
1986
 
1987
OP2 @ W@ 408D XOR       \  8D4020         LEA     EAX , 20 [EAX]
1988
OP1 @ @ 458BC88B XOR OR \  8BC8           MOV     ECX , EAX
1989
                        \  8B45F8         MOV     EAX , F8 [EBP]
1990
0= IF  M\ F2 DTST
1991
       488D OP2 @ W!        \  LEA     ECX , 20 [EAX]
1992
       OP1 OPexcise
1993
       FALSE  M\ F3 DTST
1994
       EXIT
1995
   THEN
1996
 
1997
  OP2 @ ?ChEAX
1998
  OP2 @ ^?EAX=  AND
1999
OP1 @ C@ B9 XOR OR \ 587AC6 B919000000  MOV     ECX , # 19
2000
\ EAX=
2001
0= IF  M\ FE DTST
2002
       OP2 OPexcise
2003
       FALSE  M\ FF DTST
2004
       EXIT
2005
   THEN
2006
 
2007
OP2 @ 2+ C@
2008
OP0 @ 2+ C@   XOR
2009
OP2 @ W@ 5589 XOR OR \  8955E8            MOV     E8 [EBP] , EDX
2010
 
2011
OP1 ?EDX_[EBP] OR
2012
 
2013
OP0 @ W@ 458B XOR OR \  8B45E8            MOV     EAX , E8 [EBP]
2014
0= IF  M\ BC DTST
2015
       C28B   OP0 @ W!    \  MOV     EAX , EDX
2016
       -1 ALLOT
2017
       FALSE  M\ BD DTST
2018
       EXIT
2019
   THEN
2020
 
2021
DUP C@ C3 XOR
2022
OP2 @ @ 9788D08B XOR OR \  8BD0           MOV     EDX , EAX
2023
                        \  88973C100000      MOV     103C [EDI] , DL
2024
\ EAX=
2025
0= IF  M\ 112 DTST
2026
       OP2 OPexcise
2027
       8788   OP1 @ W!      \ MOV     103C [EDI] , AL
2028
       FALSE  M\ 113 DTST
2029
       EXIT
2030
   THEN
2031
 
2032
OP2 @ C@ 50 XOR      \  50          PUSH    EAX
2033
OP1 @ W@ 4589 XOR OR \  8945FC            MOV     FC [EBP] , EAX
2034
OP0 @ W@ 48B XOR OR  \  8B0424             MOV     EAX , [ESP]
2035
0= IF  M\ 164 DTST
2036
       OP0 OPexcise
2037
       FALSE  M\ 165 DTST
2038
       EXIT
2039
   THEN
2040
 
2041
M\ PPPP
2042
OP3 @ :-SET U< IF TRUE EXIT THEN
2043
 
2044
\ $ SWAP 4444
2045
   OP2 @ W@ C28B =    \ MOV     EAX , EDX
2046
   IF  OP1 @ W@ 4589 =   \ MOV   X [EBP] , EAX
2047
     IF   M\ 60E DTST
2048
        1000  OP1 @ +!	  \  MOV    X [EBP] , EDX
2049
        FALSE  OP2 OPexcise  M\ 60F DTST
2050
          EXIT
2051
     THEN
2052
   THEN
2053
 
2054
OP3 @  @ 408DC48B XOR  \     MOV     EAX , ESP   LEA     EAX , 8 [EAX]
2055
OP1 @ W@ E08B XOR OR   \     MOV     ESP , EAX
2056
0= IF  M\ 8A DTST
2057
       -1 OP2 +!
2058
       24648D00  OP2 @ 1- !  \ LEA     ESP , 8 [ESP]
2059
       OP3 OPexcise
2060
       OP1 OPexcise
2061
       FALSE  M\ 8B DTST
2062
       EXIT
2063
   THEN
2064
 
2065
OP3 @ W@ C88B = \ 581B54 8BC8              MOV     ECX , EAX
2066
IF
2067
      DUP C@ C3 XOR
2068
\      OP3 @ W@ C88B XOR OR \ 587733 8BC8              MOV     ECX , EAX
2069
      OP2 @ W@ 428D XOR OR \ 587735 8D4201            LEA     EAX , 1 [EDX]
2070
      OP1 @ W@ 4589 XOR OR \ 587738 894500            MOV     0 [EBP] , EAX
2071
      OP0 @ W@ C18B XOR OR \ 58773B 8BC1              MOV     EAX , ECX
2072
      0= IF   M\ 142 DTST
2073
             OP3 OPexcise
2074
             OP0 OPexcise
2075
             528D OP1 @ W!  \  LEA     EDX , 1 [EDX]
2076
             5589 OP0 @ W!  \  MOV     0 [EBP] , EDX
2077
             FALSE   M\ 143 DTST
2078
             EXIT
2079
         THEN
2080
      OP5 @ J-SET  U< 0= IF   \ GOTO 5SET
2081
      OP5 @ W@ C18B XOR    \ 581B4C 8BC1              MOV     EAX , ECX
2082
      OP4 @ W@ 840F XOR OR \ 581B4E 0F8400000000      JE      581B54  ( zz+14  )
2083
      0= IF  M\ B0 DTST
2084
             OP3 OPexcise
2085
             FALSE M\ B1 DTST
2086
             EXIT
2087
      THEN               THEN  \ 5SET:
2088
THEN
2089
 
2090
 DUP C@  0C3 XOR
2091
OP3 @ @ C103D8F7 XOR OR \  F7D8     NEG     EAX
2092
                        \ 03C1      ADD     EAX , ECX
2093
OP1 @ W@ 4589 XOR OR    \  894500      MOV     0 [EBP] , EAX
2094
OP0 @ W@ C28B XOR OR    \  8BC2	MOV     EAX , EDX
2095
0= IF   M\ CE DTST
2096
       OP3 OPexcise
2097
       C82B  OP2 @ W!  \   SUB    ECX , EAX
2098
       4D89  OP1 @ W! \      MOV     0 [EBP] , ECX
2099
       FALSE   M\ CF DTST
2100
       EXIT
2101
   THEN
2102
 
2103
OP3 @ @ C82BD08B XOR    \ 8BD0     MOV     EDX , EAX
2104
                        \ 2BC8     SUB     ECX , EAX
2105
OP1 @ W@ 4D89 XOR OR    \ 894D00   MOV     0 [EBP] , ECX
2106
OP0 @ W@ C28B XOR OR    \ 8BC2     MOV     EAX , EDX
2107
0= IF   M\ D0 DTST
2108
         DUP C@  0C3 =
2109
       IF  OP3 OPexcise THEN
2110
           OP0 OPexcise
2111
       FALSE   M\ D1 DTST
2112
       EXIT
2113
   THEN
2114
 
2115
DUP C@    C3 XOR
2116
OP3 @ @ 418DD08B XOR OR \ 8BD0          MOV     EDX , EAX
2117
                        \ 8D41FF        LEA     EAX , FF [ECX]
2118
OP1 @ W@ 4589 XOR OR    \ 8945F8        MOV     F8 [EBP] , EAX
2119
OP0 @ W@ C28B XOR OR    \ 8BC2          MOV     EAX , EDX
2120
0= IF   M\ EA DTST
2121
       OP3 OPexcise
2122
       OP0 OPexcise
2123
       498D  OP1 @ W!  \        LEA     ECX , FF [ECX]
2124
       4D89  OP0 @ W!  \        MOV     F8 [EBP] , ECX
2125
       FALSE   M\ EB DTST
2126
       EXIT
2127
   THEN
2128
 
2129
OP3 @ 2+ C@
2130
OP0 @ 2+ C@   XOR
2131
OP3 @ W@ 5589 XOR OR \  8955E8            MOV     E8 [EBP] , EDX
2132
 
2133
OP2 ?EDX_[EBP] OR
2134
OP1 ?EDX_[EBP] OR
2135
 
2136
OP0 @ W@ 458B XOR OR \  8B45E8            MOV     EAX , E8 [EBP]
2137
0= IF  M\ BC DTST
2138
       C28B   OP0 @ W!    \  MOV     EAX , EDX
2139
       -1 ALLOT
2140
       FALSE  M\ BD DTST
2141
       EXIT
2142
   THEN
2143
 
2144
DUP C@ C3 XOR
2145
OP2 @ C@ BA XOR OR      \ BA2C000000  MOV     EDX , # 2C
2146
OP1 @ @ 458B1001 XOR OR \ 0110        ADD     [EAX] , EDX
2147
                        \ 8B45FC      MOV     EAX , FC [EBP]
2148
0= IF  M\ 14C DTST
2149
       OP1 OPexcise
2150
       OP1 1 OPresize
2151
       0081   OP1 @ W!    \  ADD     [EAX] , # 2C
2152
       FALSE  M\ 14D DTST
2153
       EXIT
2154
   THEN
2155
OP2 @ C@ B8 XOR  \ 57DDE3 B844440400  MOV     EAX , # 44444
2156
OP1 @ W@ 81 XOR OR \ 57DDE8 81002C000000        ADD     [EAX] , # 2C
2157
OP0 @ W@ 458B XOR OR \ 57DDEE 8B45FC            MOV     EAX , FC [EBP]
2158
0= IF  M\ 14E DTST
2159
       OP2 @ 1+ @ OP2 @ 2+ !
2160
       OP1 @ 2+ @ OP1 @ 1+ !
2161
       0581   OP2 @ W!    \  ADD     44444 , # 2C
2162
       5 OP1 +!
2163
       OP1 OPexcise
2164
       FALSE  M\ 14F DTST
2165
       EXIT
2166
   THEN
2167
 
2168
OP2 @ 2+ C@
2169
OP0 @ 2+ C@     XOR
2170
OP2 @ W@ 45C7	XOR OR	\    MOV     F8 [EBP] , # 3
2171
OP1 @ C@ B9	XOR OR	\    MOV     ECX , # 4
2172
OP0 @ W@ 458B	XOR OR	\    MOV     EAX , F8 [EBP]
2173
0= IF  M\ 3E DTST
2174
	OP2 @ 3 + @ OP2 @ 1+ !
2175
	B8  OP2 @ C!
2176
	OP1 0 OPinsert  -2 OP2 +!
2177
	OP2 OPexcise		\    MOV     EAX , # 3
2178
	4589 OP0 @ W!		\    MOV     F8 [EBP] , EAX
2179
 
2180
       FALSE  M\ 3F DTST
2181
       EXIT
2182
   THEN
2183
 
2184
 
2185
OP3 @ :-SET U< IF TRUE EXIT THEN
2186
 
2187
OP3 @ C@ A1 XOR  \ 57E2D7 A108E15700  MOV     EAX , 57E108
2188
OP2 @ W@ 4589 XOR OR \ 57E2DC 8945EC            MOV     EC [EBP] , EAX
2189
OP1 @ W@ D08B XOR OR \ 57E2DF 8BD0              MOV     EDX , EAX
2190
\ EAX=
2191
0= IF  M\ 152 DTST
2192
       OP3 1 OPresize
2193
       158B   OP3 @ W!    \  MOV     EDX , 57E108
2194
       5589   OP2 @ W!    \  MOV     EC [EBP] , EDX
2195
       OP1 OPexcise
2196
       FALSE  M\ 153 DTST
2197
       EXIT
2198
   THEN
2199
 
2200
 
2201
OP3 @ C@ 58 XOR  \ 	POP     EAX
2202
OP2 @ @ FFFFFF AND FF408D XOR OR \  LEA     EAX , FF [EAX]
2203
OP1 @ C@ 50 XOR OR \ 	PUSH    EAX
2204
\ EAX=
2205
0=  IF   M\ D30 DTST
2206
\       OP2 1 OPresize
2207
       240CFF OP2 @ !  \  DEC DWORD PTR  [ESP]
2208
       OP3 OPexcise
2209
       OP1 OPexcise
2210
       FALSE   M\ D31 DTST
2211
       EXIT
2212
    THEN
2213
 
2214
DUP C@ C3 XOR
2215
OP3 @ @ 458BD08B XOR OR \  8BD0           MOV     EDX , EAX  MOV     EAX , 0 [EBP]
2216
OP1 @ W@ 4589 XOR OR \  8945FC            MOV     FC [EBP] , EAX
2217
OP0 @ W@ C28B XOR OR \  8BC2              MOV     EAX , EDX
2218
0=  IF  M\ 166 DTST
2219
       OP3 OPexcise
2220
       OP0 OPexcise
2221
	558B OP1 @ W! \  MOV     EDX , 0 [EBP]
2222
	5589 OP0 @ W! \  MOV     FC [EBP] , EAX
2223
       FALSE  M\ 167 DTST
2224
       EXIT
2225
   THEN
2226
 
2227
DUP C@ C3 XOR
2228
OP3 @ W@ D08B XOR OR \ 5822F8 8BD0              MOV     EDX , EAX
2229
OP2 @ W@ 458B XOR OR \ 5822FA 8B4508            MOV     EAX , 8 [EBP]
2230
OP1 @ W@ 1089 XOR OR \ 5822FD 8910              MOV     [EAX] , EDX
2231
OP0 @ W@ 458B XOR OR \ 5822FF 8B450C            MOV     EAX , C [EBP]
2232
0= IF  M\ 156 DTST
2233
       OP3 OPexcise
2234
       558B  OP2 @ W!     \ MOV     EDX , 8 [EBP]
2235
       0289  OP1 @ W!     \ MOV     [EDX] , EAX
2236
       FALSE  M\ 157 DTST
2237
       EXIT
2238
   THEN
2239
 
2240
 
2241
 
2242
OP4 @ :-SET U< IF TRUE EXIT THEN
2243
OP5 @ :-SET U< IF TRUE EXIT THEN
2244
 
2245
OP5 @ C@ B8 XOR  \ 596994 B812000000  MOV     EAX , # 12
2246
OP4 @ W@ 4589 XOR OR \ 596999 8945F4            MOV     F4 [EBP] , EAX
2247
OP3 @ W@ 4589 XOR OR \ 59699C 8945F0            MOV     F0 [EBP] , EAX
2248
OP2 @ C@ BA XOR OR \ 59699F BA00000080  MOV     EDX , # 80000000
2249
OP1 @ W@ D02B XOR OR \ 5969A4 2BD0              SUB     EDX , EAX
2250
\ EAX=
2251
0=  IF  M\ A6 DTST
2252
       OP5 @ 1+ @ NEGATE OP2 @ 1+ +!
2253
       OP1 OPexcise
2254
       FALSE  M\ A7 DTST
2255
       EXIT
2256
   THEN
2257
 
2258
  TRUE
2259
;
2260
 
2261
 
2262
\ : SSSSSS ;
2263
\ TRUE VALUE ?C-JMP
2264
 FALSE VALUE ?C-JMP
2265
 
2266
\ $ - указывает на фрагмент исходного текста, оптимизируемый
2267
\ данным методом
2268
 
2269
: OPT-RULES  ( ADDR  -- ADDR' FLAG )
2270
 
2271
   BEGIN M\ -1 DTST
2272
   OP0 @ :-SET U< IF TRUE EXIT THEN
2273
 
2274
   OP0 @  W@  408D =  \  LEA   EAX,  X [EAX]
2275
   WHILE  M\ 2 DTST
2276
       OP0 @ 2+ C@ C>S OFF-EAX + TO OFF-EAX
2277
       OP1 ToOP0
2278
       -3 ALLOT M\ 3 DTST
2279
   REPEAT M\  DUP VPPP !
2280
   OP0 @ C@ 05  = ~BR-OPT AND   \ ADD  EAX, # X
2281
   IF  M\ 4 DTST
2282
       OP0 @ 1+ @ OFF-EAX + TO OFF-EAX
2283
       OP1 ToOP0
2284
       FALSE  -5 ALLOT M\ 5 DTST
2285
       EXIT
2286
   THEN
2287
M\ PPPP
2288
   OP0 @  W@  808D =  \  LEA   EAX,  X [EAX]
2289
   IF  M\ 6 DTST
2290
       OP0 @ 2+ @  OFF-EAX + TO OFF-EAX
2291
       OP1 ToOP0
2292
       -6 ALLOT FALSE M\ 7 DTST
2293
       EXIT
2294
   THEN
2295
   OFF-EAX
2296
   OP0 @  W@  C033 = AND \  XOR     EAX , EAX
2297
   IF  M\ 4A DTST
2298
        B8 OP0 @ C!
2299
        OFF-EAX  OP0 @ 1+ !
2300
 
2301
        3 ALLOT FALSE M\ 4B DTST
2302
       EXIT
2303
   THEN
2304
M\ PPPP
2305
   OP0 @ @ 3FFFFF AND
2306
   05048D =      \ LEA  EAX, X [EAX*_]
2307
   IF
2308
 
2309
\ $ 4444 CELLS
2310
 
2311
      OP1 @ :-SET U< 0=
2312
      IF
2313
           OP1 @ C@ B8 XOR     \ MOV EAX, # X1
2314
           OP0 @ 3 + @         \ X=0
2315
           OR 0=
2316
           IF  M\ 8 DTST
2317
               OP1 @ 1+ @   OP0 @ @ C00000 AND 16 RSHIFT
2318
               LSHIFT
2319
               OP1 @ 1+ !
2320
               OP1 ToOP0       \ FIX
2321
               FALSE  -7 ALLOT M\ 9 DTST
2322
               EXIT
2323
           THEN
2324
      THEN
2325
 
2326
\ $ CELLS 4444 +
2327
 
2328
       OFF-EAX OP0 @ 3 + +!
2329
 
2330
 
2331
   THEN
2332
M\ PPPP
2333
 
2334
   OP0 @  C@ B8 =    \ MOV  EAX, # X
2335
   IF  OFF-EAX OP0 @ 1+ +!
2336
 
2337
       OP0 @ 1+ @ 0=         \ MOV  EAX, # 0
2338
       IF   M\ A DTST
2339
            C033 OP0 @  W!    \ XOR EAX, EAX
2340
           -3 ALLOT
2341
\           FALSE   EXIT
2342
           M\ B DTST
2343
       THEN
2344
       OP1 @ :-SET U< IF TRUE EXIT THEN
2345
       DUP C@  0C3   XOR
2346
       OP1 @  W@ 45C7 XOR OR 0=   \ MOV     F8 [EBP] , # 5
2347
       IF  OP1 @ 2+ C@ C>S OFF-EBP U<
2348
         IF
2349
           M\ 10A DTST
2350
             OP1 OPexcise
2351
\            FALSE   EXIT
2352
            M\ 10B DTST
2353
         THEN
2354
       THEN
2355
   THEN
2356
M\ PPPP
2357
 
2358
   DUP C@ C3 =
2359
   IF OFF-EBP >R
2360
       5555 DP @ !
2361
       FALSE   OP0 -EBPCLR OP0 -EBPCLR OP0 -EBPCLR OP0 -EBPCLR
2362
       IF   M\ 20B DTST
2363
            R> TO OFF-EBP FALSE EXIT
2364
       THEN R> TO OFF-EBP
2365
   THEN
2366
 
2367
   OFF-EAX
2368
   OP0 @  W@ C28B =         \  MOV     EAX , EDX
2369
   OP0 @  W@ C18B = OR AND  \  MOV     EAX , ECX
2370
   IF  M\ D6 DTST
2371
       OFF-EAX DUP SHORT?
2372
       IF    0418D C18B - OP0 @ +! C,
2373
       ELSE  0828D C28B - OP0 @ +!  ,
2374
       THEN   \  LEA   EAX,  OFF-EBP [EDX]
2375
 
2376
       FALSE  M\ D7 DTST
2377
       EXIT
2378
   THEN
2379
 
2380
OP0 @ 2+ @ 5  XOR
2381
OP0 @ W@ C069 XOR OR \ 59A095 69C005000000      IMUL    EAX , EAX , # 5
2382
0= IF M\ 8E DTST
2383
        80048D OP0 @ !    \ MOV     EAX , [EAX*4+EAX]
2384
       -3 ALLOT
2385
       FALSE  M\ 8F DTST
2386
       EXIT
2387
   THEN
2388
 
2389
OP0 @ W@ D28B =  \   MOV EDX, EDX  \ C-DO
2390
IF  OP0 OPexcise TRUE EXIT
2391
THEN
2392
 
2393
OP0 @ @ 1004583 = \ 587890 83450001                ADD     0 [EBP] , # 1
2394
IF M\ 146 DTST
2395
        45FF OP0 @ W!    \ INC     0 [EBP]
2396
       -1 ALLOT
2397
       FALSE  M\ 147 DTST
2398
       EXIT
2399
THEN
2400
 
2401
M\ PPPP
2402
OP1 @ :-SET U< IF TRUE EXIT THEN
2403
   ?~EAX 0!
2404
 
2405
OP1 @ @ 00FFFFFD AND 244489 XOR \ MOV     8 [ESP] , EAX
2406
OP0 @ @ FFFFFFFD AND
2407
OP1 @ @ FFFFFFFD AND  XOR OR \ MOV     EAX , 8 [ESP]
2408
0= IF M\ 1F0 DTST
2409
       OP1 ToOP0
2410
       -4 ALLOT
2411
       FALSE  M\ 1F1 DTST
2412
       EXIT
2413
   THEN
2414
 
2415
OP1 @ 2+  C@
2416
OP0 @ 2+  C@  XOR
2417
OP1 @ W@ 5089 XOR OR \ MOV     C [EAX] , EDX
2418
OP0 @ W@ 408B XOR OR \ MOV     EAX , C [EAX]
2419
0= IF M\ 2F0 DTST
2420
        C28B OP0 @ W!    \ MOV     EAX , EDX
2421
       -1 ALLOT
2422
       FALSE  M\ 2F1 DTST
2423
       EXIT
2424
   THEN
2425
M\ PPPP
2426
OP1 @ @ 008B0889 = \ MOV     [EAX] , ECX 	MOV     EAX , [EAX]
2427
   IF      M\ F0 DTST
2428
           C18B OP0 @ W!
2429
           FALSE    M\ F1 DTST
2430
           EXIT
2431
   THEN
2432
 
2433
   OP0 @ C@ 58 XOR   \ POP EAX
2434
   OP0 @ ^?EAX= AND 0=
2435
\   OP0 @ ^?EAX=  0=
2436
   IF  ?EAX=RULES EXIT
2437
   THEN
2438
 
2439
OP1 @ @ 4503C033 = \ XOR     EAX , EAX 	ADD     EAX , F8 [EBP]
2440
   IF  M\ 10C DTST
2441
       OP1 OPexcise
2442
       8B OP0 @ C!  \  MOV     EAX , F8 [EBP]
2443
       FALSE  M\ 10D DTST
2444
       EXIT
2445
   THEN
2446
M\ PPPP
2447
OP1 @ @ 048DC033 = \  XOR     EAX , EAX  LEA  EAX , 57B680 [EAX*4]
2448
   IF   OP0 @ 2+ C@ 85 =
2449
      IF  M\ 62 DTST
2450
         OP1 OPexcise
2451
         B8 OP0 @ C!  \  MOV     EAX , # 57B680
2452
         OP0 @ 3 + @ OP0 @ 1+ !
2453
         -2 ALLOT
2454
         FALSE  M\ 63 DTST
2455
         EXIT
2456
      THEN
2457
   THEN
2458
 
2459
 
2460
   ?C-JMP
2461
   IF     OP0 @ C@ C3 XOR
2462
          OP1 @ C@ E8 XOR OR 0=    \ CALL X   RET
2463
          IF M\ 0C DTST
2464
             OP1 @ 1+!
2465
             OP1 ToOP0
2466
             FALSE  -6 ALLOT
2467
             SetJP   5 ALLOT  M\ 0D DTST
2468
             EXIT
2469
          THEN
2470
   THEN
2471
 
2472
\ TRUE EXIT
2473
 
2474
 \ $ CELLS 444 + @
2475
   OP1 @  W@ 38FF AND 008D = \ LEA EAX , ____
2476
   IF  OP0 @  W@ 008B   =   \ MOV EAX , [EAX]
2477
      IF
2478
        M\ 0E DTST
2479
        8B OP1 @ C!
2480
        OP1 ToOP0
2481
        FALSE  -2 ALLOT M\ 0F DTST
2482
        EXIT
2483
      THEN
2484
      OP0 @ @ FFFEFF AND 00B60F = \ MOVZX   EAX , BYTE|WORD PTR [EAX]
2485
                                  \ LEA EAX , ____
2486
      IF
2487
       M\ 10E DTST
2488
        OP0 @ W@   OP1 @ 2@ ( 2DUP  U. U. ) OP1 @ 1+ ( 0 IF THEN ) 2!
2489
        OP1 @ W!
2490
        OP1 ToOP0
2491
        FALSE  -2 ALLOT M\ 10F DTST
2492
        EXIT
2493
      THEN
2494
   THEN
2495
   OP0 @  W@ 4589  XOR  \  MOV  X [EBP], EAX
2496
   OP0 @ 2+ C@
2497
   OP1 @ 2+ C@     XOR OR 0=   \  (FALG &( X1=X ))
2498
    IF
2499
          OP1 @    W@ 458B =   \  MOV  EAX, 1X [EBP] \ $ DROP DUP
2500
          IF   M\ 10 DTST
2501
               OP1 ToOP0
2502
               FALSE  -3 ALLOT M\ 11 DTST
2503
               EXIT
2504
          THEN
2505
    THEN
2506
 
2507
    OP1 @  C@ B8 =              \ MOV  EAX, # X \ eax=
2508
    IF  OP0 @  W@
2509
          DUP   D8F7   =   \ NEG EAX
2510
       IF DROP M\ 14 DTST
2511
          OP1 @ 1+ @ NEGATE OP1 @ 1+ !   \  MOV EAX, # -X
2512
          OP1 ToOP0
2513
          FALSE -2 ALLOT M\ 15 DTST
2514
          EXIT
2515
       THEN
2516
          DUP   D0F7   =   \ MOV  EAX, # X   NOT EAX
2517
       IF DROP M\ 16 DTST
2518
          OP1 @ 1+ @ INVERT OP1 @ 1+ !   \  MOV EAX, # ~X
2519
          OP1 ToOP0
2520
          FALSE -2 ALLOT M\ 17  DTST
2521
          EXIT
2522
       THEN
2523
          DUP    008B   =   \  MOV  EAX, # X  MOV EAX, [EAX]
2524
       IF DROP M\ 18 DTST
2525
          A1 OP1 @ C!   \  MOV EAX, X
2526
          OP1 ToOP0
2527
          FALSE -2 ALLOT M\ 19  DTST
2528
          EXIT
2529
       THEN
2530
         DROP
2531
       OP0 @  @ FFFFFF AND  85448B = \  MOV  EAX, # X  MOV EAX , X1 [EBP] [EAX*4]
2532
       IF M\ 518 DTST
2533
          OP0 @ 3 + C@
2534
          OP1 @ 1+   @ CELLS +
2535
          458B  OP1 @ W!   \  MOV     EAX , X [EBP]
2536
                OP1 @ 2+ C!
2537
          OP1 ToOP0
2538
          FALSE -6 ALLOT M\ 519  DTST
2539
          EXIT
2540
       THEN
2541
    THEN
2542
 
2543
    OP1 @ W@ 5589 XOR        \ MOV     X1 [EBP] , EDX
2544
    OP0 @ W@ 4503 XOR  OR    \ ADD     EAX , X0 [EBP]
2545
    OP1 @  2+ C@ OP0 @  2+  C@ XOR OR  \   X1=X0
2546
0=  IF M\ 418 DTST
2547
          02048D OP0 @ !         \  lea EAX, [EAX+EDX]
2548
        FALSE  M\ 419  DTST
2549
        EXIT
2550
    THEN
2551
 
2552
    OP1 @ W@ 4D89 XOR        \ MOV     4 [EBP] , ECX
2553
    OP0 @ W@ 558B XOR  OR    \ MOV     EDX , 4 [EBP]
2554
    OP1 @  2+ C@ OP0 @  2+  C@ XOR OR  \   X1=X0
2555
0= IF M\ 418 DTST
2556
          D18B OP0 @ W!         \  MOV     EDX , ECX
2557
        -1 ALLOT
2558
        FALSE  M\ 419  DTST
2559
        EXIT
2560
   THEN
2561
M\ PPPP
2562
   OP1 @  W@ 408D   XOR       \ LEA     EAX , Y [EAX]
2563
   OP0 @   @ 85048D FFFFFF AND XOR OR 0= \ LEA     EAX , X [EAX*4]
2564
   IF M\ 30E DTST
2565
       OP1 @ 2+ C@ C>S CELLS OP0 @ 3 + +!
2566
        FALSE
2567
        OP1 OPexcise   M\ 30F DTST
2568
       EXIT
2569
   THEN
2570
 
2571
   OP1 @     @ FFFFFF AND 85048D  XOR \ LEA     EAX , X [EAX*4]
2572
   OP0 @     @ FFFFFF AND 02048D  XOR    OR    \ MOV     EAX , [EDX] [EAX]
2573
   OP1 @ 3 + @ 80 + FFFFFF00 AND OR   0=
2574
   IF M\ 50E DTST
2575
        8244 OP1 @ 1+ W!
2576
        OP1 ToOP0
2577
        FALSE
2578
        -6 ALLOT  M\ 50F DTST
2579
       EXIT
2580
   THEN
2581
 
2582
   OP0 @  W@ FFFD AND 5589 =    \ MOV     EDX , X [EBP]
2583
   IF   OP1
2584
        BEGIN MOV_EDX_[EBP]
2585
        UNTIL
2586
        IF   M\ A0E DTST
2587
            OP1 ToOP0
2588
            FALSE
2589
            -3 ALLOT  M\ A0F DTST
2590
            EXIT
2591
        THEN
2592
   THEN
2593
 
2594
DUP    C@  0C3 XOR
2595
OP1 @  W@ 4589 XOR OR \ 5695B0 8945FC		MOV     FC [EBP] , EAX
2596
OP0 @  W@ 6DF7 XOR OR \ 5695B3 F76DFC		IMUL    FC [EBP]
2597
OP1 @ 2+ C@
2598
OP0 @ 2+ C@    XOR OR
2599
OP0 @ 2+ C@ C>S  OFF-EBP > OR
2600
0= IF  M\ 32A DTST
2601
       E8F7 OP1 @ W!
2602
       OP1 ToOP0
2603
       FALSE -4 ALLOT M\ 32B DTST
2604
       EXIT
2605
   THEN
2606
M\ PPPP
2607
   OP0 @ W@  E7FF AND 4589 = \ TTTT AND \ MOV X [EBP] , EAX|EDX|EBX|ECX
2608
   IF OFF-EBP >R   OP0 @ 2+ C@ C>S CELL+ TO OFF-EBP
2609
       FALSE   OP1 -EBPCLR
2610
       IF     R> TO OFF-EBP FALSE EXIT THEN
2611
              R> TO OFF-EBP
2612
   THEN
2613
 
2614
OP1 @ W@ CA8B XOR               \  8BCA		MOV     ECX , EDX
2615
OP0 @ @ FFFFFF AND 88048D XOR OR \ 8D0488	LEA     EAX , [EAX] [ECX*4]
2616
0= IF  M\ 42A DTST
2617
       90048D  OP0 @ !
2618
       FALSE  M\ 42B DTST
2619
       EXIT
2620
   THEN
2621
 
2622
DUP C@    0C3 XOR
2623
OP1 @ W@ CA8B XOR    OR           \  8BCA		MOV     ECX , EDX
2624
OP0 @ @ FFFFFF AND 90048D XOR OR \ 8D0488	LEA     EAX , [EAX] [EDX*4]
2625
0= IF  M\ 62A DTST
2626
        OP1 OPexcise
2627
       FALSE  M\ 62B DTST
2628
       EXIT
2629
   THEN
2630
 
2631
OP1 @ @ FFFFFF AND 8D0C8D XOR \  8D0C8D00000000 LEA     ECX , 0 [ECX*4]
2632
OP1 @ 3 + @  XOR
2633
OP0 @ @ FFFFFF AND 1048D XOR OR \  8D0401	   LEA     EAX , [ECX] [EAX]
2634
0= IF  M\ 52A DTST
2635
       88048D  OP1 @ !
2636
       OP1 ToOP0
2637
       FALSE -7 ALLOT M\ 52B DTST
2638
       EXIT
2639
   THEN
2640
OP1 @ C@ B8  XOR   \ MOV     EAX , # 58DDE8
2641
OP0 @ @ FFFFFF AND 90048D XOR OR  \ LEA     EAX , [EAX] [EDX*4]
2642
0= IF  M\ 4C DTST
2643
       OP1 @ 1+ @
2644
       OP1 OPexcise
2645
       95 OP0 @ 2+ C!  ,
2646
       FALSE M\ 4D DTST
2647
       EXIT
2648
   THEN
2649
 
2650
DUP   C@  0C3 XOR
2651
OP1 @  @ 048DD9F7 XOR OR \     NEG     ECX     LEA     EAX , [ECX] [EAX]
2652
0= IF  M\ 90 DTST
2653
       C12B  OP1 @ W!
2654
       OP1 ToOP0
2655
       FALSE -3 ALLOT M\ 91 DTST
2656
       EXIT
2657
   THEN
2658
 
2659
DUP   C@  0C3 XOR
2660
OP1 @ @ FFFFFF AND 244C8B XOR OR \   MOV     ECX , 20 [ESP]
2661
OP0 @ W@ C12B XOR OR \ 59A13C 2BC1              SUB     EAX , ECX
2662
0= IF  M\ 92 DTST
2663
       442B  OP1 @ W!            \   SUB     EAX , 20 [ESP]
2664
       OP1 ToOP0
2665
       FALSE -2 ALLOT M\ 93 DTST
2666
       EXIT
2667
   THEN
2668
 
2669
DUP   C@  0C3 XOR
2670
OP1 @ W@  D8B XOR OR  \  MOV     ECX , 599825
2671
OP0 @ W@ C12B XOR OR \  SUB     EAX , ECX
2672
0= IF  M\ 92 DTST
2673
       052B  OP1 @ W!            \   SUB     EAX , 599825
2674
       OP1 ToOP0
2675
       FALSE -2 ALLOT M\ 93 DTST
2676
       EXIT
2677
   THEN
2678
 
2679
DUP   C@  0C3 XOR
2680
OP1 @ C@ B8 XOR OR \ 59A227 B841000000  MOV     EAX , # 1000
2681
OP0 @ C@ A3 XOR OR \ 59A22C A375995900  MOV     599975  ( Char1Glob+5  ) ,  EAX
2682
0=  IF   M\ 98 DTST
2683
            OP1 @ 1+ @ OP0 @ 1+ @
2684
            OP1 @ 2+ ! OP0 @ 1+ !
2685
            05C7  OP1 @ W! \  MOV   599975 ,  # 1000
2686
            OP1 ToOP0
2687
            FALSE M\ 99 DTST
2688
            EXIT
2689
    THEN
2690
DUP   C@  0C3 XOR
2691
OP1 @ C@ B8 XOR OR               \   MOV     EAX , # 2000
2692
OP0 @ @ FFFFFF AND 244489 XOR OR \    MOV     1C [ESP] , EAX
2693
0=  IF   M\ A8 DTST
2694
            OP1 @ 1+ @ ,
2695
            OP1 OPexcise
2696
            C7  OP0 @ C! \  MOV   1C [ESP] ,  # 2000
2697
            FALSE M\ A9 DTST
2698
            EXIT
2699
    THEN
2700
 
2701
OP1 @ C@ B8 XOR      \  B8E0005800  MOV     EAX , # 5800E0
2702
OP0 @ W@ 1001 XOR OR \  0110              ADD     [EAX] , EDX
2703
0=  IF  M\ E4 DTST
2704
       OP1 @ 1+ @
2705
       1501 OP0 @ W! ,       \  ADD  5800E0  , EDX
2706
       FALSE  M\ E5 DTST
2707
       EXIT
2708
   THEN
2709
OP1 @ C@ B8 XOR  \ 580185 B855550500  MOV     EAX , # 55555
2710
OP0 @ W@ 1089 XOR OR \ 58018A 8910              MOV     [EAX] , EDX
2711
0=  IF  M\ EE DTST
2712
       OP1 @ 1+ @
2713
       1589 OP0 @ W! ,       \  MOV  5800E0  , EDX
2714
       FALSE  M\ EF DTST
2715
       EXIT
2716
   THEN
2717
 
2718
OP1 @ @ 1501D08B = \  8BD0           MOV     EDX , EAX
2719
                   \  011560015800   ADD     580160 , EDX
2720
   IF  M\ E6 DTST
2721
       0501 OP0 @ W!        \  ADD  5800E0  , EAX
2722
       FALSE  M\ E7 DTST
2723
       EXIT
2724
   THEN
2725
 
2726
DUP   C@  0C3 XOR
2727
OP1 @ @ 0A4CB60F XOR OR \     MOVZX   ECX , BYTE PTR 2 [EDX] [ECX]
2728
OP0 @ W@ C133 XOR OR   \     XOR     EAX , ECX
2729
0=  IF   M\ A0 DTST
2730
            OP0 OPexcise
2731
            0A443200   OP0 @ !
2732
            OP0 @ 1+ @ OP0 @ !  \ XOR   AL , BYTE PTR [EAX+EDX+44H]
2733
            -1 ALLOT
2734
            FALSE M\ A1 DTST
2735
            EXIT
2736
    THEN
2737
 
2738
DUP   C@  0C3 XOR
2739
OP1 @ @ FFFFFF AND 850C8D XOR OR \    LEA     ECX , 58E188  ( rson+5  ) [EAX*4]
2740
OP0 @ W@ 1189 XOR OR \ 596738 8911              MOV     [ECX] , EDX
2741
0=  IF   M\ A2 DTST
2742
            OP0 OPexcise
2743
            1489  OP0 @ W!
2744
            FALSE M\ A3 DTST
2745
            EXIT
2746
    THEN
2747
 
2748
OP1 @ 2+ C@
2749
OP0 @ 2+ C@   XOR
2750
OP1 @ W@ 5589 XOR OR \  8955F8            MOV     F8 [EBP] , EDX
2751
0=  IF
2752
    OP0 @ W@ 450B = \  0B45F8            OR      EAX , F8 [EBP]
2753
         IF   M\ B2 DTST
2754
              C20B  OP0 @ W!      \    OR      EAX , EDX
2755
              -1 ALLOT
2756
              FALSE M\ B3 DTST
2757
              EXIT
2758
         THEN
2759
    OP0 @ W@ 453B = \  3B45F8            CMP     EAX , F8 [EBP]  !!!
2760
         IF   M\ BE DTST
2761
              C23B  OP0 @ W!      \    CMP      EAX , EDX
2762
              -1 ALLOT
2763
              FALSE M\ BF DTST
2764
              EXIT
2765
         THEN
2766
    THEN
2767
 
2768
OP1 @ W@ C28B XOR    \ 8BC2              MOV     EAX , EDX
2769
OP0 @ W@ 4589 XOR OR \ 8945FC            MOV     FC [EBP] , EAX
2770
0=  IF   M\ C0 DTST
2771
            5589  OP0 @ W!      \ 8955FC            MOV     FC [EBP] , EDX
2772
            FALSE M\ C1 DTST
2773
            EXIT
2774
    THEN
2775
 
2776
 DUP C@    C3 XOR
2777
OP1 @ W@ D08B XOR OR \ 8BD0              MOV     EDX , EAX
2778
OP0 @ W@ 45C7 XOR OR \ C7450001000000    MOV     0 [EBP] , # 1
2779
0=  IF   M\ C6 DTST
2780
            OP1 OPexcise
2781
            FALSE M\ C7 DTST
2782
            EXIT
2783
    THEN
2784
 
2785
OP1 @ 2+ C@
2786
OP0 @ 2+ C@   XOR
2787
OP1 @ W@ 4589 XOR OR \ 58251C 894500            MOV     0 [EBP] , EAX
2788
OP0 @ W@ 45C7 XOR OR \ 58251F C7450001000000    MOV     0 [EBP] , # 1
2789
0=  IF   M\ C6 DTST
2790
            OP1 OPexcise
2791
            FALSE M\ C7 DTST
2792
            EXIT
2793
    THEN
2794
 
2795
DUP C@ C3 XOR
2796
OP1 @ @ 0501D08B XOR OR \  8BD0           MOV     EDX , EAX
2797
                        \  011510025800      ADD     580210  , EAX
2798
0=  IF  M\ E8 DTST
2799
       OP1 OPexcise
2800
       FALSE  M\ E9 DTST
2801
       EXIT
2802
   THEN
2803
 
2804
DUP C@ C3 XOR
2805
OP1 @ C@ B9 XOR OR \   B94C025800  MOV     ECX , # 58024C
2806
OP0 @ W@ 1C7 XOR OR \  C70189ABCDEF       MOV     [ECX] , # EFCDAB89
2807
0= IF  M\ EC DTST
2808
         OP0 @ 2+ @ OP1 @ 1+ @
2809
         OP1 @ 2+ ! OP0 @ 1+ !
2810
         05C7  OP1 @ W! \  MOV   58024C ,  # EFCDAB89
2811
         OP1 ToOP0
2812
         -1 ALLOT
2813
       FALSE  M\ ED DTST
2814
       EXIT
2815
   THEN
2816
 
2817
OP1 @ C@ B8 XOR    \ 587294 B801000000  MOV     EAX , # 1
2818
OP0 @ W@ C88B XOR OR \ 587299 8BC8              MOV     ECX , EAX
2819
0= IF  M\ F6 DTST
2820
         OP1 @ 1+ @
2821
         OP0 @ 1+ !
2822
         B9  OP0 @ C! \  MOV     ECX , # 1
2823
         3 ALLOT
2824
       FALSE  M\ F7 DTST
2825
       EXIT
2826
   THEN
2827
 
2828
OP1 @ C@ B9 XOR      \  B901000000  MOV     ECX , # 1
2829
OP0 @ W@ D9F7 XOR OR \  F7D9              NEG     ECX
2830
0= IF  M\ F8 DTST
2831
         OP1 @ 1+ @ NEGATE
2832
         OP1 @ 1+ !
2833
         OP1 ToOP0
2834
         -2 ALLOT
2835
       FALSE  M\ F9 DTST
2836
       EXIT
2837
   THEN
2838
 
2839
DUP C@ C3 XOR
2840
OP1 @ C@ B9 XOR OR   \  B919000000  MOV     ECX , # 19
2841
OP0 @ W@ F7FF AND E0D3 XOR OR \  D3E8              SHR|SHL     EAX , CL
2842
0= IF  M\ 100 DTST
2843
         OP1 @ 1+ @
2844
         OP1 OPexcise
2845
         C1 OP0 @ C! C,
2846
       FALSE  M\ 101 DTST
2847
       EXIT
2848
   THEN
2849
 
2850
OP1 @ C@ B8 XOR \ B801000000  MOV     EAX , # 1
2851
OP0 @ @ FFFFFF AND 85048B XOR OR \ 8B04851CDE5700        MOV     EAX , 57DE1C [EAX*4]
2852
0= IF  M\ 148 DTST
2853
       A1  OP1 @  C!      \ MOV     EAX , 1
2854
       OP0 @ 3 + @
2855
       OP1 @ 1+  @ CELLS +  OP1 @ 1+ !
2856
       OP0 OPexcise
2857
       FALSE  M\ 149 DTST
2858
       EXIT
2859
   THEN
2860
 
2861
OP1 @ W@ C033 XOR \ 33C0		XOR     EAX , EAX
2862
OP0 @ @ FFFFFF AND 85048B XOR OR \ 8B04851CDE5700        MOV     EAX , 57DE1C [EAX*4]
2863
0= IF  M\ 348 DTST
2864
       2 OP0 +!
2865
       A1  OP0 @ C!      \ MOV     EAX , 57DE1C
2866
       OP1 OPexcise
2867
       FALSE  M\ 349 DTST
2868
       EXIT
2869
   THEN
2870
 
2871
OP1 @ C@ B8 XOR		\ B803000000  MOV     EAX , # 3
2872
OP0 @ W@ F7FF AND E0C1 XOR OR	\ C1E804            SH[R|L]     EAX , 4
2873
0= IF  M\ 48 DTST
2874
       OP1 @ 1+ @
2875
       OP0 @ 2+ C@ OP0 @ W@ 0x800 AND IF RSHIFT ELSE LSHIFT THEN
2876
       OP1 @ 1+ !
2877
       OP0 OPexcise
2878
       FALSE  M\ 49 DTST
2879
       EXIT
2880
   THEN
2881
DUP C@ C3 XOR
2882
OP1 @ W@ CA8B XOR OR \ 582148 8BCA              MOV     ECX , EDX
2883
OP0 @ W@ C12B XOR OR \ 58214A 2BC1              SUB     EAX , ECX
2884
0= IF  M\ 180 DTST
2885
       C22B  OP1 @ W! \    SUB     EAX , ECX
2886
       OP0 OPexcise
2887
       FALSE  M\ 181 DTST
2888
       EXIT
2889
   THEN
2890
 
2891
M\ PPPP
2892
OP2 @ :-SET
2893
\ TTTT  IF ." T=" 2DUP HEX U. U. THEN
2894
 U< IF TRUE EXIT THEN
2895
 
2896
\ $ - DUP
2897
    OP2 @ W@ D8F7 XOR
2898
    OP1 @ W@ 4501 XOR OR 0=
2899
    IF M\ 118 DTST
2900
       OP2 OPexcise
2901
       29 OP1 @ C!
2902
       FALSE
2903
       EXIT M\ 119 DTST
2904
    THEN
2905
 
2906
\ $ - -
2907
   OP2 @  @  4503D8F7 XOR           \  NEG EAX  ADD EAX, X [EBP]
2908
   OP0 @  W@ D8F7     XOR    OR 0=  \ NEG EAX
2909
     IF  M\ 20 DTST
2910
         OP1 @ @ 452B OR OP2 @ ! \  SUB EAX, X [EBP]
2911
         OP2 ToOP0
2912
         -4 ALLOT
2913
         FALSE M\ 21 DTST
2914
         EXIT
2915
     THEN
2916
M\ PPPP
2917
 OP0 @ W@  ADD|XOR|OR|AND=   \ $  4444  OR
2918
    IF
2919
      OP2 @ W@  4589  XOR \ MOV X1 [EBP], EAX
2920
      OP2 @ 2+  C@
2921
      OP0 @ 2+  C@    XOR OR 0=
2922
      IF
2923
          OP1 @ W@
2924
          DUP  0878B =     \ MOV EAX, X [EDI]
2925
               IF  DROP M\ 22 DTST
2926
                   OP0 @ C@ 8700 + OP2 @ W!
2927
                   OP1 @ 2+ @ OP2 @ 2+ !
2928
                   OP2 ToOP0
2929
                   FALSE -6 ALLOT M\ 23 DTST
2930
                  EXIT
2931
               THEN
2932
                          \ MOV X1 [EBP], EAX
2933
          DUP  0458B =    \  MOV     EAX , X [EBP]
2934
                          \  ADD|XOR|OR|AND=
2935
               IF  DROP  M\ 122 DTST
2936
                   OP0 @ C@ 4500 +  OP1 @ W!
2937
                   OP1 ToOP0
2938
                   FALSE -3 ALLOT M\ 123 DTST
2939
                   EXIT
2940
               THEN
2941
          FF AND
2942
                          \ MOV X1 [EBP], EAX
2943
          DUP  0B8 =      \ MOV EAX, # X
2944
                          \  ADD|XOR|OR|AND=
2945
               IF  DROP M\ 24 DTST
2946
                   OP0 @ C@ 2+ OP1 @ C!
2947
                   OP1 ToOP0
2948
                   FALSE -3 ALLOT M\ 25 DTST
2949
                   EXIT
2950
               THEN
2951
 
2952
                          \ MOV X1 [EBP], EAX
2953
          DUP  0A1 =      \ MOV EAX,  X
2954
                          \  ADD|XOR|OR|AND=
2955
               IF  DROP  M\ 26 DTST
2956
                   OP0 @ C@ 500 +
2957
                   OP1 @ 1+ @ OP1 @ 2+ !
2958
                    OP1 @ W!
2959
                   OP1 ToOP0
2960
                   FALSE -2 ALLOT M\ 27 DTST
2961
                   EXIT
2962
               THEN
2963
          DROP
2964
      THEN
2965
      OP2 @ W@    45C7 XOR  \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR
2966
      OP1 @ C@      B8 XOR OR 0=   \ MOV     EAX , # 4
2967
                          \  ADD|XOR|OR|AND=
2968
      IF  M\ 124 DTST
2969
          OP2 @ 3 + @ OP1 @ 1+ @
2970
          C300  OP0 @ 2+ ! OP0 @ EXECUTE
2971
          OP1 @ 1+ ! DROP
2972
          OP1 ToOP0
2973
          FALSE -3 ALLOT M\ 125 DTST
2974
          EXIT
2975
      THEN
2976
      OP1 @ W@   4D89  XOR   \ MOV     F4 [EBP] , ECX
2977
      OP1 @ 2+  C@
2978
      OP0 @ 2+  C@    XOR OR 0=  \  ADD|XOR|OR|AND=
2979
      IF  M\ 12 DTST
2980
          C1 OP0 @ 1+ C!    \ XOR     EAX , ECX
2981
          FALSE -1 ALLOT M\ 13 DTST
2982
          EXIT
2983
      THEN
2984
 
2985
                          \  ADD|XOR|OR|AND=
2986
      OP0 @ 2+  C@ OP1 -EBPLIT NIP
2987
      DUP @ W@ 45C7 =      \ MOV     F8 [EBP] , # 2710
2988
      OVER @ 2+  C@ OP0 @ 2+  C@  = AND
2989
      IF  OP0 @ W@ 4503 =  \  ADD     EAX , F8 [EBP]
2990
          IF M\ 46 DTST
2991
             @ 3 + @ OFF-EAX + TO OFF-EAX
2992
             OP1 ToOP0
2993
             FALSE -3 ALLOT  M\ 47 DTST
2994
             EXIT
2995
          THEN
2996
      THEN
2997
      DROP
2998
 
2999
 OP0 @ 2+ C@
3000
 OP1 @ 2+ C@  XOR
3001
OP1 @ W@ 45C7 XOR OR  \ 599B95 C745F401000000    MOV     F4 [EBP] , # 1
3002
\ ADD|XOR|OR|AND=
3003
0=     IF M\ 8C DTST
3004
         OP0 @ C@ 2+ OP0 @ C!
3005
         2 ALLOT
3006
         OP1 @ 3 + @ OP0 @ 1+ !
3007
         FALSE M\ 8D DTST
3008
         EXIT
3009
       THEN
3010
 
3011
    THEN
3012
M\ PPPP
3013
 
3014
\ OP0 @ W@ 4D8B =
3015
 OP0 @ W@ 558B =    \ MOV     EDX , X [EBP]
3016
    IF                     \ OP-1  MOV     EAX , FC [EBP]
3017
      OP0 @ 2+  C@ OP1 -EBPLIT NIP
3018
      DUP @ W@ 45C7 =      \ MOV     F8 [EBP] , # 2710
3019
      OVER @ 2+  C@ OP0 @ 2+  C@  = AND
3020
      IF M\ 50 DTST
3021
             -2 ALLOT
3022
             BA OP0 @ C!
3023
             @ 3 + @ ,
3024
             FALSE  M\ 51 DTST
3025
             EXIT
3026
      THEN
3027
      DROP
3028
    THEN
3029
 
3030
    OP0 @ W@   4539   =      \ CMP     X [EBP] , EAX
3031
    IF
3032
         OP1 @ W@   5589 XOR             \ MOV     X [EBP] , EDX
3033
         OP1 @ 2+ C@
3034
         OP0 @ 2+ C@    XOR OR 0=        \
3035
         IF  M\ 128 DTST
3036
             D03B  OP0 @ W!
3037
             FALSE -1 ALLOT M\ 129 DTST
3038
             EXIT
3039
         THEN
3040
 
3041
         OP1 @ C@   0B8 XOR      \ MOV EAX, # X
3042
         OP2 @ W@  4589 XOR OR   \ MOV X1 [EBP], EAX
3043
         OP2 @ 2+ C@
3044
         OP0 @ 2+ C@    XOR OR 0=
3045
         IF  M\ 28 DTST
3046
             3D OP2 @ C!
3047
             OP1 @ 1+ @ OP2 @ 1+ !
3048
             OP2 ToOP0
3049
             FALSE -6 ALLOT M\ 29 DTST
3050
             EXIT
3051
         THEN
3052
\ $  4444 @ U<
3053
         OP1 @ C@   0A1 XOR      \ MOV EAX, # X
3054
         OP2 @ W@  4589 XOR OR   \ MOV X1 [EBP], EAX
3055
         OP2 @ 2+ C@
3056
         OP0 @ 2+ C@    XOR OR 0=
3057
         IF  M\ 2A DTST
3058
             053B OP2 @ W!
3059
             OP1 @ 1+ @ OP2 @ 2+ !
3060
             OP2 ToOP0
3061
             FALSE -5 ALLOT M\ 2B DTST
3062
             EXIT
3063
         THEN
3064
 
3065
    THEN
3066
   DUP   W@ 458B XOR           \ MOV     EAX , FC [EBP]
3067
   OP0 @ W@ 1089 XOR OR        \ MOV     [EAX] , EDX
3068
   OP1 @ W@ 558B XOR OR 0=     \ MOV     EDX , X [EBP] \ !?
3069
    IF                     \ OP-1  MOV     EAX , FC [EBP]
3070
          OP2 @ W@ 408D =  \ LEA     EAX , 4 [EAX]  \ $ CELL+ !
3071
          IF  M\ 430 DTST
3072
              OP2 @ 2+ C@
3073
              OP2 OPexcise
3074
              5089 OP0 @ W! C,
3075
              FALSE M\ 431 DTST
3076
              EXIT
3077
          THEN
3078
 
3079
          OP3 @ :-SET U< IF TRUE EXIT THEN
3080
\ $  44444 !
3081
          OP3 @ 2+ C@
3082
          OP1 @ 2+ C@    =
3083
          IF   OP3 @ W@ 4589 =   \  MOV     X [EBP] , EAX
3084
            IF OP2 @ C@ B8   =  \  MOV     EAX, X
3085
               IF M\ 30 DTST
3086
                  A3  OP3 @ C!
3087
                  OP2 @ 1+ @  OP3 @ 1+ !
3088
                  OP3 ToOP0
3089
                  FALSE -8 ALLOT M\ 31 DTST
3090
                  EXIT
3091
               THEN
3092
               OP2 @ W@ 878D =     \ LEA      EAX,  X [EDI]
3093
               IF  M\ 230 DTST  \ ???
3094
                  OP3 OPexcise
3095
                  8789 OP2 @ W!    \ MOV     X [EDI] , EAX
3096
                  OP2 ToOP0
3097
                  FALSE  -5 ALLOT M\ 231 DTST
3098
                  EXIT
3099
               THEN
3100
            THEN
3101
            OP3 @ W@  45C7 =   \  MOV     X [EBP] , # 44444
3102
            IF OP2 @ C@ B8   = \ TTTT AND  \  MOV     EAX, X
3103
               IF  M\ 130 DTST
3104
                   -4000 OP3 @ +!
3105
                   OP3 @ 3 + @   OP2 @ 1+ @ OP3 @ 2+  !
3106
                   OP3 @ 6 + !
3107
 
3108
                   OP3 ToOP0
3109
                   FALSE -7 ALLOT M\ 131 DTST
3110
                   EXIT
3111
               THEN
3112
 
3113
               OP2 @ W@  878D =  \ LEA      EAX,  X [EDI]
3114
               IF  M\ 330 DTST        \ ???
3115
                    87C7 OP3 @ W!
3116
                    OP3 @ 3 + @   OP2 @ 2+ @ OP3 @ 2+  !
3117
                    OP3 @ 6 + !
3118
 
3119
                    OP3 ToOP0
3120
                    FALSE -8 ALLOT M\ 331 DTST
3121
                    EXIT
3122
               THEN
3123
            THEN
3124
          THEN
3125
    THEN
3126
 
3127
M\ PPPP
3128
    OP2 @ W@ 5589 XOR     \ MOV     F8 [EBP] , EDX
3129
    OP1 @  @ FFFFFF AND 85048D XOR OR  \  LEA     EAX , Y [EAX*X] грубо
3130
    OP0 @ W@ 4503   XOR  OR
3131
    OP2 @  2+ C@ OP0 @  2+  C@ XOR OR 0= \   X2=X0
3132
    IF M\ 318 DTST
3133
       048D OP0 @ W! 2 OP0 @ 2+ C!
3134
       FALSE
3135
       EXIT M\ 319 DTST
3136
    THEN
3137
 
3138
    OP2 @ W@ 04D89 XOR        \ MOV     X [EBP] , ECX
3139
    OP1 @ ?ChEAX              \ MOV     EAX , ____
3140
    OP1 @ W@ 5589 <> AND OR   \ MOV     FC [EBP] , EDX
3141
    OP0 @ W@ 558B    XOR OR   \ MOV     EDX , X [EBP]
3142
    OP2 @ 2+ C@  OP0 @ 2+ C@  XOR OR 0=
3143
    IF   M\ 630 DTST
3144
       D1 OP0 @ 1+ C!
3145
       FALSE -1 ALLOT  M\ 631 DTST
3146
       EXIT
3147
    THEN
3148
    OP1 @ @ 008BC28B = \ MOV     EAX , EDX   MOV     EAX , [EAX]
3149
    IF   M\ 730 DTST
3150
       028B OP1 @ W!
3151
            OP1 ToOP0
3152
       FALSE -2 ALLOT  M\ 731 DTST
3153
       EXIT
3154
    THEN
3155
 
3156
   DUP C@ C3 =
3157
   IF
3158
       OP1 @  W@ D18B   XOR        \ MOV     EDX , ECX
3159
       OP0 @  W@ 1089   XOR OR 0=  \ MOV     [EAX] , EDX
3160
       IF M\ 30E DTST
3161
          0889 OP1 @ W!
3162
            OP1 ToOP0
3163
            FALSE
3164
            -2 ALLOT  M\ 40F DTST
3165
           EXIT
3166
       THEN
3167
   THEN
3168
M\ PPPP
3169
 
3170
DUP   C@  0C3 XOR
3171
OP1 @ C@   B8 XOR OR \  MOV     EAX , # 400
3172
OP0 @ W@ 6DF7 XOR OR \  IMUL    F8 [EBP]
3173
OP2 @ 2+ C@
3174
OP0 @ 2+ C@    XOR OR
3175
0=  IF
3176
       OP2 @ W@ 45C7 = \ MOV     F8 [EBP] , # C8
3177
       IF     M\ E30 DTST
3178
            OP2 @ 3 + @
3179
            OP1 @ 1+  @ * OP1 @ 1+ !
3180
            OP1 ToOP0
3181
            FALSE -3 ALLOT    M\ E31 DTST
3182
            EXIT
3183
       THEN
3184
 
3185
       OP2 @ W@ 4589 = \ MOV     F8 [EBP] , EAX
3186
          IF  M\ D0E DTST
3187
              OP1 @ 1+ @
3188
              OP1 OPexcise
3189
              -3 ALLOT
3190
              69 C, C0 C, ,  \  IMUL EAX,EAX,44444H
3191
              FALSE  M\ D0F DTST
3192
              EXIT
3193
          THEN
3194
    THEN
3195
 
3196
DUP    C@  0C3 XOR
3197
OP1 @  C@   A1 XOR OR \	MOV     EAX , 569598  ( X+5  )
3198
OP0 @  W@ 6DF7 XOR OR \ IMUL    FC [EBP]
3199
OP2 @ 2+ C@
3200
OP0 @ 2+ C@    XOR OR
3201
\ OP0 @ 2+ C@ C>S  OFF-EBP > OR
3202
0=      IF
3203
           OP2 @  W@ 4589 = \ MOV     FC [EBP] , EAX
3204
           IF  M\ 12A DTST
3205
               2DF7 OP2 @ W!
3206
               OP1 @ 1+ @  OP2 @ 2+ !
3207
               OP2 ToOP0
3208
               FALSE -5 ALLOT M\ 12B DTST
3209
               EXIT
3210
            THEN
3211
 
3212
           OP2 @  W@ 45C7 = \ MOV     F8 [EBP] , # 123
3213
           IF  M\ 22A DTST
3214
               B8 OP2 @ C!
3215
               OP2 @ 3 + @  OP2 @ 1+ !
3216
               -2 OP1 +!
3217
               2DF7 OP1 @ W!
3218
               OP1 @ 3 + @  OP1 @ 2+ !
3219
               OP1 ToOP0
3220
               FALSE -4 ALLOT M\ 22B DTST
3221
               EXIT
3222
            THEN
3223
         THEN
3224
 
3225
OP2 @  W@ 4589 XOR       \ MOV     FC [EBP] , EAX
3226
OP1 @  @ 4503008B XOR OR \ MOV     EAX , [EAX]   ADD     EAX , FC [EBP]
3227
OP2 @ 2+ C@
3228
OP0 @ 2+ C@    XOR OR
3229
0=    IF   M\ 830 DTST
3230
       03 OP1 @ C!
3231
       OP1 ToOP0
3232
       FALSE -3 ALLOT  M\ 831 DTST
3233
       EXIT
3234
    THEN
3235
M\ PPPP
3236
 
3237
DUP    C@ 0C3 XOR
3238
OP2 @  W@ 558B XOR OR \		MOV     EDX , 0 [EBP]
3239
OP1 @  W@ CA8B XOR OR \		MOV     ECX , EDX
3240
OP0 @  C@ 51   XOR OR \		PUSH    ECX
3241
0=  IF   M\ A30 DTST
3242
       75FF OP2 @ W!
3243
       OP2 ToOP0
3244
       FALSE -3 ALLOT  M\ A31 DTST
3245
       EXIT
3246
    THEN
3247
 
3248
OP2 @  W@ 4589 XOR  \ 		MOV     0 [EBP] , EAX
3249
OP1 @  @ FFBFFF AND 24048B XOR OR \ 	MOV     EAX , [ESP(+4)]
3250
OP0 @  W@ 4503 XOR OR \		ADD     EAX , 0 [EBP]
3251
OP2 @ 2+ C@
3252
OP0 @ 2+ C@    XOR OR
3253
0=  IF   M\ B30 DTST
3254
       03 OP1 @ C!
3255
       OP1 ToOP0
3256
       FALSE -3 ALLOT  M\ C31 DTST
3257
       EXIT
3258
    THEN
3259
OP2 @ W@ 5589 XOR    \  MOV     F8 [EBP] , EDX
3260
OP1 @    ?ChEAX   OR \ 	MOV     EAX , [EAX]
3261
OP0 @ W@ 558B XOR OR \  MOV     EDX , F8 [EBP]
3262
OP2 @ 2+ C@
3263
OP0 @ 2+ C@    XOR OR
3264
0=  IF   M\ C30 DTST
3265
       OP1 ToOP0
3266
       FALSE -3 ALLOT  M\ C31 DTST
3267
       EXIT
3268
    THEN
3269
 
3270
OP2 @ 2+ C@
3271
OP0 @ 2+ C@    XOR
3272
OP2 @ W@ 4589 XOR OR \ 579DE0 8945FC            MOV     FC [EBP] , EAX
3273
OP1 @ C@   25 XOR OR \ 579DE3 2555555555  AND     EAX , # 55555555
3274
OP0 @ W@ 558B XOR OR \ 579DE8 8B55FC            MOV     EDX , FC [EBP]
3275
0= IF   M\ C32 DTST
3276
	OP2 OPexcise
3277
	OP1 02 OPinsert
3278
	D08B OP2 @ W!    \ MOV     EDX , EAX
3279
       OP1 ToOP0
3280
       FALSE -3 ALLOT  M\ C33 DTST
3281
       EXIT
3282
    THEN
3283
 
3284
M\ PPPP
3285
OP0 @  W@ ADD|XOR|OR|AND=
3286
   IF
3287
      TRUE ?~EAX !
3288
      OP1
3289
      BEGIN ?EAX>ECX
3290
      UNTIL
3291
\ DUP IF  ?~EAX @ IF 2DROP FALSE THEN
3292
\                THEN
3293
      IF   M\ AE DTST
3294
         ?~EAX @
3295
         IF    ECX:=EAX
3296
         ELSE  BEGIN EAX>ECX0 UNTIL
3297
         THEN  BEGIN EAX>ECX  UNTIL
3298
           DROP
3299
           OP0 @  W@  4503 = \ TTTT AND  \ ADD     EAX , X [EBP]
3300
           IF   01048D OP0 @ !            ELSE   \ LEA EAX, [EAX+ECX]
3301
                0C1  OP0 @ 1+ C! -1 ALLOT        \  OR EAX,ECX
3302
           THEN FALSE  M\ AF DTST
3303
           EXIT
3304
      THEN   M\ PPPP
3305
 
3306
      TRUE ?~EAX !
3307
      OP1   \  TTTT IF ."  ?EAX>EBX" THEN
3308
      BEGIN ?EAX>EBX  \ TTTT IF ." F=" DUP . THEN
3309
      UNTIL
3310
\ DUP IF  ?~EAX @ IF 2DROP FALSE THEN
3311
\                THEN
3312
      IF   M\ AE DTST
3313
         ?~EAX @  \ ." {#}"
3314
         IF    EBX:=EAX
3315
         ELSE  BEGIN EAX>EBX0 UNTIL
3316
         THEN  BEGIN EAX>EBX  UNTIL
3317
           DROP
3318
           OP0 @  W@  4503 = \ TTTT AND  \ ADD     EAX , X [EBP]
3319
           IF   03048D OP0 @ !            ELSE   \ LEA EAX, [EAX+EBX]
3320
           OP0 @  W@ 4539  =                     \ CMP F8 [EBP] , EAX
3321
           IF   C33B OP0 @    W! -1 ALLOT ELSE   \ CMP EAX , EBX
3322
           OP0 @  W@ 453B  =                     \ CMP EAX , F8 [EBP]
3323
           IF   D83B OP0 @    W! -1 ALLOT ELSE   \ CMP EBX , EAX
3324
                0C3  OP0 @ 1+ C! -1 ALLOT        \  OR EAX,EBX
3325
           THEN THEN THEN FALSE  M\ AF DTST
3326
           EXIT
3327
      THEN   M\ PPPP
3328
 
3329
 
3330
      OP1 @   @ 4503D8F7 = \  NEG     EAX  \	ADD     EAX , 4 [EBP]
3331
      IF  OP2 @ W@ 458B =     \	MOV     EAX , X [EBP]
3332
          IF  M\ D0E DTST
3333
              OP1 OPexcise
3334
              OP1 @ 2+ C@  OP0 @ 2+ C@
3335
              OP1 @ 2+ C!  OP0 @ 2+ C!
3336
              2B OP0 @ C!
3337
              FALSE  M\ D0F DTST
3338
              EXIT
3339
          THEN
3340
          OP2 @ C@ A1 =     \	MOV     EAX , X
3341
          IF  M\ D0E DTST
3342
              OP2 @ 1+ @
3343
              OP2 OPexcise
3344
              OP1 OPexcise
3345
              8B OP0 @ C!
3346
              SetOP 2B C, 5 C, ,
3347
              FALSE  M\ D0F DTST
3348
              EXIT
3349
          THEN
3350
      THEN
3351
   THEN
3352
M\ PPPP
3353
 
3354
OP2 @ W@ FFFD AND 4589 XOR    \  MOV     F8 [EBP] , EAX
3355
OP1 @ W@ FFFD AND 4589 XOR OR \  MOV     EAX , F8 [EBP]
3356
OP2 @ 2+ C@
3357
OP1 @ 2+ C@    XOR OR
3358
0=  IF   M\ E30 DTST
3359
       OP1 OPexcise
3360
       FALSE  M\ E31 DTST
3361
       EXIT
3362
    THEN
3363
 
3364
OP2 @  @  458BC28B =   \ MOV     EAX , EDX  MOV     EAX , 0 [EBP]
3365
   IF   M\ 44 DTST
3366
       OP2 OPexcise
3367
       FALSE M\ 45 DTST
3368
       EXIT
3369
   THEN
3370
DUP C@    0C3 XOR
3371
OP1 @ C@  B9 - FE AND  OR   \ MOV     EDX , # 1000 MOV     ECX , # 1000
3372
OP0 @ W@ 1189 XOR      OR   \ MOV     [ECX] , EDX
3373
0= IF  M\ 54 DTST
3374
       OP1 @ C@ BA =
3375
       IF   01C7     \ MOV     [ECX] , # 1000
3376
       ELSE 1589     \ MOV     1000  , [EDX]
3377
       THEN
3378
       OP1 1 OPresize
3379
        OP1 @ W!
3380
       OP0 OPexcise
3381
       FALSE  M\ 55 DTST
3382
       EXIT
3383
   THEN
3384
 
3385
  DUP C@    C3 XOR
3386
OP1 @ C@    B9 XOR OR  \ MOV     ECX , # 1000
3387
OP0 @ W@  4D89 XOR OR \	MOV    X [EBP] , ECX
3388
0= IF  M\ 58 DTST
3389
        OP1 @ 1+ @
3390
        OP1 OPexcise
3391
        45C7 OP0 @ W! ,   \ MOV     FC [EBP] , # 1000
3392
        FALSE  M\ 59 DTST
3393
        EXIT
3394
   THEN
3395
 
3396
DUP C@    0C3 XOR
3397
OP1 @ @ FFFFFF AND 8D0C8D XOR OR \ LEA     ECX , 5898B8  ( rson+5  ) [ECX*4]
3398
OP0 @ W@  01C7 XOR    OR   \ MOV     [ECX] , # 1000
3399
0= IF  M\ 56 DTST
3400
             04C7 OP1 @ W!   \ MOV  X [ECX*4] , # 1000
3401
             OP0 @ 2+ @
3402
             OP0 OPexcise ,
3403
             FALSE  M\ 57 DTST
3404
             EXIT
3405
       EXIT
3406
   THEN
3407
DUP C@    0C3 XOR
3408
OP1 @ W@ C18B XOR OR \   MOV     EAX , ECX
3409
OP0 @ @ FFFFFF AND 85048D XOR OR \   LEA     EAX , X [EAX*4]
3410
0= IF  M\ 5A DTST
3411
             OP1 OPexcise
3412
             8D OP0 @ 2+ C! \   LEA     EAX , X [ECX*4]
3413
             FALSE  M\ 5B DTST
3414
             EXIT
3415
       EXIT
3416
   THEN
3417
 
3418
 OP2 @ 2+ C@
3419
 OP0 @ 2+ C@    XOR
3420
OP2 @ W@ 4589 XOR OR \     MOV     F8 [EBP] , EAX
3421
OP1 @ @ FFFFFF AND 8D048D XOR \   LEA     EAX , X [ECX*4]
3422
OP1 @ C@ B8  <> AND  OR \ B801000000  MOV     EAX , # 1
3423
OP0 @ W@ 558B XOR OR \     MOV     EDX , F8 [EBP]
3424
0= IF  M\ 5C DTST
3425
             OP1 2 OPinsert
3426
             D08B  OP2 @ W! \  MOV     EDX , EAX
3427
             OP0 OPexcise
3428
             FALSE  M\ 5D DTST
3429
             EXIT
3430
       EXIT
3431
   THEN
3432
 
3433
OP0 @ 2+ C@
3434
OP2 @ 2+ C@  XOR
3435
OP2 @ W@ 4589 XOR OR \   MOV     F8 [EBP] , EAX
3436
OP1 @ @ FFFFFF AND 24448B XOR OR \   MOV     EAX , 18 [ESP]
3437
OP0 @ W@ 558B XOR OR \    MOV     EDX , F8 [EBP]
3438
0=  IF   M\ 9C DTST
3439
            OP1 2 OPinsert
3440
            D08B  OP2 @ W! \  MOV     EDX , EAX
3441
            OP0   OPexcise
3442
            FALSE M\ 9D DTST
3443
            EXIT
3444
    THEN
3445
 
3446
DUP C@   0C3 XOR
3447
OP2 @ @ D9F7CA8B XOR OR \    MOV     ECX , EDX    NEG     ECX
3448
OP0 @ 1- @ 01048DD9 XOR OR \    LEA     EAX , [ECX] [EAX]
3449
0= IF  M\ 66 DTST
3450
       OP2 OPexcise
3451
       02048DDA OP1 @ 1+ !         \  NEG     EDX lea EAX, [EAX+EDX]
3452
       FALSE  M\ 67 DTST
3453
       EXIT
3454
   THEN
3455
 
3456
OP2 @  @ 45C7D08B XOR \        MOV     EDX , EAX    MOV     F8 [EBP] , # X
3457
OP0 @ C@ BA XOR OR \   MOV     EDX , # 0
3458
0= IF  M\ 6A DTST
3459
       OP2 OPexcise
3460
       FALSE  M\ 6B DTST
3461
       EXIT
3462
   THEN
3463
 
3464
  DUP C@  0C3 XOR
3465
OP2 @ C@   BA XOR OR \   MOV     EDX , # 4
3466
OP1 @ W@ 5501 XOR OR \   ADD     0 [EBP] , EDX
3467
OP0 @ W@ 4513 XOR OR \   ADC     EAX , FC [EBP]
3468
0= IF  M\ 82 DTST
3469
       OP0 4 OPresize  4 OP0 +!
3470
       OP2 @  1+ @   OP2 OPexcise
3471
       OP1 @ 3 + !  4581 OP1 @ W! \ ADD     0 [EBP] , # 4
3472
       FALSE  M\ 83 DTST
3473
       EXIT
3474
   THEN
3475
 
3476
 OP2 @ 3 + C@
3477
 OP0 @ 3 + C@    XOR
3478
OP2 @ @ FFFFFF AND 24448B XOR OR \  MOV     EAX , 30 [ESP]
3479
OP0 @ @ FFFFFF AND 244489 XOR OR \  MOV     30 [ESP] , EAX
3480
0= IF    OP1 @ @ 8901408D = \  8D4001         LEA     EAX , 1 [EAX]
3481
     IF  M\ 88 DTST
3482
         OP1 OPexcise
3483
         FF  OP0 @  C!
3484
         FALSE  M\ 89 DTST
3485
         EXIT
3486
     THEN
3487
    OP1 @ @ 89FF408D = \  8D4001         LEA     EAX , -1 [EAX]
3488
     IF  M\ 94 DTST
3489
         OP1 OPexcise
3490
         4CFF  OP0 @  W!
3491
         FALSE  M\ 95 DTST
3492
         EXIT
3493
     THEN
3494
   THEN
3495
 
3496
  DUP C@   C3 XOR
3497
OP2 @ W@ 408D XOR OR \  LEA     EAX , 1 [EAX]
3498
OP1 @ @ FFFFFF AND 244403 XOR OR \  ADD     EAX , 8 [ESP]
3499
OP0 @ @ FFFFFF AND B60F XOR OR \     MOVZX   EAX , BYTE PTR [EAX]
3500
0= IF  M\ 9E DTST
3501
       OP2 @ 2+ C@   OP2 OPexcise
3502
       548B OP1 @ W!              \  MOV     EDX , 8 [ESP]
3503
       -3 ALLOT
3504
       0244B60F , C,         \   MOVZX   EAX , BYTE PTR 2 [EDX] [EAX]
3505
       FALSE  M\ 9F DTST
3506
       EXIT
3507
   THEN
3508
 
3509
OP2 @ 2+ C@
3510
OP0 @ 2+ C@   XOR
3511
OP2 @ W@ 5589 XOR OR     \ 8955F8            MOV     F8 [EBP] , EDX
3512
 
3513
OP1 @ W@ D8F7 XOR        \ F7D8              NEG     EAX
3514
OP1 @ W@ D0F7 <> AND    \ F7D0              NOT     EAX
3515
OP1 @ C@ 58   <> AND    \  58          POP     EAX
3516
OP1 @ W@ C123 <> AND OR \  23C1           AND     EAX , ECX
3517
 
3518
OP0 @ W@ ADD|XOR|OR|AND= 0=
3519
OP0 @ W@ 458B  <> AND OR
3520
\ OP0 @ W@ 4503 XOR OR \ 0345F8            ADD     EAX , F8 [EBP]
3521
0=  IF  M\ 1B6 DTST
3522
       C2 OP0 @ 1+ C!  \  ADD     EAX , EDX
3523
       -1 ALLOT
3524
       FALSE  M\ 1B7 DTST
3525
       EXIT
3526
   THEN
3527
 
3528
DUP   C@   C3 XOR
3529
OP2 @ W@ 4D8B XOR OR \  8B4D00            MOV     ECX , 0 [EBP]
3530
OP1 @ @ 4D89C82B XOR OR \  2BC8           SUB     ECX , EAX
3531
                        \  894D00        MOV     0 [EBP] , ECX
3532
0= IF  M\ B6 DTST
3533
 
3534
       4529 OP2 @ W!  \  SUB     0 [EBP] , EAX
3535
       OP2 ToOP0
3536
       -5 ALLOT
3537
       FALSE  M\ B7 DTST
3538
       EXIT
3539
   THEN
3540
 
3541
OP2 @ 2+ C@
3542
OP0 @ 2+ C@   XOR
3543
OP2 @ W@ 458B XOR OR \ 58266F 8B4500            MOV     EAX , 0 [EBP]
3544
OP1 @ W@ 558B XOR OR \ 582672 8B5504            MOV     EDX , 4 [EBP]
3545
OP0 @ W@ 4589 XOR OR \ 582675 894500            MOV     0 [EBP] , EAX
3546
0= IF  M\ D2 DTST
3547
       OP0 OPexcise
3548
       FALSE  M\ D3 DTST
3549
       EXIT
3550
   THEN
3551
 
3552
 
3553
OP2 @ W@ 458B XOR    \  8B4500            MOV     EAX , 0 [EBP]
3554
OP1 @ W@ 5589 XOR OR \  895500            MOV     0 [EBP] , EDX
3555
OP0 @ W@ C88B XOR OR \  8BC8              MOV     ECX , EAX
3556
0= IF  M\ F4 DTST
3557
       4D8B   OP2 @ W!      \     MOV     ECX , 0 [EBP]
3558
       C18B   OP0 @ W!      \     MOV     EAX , ECX
3559
       FALSE M\ F5 DTST
3560
       EXIT
3561
   THEN
3562
 
3563
OP2 @ C@ B8 XOR      \  B801000000  MOV     EAX , # 1
3564
OP2 @ 1+ @ SHORT? 0= OR
3565
OP1 @ W@ 558B XOR OR \  8B5500      MOV     EDX , 0 [EBP]
3566
OP0 @ W@ 48D XOR OR  \  8D0402      LEA     EAX , [EDX] [EAX]
3567
0= IF  M\ FC DTST
3568
       OP2 @ 1+ @
3569
       OP2 OPexcise
3570
       428D  OP0 @ W!        \  LEA     EAX , 1 [EDX]
3571
       OP0 @ 2+ C!
3572
       FALSE  M\ FD DTST
3573
       EXIT
3574
   THEN
3575
 
3576
OP2 @ W@ 558B XOR    \ 5876BB 8B5500            MOV     EDX , 0 [EBP]
3577
OP1 @ W@ 428D XOR OR \ 5876BE 8D4201            LEA     EAX , 1 [EDX]
3578
OP0 @ W@ 4589 XOR OR \ 5876C1 894500            MOV     0 [EBP] , EAX
3579
0= IF  M\ FC DTST
3580
       OP1 @ 2+ C@
3581
       OP1 OPexcise
3582
       4583   OP0 @ W!    C,    \  ADD     EAX , 1 [EDX]
3583
       FALSE  M\ FD DTST
3584
       EXIT
3585
   THEN
3586
 
3587
OP2 @ 2+ C@
3588
OP0 @ 2+ C@   XOR
3589
OP2 @ W@ 4589 XOR OR     \  8945EC            MOV     EC [EBP] , EAX
3590
 
3591
OP1 ?EDX_[EBP]  OR
3592
 
3593
OP0 @ W@ 558B XOR OR     \  8B55EC            MOV     EDX , EC [EBP]
3594
0= IF  M\ 104 DTST
3595
       OP0 OPexcise
3596
       OP0 02 OPinsert
3597
       D08B   OP1 @ W!      \ MOV     EDX , EAX
3598
       FALSE  M\ 105 DTST
3599
       EXIT
3600
   THEN
3601
 
3602
OP2 @ W@ D08B XOR  \ 5A5408 8BD0              MOV     EDX , EAX
3603
 
3604
OP1 @ @ FFFFFF AND 95048D XOR  \  8D0495D8825900    LEA     EAX , 5982D8 [EDX*4]
3605
OP1 @ @ FFFFFF AND 95048B <> AND OR \  8B0495D8825900    MOV     EAX , 5982D8 [EDX*4]
3606
 
3607
OP0 @ W@ 558B XOR OR \ 5A5411 8B55F8            MOV     EDX , F8 [EBP]
3608
0= IF  M\ 138 DTST
3609
       OP2 OPexcise
3610
       85  OP1 @ 2+ C!      \ LEA     EAX , 5982D8 [EAX*4]
3611
       FALSE  M\ 139 DTST
3612
       EXIT
3613
   THEN
3614
 
3615
DUP C@ C3 XOR
3616
OP2 @ @ E1C1CA8B XOR OR \  8BCA           MOV     ECX , EDX
3617
                        \  C1E107         SHL     ECX , 7
3618
OP0 @ W@ C10B XOR OR    \  0BC1           OR      EAX , ECX
3619
0= IF  M\ 108 DTST
3620
       OP2 OPexcise
3621
       E2C1   OP1 @ W!      \ SHL     EDX , 7
3622
       C20B   OP0 @ W!      \ OR      EAX , EDX
3623
       FALSE  M\ 109 DTST
3624
       EXIT
3625
   THEN
3626
 
3627
OP2 @ @ 878DD08B XOR \  8BD0           MOV     EDX , EAX
3628
                     \  8D873C100000      LEA     EAX , 103C [EDI]
3629
OP0 @ W@ 1088 XOR OR \  8810              MOV     [EAX] , DL
3630
0= IF  M\ 110 DTST
3631
       OP1 @ 2+ @
3632
       9788    OP1 @ W!      \ MOV     103C [EDI] , DL
3633
       878D   OP0 @ W!      \ LEA     EAX , 103C [EDI]
3634
       ,
3635
       FALSE  M\ 111 DTST
3636
       EXIT
3637
   THEN
3638
 
3639
DUP C@ C3 XOR
3640
OP2 @ @ 5589D98B XOR OR \ 58809A 8BD9           MOV     EBX , ECX
3641
                        \ 58809C 8955EC            MOV     EC [EBP] , EDX
3642
OP0 @ W@ C323 XOR OR    \ 58809F 23C3              AND     EAX , EBX
3643
0= IF  M\ 116 DTST
3644
       OP2 OPexcise
3645
       C123     OP0 @ W!      \ AND     EAX , ECX
3646
       FALSE  M\ 117 DTST
3647
       EXIT
3648
   THEN
3649
 
3650
 
3651
DUP C@ C3 XOR
3652
OP2 @ W@ 4D8B XOR OR    \ 8B4DF0            MOV     ECX , F0 [EBP]
3653
OP1 @ @ 23F05589 XOR OR \ 8955F0         MOV     F0 [EBP] , EDX
3654
                        \ 23C1              AND     EAX , ECX
3655
0= IF  M\ 11E DTST
3656
       OP0 OPexcise
3657
        4523  OP1 @ W!      \    AND     EAX , F0 [EBP]
3658
       FALSE  M\ 11D DTST
3659
       EXIT
3660
   THEN
3661
 
3662
DUP C@ C3 XOR
3663
OP2 @ W@ 558B XOR OR \ 5881D2 8B55EC            MOV     EDX , EC [EBP]
3664
OP1 @ @ BF04523 XOR OR \ 5881D5 2345F0          AND     EAX , F0 [EBP]
3665
OP0 @ W@ C20B XOR OR \ 5881D8 0BC2              OR      EAX , EDX
3666
0= IF  M\ 120 DTST
3667
       OP2 @ 2+ C@
3668
       OP2 OPexcise
3669
        450B   OP0 @ W!      \    OR     EAX , EC [EBP]
3670
         C,
3671
       FALSE  M\ 11D DTST
3672
       EXIT
3673
   THEN
3674
 
3675
OP2 @ 2+ C@
3676
OP1 @ 2+ C@   XOR
3677
OP2 @ W@ 5589 XOR OR \  8955F0            MOV     F0 [EBP] , EDX
3678
OP1 @ W@ 4523 XOR OR \  2345F0            AND     EAX , F0 [EBP]
3679
0= IF  M\ 126 DTST
3680
       OP1 OPexcise
3681
       OP0 2 OPinsert
3682
        C223   OP1 @ W!      \    AND     EAX , EDX
3683
       FALSE  M\ 127 DTST
3684
       EXIT
3685
   THEN
3686
 
3687
OP2 @ 2+ C@
3688
OP1 @ 2+ C@   XOR
3689
OP2 @ W@ 4D89 XOR OR \  894DFC            MOV     FC [EBP] , ECX
3690
OP1 @ W@ 4523 XOR OR \  2345FC            AND     EAX , FC [EBP]
3691
0= IF  M\ 13E DTST
3692
       OP1 OPexcise
3693
       OP0 2 OPinsert
3694
        C123   OP1 @ W!      \    AND     EAX , ECX
3695
       FALSE  M\ 13F DTST
3696
       EXIT
3697
   THEN
3698
 
3699
 
3700
DUP C@ C3 XOR
3701
OP2 @ 2+ C@ C>S OFF-EBP U< 0= OR
3702
OP2 @ W@ 558B XOR OR    \ 58838C 8955F8            MOV    EDX , F4 [EBP]
3703
OP1 @ @ C20BC123 XOR OR \ 58838F 23C1           AND     EAX , ECX
3704
                        \ 588391 0BC2              OR      EAX , EDX
3705
0= IF  M\ 12C DTST
3706
       OP2 @ 2+ C@
3707
       OP2 OPexcise
3708
        450B   OP0 @ W!      \    OR     EAX ,  F8 [EBP]
3709
       C,
3710
       FALSE  M\ 12D DTST
3711
       EXIT
3712
   THEN
3713
 
3714
DUP C@ C3 XOR
3715
OP2 @ @ C123CA8B XOR OR \  8BCA           MOV     ECX , EDX
3716
                        \  23C1              AND     EAX , ECX
3717
OP0 @ W@ 450B XOR OR    \  0B45F4            OR      EAX , F4 [EBP]
3718
0= IF  M\ 1F2 DTST
3719
       OP2 OPexcise
3720
       C223    OP1 @ W!     \ AND     EAX , EDX
3721
       FALSE  M\ 1F3 DTST
3722
       EXIT
3723
   THEN
3724
 
3725
DUP C@ C3 XOR
3726
OP2 @ W@ 4D8B XOR OR \ 5884C1 8B4DF8            MOV     ECX , F8 [EBP]
3727
OP1 @ @ C10BCA23 XOR OR \ 5884C4 23CA           AND     ECX , EDX
3728
OP0 @ W@ C10B XOR OR \ 5884C6 0BC1              OR      EAX , ECX
3729
0= IF  M\ 1F4 DTST
3730
       OP1 OPexcise
3731
       5523  OP1 @ W!     \ AND     EDX , F8 [EBP]
3732
       C20B  OP0 @ W!      \    OR      EAX , EDX
3733
       FALSE  M\ 1F5 DTST
3734
       EXIT
3735
   THEN
3736
 
3737
DUP C@ C3 XOR
3738
OP2 @ W@ 558B XOR OR \ 587860 8B5500            MOV     EDX , 0 [EBP]
3739
OP1 @ W@ 528D XOR OR \ 587863 8D5201            LEA     EDX , 1 [EDX]
3740
OP0 @ W@ 5589 XOR OR \ 587866 895500            MOV     0 [EBP] , EDX
3741
0= IF  M\ 144 DTST
3742
       OP1 @ 2+ C@
3743
         OP2 OPexcise
3744
         OP1 OPexcise
3745
       4583  OP0 @ W!      \ ADD     0 [EBP] , # 1
3746
         C,
3747
       FALSE  M\ 145 DTST
3748
       EXIT
3749
   THEN
3750
 
3751
DUP C@ C3 XOR
3752
\ OP2 @ W@ 5589 XOR OR       \ 8B5500         EDX , MOV     0 [EBP]
3753
OP2 @ W@ 558B XOR OR       \ 8B5500         EDX , MOV     0 [EBP]
3754
 OP1 @ W@ E0D3 XOR OR        \ D3E0           SHL     EAX , CL
3755
\ OP1 ?EDX_[EBP]  OR         \ D3E0           SHL     EAX , CL
3756
OP0 @ W@ C20B XOR OR  \ 0BC2           OR      EAX , EDX
3757
0= IF  M\ 14A DTST
3758
       OP2 @ 2+ C@
3759
       OP2 OPexcise
3760
       45 OP0 @ 1+  C!      \ OR      EAX , 0 [EBP]
3761
       C,
3762
       FALSE  M\ 14B DTST
3763
       EXIT
3764
   THEN
3765
 
3766
OP2 @ 2+ C@
3767
OP0 @ 2+ C@    XOR
3768
OP2 @ W@ 4589 XOR OR \ 8945FC            MOV     FC [EBP] , EAX
3769
OP1 @ W@ 458B XOR OR \ 8B4500            MOV     EAX , 0 [EBP]
3770
OP0 @ W@ 558B XOR OR \ 8B55FC            MOV     EDX , FC [EBP]
3771
0= IF  M\ 162 DTST
3772
	OP1 ToOP0 -3 ALLOT
3773
	OP0 2 OPinsert
3774
	D08B OP1 @ W!
3775
       FALSE  M\ 163 DTST
3776
       EXIT
3777
   THEN
3778
 
3779
DUP C@ C3 XOR
3780
OP2 @ W@ 4D8B XOR OR \ 582055 8B4D04            MOV     ECX , 4 [EBP]
3781
OP1 @ W@ 5589 XOR OR \ 582058 895504            MOV     4 [EBP] , EDX
3782
OP0 @ @ FFFFFF AND 1048D XOR OR \ 58205B 8D0401         LEA     EAX , [ECX] [EAX]
3783
0= IF  M\ 168 DTST
3784
	4503 OP2 @ W! \ ADD     EAX , 4 [EBP]
3785
       OP0 OPexcise
3786
       FALSE  M\ 169 DTST
3787
       EXIT
3788
   THEN
3789
 
3790
DUP C@ C3 XOR
3791
OP2 @ W@ 558B XOR OR \ 582202 8B5500            MOV     EDX , 0 [EBP]
3792
OP1 @ W@ 4503 XOR OR \ 582205 034504            ADD     EAX , 4 [EBP]
3793
OP0 @ W@ C22B XOR OR \ 582208 2BC2              SUB     EAX , EDX
3794
0= IF  M\ 170 DTST
3795
	OP2 @ 2+ C@
3796
       OP2 OPexcise
3797
	452B OP0 @ W! C, \  SUB     EAX , 0 [EBP]
3798
       FALSE  M\ 171 DTST
3799
       EXIT
3800
   THEN
3801
 
3802
 DUP C@ C3 XOR
3803
 OP2 @ 2+ C@
3804
 OP1 @ 2+ C@  = OR
3805
OP2 @ W@ 558B XOR OR \ 8B5500            MOV     EDX , 0 [EBP]
3806
OP1 @ W@ 4589 XOR OR \ 8945FC            MOV     FC [EBP] , EAX
3807
OP0 @ @ FFFFFF AND 2048D XOR OR \ 8D0402         LEA     EAX , [EDX] [EAX]
3808
0= IF  M\ 158 DTST
3809
	OP2 @ 2+ C@
3810
       OP2 OPexcise
3811
	4503 OP0 @ W!     \          ADD     EAX , 0 [EBP]
3812
	OP0 @ 2+  C!
3813
       FALSE  M\ 159 DTST
3814
       EXIT
3815
   THEN
3816
 
3817
DUP C@ C3 XOR
3818
OP2 @ 2+ C@
3819
OP0 @ 2+ C@  XOR OR
3820
OP2 @ 2+ C@
3821
OP1 @ 2+ C@  = OR
3822
OP2 @ W@ 4589 XOR OR \ 571DD0 8945FC            MOV     FC [EBP] , EAX
3823
OP1 @ W@ 4503 XOR OR \ 571DD3 034500            ADD     EAX , 0 [EBP]
3824
OP0 @ W@ 6DF7 XOR OR \ 571DD6 F76DFC            IMUL    FC [EBP]
3825
0= IF  M\ 160 DTST
3826
       OP2 OPexcise
3827
	OP1 2 OPinsert
3828
        C88B OP2 @ W!	\	MOV     ECX , EAX
3829
        E9F7 OP0 @ W!	\	IMUL ECX
3830
       FALSE -1 ALLOT M\ 161 DTST
3831
       EXIT
3832
   THEN
3833
DUP C@ C3 XOR
3834
OP2 @ 2+ C@
3835
OP0 @ 2+ C@  XOR OR
3836
 
3837
OP2 @ W@ 4589 XOR OR \  894500            MOV     0 [EBP] , EAX
3838
OP1 @ W@ AF0F XOR OR \  0FAFC2            IMUL    EAX , EDX
3839
OP0 @ W@ 4503 XOR OR \  034500            ADD     EAX , 0 [EBP]
3840
 
3841
0= IF  M\ 248 DTST
3842
       OP2 OPexcise
3843
	OP1 2 OPinsert
3844
	C88B OP2 @  W! \	MOV     ECX , EAX
3845
        C103 OP0 @  W! \	ADD     EAX , ECX
3846
 
3847
       FALSE -1 ALLOT M\ 141 DTST
3848
       EXIT
3849
   THEN
3850
 
3851
OP1 @ 2+ C@
3852
OP0 @ 2+ C@  XOR
3853
OP2 @ W@ C28B XOR OR \ 571EED 8BC2              MOV     EAX , EDX
3854
OP1 @ W@ 5589 XOR OR \ 571EEF 8955FC            MOV     FC [EBP] , EDX
3855
OP0 @ W@ 6DF7 XOR OR \ 571EF2 F76DFC            IMUL    FC [EBP]
3856
0= IF  M\ 182 DTST
3857
       EAF7  OP0 @ W! \ 		IMUL    EDX
3858
       FALSE -1 ALLOT  M\ 183 DTST
3859
       EXIT
3860
   THEN
3861
 
3862
( !!!!!!!!!!
3863
DUP C@ C3 XOR
3864
OP1 @ @ EAF7C28B XOR OR	\  8BC2       MOV     EAX , EDX
3865
			 \ F7EA       IMUL    EDX
3866
0= IF  M\ 184 DTST
3867
       OP1 OPexcise
3868
       C2AF0F	OP0 @ ! \ 		IMUL    EAX , EDX
3869
       FALSE 1 ALLOT  M\ 185 DTST
3870
       EXIT
3871
   THEN
3872
)
3873
 
3874
 
3875
OP3 @ :-SET U< IF TRUE EXIT THEN
3876
M\ PPPP
3877
 
3878
OP3 @  @  D08BC28B =   \ MOV     EAX , EDX  MOV     EDX , EAX
3879
   IF   M\ 42 DTST
3880
       OP2 OPexcise
3881
       FALSE M\ 43 DTST
3882
       EXIT
3883
   THEN
3884
 
3885
    OP1 @ W@   453B   =      \ CMP   EAX , X [EBP]
3886
    IF OP0 @ @ FFFCFF AND C09C0F =  \ SETLE   AL
3887
      IF
3888
\ $  4444  <
3889
         OP2 @ C@   0B8 XOR      \ MOV EAX, # X
3890
         OP3 @ W@  4589 XOR OR   \ MOV X1 [EBP], EAX
3891
         OP3 @ 2+ C@
3892
         OP1 @ 2+ C@    XOR OR 0=
3893
         IF  M\ 2C DTST
3894
             3D OP3 @ C!
3895
             OP2 @ 1+ @ OP3 @ 1+ !
3896
             2 OP2 +!
3897
             OP0 @ @ 300 XOR  OP2 @ !     \  SETGE   AL
3898
             OP2 ToOP0
3899
             FALSE -6 ALLOT M\ 2D DTST
3900
             EXIT
3901
         THEN
3902
\ $  4444 @ <
3903
         OP2 @ C@   0A1 XOR      \ MOV EAX, # X
3904
         OP3 @ 2+ C@
3905
         OP1 @ 2+ C@    XOR OR 0=
3906
         IF
3907
         OP3 @ W@  4589 =   \ MOV X1 [EBP], EAX
3908
           IF M\ 2E DTST
3909
              053B OP3 @ W!
3910
              OP2 @ 1+ @ OP3 @ 2+ !
3911
              3 OP2 +!
3912
              OP0 @ @ 300 XOR  OP2 @ !     \  SETGE   AL
3913
              OP2 ToOP0
3914
              FALSE -5 ALLOT M\ 2F DTST
3915
              EXIT
3916
            THEN
3917
 
3918
         OP3 @ W@  45C7 =   \
3919
           IF M\ 12E DTST
3920
              3D81 OP3 @ W!
3921
              OP3 @ 3 + @
3922
              OP2 @ 1+ @ OP3 @ 2+ !  OP3 @ 6 + !
3923
              3 OP2 +!
3924
              OP0 @ @   OP2 @ !
3925
              OP2 ToOP0
3926
              FALSE -5 ALLOT M\ 12F DTST
3927
              EXIT
3928
            THEN
3929
 
3930
         THEN
3931
       THEN
3932
    THEN
3933
    DUP      @ 458B1089 XOR       \ MOV  [EAX], EDX   MOV EAX , X [EBP]
3934
    OVER 5 + @ C3086D8D XOR OR    \ LEA  EBP, 8 [EBP]   RET
3935
    OP0  @  W@     D18B XOR OR 0= \ MOV  EDX , ECX
3936
    IF   M\ 51E DTST
3937
         0889 OP0 @ W!    \ MOV     [EAX] , ECX
3938
         2+ FALSE  M\ 51F DTST
3939
        EXIT
3940
    THEN
3941
M\ PPPP
3942
 
3943
OP3 @ W@ 4589 XOR  \ 8945FC		MOV     FC [EBP] , EAX
3944
OP2 @ C@ B8 XOR OR \ B8189D5700	MOV     EAX , # 579D18
3945
OP1 @ W@ 558B XOR OR \  8B55FC		MOV     EDX , FC [EBP]
3946
OP0 @ @ FFFFFF AND 90048D XOR OR \ 8D0490	LEA     EAX , [EAX] [EDX*4]
3947
    OP3 @ 2+ C@ OP1 @ 2+ C@ XOR OR  \  X0=X2
3948
0= IF   M\ 840 DTST
3949
       OP2 @ 1+  @   85048D OP2 @ !
3950
       OP2 @ 3 + !
3951
       OP2 ToOP0
3952
       FALSE  -4 ALLOT M\ 841 DTST
3953
       EXIT
3954
   THEN
3955
 
3956
OP3 @ W@ 558B XOR    \	MOV     EDX , FC [EBP]
3957
OP2 @ W@ 4589 XOR OR \	MOV     FC [EBP] , EAX
3958
OP1 @ W@ C28B XOR OR \  MOV     EAX , EDX
3959
OP0 @ W@ 558B XOR OR \ 	MOV     EDX , FC [EBP]
3960
OP3 @ 2+ C@  OP2 @ 2+ C@ XOR OR
3961
OP2 @ 2+ C@  OP0 @ 2+ C@ XOR OR
3962
0= IF   M\ F30 DTST
3963
       OP3 OPexcise
3964
       OP2 OPexcise
3965
       D08B  OP1 @ W! \ MOV     EDX , EAX
3966
       458B  OP0 @ W! \ MOV     EAX , FC [EBP]
3967
       DO_EAX>ECX DROP
3968
       SetOP 89 C, 55 C,  OP0 @ 2+ C@ C, \  MOV     FC [EBP] , EDX
3969
       FALSE   M\ F31 DTST
3970
       EXIT
3971
   THEN
3972
OP3 @ 2+ C@
3973
OP0 @ 2+ C@ XOR
3974
OP3 @ W@ 4589 XOR OR \ 57BF16 8945FC            MOV     FC [EBP] , EAX
3975
OP2 @ W@ C033 XOR OR \ 57BF19 33C0              XOR     EAX , EAX
3976
OP1 @ W@ 4581 XOR OR \ 57BF1B 814500BA040000    ADD     0 [EBP] , # 4BA
3977
OP0 @ W@ 4513 XOR OR \ 57BF22 1345FC            ADC     EAX , FC [EBP]
3978
0= IF   M\ 84 DTST
3979
       OP2 OPexcise
3980
       D083  OP0 @ ! \ ADC     EAX , # 0
3981
       FALSE   M\ 85 DTST
3982
       EXIT
3983
   THEN
3984
 
3985
OP3 @ 2+ C@
3986
OP0 @ 2+ C@ XOR
3987
OP3 @ W@ 4589 XOR OR \ 59690C 8945F0            MOV     F0 [EBP] , EAX
3988
OP2 @ C@ B8 XOR OR \ 59690F B801000000  MOV     EAX , # 1
3989
OP1 @ C@ BA XOR OR \ 596914 BA00000080  MOV     EDX , # 80000000
3990
OP0 @ W@ 552B XOR OR \ 596919 2B55F0            SUB     EDX , F0 [EBP]
3991
0= IF   M\ A4 DTST
3992
       OP2 @ 1+ @
3993
       OP2 OPexcise
3994
       D02B  OP0 @ ! \ SUB     EDX , EAX
3995
       -1 ALLOT
3996
       SetOP  B8 C, ,
3997
       FALSE   M\ A5 DTST
3998
       EXIT
3999
   THEN
4000
 
4001
OP3 @ 2+ C@
4002
OP0 @ 2+ C@ XOR
4003
OP3 @ W@ 4589 XOR  OR  \  8945F8            MOV     F8 [EBP] , EAX
4004
OP2 ?EDX_[EBP] OR
4005
OP1 ?EDX_[EBP] OR
4006
OP0 @ W@ 558B XOR OR \  8B55F8            MOV     EDX , F8 [EBP]
4007
0= IF   M\ EC DTST
4008
       OP2 2 OPinsert
4009
       D08B  OP3 @ W! \  MOV     EDX , EAX
4010
       OP0 OPexcise
4011
       FALSE   M\ ED DTST
4012
       EXIT
4013
   THEN
4014
 
4015
OP3 @ 2+ C@
4016
OP0 @ 2+ C@ XOR
4017
OP3 @ W@ 4589 XOR OR \  8945FC            MOV     FC [EBP] , EAX
4018
OP2 @ C@ B8 XOR OR   \  B801000000        MOV     EAX , # 1
4019
OP1 @ C@ B9 XOR OR   \  B9FFFFFFFF        MOV     ECX , # FFFFFFFF
4020
OP0 @ W@ 4D03 XOR OR \  034DFC            ADD     ECX , FC [EBP]
4021
0= IF   M\ FA DTST
4022
       OP2 @ 1+ @
4023
       OP2 OPexcise
4024
       C803  OP0 @ W! \  ADD     ECX , EAX
4025
       -1 ALLOT
4026
       SetOP   B8 C, ,
4027
       FALSE   M\ FB DTST
4028
       EXIT
4029
   THEN
4030
 
4031
OP3 @ C@ A1 XOR     \ 587C37 A1D8795800  MOV     EAX , 5879D8  ( C+5  )
4032
OP2 @ W@ D08B XOR OR \ 587C3C 8BD0              MOV     EDX , EAX
4033
OP1 @ C@ A1 XOR OR \ 587C3E A1E4795800  MOV     EAX , 5879E4  ( D+5  )
4034
OP0 @ W@ 4589 XOR OR \ 587C43 8945EC            MOV     EC [EBP] , EAX
4035
0= IF   M\ 114 DTST
4036
       OP2 OPexcise
4037
       OP2 1 OPresize
4038
       158B OP2 @ W!
4039
       FALSE   M\ 115 DTST
4040
       EXIT
4041
   THEN
4042
 
4043
OP3 @ 2+ C@
4044
OP1 @ 2+ C@ XOR
4045
OP1 @ 2+ C@
4046
OP0 @ 2+ C@ XOR OR
4047
OP3 @ W@ 4589 XOR OR \  894500            MOV     0 [EBP] , EAX
4048
OP2 @ W@ 428D XOR OR \  8D4201            LEA     EAX , 1 [EDX]
4049
OP1 @ W@ 558B XOR OR \  8B5500            MOV     EDX , 0 [EBP]
4050
OP0 @ W@ 4589 XOR OR \  894500            MOV     0 [EBP] , EAX
4051
0= IF  M\ 140 DTST
4052
       OP3 OPexcise
4053
       OP2 2 OPinsert
4054
       C88B  OP3 @ W!     \ MOV     ECX , EAX
4055
       OP1 OPexcise
4056
       OP0 2 OPinsert
4057
       D18B  OP1 @ W!     \ MOV     EAX , ECX
4058
       FALSE  M\ 141 DTST
4059
       EXIT
4060
   THEN
4061
 
4062
 
4063
 
4064
OP4 @ :-SET U< IF TRUE EXIT THEN
4065
 
4066
\ $ 10 LSHIFT
4067
    OP4 @ W@ 4589     XOR      \ MOV X0 [EBP] , EAX
4068
    OP3 @ C@ B8       XOR OR   \ MOV EAX, # 10
4069
    OP2 @  @ 458BC88B XOR OR   \ MOV ECX, EAX \ !? MOV EAX, X2 [EBP]
4070
    OP0 @ W@ F7FF AND E0D3  XOR OR  \  SHL|SHR    EAX , CL
4071
    OP4 @ 2+ C@ OP1 @ 2+ C@ XOR OR  \  X0=X2
4072
    0=
4073
    IF  M\ 32 DTST
4074
        OP0 @ W@ 0012 - OP4 @ W!
4075
        OP3 @ 1+ @ OP4 @ 2+ C!
4076
        OP4 ToOP0
4077
        FALSE -C ALLOT M\ 33 DTST
4078
        EXIT
4079
    THEN
4080
 
4081
    OP1 @ @ FFFFFF AND 82448D XOR  \ LEA     EAX , 0 [EDX] [EAX*4]
4082
    OP0 @ W@ 0889             XOR OR  \ MOV     [EAX] , ECX
4083
    0=
4084
    IF  M\ 132 DTST
4085
        4C89  OP1 @ W!
4086
        OP1 ToOP0
4087
        FALSE -2 ALLOT M\ 133 DTST
4088
        EXIT
4089
    THEN
4090
 
4091
 
4092
OP4 @ 2+ C@
4093
OP3 @ 2+ C@ XOR
4094
OP3 @ 2+ C@
4095
OP0 @ 2+ C@ XOR OR
4096
OP4 @ W@ 558B XOR OR \ 8B5500      MOV     EDX , 0 [EBP]
4097
OP3 @ W@ 4589 XOR OR \  894500     MOV     0 [EBP] , EAX
4098
OP2 @ @ C203D8F7 XOR OR \  F7D8    NEG     EAX
4099
                        \  03C2    ADD     EAX , EDX
4100
OP0 @ W@ 558B XOR OR \ 8B5500      MOV     EDX , 0 [EBP]
4101
0=  IF  M\ C8 DTST
4102
        4D   OP4 @ 1+ C!         \  MOV     ECX , 0 [EBP]
4103
                                 \  MOV     0 [EBP] , EAX
4104
        D08B OP2 @    W!         \  MOV     EDX , EAX
4105
    C103D8F7 OP1 @     !         \  NEG     EAX
4106
                                 \  ADD     EAX , ECX
4107
        FALSE -1 ALLOT M\ C9 DTST
4108
        EXIT
4109
    THEN
4110
 
4111
OP4 @ W@ 5589 XOR    \  895500            MOV     0 [EBP] , EDX
4112
OP3 @ W@ 558B XOR OR \  8B55FC            MOV     EDX , FC [EBP]
4113
OP2 @ W@ 4D8B XOR OR \  8B4D00            MOV     ECX , 0 [EBP]
4114
0=  IF M\ C8 DTST
4115
       OP3 2 OPinsert
4116
       CA8B  OP4 @ W! \  MOV    ECX , EDX
4117
       OP2 OPexcise
4118
        FALSE M\ C9 DTST
4119
        EXIT
4120
    THEN
4121
 
4122
DUP C@ C3 XOR
4123
OP3 @ 2+ C@
4124
OP0 @ 2+ C@  XOR OR
4125
OP3 @ W@ 4589 XOR OR \ 571FEA 894500            MOV     0 [EBP] , EAX
4126
OP2 @ W@ C28B XOR OR \ 571FED 8BC2              MOV     EAX , EDX
4127
OP1 @ W@ EAF7 XOR OR \ 571FEF F7EA              IMUL    EDX
4128
OP0 @ W@ 4503 XOR OR \ 571FF1 034500            ADD     EAX , 0 [EBP]
4129
0=  IF M\ 1C8 DTST
4130
 
4131
       OP2 OPexcise
4132
       OP1 OPexcise
4133
 
4134
       OP0 3 OPinsert
4135
	AF0F OP1 @ W!
4136
       D2    OP1 @ 2+ C!  \     IMUL    EDX , EDX
4137
 
4138
       C203  OP0 @ W! \  ADD    EAX , EDX
4139
        FALSE
4140
 -1 ALLOT
4141
  M\ 1C9 DTST
4142
        EXIT
4143
    THEN
4144
 
4145
 
4146
OP5 @ :-SET U< IF TRUE EXIT THEN
4147
 
4148
M\ PPPP
4149
 
4150
 TRUE
4151
;
4152
 
4153
: -EVEN-EBP
4154
     OP0 @ :-SET U< IF EXIT THEN
4155
     OP0 @ W@ 06D8D =  \  LEA   ebp,  OFF-EBP [EBP]
4156
     IF  OP0 @ 2+ C@ +>OFF-EBP
4157
         OP1 ToOP0
4158
        -3 ALLOT EXIT
4159
     THEN ;
4160
 
4161
 
4162
: OPT_  ( -- )
4163
  BEGIN
4164
\   M\ -D DTST
4165
 OPT-RULES UNTIL
4166
\   M\ -F DTST
4167
  EVEN-EAX  ;
4168
 
4169
: DO_OPT   ( ADDR -- ADDR' )
4170
  OPT? IF OPT_ THEN ;
4171
 
4172
: INLINE?  ( CFA -- CFA FLAG )
4173
  DUP         BEGIN
4174
  2DUP
4175
  MM_SIZE -   U> 0= IF  DROP FALSE  EXIT THEN
4176
  DUP C@      \  CFA CFA+OFF N'
4177
  DUP   0C3    = IF 2DROP  TRUE EXIT THEN  \ RET
4178
  DUP5B?         M_WL DROP 5 + REPEAT
4179
\ 0100.X0XX
4180
  DUP   0F4
4181
  AND    40    = M_WL DROP 1+  REPEAT \ INC|DEC  E(ACDB)X
4182
 
4183
  DUP   099    = M_WL DROP 1+  REPEAT  \ CDQ
4184
\ 1110.11XX
4185
OS\ DUP FC
4186
OS\ AND EC    = M_WL DROP 1+  REPEAT  \ IN|OUT  EAX AL, DX | DX, EAX EL
4187
OS\ DUP CD    = M_WL DROP 2+  REPEAT  \ INTX
4188
  DROP
4189
  DUP W@      \  CFA CFA+OFF N'
4190
 
4191
  DUP3B?[EBP]    M_WL DROP 3 +  REPEAT
4192
  DUP3B?         M_WL DROP 3 +  REPEAT
4193
  DUP 06D8D    = M_WL DROP 3 +  REPEAT \ LEA  EBP, OFF-EBP [EBP]
4194
  DUP 0C583    = M_WL DROP 3 +  REPEAT \ ADD  EBP, # OFF-EBP
4195
  DUP 0ED83    = M_WL DROP 3 +  REPEAT \ SUB  EBP, # X
4196
  DUP2B?         M_WL DROP 2+   REPEAT
4197
  DUP 0EC87    = M_WL DROP 2+   REPEAT \ XCHG    EBP , ESP
4198
 
4199
  DUP  C58B    = M_WL DROP 2+   REPEAT \ MOV EAX,  EBP
4200
 
4201
\  DUP 0E3FF   = M_WL DROP 2+   REPEAT   \ JMP  EBX
4202
  DUP6B?         M_WL DROP 6 +  REPEAT
4203
  DUP 45C7  =   M_WL  DROP 7 +  REPEAT  \ MOV     X [EBP] , # X
4204
  DUP 05C7  =   M_WL  DROP A +  REPEAT  \ MOV     X  , # Y
4205
  DUP 0581  =   M_WL  DROP A +  REPEAT  \ ADD     X  , # Y
4206
 
4207
  DROP
4208
  DUP @
4209
  DUP 0424448B = M_WL DROP 4 + REPEAT
4210
  DUP 0424448D = M_WL DROP 4 + REPEAT
4211
  DUP 8BE08B5B =
4212
   IF OVER 3 + 2@         \ 1 TO TTTT
4213
            E3FF046D 8D00458B  D=   \ RP!
4214
           IF 2DROP TRUE EXIT THEN
4215
   THEN
4216
  FFFFFF AND
4217
  DUP   C09D0F = M_WL DROP 3 + REPEAT \ SETGE  AL
4218
  DUP   C09E0F = M_WL DROP 3 + REPEAT \ SETLE  AL
4219
  DUP   90048D = M_WL DROP 3 + REPEAT \ LEA  EAX , [EAX] [EDX*4]
4220
  DUP   02048D = M_WL DROP 3 + REPEAT \ LEA  EAX, [EDX] [EAX]
4221
  DUP   40B70F = M_WL DROP 4 + REPEAT \ MOVZX   EAX , WORD PTR FE [EAX]
4222
 
4223
 
4224
\ CMPXCHG [EAX] , AL| EAX
4225
\ LSS     EAX , [EAX]
4226
\ BTR     [EAX] , EAX
4227
\ LFS     EAX , [EAX]
4228
\ LGS     EAX , [EAX]
4229
\ MOVZX   EAX , BYTE|WORD  PTR [EAX]
4230
\ 0000.0000 1011.1XXX 0000.1111
4231
  DUP FFF8FF
4232
  AND 00B00F = M_WL DROP 3 + REPEAT \ MOVZX  EAX, WORD PTR [EAX]
4233
 
4234
  DUP 20488B = M_WL DROP 3 +  REPEAT \ MOV  ECX , [EAX+20H]
4235
  DUP 20488D = M_WL DROP 3 +  REPEAT \ LEA  ECX , [EAX+20H]
4236
 
4237
  DUP 85448B = M_WL DROP 4 + REPEAT \ MOV    EAX, X [EBP] [EAX*4]
4238
  DUP 02048D = M_WL DROP 4 + REPEAT \ LEA     EAX , [EDX] [EAX]
4239
\ XX00.0101 0000.0100 1000.1XX1
4240
  DUP7B?       WHILE DROP 7 + REPEAT
4241
 2DROP  FALSE
4242
;
4243
 
4244
: MACRO? INLINE? ;
4245
 
4246
\  МАКРОПОДСТАНОВЩИК
4247
 
4248
: +EBP DUP C@ C>S OFF-EBP + C,    1+ ;
4249
 
4250
: 1_,_STEP SetOP DROP DUP C@ C,    1+ ;
4251
 
4252
: 2_,_STEP SetOP DROP DUP W@ W,    2+ ;
4253
 
4254
: 3_,_STEP  2_,_STEP DUP C@ C,    1+ ;
4255
 
4256
: 4_,_STEP_           DUP @  , CELL+ ;
4257
 
4258
: 4_,_STEP SetOP DROP 4_,_STEP_ ;
4259
 
4260
: 5_,_STEP  1_,_STEP 4_,_STEP_ ;
4261
 
4262
: 6_,_STEP  2_,_STEP 4_,_STEP_ ;
4263
 
4264
: 7_,_STEP  3_,_STEP 4_,_STEP_ ;
4265
 
4266
: A_,_STEP  2_,_STEP 4_,_STEP_ 4_,_STEP_ ;
4267
 
4268
: 0A_,_STEP DUP DUP @ + DP @ - , CELL+ ;
4269
 
4270
: 1A_,_STEP 1_,_STEP 0A_,_STEP ;
4271
 
4272
: 2A_,_STEP 2_,_STEP 0A_,_STEP ;
4273
 
4274
: _INLINE,  (  CFA  --  )
4275
\  ." ^" DUP H.
4276
              BEGIN
4277
  DO_OPT
4278
 
4279
   DUP @      \  CFA  N'
4280
  DUP 8BE08B5B = DUP
4281
  IF DROP OVER 3 + 2@ E3FF046D 8D00458B  D=  \ RP!
4282
  THEN          M_WL DROP   SetOP
4283
                    8B C, E0 C,          \  MOV  ESP,    EAX
4284
                    DROP 'DROP
4285
                 REPEAT
4286
  FF AND      \  CFA  N'
4287
  DUP   0C3 = IF 2DROP     EXIT THEN  \ RET
4288
 
4289
  DUP5B?      M_WL  5_,_STEP  REPEAT \ ADD EAX, # X
4290
 
4291
\ 010X.XXXX
4292
  DUP E0 AND 40 = M_WL 1_,_STEP REPEAT  \ INC|DEC|PUSH|POP  E_X
4293
 
4294
\ FS: GS: D16: A16: INSB INSD OUTSB OUTSD
4295
\ 0110.X1XX
4296
  DUP   F4 AND 64 = M_WL  1_,_STEP      REPEAT
4297
 
4298
  DUP   099 = M_WL  1_,_STEP      REPEAT  \ CDQ
4299
 
4300
OS\ DUP FC
4301
OS\ AND EC = M_WL   1_,_STEP  REPEAT  \ IN|OUT  EAX AL, DX | DX, EAX EL
4302
OS\ DUP CD = M_WL   2_,_STEP  REPEAT  \ INTX
4303
 
4304
\  DUP   0BB = M_WL  5_,_STEP     REPEAT  \ MOV EBX, # X
4305
\  JO JNO JB JAE JE JNE JBE JA JS JNS JP JNP JL JGE JLE JG
4306
\ 0111.XXXX
4307
  DUP  F0 AND 70 = M_WL  2_,_STEP     REPEAT
4308
 
4309
  DUP   0E8 = M_WL 1A_,_STEP      REPEAT  \  CALL
4310
  DUP   0E9 = M_WL 1A_,_STEP      REPEAT  \  JMP
4311
  DROP
4312
  DUP W@
4313
  DUP3B?[EBP]  M_WL  2_,_STEP +EBP REPEAT
4314
  DUP3B?       M_WL  3_,_STEP      REPEAT
4315
  DUP2B?       M_WL  2_,_STEP      REPEAT
4316
  DUP 0C48B =  M_WL  2_,_STEP   REPEAT  \ MOV EAX , ESP
4317
  DUP  C58B =  M_WL EVEN-EBP 2_,_STEP   REPEAT \ MOV EAX,  EBP
4318
  DUP 0EC87 =  M_WL EVEN-EBP 2_,_STEP   REPEAT \ XCHG    EBP , ESP
4319
 
4320
  DUP 06D8D = M_WL DROP DUP 2 + C@ +>OFF-EBP
4321
                     3 + REPEAT  \ LEA  EBP, OFF-EBP [EBP]
4322
 
4323
  DUP 0C583 = M_WL DROP DUP 2 + C@ +>OFF-EBP
4324
                     3 + REPEAT  \ ADD  EBP, # OFF-EBP
4325
 
4326
  DUP 0ED83 = M_WL DROP DUP 2 + C@ C>S NEGATE +>OFF-EBP
4327
                     3 + REPEAT  \ SUB  EBP, # OFF-EBP
4328
 
4329
  DUP 0C483 = M_WL  3_,_STEP     REPEAT  \ ADD  ESP, # X
4330
  DUP6B?      M_WL  6_,_STEP      REPEAT  \ MOV  EAX,  # X
4331
  DUP 0E3FF = M_WL EVEN-EBP 2_,_STEP REPEAT  \ JMP  EBX
4332
\  DUP 0D3FF = M_WL EVEN-EBP 2_,_STEP REPEAT  \ CALL EBX
4333
 
4334
\ DUP 0E2FF = M_WL EVEN-EBP 2_,_STEP REPEAT  \ JMP  EDX
4335
  DUP 0D2FF = M_WL EVEN-EBP 2_,_STEP REPEAT  \ CALL EDX
4336
  DUP 810F  = M_WL 2A_,_STEP      REPEAT  \ JO [ESP]
4337
  DUP 45C7  = M_WL 2_,_STEP +EBP 4_,_STEP_  REPEAT  \ MOV     X [EBP] , # X
4338
  DUP 05C7  = M_WL A_,_STEP  REPEAT  \ MOV     X  , # Y
4339
  DUP 0581  = M_WL A_,_STEP  REPEAT  \ ADD     X  , # Y
4340
 
4341
  DROP
4342
  DUP @
4343
  DUP 0424448B = M_WL DROP   SetOP       \  MOV  EAX, 4 [ESP]
4344
                    8B C, 04 C, 24 C,    \  MOV  EAX,   [ESP]
4345
                    4 +
4346
                 REPEAT
4347
 
4348
  DUP 0424448D = M_WL DROP   SetOP       \  LEA  EAX, 4 [ESP]
4349
                    8B C, C4 C,          \  MOV  EAX,    ESP
4350
                    4 +
4351
                 REPEAT
4352
 
4353
  FFFFFF AND
4354
 
4355
  DUP C09D0F = M_WL 3_,_STEP      REPEAT \ SETGE  AL
4356
  DUP C09E0F = M_WL 3_,_STEP      REPEAT \ SETLE  AL
4357
  DUP 90048D = M_WL 3_,_STEP      REPEAT \ LEA  EAX , [EAX] [EDX*4]
4358
  DUP 02048D = M_WL 3_,_STEP      REPEAT \ LEA  EAX, [EDX] [EAX]
4359
  DUP 40B70F = M_WL 4_,_STEP      REPEAT \ MOVZX   EAX , WORD PTR FE [EAX]
4360
 
4361
  DUP 240401 = M_WL 3_,_STEP      REPEAT \ ADD [ESP] , EAX
4362
 
4363
\ CMPXCHG [EAX] , AL| EAX
4364
\ LSS     EAX , [EAX]
4365
\ BTR     [EAX] , EAX
4366
\ LFS     EAX , [EAX]
4367
\ LGS     EAX , [EAX]
4368
\ MOVZX   EAX , BYTE|WORD  PTR [EAX]
4369
\ 0000.0000 1011.1XXX 0000.1111
4370
  DUP FFF8FF
4371
  AND 00B00F = M_WL 3_,_STEP      REPEAT
4372
  DUP 244403 = M_WL 4_,_STEP      REPEAT \ ADD  EAX, X [ESP]
4373
  DUP 24442B = M_WL 4_,_STEP      REPEAT \ SUB  EAX, X [ESP]
4374
  DUP 24448B = M_WL 4_,_STEP      REPEAT \ MOV  EAX, X [ESP]
4375
  DUP 85448B = M_WL 3_,_STEP +EBP REPEAT \ MOV  EAX, X [EBP] [EAX*4]
4376
  DUP 24048B = M_WL 3_,_STEP      REPEAT \ MOV  EAX, 0 [ESP]
4377
  DUP 20488B = M_WL 3_,_STEP      REPEAT \ MOV  ECX , [EAX+20H]
4378
  DUP 20488D = M_WL 3_,_STEP      REPEAT \ LEA  ECX , [EAX+20H]
4379
  DUP 021C8D = M_WL 3_,_STEP      REPEAT \ LEA  EBX, [EDX] [EAX]
4380
  DUP 85048D = M_WL 7_,_STEP      REPEAT \ LEA  EAX, X [EAX*4]
4381
  DUP 2404FF = M_WL 3_,_STEP      REPEAT \ INC [ESP]
4382
  DUP 18B60F = M_WL 3_,_STEP      REPEAT \ MOVZX EBX, BYTE PTR [EAX]
4383
 
4384
  DUP7B?      WHILE 7_,_STEP      REPEAT
4385
  HEX U. ." @COD, ERROR" ABORT
4386
;
4387
 
4388
 
4389
: XC_J
4390
    J_COD FE AND 4 = IF EXIT THEN
4391
    J_COD DUP 0x8 AND
4392
    IF  3
4393
    ELSE 5
4394
    THEN  XOR TO J_COD ;
4395
 
4396
[DEFINED] [TTO]
4397
[IF]
4398
PREVIOUS PREVIOUS SET-CURRENT
4399
[THEN]
4400
 
4401
: OPT_CLOSE
4402
   EVEN-EBP DP @ TO LAST-HERE ;
4403
 
4404
:  OPT_INIT   ?SET -EVEN-EBP  ;
4405
 
4406
: INLINE, ( CFA --  )   OPT_INIT  _INLINE, OPT_CLOSE ;
4407
 
4408
: MACRO, INLINE, ;
4409
 
4410
 
4411
:  ?BR-OPT-RULES ( cfa -- cfa' flag )
4412
\ ZZZZ IF ." z=" OP1 @ @ U. THEN
4413
   OP0 @ :-SET U< IF TRUE EXIT THEN
4414
   M\ -3 DTST
4415
 
4416
   OP0 @ C@ 05 =    \ ADD  EAX, # X
4417
   IF  M\ 404 DTST
4418
       OP0 @ 1+ @ OFF-EAX + TO OFF-EAX
4419
       OP1 ToOP0
4420
       FALSE  -5 ALLOT M\ 405 DTST
4421
       EXIT
4422
   THEN
4423
 
4424
   DUP 'DROP XOR
4425
   OFF-EAX   OR
4426
   OP0 @  W@  4589 XOR OR 0= \ MOV X [EBP] , EAX
4427
   IF   M\ 436 DTST
4428
       DP @ TO LAST-HERE INLINE,
4429
        M\ 437 DTST
4430
         ['] NOOP FALSE EXIT
4431
   THEN
4432
 
4433
   DUP 'DROP =
4434
   OFF-EAX 0=
4435
   OP0 @ C@  A1 =  AND AND  \  MOV     EAX , 44444
4436
   IF M\ 434 DTST
4437
 
4438
      OP0 @ 1+ @ OP0 @ 2+ !
4439
      3D83  OP0 @ W!     \  CMP 44444, # 0
4440
      FALSE  M\ 435 DTST
4441
      EXIT
4442
   THEN
4443
 
4444
   OFF-EAX 0=
4445
   OP0 @  @  FFFFFF AND 24048B = AND \ MOV     EAX , [ESP]
4446
   IF M\ 534 DTST
4447
      1 ALLOT
4448
      243C83   OP0 @ !     \    CMP  DWORD PTR [ESP], 0
4449
      FALSE  M\ 535 DTST
4450
      EXIT
4451
   THEN
4452
 
4453
   DUP 'DROP XOR
4454
   OP0 @ W@  458B XOR OR 0= \  MOV     EAX , 0 [EBP]
4455
   IF M\ 334 DTST
4456
      7D83  OP0 @ W!     \  CMP X [EBP], # Z
4457
      FALSE 0 C, M\ 335 DTST
4458
      EXIT
4459
   THEN
4460
   DUP 'DROP XOR
4461
   OP0 @ W@ C20B XOR OR \  0BC2              OR      EAX , EDX
4462
0= IF M\ B4 DTST
4463
      D00B  OP0 @ W!     \  OR      EDX , EAX
4464
      FALSE  M\ B5 DTST
4465
      EXIT
4466
   THEN
4467
 
4468
   OP0 @ W@  408D =  \  LEA   EAX,  X [EAX]
4469
   IF M\ 234 DTST
4470
      C083  OP0 @ W!     \  ADD  EAX, # X
4471
      FALSE M\ 235 DTST
4472
      EXIT
4473
   THEN
4474
   OP0 @ W@  808D =  \  LEA   EAX,  X [EAX]
4475
   IF M\ 34 DTST
4476
      05 OP0 @ C!
4477
      OP0 @ 2+ @ OP0 @ 1+ !   \  ADD  EAX, # X
4478
      TRUE  -1 ALLOT M\ 35 DTST
4479
      EXIT
4480
   THEN
4481
 
4482
   DUP 'DROP XOR
4483
   OP0 @ @ FFFFFF AND 1FF8C1 XOR OR 0= \  SAR  EAX , 1F
4484
   IF  M\ 13A DTST
4485
            OP1 ToOP0
4486
            8D J_COD 1 AND XOR  TO J_COD
4487
            FALSE  -3 ALLOT M\ 13B DTST
4488
            EXIT
4489
   THEN
4490
   DUP 'DROP XOR
4491
   OP0 @ C@ 35  XOR OR 0= \   XOR  EAX, # X
4492
   IF M\ 134 DTST
4493
      3D OP0 @ C!   \  CMP  EAX, # X
4494
      FALSE M\ 135 DTST
4495
      EXIT
4496
   THEN
4497
 
4498
   DUP 'DROP XOR
4499
 OP0 @ @ FFFFFF AND 240433 XOR OR 0= \ XOR     EAX , [ESP]
4500
   IF M\ 134 DTST
4501
      3B OP0 @ C!   \  CMP     EAX , [ESP]
4502
      FALSE  M\ 135 DTST
4503
      EXIT
4504
   THEN
4505
 
4506
 OP0 @ W@  4539 XOR     \ CMP    X [EBP] , EAX
4507
0= IF M\ 76 DTST
4508
      3B OP0 @ C!   \  CMP  EAX,  X [EBP]
4509
      XC_J
4510
      FALSE  M\ 77 DTST
4511
      EXIT
4512
   THEN
4513
 
4514
   OP1 @ :-SET U< IF TRUE EXIT THEN
4515
\ $       0<> IF
4516
   DUP 'DROP XOR
4517
   OP1 @ @  C01BD8F7  XOR OR 0= \   NEG  EAX  \  SBB  EAX, EAX
4518
        IF   M\ 36 DTST
4519
             OP2 ToOP0
4520
\            084 TO J_COD
4521
             FALSE  -4 ALLOT M\ 37 DTST
4522
             EXIT
4523
        THEN
4524
 
4525
 
4526
\ $       0= IF
4527
        DUP 'DROP XOR
4528
        OP1 @  @  1B01E883 XOR OR     \ SUB EAX , # 1
4529
        OP0 @ W@      C01B XOR OR 0=  \ SBB EAX , EAX
4530
        IF  M\ 38 DTST
4531
\            OP2 @ W@ U.
4532
            OP2 ToOP0
4533
            J_COD 1 XOR TO J_COD
4534
            FALSE  -5 ALLOT M\ 39 DTST
4535
            EXIT
4536
        THEN
4537
 
4538
 
4539
 \ $  U< IF
4540
        DUP 'DROP XOR
4541
        OP1 @  C@  3D <>
4542
        OP1 @  C@  3B <>   AND
4543
\        OP1 @  W@ 053B <> AND
4544
\        OP1 @  W@ D03B <> AND       \ CMP     EDX , EAX
4545
        OP1 @   @ FFFD AND
4546
                  4539 <> AND      \ CMP    X [EBP] , EAX
4547
        OP0 @ W@  C01B XOR OR OR 0=   \ SBB    EAX , EAX
4548
        IF  M\ 3A DTST
4549
            OP1 ToOP0
4550
            83 J_COD 1 AND XOR  TO J_COD
4551
            FALSE -2 ALLOT M\ 3B DTST
4552
            EXIT
4553
        THEN
4554
 
4555
 OP1 @ @ FFFFFF AND 240C8B XOR \ MOV     ECX , [ESP]
4556
 OP0 @ W@ C13B XOR OR 0= \	CMP     EAX , ECX
4557
        IF  M\ 33A DTST
4558
            043B  OP1 @ W!
4559
            OP1 ToOP0
4560
            FALSE -2 ALLOT M\ 33B DTST
4561
            EXIT
4562
        THEN
4563
 
4564
 OP1 @ @ FFFFFF AND 240C8B XOR \ MOV     ECX , [ESP]
4565
 OP0 @ W@ C133 XOR OR 0=  \	XOR     EAX , ECX
4566
        IF  M\ 33A DTST
4567
            0433  OP1 @ W! \ XOR     ECX , [ESP]
4568
            OP1 ToOP0
4569
            FALSE -2 ALLOT M\ 33B DTST
4570
            EXIT
4571
        THEN
4572
 
4573
  OP1 @ @  C13BCA8B = \	MOV     ECX , EDX    CMP   EAX , ECX
4574
        IF  M\ 33A DTST
4575
            C23B  OP1 @ W!    \	CMP     EAX , EDX
4576
            OP1 ToOP0
4577
            FALSE -2 ALLOT M\ 33B DTST
4578
            EXIT
4579
        THEN
4580
 
4581
 OP1 @ W@ 558B XOR       \ MOV     EDX , 0 [EBP]
4582
 OP0 @ W@ C23B XOR OR 0= \ CMP     EAX , EDX
4583
        IF  M\ 43A DTST
4584
            453B  OP1 @ W! \ CMP     EAX , 0 [EBP]
4585
            OP1 ToOP0
4586
            FALSE -2 ALLOT M\ 43B DTST
4587
            EXIT
4588
        THEN
4589
 
4590
 
4591
      DUP 'DROP XOR
4592
  OP1 @ @ C83B008B XOR OR   \	MOV     EAX , [EAX]   CMP     ECX , EAX
4593
0=  IF   M\ 43A DTST
4594
            083B  OP1 @ W! \ CMP     ECX ,  [EAX]
4595
            OP1 ToOP0
4596
            FALSE -2 ALLOT M\ 43B DTST
4597
            EXIT
4598
    THEN
4599
 
4600
      DUP 'DROP XOR
4601
  OP1 @ @ D03B008B XOR OR \ MOV     EAX , [EAX]   CMP     EDX , EAX
4602
0=  IF   M\ 43A DTST
4603
            103B  OP1 @ W! \ CMP     EDX ,  [EAX]
4604
            OP1 ToOP0
4605
            FALSE -2 ALLOT M\ 43B DTST
4606
            EXIT
4607
    THEN
4608
      DUP 'DROP XOR
4609
OP1 @ @ C13B008B XOR OR   \  MOV     EAX , [EAX]   CMP     EAX , ECX
4610
0=  IF   M\ 80 DTST
4611
            083B  OP1 @ W! \ CMP     ECX ,  [EAX]
4612
            XC_J
4613
            OP1 ToOP0
4614
            FALSE -2 ALLOT M\ 81 DTST
4615
            EXIT
4616
    THEN
4617
 
4618
OP1 @ C@   B9 XOR    \  MOV     ECX , # 3
4619
OP0 @ W@ C133 XOR OR \  XOR     EAX , ECX
4620
0= IF   M\ 40 DTST
4621
       3D  OP1 @ C!  \  CMP     EAX , # 1
4622
       OP1 ToOP0
4623
       FALSE  -2 ALLOT M\ 41 DTST
4624
       EXIT
4625
   THEN
4626
\ ZZZZ IF ." Z=" OP1 @ @ U. OP1 @ W@ U. OP0 @ W@ U. THEN
4627
OP1 @ W@ 558B XOR \      MOV     EDX , 0 [EBP]
4628
OP0 @ W@ C23B XOR OR \   CMP     EAX , EDX
4629
0= IF   M\ 68 DTST
4630
       453B  OP1 @ C!  \   CMP     EAX , 0 [EBP]
4631
       OP1 ToOP0
4632
       FALSE  -2 ALLOT M\ 69 DTST
4633
       EXIT
4634
   THEN
4635
OP1 @ C@ B9 XOR  \ 57B523 B901000000  MOV     ECX , # 1
4636
OP0 @ W@ C83B XOR OR \ 57B528 3BC8              CMP     ECX , EAX
4637
0= IF   M\ 74 DTST
4638
       3D  OP1 @ C!  \   CMP     EAX , # 1
4639
       XC_J
4640
       OP1 ToOP0
4641
       FALSE  -2 ALLOT M\ 75 DTST
4642
       EXIT
4643
   THEN
4644
 
4645
OP1 @  @ C23B008B = \   MOV     EAX , [EAX]           CMP     EAX , EDX
4646
    IF   M\ 78 DTST
4647
            103B  OP1 @ W! \ CMP     EDX , [EAX]
4648
            XC_J
4649
            OP1 ToOP0 -2 ALLOT
4650
            FALSE M\ 79 DTST
4651
            EXIT
4652
    THEN
4653
 
4654
      DUP 'DROP XOR
4655
OP1 @ @ FFFFFF AND 24448B XOR OR \        MOV     EAX , 10 [ESP]
4656
OP0 @ C@ 3D XOR OR \ 597707 3D02000000  CMP     EAX , # 2
4657
0=  IF   M\ 7A DTST
4658
            7C81  OP1 @ W! \ CMP     10 [ESP] , # 2
4659
            OP0 @ 1+ @ OP0 @ !
4660
            OP1 ToOP0 -1 ALLOT
4661
            FALSE M\ 7B DTST
4662
            EXIT
4663
    THEN
4664
 
4665
OP1 @ @ FFFFFF AND 244C8B XOR \        MOV     ECX , 20 [ESP]
4666
OP0 @ W@ C83B XOR OR \              CMP     ECX , EAX
4667
0=  IF   M\ 7C DTST
4668
            443B  OP1 @ W! \ CMP   EAX ,  20 [ESP]
4669
            OP0 @ 1+ @ OP0 @ !
4670
            XC_J
4671
            OP1 ToOP0 -2 ALLOT
4672
            FALSE M\ 7D DTST
4673
            EXIT
4674
    THEN
4675
 
4676
OP1 @ W@ 0D8B XOR \        MOV     ECX , 44444
4677
OP0 @ W@ C83B XOR OR \     CMP     ECX , EAX
4678
0=  IF   M\ 7C DTST
4679
            053B  OP1 @ W! \ CMP   EAX ,  44444
4680
            OP0 @ 1+ @ OP0 @ !
4681
            XC_J
4682
            OP1 ToOP0 -2 ALLOT
4683
            FALSE M\ 7D DTST
4684
            EXIT
4685
    THEN
4686
 
4687
 DUP 'DROP XOR
4688
OP1 @ @ FFFFFF AND 85048B XOR OR \   MOV     EAX , X [EAX*4]
4689
OP0 @ C@ 3D XOR OR \ 5960F8 3500100000  CMP     EAX , # 1000
4690
0=  IF   M\ 86 DTST
4691
            3C81  OP1 @ W! \  CMP   X [EAX*4] ,  # 1000
4692
            OP0 @ 1+ @ OP0 @ !
4693
            OP1 ToOP0 -1 ALLOT
4694
            FALSE M\ 87 DTST
4695
            EXIT
4696
    THEN
4697
 
4698
 DUP 'DROP XOR
4699
OP1 @ C@ A1 XOR OR \ 5978EF A135755900  MOV     EAX , 597535
4700
OP0 @ C@ 3D XOR OR \ 5978F4 3D41000000  CMP     EAX , # 1000
4701
0=  IF   M\ 96 DTST
4702
            OP1 @ 1+ @ OP1 @ 2+ !
4703
            3D81  OP1 @ W! \  CMP   597535 ,  # 1000
4704
            OP1 ToOP0
4705
            FALSE M\ 97 DTST
4706
            EXIT
4707
    THEN
4708
 
4709
 DUP 'DROP XOR
4710
OP1 @ W@ D8F7 XOR OR \ 581E16 F7D8              NEG     EAX
4711
OP0 @ W@ C203 XOR OR \ 581E18 03C2              ADD     EAX , EDX
4712
0=  IF   M\ B8 DTST
4713
         D02B  OP1 @ W! \  SUB     EDX , EAX
4714
         OP1 ToOP0 -2 ALLOT
4715
         FALSE M\ B9 DTST
4716
            EXIT
4717
    THEN
4718
 
4719
OP1 @ @ C90BCA8B XOR	\  8BCA           MOV     ECX , EDX
4720
			\  0BC9           OR      ECX , ECX
4721
0=  IF   M\ BA DTST
4722
         D20B  OP1 @ W! \  OR      EDX , EDX
4723
         OP1 ToOP0 -2 ALLOT
4724
         FALSE M\ BB DTST
4725
            EXIT
4726
    THEN
4727
 
4728
OP1 @ @  3DFF408D XOR
4729
OP0 @ 1+ @ OR	\ 	LEA     EAX , FF [EAX] 	CMP     EAX , # 0
4730
0= IF   M\ 1BA DTST
4731
         48 OP1 @ C!	\	DEC     EAX
4732
         OP1 ToOP0 -7 ALLOT
4733
         FALSE M\ 1BB DTST
4734
            EXIT
4735
    THEN
4736
 
4737
   OP2 @ :-SET U< IF TRUE EXIT THEN
4738
 
4739
OP2 @ W@  4589 XOR         \  MOV     F8 [EBP] , EAX
4740
OP1 @  @ 453BC033 XOR OR   \ XOR     EAX , EAX CMP     EAX , F8 [EBP]
4741
OP0 @ 2+ C@
4742
OP2 @ 2+ C@   XOR OR  \  (FALG &( X1=X ))
4743
0=  IF   M\ 4E DTST
4744
            3D  OP1 @ C! OP1 @ 1+ 0! \ CMP     EAX ,  # 0
4745
            XC_J
4746
            OP1 ToOP0
4747
            FALSE M\ 4F DTST
4748
            EXIT
4749
    THEN
4750
 
4751
OP2 @ W@ 5589 XOR    \    MOV     F8 [EBP] , EDX
4752
OP1 @  @ 453B008B XOR OR \   MOV     EAX , [EAX]    CMP     EAX , F8 [EBP]
4753
OP0 @ 2+ C@
4754
OP2 @ 2+ C@   XOR OR  \  (FALG &( X1=X ))
4755
\ OP0 @ 2+ C@ C>S  OFF-EBP > OR   !!!!
4756
0=  IF   M\ 23A DTST
4757
         C23B OP0 @ W!  \    CMP     EAX , EDX
4758
         FALSE -1 ALLOT M\ 23B DTST
4759
         EXIT
4760
    THEN
4761
 
4762
OP2 @ W@ 4D89 XOR  \      MOV     F8 [EBP] , ECX
4763
OP1 @  @ 453B008B XOR OR \   MOV     EAX , [EAX]    CMP     EAX , F8 [EBP]
4764
OP0 @ 2+ C@
4765
OP2 @ 2+ C@   XOR OR  \  (FALG &( X1=X ))
4766
0=  IF   M\ 7E DTST
4767
         C13B OP0 @ W!  \    CMP     EAX , ECX
4768
         FALSE -1 ALLOT M\  7F DTST
4769
         EXIT
4770
    THEN
4771
 
4772
 
4773
OP1 @ W@   8B XOR    \    MOV     EAX , [EAX]
4774
OP0 @ W@ 4539 XOR OR \    CMP     F8 [EBP] , EAX
4775
OP0 @ 2+ C@
4776
OP2 @ 2+ C@   XOR OR  \  (FALG &( X1=X ))
4777
\ OP0 @ 2+ C@ C>S  OFF-EBP > OR
4778
0=  IF
4779
      OP2 @ W@ 4D89 =    \    MOV     F8 [EBP] , ECX
4780
      IF  M\ 23A DTST
4781
         C83B OP0 @ W!  \  CMP     ECX , EAX
4782
         FALSE -1 ALLOT M\ 23B DTST
4783
         EXIT
4784
      THEN
4785
      OP2 @ W@ 5589 =    \    MOV     F8 [EBP] , EDX
4786
       \ MOV     EAX , [EAX]    CMP     F8 [EBP] , EAX
4787
      IF  M\ 33A DTST
4788
         D03B OP0 @ W!  \  CMP     EDX , EAX
4789
         FALSE -1 ALLOT M\ 33B DTST
4790
         EXIT
4791
      THEN
4792
    THEN
4793
 
4794
 
4795
   OP3 @ :-SET U< IF TRUE EXIT THEN
4796
 
4797
\ $  < IF
4798
     DUP 'DROP XOR
4799
     OP2 @ @ FFFFFCFF AND  83C09C0F XOR OR
4800
     OP1 @ @  4801E083 XOR OR 0=
4801
\ 0F9DC0		SETGE   AL
4802
\ 83E001		AND     EAX , # 1
4803
\ 48		DEC     EAX
4804
     IF  M\ 3C DTST
4805
             OP2 @ 1+ C@ 10 - J_COD 1 AND XOR TO J_COD
4806
             OP3 ToOP0
4807
             FALSE  -7 ALLOT M\ 3D DTST
4808
             EXIT
4809
     THEN
4810
 
4811
\ 5 OVER = IF
4812
     OP0 @ W@ 4533 =  \ XOR   EAX , F8 [EBP]
4813
     IF
4814
         DUP 'DROP XOR
4815
         OP3 @ W@ 4589 XOR OR  \ MOV    FC [EBP] , EAX
4816
         OP2 @ W@ 45C7 XOR OR  \ MOV    F8 [EBP] , # 5
4817
         OP1 @ W@ 458B XOR OR  \ MOV    EAX , FC [EBP]
4818
         OP3 @ 2+ C@ OP1 @ 2+ C@ XOR OR
4819
         OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0=
4820
         IF M\ 234 DTST
4821
            3D OP2 @ C!
4822
            OP2 @ 3 + @ OP2 @ 1+ !
4823
            OP2 ToOP0
4824
            TRUE -8 ALLOT  M\ 235 DTST
4825
            EXIT
4826
         THEN
4827
     THEN
4828
 
4829
     TRUE  ;
4830
 
4831
: BR-EVEN-EAX OFF-EAX
4832
   IF   M\ 1002 DTST
4833
       SetOP
4834
      5 C, OFF-EAX ,
4835
 
4836
         M\ 1003 DTST
4837
   THEN
4838
;
4839
 
4840
 
4841
: ?BR-OPT
4842
     BEGIN BEGIN  M\ -9 DTST
4843
                 ?BR-OPT-RULES
4844
           UNTIL  M\ -7 DTST
4845
                  ['] NOOP OPT-RULES NIP
4846
     UNTIL        BR-EVEN-EAX
4847
   M\ -5 DTST
4848
\ ZZZZ IF ." B=" DUP U. THEN
4849
        OP0 @ :-SET U<
4850
        IF    SetOP 0xC00B W,    \ OR EAX, EAX
4851
              EXIT
4852
        THEN
4853
        OP0 @ C@
4854
        \ 00XX.X101
4855
        DUP   C7 AND 05 <>  \  ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X
4856
\       OVER  3D <> AND   \ ~ CMP EAX, # X
4857
        OVER  40 <> AND   \ DEC     EAX
4858
        OVER  48 <> AND   \ INC     EAX
4859
        OVER  3B <> AND   \ CMP
4860
        OVER  0B <> AND   \ OR
4861
 
4862
        NIP
4863
        OP0 @  W@
4864
        DUP  4000  OR  ADD|XOR|OR|AND= INVERT
4865
        OVER C01B  <> AND  \ SBB EAX, EAX
4866
        OVER D02B  <> AND  \ SUB EDX, EAX
4867
        OVER 4539  <> AND  \ CMP X [EBP], EAX
4868
\        OVER 103B  <> AND  \ CMP EDX , [EAX]
4869
\        OVER 453B  <> AND  \ CMP EAX , X [EBP]
4870
\        OVER 053B  <> AND  \ CMP EAX , X
4871
        OVER C083  <> AND  \ ADD EAX , # X
4872
        OVER C203  <> AND  \ ADD EAX , EDX
4873
        OVER C133  <> AND  \ XOR EAX , ECX
4874
        OVER F8C1  <> AND  \ SAR EAX ,   X
4875
        OVER 7D83  <> AND  \ CMP X [EBP], # Z
4876
        OVER 3D81  <> AND  \ CMP 44444, # 55555
4877
        OVER 3C81  <> AND  \ CMP   X [EAX*4] ,  # 55555
4878
        OVER 7C81  <> AND  \ CMP X [ESP] , # X
4879
        OVER 3D83  <> AND  \ CMP 44444, # 0
4880
        OVER 3C83  <> AND  \ CMP [ESP], # 0
4881
\        OVER C20B  <> AND  \  OR EAX , EDX
4882
        NIP
4883
        OP0 @  @ FFFFFF AND 240433 XOR \ XOR     EAX , [ESP]
4884
        AND
4885
        AND
4886
        IF    SetOP 0xC00B W,    \ OR EAX, EAX
4887
        THEN
4888
\       DP @ TO :-SET
4889
;
4890
 
4891
: ??BR-OPT
4892
  OPT?  IF OPT_INIT
4893
 ?BR-OPT
4894
   M\ -B DTST
4895
 OPT_CLOSE
4896
       THEN ;
4897
: ???BR-OPT
4898
  OPT? 0= IF  C00B W,    \ OR EAX, EAX
4899
  THEN
4900
    FALSE TO ~BR-OPT  'DROP ??BR-OPT INLINE,
4901
     TRUE TO ~BR-OPT
4902
   OPT?
4903
  IF   OPT_INIT
4904
   OP0 @ W@ C00B = DUP >R IF OP0 OPexcise THEN
4905
      ['] NOOP ?BR-OPT DROP
4906
\         SetOP 0xC00B W,    \ OR EAX, EAX
4907
    OP0 @ W@ C00B = R> 0= AND IF OP0 OPexcise THEN
4908
      OPT_CLOSE
4909
  THEN
4910
;
4911
 
4912
: OPT   ( -- )  ['] NOOP DO_OPT DROP  ;
4913
 
4914
: FORLIT, ( N -- )
4915
  'DUP _INLINE, SetOP 0B8 C, , OPT ;
4916
 
4917
: CON>LIT ( CFA -- CFA TRUE | FALSE )
4918
                  OPT? 0= IF TRUE EXIT THEN ?SET
4919
               MM_SIZE 0= IF TRUE EXIT THEN
4920
                 DUP C@ 0E8 <> IF TRUE EXIT THEN
4921
 
4922
                 DUP 1+  REL@ CELL+
4923
                 DUP   CREATE-CODE  =
4924
                 IF  DROP OPT_INIT 5 + [>T] FORLIT, FALSE OPT_CLOSE EXIT
4925
                 THEN
4926
 
4927
                 DUP     USER-CODE  =
4928
                 IF  DROP  OPT_INIT 'DUP _INLINE,
4929
                   SetOP  878D W, 5 + @ , OPT   FALSE  OPT_CLOSE  EXIT
4930
                 THEN
4931
 
4932
                 DUP     USER-VALUE-CODE  =
4933
                 IF  DROP  OPT_INIT 'DUP _INLINE,
4934
                   SetOP  878B W, 5 + @ , OPT   FALSE  OPT_CLOSE  EXIT
4935
                 THEN
4936
 
4937
                 DUP  CONSTANT-CODE  =
4938
                 IF  DROP  OPT_INIT 5 + DUP 5 +  REL@
4939
                     TOVALUE-CODE CELL- =
4940
                    IF   'DUP _INLINE, SetOP 0A1 C, [>T] , OPT
4941
                    ELSE    @  FORLIT,
4942
                    THEN   FALSE  OPT_CLOSE  EXIT
4943
                 THEN
4944
                 DUP 1+ REL@ CELL+ DOES-CODE =
4945
                 IF  5 +         \ CFA
4946
                     SWAP 5 + OPT_INIT FORLIT,
4947
                     TRUE     OPT_CLOSE EXIT
4948
                 THEN
4949
                 DUP  TOUSER-VALUE-CODE =
4950
                 IF  DROP  OPT_INIT
4951
                     SetOP  8789 W, CELL- @ , OPT
4952
                     'DROP _INLINE,
4953
                     FALSE  OPT_CLOSE  EXIT
4954
                 THEN
4955
                  TOVALUE-CODE =
4956
                 IF  OPT_INIT
4957
                     SetOP  A3 C,  CELL- [>T] ,   OPT
4958
                     'DROP _INLINE,
4959
                     FALSE  OPT_CLOSE  EXIT
4960
                 THEN
4961
  TRUE
4962
;
4963
 
4964
: J?_STEP  ( ADR OPX -- ADR OPX+4 FALSE | OPX TRUE TRUE | ADR FALSE TRUE )
4965
 
4966
 
4967
     OVER J-SET U> 0= IF   DROP FALSE TRUE EXIT THEN
4968
     OVER DP @ =   IF   NIP  TRUE TRUE EXIT THEN
4969
     DUP @ @ FFFFF0FF AND 800F =  IF  DROP  FALSE TRUE EXIT THEN
4970
     DUP @ @ 000000E9 =  IF  DROP  FALSE TRUE EXIT THEN
4971
     DUP CELL+ OP0 OpBuffSize + U>
4972
                   IF   DROP FALSE TRUE EXIT THEN
4973
     2DUP @ =      IF  NIP CELL+ TRUE TRUE EXIT THEN
4974
     CELL+ FALSE
4975
;
4976
 
4977
: J_+!
4978
        DUP C@ F0
4979
           AND 70 = IF 1+ ELSE
4980
        DUP C@ EB = IF 1+ ELSE
4981
        DUP C@ E9 = IF 1+ ELSE
4982
        DUP W@ F0FF
4983
         AND 800F = IF 2+  ELSE
4984
          ." J_+! ERR" ABORT
4985
        THEN  THEN THEN THEN  +!
4986
;
4987
 
4988
: J_MOVE ( OPX n -- )
4989
  OVER OP0 <>
4990
  IF
4991
      OVER CELL- @
4992
      2DUP - NEGATE
4993
      OVER DP @  - NEGATE ( U. U. U.  ABORT )  CMOVE
4994
      OVER OP0
4995
      ?DO  DUP NEGATE I +!
4996
           I @ C@ E8 = IF DUP I @ 1+ +! THEN
4997
           CELL
4998
      +LOOP
4999
  THEN
5000
      OVER @
5001
      JP0 JpBuffSize + JP0
5002
      ?DO I @
5003
           IF   DUP  I @ U<
5004
                IF
5005
                   OVER NEGATE I +!
5006
                    DUP I @ J_@ U>
5007
                    IF OVER I @ J_+!
5008
                    THEN
5009
                ELSE
5010
                   DUP  I @ <>
5011
                   IF
5012
                     DUP I @ J_@ U<
5013
                     IF OVER NEGATE  I @ J_+!
5014
                     THEN
5015
                   THEN
5016
                THEN
5017
           THEN  CELL
5018
      +LOOP DROP
5019
 \ THEN
5020
 
5021
  NIP NEGATE DUP ALLOT  :-SET + TO :-SET EXIT
5022
   ;
5023
 
5024
 TRUE VALUE J_OPT?
5025
 
5026
 
5027
\ FALSE VALUE J_OPT?
5028
 
5029
: RESOLVE_OPT ( ADR -- )
5030
 
5031
    OPT?  0= IF DROP EXIT THEN
5032
  J_OPT?  0= IF DROP EXIT THEN
5033
 
5034
  DUP CELL- JP0 JpBuffSize + CELL- @ U<
5035
    IF DUP CELL- REL@ CELL+ J-SET UMAX TO J-SET THEN
5036
 
5037
 \ ." J_S"  \ BASE @ HEX  J-SET U. DP @ U. BASE !
5038
  DP @ OVER - 7E >  IF ( ." S" )    DROP EXIT THEN
5039
  DP @ LAST-HERE <> IF ( ." L" ) ?SET DROP EXIT THEN
5040
  OPT? 0= IF DROP EXIT THEN
5041
  CELL+  OP0
5042
    BEGIN J?_STEP
5043
    UNTIL
5044
    IF DUP  @
5045
       DUP C@ E9 =
5046
       IF  EB SWAP C! 3
5047
       ELSE
5048
             DUP 1+ W@ 10 - \ 400 +
5049
            SWAP W!  4
5050
       THEN
5051
\       OVER CELL- @ REST
5052
      J_MOVE DP @ TO LAST-HERE EXIT
5053
    THEN  \ OPX
5054
  DROP
5055
 
5056
;
5057
\  0 TO J_OPT?
5058
 
5059
BASE !
5060
 
5061