Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
GetFAttr ( var F ; var Attr : byte );
Возвращает в переменной Attr атрибуты файла, связанного с F , но еще не открытого. Установить файловый атрибут. SetFAttr ( var F ; Attr : byte ); Устанавливает заданные в Attr атрибуты файла, уже связанного с F, но еще не открытого. Прочитать дату и время последнего обновления файла. GetFTime(var F;Time:longint); Возвращает в переменной Time ,в упакованном виде, дату и время последнего обновления файла. Установить время и дату последнего обновления файла SetFTime(var F; Time:longint); Устанавливает дату и время обновления файла, которые в упакованном виде должны быть заданы как Time . Для того, чтобы распаковать время работы файла необходимо использовать: UnpackTime(Time:longint;var Pack:DataTime); Преобразует 4-байтовое упакованное значение даты и времени, возвращаемое GetFTime, FindFirst или FindNext, в распакованную запись типа DateTime . Для того, чтобы создать сжатую запись нужно использовать процедуру PackTime(var Pack: DataTime;var Time:longint); Преобразует запись Pack в 4-байтовое упакованное значение даты и времени типа longint, используемое процедурой SetFTime. Поля записи DateTime не проверяются на диапазон.
Кроме этих существуют несколько процедур по работе со строками, определяющие путь к файлу: FSearch(Name:PathStr; DirList:string):PathStr; Ищет файл Name в списке каталогов DirList. Элементы списка разделяются точкой с запятой. FExpand(Name:PathStr; DirList:string):PathStr; Берет имя файла Name и возвращает полное имя файла (устройство, каталог, имя и расширение). FSplit(Path: PathStr; var Dir: DirStr; var Name: NameStr; var Ext: ExtStr); Разбивает имя файла Path на 3 составные части (каталог, имя файла, расширение).
5.4 Функции работы с магнитными носителями.
Определить размер носителя DiskSize (DR:byte):longint; DR – номер драйвера. Устройство А имеет номер 0. 2 Гб – максимальный размер ностиеля. Размер свободной памяти DiskFree (DR:byte):longint; Возвращает число свободных байтов на диске DR: 0 – любой текущий диск, 1 – диск А, 2 – диск В и т.д. Если номер ошибочен, возвращает –1.
5.5. Обработка прерываний.
Все процедуры и функции данной группы работают с типом Register. В библиотеке DOS доступны только те регистры которые определены первой частью вариантной записи. Выполнить прерывание: Intr(IntNo: byte, Var R: Registers);
IntNo – номер прерывания R - содержимое регистров
Выполнить прерывания MS-DOS: MSDOS ( Var R : Registers );
Сохранить вектора прерываний: SwapVectors При употреблении прерывания с использованием библиотеки DOS рекомендуется перед и после прерывания ставить процедуру SwapVectors. Особенно это касается работы асинхронных периферийных устройств, таких как клавиатура, мышь, накопитель на жестком или гибком магнитных дисках и т.д. SwapVectors необходимо ставить так как TPascal, а также различные программы-оболочки имеют собственные программы по обработке прерываний от данных устройств.
Пусть нам надо написать программу по обработке данных с клавиатуры, т. е. при прерывании с номером $16 должна работать не системная программа, а наша. Пусть наша программа располагается по адресу nnnn : kkk, спроектируем программу на TP, одновременно с нашей программой по адресу: WNNN : NNNN располагается драйвер клавиатуры TP, по адресу yyyy:yyyy располагается драйвер обработки клавиатуры ОС и по адресу: xxxx:xxxx – драйвер клавиатуры платформы. Для того, чтобы кроме нашей программы успешно работали другие программы ОС до выполнения нашей должны быть сохранены адреса программ обработчиков того же прерывания. Такая процедура называется – сохранение вектора прерывания, где под вектором понимается адрес в оперативной памяти, с которого начинается предыдущая программа обработки прерывания. В нашем случае до выполнения нашей программы вектор прерывания должен быть сохранён 3 раза. Для различных устройств такая последовательность может быть 1-3. Для сохранения старого значения адреса программы в библиотеке Dos используется процедура: GetVect ( Intr : byte ; var P : pointer); Intr – номер прерывания, Р – указатель на адрес программы прерывания. Для установки собственного драйвера используется следующая процедура: SetIntVec ( Intr : byte ; var P : pointer ); Intr - № прерывания, которое будет обрабатываться программой, Р – адрес подпрограммы обработки прерывания. Адрес вычисляется аналогично адресу любой переменной. Пример 1 . Написать программу по установки монитора в режим 320х200 точек с использованием 256 цветов. Прерывания вызывать используя библиотеку DOS.
Uses dos; Var R:Registers; Begin SwapVectors; R.ah:=0; R.al:=$13; Intr($10,R); SwapVectors; End.
Пример 2. Напишем процедуру по установке пиксела с использованием той же библиотеки.
Uses dos; Procedure my_pixel( x,y : word; Color : byte); Var R:Registers; Begin SwapVectors; R.Ah:=$C; R.Al:=Color; R.Cx:=x; R.dx:=y; Intr($10,R); SwapVectors End;
5.6. Другие возможности.
Сделать программу резидентной: Keep ( ExitCode : word ); Употребление данной процедуры внутри программы приводит к тому, что при запуске программы она не снимается после окончания выполнения и постоянно находится загруженной в ОП. ExitCode – значение передаётся в системную переменную EwdLevel после прохождения загруженной программы. Выполнить загрузочный модуль внутри программы. Exec ( Path , Com : String ), Path – полный путь к выполняемой программе, Com – параметры для выполнения программы. Имя программы должно быть с расширением. Для успешного выполнения программы необходимо увеличить размер списка и кучи » в 2 раза больше чем в стандартных установках TP. Правильность выполнения необходимо анализировать системной переменной DosError. Возвратить значение системной переменной ErrorLevel. DosExitCode : word; Процедуры обработки прерывания Ctrl+Break, Ctrl+C. При стандартной проектировании на ТР под Ms-Dos нажатие этих клавиш приводит к снятию программы. У программиста в библиотеке Dos имеются средства по отмене данного действия, это производится с помощью SetBreak (Code: Boolean). Code = 1 выполняется стандартное действие, иначе программа на эти клавиши не реагирует. GetBreak (var Code: boolean);
5.7. Некоторые прерывания платформы IBM PC.
$10 – дисплей, функция в АН. 1. АН = 0 – режим VGA и ниже. AL = номер режима ( 13 для 320*200*256 VGA).
2. АН = С установить pixel. Для графических режимов (VGA и ниже) AL – цвет пиксела (в зависимости от видео режима) СХ – координаты по оси Х DX – координаты по оси Y 3. AH = D – прочесть пиксел СХ – координаты по оси Х DX – координаты по оси Y Возврат из прерывания в регистре AL – цвет пикселя. 4. AH = F – прочитать номер видеорежима. возврат из прерывания AL – номер, АН – количество символов в строке, в ВН – номер текущей видеостраницы, для режимов, в которых используется несколько видеостраниц. В текстовом режиме 8 страниц. 5. АН =1А – чтение или запись конфигурации VGA, если чтение регистра AL = 0, если запись, то AL = 1. Для нормальной работ в регистре ВН записывается номер устройства при чтении из данного регистра возвращается тип адаптера: 0 – графического адаптера нет, 1 – MDA, 2 – CGA, 3, 4 – EGA, 5 – Mono EGA, 6 – PGC, 7 – mono VGA, 8 – VGA, A, B, C – MCGA. 6. АН=1С сохранить или восстановить значение в виде регистров адаптера VGA. AL = 0 – чтение, AL = 1 – запись. По адресу ES:DI должна располагаться информационная структура длиной в 1 кБайт, в которую будут записаны (будут считаны) значения регистров адаптеров VGA.
7. АН= 4Fh Все функции VBE вызываются с регистром AH = 4Fh. Регистр AL используется для указания, какая функция VBE будет выполнена. При этом регистр BL в исключительных ситуация будет указывать специфическую подфункцию.
Функции 00h-0Fh зарезервированы для стандартных функций VBE. Функции 10h-FFh зарезервированны для поддержки дополнительных спецификаций VBE.
Результат выполнения функции возвращается через регистр AX : AL == функция не поддерживается AL <> 4Fh функция поддерживается AH == 00h вызов функции выполнен успешно AH == 01h вызов функции провален AH == 03h функция не поддерживается в текущей конфигурации аппаратного обеспечения AH == 03h вызов функции нелегален в текущем видеорежиме Для определения информации о видеодаптере необходимо определить ее структуру, выделить память под возвращаемые данные. Вызыв функции происходит следущим образом: 1 в регистр AH записывается значение 4Fh 2 в регистр AL – 00h 3 es:[di] должен указывать на область памяти, выделенной под структуру VbeInfoBlock. 4 выполняется прерывание Int 10h 5 функция выполнена успешно, если регистр AH=0
Пример : допустим, что мы уже имеем переменную VIBlock типа VbeInfoBlock, тогда вызов процедуры будет выглядеть следущим образом asm mov ax,4F00h les di,@VIBlock int 10h mov Result,ah end;
|
Последнее изменение этой страницы: 2019-04-19; Просмотров: 215; Нарушение авторского права страницы