Справочник программиста на персональном компьютере фирмы IBM. Приложения
Страница 4. Чтение позиции светового пера


     7.3.2 Чтение позиции светового пера.


   Хотя очень немногие компьютеры оснащены световым пером, тем не
менее  это  одно из немногих вспомогательных  устройств,  которое
поддерживается как  оборудованием,  так  и операционной системой.
Световое перо работает с помощью небольшого оптического детектора
на кончике пера.  По ходу  сканирования  экрана электронным лучом
инициируется импульс оптического детектора, когда пучок достигает
точки экрана, над  которой  находится  перо.  Время возникновения
этого импульса, относительно сигналов горизонтальной и вертикаль-
ной синхронизации, позволяет определить позицию светового пера.

   Высокий уровень.


   Бейсик может определять  позицию светового пера двумя способа-
ми.  При первом программа непрерывно определяет статус пера.  При
втором, когда перо используется, то управление временно передает-
ся процедуре, обеспечиваемой Вашей программой.  Для  непрерывного
контроля за пером  надо  использовать  оператор PEN как функцию в
форме  X = PEN(n), где n - кодовый номер, определяющий какую  ин-
формацию Вы хотите получить о пере и его позиции.  Возможные зна-
чения n такие:

  0    возвращает -1, если перо было выключено со времени послед-
       него запроса, 0 - если нет
  1    возвращает последнюю координату x (0-319 или 0-639), в ко-
       торой перо было  включено  (оно  могло  быть  впоследствии
       передвинуто, если оставалось включенным)
  2    возвращает последнюю координату y (0-199), в которой перо
       было  включено.
  3    возвращает -1, если перо включено и 0 - если нет
  4    возвращает текущую x координату (0-319 или 0-639) пера
  5    возвращает текущую y координату (0-199) пера
  6    возвращает позицию - номер строки (1-24), в которой  перо
       было последний раз активизировано
  7    возвращает позицию - номер столбца (1-40 или 1-80), в ко-
       торой перо было последний раз активизировано
  8    возвращает текущую позицию - номер строки (1-24)
  9    возвращает текущую позицию - номер столбца (1-40 или 1-80)

   В данном примере  определяется  включено  ли  перо, и если это
так, то берется текущее его положение:

100 IF NOT PEN(3) THEN 130   'проверяем включено ли перо
110 X = PEN(4)               'получаем координату точки по оси x
120 Y = PEN(5)               'получаем координату точки по оси y
130 ...                      'продолжаем программу

   Более гибкие возможности использования светового пера  предос-
тавляются оператором ON PEN GOSUB.  Этот оператор указывает номер
строки, в которой начинается процедура, активизируемая при  вклю-
чении пера. Бейсик достигает этого проверкой состояния пера после
выполнения каждой его инструкции.  Процедура может получить пози-
цию пера и предпринять требуемые действия. Когда процедура закан-
чивается,  то программа продолжается с того места, где  она  была
при включении пера.

   ON PEN GOSUB не работает до тех пор, пока она не активизирова-
на  оператором PEN ON.  PEN OFF отменяет ее работу.  Смысл  этого
состоит в том, что  постоянная  проверка  статуса  пера замедляет
работу  программы, поэтому ее надо осуществлять только когда  это
необходимо.  Если программа  начинает  выполнять критичекую часть
кода, когда нельзя использовать процедуру ON PEN GOSUB,  напишите
PEN STOP. В этом случае будет продолжаться проверка статуса пера,
и если перо будет включено, то этот факт будет запомнен.   Однако
пока не будет встречен оператор PEN ON, управление не будет пере-

даваться процедуре ON PEN GOSUB.
   Данный пример вызывает остановку программы, когда нажата кноп-
ка на световом пере. Точка  в  позиции  светового пера включается
процедурой, обрабатывающей включение
   ERROR        ;на обработку ошибки
   INC  BX                 ;увеличиваем указатель
   LOOP NEXT_CHAR          ;выводим следующий символ

   Стандартное  прерывание MS DOS для вывода на принтер это функ-
ция 5 прерывания 21H.  Просто  поместите  символ в DL и выполните
прерывание.  Эта функция всегда выводит на LPT1 и у нее нет возв-
ращаемых регистров.

;---вывод данных на LPT1
   MOV  AH,5       ;номер функции
   MOV  DL,CHAR    ;готовим печатаемый символ
   INT  21H        ;посылаем его на пр
                   ;N,1)*2^(N-1)
2040 NEXT
2050 RETURN

 
« Предыдущая статья   Следующая статья »