Что такое модуль dos паскаль. Функции управления операционной средой. Написание собственных модулей

· Модуль DOS . Модуль DOS позволяет использовать возможности операционной системы MS-DOS, не предусмотренные в стандарте языка Паскаль, и содержит типы, константы, переменные и для реализации этих дополнительных возможностей.

Кроме вышеперечисленных стандартных модулей был разработан модуль SetConf , в котором находится функция привязки программы к BIOS компьютера, т. е. защита от копирования.

При запуске программы в первую очередь проверяется целостность системы; т. е. наличие всех файлов системы, соответствуют ли их имена и размеры таблице. Далее происходит инициализация: проверяются параметры BIOS. Если какой либо файл системы был изменен или параметры BIOS не соответствуют установленным в программе, система работать не будет. Для входа в систему необходимо ввести пароль. Эти проверки осуществляются в конструкторе Init объекта TMyApp . Этот же объект инициализирует меню (TMyApp.InitMenu), строку состояния (TMyApp.InitStatusLine), рабочее поле (TMyApp.InitDeskTop), устанавливает специальную цветовую палитру (TMyApp.GetPalette). Обработка событий (нажатие клавиш клавиатуры, работа с “мышью”) осуществляется в методе HandleEvent объекта TMyApp . При выборе какого-либо пункта меню управление передается соответствующему объекту или вызывается нужная подпрограмма.

В программе используются следующие процедуры, функции и объекты:

1. Shifr (процедура). Зашифрование файлов любого типа. Сначала получаем пароль от пользователя, затем создаем файл зашифрованных данных (*.M&A). Исходный файл считывается блоками по 64 word, кодируется с помощью генератора ПСЧ, затем переставляется в соответствии с таблицей, изображенной на рис. 2 . Полученную последовательность записываем в файл с расширением *.M&A и т. д.

2. DeShifr (процедура). Расшифрование файлов, зашифрованных процедурой Shifr .

3. Plus (процедура). Установка защиты паролем или по ключевой дискете на программы.

4. Block (процедура). Защита винчестера от записи.

5. Passwords (процедура). Изменение пароля входа в программу. Сначала запрашивает старый пароль, затем два раза новый.

6. TOptions (объект, потомок объекта TDialog). Выводит диалоговое окно изменения

настроек шифрования файлов: удалять или не удалять исходный файл, высвечивать или не высвечивать индикатор процесса шифрования.

7. CheckExec (процедура). Обрабатывает ошибки DOS.

5. Описание применения программы

Программа предназначена для защиты данных от несанкционированного доступа; в ней реализованы следующие функции:

· шифрование файлов;

· защита паролем исполняемых файлов;

· защита исполняемых файлов с помощью ключевой дискеты;

· отслеживание и реакция на ошибки;

· изменение паролей;

· привязка к BIOS.

Установка системы происходит с ключевой дискеты программой INSTALL. EXE , которая проверяет не была ли установлена система ранее; если нет, то создает на винчестере каталог C:\ SUB ROSA и копирует в него файлы системы (Sub Rosa. exe, Block, KeyDisk, Plus, Passw, Setup. res, System. res ).

При запуске программыSub Rosa. exe сначала проверяется наличие всех файлов системы. Если хотя бы один файл изменен или удален, то система работать не будет. Для работы с программой необходимо ввести пароль.

В верхней части экрана находится полоска меню, состоящая из следующих пунктов:

1. “Файлы”:

- “Выбрать” (выбор файла для работы);

- “Сменить каталог” (смена текущего каталога);

- “Выход в DOS” (временный выход в DOS);

- “Завершение” (завершение работы с программой);

2. “Защита”:

- “Установить пароль” (защита EXE- и COM-файлов паролем);

- “Блокировать винчестер” (запрет записи любых данных на винчестер);

3. “Ключевая дискета”:

- “Добавить проверку по ключу” (защита EXE- и COM-файлов с помощью

ключевой дискеты);

4. “Криптография”:

- “Зашифровать файл данных” (зашифрование выбранного файла);

- “Расшифровать файл данных” (расшифрование выбранного файла);

5. “Настройки”:

- “Криптография” (изменение настроек криптографии);

- “Пароли” (изменение пароля входа в систему);

6. “О Программе” (информация о программе).

Во всех случаях, кроме блокировки винчестера, сначала необходимо выбрать файл для работы. Для установки защиты паролем или по ключевой дискете выбирается EXE- или COM-файл, для шифрования - файл любого типа.

6. Заключение

В заключении проведем анализ некоторых систем защиты от копирования. Следует отметить, что этот анализ не является исчерпывающим, так как эти системы постоянно развиваются, а также не всегда можно получить исчерпывающее описание алгоритмов - разработчики не стремятся раскрывать принципы их построения.

RANK - пакет защиты от НСД. Этот пакет реализует функцию контроля доступа к EXE- и COM-файлам. Следует отметить, что анализ разграничения доступа к программам ставит под серьезное сомнение возможность реализации такой функции без дополнительных мероприятий.

LATCH - комплекс программ защиты ПЭВМ от НСД. Этот комплекс обеспечивает безопасность данных, хранящихся на винчестере. При несанкционированном доступе происходит “зависание” ПЭВМ или не обнаруживается НЖМД.

Тезис о невозможности обнаружения НЖМД вызывает серьезные сомнения: например, для контроллеров SCSI не требуется определение типа НЖМД в памяти CMOS, так как параметры винчестера могут быть считаны с помощью команды контроллера.

Приложение 1

Листинг программы

{****************************************************************************}

{** КП "ЗАЩИТА ДАННЫХ ОТ НСД" **}

{** Выполнили учащиеся гр.46491 ЕГАНОВ МАКСИМ и ЮЗЕФОВИЧ АРТЕМ **}

{****************************************************************************}

{****************************************************************************}

{$M 10240, 0,20480} {Распределение памяти}

Program Sub_Rosa;

App, Dialogs, Drivers, Menus, MsgBox, Objects,

Validate, Views, Memory, StdDlg, Editors, {Модули Turbo Vision, далее - TV}

