PACKET diskblockioDEFINES readdiskblock,readdiskblockandcloseworkiferror, readdiskcluster,writediskblock,writediskblockandcloseworkiferror, writediskcluster,firstnondummydspage,blocknodumpmodus:BOOL VAR blocknodumpflag:=FALSE ;LET writenormal=0;INT CONST firstnondummydspage:=2; INT VAR error;PROC readdiskblock(DATASPACE VAR ds,INT CONST dspageno,INT CONST blockno):IF blocknodumpflagTHEN dump("READ ",blockno)FI ;checkrerun; readblock(ds,dspageno,eublock(blockno),error);IF error>0THEN lesefehler(error )FI .END PROC readdiskblock;PROC readdiskblock(DATASPACE VAR ds,INT CONST dspageno,REAL CONST blockno):IF blocknodumpflagTHEN dump("READ ",blockno)FI ; checkrerun;readblock(ds,dspageno,eublock(blockno),error);IF error>0THEN lesefehler(error)FI .END PROC readdiskblock;PROC readdiskblockandcloseworkiferror(DATASPACE VAR ds,INT CONST dspageno,INT CONST blockno):IF blocknodumpflagTHEN dump("READ ",blockno)FI ;checkrerun; readblock(ds,dspageno,eublock(blockno),error);IF error>0THEN closework; lesefehler(error)FI .END PROC readdiskblockandcloseworkiferror;PROC readdiskblockandcloseworkiferror(DATASPACE VAR ds,INT CONST dspageno,REAL CONST blockno):IF blocknodumpflagTHEN dump("READ ",blockno)FI ;checkrerun; readblock(ds,dspageno,eublock(blockno),error);IF error>0THEN closework; lesefehler(error)FI .END PROC readdiskblockandcloseworkiferror;PROC readdiskcluster(DATASPACE VAR ds,INT CONST firstdspageno,REAL CONST clusterno ):IF blocknodumpflagTHEN dump("CLUSTER ",clusterno)FI ;INT VAR i;FOR iFROM 0 UPTO sectorspercluster-1REP readdiskblock(ds,firstdspageno+i,blockno+real(i)) PER .blockno:beginofcluster(clusterno).END PROC readdiskcluster;PROC lesefehler(INT CONST fehlercode):errorstop(fehlertext).fehlertext:SELECT fehlercodeOF CASE 1:"Diskettenlaufwerk nicht betriebsbereit"CASE 2: "Lesefehler"OTHERWISE "Lesefehler "+text(fehlercode)END SELECT .END PROC lesefehler;PROC writediskblock(DATASPACE CONST ds,INT CONST dspageno,INT CONST blockno):IF blocknodumpflagTHEN dump("WRITE",blockno)FI ;checkrerun; writeblock(ds,dspageno,writenormal,eublock(blockno),error);IF error>0THEN schreibfehler(error)FI .END PROC writediskblock;PROC writediskblock( DATASPACE CONST ds,INT CONST dspageno,REAL CONST blockno):IF blocknodumpflag THEN dump("WRITE",blockno)FI ;checkrerun;writeblock(ds,dspageno,writenormal, eublock(blockno),error);IF error>0THEN schreibfehler(error)FI .END PROC writediskblock;PROC writediskblockandcloseworkiferror(DATASPACE CONST ds,INT CONST dspageno,INT CONST blockno):IF blocknodumpflagTHEN dump("WRITE",blockno )FI ;checkrerun;writeblock(ds,dspageno,writenormal,eublock(blockno),error); IF error>0THEN closework;schreibfehler(error)FI .END PROC writediskblockandcloseworkiferror;PROC writediskblockandcloseworkiferror( DATASPACE CONST ds,INT CONST dspageno,REAL CONST blockno):IF blocknodumpflag THEN dump("WRITE",blockno)FI ;checkrerun;writeblock(ds,dspageno,writenormal, eublock(blockno),error);IF error>0THEN closework;schreibfehler(error)FI .END PROC writediskblockandcloseworkiferror;PROC writediskcluster(DATASPACE CONST ds,INT CONST firstdspageno,REAL CONST clusterno):IF blocknodumpflagTHEN dump( "CLUSTER ",clusterno)FI ;INT VAR i;FOR iFROM 0UPTO sectorspercluster-1REP writediskblock(ds,firstdspageno+i,blockno+real(i))PER .blockno:beginofcluster (clusterno).END PROC writediskcluster;PROC schreibfehler(INT CONST fehlercode ):errorstop(fehlertext).fehlertext:SELECT fehlercodeOF CASE 1: "Diskettenlaufwerk nicht betriebsbereit"CASE 2:"Schreibfehler"OTHERWISE "Schreibfehler "+text(fehlercode)END SELECT .END PROC schreibfehler;PROC blocknodumpmodus(BOOL CONST status):blocknodumpflag:=statusEND PROC blocknodumpmodus;END PACKET diskblockio;