Subversion Repositories Kolibri OS

Rev

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

  1. ( óÌÏ×Á ÎÅÍÅÄÌÅÎÎÏÇÏ ×ÙÐÏÌÎÅÎÉÑ, ÉÓÐÏÌØÚÕÅÍÙÅ ÐÒÉ ËÏÍÐÉÌÑÃÉÉ
  2.   ÓÔÒÕËÔÕÒ ÕÐÒÁ×ÌÅÎÉÑ × ÔÅÌÅ ×ÙÓÏËÏÕÒÏ×ÎÅ×ÏÇÏ ÏÐÒÅÄÅÌÅÎÉÑ.
  3.   ïó-ÎÅÚÁ×ÉÓÉÍÙÅ ÏÐÒÅÄÅÌÅÎÉÑ.
  4.   Copyright [C] 1992-1999 A.Cherezov ac@forth.org
  5.   ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ 16-ÒÁÚÒÑÄÎÏÇÏ × 32-ÒÁÚÒÑÄÎÙÊ ËÏÄ - 1995-96ÇÇ
  6.   òÅ×ÉÚÉÑ - ÓÅÎÔÑÂÒØ 1999
  7. )
  8.  
  9. : IF  \ 94
  10. \ éÎÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅÏÐÒÅÄÅÌÅÎÁ.
  11. \ ëÏÍÐÉÌÑÃÉÑ: ( C: -- orig )
  12. \ ðÏÌÏÖÉÔØ ÎÁ ÕÐÒÁ×ÌÑÀÝÉÊ ÓÔÅË ÐÏÚÉÃÉÀ ÎÏ×ÏÊ ÎÅÒÁÚÒÅÛÅÎÎÏÊ ÓÓÙÌËÉ ×ÐÅÒÅÄ orig.
  13. \ äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ, ÄÁÎÎÕÀ ÎÉÖÅ, Ë ÔÅËÕÝÅÍÕ ÏÐÒÅÄÅÌÅÎÉÀ.
  14. \ óÅÍÁÎÔÉËÁ ÎÅÚÁ×ÅÒÛÅÎÁ, ÐÏËÁ orig ÎÅ ÒÁÚÒÅÛÉÔÓÑ, ÎÁÐÒÉÍÅÒ, ÐÏ THEN ÉÌÉ ELSE.
  15. \ ÷ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ: ( x -- )
  16. \ åÓÌÉ ×ÓÅ ÂÉÔÙ x ÎÕÌÅ×ÙÅ, ÐÒÏÄÏÌÖÁÔØ ×ÙÐÏÌÎÅÎÉÅ Ó ÐÏÚÉÃÉÉ, ÚÁÄÁÎÎÏÊ
  17. \ ÒÁÚÒÅÛÅÎÉÅÍ orig.
  18.   ?COMP DP @ ?BRANCH, >MARK 1
  19. ; IMMEDIATE
  20.  
  21.  
  22. : ELSE \ 94
  23. \ éÎÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅÏÐÒÅÄÅÌÅÎÁ.
  24. \ ëÏÍÐÉÌÑÃÉÑ: ( C: orig1 -- orig2 )
  25. \ ðÏÌÏÖÉÔØ ÎÁ ÕÐÒÁ×ÌÑÀÝÉÊ ÓÔÅË ÐÏÚÉÃÉÀ ÎÏ×ÏÊ ÎÅÒÁÚÒÅÛÅÎÎÏÊ ÓÓÙÌËÉ ×ÐÅÒÅÄ orig2.
  26. \ äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ, ÄÁÎÎÕÀ ÎÉÖÅ, Ë ÔÅËÕÝÅÍÕ ÏÐÒÅÄÅÌÅÎÉÀ.
  27. \ óÅÍÁÎÔÉËÁ ÎÅÚÁ×ÅÒÛÅÎÁ, ÐÏËÁ orig2 ÎÅ ÒÁÚÒÅÛÉÔÓÑ (ÎÁÐÒÉÍÅÒ, ÐÏ THEN).
  28. \ òÁÚÒÅÛÉÔØ ÓÓÙÌËÕ ×ÐÅÒÅÄ orig1, ÉÓÐÏÌØÚÕÑ ÐÏÚÉÃÉÀ ÓÌÅÄÕÀÝÅÊ ÄÏÂÁ×ÌÅÎÎÏÊ
  29. \ ÓÅÍÁÎÔÉËÉ ×ÙÐÏÌÎÅÎÉÑ.
  30. \ ÷ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ: ( -- )
  31. \ ðÒÏÄÏÌÖÉÔØ ×ÙÐÏÌÎÅÎÉÅ Ó ÐÏÚÉÃÉÉ, ÚÁÄÁÎÎÏÊ ÒÁÚÒÅÛÅÎÉÅÍ orig2.
  32.   ?COMP DP @ BRANCH,
  33.   >ORESOLVE
  34.   >MARK 2
  35. ; IMMEDIATE
  36.  
  37. : THEN \ 94
  38. \ éÎÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅÏÐÒÅÄÅÌÅÎÁ.
  39. \ ëÏÍÐÉÌÑÃÉÑ: ( C: orig -- )
  40. \ òÁÚÒÅÛÉÔØ ÓÓÙÌËÕ ×ÐÅÒÅÄ orig, ÉÓÐÏÌØÚÕÑ ÐÏÚÉÃÉÀ ÓÅÍÁÎÔÉËÉ ×ÙÐÏÌÎÅÎÉÑ.
  41. \ äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ, ÄÁÎÎÕÀ ÎÉÖÅ, Ë ÔÅËÕÝÅÍÕ ÏÐÒÅÄÅÌÅÎÉÀ.
  42. \ ÷ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ: ( -- )
  43. \ ðÒÏÄÏÌÖÉÔØ ×ÙÐÏÌÎÅÎÉÅ.
  44.   ?COMP \ HERE TO :-SET
  45.   >ORESOLVE
  46. ; IMMEDIATE
  47.  
  48. : BREAK
  49.   POSTPONE EXIT  POSTPONE THEN ; IMMEDIATE
  50.  
  51. : BEGIN \ 94
  52. \ éÎÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅÏÐÒÅÄÅÌÅÎÁ.
  53. \ ëÏÍÐÉÌÑÃÉÑ: ( C: -- dest )
  54. \ ðÏÌÏÖÉÔØ ÓÌÅÄÕÀÝÕÀ ÐÏÚÉÃÉÀ ÐÅÒÅÄÁÞÉ ÕÐÒÁ×ÌÅÎÉÑ, dest, ÎÁ ÕÐÒÁ×ÌÑÀÝÉÊ ÓÔÅË.
  55. \ äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ, ÄÁÎÎÕÀ ÎÉÖÅ, Ë ÔÅËÕÝÅÍÕ ÏÐÒÅÄÅÌÅÎÉÀ.
  56. \ ÷ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ: ( -- )
  57. \ ðÒÏÄÏÌÖÉÔØ ×ÙÐÏÌÎÅÎÉÅ.
  58.   ?COMP
  59.   4 ALIGN-NOP
  60. \  HERE TO :-SET
  61.   <MARK 3
  62. ; IMMEDIATE
  63.  
  64. : UNTIL \ 94
  65. \ éÎÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅÏÐÒÅÄÅÌÅÎÁ.
  66. \ ëÏÍÐÉÌÑÃÉÑ: ( C: dest -- )
  67. \ äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ, ÄÁÎÎÕÀ ÎÉÖÅ, Ë ÔÅËÕÝÅÍÕ ÏÐÒÅÄÅÌÅÎÉÀ.
  68. \ òÁÚÒÅÛÉÔØ ÓÓÙÌËÕ ÎÁÚÁÄ dest.
  69. \ ÷ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ: ( x -- )
  70. \ åÓÌÉ ×ÓÅ ÂÉÔÙ x ÎÕÌÅ×ÙÅ, ÐÒÏÄÏÌÖÁÔØ ×ÙÐÏÌÎÅÎÉÅ Ó ÐÏÚÉÃÉÉ, ÚÁÄÁÎÎÏÊ dest.
  71.   ?COMP 3 <> IF -2004 THROW THEN \ ABORT" UNTIL ÂÅÚ BEGIN !"
  72.   ?BRANCH,
  73.   0xFFFFFF80  DP @ 4 - @  U<
  74.   IF  DP @ 5 - W@ 0x3F0 + DP @ 6 - W!   -4 ALLOT
  75.   THEN
  76. ; IMMEDIATE
  77.  
  78. : WHILE \ 94
  79. \ éÎÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅÏÐÒÅÄÅÌÅÎÁ.
  80. \ ëÏÍÐÉÌÑÃÉÑ: ( C: dest -- orig dest )
  81. \ ðÏÌÏÖÉÔØ ÐÏÚÉÃÉÀ ÎÏ×ÏÊ ÎÅÒÁÚÒÅÛÅÎÎÏÊ ÓÓÙÌËÉ ×ÐÅÒÅÄ orig ÎÁ ÕÐÒÁ×ÌÑÀÝÉÊ ÓÔÅË
  82. \ ÐÏÄ ÉÍÅÀÝÉÍÓÑ dest. äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ, ÄÁÎÎÕÀ ÎÉÖÅ, Ë
  83. \ ÔÅËÕÝÅÍÕ ÏÐÒÅÄÅÌÅÎÉÀ. óÅÍÁÎÔÉËÁ ÎÅÚÁ×ÅÒÛÅÎÁ, ÐÏËÁ orig É dest ÎÅ ÒÁÚÒÅÛÁÔÓÑ
  84. \ (ÎÁÐÒÉÍÅÒ, ÐÏ REPEAT).
  85. \ ÷ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ: ( x -- )
  86. \ åÓÌÉ ×ÓÅ ÂÉÔÙ x ÎÕÌÅ×ÙÅ, ÐÒÏÄÏÌÖÁÔØ ×ÙÐÏÌÎÅÎÉÅ Ó ÐÏÚÉÃÉÉ, ÚÁÄÁÎÎÏÊ
  87. \ ÒÁÚÒÅÛÅÎÉÅÍ orig.
  88.   ?COMP [COMPILE] IF
  89.   2SWAP
  90. ; IMMEDIATE
  91.  
  92. : REPEAT \ 94
  93. \ éÎÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅÏÐÒÅÄÅÌÅÎÁ.
  94. \ ëÏÍÐÉÌÑÃÉÑ: ( C: orig dest -- )
  95. \ äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ, ÄÁÎÎÕÀ ÎÉÖÅ, Ë ÔÅËÕÝÅÍÕ ÏÐÒÅÄÅÌÅÎÉÀ,
  96. \ ÒÁÚÒÅÛÉ× ÓÓÙÌËÕ ÎÁÚÁÄ dest. òÁÚÒÅÛÉÔØ ÓÓÙÌËÕ ×ÐÅÒÅÄ orig, ÉÓÐÏÌØÚÕÑ
  97. \ ÐÏÚÉÃÉÀ ÄÏÂÁ×ÌÅÎÎÏÊ ÓÅÍÁÎÔÉËÉ ×ÙÐÏÌÎÅÎÉÑ.
  98. \ ÷ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ: ( -- )
  99. \ ðÒÏÄÏÌÖÉÔØ ×ÙÐÏÌÎÅÎÉÅ Ó ÐÏÚÉÃÉÉ, ÚÁÄÁÎÎÏÊ dest.
  100.   ?COMP
  101.   3 <> IF -2005 THROW THEN \ ABORT" REPEAT ÂÅÚ BEGIN !"
  102.   DUP DP @ 2+ - DUP
  103.   SHORT?
  104.   IF SetJP 0xEB C, C, DROP
  105.   ELSE DROP BRANCH, THEN
  106.   >ORESOLVE
  107. ; IMMEDIATE
  108.  
  109. : AGAIN  \ 94 CORE EXT
  110. \ éÎÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅÏÐÒÅÄÅÌÅÎÁ.
  111. \ ëÏÍÐÉÌÑÃÉÑ: ( C: dest -- )
  112. \ äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ, ÄÁÎÎÕÀ ÎÉÖÅ, Ë ÔÅËÕÝÅÍÕ ÏÐÒÅÄÅÌÅÎÉÀ,
  113. \ ÒÁÚÒÅÛÉ× ÓÓÙÌËÕ ÎÁÚÁÄ dest.
  114. \ ÷ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ: ( -- )
  115. \ ðÒÏÄÏÌÖÉÔØ ×ÙÐÏÌÎÅÎÉÅ Ó ÐÏÚÉÃÉÉ, ÚÁÄÁÎÎÏÊ dest. åÓÌÉ ÄÒÕÇÉÅ ÕÐÒÁ×ÌÑÀÝÉÅ ÓÌÏ×Á
  116. \ ÎÅ ÉÓÐÏÌØÚÕÀÔÓÑ, ÔÏ ÌÀÂÏÊ ÐÒÏÇÒÁÍÍÎÙÊ ËÏÄ ÐÏÓÌÅ AGAIN ÎÅ ÂÕÄÅÔ ×ÙÐÏÌÎÑÔØÓÑ.
  117.   ?COMP 3 <> IF -2006 THROW THEN \ ABORT" AGAIN ÂÅÚ BEGIN !"
  118.   DUP DP @ 2+ - DUP
  119.   SHORT?
  120.   IF SetJP 0xEB C, C, DROP
  121.   ELSE DROP BRANCH, THEN  DP @ TO :-SET
  122. ; IMMEDIATE
  123.  
  124. : RECURSE   \ 94
  125. \ éÔÅÒÐÒÅÔÁÃÉÑ: ÓÅÍÁÎÔÉËÁ ÎÅ ÏÐÒÅÄÅÌÅÎÁ.
  126. \ ëÏÍÐÉÌÑÃÉÑ: ( -- )
  127. \ äÏÂÁ×ÉÔØ ÓÅÍÁÎÔÉËÕ ×ÙÐÏÌÎÅÎÉÑ ÔÅËÕÝÅÇÏ ÏÐÒÅÄÅÌÅÎÉÑ × ÔÅËÕÝÅÅ ÏÐÒÅÄÅÌÅÎÉÅ.
  128. \ îÅÏÄÎÏÚÎÁÞÎÁÑ ÓÉÔÕÁÃÉÑ ×ÏÚÎÉËÁÅÔ, ÅÓÌÉ RECURSE ÉÓÐÏÌØÚÕÅÔÓÑ ÐÏÓÌÅ DOES>.
  129.   ?COMP
  130.   LAST-NON  DUP 0=
  131.   IF DROP  LATEST NAME>  THEN _COMPILE,
  132. ; IMMEDIATE
  133.