CRT, DOS, {Стандартные модули}

SetConf; {Модуль функции привязки к BIOS}

MyRes: TResourceFile; {Переменная файла ресурсов, TV}

FName, MainDir, DName: string; {Переменные работы с файлами и каталогами}

MainPass, Pass: string; {Переменные паролей}

FilePass: file of char; {Переменная файла паролей}

OptFile, OptInd: word; {Переменные опций}

Работа добавлена на сайт сайт: 2016-03-30

">Учебная практика 2.

">Системный модуль " xml:lang="en-US" lang="en-US">DOS ">, " xml:lang="en-US" lang="en-US">WinDOS ">.

">Файлы в Паскале

Основные процедуры и функции для работы с файлами

">1.До начала работы с файлами в Паскале необходимо установить связь между файловой переменной и именем физического дискового файла:

">Assign(<файловая_переменная>, <имя_дискового_файла>)

">Следует помнить, что имя дискового файла при необходимости должно содержать путь доступа к этому файлу, включая имя дисковода. При этом имя дискового файла – строковая величина, т.е. должна быть заключена в апострофы. Например " xml:lang="en-US" lang="en-US">:

">Пример " xml:lang="en-US" lang="en-US"> ">процедуры " xml:lang="en-US" lang="en-US"> Assign ">в " xml:lang="en-US" lang="en-US"> ">Паскале " xml:lang="en-US" lang="en-US">

" xml:lang="en-US" lang="en-US"> Assign (chf, "G:\Home\ Student\ Lang\ Pascal\ primer.dat");

">Если путь не указан, то программа будет искать файл в своем рабочем каталоге и по указанным путям в autoexec.bat.

">Вместо имени дискового файла можно указать имя логического устройства, каждое из которых имеет стандартное имя:

">CON – консоль, т.е. клавиатура-дисплей;

">PRN – принтер. Если к компьютеру подключено несколько принтеров, доступ к ним осуществляется по именам LPT1, LPT2, LPT3.

">Не разрешается связывать с одним физическим файлом более одной файловой переменной.

">2.После окончания работы с файлами на Паскале, они должны быть закрыты.

">Close(<список файловых переменных>);

">При выполнении этой процедуры закрываются соответствующие физические файлы и фиксируются сделанные изменения. Следует иметь в виду, что при выполнении процедуры close связь файловой переменной с именем дискового файла, установленная ранее процедурой assign, сохраняется, следовательно, файл можно повторно открыть без дополнительного использования процедуры assign.

">Работа с файлами заключается, в основном, в записи элементов в файл и считывании их из файла. Для удобства описания этих процедур введем понятие указателя, который определяет позицию доступа, т.е. ту позицию файла, которая доступна для чтения (в режиме чтения), либо для записи (в режиме записи). Позиция файла, следующая за последней компонентой файла (или первая позиция пустого файла) помечается специальным маркером, который отличается от любых компонент файла. Благодаря этому маркеру определяется конец файла.

">3.Подготовка к записи в файл Паскаля

"> Rewrite(<имя_ф_переменной>);

">Процедура Rewrite(f) (где f – имя файловой переменной) устанавливает файл с именем f в начальное состояние режима записи, в результате чего указатель устанавливается на первую позицию файла. Если ранее в этот файл были записаны какие-либо элементы, то они становятся недоступными. Результат выполнения процедуры rewrite(f); выглядит следующим образом:

">4.Запись в файл Паскаля

">Write(<имя_ф_переменной>, <список записи>);

">При выполнении процедуры write(f, x) в ту позицию, на которую показывает указатель, записывается очередная компонента, после чего указатель смещается на следующую позицию. Естественно, тип выражения х должен совпадать с типом компонент файла.

">Для типизированных файлов выполняется следующее утверждение: если в списке записи перечислено несколько выражений, то они записываются в файл, начиная с первой доступной позиции, а указатель смещается на число позиций, равное числу записываемых выражений.

">5.Подготовка файла к чтению Паскаля

">Reset(<имя_ф_переменной>);

">Эта процедура ищет на диске уже существующий файл и переводит его в режим чтения, устанавливая указатель на первую позицию файла.

">Если происходит попытка открыть для чтения не существующий еще на диске файл, то возникает ошибка ввода/вывода, и выполнение программы будет прервано.

">6.Чтение из файла в Паскале

">Read(<имя_ф_переменной>,<список переменных>);

">Для типизированных файлов при выполнении процедуры read() последовательно считывается, начиная с текущей позиции указателя, число компонент файла, соответствующее числу переменных в списке, а указатель смещается на это число позиций.

">В большинстве задач, в которых используются файлы, необходимо последовательно перебрать компоненты и произвести их обработку. В таком случае необходимо иметь возможность определять, указывает ли указатель на какую-то компоненту файла, или он уже вышел за пределы файла и указывает на маркер конца файла.

">7.Функция определения достижения конца файла в Паскале

">Eof(<имя_ф_переменной>);

">Название этой функции является сложносокращенным словом от end of file. Значение этой функции имеет значение true, если конец файла уже достигнут, т.е. указатель стоит на позиции, следующей за последней компонентой файла. В противном случае значение функции – false.

">8.Изменение имени файла в Паскале

">Rename(<имя_ф_переменной>, <новое_имя_файла>);

">Здесь новое_ имя_ файла – строковое выражение, содержащее новое имя файла, возможно с указанием пути доступа к нему.

">9.Уничтожение файла в Паскале

">Erase(<имя_ф_переменной>);

">Перед выполнением этой процедуры необходимо закрыть файл, если он ранее был открыт.

">10.Уничтожение части файла от текущей позиции указателя до конца в Паскале

">Truncate(<имя_ф_переменной>);

">11.Файл Паскаля может быть открыт для добавления записей в конец файла

">Append(<имя_ф_переменной>);

">Типизированные файлы Паскаля. Длина любого компонента типизированного файла строго постоянна, т.к. тип компонент определяется при описании, а, следовательно, определяется объем памяти, отводимый под каждую компоненту. Это дает возможность организовать прямой доступ к каждой компоненте (т.е. доступ по порядковому номеру).

