\ 94 TOOLS

: .S ( -- ) \ 94 TOOLS
\ Скопировать и показать значения, находящиеся на стеке данных. Формат зависит 
\ от реализации.
\ .S может быть реализовано с использованием слов форматного преобразования 
\ чисел. Соответственно, он может испортить перемещаемую область, 
\ идентифицируемую #>.
   DEPTH .SN
;

: ? ( a-addr -- ) \ 94 TOOLS
\ Показать значение, хранящееся по адресу a-addr.
\ ? может быть реализован с использованием слов форматного преобразования 
\ чисел. Соответственно, он может испортить перемещаемую область, 
\ идентифицируемую #>.
  @ .
;
: AHEAD  \ 94 TOOLS EXT
\ Интерпретация: семантика неопределена.
\ Компиляция: ( C: -- orig )
\ Положить место неразрешенной ссылки вперед orig на стек управления.
\ Добавить семантику времени выполнения, данную ниже, к текущему определению.
\ Семантика незавершена до тех пор, пока orig не разрешится (например,
\ по THEN).
\ Время выполнения: ( -- )
\ Продолжить выполнение с позиции, заданной разрешением orig.
  HERE BRANCH, >MARK 2
; IMMEDIATE

: [ELSE]   \ 94 TOOLS EXT
\ Компиляция: Выполнить семантику выполнения, данную ниже.
\ Выполнение: ( "<spaces>name..." -- )
\ Пропустить ведущие пробелы, выделить и отбросить ограниченные пробелами 
\ слова из разбираемой области, включая вложенные [IF]...[THEN] и 
\ [IF]...[ELSE]...[THEN], до выделения и отбрасывания слова [THEN].
\ Если разбираемая область опустошается, она снова заполняется по REFILL.
\ [ELSE] - слово немедленного исполнения.
    1
    BEGIN
      NextWord DUP
      IF  
         2DUP S" [IF]"   COMPARE 0= IF 2DROP 1+                 ELSE 
         2DUP S" [ELSE]" COMPARE 0= IF 2DROP 1- DUP  IF 1+ THEN ELSE 
              S" [THEN]" COMPARE 0= IF       1-                 THEN
                                    THEN  THEN   
      ELSE 2DROP REFILL  AND \   SOURCE TYPE
      THEN DUP 0=
    UNTIL  DROP ;  IMMEDIATE

: [IF] \ 94 TOOLS EXT
\ Компиляция: Выполнить семантику выполнения, данную ниже.
\ Выполнение: ( flag | flag "<spaces>name..." -- )
\ Если флаг "истина", ничего не делать. Иначе, пропустив ведущие пробелы, 
\ выделять и отбрасывать ограниченные пробелами слова из разбираемой области,
\ включая вложенные [IF]...[THEN] и [IF]...[ELSE]...[THEN], до тех пор, пока не 
\ будет выделено и отброшено слово [ELSE] или [THEN].
\ Если разбираемая область опустошается, она снова заполняется по REFILL.
\ [ELSE] - слово немедленного исполнения.
  0= IF POSTPONE [ELSE] THEN
; IMMEDIATE

: [THEN] \ 94 TOOLS EXT
\ Компиляция: Выполнить семантику выполнения, данную ниже.
\ Выполнение: ( -- )
\ Ничего не делать. [THEN] - слово немедленного исполнения.
; IMMEDIATE

\ Ruvim Pinka additions:

: [DEFINED] ( -- f ) \ "name"
  NextWord  SFIND  IF DROP TRUE ELSE 2DROP FALSE THEN
; IMMEDIATE

: [UNDEFINED]  ( -- f ) \ "name"
  POSTPONE [DEFINED] 0=
; IMMEDIATE

