Реферат: Методичні вказівки до циклу лабораторних робіт з курсу “Системне програмування”


Міністерство освіти та науки України

НУ ”Львівська політехніка”


Методичні вказівки

до циклу лабораторних робіт

з курсу

“Системне програмування”

для студентів базового напрямку

6.0915 “Комп`ютерна інженерія”


Затверджено

на засіданні кафедри електронних

обчислюваних машин

Протокол № 14 від 2 квітня 1996 року


Львів – 1996
Методичні вказівки до циклу лабораторних робіт з курсу “Системне програмування”
для студентів базового напрямку “Комп`ютерна інженерія” /Упор. Л.О.Березко,

Т.В.Кицмей, Р.І.Беген. – Львів:НУЛП. – 21с.


Упорядники : Л.О.Березко,к.т.н., доц.

Т.В.Кицмей, к.ф.-м.н.,ст.викл.

Р.І.Беген, асист.


Відповідальний за випуск : А.О.Мельник, д.т.н.,проф.


Рецензенти : В.В.Троценко,к.т.н., доц.

К.М. Обельовська,к.т.н., доц.


^ Лабораторна робота №1
(4 години)


Назва роботи : Ввід інформації з клавіатури.

Мета роботи : Ознайомитись з можливостями організації вводу з клавіа-

тури в комп`ютерах сімейства ІВМ РС.

^ Загльні положення Ввід інформації в комп`ютер може бути виконаний на трьох рівнях:
зверненням до функцій операційної системи (МS DOS);

зверненням до функцій BIOS;

фізичним безпосереднім доступом до апаратних засобів.

Перший рівень дозволяє пропускати клавіатурний ввід через через інста- льованні драйвери ,забезпечує контроль за клавішами Crtl-C ( Crtl–Break)

та стандартну для операційної системи обробку помилок .

^ Другий рівень дозволяє програмі слідкувати за натиском усіх, а не тільки

символьних клавіш , виконувати керування апаратурою клавіатури і інш.

Третій рівень – ( безпосередній доступ до буферу клавіатури )значно під-
^ вищує продуктивність програми. В деяких випадках необхідна імітація
натиску клавіш клавіатури з записом кодів безпосередньо у буфер. При

цьому фізично натиск клавіш не відбивається. Так будуються ,наприклад,

демонстрційні програми.

Коротко зупинимось на апаратних засобах персонального комп`ютера для

вводу з клавіатури. Клавіатура вміщує вбудований мікропроцесор. Він при

кожному натисканні клавіші визначає її порядковий номер ( скенд-код ) і

розміщує його в порт спеціальної електронної схеми – програмованого

переферійного інтерфейсу (ППІ). Скенд-код у перших 7 бітах вміщує

порядковий номер натиснутої клавіши, а восьмий біт дорівнє “о” , якщо

клавіша була натиснута (прямий скенд-код), та дорівнює “1”,якщо клавіша

була відпущена (зворотній скенд-код). Коли скенд-код записаний у порт 60h , схема ППІ видає сигнал “підтвердження” повідомляючи мікропроце- сор клавіатури про те, що код прийнято.

Якщо клавіша натиснута довше деякого часу затримки ( delay value ), мікропроцесор клавіатури починає генерувати з заданою частотою (typenic)

прямий скенд-код натиснутої клавіші.Коли скенд-код прийнятий схемою

ППІ,аппаратура комп`ютера генерує переривання 9.Стандартний обробник

переривання 9 – це програма ,що входить до BIOS ISR аналізує скенд-код,

та по спеціальним правилам перетворює його ( ISR – Interrupt Servise Routine – програма обслуговування переривання ).