">Перед первым обращением к процедурам ввода/вывода указатель файла стоит в его начале и указывает на его первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные и выражения в списках ввода и вывода в процедурах read() и write() должны иметь тот же тип, что и компоненты файла Паскаля. Если этих переменных или выражений в списке несколько, то указатель будет смещаться после каждой операции обмена данными на соответствующее число позиций.

">Для облегчения перемещения указателя по файлу и доступа к компонентам типизированного файла существуют специальные процедуры и функции:

">fileSize(<имя_ф_переменной>) – функция Паскаля, определяющая число компонентов в файле;

">filePos(<имя_ф_переменной>) – функция Паскаля, значением которой является текущая позиция указателя;

">seek(<имя_ф_переменной>,n) – процедура Паскаля, смещающая указатель на компоненту файла с номером n. Так, процедура seek(<имя_ф_переменной>,0) установит указатель в начало файла, а процедура seek(<имя_ф_переменной>, FileSize(<имя_ф_переменной>)) установит указатель на признак конца файла.

">Текстовые файлы Паскаля. Текстовые файлы предназначены для хранения текстовой информации. Именно в таких файлах хранятся, например, исходные тексты программ. Компоненты текстовых файлов могут иметь переменную длину, что существенно влияет на характер работы с ними. Доступ к каждой строке текстового файла Паскаля возможен лишь последовательно, начиная с первой. К текстовым файлам применимы процедуры assign, reset, rewrite, read, write и функция eof. Процедуры и функции seek, filepos, filesize к ним не применяются. При создании текстового файла в конце каждой записи (строки) ставится специальный признак EOLN(end of line – конец строки). Для определения достижения конца строки существует одноименная логическая функция EOLN(<имя_ф_переменной>), которая принимает значение true, если конец строки достигнут.

">Форма обращения к процедурам write и read для текстовых и типизированных файлов одинакова, но их использование принципиально различается.

">В списке записываемых в текстовый файл элементов могут чередоваться в произвольном порядке числовые, символьные, строковые выражения. При этом строковые и символьные элементы записываются непосредственно, а числовые из машинной формы автоматически преобразуются в строку символов.

">Кроме процедур read и write при работе с текстовыми файлами используются их разновидности readln и writeln. Отличие заключается в том, что процедура writeln после записи заданного списка записывает в файл специальный маркер конца строки. Этот признак воспринимается как переход к новой строке. Процедура readln после считывания заданного списка ищет в файле следующий признак конца строки и подготавливается к чтению с начала следующей строки.

" xml:lang="en-US" lang="en-US">DOS

">С помощью модулей Dos и WinDos реализуется целый ряд программ операционной системы и программ обработки файлов. Ни одна из программ модуля Dos не определена в стандартном Паскале, поэтому они помещаются в отдельный модуль.

">Более полное описание операций DOS приведено в руководствах по DOS фирмы IBM.

">Основное различие модулей Dos и WinDos состоит в том, что процедуры и функции модуля Dos используют стандартные строки Паскаля, а процедуры и функции модуля WinDos - строки с завершающим нулем. Стандартная строка Паскаля - это байт длины, за которым следует последовательность символов. Строка с завершающим нулем - это последовательность ненулевых символов с завершающим символом NULL (#0).

">Процедуры и функции модуля " xml:lang="en-US" lang="en-US">Dos ">.

Функция DiskFree

"> Возвращает количество свободных байтов указанного диска.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">function DiskFree(Drive: Byte): Longint;

">Замечания:

"> Функция DiskFree может оказаться полезной для определения наличия свободного места на диске.

Функция DiskSize

"> Возвращает общий размер свободного места на диске, в байтах.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">function DiskSize(Drive: Byte): Longint;

" xml:lang="en-US" lang="en-US"> ">Переменная Drive – это диск для проверки, где A = 1, B = 2 и т.д. Если Drive = 0, то используется текущий диск.

Функция DosExitCode

"> Возвращает код выхода из подпроцесса.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">function DosExitCode: Word;

Функция DosVersion

" xml:lang="en-US" lang="en-US"> ">Возвращает " xml:lang="en-US" lang="en-US"> ">версию " xml:lang="en-US" lang="en-US"> DOS.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">function DosVersion: Word;

Функция EnvCount

">Возвращает количество строк, содержащихся в системном окружении.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">function EnvCount: Integer;

Функция EnvStr

" xml:lang="en-US" lang="en-US"> ">Возвращает указанную строку окружения.

">Объявление:

" xml:lang="en-US" lang="en-US">function EnvStr(Index: Integer): string;

">Замечания:

"> Переменная Index – это номер переменной окружения, например, первая переменная – это 1, вторая – 2 и т.д. Неправильный индекс возвращает пустую строку.

"> Функция EnvStr возвращает строку в форме (VarName=String). Если порядок переменных системного окружения неизвестен, то используют функцию GetEnvto для поиска переменной по имени.

Процедура Exec

"> Выполняет указанную программу с указанной командной строкой.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure Exec(Path, CmdLine: string);

">Замечания:

"> Переменная Path – это диск, директория и имя программы для выполнения. Переменная CmdLine содержит аргументы командной строки.

"> Процедура Exec передает управление программе, указанной в переменной Path. При этом распределение памяти не изменяется. После завершения процедуры Exec используйте функцию DosExitCode для определения кода выхода из программы. Процедура Exec также устанавливает значение переменной DosError, если случается ошибка.

"> Процедура Exec не выполняет программы, которые требуют Блок Управления Файлом - File Control Blocks (FCB).

Функция FExpand

"> Преобразует имя файла в полный путь к файлу.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">function FExpand(Path: PathStr): PathStr;

Процедура FindFirst

"> Ищет указанный каталог для соответствующего файла.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure FindFirst(Path: PChar; Attr: Word; var F: TSearchRec);

">Замечания:

"> Переменная Path – это диск и каталог, в котором будет выполняться поиск и имя файла для поиска. Шаблоны следующие, например, "MYFILE??.*".

