Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  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. 0 VALUE OFF-EBP
  31.  
  32. 0 VALUE OFF-EAX
  33.  
  34. 0 VALUE :-SET
  35.  
  36. 0 VALUE J-SET
  37.  
  38. 0 VALUE LAST-HERE
  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.     0 TO OFF-EAX
  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.      0 TO OFF-EBP
  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. 0 VALUE TTTT
  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. 0 ?~EAX{
  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. 0 ?~EAX{
  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.  0 ?~EAX{
  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. 0 ?~EAX{
  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. 0 ?~EAX{
  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.        0 TO OFF-EAX
  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.       0 TO OFF-EAX
  2330.  
  2331.   THEN
  2332. M\ PPPP
  2333.  
  2334.   OP0 @  C@ B8 =    \ MOV  EAX, # X
  2335.   IF  OFF-EAX OP0 @ 1+ +!
  2336.       0 TO OFF-EAX
  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.       0 TO OFF-EAX
  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.      0 W,
  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.       0 TO OFF-EAX
  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.  
  5062.