Подпрограммы обработки директорий

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

Процедура erase(f: file) удалит файл, связанный с файловой переменной f. Если такого файла нет, произойдет ошибка, реакцию на которую можно отрегулировать при помощи директивы компилятора {$I}.

Процедура rename(f: file; s: string) даст файлу, связанному с файловой переменной f, новое имя, указанное в строке s. Если такого файла нет, произойдет ошибка.

Процедура chdir(s: string) сделает текущей директорию, указанную в строке s. Если такой директории нет, произойдет ошибка.

Процедура getdir(disk: byte; s:string) запишет в строку s имя текущей директории на указанном диске (0 ? текущий диск, 1 ? диск А , 2 ? диск В и т.д.).

Процедура mkdir(s: string) создаст в текущей директории новую поддиректорию с указанным в строке s именем. Если в текущей директории уже существуют файл или директория с указанным именем, произойдет ошибка.

Процедура rmdir(s: string) удалит пустую директорию с заданным в строке s именем. Если такой директории нет, произойдет ошибка.

Пробельные символы

К пробельным символам (присутствующим в файле, но невидимым на экране) относятся:

  • символ горизонтальной табуляции (#9);
  • символ перевода строки (#10) (смещение курсора на следующую строку, в той же позиции);
  • символ вертикальной табуляции (#11);
  • символ возврата каретки (#13) (смещение курсора на начальную позицию текущей строки; в кодировке UNIX один этот символ служит признаком конца строки);
  • символ конца файла (#26);
  • символ пробела (#32).

<p>СОДЕРЖАНИЕ РАБОТЫ:Создать программу считывания произвольного файла и создание нового нетипизированного файла, копируя блоками. Научиться использовать подпрограммы обработки директорий.

ВОПРОСЫ ВЫХОДНОГО КОНТРОЛЯ:

1. Приведите пример объявления нетипизированного файла.

2. Опишите структуру допустимых процедур и функций при работе с нетипизированными файлами.

3. Перечислите и опишите подпрограммы обработки директорий.

4. Перечислите пробельные символы.

ДОМАШНЕЕ ЗАДАНИЕ

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

ЛАБОРАТОРНАЯ РАБОТА №22 Тема: Разработка программ с использованием прерываний BIOS и DOS, процедурных типов

Цель:Развить умения разрабатывать программы с использованием процедурного типа

Программное обеспечение: TURBO PASCAL 7.1

Оснащение:персональный компьютер, практикум

Время проведения: 2 уч. часа

Литература:

Павловская Т.А. Паскаль. Программирование на языке высокого уровня. Учебник для вузов. СПб.: Питер, 2008. С. 153-163.

Время выполнения:2 часа.

ВОПРОСЫ ВХОДНОГО КОНТРОЛЯ:

1. Перечислите типы файловых переменных, пример их объявления.

2. Запишите структуру процедур открытия и закрытия файла.

3. Перечислите и опишите подпрограммы обработки директорий.

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Структура *.ЕХЕ программ

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

1) заголовка ? записи, содержащей информацию по управлению и настройке программы;

2) собственно загрузочного модуля.

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

00 ? (шестнадцатеричное 4D5A) компоновщик устанавливает этот код для идентификации правильного ЕХЕ файла;

02 ? число байтов в последнем блоке ЕХЕ файла;

04 ? число блоков по 512 байт ЕХЕ файла, включая заголовок;

06 ? число настраиваемых элементов;

08 ? число 16-ти байтовых блоков (параграфов) в заголовке (необходимо для локализации начала выполняемого модуля, следующего после заголовка);

0А ? минимальное число параграфов, которые должны находится после загруженной программы;

0С ? переключатель загрузки в младшие или старшие адреса. При компоновке пользователь должен решить, будет ли его программа загружаться для выполнения в младшие адреса памяти или в старшие. Обычным является загрузка в младшие адреса.

Значение 0000 указывает на загрузку в старшие адреса, а FFFF ? в младшие. Иные значения определяют максимальное число параграфов, которые должны находиться после загруженной программы;

0Е ? относительный адрес сегмента стека в выполняемом модуле;

10 ? адрес, который загрузчик должен поместить в регистр SP перед передачей управления в выполнимый модуль;

12 ? контрольная сумма ? сумма всех слов в файле (без учета переполнения) используется для проверки потери данных;

14 ? относительный адрес, который загрузчик должен поместить в регистр IP до передачи управления в выполняемый модуль;

16 ? относительный адрес кодового сегмента в выполняемом модуле. Этот адрес загрузчик заносит в регистр CS;

18 ? смещение 1-ого настраиваемого элемента в файле;

1А ? номер оверлейного фрагмента: 0 означает, что заголовок относится к резидентной части ЕХЕ файла;

1С ? таблица настройки, содержащая переменное число настраиваемых элементов, соответствующее значению по смещению 06.

Заголовок имеет минимальный размер 512 байт и может быть больше, если программа содержит большое число настраиваемых элементов. Позиция 06 в заголовке указывает число элементов в выполняемом модуле, нуждающихся в настройке. Каждый элемент настройки в таблице, начинающейся в позиции 1С заголовка, состоит из 2-х байтовых величин смещений и 2-х байтовых сегментных значений.

Система строит префикс программного сегмента (PSP) следом за резидентной частью COMMAND.COM, которая выполняет операцию загрузки. Затем COMMAND.COM осуществляет следующее:

? считывает форматированную часть заголовка в память;

? вычисляет размер выполнимого модуля (общий размер файла в позиции 04 минус размер заголовка в позиции 08) и загружает модуль в память с начала сегмента;

? считывает элементы таблицы настройки в рабочую область и прибавляет значение каждого элемента таблицы к началу сегмента (позиция 0E);

? устанавливает в регистрах SS и SP значения из заголовка и прибавляет адрес начала сегмента;

? устанавливает в регистрах DS и ES сегментный адрес PSP;

? устанавливает в регистре CS адрес PSP и прибавляет величину смещения в заголовке (позиция 16) к регистру CS. Если сегмент кода непосредственно следует за PSP, то смещение в заголовке равно 256 (100H). Регистровая пара CS:IP содержит стартовый адрес в кодовом сегменте, т.е. начальный адрес программы. После инициализации регистры CS и SS содержат правильные адреса сегментов, а регистр DS (и ES) должен быть настроен в программе на собственный сегмент данных:

Mov AX,datasegname; {Установить в DS}

Mov DS,AX ;{адрес сегмента данных}

Структура СОМ — программ.

Различия между программами в ЕХЕ и СОМ файлах:

? РАЗМЕР ПРОГРАММЫ. Программа в формате ЕХЕ может иметь любой размер, в то время как СОМ-файл ограничен размером одного сегмента и не превышает 64 К. Размер СОМ-файла всегда меньше, чем размер соответствующего ЕХЕ-файла; одна из причин этого — отсутствие в СОМ-файле 512-байтового заголовка ЕХЕ-файла.

? СЕГМЕНТ СТЕКА. В ЕХЕ-программе определяется сегмент стека, в то время как СОМ-программа генерирует стек автоматически. Таким образом, при создании ассемблерной программы, которая будет преобразована в СОМ-файл, стек должен быть опущен.

? СЕГМЕНТ ДАННЫХ. В ЕХЕ-программе обычно определяется сегмент данных, а регистр DS инициализируется адресом этого сегмента. В СОМ-программе все данные должны быть определены в сегменте кода.

? ИНИЦИАЛИЗАЦИЯ. В ЕХЕ-программе выполняется инициализация регистра DS. Так как в СОМ-программе стек и сегмент данных не определены, то эти шаги отсутствуют.

Когда СОМ-программа начинает работать, все сегментные регистры содержат адрес PSP ? 256 байтовый блок, который резервируется операционной системой DOS непосредственно перед СОМ- или ЕХЕ-программой в памяти. Так как адресация начинается со смещения 100Н от начала PSP, то в программе необходимо указать директиву ORG 100H.

Процедурные типы

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

Приведем некоторые примеры описаний процедурного типа:

type

Proc = procedure;

SwapProc = procedure(var X, Y: Integer);

StrProc = procedure(S: String);

MathFunc = function(X: Real): Real;

DeviceFunc = function(var F: text): Integer;

MaxFunc = function(A, B: Real; F: MathFunc): Real;

Имена параметров в описании процедурного типа играют чисто декоративную роль ? на смысл описание они не влияют.

Процедурные значения

Переменной процедурного типа можно присвоить процедурное значение. Процедурные значения могут быть следующими:

* значениями nil;

* ссылкой на переменную процедурного типа;

* идентификатором процедуры или функции.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

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

Рассмотрим, например, следующее описание:

var

P: SwapProc;

F: MathFunc;

procedure Swap(var A, B: Integer); far;

var

Temp: Integer;

begin

Temp := A;

A := B;

B := Temp;

end;

function Tan(Angle: Real); far;

begin

Tan := Sin(Angle) / Cos(Angle);

end;

Переменным P и F можно присвоить значения следующим образом:

P := Swap;

F := Tan;

а вызовы с помощью P и F можно выполнить так:

P(I, J); { эквивалентно Swap(I, J) }

X := F(X); { эквивалентно X := Tan(X) }

Использование процедурных переменных, которым в операторе вызова процедуры или функции присваивается значение nil, приводит к ошибке. Значение nil предназначено для указания того, что процедурная переменная не присвоена, где процедурная переменная может получить значение nil, участвующие в этой процедурной переменной вызовы процедур и функций следует подвергать проверке:if @Pnil then P(I, J);

Обратите внимание на использование операции @ для указания того, что P проверяется, а не вызывается.

СОДЕРЖАНИЕ РАБОТЫ:Разработать программу определения значений функций а=0; 0,5; 1,0 с использованием параметров процедурного или функционального типа.

Вариант Задание
№1
№2
№3
№4
№5
№6
№7
№8
№9
№10
№11
№12
№13
№14
№15
№16

ВОПРОСЫ ВЫХОДНОГО КОНТРОЛЯ:

1. Опишите структуру переменных процедурного типа.

2. Перечислите процедур и функций обработки прерываний.

ДОМАШНЕЕ ЗАДАНИЕ

Выучить возможности обработки с использованием прерываний BIOS и DOS, структуру объявления процедурного типа.

Рандомно подобранные статьи с сайта:

Четыре детали-четыре подпрограммы


Похожие статьи:

  • Подпрограммы с параметрами

    Begin end; Начало раздела описания логики процедуры Раздел описания логики процедуры Конец раздела описания логики процедуры Функции— это процедуры,…

  • Функции и команды обработки строк

    Лабораторная работа №3 Процедуры и Функции. Обработка строк. Процедуры Для использования подпрограммы-процедуры необходимо сначала описать процедуру, а…

  • Подпрограммы в языке pascal

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

admin