PACKET disk block io DEFINES (* Copyright (C) 1986 *)
(* Frank Klapper *)
(* 25.03.86 *)
read disk block,
read disk cluster,
write disk block,
write disk cluster,
io error,
first non dummy ds page:
INT CONST first non dummy ds page := 2;
INT VAR error;
PROC read disk block (DATASPACE VAR ds,
INT CONST ds page no,
INT CONST block no,
INT VAR error):
check rerun;
read block (ds, ds page no, eublock (block no), error).
END PROC read disk block;
PROC read disk block (DATASPACE VAR ds,
INT CONST ds page no,
INT CONST block no):
check rerun;
read block (ds, ds page no, eublock (block no), error);
IF error <> 0
THEN io error (error)
FI.
END PROC read disk block;
PROC read disk block (DATASPACE VAR ds,
INT CONST block no):
read disk block (ds, first non dummy ds page, block no)
END PROC read disk block;
PROC read disk cluster (DATASPACE VAR ds,
INT CONST first ds page no,
INT CONST cluster no):
INT VAR i;
FOR i FROM 0 UPTO sectors per cluster - 1 REP
read disk block (ds, first ds page no + i, block no + i)
PER.
block no:
first block no of cluster (cluster no).
END PROC read disk cluster;
PROC write disk block (DATASPACE CONST ds,
INT CONST ds page no,
INT CONST block no,
INT VAR error):
check rerun;
write block (ds, ds page no, 0,eu block (block no), error).
END PROC write disk block;
PROC write disk block (DATASPACE CONST ds,
INT CONST ds page no,
INT CONST block no):
check rerun;
write block (ds, ds page no, 0, eu block (block no), error);
IF error <> 0
THEN io error (error)
FI.
END PROC write disk block;
PROC write disk block (DATASPACE CONST ds,
INT CONST block no):
write disk block (ds, first non dummy ds page, block no)
END PROC write disk block;
PROC write disk cluster (DATASPACE CONST ds,
INT CONST first ds page no,
INT CONST cluster no):
INT VAR i;
FOR i FROM 0 UPTO sectors per cluster - 1 REP
write disk block (ds, first ds page no + i, block no + i)
PER.
block no:
first block no of cluster (cluster no).
END PROC write disk cluster;
PROC io error (INT CONST error code):
SELECT error code OF
CASE 1: errorstop ("Laufwerk nicht betriebsbereit")
CASE 2: errorstop ("Schreib-/Lesefehler")
CASE 3: errorstop ("Interner Fehler (Blocknummer zu hoch)")
CASE 4: errorstop ("Block nicht lesbar")
OTHERWISE errorstop ("Schreib-/Lesefehler " + text (error))
END SELECT.
END PROC io error;
END PACKET disk block io;