Буфер BIOS для запису кодів клавіш займає 32 байта пам`яті з адреси

40:1ЕН (1086 в 10 с/г). Запис йнформації до буферу виконує ISR BIOS

переривання 9 , читаня – функції ISR BIOS переривання 16Н. Буфер

клавіатури розрахований на 15 натискань клавш , що генерують двохбайтні

коди , і тому має 30 байт для кодів клавіш та два додаткових байта , які

резервуються під двохбайтовий код для клавіші ENTER.

Буфер організовується як кільцева черга , доступ до якої виконується за

допомогою покажчика “голови” (head-pointer),адреса якого 40:1АН ( 1050

в с/г), та покажчика “хвоста” (tail pointer) адреса якого 40:1СН(1052 в с/г).

Значення, що записані у покажчиках дорівнюють зміщення до слова , де

буде записаний обробником переривання 9 код клавіші ,що буферизується,

т.т. перше вільне слово буфера.

Покажчик “годови” задає зміщення слова , яке буде повернуте запиту буферизованого вводу з клавіатури , зробленого операційного систимою

або BIOS.

Буфер для клавіатури – це класичний приклад використання кільцевого

кільцевого буферу для органіції асихронної взаємодії програм за схемою

“виробник-споживач”. Одна з програм (ISR BIOS переривання 9)“виробляє”

інформацію , тобто , вона є процесом–виробником. Програма , що

виконується , через функцію АН=00Н переривання 16Н BIOS “споживає”

інформацію,тобто є процесом-споживачем.Асинхронність взаємодії означає

що запис до буферу нової їнформації та читання з нього відбувається у випадкові,не зв`язані моменти часу. Тому що “виробник” постійно аналізує наявність переповнення буферу ,не відбувється перевизначення не прочи-

таних ще “споживачем” кодів клавіатури . Тобто при переповненні буферу “виробник” блокується до того часу , доки “споживач” не прочитає одне

або декілька слів з буферу .Якщо ж буфер пустий і виконується спроба читання інформації, функція АН=00Н переривання 16Н BIOS переходить до

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

“голови” і “хвоста”. Фактично , біжуча програма , що виконує ввід з

клавіатури, блокується , не даючи “споживати” неіснуючу ще інформацію.


Перший рівень вводу з клавіатури

Послідовність дій системи при вводі з клавіатури така:

функція MS-DOS викликає драйвер клавіатури,передаючи йому запит

на ввід одного символу з буферу клавіатури;

драйвер,виконуючи запит, звертається до потрібної функції перерива-

ння 16Н BIOS;

ISR BIOS переривання 16Н читає з буферу клавіатури потрібне слово

та передає його в драйвер;

драйвер повертає байт (звичайно молодший) в MS-DOS.

Таким чином , функції MS-DOS та функції бібліотеки Turbo C, що спираються на них,слабо залежать від особливостей апаратури, оскільки система ізольована від неї двома шарами програмного забезпечення –

драйверами та BIOS.

Для вводу з клавіатури використовується такі функції MS-DOS:

АН = 01Н – ввід з очікуванням з стандартного пристрою вводу (клавіатури);

АН = 06Н – ввід-вивід з консолі;

АН = 07Н – ввід з консолі з очікуванням без “відлуння” на екран;

АН = 08Н – подібна до попередньої , крім реакції на натискання Crtl-Break (викликається переривання 23Н);

АН = ОАН – буферизований ввід рядка з консолі;

АН = ОВН – перевірка стану стандартного вводу;

АН = ОСН – ввід з клавіатури з чисткою буфера;

АН = 3FH – функція префіксного читання з файлу або пристрою.

Бібліотечні функції Turbo C для роботи з файлами можна поділити на дві

групи: потокові та префіксні. Потокові функції виконують додаткову буферизацію інформації, що приводить до подвійної буферизації інфор-

мації: на рівні бібліотечної функції та на рівні MS-DOS. Префіксні

функції не виконують додаткову буферизацію , а одразу звертаються до

префіксних функцій MS-DOS. Початкові функції більш ефективні при

перенесенні інформації між файлом та Сі-програмою по символам та рядкам. Префіксні функції – блок-орієнтовані функції і їх використа ння дає виграш в продуктивності при перенесені одразу цілої групи

байтів за одне звертання до функції. Розглянуті функції MS-DOS для вводу

з клавіатури можна викликати одразу з Сі-програми через такі функції Тurbo C, як geninterrupt(), int86(), intr(), та інші ,або нявно функціями вводу

Turbo C. Bелика група функцій Turbo C для вводу з клавіатури – це функції

потокового та префіксного вводу. Використовуючи функції вводу, прототи-

пи яких розміщені у файлі stdio.h, неможливо виконати , наприклад, не

відображення символів і т.ін. Для виконання таких дій використовуються

функції Turbo C,прототипи яких розміщені у файлі conio.h.Вони,як правило

