D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / Команды системы (TCL) / poke

poke

Посылает либо строку символов, либо одну или несколько команд TCL в буфер ввода другого порта

poke port.number{,{ text}}
poke port.number{ }<escape> {file.reference {item-id}}
poke port.number<escape>
poke port.number TCL.command<escape> {TCL.command{<escape>}...}

"port.number" – номер порта назначения.

"text" – строка, которая может содержать любые символы, кроме маркера сегмента (x'ff'), и может иметь неограниченную длину. Тексту может предшествовать пробел. Если текст не задан, то в порт назначения посылается символ <return>. Строку "text" можно заключать в одинарные кавычки ('), двойные кавычки (") или символы обратной косой черты (\).

В порт назначения можно послать одну или сразу несколько команд TCL. Каждая команда TCL должна завершаться символом <escape>, который на принимающем порту трактуется как <return>.

В порт назначения можно также послать непосредственно из файла запись, содержащую одну или несколько команд TCL. Передаваемая запись должна содержать в каждом атрибуте одну команду TCL. Эту операцию можно также осуществить просто путем посылки в порт назначения символа <escape> с помощью команды "poke". В этом случае процесс попросит указать имя файла и идентификатор записи, которую нужно передать и выполнить.

Команда "poke" выводит на экран число символов, которые она успешно передала в буфер ввода порта назначения. Это число, в зависимости от состояния буфера ввода порта назначения, может и не соответствовать действительному количеству посланных символов.

Т.к. клавиша <escape> используется командой "poke" для обозначения конца команд TCL, для передачи самого символа <escape> используется специальный прием. Он состоит в том, что клавиша <escape> нажимается дважды. Последовательность из двух <escape> трактуется (и передается) как один символ <escape>.

Примеры:

poke 16
[1028] 1 characters poked.

Эта команда посылает в порт 16 один символ (<return>), о чем выдается сообщение.

poke 16,
[1028] 1 characters poked.

Эта команда также посылает символ <return> в порт 16.

poke 16,answer the phone!
[1028] 17 characters poked.

Эта команда посылает в порт 16 строку "answer the phone!", не сопровождая ее символом <return>. Сообщается, что передано 17 символов.

poke 16,"answer the phone!"
[1028] 17 characters poked.

Это то же самое, что и предыдущий пример. Кавычки (одинарные или двойные), а также символы обратной косой черты на передаваемую строку не влияют, за исключением случая, когда строка начинается литеральной кавычкой, но не закрывается ею. См. следующий пример.

poke 16 "hi
[2] Uneven number of delimiters (' " \).

Эта команда ошибочна, т.к. строка начинается кавычкой. Выдается сообщение "Нечетное количество разделителей". Следующий пример показывает, что замыкающая кавычка принимается.

poke 16 hi"
[1028] 3 characters poked.
poke 16,don't panic!
[1028] 12 characters poked.

Вложенные кавычки разрешаются.

Во всех предыдущих примерах символ <return> в конце передаваемой строки не посылался.

poke 16 who[

Эта команда посылает строку, представляющую собой команду TCL. Символ "[" - это символ, выводимый на экран как "эхо" от клавиши <escape>. В порт 16 посылается команда "who", и затем <return>, чтобы ее выполнить.

poke 16 who[time[ovf

Здесь в порт 16 передаются и выполняются команды "who", "time" и "ovf".

poke 16[<return>
poke from file-name item-name:md script1

Эта форма команды использует номер порта, за которым следуют <escape> и <return>. Процесс просит указать имя файла и идентификатор записи, которую необходимо передать. Каждый атрибут указанной записи, начиная с первого, рассматривается как команда TCL. Например, запись "script1" могла бы выглядеть следующим образом:

Идентификатор script1
Атрибут 1 who
Атрибут 2 time
Атрибут 3 ovf
poke 16[md<return>
poke from item-name:script1

Это похоже на предыдущий пример, но в командной строке указывается имя файла. Процесс просит указать только идентификатор записи, которую необходимо передать.

poke 16[md script1<return>
[1028] 13 characters poked.

Это то же, что и в предыдущем примере, но в командной строке указываются и имя файла, и идентификатор записи.

poke 16[
poke from file-name item-name:[
0001  :who<return>
0002  :time<return>
0003  :ovf<return>
0004  <return>
[1028] 13 characters poked.

В этом примере запись создается "на лету", а затем передается в буфер ввода порта назначения. Данная команда выполняет команды TCL "who", "time" и "ovf" на порту 16.

poke 16 [[
[1028] 1 characters poked.

В этом примере команде "poke" передаются два символа <escape>, чтобы в результате она переслала один символ <escape>.

execute "poke 16 " : char(24):char(char5):"y"

Этот пример демонстрирует использование "execute" для посылки символов на другой порт с помощью команды "poke". Эта инструкция посылает <ctrl>+x и <ctrl>+e, после чего передается литерал "y". По этой команде на принимающем порту будет произведен выход из текущей записи в процессоре Update.