"> Переменная Attr содержит атрибуты файла для включения в поиск в добавление ко всем нормальным файлам.

"> Процедура FindFirst используется совмествно с процедурой FindNext. Используйте FindNext для размещения каких-либо дополнительных файлов, соответствующих критериям поиска. Все ошибки записываются в переменную DosError, которая определена в модуле DOS.

Процедура FindNext

"> Находит следующее вхождение, которое соответствует имени и атрибутам, указанным в предварительно вызванной процедуре FindFirst.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure FindNext(var F: TSearchRec);

">Замечания:

"> Процедура FindNext используется совместно с процедурой FindFirst. Используйте FindNext для размещения каких-либо дополнительных файлов, соответствующих критериям поиска, предварительно определенных для процедуры FindFirst. Переменная F должна быть той же самой переменной, которая была использована для ввода в FindFirst. Все ошибки записываются в переменную DosError, которая определена в модуле DOS.

Функция FSearch

"> Поиск файла.

">Объявление:

" xml:lang="en-US" lang="en-US">function FSearch(Path: PathStr; DirList: string): PathStr;

">Замечания:

"> Переменная Path имеет тип PathStr, который определен в модуле DOS. Переменная DirList – это список директорий, разделенных точкой с запятой (;), которые будут включены в поиск.

"> Функция FSearch возвращает каталог и имя файла, если файл существует. Если файл, указанный в переменной Path, не найден в списке директорий, то возвращается пустая строка. Функция FSearch всегда начинает поиск с текущей директории, а затем проверяет директории, перечисленные в переменной DirList в том порядке, в котором они перечислены.

Процедура FSplit

"> Разделяет имя файла на три компонента.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure FSplit(Path: PathStr; var Dir: DirStr; var Name: NameStr; var Ext: ExtStr);

">Замечания:

"> Используйте эту процедуру для разделения полного имени файла на три компонента: путь, имя файла и расширение файла. Переменная Path имеет тип PathStr, который определен в модуле DOS. Переменная Dir возвращает путь или часть переменной Path, которая содержит каталог (или каталоги). Переменная Name возвращает фактическое имя файла без расширения. Переменная Ext возвращает расширение файла, которому предшествует точка (.).

"> Возможно, что один или более компонентов вернутся пустыми. Это может случиться, если переменная Path не содержит этих компонентов. Например, в том случае, если в переменной Path указан пустой каталог.

Процедура GetCBreak

"> Возвращает состояние проверки Ctrl-Break в DOS.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure GetCBreak(var Break: Boolean);

">Замечания:

"> Возвращает TRUE, если Ctrl-Break включена, иначе возвращает FALSE.

"> С включенной проверкой Ctrl-Break c все вызовы ввода/вывода (консоль, принтер и коммуникации) являются проверяемыми. Чтобы выключить Ctrl-Break, используйте процедуру SetCBreak.

Процедура GetDate

"> Возвращает текущую дату, установленную в операционной системе.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure GetDate(var Year, Month, Day, DayOfWeek: Word);

Функция GetEnv

"> Возвращает значение указанной переменной окружения.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">function GetEnv(VarName: string): string;

">Замечания:

">VarName – имя переменной для поиска. Если VarName не существует как переменная окружения, то возвращается пустая строка.

">Функция GetEnv возвращает строку, назначенную для переменой окружения.

Процедура GetFAttr

">Возвращает атрибуты файла.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure GetFAttr(var F; var Attr: Word);

">Замечания:

">F – это файловая переменная, а также типизированный, нетипизированный или текстовый файл, который не открыт. Переменная Attr содержит атрибуты файла.

"> Файл, связываемый с переменной F, должен быть закрыт. Переменная Attr должна сравниваться с одной из констант атрибутов, которые определены в модуле DOS, с помощью ЛОГИЧЕСКОГО И (AND).

"> Ошибки записываются в переменную DosError, которая определена в модуле DOS. Для большей информации о файловых атрибутах обращайтесь к справочному руководству по вашей DOS.

Процедура GetFTime

">Возвращает дату и время последнего изменения файла.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure GetFTime(var F; var Time: Longint);

">Замечания:

"> Файл, связанный с переменной F должен быть открыт. Время может быть распаковано с помощью процедуры UnPackTime. Ошибки записываются в переменную DosError, которая определена в модуле DOS.

">Процедура GetIntVec

">Возвращает адрес, записанный в указанном векторе прерывания.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure GetIntVec(IntNo: Byte; var Vector: Pointer);

" xml:lang="en-US" lang="en-US">procedure GetIntVec(IntNo: Byte; var Vector: FarPointer);

">Замечания:

"> Учтите, что процедура GetIntVec возвращает адрес прерывания защищенного режима. Чтобы получить вектор прерывания реального режима, используйте процедуру GetRealIntVec. Прерывания могут происходить в защищенном или реальном режиме.

Процедура GetTime

">Возвращает текущее время, установленное в операционной системе.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure GetTime(var Hour, Minute, Second, Sec100: Word);

">Замечания:

"> Диапазоны возвращаемых значений следующие: Hour (Час) , Minute (Минута) , Second (Секунда) и Sec100 (сотая доля секунды) .

Процедура GetVerify

"> Возвращает состояние проверочного флага в DOS.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure GetVerify(var State: Boolean);

">Замечания:

">State = TRUE, если проверочный флаг DOS включен, иначе FALSE.

"> С включенным проверочным флагом DOS все выводимые на диск данные проверяются на целостность. Иначе выводимые данные не проверяются. Чтобы установить состояние проверочного флага DOS, используйте процедуру SetVerify.

Процедура Intr

"> Выполняет указанное программное прерывание.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure Intr(IntNo: Byte; var Regs: TRegisters);

">Замечания:

"> Перед вызовом процедуры Intr, загрузите переменную Regs соответствующими параметрами, необходимыми для прерывания. Переменная Regs возвращает значения регистров после вызова прерывания. Вызовы, которые используют регистры ESP и SS не могут быть выполнены. Более подробную информацию о программных прерываниях ищите в руководствах на ваши BIOS и DOS.