розраховані на побудову найпростішого віконного інтерфейсу.

Приклад використання функцій cgets()*L7-1.C*,функцій gets() та getsh()

*L7-2.C*, getpass() - *L7-3.C*, ungetch() – *L7-4.C*

^ Другий рівень вводу з клавіатури
Інтерфейсом програм у персональному комп`ютері з клавіатурою є переривання 16Н BIOS.

Його функції такі:

АН=00Н– читання з очікуванням двохбайтового коду з буферу клавіатури

АН=01Н– читання без очікування двох байтового коду з буферу клавіа…;

АН=02Н– визначення стану шифра тригерних клавіш;

АН=03Н– установка затримки та частоти повторення ;

АН=04Н – запис до буферу клавіатури двохбайтового коду клавіші ( ця

функція не має аналогів у бібліотеці Turbo C ).

Функції Аh=00-02H є аналогами функції 00-02Н, але для клавіатур з 102/102

клавішами. Приклади використання функції enter-kb-BIOS ( ) - *L7-5.C* ,

*L7-6.C*.

Функція АН=00-02Н переривання 16Н BIOS покладенні в основу функції bioskey( ) бібліотеки Turbo C. Приклади її використання – *L7-7.C*


Третій рівень вводу з клавіатури.

Для багатьох професійних програм необхідним є безпосереднім доступ до буферу клавіатури. Для функції цього типу існує власний заголовочний

файл kb.р. Це такі функції:

Clear-kb ( ) – очищення буферу клавіатури;

Gets-kb ( ) – очищення буферу клавіатури та ввід з очікуванням двохбайтового коду натискання клавіші;

Key-kb ( ) – читання двохбайтового коду натискання клавіші;

Gets-kb ( ) – розширене визначення стану шифт – та тригерних клавіш

на момент виклику функції;

Sets-kb ( ) – розширена установка стану шифт – та тригерних клавіш;

Enter-kb ( )– запис безпосередньо до буферу клавіатури коду натискання

клавіш.

Приклади використання функцій – *L7-8.C*, *L7-9.C*, *L7-10C*, *L7-11.C*,

*L7-12.C*,*L7-13.C*

^ Порядок виконання роботи
1.В середовищі MS-DOS ініціалізувати одну з систем програмування

Turbo C, Turbo C++, Boorland C++.

2.Відкомпілювати та виконати один або декілька вказаних вказаних викла-

дачем прикладів (Всі приклади з ВООК/2).

3.Модифікувати вказаний приклад (або приклад ) певний чином. Виконати

модифікований приклад .

4.Зробити висновки з особливостей функціонування тих або інших програ–

мних засобів вводу інформації з клавіатури.


Вміст звіту :

1.Порядок виканоння роботи.

2.Основні теоретичні положення.

3.Результати виконання модифікованих та немодифікованих прикладів.

4.Висновки щодо особливостей використання та ефективності програмних

засобів вводу з клавіатури.


^ Лабораторна робота №2

(2 години )

Назва роботи: Обмін інформації з файлами засобами мови Turbo C.

Мета роботи: Ознайомитись з можливостями організації обміну інформа-

цією між файлами засобами бібліотечних функцій Turbo C.

^ Загальні положення
Бібліотечні функції Turbo C для роботи з файлами можна розділити на дві

групи: потокові та префіксні. Як ті так і інші звертаються, в принципі, до одних і тих самих функціональних викликів MS DOS . Але потокові функції виконують додаткову буферизацію, що викликає подвійну буферизацію на рівні бібліотечних функцій і на рівні MS DOS. Префіксні функції одразу звертаються до префіксних функцій MS-DOS: це блок орієнтованих функцій і їх використання дає виграш у продуктивності при перенесенні одразу цілої групи байтів за одне звернення до функцій. Максимальний виграш досягається тоді, коли розмір блоку , що переноситься із програми кратний розміру сектора диску (512 байт). Обмін інформацією між файлом і Сі-програмою по символам і по рядкам більш ефективній при використанні потокового файлового вводу-виводу.

Як для потокових так і для префіксних функцій файлового вводу-виводу можливі два різних режими доступу до файла: текстовий і двійковий. В

текстовому режимі відбувається трансляція символів СR (0DH,0AH)(ознака

кінця регулярного файлу).При читананні інформації з файла в цьому режимі

пара символів СR LF перетворюється в один символ нового рядка `\n`,а при

записі символ нового рядка перетворюється в пару символів СR LF. Крім

того як тільки з файла зчитується символ Crtl-Z,(ASCII 1AH – символ EOF

регулярного файла ),рахується, що кінець файла вже досягнуто(умова EOF).

Таким чином у текстовому файлі не можна прочитати інформацію після символа Crtl-Z. При виконанні файлового вводу-виводу у двійковому режимі

ніякого перертворення символів не відбувається,а всі вони розглядаються як такі,що не мають якогось особливого значення.

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

0-BINARY – доступ до файла виконуються у двійковому режимі;

0-ТЕХТ – доступ до файла виконується в текстовому режимі;

По замовченню fmode встановлюється в значення 0-ТЕХТ.

Це значення може бути перевизначене при відкритті файла або оператором присвоєння.


Доступ до файлів через потік вводу-виводу.

Відриття файла вводу-виводу через потік виконує функція fopen( ), закриття fclose( ).Приклад,що демонструє використання функцій стандартної бібліотеки для відкриття та закриття файлів *L3-1.C*.Ім`я та режим відкриття задаються в командному рядку при запуску програми. Після успішного відкриття файла програма може виконувати файловий ввід-вивід. Функція потокового вводу-виводу можна розділити на чотири групи:

