Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Тема:Робота з драйвером маніпулятора «миша»



НЕ 1.5 (Лекція)

Тема: Робота з драйвером маніпулятора «миша»

Курсор і миша

Маніпулятор «миша» (далі просто миша) є основним інструментом для підтримки діалогу користувача з задачею при роботі в графічних відеорежимах. За допомогою миші вибираються та активізуються діалогові вікна, меню чи значки на панелях інструментів, проводяться різноманітні маніпуляції з малюнками, тощо.

На екрані монітору поточне положення миші вказує спеціальний малюнок, який прийнято називати графічним курсором (graphical cursor) або вказівником миші (mouse pointer). Він зникає з одного місця і з’являється в іншому при кожному переміщенні миші. Так як курсор миші являє собою матрицю растрового зображення, для визначення координат курсору миші вводять поняття точки-вказівника. Точка-вказівник – точка в матриці растрового зображення курсору, координати якої приймаються за координати курсору миші. Положення точки-вказівника в курсорі залежить від форми та типу курсору і може задаватися програмно.

Мінімальна відстань на екрані, на яку може переміщуватися курсор миші в текстовому режимі – знакомісце, в графічному режимі – піксель.

Координати миші рахуються попіксельно для любого режиму відеоадаптера, тому в графічному режимі відеоадаптера вони співпадають з піксельною організацією екрану, а в текстовому режимі для перетворення піксельних координат курсору миші в координати знакомісця необхідно скористуватися наступною формулою:

 

Symbol=pixel/8+1,

 

де Symbol – координата (x чи y) закомісця в текстовому режимі, pixel – координата курсору миші, +1 – за рахунок різниці координат лівого верхнього кута в текстовому та графічному режимах.

Взаємодія миші з комп’ютером здійснюється наступним чином: при зміні свого стану (переміщення миші по столу чи натиснення кнопки) миша генерує відповідний пакет даних, в якому зберігається інформація про зміну стану, та відсилає цей пакет по відповідному інтерфейсу до комп’ютера, до якого вона підключена. Це генерує апаратне переривання, котре активізує драйвер миші (номер апаратного переривання залежить від типу миші і від інтерфейсу, до якого вона підключена). Так як до складу BIOS та MS-DOS драйвер не входить, то він повинен бути завантажений користувачем або операційною системою. Для підключення драйвера миші файл CONFIG.SYS повинен містити стрічку наступного вигляду:



device=c:\mouse\mouse.sys

Якщо замість драйверу використовується спеціальна резидентна програма, що виконує його функції, вона зазвичай викликається в файлі AUTOEXEC.BAT:

c:\mouse\mouse.com

 

Цей драйвер виконує наступні функції:

· відслідковує переміщення миші та стан її кнопок;

· малює на екрані курсор, що повторює рух миші;

· надає програмам користувача інтерфейс для роботи з мишею, реалізований через програмне переривання 33h для обслуговування миші.

 

Далі розглянемо функції переривання 33h.

 

 

Функції переривання 33h

Функція 00h.

Виконує апаратне скидання миші та програмне встановлення драйвера миші в вихідний стан.

 

Регістри на вході:

AX

0000h

 

Регістри на виході:

AX

Стан миші

0000h – драйвер миші не встановлений

FFFFh – драйвер миші встановлений

BX

Інформація про кількість клавіш у миші

0 – Більше або менше, ніж 2

2 – Дві клавіші

3 – Має 3 клавіші

 

Функція 01h.

Дозволяє включити курсор миші.

 

Регістри на вході:

AX

0001h

 

Регістри на виході:

не використовуються.

 

Для управління видимістю курсору драйвер миші використовує внутрішній лічильник. При виклику ініціалізуючої функції 00h значення лічильника встановлюється рівним -1 і курсор невидимий. При виклику функції 01h його значення збільшується на 1 і стає рівним 0, при цьому курсор стає видимим і може переміщуватися по екрану. Якщо лічильник рівний 0, то наступні виклики функції 01h ігноруються драйвером. Функція 01h скидає область виключення, в якій курсор не відображається (якщо така область була встановлена раніше функцією 10h).

 

Функція 02h.

Дозволяє виключити курсор миші.

Регістри на вході:

AX

0002h

 

Регістри на виході:

не використовуються.

 

При виклику функції 02h значення лічильника зменшується на 1, якщо його значення стає рівним -1 або менше, то курсор стає видимим.

 