"> Учтите, что все сегментные регистры (DS,ES,FS,GS) должны содержать допустимые значения сегментных дескрипторов или быть установлены в ноль перед вызовом процедуры Intr. Все прерывания, вызов которых требует анализа смещения, должны использовать 32-битное смещение.

Процедура Keep

">Эта процедура является только составляющей частью и всегда выдает сообщение об ошибке во время выполнения.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure Keep(ExitCode: Word);

Процедура MsDos

" xml:lang="en-US" lang="en-US"> ">Выполняет вызов функции DOS.

">Объявление:

" xml:lang="en-US" lang="en-US">procedure MsDos(var Regs: TRegisters);

">Замечания:

"> Загрузите переменную Regs соответствующими параметрами перед вызовом MS-DOS. Переменная Regs возвращает значения регистров после вызова прерывания. Учтите, что тип TRegisters позволяет доступ к 32-битным регистрам. Вызовы DOS, которые используют регистры ESP и SS не могут быть выполнены. Для прерывания, отличного от $21, используйте процедуру Intr. Более подробную информацию о программных прерываниях DOS ищите в руководствах на вашу DOS.

"> Учтите, что все сегментные регистры (DS,ES,FS,GS) должны содержать допустимые значения сегментных дескрипторов или быть установлены в ноль для использования MS-DOS.

Процедура PackTime

"> Преобразует запись " xml:lang="en-US" lang="en-US">DateTime ">.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure PackTime(var T: DateTime; var Time: Longint);

">Замечания:

"> Процедура PackTime может быть использована совместно с процедурой SetFTime. Для распаковки 4-х байтового пакета дата/время в запись DateTime используйте процедуру UnpackTime.

Процедура SetCBreak

"> Устанавливает состояние проверки Ctrl-Break.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure SetCBreak(Break: Boolean);

">Замечания " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US"> ">С включенной проверкой Ctrl-Break, проверяются все вызовы операций ввода/вывода (консоль, принтер и коммуникации). Чтобы получить состояние Ctrl-Break, используйте процедуру GetCBreak.

Процедура SetDate

"> Устанавливает текущую дату в операционной системе.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure SetDate(Year, Month, Day: Word);

">Замечания:

"> Неправильная дата игнорируется операционной системой. Для получения текущей даты используйте процедуру GetDate.

Процедура SetFAttr

"> Устанавливает атрибуты файла.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure SetFAttr(var F; Attr: Word);

">Замечания:

"> Файл, связанный с переменной F должен быть закрыт. Переменная Attr должна быть сформирована с помощью операции ЛОГИЧЕСКОЕ ИЛИ (OR) между этой переменной и одной из констант файловых атрибутов. Эти константы определенны в модуле DOS.

"> Ошибки записываются в переменную DosError, определенную в модуле DOS. Более подробную информацию о файловых атрибутах ищите в руководствах на вашу DOS.

">Процедура " xml:lang="en-US" lang="en-US">SetFTime

"> Устанавливает дату и время последнего изменения файла.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure SetFTime(var F; Time: Longint);

">Замечания: Файл, связанный с переменной F должен быть открыт. Упакованный формат дата/время может быть создан с помощью процедуры PackTime. Ошибки записываются в переменную DosError, определенную в модуле DOS. Более подробную информацию об упакованном формате дата/время ищите в руководствах на вашу DOS.

Процедура SetIntVecs

"> Устанавливает указанный вектор прерывания для указанного адреса.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure SetIntVec(IntNo: Byte; Vector: Pointer);

" xml:lang="en-US" lang="en-US">procedure SetIntVec(IntNo: Byte; Vector: FarPointer);

">Замечания:

"> Прерывания могут происходить в защищенном или реальном режиме.

Процедура SetTime

"> Устанавливает текущее время в операционной системе.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure SetTime(Hour, Minute, Second, Sec100: Word);

">Замечания:

"> Неправильное значение игнорируется. Для получения текущего времени операционной системы используйте процедуру GetTime.

Процедура SetVerify

"> Устанавливает состояние флага проверки в DOS.

">Объявление " xml:lang="en-US" lang="en-US">:

" xml:lang="en-US" lang="en-US">procedure SetVerify(Verify: Boolean);

Процедура SwapVectors

" xml:lang="en-US" lang="en-US"> ">Процедура SwapVectors ничего не делает и предоставляется только для совместимости с Borland Pascal.

">Объявление: procedure SwapVectors;

Процедура UnpackTime

"> Преобразует переменную типа Longint в запись.

">Задание для самостоятельной работы.

">1. Написать программу для работы с файлами. При запуске программа должна выдавать главное меню с выбором команд.

  1. ">При выборе команды 1 происходит создание файла с расширением " xml:lang="en-US" lang="en-US">txt "> и добавление в файл определенного количества строк.
  2. ">При выборе команды 2 происходит удаление файла.
  3. ">При выборе команды 3 на экран консоли происходит вывод содержимого из файла, а так же при необходимости происходит добавление информации в файл.
  4. ">При выборе команды 4 на экран выводится дата и время создания файла.
  5. ">При выборе команды 5 происходит вывод атрибутов файла.
  6. ">При выборе команды 6 программа завершает свою работу.

">2. Написать программу-таймер. В программе необходимо реализовать несколько режимов работы таймера.

  1. ">При выборе команды 1 отображается режим таймера для отсчета до Нового года.
  2. ">При выборе 1 – отображается полное количество месяцев, дней, часов, минут и секунд, оставшихся до Нового года.
  3. ">При выборе 2 – отображается количество дней, оставшихся до Нового года.
  4. ">При выборе 3 – отображается количество часов, оставшихся до Нового года.
  5. ">При выборе 4 – отображается количество минут, оставшихся до Нового года.
  6. "> При выборе 5 – отображается количество месяцев, оставшихся до Нового года.
  7. ">При выборе 6 – отображается количество секунд, оставшихся до Нового года.
  1. ">При выборе команды 2 отображается оставшееся время до окончания учебной практики. Учебная практика заканчивается 26 декабря в 13:15.
  2. ">При выборе команды 3 отображается оставшееся до конца пары время. Программа должна автоматически определять, какая пара сейчас идет, и выводить оставшееся до звонка время. Если в момент запуска программы идет перемена, то программа должна вывести соответствующее сообщение. Если текущее время до 8:30, то программа выдает сообщение о том, что учебный день еще не начался. Если текущее время больше 13:15, то необходим вывод сообщения, что первая смена уже закончена.
  3. ">При выборе команды 4 программа прекращает работу. Необходимо реализовать программу таким образом, что выход из программы может осуществляться только выбором команды 4.

