[an error occurred while processing this directive]
.цв
Словарь языка Форт-Агат
.нф
В данный словарь, кроме слов Базового Форта, помещены дополнительные средства Форт-Агата, в частности, набор отладочных слов (u, words, ds и др.), экранный текстовый редактор edit, библиотека слов для обработки текстовых величин и библиотека арифметики вещественных чисел с плавающей десятичной точкой. Эти средства становятся доступными после загрузки системного файла float командой
RPROG FLOAT
Обозначения типа слова:
(var) - переменная (asm) - ассемблерное слово (bld) - определяющее слово (через CREATE .. DOES>) (cnst) -константа (vec) - векторное слово (flo) - слово из системного файла float (jsr) - слово-подпрограмма в машинных кодах. Может применяться только в определениях ассемблерных слов.
Слово, определенное через двоеточие, - не обозначено.
За именем слова в скобках описано состояние арифметического стека до исполнения слова и через символ '═→' после исполнения, при указании нескольких данных число справа находится на вершине стека. Обозначения здесь такие:
c - код символа (байт без знака) n - число со знаком u - число без знака d - двойное число со знаком ud - двойное число без знака b - байт (в стеке хранится в младшем байте двух- байтного слова) A - адрес; (A) - содержимое ячейки по адресу A f - флаг (т.е. 0, если false, и не 0, если true)
В примерах знак → означает результат исполнения слова на экране. Завершающее сообщение 'Ok' в примерах не приводится.
.кс-5
! (u A ═→) Записывает число u по адресу A
!CSP (═→) Копирует значение указателя арифметического стека в переменной CSP
# (d ═→ d) Продолжает форматный перевод двойного числа в счетную строку: делит d на текущее значение переменной BASE, частное кладет на стек, а остаток преобразует в код цифры и помещает в PAD, начиная с конца
#> (d ═→ A n) Завершает форматный перевод числа в счетную строку, кладет на стек ее адрес A и число символов n
#BUF (var) Число блоковых буферов в системе. При инициализации оно равно 2
#S (d ═→ 0 0) Продолжает форматный перевод двойного числа в счетную строку: выполняет операцию слова # со всеми оставшимися цифрами числа
¤! (A A1 ═→) Копирует счетную строку A в текстовой переменной A1
¤¤ (═→ A) Системная текстовая переменная длиной 255 знаков
¤+ (A A1 ═→) Выполняет конкатенацию строк A и A1, т.е. счетная строка A1 присоединяется к концу счетной строки A и образуется новая, удлиненная строка A
¤. (A ═→) Выводит счетную строку A на устройство вывода
¤COMPARE (asm,flo) (A1 A2 ═→ n) Сравнивает посимвольно две счетные строки и кладет на стек признак n результата:
если n=0, то более длинная строка имеет то же начало, что вся более короткая; если n=1, то первая больше второй, если n=-1, то первая меньше второй.
¤MSG (u ═→) Выводит на экран сообщение об ошибке, соответствующей ее номеру u; если 0 < u < 26, то выводится текстовое сообщение, если больше 25 - сообщение вида MSG # u
¤VAR (u ═→) Создает новую текстовую переменную в виде пустой счетной строки длиной u. Формат команды U ¤VAR <ИМЯ>
' (═→ A) Кладет на стек адрес поля параметров следующего слова входного потока
( (═→) Не интерпретируемый комментарий до символа ')'
(FIND) (A A1 ═→ A2 b f) Ищет в словаре слово по шаблону, находящемуся по адресу A. Поиск идет в сторону меньших адресов, начиная с адреса A1 поля имени какого-либо слова. Кладет на стек адрес A2 поля кода найденного слова, байт b длины его имени и флаг TRUE. Если слово не найдено, то кладет только флаг FALSE
(LINE) (n s ═→ A n1) Кладет на стек адрес A линии n листа s, а также длину n1 линии
(ULOOP) (═→) Применяется для организации версии цикла DO .. LOOP с беззнаковыми параметрами. Реализуется это так:
: ULOOP 3 ?RAIRS COMPILE (ULOOP) BACK ; После компиляции этого определения можно использовать цикл u u0 DO ... ULOOP, где u, u0 - беззнаковые параметры
(WORD) (c ═→ A n) Сканирует входной поток, игнорирует лидирующий символ-ограничитель 'c'. Кладет на стек начальный адрес A и длину n найденного текста, который оканчивается символом с кодом c
* (n1 n2 ═→ n3) Вычисляет n3=n1*n2
*/ (n1 n2 n3 ═→ n) Вычисляет n = n1*n2/n3, причем промежу- точное произведение n1*n2 - двойное число
*/MOD (n1 n2 n3 ═→ n4 n5) n4 - это остаток от деления про- изведения n1*n2 на n3; n5=n1*n2/n3
+ (n1 n2 ═→ n) Вычисляет сумму n двух чисел
+- (n1 n2 ═→ n) Оставляет на стеке число n1 со знаком n2
+! (n A ═→) Прибавляет n к числу по адресу A: (A)=(A)+n
+BUF (A ═→ A1 f) Продвигает адрес блочного буфера с A на адрес A1 начала следующего буфера. Флаг f=FALSE, если A1 есть адрес самого последнего из назначенных буферов
+LOOP (n ═→) В цикле DO ... +LOOP изменяет значение счетчика цикла на n. Цикл завершается, если 1) при n>0 счетчик цикла становтся равным или больше предельного значения, 2) при n<0 счетчик становится меньше предельного значения
, (u ═→) Записывает u по текущему адресу словаря (HERE) и увеличивает HERE на 2
- (n1 n2 ═→ n3) Вычисляет n3=n1-n2
═-> Обеспечивает переход к интерпретации следующего листа входного потока (если надо - с загрузкой с диска)
-1 (cnst) -1
-2 (cnst) -2
-FIND (A ═→ A1 b f) Использует очередное слово входного потока как шаблон для поиска слова в контекстном словаре. Найдя слово, помещает на стек его адрес поля кода, байт длины имени и флаг true, иначе - только флаг false. Перед исполнением -FIND на стеке должен лежать адрес A поля имени слова, стоящего в словаре дальше от начала, чем искомое слово. Обычно используется адрес поля имени последнего слова в данном контекстном словаре, напр., CONTEXT @ @ -FIND
-ROT (n1 n2 n3 ═→ n3 n1 n2) Осуществляет кольцевой сдвиг трех верхних чисел стека вверх
-TRAILING (A u1 ═→ A u2) Из несчетной строки с адресом A и длиной u1 исключает пробелы сзади и адрес A и новую длину u2 строки кладет на стек
. (n ═→) Выводит число n со знаком на экран
." (═→) В режиме компиляции: выводит на экран строку до закрывающих кавычек
.LINE (u s ═→) Выводит на экран текст линии u листа s без хвостовых пробелов
.R (n u ═→) Выводит значение n на экран выровненным по правому краю поля шириной u
.S Выводит на экран содержимое стека данных, оставляя стек неизменным
/ (n1 n2 ═→ n3) Вычисляет n3=n1/n2
/MOD (n1 n2 ═→ n3 n4) Вычисляет u4= u1/u2, а u3 это остаток от деления n1 на n2
0 (═→ 0) Кладет ноль на стек
0< (n ═→ f) Сравнивает число на стеке с нулем и кладет на стек флаг f результата: f=true, если n < 0, иначе f=false
0= (n ═→ f) Сравнивает число на стеке с нулем и кладет на стек флаг f результата: f=true, если n=0, иначе f=false
0> (n ═→ f) Сравнивает число на стеке с нулем и кладет на стек флаг f результата: f=true, если n > 0, иначе f=false
1 (═→ 1) Кладет 1 на стек
1+ (n ═→ n+1) Прибавляет 1 к n на стеке
1+! (A ═→) Прибавляет 1 к числу по адресу A: (A)= (A)+1
1- (n ═→ n-1) Вычитает 1 из n на стеке
1-! (A ═→) Вычитает 1 из числа по адресу A: (A)=(A)-1
2 (═→ 2) Кладет 2 на стек
2! (d A ═→) Записывает значение двойного числа d в двойную переменную A
2* (n ═→ 2*n) Удваивает n
2+ (n ═→ n+2) Прибавляет 2 к числу на стеке
2+! (A ═→) Прибавляет 2 к числу по адресу A: (A)= (A)+2
2- (n ═→ n-2) Вычитает 2 из числа на стеке
2-! (A ═→) Вычитает 2 из числа по адресу A: (A)=(A)-2
2/ (n ═→ n/2) Делит число в стеке на 2
2@ (A ═→ d) Заменяет в стеке адрес A двойной переменной ее значением d
2DROP (u1 u2 ═→) Снимает со стека 2 одинарных числа или одно двойное
2DUP (d ═→ d d) Дублирует двойное число (или 2 одинарных числа) на вершине стека
2OVER (d1 d2 ═→ d1 d2 d1) Кладет на вершину стека копию второго двойного числа в стеке
2ROT (d1 d2 d3 ═→ d2 d3 d1) Кольцевой сдвиг трех верхних двойных чисел вниз
2SWAP (d1 d2 ═→ d2 d1) Переставляет 2 верхних двойных числа на стеке
4HEX (u ═→ A u1) Преобразует число u в строку из 4-х 16-ричных цифр в буфере PAD. Кладет на стек адрес A буфера PAD и длину строки. Текущая система счисления не изменяется
79-STANDARD Сигнализирует, что версия соответствует стан- дарту FORTH-79
: (bld) (═→) Создает определение нового слова Форта тем, что компилирует слова входного потока (до слова ;), кроме первого, которое становится именем нового слова
; (bld) (═→) Завершает определение нового слова через двоеточие
;CODE (bld) Является ассемблерным заменителем слова DOES>. Прерывает компиляцию, завершает работу слова CREATE и исполняет слово ASSEMBLER. Используется для вставки ассемблерного кода в исполняемую часть создаваемого определяющего слова. Эта часть должна оканчиваться словом END-CODE
< (n1 n2 ═→ f) Сравнивает 2 числа на стеке и кладет на стек флаг f результата: f=true, если n1 < n2, иначе f=false
<# (asm) (d ═→ ) Инициализирует программу форматного преобразования двойного числа со знаком в счетную строку, расположенную по адресу PAD
<CMOVE (asm) (A1 A2 u ═→) Переносит u байтов с адреса А1 по адресу A2, начиная со старших адресов
= (u1 u2 ═→ f) Сравнивает 2 числа на стеке и кладет на стек флаг f результата: f=true, если u1=u2, иначе f=false
> (n1 n2 ═→ f) Сравнивает 2 числа на стеке и кладет на стек флаг f результата: f=true, если n1 > n2, иначе f=false
>CLI (A ═→) Исполняет командную строку дисковой операционной системы, хранящуюся по адресу A в виде счетной строки, которая должна оканчиваться кодами ¤8D и ¤00
>IN (var) Смещение обрабатываемого символа относительно начала входного потока. Проще говоря, это - номер позиции очередного символа во входном потоке (с клавиатуры или из блочного буфера)
>R (u ═→) Кладет число u на стек возвратов
? (A ═→) Выводит на экран содержимое ячейки по адресу A в виде числа со знаком
?COMP (═→) Сообщает об ошибке, если используется в режиме исполнения
?CSP (A ═→) Фиксирует ошибку, если указатель стека не равен содержимому CSP
?CURRENT (A ═→) Проверяет, что адрес A есть адрес поля параметров имени списка, в который намечено записать новые слова. Если это так, то ничего не выдается, иначе исполнение прекращается и выдается сообщение об ошибке: "Неверен CURRENT"
?DUP (n ═→ n n) Дублирует число на стеке, если оно не равно 0
?ERROR ( f N ═→) Если f не равно 0, то оставляет N на стеке, исключает f и исполняет слово error, иначе просто исключает f и N из стека
?EXEC (═→) Сообщает об ошибке, если используется в режиме компиляции
?KEY (n1 ═→ n2) Ожидает нажатия клавиши (без вывода курсора на экран) и кладет на стек ее код
?LOADING (═→) Сообщает об ошибке, если исполняется не в процессе компиляции
?PAIRS (u1 u2 ═→) Сообщает об ошибке, если u1 ≠ u2
?STACK Если стек данных пуст или полон, то выдает сообщение об ошибке при попытке обращения слова к стеку
@ (A ═→ u) Заменяет в стеке адрес A его содержимым u (т.е. разыменовывает A)
@EXECUTE (A ═→) Исполняет слово, адрес адреса компиляции которого лежит на стеке. Если A=0, то ничего не исполняется
ABORT (vec) (═→) По умолчанию инициализирован словом (ABORT), которое прекращает счет, сбрасывает стек данных, выполняет "теплый" старт WARM - слова пользователя остаются в словаре
ABS (n ═→ |n|) Вычисляет абсолютное значение числа n
ADD (jsr,flo) Суммирует распакованные float-числа в буферах buf1 и buf2 и кладет сумму в буфер buf3
AGAIN Передает управление к началу цикла BEGIN ... ADAIN
ALLOT (u ═→) Резервирует u байтов по адресу here и уве- личивает here на u
ALPHA (b ═→ c) Преобразует цифру b в код c печатаемого символа цифры (с учетом текущей системы счисления)
AND (u1 u2 ═→ u3) Кладет в стек результат u3 поразрядного логического умножения u1 и u2
ASC C (═→ b) Преобразует первый символ слова C , стоящего за ASC, в код b, который кладет на стек
ASSEMBLER Делает контекстным (т.е. доступным для текстового интерпретатора) список слов Ассемблера Форта
ASSIGN (═→ A) Кладет на стек адрес поля параметра слова, следующего за ASSIGN. Используется в форме
ASSIGN NNNN TODO CCCC которая объясняется в статье о слове TODO
AT <ИМЯ> (flo) (═→ A) Кладет на стек адрес quan-переменной <ИМЯ>
B/BUF (═→ 1024) Число байтов в текстовом блоке
B/SCR (═→ 1) Число текстовых блоков в одном листе
BACK (A ═→) Вычитает значение HERE из A и записывает разность по адресу HERE. Используется при вычислении относительного адреса перехода в словах AGAIN, UNTIL и т.д.
BASE (var) Текущее основание системы счисления
BEGIN (═→) Начальное слово циклов
begin .. f until и begin .. f while .. repeat
BEXP (flo) (═→) Вычисляет показательную функцию распакованного float-числа в буфере buf3. Результат формируется в том же буфере
bf. (asm,flo) (A ═→) Выводит распакованное float-число на экран из буфера A
bf10n* (flo) (n A ═→) Умножает на 10^n распакованное число в буфере A. Результат остается в том же буфере
BFIN (flo) (═→) Ожидает ввода float-числа с клавиатуры и вводит число в буфер buf3 в распакованном виде. При вводе не используется десятичная точка и лидирующие нули. Так например, число -0.0012345e-7 следует вводить как -12345e-14, а число 123.4567 - в виде 1234567e-4
BFPOW (flo) (u ═→) Возводит распакованное число в буфере buf3 в положительную целую степень u. Результат остается в том же буфере
BL (═→ b) Кладет на стек код пробела b=¤A0
BLANKS (A u ═→) Записывает u кодов пробела в последовательные байты, начиная с адреса A
BLK (var) Номер текущего обрабатываемого текстового блока; если 0, то входной поток поступает из буфера клавиатуры
BLN (flo) (═→) Вычисляет натуральный логарифм распакованного числа в буфере buf3. Результат формируется в том же буфере
BLOCK (u ═→ A) Кладет на стек адрес A буфера, где хранится лист u; если листа нет в памяти, он загружается с диска
BSQR (flo) (═→) Вычисляет квадратный корень распакованного числа в буфере buf3. Результат формируется в том же буфере
BFPOR (flo) (═→) Преобразует одно- или двух-значное целое число, хранящееся в переменной por в распакованное float-число в буфере buf2
buf1, buf2, buf3, buf4 и buf5 (flo) (═→ A) Системные текстовые переменные длиной по 23 байта, используемые в качестве рабочих буферов для ввода float-числа с клавиатуры (buf3) и операций над распакованными float-числами
BUFARRAY (bld,flo) (u ═→) Определяющее слово для создания массива из u текстовых переменных длиной по 13 байт, которые могут служить буферами для распакованных float-чисел с длиной мантиссы до 9 знаков
BUFFER (u ═→ A) Кладет на стек адрес A буфера для листа u. При этом сам лист не читается с диска, но если буфер u занят блоком, который помечен как UPDATE, то он записывается на диск, освобождая буфер. Номер u записывается в первые 2 байта выделенного буфера
BUFINS (flo) (═→ A) Системная текстовая переменная длиной 64 знака для хранения строки текста, который можно вставлять на линии экранного редактора (клавишей f0)
BUFSZ (cnst) Общая длина текстового буфера (¤404)
BYE Выход из Форта в Best
C! (b A ═→) Записывает байт b по адресу A
C, (b ═→) Записывает байт b по текущему адресу памяти (HERE) и увеличивает значение HERE на 1
C/L (cnst) Длина линии листа (64 байта)
C@ (A ═→ b) Заменяет адрес A байта его значением b
CFA (A1 ═→ A) Преобразует адрес A1 поля параметров слова в адрес A поля кода (т.е. адрес компиляции)
CMOVE (A1 A2 u ═→) Пересылает u байтов с адреса A1 по адресу A2 (начиная с начала массива)
CMOVE> (A1 A2 b ═→) Пересылает b байтов с адреса A1 по адресу A2 (начиная с конца текста). Работает быстрее <CMOVE, но b не может быть больше 127
CODE (bld) Создает заголовок словарной статьи на Ассембле- ре. Применяется в структуре CODE ... END-CODE
COLD Инициализирует Форт-систему как WARM, но дополнительно исключает из словаря все слова, введенные пользователем
COMPILE (═→) Используют в структуре
: <ИМЯ> ... compile <ИМЯ1> ... ; При исполнении слова <ИМЯ> слово <ИМЯ1> не исполняет- ся, а только компилируется, т.е. в словарной статье формируется адрес поля кода слова <ИМЯ1>. Обычно слово <ИМЯ> - немедленного исполнения, а <ИМЯ1> - обычное
CONSTANT (bld) (u ═→) Определяет имя числовой константы и ее значение u. Применяется в виде: u constant <имя>
CONTEXT (var) Адрес поля имени последнего слова в контекс- тном списке, т.е. в списке, доступном для текстового интерпретатора
CONVERT (d A ═→ d1 A1) Преобразует счетную строку символов по адресу A в двойное число, суммирует его с двойным числом d на стеке и оставляет на стеке сумму d1 и адрес A1 первого нецифрового символа строки
COUNT (A1 ═→ A2 u) Кладет на стек адрес A2 первого символа счетной строки A1, а также ее длину u
CR (═→) Осуществляет перевод строки
CRCOD (cnst) Код клавиши перевода строки (¤8D)
CREATE (vec) (═→) По умолчанию инициализировано словом (CREATE), которое создает заголовок словарной статьи для нового слова с именем, стоящим следующим во входном потоке. Применяется самостоятельно и в определениях через двоеточие в структурах
: <ИМЯ> CREATE...DOES>...; : <ИМЯ> CREATE ... ;CODE ... END-CODE При самостоятельном применении порождает слово типа массива, которое при исполнении кладет на стек адрес своего поля параметров. Так команда CREATE VECS ] A B C D [ создает в словаре массив VECS адресов поля кода слов A, B, C и D. При исполнении слова VECS на стек данных будет положен адрес первого числа этого массива, т.е. адрес адреса поля кода слова A.
CREATE-SCREENS Создает на диске серию из 20 файлов для размещения 9 листов текста каждый. Запись и чтение этих файлов выполняются автоматически словами BLOCK, LIST, LOAD, SAVE и др.
CRTXT (═→) Счетная строка, содержащая коды ¤8D и ¤00
CSP (═→ A) Переменная для контроля содержимого указателя стека при компиляции
CURRENT (var) Адрес поля имени последнего слова в текущем списке компиляции
CUTIN¤ (asm,flo) (A n A1 ═→ A3) Врезает строку A1 внутрь строки A, начиная с символа n. Сохраняет удлиненную строку в системной переменной ¤¤, адрес A3 которой оставляет на вершине стека. Максимальная длина строки с врезкой 127 символов. См. также слово LCUTIN¤
D+ (d1 d2 ═→ d3) Вычисляет d3=d1+d2
D+- (d1 n ═→ d) Оставляет на стеке двойное число d1 со знаком числа n
D. (d ═→) Выводит двойное число d на экран
D.R (d u ═→) Выводит число d на экран выровненным по правому краю поля шириной u
D< (d1 d2 ═→ f) f=true, если d1<d2, иначе f=false
DABS (d ═→ |d|) Заменяет на стеке двойное число d его абсолютным значением
DEC. (n ═→) Выводит на экран число n в десятичной системе, не изменяя текущего значения BASE
DECIMAL (═→) Устанавливает ввод и вывод чисел в десятичной системе
DEFINITIONS Делает контекстный список слов текущим, т.е. готовым для включения в него определения нового слова Форта
DEPTH (═→ u) Кладет на стек число чисел в стеке (в пере- счете на одинарные)
DIGIT (u1 u2 ═→ n f) Преобразует код u1 символа в число n по основанию u2 и кладет на стек число n и флаг f: f=true, если перевод был удачным, иначе f=false
DLITERAL (ud ═→) При STATE=1 компилирует адрес поля кода слова dlit и переносит в словарную статью двойное число с вершины стека. При STATE=0 ничего не выполняет
DNEGATE (d ═→ -d) Изменяет знак двойного числа на стеке на противоположный
DO (n1 n0 ═→) Задает цикл со счетчиком DO...LOOP или DO...+LOOP, где n1, n0 - предельное и начальное значение счетчика
DOES> (═→) Используется при создании определяющих слов в структуре : <ИМЯ> CREATE ... DOES> ... ;
Записывает в поле параметров создаваемого слова <ИМЯ> адрес исполнительной части этого слова (т.е. последова- тельности слов, стоящей за DOES>. При исполнении слова, созданного определяющим словом <ИМЯ>, на стек кладется адрес на 2 больший, чем адрес поля параметра данного слова, и начинает исполняться последовательность слов, стоящая после DOES> в определяющем слове <ИМЯ>
DOVEC (A A1 ═→) Преобразует адрес A1 поля параметра в адрес поля кода и записывает его по адресу A. Используется при определении векторных слов
DP (var) Адрес первого свободного байта словаря (для HERE)
DPL (var) Позиция десятичной точки во введенном числе
DROP (u ═→) Исключает число с вершины стека
DS <ИМЯ> (flo) (═→) Выводит на экран дамп слова <ИМЯ>
DUP (u ═→ u u) Дублирует одинарное число на стеке
E (flo) (n ═→) Команда возврата из Форта в экранный редактор EDIT после временного выхода из него
ee (cnst,flo) Число e=2.718282
EDIT (flo) (n ═→) Запускает экранный текстовый редактор EDIT и выводит на экран для редактирования лист номер n
EDITOR (═→) Подключает, т.е. делает доступным встроенный редактор текста
ELSE (═→) Заголовок части ИНАЧЕ структуры ветвления
f IF .. ELSE .. THEN которая исполняется, если флаг f= false
EMIT (vec) (c ═→) По умолчанию инициализирован словом (EMIT), которое выводит на устройство вывода символ, код которого - на вершине стека. Увеличивает на 1 значение переменной OUT
EMPTY (flo) (A ═→) Обнуляет все байты системного буфера A
EMPTY-BUFFERS Отмечает все блочные буферы как пустые и обнуляет их содержимое. Обновленные блоки на диск не записываются
ENCLOSE (asm) (A c ═→ A n1 n2 n3) Вспомогательное слово, используемое (WORD): выделяет из входного потока лексему, ограниченную символом c
ERASE (A n ═→) Обнуляет n байтов памяти, начиная с адреса A
ERROR (n ═→) Выдает сообщение об ошибке номер n
ESCAPE Прерывает программу, сбрасывает стек данных, выводит сообщение "Escape" и выполняет слово QUIT
EXECUTE (A n ═→) Исполняет слово, адрес компиляции которого A лежит на стеке
EXIT (═→) Выполняет немедленный выход из текущего слова. Используется также для окончания интерпретации входного потока из блочного буфера
EXP (flo) (d1 ═→ d2) Вычисляет показательную функцию float-числа d1 (т.е. e^d1) и кладет результат d2 на стек во float-формате. Значение d1 не должно превышать 71.38013
EXPECT (A u ═→) Ожидает ввода с клавиатуры u символов и размещает их с адреса A. Клавиши управления отрабатываются, но не записываются в память. Ввод завершается клавишей ВВОД (код &8D) или вводом максимально допустимого числа символов. Обнуляет 2 байта после последнего символа.
EXVEC: (bld) Создает векторное слово с пустым исполнительным вектором и именем, следующим за EXVEC:
F-1 (cnst,flo) (═→ d) -1 во float-формате
F. (flo) (d ═→) Выводит из стека на экран двойное число в float-формате, преобразуя его в число с плавающей десятичной точкой, порядком и знаком, например вида:
-0.1234567е-19
F+ (flo) (d1 d2 ═→ d3) Суммирует float-числа d1 и d2 и кладет на стек их сумму d3
F- (flo) (d1 d2 ═→ d3) Вычитает float-число d2 из float-числа d1 и кладет разность d3 на стек
F* (flo) (d1 d2 ═→ d3) Перемножает двойные числа d1 и d2 в float-формате и кладет на стек произведение d3 в том же формате
F/ (flo) (d1 d2 ═→ d3) Делит float-число d1 на float-число d2 и кладет частное d3 на стек в float-формате
F0 (flo) (cnst) (═→ d) Кладет на стек число 0 во float-формате
F0= (flo) (d ═→ f) Кладет на стек флаг f: если float-число d равно 0, то f=true, иначе f=false
F0> (flo) (d ═→ f) Кладет на стек флаг f: если float-число d больше 0, то f=true, иначе f=false
F0< (flo) (d ═→ f) Кладет на стек флаг f: если float-число d меньше 0, то f=true, иначе f=false
F1 (cnst,flo) (═→ d) float-единица
F2 (cnst,flo) (═→ d) float-двойка
F> (flo) (d1 d2 ═→ f) Если d1>d2, то f=true, иначе f=false
F< (flo) (d1 d2 ═→ f) Если d1<d2, то f=true, иначе f=false
FABS (flo) (d ═→ |d|) Вычисляет и кладет на стек абсолютное значение float-числа d во float-формате
FADD (asm,flo) (═→) Суммирует распакованные float-числа, расположенные в буферах buf1 и buf2, и кладет сумму в буфер buf3 в виде распакованного float-числа
FC (flo,bld) (d ═→) Определяющее слово для создания float-константы со значением d. Например, если на стеке лежит число -12.34567e-7 во float-формате, то команда fc bbb создает float-константу bbb со значением -0.1234567e-5. В дальнейшем, при исполнении слова bbb на стек кладется это значение во float-формате
FDIV (asm,flo) (═→) Делит распакованные float-числа, расположенные в буферах buf1 и buf2, и кладет частное (buf1)/(buf2) в буфер buf3 в виде распакованного float-числа
FENCE (var) Старший адрес области словаря в ОЗУ, внутри которой не действует слово forget. Пример: here fence ! В результате весь текущий словарь будет защищен
FILL (A u b ═→) Заполняет u байтов памяти, начиная с адреса A, значением байта b
FIND (═→ A) Ищет слово в словаре по шаблону, стоящему вслед за FIND. Найдя, кладет его адрес поля кода на стек, иначе кладет 0
FIRST (cnst) Кладет на стек адрес начала области блочных буферов
FLOIN (flo) (═→ d) Ожидает ввода числа в формате с плавающей точкой, например:
.цв
-1234.567е-23
.нф
.кс-5
вводит число в текстовую переменную buf3, преобразует ее в двойное число в специальном формате (float-формате), которое кладет на стек
FLUSH Записывает содержимое всех обновленных блочных буферов на диск и отмечает все блочные буфера как пустые. Используется при смене дискет
FMUL (asm,flo) (═→) Перемножает распакованные float-числа, расположенные в буферах buf1 и buf2, и кладет произведение в буфер buf3 в виде распакованного float-числа
FNAME (═→ A) Кладет на стек адрес текущего имени файла для хранения текстовых блоков
FNEGATE (flo) (d ═→ -d) Изменяет знак float-числа в стеке на противоположный
FORGET (═→) Исключает из словаря слово с указанным далее именем и все слова, введенные после него
FORTH (═→) Делает контекстным, т.е. доступным для текстового интерпретатора только основной словарь Форта, отключая все подключенные к нему списки
FPOR (flo) (d ═→ d n) Кладет на стек порядок n float-числа d без снятия самого числа d со стека
FRACT (flo) (═→) Вычисляет дробную часть распакованного числа в буфере buf3. Результат формируется в том же буфере
FSIGN (flo) (d ═→ d n) Кладет на стек код n знака float-числа d: если d>=0, то n=40, иначе n=0
FSUB (asm,flo) (═→) Вычитает распакованные float-числа, расположенные в буферах buf1 и buf2, и кладет разность (buf1)-(buf2) в буфер buf3 в виде распакованного float-числа
FVAL (flo) (A A1 ═→) Преобразует первое вхождение вещественного числа в строке текста A1 в распакованное float-число по адресу A. Формат вещественного числа при этом должен соответствовать формату ввода словом bfin, т.е. не должен включать десятичную точку и лидрующие нули
FVAR (flo,bld) Определяющее слово для создания буфера для распакованной float-переменной. Формат команды: fvar ИМЯ. Значение распакованной переменной присваивается словами intflo, fval, unpack или move
GETS (A ═→) Вводит текст с клавиатуры и оформляет его по адресу A в виде счетной строки длиной не более 255 символов. Применяется для присвоения значения текстовым переменным
H. (n ═→) Выводит на экран число n в 16-ричной системе, не изменяя текущего значения BASE
HERE (═→ A) Кладет на стек текущий адрес первой свободной ячейки словаря
HEX (═→) Устанавливает вывод чисел в 16-ричной форме (система по умолчанию и после обработки ошибки устанавливает DECIMAL )
HIMEM (═→ A) Кладет на стек старший адрес пользовательской памяти, точнее адрес первого байта после нее. Совпадает с адресом экранной памяти
HLD (var) Адрес последнего символа, введенного в строку в PAD при форматном преобразовании числа
HOLD (u ═→) Продолжает форматное преобразование числа в строку: присоединяет (слева) к строке символ с кодом u
I (asm) (═→ u) Кладет на стек данных текущее значение вершины стека возвратов (например счетчика исполняемого цикла DO .. LOOP) без изменения состояния стека возвратов
I' (asm) (═→ n) Кладет на стек данных копию числа из второй от вершины стека возвратов ячейки (без изменения стека возвратов)
ID. (A ═→) Выводит на экран имя слова Форта по адресу A его поля имени
IF (f ═→) Заголовок первой части (ЕСЛИ ТО) структуры ус- ловного ветвления f if .. else .. then, которая исполняется, если флаг f=true
IMMEDIATE (═→) Присваивает вновь определенному слову при- знак немедленного исполнения. Ставится после слова ';'
INDEX (u1 u2 ═→) Выводит на экран тексты нулевых линий листов с u1 по u2
INTERPRET (═→) Интерпретирует входной поток (до нулевого байта), используя указатели BLK и >IN
INTFLO (flo) (d A ═→) Преобразует двойное целое число d в распакованное float-число и помещает его в буфер A
J (═→ n) Кладет на стек текущее значение n управляющей переменной внешнего цикла структуры
DO ... DO ... J ... LOOP ... LOOP
KEY (vec) (═→ C) По умолчанию инициализировано словом (KEY), которое выводит на экран курсор, ожидает нажатия клавиши и кладет на стек ее код C
LAST (═→ A) Кладет на стек адрес поля имени последнего слова в текущем списке компиляции
LCUTIN¤ (flo) (A n A1═→) Врезка строки A1 в строку A в месте символа n. Работает так же, как и cutin¤, но вдвое медленнее, но зато длина строки с врезкой может достигать 255 символов
LEAVE (═→) Кладет на стек возвратов число, равное числу на его вершине, что приводит к выходу из цикла DO .. LOOP
LEFT¤ (asm,flo) (A1 n ═→ A) Копирует в PAD n первых символов счетной строки A1
LEN (flo) (A ═→ n) Кладет на стек максимально возможную длину n текстовой переменной A
LFA (A1 ═→ A2) Преобразует адрес A1 поля кода в адрес A2 поля связи словарной статьи
LIMIT (cnst) Адрес первого свободного байта после области блочных буферов
LINE (u ═→ A) Кладет на стек адрес A начала линии u теку- щего листа
LIST (u ═→) Выводит на экран лист u, если надо загружая его с диска. Нумерация листов - десятичная
LIT (═→) При компиляции переносит число из потока ввода на стек
.стСловарь Форт-Агат1
[an error occurred while processing this directive]