Функція 03h.

Повертає поточні координати курсору миші та стан клавіш.

Регістри на вході:

AX

0003h

 

Регістри на виході:

BX

Інформація про стан клавіш миші

біт 0 – натиснена ліва клавіша

біт 1 – натиснена права клавіша

біт 2 – натиснена середня клавіша

CX

Координата X курсору

DX

Координата Y курсору

 

Програми, що працюють в текстовому режимі, повинні розділити отримані координати на 8 і додати 1.

 

Функція 04h.

 

Встановлює курсор миші в задану позицію на екрані.

 

Регістри на вході:

AX

0004h

CX

Нова координата X курсору

DX

Нова координата Y курсору

 

Регістри на виході:

не використовуються.

 

Для текстового режиму значення координат повинні бути зменшені на 1 та помножені на 8.

Якщо область переміщення курсору обмежена функціями 07h або 08h, то при спробі встановити курсор за границю області обмеження він буде встановлений в точку, що знаходиться всередині області обмеження на мінімальній відстані від точки, заданої у виклику функції.

 

Функція 05h.

 

Визначає положення курсору миші при натисненні кнопок.

 

Регістри на вході:

AX

0005h

BX

Номер клавіші, при натисненні якої зберігається положення курсору

0 – натиснення лівої клавіші

1 – натиснення правої клавіші

2 – натиснення середньої клавіші

 

Регістри на виході:

AX

Інформація про стан клавіш миші в момент виклику функції

біт 0 – затиснена ліва клавіша

біт 1 – затиснена права клавіша

біт 2 – затиснена середня клавіша

BX

Кількість натиснень на задану клавішу, значення занулюється після виклику функції

CX

Координата X курсору

DX

Координата Y курсору

 

На відміну від функції 03h ця функція повертає не поточний стан миші, а стан, що збережений в момент останнього натиснення на клавішу, визначену при виклику функції. Крім того, можливе виявлення багаторазових клацань.

 

Функція 06h.

 

Визначає положення курсору миші при відпусканні клавіші миші.

 

Регістри на вході:

AX

0006h

BX

Номер клавіші, при відпусканні якої запам’ятовується положення

0 – відпускання лівої клавіші

1 – відпускання правої клавіші

2 – відпускання середньої клавіші

 

Регістри на виході:

AX

Інформація про стан клавіш в момент виклику функції

біт 0 – відпущена ліва клавіша

біт 1 – відпущена права клавіша

біт 2 – відпущена середня клавіша

BX

Кількість відпущень заданої клавіші, значення занулюється після виклику функції

CX

Координата X курсору

DX

Координата Y курсору

 

Функція 07h.

 

Задає діапазон руху курсору миші по горизонталі.

Регістри на вході:

AX

0007h

CX

Мінімальна координата X курсору

DX

Максимальна координата X курсору

 

Регістри на виході:

не використовуються.

 

Функція 08h.

 

Задає діапазон руху миші по вертикалі.

 

Регістри на вході:

AX

0008h

CX

Мінімальна координата Y курсору

DX

Максимальна координата Y курсору

 

Регістри на виході:

не використовуються.

 

 

Функція 09h.

 

Задає форму курсору миші в графічному режимі.

 

Регістри на вході:

AX

0009h

BX

Номер стовпця точки-вказівника графічного курсору (від -16 до 16)

CX

Номер рядка точки-вказівника графічного курсору (від -16 до 16)

ES:DX

Вказівник на растрове зображення курсору

 

Регістри на виході:

не використовуються.

 

Регістри ES:DX містять вказівник (ES – сегмент, DX – зміщення) на область пам’яті розміром 64 байта, що складається з 2 масивів довжиною 32 байта. Перший масив являє собою логічну маску розміром 16х16 біт, яка накладається на ділянку пам’яті під курсором з використанням логічної операції «І». Другий масив – також маска розміром 16х16 біт, але вона накладається з використанням логічної операції «Виключне АБО», інвертуючи окремі точки зображення.

 

Функція 0Ah.

Задає форму курсору миші в текстовому режимі.

 

 

Регістри на вході:

AX

000Ah

BX

Визначає тип курсору:

0 – визначається програмно

1 – визначається апаратно

CX

Маска екрану (для BX=0) або початкова стрічка курсору (для BX=1)

DX