">Индивидуальное задание:

">Добавить пятый пункт в главное меню. При выборе пункта 5 программа начинает отсчитывать время до Вашего дня рождения.

">3. Добавить к программе 1 навигацию посредством стрелок. Пункты меню должны выбираться перемещением стрелок. Подтверждение выбора осуществляется клавишей " xml:lang="en-US" lang="en-US">

В Паскале стандартные процедуры работы с файлами и системной информацией весьма ограничены: нет прямой возможности управления ресурсами компьютера и их контроля, например, получения значения текущего времени. Назначение же операционной системы - это управление ресурсами и процессами, в частности работа с файловой системой.

В модуле Dos введены процедуры и функции, позволяющие получить доступ к некоторым ресурсам DOS.

Для поиска первого и следующего файла с заданным именем используются соответственно процедуры:

FindFirst (Path:String; Attr:Word; Var S:SearchRec);

FindNext (Var S:SearchRec);

Path - путь и имя искомого файла. При отсутствующем пути поиск производится в текущем каталоге, возможно использование шаблонов.

Attr - задаваемые атрибуты файла. В качестве Attr можно использовать константу AnyFile, означающую любые атрибуты.

S - возвращаемая переменная со следующей структурой:

SearchRec=Record

Fill: Array of byte;

Здесь поле Fill содержит служебную информацию DOS.

Attr - реальные атрибуты файла.

Time - дата и время создания файла в упакованном виде.

Size - размер файла в байтах.

Name - имя найденного файла.

Искомый файл может отсутствовать, поэтому после использования этих и некоторых следующих процедур анализируют системную переменную DosError, описанную выше.

Для распаковки времени создания файла используется процедура:

UnpackTime (Time:LongInt; Var DT:DateTime);

Выходным параметром для неё является запись DT, имеющая следующую структуру:

DateTime = Record

Year, Month, Day, Hour, Min, Sec: Word

Пример: вывод списка файлов из текущего каталога, содержащих тексты программ на языке Паскаль.

Program FindPas;

{ Поиск файлов с Паскаль-программами }

FindFirst ("*.pas",AnyFile,S);

While DosError=0 do

UnpackTime (S.Time,DT);

WriteLn(" Файл ",S.Name," создан ",

DT.Day,".",DT.Month,".",DT.Year,

" время: ",DT.Hour,":",DT.Min,":",DT.Sec,

" размер ",S.Size," байт");

Если необходимо искать файлы не в одном, а в нескольких каталогах, то используют функцию

FSearch (Path:PathStr; DirList:String): PathStr;

Тип PathStr является предопределенным:

PathStr=String ;

Здесь: Path - имя искомого файла, может быть составным.

DirList - список каталогов, в которых будет производиться поиск, каталоги разделяются точкой с запятой, например:

S:= FSearch (‘EDIT.EXE’,’C:\DOS;C:\NC;C:\NU’);


В текущем каталоге поиск производится автоматически. В случае удачного поиска переменной присваивается строка, содержащая составное имя файла, в случае неудачи – пустая строка.

Список каталогов используется аналогично принятым правилам в DOS. Обычно в файле автозапуска AUTOEXEC.BAT содержится команда PATH, присваивающая этой переменной окружения имена каталогов, в которых находятся наиболее часто используемые файлы. В этом случае поиск файлов из среды DOS производится не только в текущем и корневом каталогах, но и в каталогах, указанных в этой команде.

Чтобы воспользоваться этой переменной, в модуле DOS введена функция

GetEnv (EnvVar:String):String;

где в качестве аргумента используется имя переменной окружения. Так, если в файле автозапуска указана команда

PATH C:\DOS;C:\WINDOWS;C:\NC ,

то после выполнения

S:= GetEnv (‘PATH’);

S примет значение

C:\DOS;C:\WINDOWS;C:\NC ,

что может являться аргументом функции FSearch.

Из составного имени файла можно отдельно выделить полный путь, чисто имя и расширение процедурой

FSplit (Path:PathStr; Var Dir:DirStr; Var Name:NameStr; Var Ext:ExtStr);

Типы определены как

DirStr = String ;

NameStr = String ;

ExtStr = String ;

Пример поиска файла.

Program PoiskFile;

{ Пример программы поиска файла }

NameIn,NameFul:PathStr; { входное и составное имя файла }

Writeln(" Введите имя искомого файла: ");

NameFul:=FSearch(NameIn,GetEnv("PATH"));

If NameFul="" then

Writeln("Файл ",NameIn," не найден")

FSplit(NameFul,Dir,Name,Ext);

Writeln("файл ",Name," с расширением ",Ext,

" найден в каталоге ",Dir)

При создании новых файлов часто необходимо знать, достаточно ли места на диске. Для этого можно воспользоваться функциями

DiskSize (Drive:Byte):LongInt;

– определение общего объема указанного логического устройства (диска) в байтах.

DiskFree (Drive:Byte):LongInt;

– определение количества свободных байт на диске.

Номер диска задается как: 0 – текущий, 1 – А, 2 – С и т.д.

Для работы с текущей датой и временем используются процедуры:

GetDate (Var Year,Month,Day,Day_of_week: Word);

– определяет текущую системную дату. Здесь Day_of_week определяет порядковый день недели от 0 до 6, причем 0 означает воскресенье.

Аналогично для установки новой даты:

SetDate (Year,Mount,Day:Word);

Процедура для определения системного времени:

GetTime (Var Hour,Minute,Second,Hund:Word);

Здесь Hund - сотые доли секунды со значением от 0 до 99. Они определяются приблизительно, так как внутренний генератор переключается 18,2 раза в секунду.

Для установки системного времени применяется процедура

SetTime (Hour,Minute,Second,Hund:Word);

Но намного большие возможности дает работа непосредственно с процедурами операционной системы и внешними устройствами.

Для работы с прерываниями в модуле DOS предусмотрены две процедуры вызова прерываний.

Intr (IntNo:Byte; Var Regs: Registers);

IntNo - номер прерывания;

Regs - содержимое регистров процессора следующего типа:

Registers = Record

0: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:Word);

1: (AL,AH,BL,BH,CL,CH,DL,DH:Byte);

То есть поля записи соответствуют либо шестнадцатиразрядным, либо восьмиразрядным регистрам процессора. Например, установка графического режима 640х480 точек, 16 цветов:

Var R:Registers;

R.AH:=0; R.AL:=$12;

Так как очень часто используется вектор прерывания DOS 21H, то добавлена специальная процедура для работы только с этим прерыванием:

MSDos (Var Regs:Registers);

полностью эквивалентная

Intr ($21,Regs);

Например, определение версии DOS:

Var R:Registers;

Writeln (‘MS-DOS ‘,R.AL,’.’,R.AH);

Модуль (unit) представляет собой набор констант, типов данных, переменных, процедур и функций. Каждый модуль аналогичен отдельной программе на Паскале: он может иметь основное тело, которое вызывается перед запуском Вашей программы и осуществляет необходимую инициализацию. Короче говоря, модуль представляет собой библиотеку описаний, которую можно вставить в свою программу и которая позволит разбить программу на части, компилируемые отдельно.

Турбо-Паскаль обеспечивает Вам доступ к большому числу встроенных констант, типов данных, переменных, процедур и функций. Некоторые из них специфичны для Турбо-Паскаля; другие специфичны для персонального компьютера РС фирмы IBM (и совместимых с ним компьютеров) или для операционной системы MS-DOS. Их количество велико, однако, в своей программе Вы редко используете их все сразу. Поэтому они разделены на связанные группы, называемые модулями. В этом случае Вы можете использовать только те модули, которые необходимы в программе.

Структура модуля

Модуль обеспечивает набор средств благодаря процедурам и функциям при поддержке констант, типов данных и переменных, однако действительная реализация этих средств скрыта в силу того, что модуль разделен на две секции: интерфейса и реализации. Если программа использует модуль, то все описания модуля становятся доступными этой программе, как если бы они были определены в ней самой.

Структура модуля аналогична структуре программы, однако есть несколько существенных различий. Например, рассмотрим модуль:

unit <идентификатор>; interface uses <список модулей>; {Необязательный} {открытые описания} implementation {закрытые описания процедуры и функции } begin {код инициализации } end .

Заголовок модуля начинается зарезервированным словом unit, за которым следует имя модуля (идентификатор) точно так же, как и в случае имени программы. Следующим элементом в модуле является ключевое слово interface. Оно обозначает начало секции интерфейса модуля - секции, видимой всем другим модулям или программам, в которых он используется.

Модуль может использовать другие модули, для этого они определяются в предложении uses. Предложение uses, если имеет место, то следует сразу после ключевого слова interface. Отметим, что здесь выполняется общее правило использования предложения uses: если модуль, имя которого указано в предложении uses, использует другие модули, то имена этих модулей также должны быть указаны в предложении uses, причем до того, как они будут использованы.

Стандартные модули

Файл TURBO.TPL содержит все стандартные пакеты, кроме Graph и пакетов совместимости (Graph3 и Turbo3): System, Overlay, Crt, Dos и Printer. Эти пакеты загружаются в память вместе с Турбо-Паскалем и всегда вам доступны. Обычно файл TURBO.TPL хранят в одном каталоге с TURBO.EXE (или TPC.EXE). Вы можете хранить его и в другом каталоге, если он описан как каталог Турбо-Паскаля. Для этого необходимо с помощью TINST.EXE установить этот каталог в файле TURBO.EXE.

Используемые пакеты: нет

System содержит все стандартные и встроенные процедуры и функции Турбо-Паскаля. Любая подпрограмма Турбо-Паскаля, не являющаяся частью стандартного Паскаля и не находящаяся ни в каком другом модуле, содержится в System. Этот модуль присоединяется ко всем программам.

Используемые пакеты: нет

DOS определяет многочисленные паскалевские процедуры и функции, которые эквивалентны наиболее часто используемым вызовам DOS, как например, GetТime, SetТime, DiskSize и так далее. Кроме того, он определяет две программы низкого уровня МsDos и Intr, которые позволяют активизировать любой вызов MS-DOS или системное прерывание. Registers представляет собой тип данных для параметра в МsDos и Intr. Кроме того, определяются некоторые другие константы и типы данных.

Используемые пакеты: нет

Overlay - содержит инструменты для создания оверлейных программ. Программа OVERKAY - программа, которая загружается не вся, а по частям.

Используемые пакеты: нет

Crt обеспечивает набор специфичных для РС описаний констант, переменных и программ для операций ввода/вывода. Последние можно использовать для работы с экраном (задание окон, непосредственное управление курсором, цвет текста и фона). Кроме того, Вы можете осуществлять "необработанный" ввод с клавиатуры и управлять платой генерации звукового сигнала персонального компьютера. Этот модуль обеспечивает множество подпрограмм, которые были стандартными в версии 3.0.

Используемые пакеты: Crt

В модуле Printer дано описание переменной текстового файла Lst, которая связывается с драйвером устройства, позволяющим направлять стандартный для Паскаля вывод на печатающее устройство с помощью Write и Writeln. Например, включив Printer в свою программу, Вы можете сделать следующее:

Write (Lst,"Сумма " ,A:4 ," и " ,B:4 ," равна " ) ; C:=A + B; Writeln (Lst,C:8 ) ;

Используемые пакеты: Crt