функції символьного вводу-виводу, за одне звертання до яких переноситься один символ;

функції порядкового вводу-виводу, за одне звертання до яких переноситься ASCIIZ-рядок символів( рядок у форматі ASCIIZ- це масив

елементів типу char, в кінці якого символ`\0`нуль-термінатор);

функції блокового вводу-виводу, за одне звертання до яких переноси -ться цілий блок (або запис) інформації;

функції форматованого вводу-виводу, при виконанні яких виконується присвоєння значень змінних (ввід) або вивід представлення змінних змінних у потік.

Приклад посимвольного вводу-виводу інформації у файли, що відкриті як потоки – *L3-2.C*.Програма *L3-3.C* виконує посимвольне копіювання файла джерела у файл призначення.

Приклад порядкового вводу-виводу – *L3-4.C*, *L3-5.C*. Функції dfread( )

та fwrite( ) дозволяють виконувати виконувати перенос між файлом і програмою блока байтів або записів (records) .Блок (запис)– це група поруч

розташованих байтів, що немають ніяких спеціальних розділювачів.

Приклад блокового вводу-виводу – *L3-6.C*.Функції форматованого вводу-

виводу наведені у прикладі *L3-7.C*.

Регулярний та спеціальні символьні файли не логічному рівні представляються стрічкою байтів , що має початок і кінець.Місце у файлі куди записується інформація, або звідки вона зчитується, визначається значенням покажчика запису-читання файла. Стандартна Сі -бібліотека включає функції, що дозволяють встановлювати на потрібному місці у файлі покажчик запису-читання,або,інакше кажучи,виконувати доступ до довільного байту файла.При виконанні послідовного доступу покажчик позиціонується автоматично на довільній операції читання чи запису. Але “пересуновши” покажчик на довільне місце,можна читати інформацію з файла або записувати її в файл у довільному порядку. Дві потокові функції, що найчастіше використовуєтьсядля явного керування положенням покажчика записучитання це rewind( ) та fseek( ).

Приклад довільного доступу до файлів – *L3-8.C*.


Префіксний доступ до файлів

Turbo C вміщує певну групу функцій префіксного доступут до файлів, або так званих “системних викликів” або “процедур нижнього рівня” ( LOW LEVEL FILE I/O Routines ).

Префіксне відкриття файла здійснюють дві функції: open( ), _open( ).

Наступні функції створюють файли : creat( ), _creat( ), createnew( ),

createtemp( ).Закриття файлів відкритих префіксним доступом, виконується функціями close( ), _close( ).Hеявне закриття файлів, відкритих програмою,

виконує операційна система при завершенні програми.

Приклад використання цього класу функцій – *L3-12.C*, *L3-13.C*, *L3-14.C*.

Перенесення інформації між прикладною програмою і файлом для префіксного доступу, виконують дві пари функцій: read ( )/_read( ) та

