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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показано 9 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''↵''' (возврат каретки, стрелка вниз с поворотом влево) — встроенное слово [[Каллисто]].
'''↵''' (возврат каретки, стрелка вниз с поворотом влево) — адаптированное слово [[Каллисто]].
  ↵              ( -- )                          Возврат каретки. Продолжить вывод с начала следующей строки.
  ↵              ( -- )                          Возврат каретки. Продолжить вывод с начала следующей строки.
[[Файл:CRdotS.png|thumb|right|264px|Пример работы слова ↵]]
[[Файл:CRdotS.png|thumb|right|264px|Пример работы слова ↵]]
Строка 33: Строка 33:


== Реализация ==
== Реализация ==
<pre>
214 ; Обычно код располагается в теле примитива, но мы хотим использовать 2−х байтовые ПП
215 JCR:            PGSB CHPUTCR GSB CHPUTLF KGOTO9 ; Обработчик CR
216
217 CHPUTLF:        PPRM9000 <−>                    ; Нам важна координата y курсора
218                PPRM rrCHH +                    ; Увеличить на высоту данного шрифта
219                65 FANS − − PX<0 CHPUTSCROLL    ; Прокрутка экрана, если не вмещаемся
220                FANS + <−> PPM9000 RTN          ; Обычный LF вниз на rrCHH строк
221 CHPUTCR:        PPRM9000 Cx PPM9000 RTN        ; CR
222 CHPUTSCROLL:    PPRM rrSCRLN PKM19              ; Прокрутить на то число линий, на которое данный шрифт прокручивается
223                PPRM 9000 <−>                  ; Позиция курсора по y
224                PPRM rrSCRLFIX −                ; Корректировать, ведь прокрутка у МК−161 слишком грубая
225                <−> PPM 9000 RTN                ; Устанавить курсор на новую позицию и выйти
1010 ;#CR
1011 ; &crarr;                ( −− )                              Возврат каретки. Продолжить вывод с начала следующей строки.
1012 LCR:            .DB    1,192
1013                .DW    LCDOT
1014 CR:            .DW    JCR                    ; Ради оптимизации обработчик перенесён поближе к CHPUT
</pre>
Реализация из SP-Forth 4.20:
<pre>
HEX
CREATE LT 0A0D , \ line terminator
CREATE LTL 2 ,  \ line terminator length
: DOS-LINES ( -- )
  0A0D LT ! 2 LTL !
;
: UNIX-LINES ( -- )
  0A0A LT ! 1 LTL !
;
DECIMAL
\ Разделитель строк
: EOLN ( -- a u ) LT LTL @ ;
UNIX-ENVIRONMENT [IF]
: NATIVE-LINES UNIX-LINES ;
[ELSE]
: NATIVE-LINES DOS-LINES ;
[THEN]
: CR ( -- ) \ 94
\ Перевод строки.
  EOLN TYPE
;
</pre>
=== Советская реализация ===
Слово ↵ в ФОРТ-ЕС называлось CR и было [[примитив]]ом. Вот его описание и опубликованная часть определения:
Слово ↵ в ФОРТ-ЕС называлось CR и было [[примитив]]ом. Вот его описание и опубликованная часть определения:
<PRE>
<PRE>
Строка 85: Строка 137:
== Ссылки ==
== Ссылки ==
* {{Исходник|CR|↵}}
* {{Исходник|CR|↵}}
* См. слова [[EMIT]] и [[Слово ↖|↖]]
* См. слова [[EMIT]], [[Слово ↖|↖]] и [[AT]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0990 CR (c-r)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0990 CR (c-r)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/CR CR (c-r)] в черновике Forth 200x ''(англ.)''
* Слово [http://forth-standard.org/standard/core/CR CR (c-r)] в черновике Forth 200x ''(англ.)''
Строка 92: Строка 144:




{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Примитивы]]
[[Категория:Терминальный ввод/вывод Каллисто]]
[[Категория:Терминальный ввод/вывод Каллисто]]
[[Категория:Адаптированные слова]]

Текущая версия от 21:55, 13 ноября 2017

(возврат каретки, стрелка вниз с поворотом влево) — адаптированное слово Каллисто.

↵              ( -- )                          Возврат каретки. Продолжить вывод с начала следующей строки.
Пример работы слова ↵

Вывести на терминал возврат каретки и перевод строки. Последующий вывод появится в начале следующей строки.

Ввод слова ↵[править]

В режиме NUM последовательно нажмите две клавиши  F   В↑ 

CR в стандарте ANS Forth[править]

6.1.0990   CR                                   "c-r"                      CORE
           ( -- )
           Заставляет последующий вывод появляться в начале следующей строки.

История[править]

Слово ↵ в Форте называется CR и является одним из наиболее старых и устоявшихся слов Форта.

CR появился в Форте в 1965 году, когда Чак Мур подрабатывал наёмным программистом в городе Нью-Йорк. Тогда появились миникомпьютеры, а с ними и терминалы. Интерпретатор был идеален для ввода с телетайпа и вскоре стал включать код для работы с выводом.

CR в предыдущем стандарте Forth-83 (англ.)[править]

     CR           --                            M,79             "c-r"
          Displays a carriage-return and line-feed or equivalent
          operation.

CR в стандарте Forth-79 (англ.)[править]

CR                                           160              "c-r"
    Cause  a carriage-return and line-feed to occur at the current
    output device.

CR в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

CR                                              L0
       Transmit a carriage return and line feed to the selected output
       device.

Реализация[править]

 214 ; Обычно код располагается в теле примитива, но мы хотим использовать 2−х байтовые ПП
 215 JCR:            PGSB CHPUTCR GSB CHPUTLF KGOTO9 ; Обработчик CR
 216 
 217 CHPUTLF:        PPRM9000 <−>                    ; Нам важна координата y курсора
 218                 PPRM rrCHH +                    ; Увеличить на высоту данного шрифта
 219                 65 FANS − − PX<0 CHPUTSCROLL    ; Прокрутка экрана, если не вмещаемся
 220                 FANS + <−> PPM9000 RTN          ; Обычный LF вниз на rrCHH строк
 221 CHPUTCR:        PPRM9000 Cx PPM9000 RTN         ; CR
 222 CHPUTSCROLL:    PPRM rrSCRLN PKM19              ; Прокрутить на то число линий, на которое данный шрифт прокручивается
 223                 PPRM 9000 <−>                   ; Позиция курсора по y
 224                 PPRM rrSCRLFIX −                ; Корректировать, ведь прокрутка у МК−161 слишком грубая
 225                 <−> PPM 9000 RTN                ; Устанавить курсор на новую позицию и выйти
 …
1010 ;#CR
1011 ; ↵                ( −− )                               Возврат каретки. Продолжить вывод с начала следующей строки.
1012 LCR:            .DB     1,192
1013                 .DW     LCDOT
1014 CR:             .DW     JCR                     ; Ради оптимизации обработчик перенесён поближе к CHPUT

Реализация из SP-Forth 4.20:

HEX

CREATE LT 0A0D , \ line terminator
CREATE LTL 2 ,   \ line terminator length

: DOS-LINES ( -- )
  0A0D LT ! 2 LTL !
;
: UNIX-LINES ( -- )
  0A0A LT ! 1 LTL !
;

DECIMAL

\ Разделитель строк
: EOLN ( -- a u ) LT LTL @ ;

UNIX-ENVIRONMENT [IF]
: NATIVE-LINES UNIX-LINES ;
[ELSE]
: NATIVE-LINES DOS-LINES ;
[THEN]
…
: CR ( -- ) \ 94
\ Перевод строки.
  EOLN TYPE
;

Советская реализация[править]

Слово ↵ в ФОРТ-ЕС называлось CR и было примитивом. Вот его описание и опубликованная часть определения:

CR        -> ВЫВЕСТИ НА ТЕРМИНАЛ ПЕРЕВОД СТРОКИ                 6

                    Экран номер 6
( 09.09.86 KEY CR EMIT TYPE (EXPECT/ RBLK MBLK )
(  следующие определения дают только имена процедур)

CODE  EMIT ( С-> ВЫВЕСТИ ЛИТЕРУ С КОДОМ С НА ТЕРМИНАЛ) END-CODE

В FORTH ИТЭФ слово ↵ также называлось CR

Ещё в FORTH ИТЭФ был примитив RC для вывода CR без LF через примитив EMIT

Вот эти определения:

             HEAD    204Q,'EMI',324Q,EMIT,$EMIT           ; EMIT
   $EMIT     LABEL   FAR
             POP   AX
   ENT$:     PUSH  AX
             MOV   AH, 15
             INT   16
             POP   AX
             MOV   AH, 14
             JMP   $EM
   PRINT:    MOV   DX, 0   ; Установка номера принтера
             SUB   AH, AH
             INT   23
             TES   AH, 51Q
             JE    OK
   ERR4:     MOV   AL, AH
             ADD   AL, 60Q
             MOV   AH, 14
             INT   16
             MOV   DX, OFFSET ERMES4
             MOV   AH, 9H
             INT   21H
             JMP   TYPE$
   ERMES4:   DB   ' PRINTER ERROR $'

             HEAD    202Q,'R',303Q,RC                     ; RC
             MOV   AX, 13
             JMP   ENT$
             ...
            HEAD     202Q,'C',322Q,CR,$COL                ; CR
            DW LIT,15Q,EMIT,LIT,12Q,EMIT,SEMI

Метки $EM и OK находятся в определении EMI

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


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