Маска курсору (для BX=0) або кінцева стрічка курсору (для BX=1)

 

Регістри на виході:

не використовуються.

 

Програмний курсор являє собою символ з інвертованим значенням атрибута і використовується за замовчуванням. Для цього курсору спочатку виконується логічна операція «І» над вмістимим відеопам’яті в томі місці, на яке вказує курсор, і маскою екрану. Потім виконується логічна операція «Виключне АБО» на вмістимим відеопам’яті з маскою курсору. Курсор, сформований апаратними засобами, виглядає аналогічно звичайному текстовому курсору, його форма – прямокутник, розмір якого задається за допомогою регістрів CX та DX.

 

Функція 0Bh.

Визначає відносне переміщення миші з моменту останнього виклику цієї функції.

 

Регістри на вході:

AX

000Bh

 

Регістри на виході:

CX

Переміщення по горизонталі

DX

Переміщення по вертикалі

 

Від’ємне значення переміщення відповідає руху вліво і вверх, додатне – вправо і вниз.

Для заміру переміщення використовується одиниця mickey (мікі).

1 мік=0.005 дюйма (1/200 дюйма). Мікі – це найменший рух миші, який можна виявити. Для перетворення міків в пікселі можна використати функцію 1Bh.

 

 

Функція 0Fh.

 

Задає швидкість переміщення миші.

 

Регістри на вході:

AX

000Fh

CX

Кількість міків на 8 пікселів по горизонталі

DX

Кількість міків на 8 пікселів по вертикалі

 

Регістри на виході:

не використовуються.

 

При ініціалізації драйвера миші використовуються наступні значення: CX=8, DX=16.

 

Функція 10h.

 

Встановлює область виключення для курсору миші.

 

Регістри на вході:

AX

0010h

CX

Координата X верхнього лівого кута області

DX

Координата Y верхнього лівого кута області

SI

Координата X нижнього правого кута області

DI

Координата Y нижнього правого кута області

 

Регістри на виході:

не використовуються.

 

Якщо оператор поміщає курсор в область виключення, то курсор миші пропадає. Ця область відміняється функціями 00h та 01h.

 

Функція 12h.

Задає збільшений графічний курсор (визначена тільки для миші системи PC Mouse).

 

Регістри на вході:

AX

0012h

BH

Ширина курсору в словах (1 слово рівно 2 байтам)

CH

Кількість рядків в зображенні курсору

BL

Номер стовпця точки-вказівника графічного курсору (от –16 до 16)

CL

Номер стрічки точки-вказівника графічного курсору (от –16 до 16)

ES:DX

Вказівник на растрове зображення курсору

 

Регістри на виході:

не використовуються.

 

Функція 13h.

 

Визначає поріг подвоєння швидкості.

Регістри на вході:

AX

0013h

DX

Значення порогу подвоєння, мікі в секунду

 

Регістри на виході:

не використовуються.

 

Якщо миша переміщується зі швидкістю, що перевищує поріг подвоєння, апаратура миші подвоює величину переміщення. При ініціалізації встановлюється значення порогу в 64 міки в секунду. Якщо необхідно відновити це значення, необхідно при виклику задавати DX=0.

 

Функція 1Ah.

Задає значення порогу чутливості миші і породу подвоєння.

 

Регістри на вході:

AX

001Ah

BX

Горизонтальна чутливість в міках на піксель

CX

Вертикальна чутливість в міках на піксель

DX

Значення порогу подвоєння, мікі в секунду

 

Регістри на виході:

не використовуються.

 

Функція 1Bh.

Визначає значення чутливості миші і порогу подвоєння.

 

Регістри на вході:

AX

001Bh

 

Регістри на виході:

BX

Горизонтальна чутливість в міках на піксель

CX

Вертикальна чутливість в міках на піксель

DX

Значення порогу подвоєння, мікі в секунду

 

 

Функція 1Dh.

Встановлює номер сторінки відеопам’яті, на якій буде відображатися курсор миші.

 

Регістри на вході:

AX

001Dh

BX

Номер сторінки відеопам’яті

 

Регістри на виході:

не використовуються.

 

За замовчуванням використовується сторінка 0.

 

Функція 1Eh.

Визначає номер сторінки відеопам’яті, на якій відображається курсор миші.

 

Регістри на вході:

AX

001Eh

 

Регістри на виході:

BX

Номер сторінки відеопам’яті

 

 