write( )/_write( ). Приклад використання *L3-15.C*.


Порядок виконання роботи .

В середовищі MS DOS ініціалізувати одну з систем програмування:

Turbo C, Turbo C++, Borland C++.

2. Відкомпілювати та виконати один або декілька прикладів, вказаних

викладачем,виконючи модифікації,потрібні для функціонування тих чи.

інших функцій. Всі приклади з ВООК2.

3. Зробити висновки щодо особливостей функціонування засобів обміну

інформацію між файлами.

Вміст звіту:

Порядок виконання роботи.

Основні теоретичні положення.

Результати виконання прикладів.

Висновки щодо особливостей використання та ефективності програмних

засобів обміну інформацією


Лабораторна робота № 3

( 4 години )

Назва роботи: Вивід інформації на екран ПК.

Мета роботи: Ознайомитись з можливостями організації виводу

інформації на екран ПК.

^ Загальні положення.
Вивід інформації на екран ПК може виконуватись на рівні:

МS DOS з використанням функцій переривання 21Н;

безпосереднім доступом до апаратних засобів;


Перший рівень – мобільний ,але повільніший . Функції MS DOS для вик-

ку іінформації на екран викликають драйвер консолі ( виконують вивід в спеціальний символьний файл CON ). Якщо в системі інстальований спеціальний драйвер ( наприклад ANSY.SYS ),то можуть використовуватись

додаткові засоби по керуванні екраном .Суть розширеного керування полягає в передачі драйверу консолі спеціальних керуючих рядків.Драйвер розпізнає початок керуючого рядка по символу 27Н (1ВН).Символи , що передаються за ним на екран розглядаються як параметри команди , яку виконує драйвер. Інші додатні сторони функцій MS DOS:

автоматичне позиціювання курсора та скролінг (прокрутка) екрану;

реакція на натискання клавіш Crtl-Break.

Недоліки – неможливість безпосереднього керування курсором та атрибутом символів. На рівні MS DOS працюють функції стандартного виводу Turbo C, їх прототипи розміщені у файлі stdiо.h

^ Другий рівень - вивід на рівні BIOS дає більш широкі можливості по керруванню екраном. Саме ці функції використовуються драйверами MS DOS для виводу інформації на екран. Недоліком функції BIOS є невелика швидкість виводу, що особливо відчувається при роботі в графічних режимах. На рівні BIOS працюють функції консольного виводу Turbo C, їх прототипи розміщені у файлі conio.h.

Третій рівень – використовується у випадках, критичних за швидкістю


