3.5 Модули в Паскале
____________________________________________________________________
n: integer; begin
s:= x; t:= x; n:= 2; eps:= 1e-7; repeat
t:= -t * (sqr(x)/(n * (n + 1))); s:= s + t;
n:= n + 2; until abs(t)< eps;
No_standard_sin:= s; end;
end.
Сохраните модуль обязательно с тем же именем, что указан в заголовке модуля, т.е. my_module.pas в какой-нибудь папке. Откомпилируйте модуль на-
жав клавиши Ctrl+F9 или меню Запуск-> Собрать. Для каждого модуля созда-
ются два файла: двоичный файл описания модуля с расширением (.ppu) и объ-
ектный с расширением (.o). Таким образом, в вашей папке создадутся два файла my_module.ppu и my_module.o
Создайте консольное приложение и введите текст программы:
program project_with_my_module; {$mode objfpc}{$H+}
uses
CRT, FileUtil,SysUtils, my_module; // указываем имя модуля var x, y, dx: real;
begin x:= 0;
dx:= 0.1; while x <= 1 do
begin
216
Глава 3 Более сложные элементы языка
____________________________________________________________________
y:= No_standard_sin(x);
writeln('x= ', x:0:1, ' y= ', y:0:7,
' sin(x)= ', sin(x):0:7);
x:= x + dx;
end;
writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
Сохраните проект в той же папке, где вы сохранили модуль или скопируй-
те файлы my_module.ppu и my_module.o в папку с текущим проектом. Нажмите клавишу F9. Начнется компиляция и сборка (компоновка) программы. На этапе сборки ваш модуль будет автоматически добавлен в исполняемую программу.
После выполнения программы вы получите те же самые результаты, что и в разделе 3.1.1.3.
Если вы хотите, чтобы ваш модуль был доступен и в других программах,
то проще всего поступить следующим образом:
1.Создайте папку, например с именем my-units
2.Перенесите в эту папку файлы my_module.ppu и my_module.o;
3. Скопируйте саму папку my-units в системный каталог
"C:\lazarus\fpc\2.2.4\units\i386-win32" если вы работаете в Windows или в ката-
лог "/usr/lib/fpc/2.2.4/units/i386-linux", если вы работаете в Linux.
Теперь ваш модуль будет автоматически подключаться в ваши программы
(разумеется, надо прописать имена модулей в объявлении uses). Почему именно в этот каталог? Потому что компилятор если не найдет модуль в папке с вашим проектом, он будет искать его по умолчанию в этой системной папке.
Если же вы разместили папку my-units в другом месте, то вам придется прописывать путь к этой папке, либо в инспекторе проекта, либо непосредст-
венно в объявлении uses вот таким образом:
uses my_module in '<путь к папке с исходным кодом модуля>'
217
3.5 Модули в Паскале
____________________________________________________________________
Другой способ – это добавить путь к модулю в файле fpc.cfg. Файл на-
ходится в папке \lazarus\fpc\2.2.4\bin\i386-win32 в Windows или в папке /etc в Linux. Найдите в этом файле строку
# searchpath for units and other system dependent things
И добавьте запись вида:
-Fuпуть к модулю (именно без пробела!), например
-Fuс:\my-projects\my-units\ (Windows)
-Fu/home/user/my-projects/my-units (Linux)
Но этот файл системный, "лезть" в него без особой необходимости не ре-
комендую.
В предложенном мною способе "ничего не надо делать"! Надо просто ско-
пировать папку my-units в системный каталог. Путь к нему уже прописан в файле fpc.cfg. Только чтобы не "замусоривать" системный каталог, вам нужно все свои модули, сколько бы их ни было, помещать только в одну папку, в на-
шем случае мы будем размещать все наши общие модули в папку my-units.
3.5.2 Системные модули
Системные модули Паскаля содержат ряд полезных процедур, функций и констант, которые дают возможность использовать почти всю мощь компьюте-
ров. Рассмотрим вкратце некоторые системные модули:
System – содержит стандартные функции и процедуры "классического"
Паскаля, например, вычисления функции cos, sin, ln, exp и др. Модуль
218
Глава 3 Более сложные элементы языка
____________________________________________________________________
System автоматически доступен всем программам. Фактически мы широко пользовались этим модулем.
DOS- содержит процедуры и функции, позволяющие использовать средст-
ва операционной системы MS-DOS.
CRT – набор процедур для работы с экраном и клавиатурой.
Graph – содержит обширный набор программ, который позволяет исполь-
зовать графические возможности компьютера.
В настоящее время этот модуль устарел и практически не используется.
Логика его работы слабо совместима с современными системами и проблем с ним уйма. Начинающие часто находят какие-то примеры с его использованием и разочаровываются - часть не работает вообще, в Linux возникают проблемы с библиотеками, правами доступа и т.д.
Для использования модуля достаточно в программе после строки заголов-
ка вставить строку:
uses имя модуля;
Если используется несколько модулей, то пишется так:
uses имя модуля 1 , имя модуля 2, ….., имя модуля N;
Просмотреть тот или иной системный модуль можно, нажав клавишу
Ctrl и одновременно подведя указатель мыши к имени модуля. Когда имя мо-
дуля заменится на гиперссылку, нажмите на левую клавишу мыши.
В частности, если вы посмотрите модули SysUtils, FileUtil,
LCLProc и др., то увидите там объявления и реализации тех функций и проце-
дур, которыми мы широко пользовались.
Рекомендую почаще заглядывать в эти и другие системные модули. Вы
219
3.5 Модули в Паскале
____________________________________________________________________
найдете для себя немало интересного и поучительного. Заодно посмотрите, как пишут программы профессионалы высокого уровня.
3.5.2.1. Модуль CRT
Модуль CRT, как уже говорилось, содержит ряд процедур и функции для работы с экраном в текстовом режиме, клавиатурой и динамиком. Замечу, что этот модуль оставлен для совместимости с Turbo Pascal. В настоящее время программисты чаще используют другие средства.
Рассмотрим экран компьютера в текстовом режиме. Обычно на нем раз-
мещается 25 строк текста и 80 символов в каждой строке. Для того чтобы пол-
ностью владеть экраном, нужно знать координаты курсора, менять цвет симво-
лов, текста и фона. Для этого существуют следующие процедуры:
GoToXY(i,j)- позиционирует курсор в i строку и j столбец экрана.
write(s)- выводит строку s начиная с текущей позиции курсора.
процедура TextColor(Color)- устанавливает цвет выводимого текста.
Существуют следующие константы цветов:
Black - черный;
Blue - синий;
Green - зеленый;
Cyan - бирюзовый;
Red - красный;
Magenta - малиновый;
Brown - коричневый;
LightGray - светло-серый;
DarkGray - темно-серый;
LightBlue - ярко-голубой;
LightGreen - ярко-зеленый;
220