Приклад програми:

 

// File Mouse.h

#ifndef __MOUSE__

#define __MOUSE__

#define MOUSE_MOVE_MASK 0x01

#define MOUSE_LBUTTON_PRESS 0x02

#define MOUSE_LBUTTON_RELEASE 0x04

#define MOUSE_RBUTTON_PRESS 0x08

#define MOUSE_RBUTTON_RELEASE 0x10

#define MOUSE_MBUTTON_PRESS 0x20

#define MOUSE_MBUTTON_RELEASE 0x40

#define MOUSE_ALL_EVENTS Ox7F

struct MouseState {

int x, y;

int Buttons;

};

 

struct CursorShape {

unsigned AndMask [16];

unsigned XorMask [16];

int HotX, HotY;

};

 

typedef void (*MouseHandler)(int, int, int, int);

int ResetMouse ();

void ShowModseCursor ();

void HideMouseCursor ();

void ReadMouseState (MouseState&);

void MoveMouseCursor (int, int);

void SetMouseHorzRange (int, int);

void SetraouseVertRange (int, int);

void SetMouseShape (CursorShapeA);

void SetHldeRange (int, int, int, int);

void SetMouseHandler (MouseHandler, int = MOUSE_ALL_EVENTS);

void RerooveMouseHandler ();

#define ClearHideRange () ShowMouseCursor () #endif

 

// File Mouse.cpp

#include <alloc.h>

#include "Mouse.h"

#pragma inline

static MouseHandler CurHandler = NULL;

int ResetMouse ()

{

asm {

xor ax, ax int 33h

}

return _AX == OxFFFF; }

 

void ShowMouseCursor () {

asm {

mov ax, 1 int 33h

}

}

 

void HideMouseCursor ()

{

asm {

mov ax, 2 int 33h

}

}

 

void ReadMouseState (MouseState& s) {

asm {

mov ax, 3 int 33h

}

 

#if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)

asm {

push es push di

les di, dword ptr s mov es:[di ], cx

mov es:[di+2], dx mov es:[di+4], bx

pop di pop es }

#else asm { push di

mov di, word ptr s mov [di ], cx mov [di+2], dx raov [di+4], bx pop di }

#endif

}

 

void MoveMouseCursor (int x, int y) {

asm {

mov ax, 4 mov cx, x raov dx, y int 33h } }

void SetHorzMouseRange (int xmin, int xmax)

{

asm {

mov ax, 7 mov cx, xmin mov dx, xmax int 33h

}

}

 

void SetVertMouseRange (int yrain, int ymax)

{

asm{

mov ax, 8

mov cx, ymin

mov dx, ymax

int 33h

}

}

 

void SetMouseShape (CursorShape& c)

