Dos error pascal

http://www.citforum.ru, Руководство по языку B.Pascal 7 & Objects/LR, Глава 16, Модуль Dоs
Logo Море(!) аналитической информации!

Глава 16. Модуль Dоs

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

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

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

                   Примечание: Подробнее о различии этих строк  рассказы-
              вается в Главе 18.

             Если вы разрабатываете только программы Windows, используйте
        модуль WinDos.

             Если вы разрабатываете только программы DOS,  то  желательно
        пользоваться в программах модулем Dos,  так как большинство прог-
        рамм Паскаля традиционно работают со  строками  Паскаля.  Однако,
        если вы  разрабатываете  приложения для среды Windows,  то можете
        написать программу,  используемую в  обеих  платформах  -  DOS  и
        Windows, применяя для этого модули WinDos и Strings. Windows тре-
        бует использования строк с завершающим  нулем.  Вы  можете  также
        воспользоваться данными модулями, если у вас есть файл данных Си,
        и вы хотите его конвертировать.  В языке Си используются строки с
        завершающим нулем.


Процедуры и функции модуля Dos

Ниже перечислены процедуры и функции модуля Dos. Чтобы ис- пользовать их, вы должны ссылаться на модуль Dos с помощью опера- тора программы uses. См. также Главу 1 ("Справочник по библиоте- ке") в "Руководстве программиста". Процедуры для работы с датой и временем -------------------T-------------------------------------------- ¦ Процедура ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ GetDate ¦ Возвращает текущую дату, установленную в¦ ¦ ¦ операционной системе. ¦ +------------------+--------------------------------------------+ ¦ GetFTime ¦ Возвращает дату и время последней записи¦ ¦ ¦ файла. ¦ +------------------+--------------------------------------------+ ¦ GetTiме ¦ Возвращает текущее время, установленное в¦ ¦ ¦ операционной системе. ¦ +------------------+--------------------------------------------+ ¦ РackTiме ¦ Преобразует запись DateTiме в четырехбайто-¦ ¦ ¦ вое упакованное символьное представление¦ ¦ ¦ даты и времени длинного целого типа, кото-¦ ¦ ¦ рое используется в процедуре SetTiме. Поля¦ ¦ ¦ записи DateTiме не проверяются на допусти-¦ ¦ ¦ мость границ. ¦ +------------------+--------------------------------------------+ ¦ SetDate ¦ Устанавливает для операционной системы те-¦ ¦ ¦ кущую дату. ¦ +------------------+--------------------------------------------+ ¦ SetFTiме ¦ Устанавливает время и дату последней записи¦ ¦ ¦ файла. ¦ +------------------+--------------------------------------------+ ¦ SetTiме ¦ Устанавливает в операционной системе теку-¦ ¦ ¦ щее время. ¦ +------------------+--------------------------------------------+ ¦ UnpackTiме ¦ Преобразует четырехбайтовое упакованной¦ ¦ ¦ символьное представление даты и времени¦ ¦ ¦ длинного целого типа, возвращаемого проце-¦ ¦ ¦ дурами GetFTiме, FindFirst, FindNext в рас-¦ ¦ ¦ пакованную запись DateTiме. ¦ L------------------+--------------------------------------------- Процедуры и функции обслуживания прерываний -------------------T-------------------------------------------- ¦ Процедура ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ GetIntVес ¦ Возвращает адрес, сохраненный в заданном¦ ¦ ¦ векторе прерываний. ¦ +------------------+--------------------------------------------+ ¦ Intr ¦ Выполняет заданное программное прерывание.¦ +------------------+--------------------------------------------+ ¦ МsDos ¦ Выполняет вызов функции DOS. ¦ +------------------+--------------------------------------------+ ¦ SetIntVес ¦ Устанавливает по заданному адресу заданный¦ ¦ ¦ вектор прерывания. ¦ L------------------+--------------------------------------------- Функции, проверяющие состояние диска -------------------T-------------------------------------------- ¦ Фуннкция ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ DiskFrее ¦ Возвращает число свободных байт на диске в¦ ¦ ¦ заданном дисководе. ¦ +------------------+--------------------------------------------+ ¦ DiskSize ¦ Возвращает полный объем в байтах заданного¦ ¦ ¦ диска. ¦ L------------------+--------------------------------------------- Процедуры обработки файлов -------------------T-------------------------------------------- ¦ Процедура ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ FExpand ¦ Воспринимает имя файла и возвращает полное¦ ¦ ¦ уточненное имя (диск, каталог, расширение).¦ +------------------+--------------------------------------------+ ¦ FSearch ¦ Ищет файл в списке каталогов. ¦ +------------------+--------------------------------------------+ ¦ FindFirst ¦ Производит поиск в заданном (или текущем)¦ ¦ ¦ каталоге записи, содержимое которой совпа-¦ ¦ ¦ дает с заданным именем файла и атрибутами.¦ +------------------+--------------------------------------------+ ¦ FindNext ¦ Возвращает следующую запись, имя файла и¦ ¦ ¦ атрибуты в которой совпадают с теми, кото-¦ ¦ ¦ рые были заданы при предыдущем обращении к¦ ¦ ¦ процедуре FindFirst. ¦ +------------------+--------------------------------------------+ ¦ GetFAttr ¦ Возвращает атрибуты файла. ¦ +------------------+--------------------------------------------+ ¦ SetFAttr ¦ Устанавливает атрибуты файла. ¦ L------------------+--------------------------------------------- Функции управления операционной средой -------------------T-------------------------------------------- ¦ Функция ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ EnvCount ¦ Возвращает число строк, содержащихся в опе-¦ ¦ ¦ рационной среде DOS. ¦ +------------------+--------------------------------------------+ ¦ EnvStr ¦ Возвращает заданную строку операционной¦ ¦ ¦ среды. ¦ +------------------+--------------------------------------------+ ¦ GetEnv ¦ Возвращает значение заданной переменной¦ ¦ ¦ операционной среды. ¦ L------------------+--------------------------------------------- Процедуры управления процессами -------------------T-------------------------------------------- ¦ Процедура ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ Eхесutе ¦ Выполняет заданную программу с указанной¦ ¦ ¦ командной строкой. ¦ +------------------+--------------------------------------------+ ¦ Keep ¦ Сохраняет (прекращает выполнение и сохраня-¦ ¦ ¦ ет в памяти) прекратившую работу программу,¦ ¦ ¦ оставляя ее резидентной в памяти. ¦ +------------------+--------------------------------------------+ ¦ SwapVectors ¦ Меняет местами содержимое сохраненных век-¦ ¦ ¦ торов прерываний и текущих векторов. ¦ L------------------+--------------------------------------------- Прочие процедуры и функции -------------------T-------------------------------------------- ¦Процедура/функция ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ DosVersion ¦ Возвращает номер версии операционной систе-¦ ¦ ¦ мы DOS. ¦ +------------------+--------------------------------------------+ ¦ GetCBreak ¦ Возвращает проверяемое DOS состояние¦ ¦ ¦ Ctrl+Break. ¦ +------------------+--------------------------------------------+ ¦ SetCBreak ¦ Устанавливает проверяемое DOS состояние¦ ¦ ¦ Ctrl+Break. ¦ +------------------+--------------------------------------------+ ¦ GetVerify ¦ Возвращает состояние флага проверки в DOS. ¦ +------------------+--------------------------------------------+ ¦ SetVerify ¦ Устанавливает состояние флага проверки в¦ ¦ ¦ DOS. ¦ L------------------+---------------------------------------------

Константы, типы и переменные модуля Dos

В данном разделе кратко обсуждаются константы, типы и пере- менные, определяемые в модуле Dos. Более детальная информация со- держится в разделе "Константы флагов" (значение FParity) в Главе 1 ("Справочник по библиотеке") "Справочного руководства програм- миста". Группы констант -----------------------------T---------------------------------- ¦ Группа констант ¦ Описание ¦ +----------------------------+----------------------------------+ ¦ Флаги ¦ Используются для проверки отдель-¦ ¦ ¦ ных флагов после вызова функций¦ ¦ ¦ Intr или MsDos. Это флаги:¦ ¦ ¦ FParity, FAuxiliary, FZero,¦ ¦ ¦ FSign, FOverflow, fCarry. ¦ +----------------------------+----------------------------------+ ¦ fmXXXX ¦ Определяет допустимые значения¦ ¦ ¦ поля Mode записи TextRec тексто-¦ ¦ ¦ вого файла: fmClosed, fmInput,¦ ¦ ¦ fmOutput, fmInOut. ¦ +----------------------------+----------------------------------+ ¦ Атрибуты файла ¦ Используются для построения ат-¦ ¦ ¦ рибутов, применяемых в FindFirst,¦ ¦ ¦ GetFAttr и SetFAttr. Это флаги¦ ¦ ¦ ReadOnly, Hidden, SysFile,¦ ¦ ¦ VolumeID, Directory, Archive,¦ ¦ ¦ AnyFile. ¦ L----------------------------+-----------------------------------

Типы

В модуле Dos определяются следующие типы: ---------------------------T------------------------------------ ¦ Тип ¦ Описание ¦ +--------------------------+------------------------------------+ ¦ Тип записи файла ¦ Определения записей, использующие-¦ ¦ ¦ ся в Borland Pascal для внутренних¦ ¦ ¦ целей, описываются также в модуле¦ ¦ ¦ Dos. Тип FilеRес используется как¦ ¦ ¦ для типизованных, так и для нетипи-¦ ¦ ¦ зованных файлов, в то время, как¦ ¦ ¦ TехtRес представляет собой внутрен-¦ ¦ ¦ ний формат переменной текстового¦ ¦ ¦ типа. ¦ +--------------------------+------------------------------------+ ¦ Registers ¦ Переменные регистрового типа приме-¦ ¦ ¦ няются в процедурах Intr и МsDos¦ ¦ ¦ для задания содержимого входного¦ ¦ ¦ регистра и проверки содержимого вы-¦ ¦ ¦ ходного регистра при прерываниях,¦ ¦ ¦ использующихся в программном обес-¦ ¦ ¦ печении. ¦ +--------------------------+------------------------------------+ ¦ DateTime ¦ Переменные типа DateTiме (даты и¦ ¦ ¦ времени) используются в процедурах¦ ¦ ¦ UnраскТiме и РаскТiме для анализа,¦ ¦ ¦ упаковки и построения четырехбайто-¦ ¦ ¦ вого значения, содержащего дату и¦ ¦ ¦ время. Это четырехбайтовое значение¦ ¦ ¦ используется затем в процедурах¦ ¦ ¦ GetFTiме, SetTiме, FindFirst и¦ ¦ ¦ FindNехt. ¦ +--------------------------+------------------------------------+ ¦ SearchRec ¦ Переменные типа SearchRес использу-¦ ¦ ¦ ются в процедурах FindFirst и¦ ¦ ¦ Findnext для просмотра каталогов¦ ¦ ¦ файлов. ¦ +--------------------------+------------------------------------+ ¦ Строковые типы ¦ Эти строковые типы определены в мо-¦ ¦ работы с файлами ¦ дуле Dos и используются для работы¦ ¦ ¦ с именами файлов и маршрутов при¦ ¦ ¦ вызове строковой процедуры FSplit.¦ ¦ ¦ Это типы ComStr, PathStr, DirStr,¦ ¦ ¦ NameStr, ExtStr. ¦ L--------------------------+-------------------------------------

Переменные модуля Dos

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

Процедуры и функции модуля WinDos

Ниже перечислены процедуры и функции модуля WinDos. Чтобы использовать их, вы должны ссылаться на модуль WinDos с помощью оператора программы uses. Процедуры для работы с датой и временем модуля WinDos -------------------T-------------------------------------------- ¦ Процедура ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ GetDate ¦ Возвращает текущую дату, установленную в¦ ¦ ¦ операционной системе. ¦ +------------------+--------------------------------------------+ ¦ GetFTime ¦ Возвращает дату и время последней записи¦ ¦ ¦ файла. ¦ +------------------+--------------------------------------------+ ¦ GetTiме ¦ Возвращает текущее время, установленное в¦ ¦ ¦ операционной системе. ¦ +------------------+--------------------------------------------+ ¦ РackTiме ¦ Преобразует запись DateTiме в четырехбайто-¦ ¦ ¦ вое упакованное символьное представление¦ ¦ ¦ даты и времени длинного целого типа, кото-¦ ¦ ¦ рое используется в процедуре SetTiме. ¦ +------------------+--------------------------------------------+ ¦ SetDate ¦ Устанавливает для операционной системы те-¦ ¦ ¦ кущую дату. ¦ +------------------+--------------------------------------------+ ¦ SetFTiме ¦ Устанавливает время и дату последней записи¦ ¦ ¦ файла. ¦ +------------------+--------------------------------------------+ ¦ SetTiме ¦ Устанавливает в операционной системе теку-¦ ¦ ¦ щее время. ¦ +------------------+--------------------------------------------+ ¦ UnpackTiме ¦ Преобразует четырехбайтовое упакованной¦ ¦ ¦ символьное представление даты и времени¦ ¦ ¦ длинного целого типа, возвращаемого проце-¦ ¦ ¦ дурами GetFTiме, FindFirst, FindNext в рас-¦ ¦ ¦ пакованную запись DateTiме. ¦ L------------------+--------------------------------------------- Процедуры обслуживания прерываний модуля WinDos -------------------T-------------------------------------------- ¦ Процедура ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ GetIntVес ¦ Возвращает адрес, сохраненный в заданном¦ ¦ ¦ векторе прерываний. ¦ +------------------+--------------------------------------------+ ¦ Intr ¦ Выполняет заданное программное прерывание.¦ +------------------+--------------------------------------------+ ¦ МsDos ¦ Выполняет вызов функции DOS. ¦ +------------------+--------------------------------------------+ ¦ SetIntVес ¦ Устанавливает по заданному адресу заданный¦ ¦ ¦ вектор прерывания. ¦ L------------------+--------------------------------------------- Функции модуля WinDos, проверяющие состояние диска -------------------T-------------------------------------------- ¦ Фуннкция ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ DiskFrее ¦ Возвращает число свободных байт на диске в¦ ¦ ¦ заданном дисководе. ¦ +------------------+--------------------------------------------+ ¦ DiskSize ¦ Возвращает полный объем в байтах заданного¦ ¦ ¦ диска. ¦ L------------------+--------------------------------------------- Процедуры работы с файлами модуля WinDos -------------------T-------------------------------------------- ¦ Процедура ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ FileExpand ¦ Воспринимает имя файла и возвращает полное¦ ¦ ¦ уточненное имя (диск, каталог, расширение).¦ +------------------+--------------------------------------------+ ¦ FileSearch ¦ Ищет файл в списке каталогов. ¦ +------------------+--------------------------------------------+ ¦ FileSplit ¦ Разбивает полное имя файла на три компонен-¦ ¦ ¦ та (диск, каталог, имя и расширение). ¦ +------------------+--------------------------------------------+ ¦ FindFirst ¦ Производит поиск в заданном (или текущем)¦ ¦ ¦ каталоге записи, содержимое которой совпа-¦ ¦ ¦ дает с заданным именем файла и атрибутами.¦ +------------------+--------------------------------------------+ ¦ FindNext ¦ Возвращает следующую запись, имя файла и¦ ¦ ¦ атрибуты в которой совпадают с теми, кото-¦ ¦ ¦ рые были заданы при предыдущем обращении к¦ ¦ ¦ процедуре FindFirst. ¦ +------------------+--------------------------------------------+ ¦ GetFAttr ¦ Возвращает атрибуты файла. ¦ +------------------+--------------------------------------------+ ¦ SetFAttr ¦ Устанавливает атрибуты файла. ¦ L------------------+--------------------------------------------- Процедуры и функции для работы с каталогами -------------------T-------------------------------------------- ¦ Процедура/функция¦ Описание ¦ +------------------+--------------------------------------------+ ¦ CreateDir ¦ Создает новый подкаталог. ¦ +------------------+--------------------------------------------+ ¦ GetCurDir ¦ Возвращает текущий каталог на заданном дис-¦ ¦ ¦ ке. ¦ +------------------+--------------------------------------------+ ¦ RemoveDir ¦ Удаляет подкаталог. ¦ +------------------+--------------------------------------------+ ¦ SetCurDir ¦ Изменяет текущий каталог. ¦ L------------------+--------------------------------------------- Процедуры и функции обслуживания прерываний модуля WinDos -------------------T-------------------------------------------- ¦ Процедура ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ GetArgCount ¦ Возвращает число параметров, переданных¦ ¦ ¦ программе в командной строке. ¦ +------------------+--------------------------------------------+ ¦ GetArgStr ¦ Возвращает заданный аргумент командной¦ ¦ ¦ строки. ¦ +------------------+--------------------------------------------+ ¦ GetEnvVar ¦ Возвращает указатель на значение заданной¦ ¦ ¦ переменной операционной среды. ¦ L------------------+--------------------------------------------- Прочие процедуры и функции модуля WinDos -------------------T-------------------------------------------- ¦Процедура/функция ¦ Описание ¦ +------------------+--------------------------------------------+ ¦ DosVersion ¦ Возвращает номер версии операционной систе-¦ ¦ ¦ мы DOS. ¦ +------------------+--------------------------------------------+ ¦ GetCBreak ¦ Возвращает проверяемое DOS состояние¦ ¦ ¦ Ctrl+Break. ¦ +------------------+--------------------------------------------+ ¦ SetCBreak ¦ Устанавливает проверяемое DOS состояние¦ ¦ ¦ Ctrl+Break. ¦ +------------------+--------------------------------------------+ ¦ SetVerify ¦ Устанавливает состояние флага проверки в¦ ¦ ¦ DOS. ¦ L------------------+---------------------------------------------

Константы, типы и переменные модуля WinDos

В данном разделе кратко обсуждаются константы, типы и пере- менные, определяемые в модуле WinDos. Более детальная информация содержится в разделе "Константы флагов" (значение FParity) в Гла- ве 1 ("Справочник по библиотеке") "Справочного руководства прог- раммиста". Группы констант -----------------------------T---------------------------------- ¦ Группа констант ¦ Описание ¦ +----------------------------+----------------------------------+ ¦ Флаги ¦ Используются для проверки отдель-¦ ¦ ¦ ных флагов после вызова функций¦ ¦ ¦ Intr или MsDos. Это флаги:¦ ¦ ¦ FParity, FAuxiliary, FZero,¦ ¦ ¦ FSign, FOverflow, fCarry. ¦ +----------------------------+----------------------------------+ ¦ fmXXXX ¦ Определяет допустимые значения¦ ¦ ¦ поля Mode записи TextRec тексто-¦ ¦ ¦ вого файла: fmClosed, fmInput,¦ ¦ ¦ fmOutput, fmInOut. ¦ +----------------------------+----------------------------------+ ¦ faXXXX ¦ Используются для построения ат-¦ ¦ ¦ рибутов, их проверки и изменения¦ ¦ ¦ в процедурах и функциях работы с¦ ¦ ¦ файлами. Это константы faHidden,¦ ¦ ¦ faSysFile, faVolumeID, faDirecto-¦ ¦ ¦ ry, faArchive, faAnyFile. ¦ +----------------------------+----------------------------------+ ¦ fsXXXX ¦ Максимальные длины компонентов¦ ¦ ¦ имени файла, используемых в под-¦ ¦ ¦ программах FileSearch и File-¦ ¦ ¦ Expand. Это константы: fsPathNa-¦ ¦ ¦ me, fsDirectory, fsFileName,¦ ¦ ¦ fsExtension. ¦ +----------------------------+----------------------------------+ ¦ fcXXXX ¦ Флаги, возвращаемые функцией¦ ¦ ¦ FileSplit: fcExtension, fcFile-¦ ¦ ¦ Name, fcDirectory, fcWildcards. ¦ L----------------------------+-----------------------------------

Типы

В модуле WinDos определяются следующие типы: ---------------------------T------------------------------------ ¦ Тип ¦ Описание ¦ +--------------------------+------------------------------------+ ¦ Тип записи файла ¦ Определения записей, использующие-¦ ¦ ¦ ся в Borland Pascal для внутренних¦ ¦ ¦ целей, описываются также в модуле¦ ¦ ¦ Dos. Тип TFilеRес используется как¦ ¦ ¦ для типизованных, так и для нетипи-¦ ¦ ¦ зированных файлов, в то время, как¦ ¦ ¦ TTехtRес представляет собой внут-¦ ¦ ¦ ренний формат переменной текстового¦ ¦ ¦ типа. ¦ +--------------------------+------------------------------------+ ¦ TRegisters ¦ Переменные регистрового типа приме-¦ ¦ ¦ няются в процедурах Intr и МsDos¦ ¦ ¦ для задания содержимого входного¦ ¦ ¦ регистра и проверки содержимого вы-¦ ¦ ¦ ходного регистра при прерываниях,¦ ¦ ¦ использующихся в программном обес-¦ ¦ ¦ печении. ¦ +--------------------------+------------------------------------+ ¦ TDateTime ¦ Переменные типа TDateTiме (даты и¦ ¦ ¦ времени) используются в процедурах¦ ¦ ¦ UnраскТiме и PаскТiме для анализа,¦ ¦ ¦ упаковки и построения четырехбайто-¦ ¦ ¦ вого значения, содержащего дату и¦ ¦ ¦ время. Это четырехбайтовое значение¦ ¦ ¦ используется затем в процедурах¦ ¦ ¦ GetFTiме, SetTiме, FindFirst и¦ ¦ ¦ FindNехt. ¦ +--------------------------+------------------------------------+ ¦ TSearchRec ¦ Переменные типа TSearchRес исполь-¦ ¦ ¦ зуются в процедурах FindFirst и¦ ¦ ¦ Findnext для просмотра каталогов¦ ¦ ¦ файлов. ¦ L--------------------------+-------------------------------------

Переменные модуля WinDos

Многими подпрограммами модуля WinDos для сообщения об ошибке используется переменная DosError.
                       Назад | Содержание | Вперед


Обратная связь
Информация для авторов

Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum

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

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

0 — нет ошибки;

2 — не найден файл (невозможно связать логический файл с физическим устройством);

3 — путь (маршрут) не найден (неверная адресация файла на диске);

4 — слишком много открытых файлов (больше, чем указано в директиве FILES = … файла CONFIG.SYS);

5 — доступ закрыт (операция заблокирована средствами DOS, или нарушаются правила работы с именами файлов или каталогов);

6 — неверное ведение файла (редкая ошибка, возникающая при нарушении информации в полях файловых переменных или в системных областях MS-DOS);

8 — не хватает памяти;

10 — несовместная операционная система;

11 — нераспознаваемая разметка (формат) диска;

12 — неверный код доступа к диску (ошибка в поле Mode файловой записи);

18 — искомые файлы исчерпаны (возникает при поиске файлов по шаблонам).

Обычно переменная  DosError используется в сопряжении с процедурами FindFirst и FindNext.

— 362 —

Компилятор Паскаля – сложное приложение,
имеющее множество настроек. При написании
учебных программ большинство этих
настроек не имеют значения, но некоторые
из них окажутся нам полезны. Для управления
компилятором существует 2 основных
возможности: настройка режимов работы
с помощью верхнего меню OptionsоболочкиTurboPascalи настройка конкретной программы с
помощьюдиректив компилятора,
которую мы кратко рассмотрим. В общем
виде директива компилятора представляет
собой конструкцию вида{$X+}или{$X-},гдеX– латинская буква. Вариант со знаком
«+»
включает некоторый режим работы
компилятора (например, строгий контроль
программой соответствия типов данных,
вывод системных диагностических
сообщений и т.д.), а вариант со знаком
«-»
выключает его. Расположение директив,
в общем, произвольно, однако, директивы,
влияющие на всю программу, принято
располагать в самом начале файла с
исходным текстом. Фигурные скобки
комментария{
… }необходимы, чтобы скрыть
действие директив от старых версий
компилятора, которые не умели их
распознавать.

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

Наиболее полезной для нас выглядит
директива {$I-}/{$I+},
соответственно, выключающая и включающая
автоматический контроль программой
результатов операций ввода/вывода
(в/в). К операциям в/в относятся, в числе
прочего, ввод данных пользователем,
вывод строки на принтер, открытие файла
для получения или вывода данных и т.п.
Понятно, что даже несложная учебная
программа выглядит лучше, если она умеет
реагировать на неправильные действия
пользователя или возникающие ошибки
не просто выводом маловразумительного
системного сообщения на английском
языке, а доступным неискушенному
пользователю текстом. По умолчанию
контроль в/в включен и системные сообщения
об ошибках генерируются автоматически.
Все они кратко приведены в Приложении
3. Для замены системной диагностики
своей собственной следует, во-первых,
отключить директиву контроля оператором{$I-},
а во-вторых, сразу же после оператора,
который мог породить ошибку, проверить
значение, возвращаемое системной
функциейIoResult.
Эта функция возвращаетноль, если
последняя операция в/в прошлауспешно,
в противном случае возвращается ненулевое
значение. После завершения «критического»
оператора директиву следует включить
снова, чтобы не создавать потенциально
опасных ситуаций в коде, который будет
писаться далее! Приведем один пример,
написав «расширенную» программу
решения квадратного уравнения, корректно
реагирующую на возникающие ошибки:

uses printer;

var a,b,c,d,x1,x2:real;

begin

writeln;

writeln (‘Введите 3
вещественных числа:’);

{$I-} read
(a,b,c); {$I+}

if
IoResult<>0 then begin {Возникла
ошибка!}

Writeln (‘Вы не ввели
3 числа, это что-то другое!’);

Reset (input); {очищаем
буфер клавиатуры перед ожиданием

нажатия Enter}

Readln;

Halt; {а этим оператором
можно аварийно завершить программу!}

end;

d:=sqr(b)-4*a*c;

if d<0 then begin

Writeln (‘Ошибка при
вычислении корней — дискриминант<0’);

Reset
(input);

Readln;

Halt;

end;

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

{$I-}

writeln (lst,’x1=’,x1:8:2,’
x2=’,x2:8:2);

{$I+}

if IoResult<>0 then
Writeln (‘Не удалось вывести на принтер’)

else Writeln (‘Результаты
напечатаны’);

Reset (input); {Перед
Readln
очистили стандартный поток ввода}

Readln;

Halt;

end.

Специальной директивы для контроля
математических ошибок в Паскале не
предусмотрено, но это почти всегда можно
сделать обычными проверками корректности
данных. Обратите внимание на альтернативное
решение проблемы «двух readln»
в этом коде, а также на новый операторHaltи способ
контроля того, удалось ли вывести строку
на принтер.

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

Для работы с вещественными числами с
двойной точностью (тип double)
может также понадобиться указать перед
программой директиву{$N+},
позволяющую сгенерировать код для
аппаратной обработки таких чисел.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Dos error 4 dosbox
  • Dors 800 ошибка калибровки что делать
  • Dors 800 ошибка post error
  • Dors 800 ошибка p o s t error
  • Dors 800 очистите карманы p o s t error