виводу, коли треба виконувати вивід, використовуючи безпосередній доступ до портів відео-пам`яті адаптера. Це дає можливість досягти максимально можливої швидкості виводу, але вимагає максимальних зусиль програмістів. Функції консольного виводу Turbo С можуть за вибором користувача працювати і на самому нижньому рівні, виконуючи доступ до відео-буфера при роботі у текстовому режимі. Вивід на екран засобами BIOS:

Переривання 10Н має в своєму складі декілька функцій для виводу на екран :

АН=09Н– вивід символа із заданим атрибутом в біжучій позицій курсора;

АН=0АН– вивід символа без атрибута в біжучій позиції курсора;

АН=0ЕН– вивід символа без атрибута в біжучій позиції курсора в режимі “телетайп”;

АН=13Н – вивід рядка символів з різними додатковими опціями:

із зсувом курсора та без нього;

із визначенням атрибута для всього рядка, для кожного символа, а також без визначення атрибута.

Як приклад використання функції АН=09Н можна розглянути функцію

wert-prn( ) (приклад *L9-2.C*).Корисною для виведення рамок ,заповнення областей екрану є функція printche( ) (приклад *L9-3.C*,*L9-4.C*). Ці функції дають майже максимально можливу при використанні BIOS швидкість.


Скролінг.Очищення вікна всього екрану.

Функції АН=06 та 07 переривання 10Н BIOS виконують так званий скролінг (прокрутку) вікна екрану . При виконанні скролінгу на один рядок догори вся інформація у вікні переміщується на рядок догори. Знизу з`являється чистий рядок догори. Знизу з`являється чистий рядок.

Сі-функція scroll( ) виконує вертикальний скролінг вікна екрану , що задається рядком і стовпчиком лівого верхнього , та рядком і стовпчиком правого нижнього кутів вікна. Якщо змінна direction дорівнює UP, то відбувається скролінг на один рядок догори, якщо вона дорівнює DOWN, скролінг на один рядок донизу , якщо ENTIRE – відбувається очищення екрану (приклад *L9-5.C*). Функція expl_win виводить виводить вибухаюче вікно на екран ( приклад *L9-6.C*). Вивід інформації на екран засобами Turbo C.

Turbo C вміщує великий набір функцій вводу-виволу інформації у вікно екрану. Прототипи цих функцій знаходяться безпосередньо в заголовочному файлі соnio.h. На відміну від функцій стандартного вводу-виводу вони дозволяють керувати кольором виводимих символів.

Вони не виходять за межі активного в біжучий момент вікна. При досягненні правої вертикальної межі курсор автоматично переходить на початок наступного рядка у вікні , а при досягненні нижньої вертикальної межі виконується скролінг вікна догори.

Приклад функції горизонтального скролінга текстового вікна на одну позицію вліво або вправо в програмі *L9-10.C*. Використовується функція movetext( ).

Функція файла соnio.h в принципі дозволяють побувати віконний інтерфейс довільної складності , різноманітні системи меню, т.ін. Програма *L9-11.C* працює в графічному режимі 10Н ЕGA та VGA адаптерів. Ця демонстраційна прогама створює на екркані вікно вводу-виводу. Програма приймає з клавіатури ціле число та рядок символів, потім виводить їх на екран. Вікно вводу-виводу займає 25 стовбчиків та 10 рядків у лівому верхньому куті екрану. Попередній вміст екрану зберігається, а перед звертанням програми відновлюється.

Читання інформації з екрану .

В практиці програмування необхідність читання вмісту екрана виникає , як правило , в таких випадках:

при організації віконного інтерфесу ;

при побудові програм переносу резидентною програмою тексту в довільний текстовий редактор;

при побудові різноманітних резидентних HELP систем, які видають “підказку” по слову у біжучій позиції курсора (контекстно-чутлива підказка).
Розглянемо приклад Сі-функцій , яка “читає” слово інформації в біжучій
позиції курсора. Словом називається довільна послідовність ASCII-символів , що не включає символи-розділювачі. Всі символи-розділювачі розміщають в ACIIZ-рядок , покажчик на початок якого є параметром функції separators. ASCIIZ-рядок – це масив елементів типу char, в кінці якого розміщенний символ `\0`-нуль-термінатор. Слово з екрана “копіюється” в статичний буфер функції і доповнюється в кінці нуль-термінатором, утворюючи звичайний ASCIIZ-рядок. Покажчик на початок повертається в точку виклику. В змінних на які вказує str та stlob (нумерується від 0 ), значення передаються в рядок та стовбчик на початку слова на екрані. Якщо слово не знайдено , str та stlob зберігають біжучу

позицію курсора . Значення покажчика , що повертається функцією, NULL, свідчить про відсутність в біжучій позиції курсора слова. В такому випадку значення рядка та стовпчика з змінних , на які посилаються str та stlob, будуть дорівнювати біжучий позиції курсора.

Алгоритм роботи функції read-str( ) такий. Визначається біжуча позиція курсора . З відеопам`яті зчитується весь рядок символів , в якому розташовується курсор . Потім починається цикл виділення та аналізу слів в рядку. Для “розбору” рядка на слова використовується функція Turbo C виділення лексем strtok ( ).

Якщо біжуче положення курсора попадає на слово, робота функції завершується і в точку виклику передається покажчик на виділене слово . Якщо у біжучій позиції курсора записаний символ розділювач, повертається слово , що знаходиться зліва від позиції курсора . Якщо ж зліва знаходиться ще один символ розділювач , то повертається NULL. Приклад використання функції у файлі *L9-14.C*. Максимально ефективний варіант функції lh-light( ).(“перефарбування” рядка або вертикально , або горизонтально) в програмі *L9-15.C*.


Порядок виконання роботи :

В середовищі MS DOS ініціалізувати одну з систем програмування: Turbo

C, Turbo C++, Boorland C++.

Розглянути можливості виводу на екран засобами BIOS,відкомпілювавши

та виконавши приклади (Всі приклади з ВООК2).

