|
Процедуры и функции модуля Level2 – доступ к кластерам
INTERFACE
USES common, level1;
PROCEDURE putCluster(n:INTEGER; s:myCluster); {сохраняет s в кластер с номером n}
FUNCTION getCluster(n:INTEGER):myCluster; {читает кластер с номером n}
Функция FIRSTSECTOR
Содержание задачи |
вычисления по формуле |
Уровень сложности |
низкий |
Модуль |
Level2 |
Входные параметры |
n: BYTE – номер кластера |
Выходные параметры |
нет (только результат функции) |
Тип результата |
INTEGER |
Вызываемые процедуры (функции) |
нет |
Глобальные переменные и константы |
константы fs_spc, fs_bi |
Действия |
по номеру кластера рассчитывает номер первого сектора в нем |
Проверки |
нет |
Комментарии |
рассчитывает номер сектора по числу секторов в кластере и с учетом размера каталога |
Функция LASTSECTOR
Содержание задачи |
вычисления по формуле |
Уровень сложности |
низкий |
Модуль |
Level2 |
Входные параметры |
n: BYTE – номер кластера |
Выходные параметры |
нет (только результат функции) |
Тип результата |
INTEGER |
Вызываемые процедуры (функции) |
firstSector |
Глобальные переменные и константы |
константа fs_spc |
Действия |
по номеру кластера рассчитывает номер последнего сектора в нем |
Проверки |
нет |
Комментарии |
добавляет к номеру начального сектора число секторов в кластере |
Процедура PUTCLUSTER
Содержание задачи |
записать длинную строку в несколько соседних элементов массива |
Уровень сложности |
средний |
Модуль |
Level2 |
Входные параметры |
n: integer – номер кластера; s:myCluster – содержимое |
Выходные параметры |
нет |
Вызываемые процедуры (функции) |
firstSector, lastSector, putSector (Level1) |
Глобальные переменные и константы |
константа dsk_bps |
Действия |
сохраняет указанное содержимое в виртуальный кластер с заданным номером |
Проверки |
для простоты нет (рассчитываем на Level1) |
Комментарии |
преобразует номер кластера в последовательность номеров секторов и сохраняет последние, используя процедуру putSector; в ходе записи исходное содержимое разбивает на части по dsk_bps байт
противоположна функции getCluster |
Функция GETCLUSTER
Содержание задачи |
прочитать несколько соседних элементов массива и собрать в общий результат |
Уровень сложности |
средний |
Модуль |
Level2 |
Входные параметры |
n: integer – номер кластера |
Выходные параметры |
нет (только результат функции) |
Тип результата |
myCluster |
Вызываемые процедуры (функции) |
firstSector, lastSector, getSector (Level1) |
Глобальные переменные и константы |
нет |
Действия |
возвращает содержимое виртуального кластера с заданным номером |
Проверки |
для простоты нет (рассчитываем на Level1) |
Комментарии |
преобразует номер кластера в последовательность номеров секторов и читает последние, используя функцию getSector; результат суммируется в единую переменную
противоположна процедуре putCluster |
Текст программы
UNIT level2; {Автор Е.А.Еремин. Пермь, 2004}
{доступ к кластерам}
INTERFACE
USES common, level1;
PROCEDURE putCluster(n:INTEGER; s:myCluster);
{сохраняет s в кластер с номером n}
FUNCTION getCluster(n:INTEGER):myCluster;
{читает кластер с номером n}
IMPLEMENTATION
FUNCTION firstSector(n:BYTE):INTEGER; {первый сектор кластера n}
BEGIN firstSector:=n*fs_spc+fs_bi
{0-й кластер начинается с сектора с номером fs_bi}
END;
FUNCTION lastSector(n:BYTE):INTEGER; {последний сектор кластера n}
BEGIN lastSector:=firstSector(n)+fs_spc-1
END;
FUNCTION getCluster(n:INTEGER):myCluster;
{читает кластер с номером n}
VAR r:myCluster; i:INTEGER;
BEGIN {добавить проверку}
r:='';
FOR i:=firstSector(n) TO lastSector(n) DO
r:=r+getSector(i); {суммируем все сектора в r}
getCluster:=r;
END;
PROCEDURE putCluster(n:INTEGER; s:myCluster);
{сохраняет s в кластер с номером n}
VAR i:INTEGER; w:mySector;
BEGIN {добавить проверку}
FOR i:=firstSector(n) TO lastSector(n) DO
BEGIN w:=COPY(s,1,dsk_bps); {выделить очередной сектор}
DELETE(s,1,dsk_bps); {больше он не нужен}
putSector(i,w) {сохранить сектор}
END;
END;
END.
На главную страницу
|