\ 94 CORE EXT : .R ( n1 n2 -- ) \ 94 CORE EXT \ Вывести на экран n1 выравненным вправо в поле шириной n2 символов. \ Если число символов, необходимое для изображения n1, больше чем n2, \ изображаются все цифры числа без ведущих пробелов в поле необходимой \ ширины. >R DUP >R ABS S>D <# #S R> SIGN #> R> OVER - 0 MAX SPACES TYPE ; : 0> ( n -- flag ) \ 94 CORE EXT \ flag "истина" тогда и только тогда, когда n больше нуля 0 > ; : MARKER ( "name" -- ) \ 94 CORE EXT \ Пропустить ведущие пробелы. Выделить name, ограниченное пробелами. \ Создать определение с семантикой выполнения, описанной ниже. \ name Выполнение: ( -- ) \ Восстановить распределение памяти словаря и указатели порядка поиска \ к состоянию, которое они имели перед определением name. Убрать \ определение name и все последующие определения. Не требуется \ обязательно восстанавливать любые оставшиеся структуры, которые \ могут быть связаны с удаленными определениями или освобожденным \ пространством данных. Никакая другая контекстуальная информация, \ как основание системы счисления, не изменяется. HERE \ [C]HERE , [E]HERE , GET-CURRENT , GET-ORDER DUP , 0 ?DO DUP , @ , LOOP CREATE , DOES> @ DUP \ ONLY \ DUP @ [C]DP ! CELL+ \ DUP @ [E]DP ! CELL+ DUP @ SET-CURRENT CELL+ DUP @ >R R@ CELLS 2* + 1 CELLS - R@ 0 ?DO DUP DUP @ SWAP CELL+ @ OVER ! SWAP 2 CELLS - LOOP DROP R> SET-ORDER DP ! ; : SAVE-INPUT ( -- xn ... x1 n ) \ 94 CORE EXT \ x1 - xn описывают текущее состояние спецификаций входного потока для \ последующего использования словом RESTORE-INPUT. SOURCE-ID 0> IF TIB #TIB @ 2DUP C/L 2 + ALLOCATE THROW DUP >R SWAP CMOVE R> TO TIB >IN @ SOURCE-ID FILE-POSITION THROW 5 ELSE BLK @ >IN @ 2 THEN ; : RESTORE-INPUT ( xn ... x1 n -- flag ) \ 94 CORE EXT \ Попытка восстановить спецификации входного потока к состоянию, \ описанному x1 - xn. flag "истина", если спецификации входного \ потока не могут быть восстановлены. \ Неопределенная ситуация возникает, если входной поток, \ представленный аргументами не тот же, что и текущий входной поток. SOURCE-ID 0> IF DUP 5 <> IF 0 ?DO DROP LOOP -1 EXIT THEN DROP SOURCE-ID REPOSITION-FILE ?DUP IF >R 2DROP DROP R> EXIT THEN >IN ! #TIB ! TO TIB FALSE ELSE DUP 2 <> IF 0 ?DO DROP LOOP -1 EXIT THEN DROP >IN ! BLK ! FALSE THEN ; : U.R ( u n -- ) \ 94 CORE EXT \ Вывести на экран u выравненным вправо в поле шириной n символов. \ Если число символов, необходимое для изображения u, больше чем n, \ изображаются все цифры числа без ведущих пробелов в поле необходимой \ ширины. >R U>D <# #S #> R> OVER - 0 MAX SPACES TYPE ; \EOF : UNUSED ( -- u ) \ 94 CORE EXT \ u - объем памяти, оставшейся в области, адресуемой HERE, \ в байтах. IMAGE-SIZE HERE IMAGE-BASE - - ;