Розглянути приклади для виконання скролінгу та очищення.

Розглянути засоби Turbo C виводу на екран та читання інформації з екрану.



Вміст звіту :

Порядок виконання роботи.

Основні теоритичні положення.

Результати виконання прикладів.

4. Висновки щодо особливостей використання та ефективності програмних

засобів обміну інформацію.


Лабораторна робота №4

( 2 години )

Назва роботи : Організація функціонування маніпулятора “миша”.

Мета роботи : Ознайомитись з принципами функціонуваня маніпулятора

“миша”. Засобами Turbo C організувати функціонування

маніпулятора “миша”.

^ Загальні положення Апаратно маніпулятор являє собою периферійні пристрій, що підключається до одного з адапторів послідовного зв`язку комп`ютера. До складу маніпулятора входять датчики преміщення “миші” в горизонтальному та вертикальному напрямках, індикатор натиску кнопок та блок зв`язку з інтерфейсом . Блок зв`язку з інтерфейсом передає в адаптер послідовного зв`язку байти даних при довільному натисканні кнопок та переміщенні “миші” в горизонтальному та вертикальному напрямках на певну величину , так звану “міккі”. Один “міккі” звичайно дорівнює 1/200 частині дюйма. Значення зміщення, що передаються в адаптер, мають “знак”. Наприклад, при переміщенні маніпулятора знизу догори на один “міккі” передається байт 01Н, а при переміщенні зверху донизу – байт FFH. Обробник переривань від послідовного адаптера сумує отримані значення з врахуванням знаку . Таким чином, завжди є можливість визначити “біжучу” позицію маніпулятора відносо моменту початку спостереження. Звичайно спостереження за “мишею” починаються після завантаження драйвера “миші” або виконання операції ініціалізації “миші” з програми користувача. ^ Основними частинами драйвера миші є : Секція інсталяції драйвера. Обробник апаратних переривань від адаптера послідовного зв`язку (в ІВМ РС АТ адптерам СОМ1 та СОМ2 відповідають переривання – 0СН та 0СВ). ^ Обробник програмного переривання інтерфейса прикладної програми з “мишею” (переривання 33Н).
Обробник програмного переривання 10Н керування екраном.

Кожна програма , що використовує для вводу інформації маніпулятор

“миша”, повинна виконати такі підготовчі операції:

Визначити, чи інстальований драйвер “миші”.

Задати вид і форму курсора маніпулятора .

Описати межі переміщення курсора “миші” по екрану.

Описати “чутливість” курсора, яка дорівнює числу “міккі”,що приходяться на один піксель екрана по горизонталі та вертикалі.

Встановити поріг “подвоєної” швидкості курсора “миші”.

“Включити” курсор маніпулятора( зробити видимим на екрані).

Встановити курсор в початкову позицію на екрані у відповідності з потребами програм.

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

Курсор маніпулятора встановлений в центрі екрана та виключений.

Чутливість маніпулятора по вертикалі дорівнює 2 “міккі” на піксел, по горизонталі – 1 “міккі” на піксел.

Поріг “подвійної” швидкості встановлюється рівним 64 “міккі”/сек.

Встановлюється форма курсора по змовченню.

Координати лівого верхнього кута області переміщення курсора маніпулятора відповідають координатам (00), а координати ніжнього правого кута області перемщення маніпулятора – максимальним координатам біжучого відеорежиму мінус 1.

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

Сі-функція завдання параметрів курсора маніпулятора “миша” для текстового режиму роботи адаптера в програмі *L4-1.C*.

В графічному режимі роботи відеоадаптора може бути описана довільна власна форма курсора в межах прямокутника 16x16 пікселів курсорів в графічному режимі описується двома масками розміром 16x16 біт кожна . XOR-маска (маска курсора ). При переміщенні курсора попередній вміст екрану відновлюється драйвером “миші “. Маски, комбінують , визначають спосіб обробки біжучого коду кольору пікселя на екрані (pixel-Picture Element – телевізійна точка на екрані).



Біт AND-

маски

Біт XOR-

маски

Колір піксела на екрані

0

0

Колір фону

0

1

Білий колір

1

0

Біжучий колір пікселя

1

1

Побітова інверсія біжучого кольору пікселя


