INKEY: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
м (Арви Хэкер переименовал страницу ?EKEY в INKEY)
Нет описания правки
 
(не показано 19 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''?EKEY''' — стандартное слово [[Каллисто]]. Опрос состояния клавиатуры.
'''INKEY''' (опрос клавиши) родное слово [[Каллисто]]. Опрос состояния [[Клавиатура|клавиатуры]].
 
INKEY          ( −− b )                            Получить код нажатой клавиши или −1, если клавиши не нажаты.
Посылает в [[Стек данных|стек]] [[Код клавиши|код нажатой клавиши]] или −1, если нет нажатой клавиши.
Посылает в [[Стек данных|стек]] [[Код клавиши|код нажатой клавиши]] или [[TRUE|−1]], если нет нажатой клавиши.


== Ввод слова INKEY ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 9|{{Серая клавиша|9}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ,|{{Серая клавиша|1=<span style="position:relative;bottom:3px"> , </span>}}]]


== EKEY? и KEY? в стандарте ANS Forth ==
== EKEY? и KEY? в стандарте ANS Forth ==
Строка 40: Строка 42:
  события до получения допустимого символа.
  события до получения допустимого символа.


== История ==
Слово INKEY получило своё название от оператора INKEY&#36;, выполнявшего в MSX-Бейсике «Ямах» схожую функцию опроса клавиатуры без остановки программы.
В MMSFORTH было слово INKEY&#36; — которое возвращало адрес расположенной в [[PAD]] односимвольной счётной строки, пустой или с кодом нажатой клавиши.
== Реализация ==
<pre>
886 STT:            1 +/− PKM03  KGOTO9            ; [SP] := −1; NEXT
1199 ;#INKEY
1200 ; INKEY            ( −− b )                            Получить код нажатой клавиши или −1, если клавиши не нажаты.
1201 LINKEY:        .DB    5
1202                .TEXT  "INKEY"
1203                .DW    LEKEY
1204 INKEY:          .DW    JINKEY
1205 JINKEY:        PPRM 9028                      ; Чтение состояния клавиатуры МК−161
1206                KM3
1207                KNOT KX=09
1208                PGOTO STT                      ; 1 +/− PKM03  KGOTO9
</pre>


== Ссылки ==
== Ссылки ==
* {{Исходник|INKEY|INKEY}}
* См. слова [[EKEY]], [[KEY]]
* См. слова [[EKEY]], [[KEY]]
* [http://forth.sourceforge.net/standard/dpans/dpans10.htm#10.6.2.1307 Слово EKEY? в стандарте ANS Forth] ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans10.htm#10.6.2.1307 EKEY?] в стандарте ANS Forth ''(англ.)''
* [http://forth.sourceforge.net/standard/dpans/dpans10.htm#10.6.1.1755 Слово KEY? в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa10.htm#A.10.6.1.1755 комментарий к нему] ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans10.htm#10.6.1.1755 KEY?] и [http://forth.sourceforge.net/standard/dpans/dpansa10.htm#A.10.6.1.1755 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* [http://www.forth200x.org/documents/html/facility.html#facility:EKEYq Слово EKEY? в черновике Forth 200x] ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/facility/EKEYq.html EKEY?] в черновике Forth 200x ''(англ.)''
* [http://www.forth200x.org/documents/html/facility.html#facility:KEYq Слово KEY? в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:facility:KEYq комментарий к нему] ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/facility/KEYq.html KEY?] и [http://www.forth200x.org/documents/html3/rationale.html#rat:facility:KEYq комментарий к нему] в черновике Forth 200x ''(англ.)''




Строка 52: Строка 75:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Терминальный ввод/вывод Каллисто]]
[[Категория:Терминальный ввод/вывод Каллисто]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Родные слова]]
[[Категория:Системные слова]]

Текущая версия от 10:31, 9 ноября 2017

INKEY (опрос клавиши) — родное слово Каллисто. Опрос состояния клавиатуры.

INKEY          ( −− b )                             Получить код нажатой клавиши или −1, если клавиши не нажаты.

Посылает в стек код нажатой клавиши или −1, если нет нажатой клавиши.

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

В режиме ЛАТ последовательно нажмите клавиши  7   4   9   ИП    ,  

EKEY? и KEY? в стандарте ANS Forth[править]

10.6.2.1307   EKEY?                        "e-key-question"        FACILITY EXT
           ( -- flag )
           Если событие клавиатуры доступно, возвращает true. Иначе возвращает 
           false. Событие должно быть возвращено следующим выполнением EKEY.
           После возвращения EKEY? со значением true, последующее выполнение 
           EKEY? до выполнения KEY, KEY? или EKEY также возвращает true, 
           ссылаясь на то же самое событие.
10.6.1.1755   KEY?                      "key-question"                 FACILITY
           ( -- flag )
           Если символ доступен, возвращает true. Иначе, возвращает false. 
           Если не символьные события клавиатуры доступны перед первым 
           допустимым символом, они будут отвергнуты и впоследствии 
           недоступны. Символ должен быть возвращен следующим выполнением KEY.
           После возвращения KEY? со значением true, последующие выполнения 
           KEY? до выполнения KEY или EKEY также возвращают true, без отмены 
           событий клавиатуры.
A.10.6.1.1755   KEY?
Технический Комитет ходил по кругу некоторое время по поводу стекового эффекта. 
Любое решение нарушит чью-то практику и накажет некоторую машину. Этот путь не 
касается опережающего ввода с клавиатуры на некоторых системах, когда требуется 
реализация односимвольного буфера на машинах, где опрос клавиатуры неизбежно 
оканчивается разрушением символа.
Использование KEY или KEY? указывает, что приложение не желает беспокоиться о 
не символьных событиях, так что они отвергаются в ожидании, в конечном счете, 
получения допустимого символа. Приложения, желающие обработать не символьные 
события, должны использовать EKEY и EKEY?. Возможно смешивать использование 
KEY? / KEY и EKEY? / EKEY в пределах отдельного приложения, но приложение 
должно использовать KEY? и KEY только, когда оно желает удалить не символьные 
события до получения допустимого символа.

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

Слово INKEY получило своё название от оператора INKEY$, выполнявшего в MSX-Бейсике «Ямах» схожую функцию опроса клавиатуры без остановки программы.

В MMSFORTH было слово INKEY$ — которое возвращало адрес расположенной в PAD односимвольной счётной строки, пустой или с кодом нажатой клавиши.

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

 886 STT:            1 +/− PKM03  KGOTO9             ; [SP] := −1; NEXT
…
1199 ;#INKEY
1200 ; INKEY            ( −− b )                             Получить код нажатой клавиши или −1, если клавиши не нажаты.
1201 LINKEY:         .DB     5
1202                 .TEXT   "INKEY"
1203                 .DW     LEKEY
1204 INKEY:          .DW     JINKEY
1205 JINKEY:         PPRM 9028                       ; Чтение состояния клавиатуры МК−161
1206                 KM3
1207                 KNOT KX=09
1208                 PGOTO STT                       ; 1 +/− PKM03  KGOTO9

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


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


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