Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''WORD''' (слово, читается «ворд») — стандартное слово [[Каллисто]]. | | '''WORD''' (слово, читается «ворд») — стандартное слово [[Каллисто]]. |
| WORD ( c −− a ) Ввести слово до стоп−литеры c. | | WORD ( c −− a ) Ввести слово до стоп−литеры c. Дать его адрес как строки со счётчиком. |
| Дать его адрес, как строки со счётчиком.
| |
| Считывает одно слово из [[Входной буфер терминала|входного]] или [[Буфер|экранного]] буфера и размещает его, начиная с адреса [[HERE]] | | Считывает одно слово из [[Входной буфер терминала|входного]] или [[Буфер|экранного]] буфера и размещает его, начиная с адреса [[HERE]] |
| | |
| | Первый байт по адресу a содержит число символов в слове. Слово WORD кладёт адрес считанного слова в стек, как это требует Форт−79. Этот адрес a всегда равен [[HERE]] — как и в большинстве реализаций Форта. |
|
| |
|
| == Ввод слова WORD == | | == Ввод слова WORD == |
Строка 89: |
Строка 90: |
|
| |
|
| == Реализация == | | == Реализация == |
| Слово WORD кладёт адрес считанного слова в [[Стек данных|стек]], как это требует Форт. Этот адрес a всегда равен [[HERE]] — как и в большинстве реализаций Форта. Первый байт по адресу a содержит число символов в считанном слове. Фактически это уже заготовка для [[Поле имени|поля имени]] новой [[Словарная статья|словарной статьи]], ждущая своего [[ALLOT]].
| |
|
| |
| Длина имени слова ограничивается 31 литерой.
| |
| <pre>
| |
| 3167 ;#WORD
| |
| 3168 ; WORD ( c −− a ) Ввести слово до стоп−литеры c. Дать его адрес, как строки со счётчиком.
| |
| 3169 ; Считать одно слово из входного или экранного буфера и разместить его, начиная с адреса HERE
| |
| 3170 ; Первый байт содержит число литер в слове.
| |
| 3171 ; Положить адрес считанного слова на стек, как это требует Форт−79.
| |
| 3172 ; Этот адрес a всегда HERE −− как и в большинстве реализаций Форта.
| |
| 3173 LWORD: .DB 4
| |
| 3174 .TEXT "WORD" ; ( c "<c>ccc<c>" −− HERE )
| |
| 3175 .DW LPAD
| |
| 3176 WORD: .DW CALL, BLK,UAT, QDUP,ZBRAN,WD1, BLOCK, BRAN,WD2
| |
| 3177 WD1: .DW TIB
| |
| 3178 WD2: .DW IN,UAT, PLUS, SWAP, ENCL
| |
| 3179 .DW HERE, BL,BLANK ; BL == 32 ( 31 имя и 1 байт длины)
| |
| 3180 .DW IN,PSTOR, DUP,TOR, HERE,CSTOR
| |
| 3181 .DW HERE,ONEP, FROMR, CMOVE, HERE, EXIT
| |
| </pre>
| |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| : WORD ( char "<chars>ccc<char>" -- c-addr ) \ 94
| |
| \ Пропустить ведущие разделители. Выбрать символы, ограниченные
| |
| \ разделителем char.
| |
| \ Исключительная ситуация возникает, если длина извлеченной строки
| |
| \ больше максимальной длины строки со счетчиком.
| |
| \ c-addr - адрес переменной области, содержащей извлеченное слово
| |
| \ в виде строки со счетчиком.
| |
| \ Если разбираемая область пуста или содержит только разделители,
| |
| \ результирующая строка имеет нулевую длину.
| |
| \ В конец строки помещается пробел, не включаемый в длину строки.
| |
| \ Программа может изменять символы в строке.
| |
| DUP SKIP PARSE 255 MIN
| |
| DUP SYSTEM-PAD C! SYSTEM-PAD CHAR+ SWAP CMOVE
| |
| 0 SYSTEM-PAD COUNT CHARS + C!
| |
| SYSTEM-PAD
| |
| ;
| |
| </pre>
| |
|
| |
| === Советская реализация ===
| |
| Описание и определение слова WORD в ядре ФОРТ-ЕС: | | Описание и определение слова WORD в ядре ФОРТ-ЕС: |
| <PRE> | | <PRE> |
Строка 167: |
Строка 127: |
| [[Категория:Слова высокого уровня]] | | [[Категория:Слова высокого уровня]] |
| [[Категория:Интерпретация входного потока Каллисто]] | | [[Категория:Интерпретация входного потока Каллисто]] |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |