- •Оглавление
- •Комбинированный урок №16
- •Обеспечение интерфейса с командами операционной системы
- •Типы прерываний и их обслуживание
- •Организация работы с каталогами и файлами
- •Установка даты и времени
- •Управление вычислительным процессом с помощью вызова внешних программ
- •Организация работы в текстовом режиме Установка текстового режима
- •Организация окон и вывод на экран
- •Управление клавиатурой и звуком
- •Форматы меню. Алгоритм построения вертикального меню
- •Контрольные вопросы
Организация работы с каталогами и файлами
Процедуры модуля System, которые используются при работе с каталогами.
ChDir(S:String); – выполняет смену текущего каталога на каталог, который задается с помощью маршрута, указанного в параметре S.
GetDir(D:byte; var S:string); – определяет значение текущего каталога на диске, заданное параметром D (D=0 – текущий диск, D=1 – диск А:, D=2 – диск В: и т.д.), возвращается в переменную S.
MkDir(S:string); – создает подкаталог с маршрутом доступа, заданным строкой S.
RmDir(S:string); – удаляет пустой подкаталог (не текущий).
Ниже описанные процедуры и функции работы с файлами содержатся в модуле DOS.
Процедура GetFAttr(F; var Attr:word); возвращает атрибуты файла, связанного с файловой переменной F, в переменную Attr.
Процедура SetFAttr(var F; Attr:word); устанавливает атрибуты файла в соответствии со значением переменной Attr (ReadOnly, Hidden, SysFile, VolumeID, Directory, Archive, AnyFile).
Установка даты и времени
Модуль Dos предоставляет возможность доступа к системным часам и календарю, а также позволяет изменить дату и время создания файла.
Процедура GetDate (Var Year, M, Day, D: word); возвращает текущую дату, установленную в ОС.
Процедура SetDate (Var Year, M, Day, D: word); устанавливает текущую дату в ОС.
Параметры принимают следующие значения: Year (год) - от 1980 до 2099, M (месяц) – от 1 до 12, Day (число) - от 1 до 31, D (день недели) – от 0 до 6, где 0 означает воскресенье.
Процедура GetTime (Var Hour, Min, Sec, Ssec: word); возвращает установленное в ОС текущее время.
Процедура SetTime (Var Hour, Min, Sec, Ssec: word); устанавливает в ОС текущее время.
Параметры принимают следующие значения: Hour (час) - от 0 до 23, Min (минута) – от 0 до 59, Sec (секунда) – от 0 до 59, Ssec (сотая доля секунды) – от 0 до 99.
Процедура GetFTime (Var F; Var Time: LongInt); возвращает время и дату создания файла, связанного с файловой переменной F. Время и дата возвращаются в переменную Time в упакованном формате.
Для их распаковки используется процедура UnpackTime (Time: LongInt, Var DT: DateTime).
Параметр DateTime имеет тип «запись», описанный в модуле Dos:
Type DateTime = Record
Year, Month, Day, Hour, Min, Sec : word
end;
Чтобы изменить дату и время создания файла, используются процедуры PackTime и SetTime.
Процедура PackTime (Var T: DateTime; Var Time: LongInt); преобразует значение параметра T в упакованный формат, который затем используется процедурой SetFTime.
Процедура SetFTime (Var F; Time: LongInt); устанавливает дату создания файла. Файл, для которого необходимо изменить дату создания, должен быть открыт для чтения.
Управление вычислительным процессом с помощью вызова внешних программ
В Pascal можно организовать вызов из программы любой другой программы, которую назовем программой–потомком. Но, чтобы программа–потомок успешно загружалась в память и начала выполняться, требуется выделить ей необходимый объем памяти. Так как программа, которая выполняется в данный момент, по умолчанию захватывает всю свободную динамическую память (кучу) системы, то для загрузки программы–потомка просто нет места. Минимальный размер выделяемой программе памяти указывается в директиве компилятора $M.
Например, директива {$M 16384, 0, 655360} устанавливается для программ по умолчанию. Здесь максимальный размер кучи равен всей доступной памяти и вызов программы–потомка невозможен. Но, с помощью директивы {$M 1024, 0, 0} динамическая память совсем не выделена. Теперь можно вызывать программу–потомок.
Вызов внешней программы производится с помощью процедуры Exec (Path, CmdLine: String).
Здесь Path – это путь к исполняемому файлу и его имя, а CmdLine – командная строка, которая передается вызываемой программе.
При запуске программа, написанная на Pascal, переопределяет некоторые прерывания MS-DOS для собственных целей. Поэтому перед вызовом программы–потомка нужно восстановить исходные адреса обработчиков прерываний (MS-DOS обработчиков), а после завершения работы вызываемой программы установить адреса обработчиков Pascal. Эти действия выполняет процедура без параметров SwapVectors.
Пример 2. Описание вызова внешней программы.
{$M 1024,0,0}
Uses Dos;
Var PrName,CmdLine:string;
Begin
Write('Введите путь и имя исполняемого файла: '); Readln(PrName);
Write('Введите командную строку: '); Readln(CmdLine);
SwapVectors; {переустановим вектора прерываний}
Exec(PrName,CmdLine);
SwapVectors; {восстановим вектора}
IF DosError<>0 THEN writeln('Ошибка DOS! Ее код - ',DosError)
ELSE writeln('Выполнение прошло успешно!'); Readln
End.
Отметим, что при вызове с помощью Exec внутренней функции MS-DOS следует вызвать Command.com.
Используя механизм вывода внешних программ, можно создавать сложные программные комплексы, в которых программа–диспетчер, занимая небольшой объем памяти, производит вызов необходимых (в том числе и системных) программ.