Graph3 поддерживает полный набор графических подпрограмм для версии 3.0 - для обычной, расширенной графики и графики, использующей относительные команды. Они идентичны по имени, параметрами функции подпрограммам версии 3.0.

Используемые пакеты: Crt

Этот модуль содержит две переменные и несколько процедур, которые больше не поддерживаются Турбо-Паскалем. Они включают встроенную файловую переменную Кbd, булеву переменную CBreak и первоначальные целочисленные версии MemAvail и MaxAvail (которые возвращают размер свободной памяти в параграфах, а не в байтах, как это делают настоящие версии).

Используемые пакеты: Crt

Graph обеспечивает набор быстродействующих, эффективных графических подпрограмм, которые позволяют использовать в полной мере графические возможности Вашего персонального компьютера.

Этот модуль реализует независимый от устройства графический драйвер фирмы "Борланд", позволяющий поддерживать графические адаптеры типа СGА, ЕGА, Hercules, АТТ 400, МСGА, 3270 РС и VGА.

Написание собственных модулей

Допустим, Вы написали модуль IntLib, записали его в файл INTLIВ.PAS и оттранслировали на диск; получившийся в результате код находится в файле INTLIВ.ТРU. Для использования этого модуля в программе необходимо включить в нее оператор uses, указывающий компилятору, какой модуль используется. Ваша программа может выглядеть следующим образом:

program MyProg; uses IntLib;

Отметим, что Турбо-Паскаль предполагает, что файл, в котором находится модуль, имеет такое же имя, что и сам модуль. Если имя Вашего модуля МyUtilities, то Турбо-Паскаль будет искать файл с именем МYUTILIТ.PAS.

Компиляция модуля

Модуль компилируется точно так же, как компилируется программа: он создается с помощью редактора, а затем вызывается команда Со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 содержит все описания, необходимые для подпрограмм работы с экраном на Вашем персональном компьютере.

3.1 Процедуры для работы с датой и временем.

Процедура

Описание

Возвращает текущую дату, установленную в операционной

Возвращает дату и время последней записи файла.

Возвращает текущее время, установленное в операционной

Преобразует запись DateTiме в четырехбайтовое упакован-

ное символьное представление даты и времени длинного цело-

го типа, которое используется в процедуре SetTiме . Поля за-

писи DateTiме не проверяются на допустимость границ.

Устанавливает для операционной системы текущую дату.

Устанавливает время и дату последней записи файла.

Устанавливает в операционной системе текущее время.

Преобразует четырехбайтовое упакованное символьное пред-

ставление даты и времени длинного целого типа, возвращаемо-

го процедурами GetFTiме ,FindFirst ,FindNext в распа-

кованную запись DateTiме .

Функции, проверяющие состояние диска.

Фуннкция

Описание

Возвращает число свободных байт на диске в заданном диско-

Возвращает полный объем в байтах заданного диска.

Процедуры обработки файлов.

Процедура

Описание

Воспринимает имя файла и возвращает полное уточненное имя

(диск, каталог, расширение).

Ищет файл в списке каталогов.

Производит поиск в заданном (или текущем) каталоге записи,

содержимое которой совпадает с заданным именем файла и ат-

рибутами.

Возвращает следующую запись, имя файла и атрибуты в кото-

рой совпадают с теми, которые были заданы при предыдущем

обращении к процедуре FindFirst .

Возвращает атрибуты файла.

Устанавливает атрибуты файла.

3.4 Функции управления операционной средой.

Описание

Возвращает число строк, содержащихся в операционной среде

Возвращает заданную строку операционной среды.

Возвращает значение заданной переменной операционной сре-

3.5 Прочие процедуры и функции.

3.6 Переменные и константы модуля.

Многими подпрограммами модуля Dos для сообщения об ошибке используется переменная

Константы возвращаемые DosError.

Значение

Описание

Файл не найден

Путь к файлу не найден

В доступе отказано

Ошибочный заголовок

Not enough memory

Недостаточно памяти

Invalid environment

Ошибочное окружение

Ошибочный формат

Нет файлов

Константы атрибутов файла . Используется для построения атрибутов файлов при работе с процедурамиGetFAttr ,SetFAttr ,FindFirst иFindNext .

Константа

Значение

Описание

Только для чтения

Системный

Метка тома

Архивный

Любой файл

Константы являются аддитивными, так что оператор:

FindFirst("*.*", ReadOnly + Directory, S);

будет находить все обычные файлы, а также файлы, доступные только для чтению и подкаталоги текущего каталога. Константа AnyFile представляет собой просто сумму атрибутов.

3.7 Предопределенные типы.

В модуле Dos определяются следующие типы:

Тип DateTime . Используется подпрограммамиUnpackTime иPackTime для проверки и построения 4-байтовых упакованных значений даты и времени, которые используются вGetTime ,SetFTime ,FindFirst иFindNext .

Описание: type

DateTime = record

Year, Month, Day, Hour, Min, Sec: Word; end ;

Примечания: Допустимыми значениями являются для Year − 1980..2099 , для

Month − 1..12, для Day− 1..31, для Hour− 0..23, для Min− 0..59, для Sec− 0..59.

Тип FileRec . Определение записи, предназначенное для внутреннего использо-

вания в Borland Pascal.

Описание: type

FileRec = record Handle: Word; Mode: Word; RecSize: Word;

Private: array of Byte; UserData: array of Byte; Name: array of Char;

end;

Тип SearchRec . ПроцедурыFindFirst иFindNext используют переменные типаSearchRec для просмотра каталогов.

Описание: type

SearchRec = record

Fill: array of Byte; Attr: Byte;

Size: Longint; Name: string;

end;

Информация о каждом файле, найденном в одной из этих процедур, записывается в SearchRec . ПолеAttr содержит атрибуты файла (построенные из констант− атрибутов),Time содержит упакованную дату и время (для распаковки этого значения используетсяUnpackTime ),Size содержит размер в байтах, аName содержит его имя. ПолеFill резервируется DOS и не должно модифицироваться.

Типы работы со строками . Строковые типы используются различными проце-