Слово TYPE: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
Строка 78: Строка 78:
  621                FL0 TYPERL
  621                FL0 TYPERL
  622                KGRPH  KGOTO9                  ; NEXT
  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
;
' TYPE1 ' TYPE TC-VECT!
</pre>
</pre>



Текущая версия от 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

Ссылки[править]


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.