Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.031 с.)
Главная | Случайная страница | Обратная связь