|
@@ -373,7 +373,7 @@ TYPE
|
|
VAR k: LONGINT; A: ARRAY 2000 OF DiskAdr; files: LONGINT; bad: BOOLEAN;
|
|
VAR k: LONGINT; A: ARRAY 2000 OF DiskAdr; files: LONGINT; bad: BOOLEAN;
|
|
|
|
|
|
PROCEDURE MarkSectors;
|
|
PROCEDURE MarkSectors;
|
|
- VAR L, R, i, j, n: LONGINT; x: DiskAdr; hd: FileHeader; sup, sub: IndexSector;
|
|
|
|
|
|
+ VAR L, R, i, j, n: LONGINT; x: DiskAdr; hd: FileHeader; sup, sub, mark, marksup: IndexSector;
|
|
size: Files.TSize;
|
|
size: Files.TSize;
|
|
|
|
|
|
PROCEDURE sift(L, R: LONGINT);
|
|
PROCEDURE sift(L, R: LONGINT);
|
|
@@ -402,21 +402,21 @@ TYPE
|
|
j := hd.aleng + 1;
|
|
j := hd.aleng + 1;
|
|
REPEAT
|
|
REPEAT
|
|
DEC(j);
|
|
DEC(j);
|
|
- IF hd.sec[j] # 0 THEN hd.sec[j] := hd.sec[j] DIV SectorFactor; (* preparation for block marking *)
|
|
|
|
- ELSE hd.aleng := j-1; bad := TRUE
|
|
|
|
|
|
+ IF hd.sec[j] # 0 THEN mark.x[j] := hd.sec[j] DIV SectorFactor; (* preparation for block marking *)
|
|
|
|
+ ELSE hd.aleng := j-1; bad := TRUE; mark.x[j] := 0;
|
|
END
|
|
END
|
|
UNTIL j = 0;
|
|
UNTIL j = 0;
|
|
- vol.MarkBlocks(hd.sec,0,hd.aleng+1);
|
|
|
|
|
|
+ vol.MarkBlocks(mark.x,0,hd.aleng+1);
|
|
ELSE
|
|
ELSE
|
|
j := SectorTableSize;
|
|
j := SectorTableSize;
|
|
REPEAT
|
|
REPEAT
|
|
DEC(j);
|
|
DEC(j);
|
|
IF hd.sec[j] # 0 THEN
|
|
IF hd.sec[j] # 0 THEN
|
|
- hd.sec[j] := hd.sec[j] DIV SectorFactor; (* preparation for block marking *)
|
|
|
|
- ELSE hd.aleng := j-1; bad := TRUE
|
|
|
|
|
|
+ mark.x[j] := hd.sec[j] DIV SectorFactor; (* preparation for block marking *)
|
|
|
|
+ ELSE hd.aleng := j-1; bad := TRUE; mark.x[j] := 0;
|
|
END
|
|
END
|
|
UNTIL j = 0;
|
|
UNTIL j = 0;
|
|
- vol.MarkBlocks(hd.sec,0,SectorTableSize);
|
|
|
|
|
|
+ vol.MarkBlocks(mark.x,0,SectorTableSize);
|
|
IF hd.ext = 0 THEN hd.aleng := SectorTableSize-1; bad := TRUE END;
|
|
IF hd.ext = 0 THEN hd.aleng := SectorTableSize-1; bad := TRUE END;
|
|
IF ~bad THEN
|
|
IF ~bad THEN
|
|
MarkSector(vol, hd.ext);
|
|
MarkSector(vol, hd.ext);
|
|
@@ -425,21 +425,23 @@ TYPE
|
|
WHILE (i <= n) & ~bad DO
|
|
WHILE (i <= n) & ~bad DO
|
|
IF sup.x[i] # 0 THEN
|
|
IF sup.x[i] # 0 THEN
|
|
GetSector(vol, sup.x[i], sub);
|
|
GetSector(vol, sup.x[i], sub);
|
|
- sup.x[i] := sup.x[i] DIV SectorFactor; (* preparation for block marking *)
|
|
|
|
|
|
+ marksup.x[i] := sup.x[i] DIV SectorFactor; (* preparation for block marking *)
|
|
IF i < n THEN size := IndexSize
|
|
IF i < n THEN size := IndexSize
|
|
ELSE size := (hd.aleng - SectorTableSize) MOD IndexSize + 1
|
|
ELSE size := (hd.aleng - SectorTableSize) MOD IndexSize + 1
|
|
END;
|
|
END;
|
|
FOR j := 0 TO size-1 DO
|
|
FOR j := 0 TO size-1 DO
|
|
IF (sub.x[j] MOD SectorFactor = 0) & (sub.x[j] > 0) THEN
|
|
IF (sub.x[j] MOD SectorFactor = 0) & (sub.x[j] > 0) THEN
|
|
- sub.x[j] := sub.x[j] DIV SectorFactor; (* preparation for block marking *)
|
|
|
|
|
|
+ mark.x[j] := sub.x[j] DIV SectorFactor; (* preparation for block marking *)
|
|
ELSE
|
|
ELSE
|
|
- sub.x[j] := 0;
|
|
|
|
|
|
+ mark.x[j] := 0;
|
|
bad := TRUE
|
|
bad := TRUE
|
|
END
|
|
END
|
|
END;
|
|
END;
|
|
- vol.MarkBlocks(sub.x,0,size);
|
|
|
|
|
|
+ vol.MarkBlocks(mark.x,0,size);
|
|
INC(i)
|
|
INC(i)
|
|
- ELSE bad := TRUE
|
|
|
|
|
|
+ ELSE
|
|
|
|
+ bad := TRUE;
|
|
|
|
+ marksup.x[i] := 0;
|
|
END;
|
|
END;
|
|
IF bad THEN
|
|
IF bad THEN
|
|
IF i = 0 THEN hd.aleng := SectorTableSize-1
|
|
IF i = 0 THEN hd.aleng := SectorTableSize-1
|
|
@@ -447,7 +449,7 @@ TYPE
|
|
END
|
|
END
|
|
END
|
|
END
|
|
END;
|
|
END;
|
|
- vol.MarkBlocks(sup.x,0,n);
|
|
|
|
|
|
+ vol.MarkBlocks(marksup.x,0,n);
|
|
END
|
|
END
|
|
END;
|
|
END;
|
|
IF bad THEN
|
|
IF bad THEN
|