Слово TYPE: различия между версиями
AtH (обсуждение | вклад) (→Ссылки) |
AtH (обсуждение | вклад) |
||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''TYPE''' (печать, напечатать) — стандартное слово [[Каллисто]]. | '''TYPE''' (печать, напечатать) — стандартное слово [[Каллисто]]. Передаёт u [[Знакогенератор|литер]], начиная с адреса a, на [[индикатор]]. | ||
TYPE ( a u −− ) Напечатать на индикаторе u литер от адреса a. | |||
[[Стек данных|Стек]] при обращении к TYPE должен содержать адрес, начиная с которого надо начать вывод, и число выводимых символов (последнее лежит наверху [[Стек данных|стека]]) | [[Стек данных|Стек]] при обращении к TYPE должен содержать [[Единое адресное пространство|адрес]], начиная с которого надо начать вывод, и число выводимых символов (последнее лежит наверху [[Стек данных|стека]]). | ||
== Ввод слова TYPE == | == Ввод слова TYPE == | ||
Строка 9: | Строка 7: | ||
== TYPE в стандарте ANS Forth == | == TYPE в стандарте ANS Forth == | ||
<PRE> | |||
6.1.2310 TYPE CORE | 6.1.2310 TYPE CORE | ||
( c-addr u -- ) | ( c-addr u -- ) | ||
Строка 23: | Строка 22: | ||
См.: 6.1.1320 EMIT. | См.: 6.1.1320 EMIT. | ||
</PRE> | |||
== История == | |||
Слово TYPE является одним из наиболее старых и устоявшихся слов Форта. | |||
TYPE появился в Форте в 1965 году, когда Чак Мур подрабатывал наёмным программистом в городе Нью-Йорк. Тогда появились миникомпьютеры, а с ними и терминалы. Интерпретатор был идеален для ввода с телетайпа и вскоре стал включать код для работы с выводом. | |||
Слово TYPE появилось, как цикл, вызывающий [[EMIT]] для отображения символов. В [[Каллисто]] TYPE работает быстрее, т.к [[ГРФ|обновляет экран]] после вывода всей строки, а [[EMIT]] — после каждого символа. | |||
== TYPE в предыдущем стандарте Forth-83 (англ.) == | === TYPE в предыдущем стандарте Forth-83 (англ.) === | ||
<PRE> | |||
TYPE addr +n -- M,79 | TYPE addr +n -- M,79 | ||
+n characters are displayed from memory beginning with the | +n characters are displayed from memory beginning with the | ||
Строка 36: | Строка 44: | ||
devices of control characters, the use of ASCII control | devices of control characters, the use of ASCII control | ||
characters is an environmental dependency. | characters is an environmental dependency. | ||
</PRE> | |||
== TYPE в стандарте Forth-79 (англ.) == | === TYPE в стандарте Forth-79 (англ.) === | ||
TYPE addr n -- 222 | TYPE addr n -- 222 | ||
Transmit n characters beginning at address to the current | Transmit n characters beginning at address to the current | ||
Строка 43: | Строка 52: | ||
to zero. | to zero. | ||
== TYPE в fig-FORTH Release 1 glossary, май 1979 (англ.) == | === TYPE в fig-FORTH Release 1 glossary, май 1979 (англ.) === | ||
TYPE addr count --- L0 | TYPE addr count --- L0 | ||
Transmit count characters from addr to the selected output device. | Transmit count characters from addr to the selected output device. | ||
== | == Реализация == | ||
В [[Каллисто|Каллисто 1.0]] слово TYPE может выводить символы как из [[Память двоичных данных|области данных]], так и из [[Память программ|памяти программ]]: | |||
<pre> | |||
604 ;#TYPE | |||
605 ; TYPE ( a u −− ) Напечатать на индикаторе u литер от адреса a. | |||
606 ; Передать u литер, начиная с адреса a на индикатор. | |||
607 ; Подразумеваем, что строка не пересекает границу областей памяти. | |||
608 LTYPE: .DB 4 | |||
609 .TEXT "TYPE" | |||
610 .DW LLIT | |||
611 TYPE: .DW JTYPE ; Примитив | |||
612 JTYPE: RM3 M8 1 + MB 1 + M3 | |||
613 KRM8 M0 +/− KX<09 ; R0 := длина | |||
614 KRMB MB 1 EE 4 − FX<0 TYPER | |||
615 RMB | |||
616 TYPEP: KPRGM PGSB CHPUT ; вывести очередную литеру из памяти программ | |||
617 RMB 1 + MB FL0 TYPEP | |||
618 KGRPH KGOTO9 ; NEXT | |||
619 TYPER: 1 − M5 | |||
620 TYPERL: KRM5 PGSB CHPUT ; вывести очередную литеру из регистровой памяти | |||
621 FL0 TYPERL | |||
622 KGRPH KGOTO9 ; NEXT | |||
</pre> | |||
Реализация из SP-Forth 4.20: | |||
<pre> | |||
: TYPE1 ( c-addr u -- ) \ 94 | |||
\ Если u>0 - вывести строку символов, заданную c-addr и u. | |||
\ Программы, использующие управляющие символы, зависят от окружения. | |||
ANSI><OEM | |||
2DUP TO-LOG | |||
H-STDOUT DUP 0 > IF WRITE-FILE THROW ELSE 2DROP DROP THEN | |||
; | |||
TYPE | ' TYPE1 ' TYPE TC-VECT! | ||
</pre> | |||
=== Советская реализация === | |||
== | |||
У Баранова-Ноздрунова приводится следующее описание слова TYPE (стр. 34): | У Баранова-Ноздрунова приводится следующее описание слова TYPE (стр. 34): | ||
: TYPE ( A,N ---> ) FOR ↑ C@ EMIT 1+ NEXT DROP ; | : TYPE ( A,N ---> ) FOR ↑ C@ EMIT 1+ NEXT DROP ; | ||
Строка 79: | Строка 117: | ||
== Ссылки == | == Ссылки == | ||
* {{Исходник|TYPE|TYPE}} | |||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2310 TYPE] в стандарте ANS Forth ''(англ.)'' | * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2310 TYPE] в стандарте ANS Forth ''(англ.)'' | ||
* Слово [http://forth-standard.org/standard/core/TYPE TYPE] в черновике Forth 200x ''(англ.)'' | * Слово [http://forth-standard.org/standard/core/TYPE TYPE] в черновике Forth 200x ''(англ.)'' | ||
Строка 92: | Строка 131: | ||
[[Категория:Примитивы]] | [[Категория:Примитивы]] | ||
[[Категория:Терминальный ввод/вывод Каллисто]] | [[Категория:Терминальный ввод/вывод Каллисто]] | ||
[[Категория: | [[Категория:Стандартные слова]] | ||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 17:58, 10 ноября 2017
TYPE (печать, напечатать) — стандартное слово Каллисто. Передаёт u литер, начиная с адреса a, на индикатор.
TYPE ( a u −− ) Напечатать на индикаторе u литер от адреса a.
Стек при обращении к TYPE должен содержать адрес, начиная с которого надо начать вывод, и число выводимых символов (последнее лежит наверху стека).
Ввод слова TYPE[править]
В режиме ЛАТ последовательно нажмите четыре клавиши 2 , 6 ИП
TYPE в стандарте ANS Forth[править]
6.1.2310 TYPE CORE ( c-addr u -- ) Если u больше нуля, отображает символьную строку, определенную c- addr и u. Когда просматривается символ, чьи символом-определенные биты имеют значение между hex 20 и 7E включительно, отображается соответствующий стандартный символ, определенный в 3.1.2.1 Графические символы. Поскольку различные устройства вывода могут реагировать по-разному на управляющие символы, программы, использующие управляющие символы для выполнения специфических функций, имеют зависимость от окружения. См.: 6.1.1320 EMIT.
История[править]
Слово TYPE является одним из наиболее старых и устоявшихся слов Форта.
TYPE появился в Форте в 1965 году, когда Чак Мур подрабатывал наёмным программистом в городе Нью-Йорк. Тогда появились миникомпьютеры, а с ними и терминалы. Интерпретатор был идеален для ввода с телетайпа и вскоре стал включать код для работы с выводом.
Слово TYPE появилось, как цикл, вызывающий EMIT для отображения символов. В Каллисто TYPE работает быстрее, т.к обновляет экран после вывода всей строки, а EMIT — после каждого символа.
TYPE в предыдущем стандарте Forth-83 (англ.)[править]
TYPE addr +n -- M,79 +n characters are displayed from memory beginning with the character at addr and continuing through consecutive addresses. Nothing is displayed if +n is zero. See: "9.5.4 TYPE" 9.5.4 TYPE Because of the potential non-transportable action by terminal devices of control characters, the use of ASCII control characters is an environmental dependency.
TYPE в стандарте Forth-79 (англ.)[править]
TYPE addr n -- 222 Transmit n characters beginning at address to the current output device. No action takes place for n less than or equal to zero.
TYPE в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
TYPE addr count --- L0 Transmit count characters from addr to the selected output device.
Реализация[править]
В Каллисто 1.0 слово TYPE может выводить символы как из области данных, так и из памяти программ:
604 ;#TYPE 605 ; TYPE ( a u −− ) Напечатать на индикаторе u литер от адреса a. 606 ; Передать u литер, начиная с адреса a на индикатор. 607 ; Подразумеваем, что строка не пересекает границу областей памяти. 608 LTYPE: .DB 4 609 .TEXT "TYPE" 610 .DW LLIT 611 TYPE: .DW JTYPE ; Примитив 612 JTYPE: RM3 M8 1 + MB 1 + M3 613 KRM8 M0 +/− KX<09 ; R0 := длина 614 KRMB MB 1 EE 4 − FX<0 TYPER 615 RMB 616 TYPEP: KPRGM PGSB CHPUT ; вывести очередную литеру из памяти программ 617 RMB 1 + MB FL0 TYPEP 618 KGRPH KGOTO9 ; NEXT 619 TYPER: 1 − M5 620 TYPERL: KRM5 PGSB CHPUT ; вывести очередную литеру из регистровой памяти 621 FL0 TYPERL 622 KGRPH KGOTO9 ; NEXT
Реализация из SP-Forth 4.20:
: TYPE1 ( c-addr u -- ) \ 94 \ Если u>0 - вывести строку символов, заданную c-addr и u. \ Программы, использующие управляющие символы, зависят от окружения. ANSI><OEM 2DUP TO-LOG H-STDOUT DUP 0 > IF WRITE-FILE THROW ELSE 2DROP DROP THEN ; ' TYPE1 ' TYPE TC-VECT!
Советская реализация[править]
У Баранова-Ноздрунова приводится следующее описание слова TYPE (стр. 34):
: TYPE ( A,N ---> ) FOR ↑ C@ EMIT 1+ NEXT DROP ;
Слово TYPE в ФОРТ-ЕС было примитивом. Вот его описание и опубликованная часть определения:
TYPE A,+N-> НАПЕЧАТАТЬ НА ТЕРМИНАЛЕ +N ЛИТЕР 6 ОТ АДРЕСА А Экран номер 6 ( 09.09.86 KEY CR EMIT TYPE (EXPECT/ RBLK MBLK ) ( следующие определения дают только имена процедур) CODE TYPE ( A,N-> ВЫВЕСТИ HА TEPМИНАЛ N ЛИТЕР ПО АДРЕСУ A) END-CODE
Определение слова TYPE в FORTH ИТЭФ:
HEAD 204Q,'TYP',305Q,$TYPE,$COL ; TYPE DW DDUP,ZBRAN,TC1-$,ZERO,XDO TC0: DW DUBL,I,PLUS,CAT,LIT,177Q,$AND DW ONE,EMI$,XLOOP,TC0-$ TC1: DW DROP,SEMI
Ссылки[править]
- Исходный текст слова TYPE в Каллисто Классик 1.0
- Слово TYPE в стандарте ANS Forth (англ.)
- Слово TYPE в черновике Forth 200x (англ.)
- См. также стандартное слово TYPE1
- ВВОД-ВЫВОД в книге Л.Броуди «Начальный курс программирования на языке Форт»
- A Number of Kinds of Numbers в книге Leo Brodie Starting Forth (англ.)
- I/O and You в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |