Паскаль обеспечивает доступ к большому числу встроенных констант, типов данных, переменных, процедур и функций. Их количество велико, однако, в своей программе мы редко используете их все сразу. Поэтому они разделены на связанные группы, называемые модулями. В этом случае Вы можете использовать только те модули, которые необходимы в программе.
Модуль представляет собой набор констант, типов данных, переменных, процедур и функций. Каждый модуль аналогичен отдельной программе на Паскале: он может иметь основное тело, которое вызывается перед запуском Вашей программы и осуществляет необходимую инициализацию. Таким образом, модуль представляет собой библиотеку описаний, которую можно вставить в свою программу и которая позволит разбить программу на части, компилируемые отдельно.
Структура модуля
Модуль обеспечивает набор средств благодаря процедурам и функциям при поддержке констант, типов данных и переменных, однако действительная реализация этих средств скрыта в силу того, что модуль разделен на две секции: интерфейса и реализации. Если программа использует модуль, то все описания модуля становятся доступными этой программе, как если бы они были определены в ней самой.
Структура модуля аналогична структуре программы, однако есть несколько существенных различий. Например, рассмотрим модуль:
unit идентификатор;
interface
uses список модулей; {Необязательный}
implementation {открытые описания}
begin {закрытые описания процедуры и функции }
end.{код инициализации }
Заголовок модуля начинается зарезервированным словом unit, за которым следует имя модуля (идентификатор) аналогично, как и в случае имени программы.
Следующим элементом в модуле является ключевое слово interface. Обозначает начало секции интерфейса модуля — секции, видимой всем другим модулям или программам, в которых модуль используется.
Модуль может подключать другие модули, для этого они определяются в предложении uses. Предложение uses, если имеет место, то следует сразу после ключевого слова interface.
Отметим, что здесь выполняется общее правило использования предложения uses: если модуль, имя которого указано в предложении uses, использует другие модули, то имена этих модулей также должны быть указаны в предложении uses, причем до того, как они будут использованы.
Стандартные модули Turbo Pascal
CRT | обеспечивает набор специфичных для РС описаний констант, переменных и программ для операций ввода/вывода. Последние можно использовать для работы с экраном (задание окон, непосредственное управление курсором, цвет текста и фона). Кроме того, Вы можете осуществлять «необработанный» ввод с клавиатуры и управлять платой генерации звукового сигнала персонального компьютера. Этот модуль обеспечивает множество подпрограмм, которые были стандартными в версии 3.0 |
Printer | Используемые пакеты: Crt В модуле Printer дано описание переменной текстового файла Lst, которая связывается с драйвером устройства, позволяющим направлять стандартный для Паскаля вывод на печатающее устройство с помощью Write и Writeln. Например, включив Printer в свою программу, Вы можете сделать следующее: Write(Lst,’Сумма ‘,A:4,’ и ‘,B:4,’ равна ‘); C:=A + B; Writeln(Lst,C:8); |
Overlay | Overlay — содержит инструменты для создания оверлейных программ. Программа OVERKAY — программа, которая загружается не вся , а по частям. |
Graph | Используемые пакеты: Crt Graph обеспечивает набор быстродействующих, эффективных графических подпрограмм, которые позволяют использовать в полной мере графические возможности Вашего персонального компьютера. Этот модуль реализует независимый от устройства графический драйвер фирмы «Борланд», позволяющий поддерживать графические адаптеры типа СGА, ЕGА, Hercules, АТТ 400, МСGА, 3270 РС и VGА. |
Turbo3 | Используемые пакеты: Crt Этот модуль содержит две переменные и несколько процедур, которые больше не поддерживаются Турбо-Паскалем. Они включают встроенную файловую переменную Кbd, булеву переменную CBreak и первоначальные целочисленные версии MemAvail и MaxAvail (которые возвращают размер свободной памяти в параграфах, а не в байтах, как это делают настоящие версии). |
Graph3 | Используемые пакеты: Crt Graph3 поддерживает полный набор графических подпрограмм для версии 3.0 — для обычной, расширенной графики и графики, использующей относительные команды. Они идентичны по имени, параметрами функции подпрограммам версии 3.0. |
Dos | DOS определяет многочисленные паскалевские процедуры и функции, которые эквивалентны наиболее часто используемым вызовам DOS, как например, GetТime, SetТime, DiskSize и так далее. Кроме того, он определяет две программы низкого уровня МsDos и Intr, которые позволяют активизировать любой вызов MS-DOS или системное прерывание. Registers представляет собой тип данных для параметра в МsDos и Intr. Кроме того, определяются некоторые другие константы и типы данных. |
System | System содержит все стандартные и встроенные процедуры и функции Турбо-Паскаля. Любая подпрограмма Турбо-Паскаля, не являющаяся частью стандартного Паскаля и не находящаяся ни в каком другом модуле, содержится в System. Этот модуль присоединяется ко всем программам. |
Turbo | Файл TURBO.TPL содержит все стандартные пакеты, кроме Graph и пакетов совместимости (Graph3 и Turbo3): System, Overlay, Crt, Dos и Printer. Эти пакеты загружаются в память вместе с Турбо-Паскалем и всегда вам доступны. Обычно файл TURBO.TPL хранят в одном каталоге с TURBO.EXE (или TPC.EXE). Вы можете хранить его и в другом каталоге, если он описан как каталог Турбо-Паскаля. Для этого необходимо с помощью TINST.EXE установить этот каталог в файле TURBO.EXE. |
Стандартные модули Free Pascal
CRT | Подпрограммы для работы с вводом-выводом в текстовом режиме |
DateUtils | Подпрограммы для работы с датой и временем |
Dos | Подпрограммы для работы с функциями DOS |
Graph | Подпрограммы для работы в графическом режиме |
KeyBoard | Подпрограммы для работы с клавиатурой |
Math | Математические функции |
Mouse | Подпрограммы для работы с мышью |
Printer | Подпрограммы для работы с принтером |
Strings | Подпрограммы для работы со строками |
StrUtils | Подпрограммы для работы со строками |
System | Основные подпрограммы общего назначения. Этот модуль не нужно подключать к вашей программе, так как он подключается автоматически. |
SysUtils | Дополнительные подпрограммы общего назначения. |
Video | Подпрограммы для работы с экраном в текстовом режиме |
WinCRT | Подпрограммы ввода-вывода |
x86 | Работа с портами ввода-вывода |
Написание собственных модулей Turbo Pascal
Предположим мы написали модуль IntLib, записали его в файл с именем Int.pas и оттранслировали на диск; получившийся в результате код находится в файле INTLIВ.ТРU. Для использования этого модуля в программе необходимо включить в нее оператор uses, указывающий компилятору, какой модуль используется. Наша программа может выглядеть следующим образом:
program MyProg;
uses IntLib;
Отметим, что Паскаль предполагает, что файл, в котором находится модуль, имеет такое же имя, что и сам модуль. Если имя Вашего модуля МyUtilities, то Паскаль будет искать файл с именем МYUTILIТ.PAS.
Компиляция модуля в Turbo Pascal
Модуль компилируется точно так же, как компилируется программа: он создается с помощью редактора, а затем вызывается команда Соmpile/Соmpile (Компилировать/ Компилировать) (или нажимаются клавиши Аlt-С). Однако, вместо файла с расширением .ЕХЕ Турбо-Паскаль создает файл с расширением .ТРU (Turbо Раscal Unit — модуль Турбо-Паскаля). После этого Вы можете оставить этот файл как есть или же вставить его в ТURВО.TPL с помощью TPUMOVER.ЕХЕ.
В любом случае имеет смысл переслать файлы с расширением *.ТРU (вместе с исходными файлами) в каталог модулей, который определен с помощью команды О/D/Unit directories (Каталоги модулей). В одном исходном файле может находиться только один модуль, поскольку компиляция прекращается, как только обнаружен завершающий оператор end.
Пример:
Напишем небольшой модуль. Назовем его IntLib и вставим в него две простые подпрограммы для целых чисел — процедуру и функцию:
unit IntLib;
interface
procedure ISwap(var I,J: integer);
function IMax(I,J: integer): integer;
implementation
procedure ISwap;
var
Temp: integer;
begin
Temp:=I;
I:=J;
J:=Temp
end; {конец процедуры ISwap }
function IMax;
begin
if I > J then IMax:=I else IMax:=J
end; {конец функции IMax }
end. {конец модуля IntLib }
Введем эту подпрограмму, запишем ее в файл INTLIВ.PAS, а затем оттранслируем на диск. В результате получим код модуля в файле INTLIВ.ТРU. Перешлем его в каталог модулей. Следующая программа использует модуль IntLib:
program IntTest;
uses IntLib;
var
A,B: integer;
begin
Write('Введите два целочисленных значения: ');
Readln(A,B);
ISwap(A,B);
Writeln('A=',A,' B=',B);
Writeln('Максимальное значение равно ',IMax(A,B));
end. {конец программы IntTest }
Все описания внутри модуля связаны друг с другом. Например, модуль Crt содержит все описания, необходимые для подпрограмм работы с экраном на Вашем персональном компьютере.
Компиляция модуля в Free Pascal
Компиляция модуля выполняется почти также, как и компиляция программы. Отличие заключается только в том, что при компиляции модуля не вызывается компоновщик. Для компиляции модуля, который находится (например) в файле foo.pp, просто напечатайте:
fpc foo
Если всё правильно, то вы получите два файла модуля:
- foo.ppu – это файл с описанием откомпилированного вами модуля.
- foo.o – это файл, содержащий актуальный код модуля. Этот файл и является конечным продуктом компиляции.
Оба файла необходимы, если вы планируете использовать модуль в нескольких программах. Если вам нужен модуль для распространения, вы должны предоставлять оба файла – .ppu и .o.