В графічні режимах задається так звана “гаряча пляма” ( Hot spot) у відносних координатах, за точку відліку яких приймається верхній лівий кут прямокутника 16x16 пікселів. “Гаряча пляма” – це той піксел , на який вказує в біжучий момент графічний курсор . Сі-функція установки графічного “миші” в програмі *L4-2.C*.Для отримання графічнрго курсора,

Якого видно на довільному фоні , поступають наступним чином.AND-маскою задають із слів FFFFH,a XOR-маску описують таким чином , щоб в нійстояли одиниці в тих бітах , які утворюють контури кукрсора, а нулі – в усіх решта бітах маски .В прикладі викликається функція для завдання графічного курсору у вигляді стрілки (функція set-graph-cursor ( ) ).

Одразу після ініціалізації екрану , за область допустимих переміщень курсора по замовченню приймається весь екран. Але завжди є можливість обмежити переміщення курсору окремо по горизонталі та по вертикалі. Сі-фуекції для установки меж переміщення курсору по вертикалі та по горизонталі в програмах *L4-3.C*, *L4-4.C*. Після того, як виконані всі необхідні підготовчі операції, програма може використовувати маніпулятор для вводу інформації. Інформація, що вводиться, - це біжуча позиція курсора та стан кнопок маніпулятора. Періодичний ввід інформації з “миші” та попадання курсору в ті або інші області екрану дозволяють виконувати потрібні дії – “відкрити2 підменю і т.ін. визначення стану кнопки (натиснута двічі) використовується як команда на виконання програмою додаткових дій.

Сі-функція визначення біжучих координат курсора та стану кнопок “миші” в прикладі *L4-5.C* та прикладі *L4-6.C* (фіксація одноразового або дворазового натиску на кнопку “миші”).

При переміщенні маніпулятоорапостолу , драйвер пересуває “мишу” по екрану без участі програми. Але і прикладна програма має можливість керувати позицією курсора “миші”. Сі-функція позиціонування курсору “миші” в точку екрана з координатами int hor-position та int ver-position в прикладі *L4-7.C*.

Для отримання демонстраційної програми , яка читає стан “миші” та фіксує всі переміщення курсора “миші” в межах екрану у верхньому рядку треба, використовуючи файл проекту, виконати сумісну компіляцію файлів : ВООК3 – L3-13.C, L4-1.C,L4-3.C,L4-5.C – L4-8.C та ВООК2 – L8-11.C,L9-5.C,L9-8.C,L9-9.C.

Для отримання демонстраційної програми, що демонструє можливість використання вводу з “миші” для “малювати” , треба ,використовуючи файл проекту, виконати сумісну компіляцію файлів ВООК3 – L4-1.C-L4-5.C, L4-7.C – L4-9.C та ВООК2 – L8-11.C, L9-2.C, L9-5.C. В ції програмі адаптер встаноалювається в графічний режим 12Н. Далі описується графічний курсор. В верхній частині екрану виводяться номера рядка та стовпчика курсора маніпулятора. Окрім того , відображається код кольора пікселя, що використовується для “малювання”.Для виводу текста в графічномуу режимі використовується варіанти функція scroll( ), hor-pm( ) та printche ( ), що працюють через BIOS (ВООК2 – L9-5.C, L9-2.C, L9-3.C. Позиціонування курсора виконує функція goto-xy ( ) (L8-11.C). При натисканні лівої кнопки маніпулятора він “малює” піксел в біжучий позиції. При кожому натисканні правої кнопки код кольору малюємого піксела збільшується на 1. При одночастному натисканні лівої та правої кнопок “миші” демонстраційна програма заверщує свою роботу для виводу пікселя на екран використовуються функція plot( )(BOOK2-L10-5.C).


Порядок виконаня роботи:

1. В середовищі MS DOS ініціалізувати одну з систем програмування :

Turbo C , Turbo C++,Borland C++.

2. Компілювати та виконуючі відповідні приклади,розглянути особливості

функціонування функцій керування маніпулятором “миша”.

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

використання “миші”.

Зробити висновки відносно можливостей маніпулятора “миші”.

Вміст звіту:

Порядок виконання роботи.

Основні теоритичні положення.

Результати виконання прикладів.

Висновки відносно можливостей маніпулятора “миші”.






еще рефераты
Еще работы по разное