kolibrios/programs/develop/SPForth/lib/include/core-ext.f
Kirill Lipatov (Leency) 09488af869 KolSPForth12 uploaded to SVN
git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-04-21 19:22:58 +00:00

81 lines
2.8 KiB
Forth
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\ 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 ( "<spaces>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 - -
;