Лекція № 13 Тема: Модулі План заняття: Модуль і його структура Стандартні модулі Процедури і функції модуля CRT Модуль і його структура Модуль - це сукупність сталих, типів даних, змінних, процедур і функцій, які можна використати у програмі або в іншому модулі. Сам модуль не є виконуваною програмою. Модульний підхід до проектування дає змогу розділити програму на частини, які компілюють окремо. Модулі можна створювати самостійно, а також використовувати стандартні, що їх надає Турбо Паскаль. Структура модуля має такий вигляд: unit <ім'я> interface uses <список модулів> {відкриті оголошення} implementation uses <список модулів> {власні оголошення} {реалізація процедур і функцій} begin {коди ініціалізації} end Модуль починається зі слова unit, яке разом з іменем є заголовком модуля. Наступне службове слово interface означає початок секції інтерфейсу модуля, доступного для всіх інших модулів і програм, які використовують цей модуль. В інтерфейсі модуля можуть бути оголошені сталі, типи даних, змінні, процедури і функції. Будь-яка програма, що застосовує цей модуль, має доступ до всіх елементів, оголошених у його інтерфейсі. Щодо процедур і функцій, то в секції інтерфейсу зазначені тільки їхні заголовки, а самі оператори, що реалізують їх, описані в наступній секції реалізації. Секція інтерфейсу закінчується словом implementation, яке одночасно розпочинає секцію реалізації. Все, що описане в секції інтерфейсу, є доступним секції реалізації. Крім цього, в секції реалізації можуть бути свої описи, уже недоступні програмам, що використовують цей модуль. Ці описи використовують процедури і функції, зазначені у секції інтерфейсу. Ці процедури і функції повторно описують в секції реалізації, їхній заголовок може бути такий же, як у секції інтерфейсу, або мати коротку форму, що містить слово procedure (function), після якого йде ім'я без зазначення параметрів і типу. Підпрограми секції реалізації, не описані в секції інтерфейсу, повинні мати повний заголовок. Слово uses можна застосовувати як у секції інтерфейсу, так і в секції реалізації. В першому випадку його записують відразу після слова interface і воно означає те, що сталі, типи даних і змінні, оголошені в інтерфейсі модулів, імена яких перелічені після слова uses, можна використати в будь-якому оголошенні в інтерфейсі цього модуля. В другому випадку слово uses записують відразу після слова implementation і воно означає те, що сталі, типи даних і змінні, оголошені в інтерфейсі перелічених після uses модулів, доступні тільки в секції реалізації цього модуля. Секція реалізації розміщена між словами implementation і end. Якщо ж перед end є слово begin і деякі оператори, то одержаний складений оператор стає секцією ініціалізації модуля. В цій секції відбувається ініціалізація структур даних, що їх використовує модуль або які доступні програмам, що застосовують цей модуль. Також тут відкриваються файли, які використовуються в програмах. Під час виконання програми секцію ініціалізації викликає тіло програми, що застосовує модуль. Якщо ж у програмі є декілька модулів, то спочатку будуть викликані секції ініціалізації всіх модулів, а потім послідовно виконуються оператори з тіла програми. Відтрансльовані модулі зберігаються в спеціальному двійковому форматі, стандартні - у файлі TURBO.TPL (вони автоматично завантажуються в пам'ять разом з Турбо Паскалем). Для використання модулів треба, щоб після заголовка програми було речення uses, а далі зазначений список імен усіх модулів, що їх використовує програма. Наприклад: program PRG; uses MOD1, MOD2, MOD3; Імена модулів розділяють комами, вони можуть бути оголошені в будь-якому порядку. Якщо ж речення uses нема, то Турбо Паскаль приєднує стандартний модуль System, який забезпечує виконання стандартних підпрограм (процедур і функцій). Стандартні модулі Стандартні модулі Турбо Паскалю, такі як Dos, System, Overlay, Graph, Crt, Printer, містяться у файлі TURBO.TPL. Вони завантажуються в пам'ять разом з Турбо Паскалем і доступні для будь-якої програми. Бібліотечний системний файл TURBO.TPL зберігається в тому ж каталозі, що й TURBO.EXE. Він має спеціальну структуру і призначений для компактного зберігання та швидкого доступу до програм, які використовуються найчастіше. Модуль SYSTEM містить усі стандартні та вбудовані процедури і функції Турбо Паскалю. Він приєднується до кожної програми автоматично. Для того, щоб використати цей модульу програмі, не потрібно його ім'я оголошувати в реченні uses цієї програми. Модуль DOS визначає процедури і функції Турбо Паскалю, пов'язані з визначенням і заданням часу (GetTime, SetTime), ємності диска (DiskSize) тощо. Тут також визначено дві програми нижнього рівня - MSDOS і INTR, які дають змогу використовувати будь-який виклик MS DOS або системні переривання, а також деякі інші сталі і типи даних. Модуль OVERLAY забезпечує підтримку оверлеїв. Стандартний модуль CRT має набір спеціальних засобів для введення-виведення сталих, змінних, програм, які можна використати для роботи з екраном: робота з вікнами, керування курсором, керування кольором, звуком. Модуль PRINTER дає змогу визначати драйвер пристрою за допомогою описаної в ньому змінної текстового файлу SLT, а також перевизначити стандартне виведення, використовуючи Write чи Writeln. Стандартний модуль GRAPH - це набір швидкодійних, ефективних графічних підпрограм, які дають змогу використовувати графічні можливості персонального комп'ютера. Цей модуль реалізує незалежний від пристрою графічний драйвер, що підтримує графічні адаптери CGA, EGA, Hercules та ін. Процедури і функції модуля CRT У модулі CRT об'єднані підпрограми, які дають змогу керувати режимами екрана, розширеними кодами клавіатури, кольором, вікнами, звуковими сигналами. Завдяки їм можна підвищити швидкість виконання операцій з екраном. У разі використання модуля CRT інформація, яка виводиться на екран, буде надіслана базовій системі введення-виведення (BIOS) або безпосередньо у відеопам'ять. Це значно підвищує швидкість виведення порівняно із виведенням за допомогою засобів операційної системи DOS. Для того, щоб використати модуль CRT, його ім'я треба зазначити в операторі uses програми: uses CRT; У модулі CRT реалізовані такі процедури і функції: AssignCrt- пов'язує текстовий файл з логічним пристроєм Crt; ClrEoL - вилучає всі символи, починаючи з позиції курсора до кінця рядка, не рухаючи курсора; ClrScr- очищає екран і розміщує курсор у верхньому лівому куті; Delay - припиняє виконання програми на зазначений у мі-лісекундах час; DelLine - вилучає рядок, у якому є курсор, і пересуває всі рядки, розміщені нижче, на один рядок вгору; GotoXY- розміщує курсор у позицію екрана з координатами (X,Y); HighVideo - задає підвищену яскравість символів; InsLine - вставляє порожній рядок на місце, де є курсор; KeyPressed — повертає значення true, якщо клавіша на клавіатурі натиснута, і false - у протилежному випадку; LowVideo - вимикає підвищену яскравість символів; NormVideo - задає стандартну яскравість символів; NoSound - вимикає внутрішній голосник; ReadKey — читає символ з клавіатури; Sound - вмикає внутрішній голосник; TextBackGround - задає колір тла; TextColor - задає колір символів; TextMode - задає певний текстовий режим; Window - відображає на екрані текстове вікно; WhereX - повертає поточну координату X курсора, що стосується активного вікна; WhereY - повертає поточну координату 7 курсора, що стосується активного вікна. Розглянемо наведені процедури і функції детальніше. У разі підключення модуля CRT автоматично виконуються оператори процедур AssignCrt(lnput); Reset(lnput); AssignCrt(Output); Rewrite(Output); Ці оператори, замість стандартних файлів уведення і виведення DOS, призначають стандартні вхідні і вихідні текстові файли. Перепризначення вхідних і вихідних файлів надалі не допустиме доти, доки для них не буде виконане зворотне пере-призначення і не відбудеться перехід до стандартного введення і виведення за допомогою операторів Assign(lnput, ' '); Reset(lnput); Assign(Output, ' '); Rewrite(Output); Процедура AssignCrt автоматично пов'язує стандартне введення і виведення з пристроєм CRT. Однак такий же зв'язок можна налагодити для обміну з файлами, відмінними від стандартних: AssignCrt(f);{файл f пов'язується з пристроєм CRT} Rewrite(f); {файл f відкривається для виведення} Зазначимо, що помилково було б намагатися пов'язати файл з пристроєм CRT за допомогою процедури Assign, оскільки Турбо Паскаль не "розпізнає" файл CRT. Для відображення на екрані вікна в текстовому режимі використовують процедуру Window(X1, Y1, X2, Y2: word) ТутX1,Y1 - координати верхнього лівого кута вікна,X2, Y2 -нижнього правого. Унаслідок застосування цієї процедури вікно стає активним, а курсор розміщується в позиції з координатами (1,1) створеного вікна. Сама процедура Window інтерпретує власні параметри в абсолютних, а не у відносних координатах попереднього текстового вікна. Після завершення роботи програми параметри текстового режиму відновлюються автоматично, тобто вікном стає увесь екран. Щоб одержати мінімальні і максимальні координати створеного вікна, можна скористатися функціями Lo і Ні: Х1 :=Lo(WindMin)+1; X2:=Lo(WindMax)+1; Y1 :=Hi(WindMin)+1; Y2:=Hi(WindMax)+1; Процедуру без параметрів ClrScr використовують для очищення поточного вікна, якщо воно було задане програмою, або всього екрана. У цьому випадку курсор розміщується в позиції (1,1). Для задання текстового режиму виведення інформації застосовують процедуру TextMode( Mode: word) Параметр процедури TextMode може задавати як ім'я сталої, що визначає режим виведення, так і її числовий еквівалент. Якщо режим не заданий, то за замовчуванням буде режим, визначений сталою BW40 (її числовий еквівалент - 0), що відповідає роздільній здатності екрана 40x25 і чорно-білому режиму для кольорового адаптера. Положенням курсора в модулі CRT керують процедура GotoXY і функції WhereX і WhereY. Процедура GotoXY(X, Y: word) розміщує курсор у позицію поточного вікна з відносними координатами (X, Y), у цьому випадку позиція (1, 1) відповідає верхньому лівому кутку вікна.