{

#if defined(__COMPACT) || defined(__LARGE__) ||

defined(__HUGE__) asm {

push es

push di

les di, dword ptr c

mov bx, es:[di+16]

mov cx, es:[di+18] mov dx, d'i

mov ax, 9

int 33h

pop di

pop es

}

#else

asm {

push di

mov di, word ptr c

mov bx, [di+16]

mov cx, [di+18]

mov dx, di

mov ax, 9

int 33h

pop di

}

#endif }

 

void SetHideRange (int x1, int y1, int x2, int y2.)

{

asm {

push si

push di

mov ax, 10h

mov cx, x1

mov dx,y1

mov si, x2

mov di, y2

int 33h

pop di pop si

}

}

 

static void far MouseStub () {

asm {

push ds // preserve ds

push ax // preserve ax

mov ax, seg CurHandler

mov ds, ax

pop ax // restore ax

push dx // у

push cx // x

push bx // button state

push ax // event mask

call CurHandler

add sp, 8 // clear stack

pop ds

}

}

 

void SetMouseHandler (MouseHandler h, int mask)

{

void far *p = MouseStub;

CurHandler = h; asm {

push es

mov ax, OCh

mov cx, mask

les dx, p

int 33h

pop es

}

}

 

void RemoveMouseHandler () {

CurHandler = NULL;

asm {

mov ax, OCh

mov cx, 0 int 33h } }

 

 

Функція ResetMouse ініціалізує «мишу» та повертає ненульове значення, якщо миша знайдена.

Функція ShowMouseCursor виводить на екран курсор миші. При цьому курсор рухається синхронно з рухом самої миші.

Функція HideMouseCursor ховає курсор з екрану. Однак при цьому драйвер миші продовжує відслідковувати її переміщення, причому в цій функції можливі вкладені виклики. Кожний виклик функції HideMouseCursor зменшує значення внутрішнього лічильника драйвера на одиницю, кожний виклик ShowMouseCursor збільшує цей лічильник. Курсор миші видно тільки тоді, коли значення лічильника рівне нулю (початкове значення лічильника -1).

 

При роботі з мишею потрібно мати на увазі, що виводити зображення над курсором миші неможна. Тому, якщо потрібно вивести зображення на екран в тому місці, де може знаходитися курсор, потрібно сховати курсор з екрану, виконати потрібний вивід зображення і потім знову показати курсор миші на екрані.

 

Функція ReadMouseState повертає стан клавіш миші в полях структури MouseState. Поля х та у містять поточні координати курсору в пікселях, поле Buttons визначає які клавіші натиснуті. Встановлений біт 0 відповідає натиснутій лівій клавіші, біт 1 – правій, біт 2 – середній.

Функція MoveMouseCursor служить для встановлення курсору миші в точку з заданими координатами.

При необхідності можна обмежити область переміщення курсору екрану. Для задання області можливого переміщення по горизонталі служить функція SetHorzMouseRange, по вертикалі – функція SetVertMouseRange.

 

Задання курсору:

 

В графічних режимах високого розширення (640 на 350 пікселів і вище) курсор задається двома масками 16 на 16 біт та зміщенням координат курсору від верхнього лівого кута масок. Кожну з масок можна трактувати як зображення, складене з піклселів білого (відповідний біт рівний 1) та чорного (відповідний біт рівний 0) кольорів. При виводі курсору на екран спочатку на вмістиме екрану накладається (з використанням операції AND_PUT) перша маска (також її називають AND-маскою), а потім на теж саме місце накладається друга маска (з використанням операції XOR_PUT). Всі необхідні параметри для задання курсору миші містяться в полях структури CursorShape. Встановлюється форма курсор за допомогою функції SetMouseShape.

 

 

Деколи бажано задати на екрані область, при попаданні в яку курсор миші автоматично гаситься. Для цього використовується функція SetHideRange. Але при виході курсору з області гасіння він не відновлюється. Тому для відновлення нормальної роботи курсору необхідно викликати функцію ShowMouseCursor, незалежно від того, потрапив курсор в область гасіння чи ні.

 

Замість того, щоб весь час опитувати драйвер миші, можна передати драйверу адрес особливої функції, яку потрібно викликати при настанні заданих подій. Для встановлення цієї функції потрібно скористатися функцією SetMouseHandler, де в якості першого параметру виступає вказівник на функцію, а другий параметр задає події, при настанні яких слід викликати передану функцію. Події задаються бутовою маскою. Можливі події визначаються за допомогою символічних констант MOUSE_MOVE_MASK, MOUSE_LBUTTON_PRESS та інших. Умови події поєднуються побітовою операцією АБО, передана функція отримує 4 параметра – маску події, що спричинило собою виклик функції, маску стану клавіш миші та поточні координати курсору. По завершенні роботи програми потрібно обов’язково прибрати обробник подій (за допомогою функції RemoveMouseHandler).

 

Код основної частини програми:

 

 

// File Example1. срр

#include <bios.h>

#include <conio.h>

#include "Mouse.h"

CursorShape с = {

0x0FFF, 0x07FF, 0x01FF, 0x007F, 0x801F, 0xC007,

0xC001, 0xE000, 0xE0FF, 0xF0FF, 0xF0FF, 0xF5FF,

0xF8FF, 0xFCFF, 0xFCFF, 0xFEFF, 0x0000, 0x6000,

0x7800, 0x3E00, 0x3F80, 0x1FE0, 0x1FF8, 0x0FFE,

0x0F00, 0x0700, 0x0700, 0x0300, 0x0300, 0x0100,

0x0100, 0x0000, 1,1

};

 

int DoneFlag = 0;

 

void SetViOeoMode (int mode)

asm {

mov ax, mode

int 1Oh

}

 

#pragma argsused void

WaitPress (int mask, int button, int x, int у) {

if (mask & MOUSE_R8UTTON_PRESS) DoneFlag = 1;

}

 

main ()

{

SetVideoMode (0x12);

ResetMouse ();

StiowMouseCursor ();

SetMouseShape (с);

SetMouseHandler (WaitPress);

MoveMouseCursor (0, 0);

while (!DoneFlag)

HideMouseCursor ();

RemoveMouseHandler ();

SetVideoMode (3);

}

 

Формування графічного курсору

 

Графічний курсор може з’являтися на екрані чи зникати з екрану за допомогою викликів відповідних функцій. Цей курсор визначається деяким блоком пікселів, що має прямокутну форму. Коли такий блок переміщується по екрану та взаємодіє з пікселями зображення, що знаходиться «під» ним, відбувається формування фону та зображення графічного курсору. Результати цієї взаємодії визначаються вмістимим двох масивів, розмірами 16х16 біт кожний, один з яких являється маскою екрану, а інший – маскою курсору. Маска екрану визначає яка частина пікселів графічного блоку курсору буде формувати образ курсору, а яка частина буде фоном курсору. Маска курсору визначає ті пікселі, які будуть приймати участь в формуванні кольору курсору. Перед тим як виконати будь-які зміни для зображення на тій частині екрану, яка знаходиться безпосередньо під курсором, курсор необхідно сховати (відновити зображення на місці курсору), для того щоб згодом при переміщенні курсору на нове зображення не наклалася частина старого.

При формуванні графічного курсору драйвер використовує дані, що знаходяться в екранній пам’яті комп’ютера та визначають кольори кожного пікселя на екрані. Для кожного пікселя графічного блоку курсору драйвер виконує наступні побітові логічні операції: логічне множення (AND) маски екрану на поле екрану, що знаходиться під курсором, і потім логічну операцію виключного АБО (XOR) маски екрану і результату попередньої операції.

 

 

В таблиці наведені варіанти всеможливих сполучень:

 

Біт маски екрану

Біт маски курсору

Результуючий біт на екрані

     
     
   

не зміниться

   

інвертується

 

Приклад масивів масок курсору та екрану

 

cursor[1][0]=0x0001; /* 0000000000000001 */

cursor[1][1]=0x0002; /* 0000000000000010 */

cursor[1][2]=0x000e; /* 0000000000001110 */

cursor[1][3]=0x003c; /* 0000000000111100 */

cursor[1][4]=0x00fc; /* 0000000011111100 */

cursor[1][5]=0x03f8; /* 0000001111111000 */

cursor[1][6]=0x0ff8; /* 0000111111111000 */

cursor[1][7]=0x3ff0; /* 0011111111110000 */

cursor[1][8]=0xfff0; /* 1111111111110000 */

cursor[1][9]=0x3fe0; /* 0011111111100000 */

cursor[1][10]=0x1fe0; /* 0001111111100000 */

cursor[1][11]=0x3fc0; /* 0011111111000000 */

cursor[1][12]=0x78c0; /* 0111100011000000 */

cursor[1][13]=0xf000; /* 1111000000000000 */

cursor[1][14]=0xe000; /* 1110000000000000 */

cursor[1][15]=0xc000; /* 1100000000000000 */

 

cursor[0][0]=0xfffc; /* 1111111111111100 */

cursor[0][1]=0xfff8; /* 1111111111111000 */

cursor[0][2]=0xffe0; /* 1111111111100000 */

cursor[0][3]=0xff81; /* 1111111110000001 */

cursor[0][4]=0xfe01; /* 1111111000000001 */

cursor[0][5]=0xf803; /* 1111100000000011 */

cursor[0][6]=0xe003; /* 1110000000000011 */

cursor[0][7]=0x8007; /* 1000000000000111 */

cursor[0][8]=0x0007; /* 0000000000000111 */

cursor[0][9]=0x800f; /* 1000000000001111 */

cursor[0][10]=0xc00f; /* 1100000000001111 */

cursor[0][11]=0x801f; /* 1000000000011111 */

cursor[0][12]=0x021f; /* 0000001000011111 */

cursor[0][13]=0x07ff; /* 0000011111111111 */

cursor[0][14]=0x0fff; /* 0000111111111111 */

cursor[0][15]=0x1fff; /* 0001111111111111 */


Дата добавления: 2015-08-27; просмотров: 95 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
Тема:Робота з гнучкими та жорсткими дисками. Форматування дисків. | Тема:Розробка драйверів ЗП ЕОМ

mybiblioteka.su - 2015-2024 год. (0.121 сек.)