PROGRAM FRMIQ(INPUT,OUTPUT); (* Formatovani a verifikace disket na IQ151 s PFD251 a DISC2M *) LABEL 1,2,3,9; TYPE STR6=PACKED ARRAY[1..6]OF CHAR; EXTERNAL VAR ST0:BYTE; VAR FRMTBL:ARRAY[1..26] OF RECORD TRK,HD,SEC,SCL:BYTE END; I:BYTE; DSK,TRK:BYTE; FRMFLG:BOOLEAN; CH:CHAR; BUF:PACKED ARRAY[1..128] OF CHAR; PROCEDURE SELDSK(DSK:BYTE); EXTERNAL; FUNCTION SEEK(TRK:BYTE):BOOLEAN; EXTERNAL; FUNCTION HOME:BOOLEAN; EXTERNAL; PROCEDURE SETADR(ADR:WORD); EXTERNAL; FUNCTION FRMTRK:BOOLEAN; EXTERNAL; FUNCTION RDSEC(SEC:BYTE):BOOLEAN; EXTERNAL; (*************************************************************) PROCEDURE ERROR(CONST S:STR6); BEGIN WRITELN; WRITELN('# Chyba ',S); GOTO 2; END; PROCEDURE HDTXT; BEGIN WRITELN; IF FRMFLG THEN WRITE('Formatovana') ELSE WRITE('Verifikovana'); WRITE(' stopa ',TRK:2); END; PROCEDURE RDCH; BEGIN READLN; READ(CH); IF CH IN ['a'..'z'] THEN CH:=CHR(ORD(CH)-20H); END; BEGIN WRITELN; WRITELN( '* Formatovani a verifikace disket na IQ151 s PFD251 a DISC2M *'); WRITELN( ' (C) VS FEL CVUT - ZA - 290987 '); FOR I:=1 TO 26 DO WITH FRMTBL[I] DO BEGIN HD:=0; SEC:=I; SCL:=0 END; 1: REPEAT WRITE('(F)ormatovat, (V)erifikovat nebo (K)onec?'); RDCH; UNTIL CH IN ['F','V','K']; IF CH='K' THEN GOTO 9; FRMFLG:=CH='F'; REPEAT WRITE('V jednotce 0 nebo 1?'); RDCH; UNTIL CH IN ['0','1']; DSK:=ORD(CH)-ORD('0'); 2: IF FRMFLG THEN WRITE('Formatovat') ELSE WRITE('Verifikovat'); WRITE(' disketu v jednotce ',DSK,' (A/N)?'); RDCH; IF CH<>'A' THEN GOTO 1; WRITE('Zaloz disketu do jednotky ',DSK,' a stiskni '); READLN; TRK:=0; SELDSK(DSK); IF HOME THEN ERROR('HOME'); HDTXT; REPEAT 3: WRITE(CHR(8),CHR(8),TRK:2); IF SEEK(TRK) THEN ERROR('SEEK'); IF FRMFLG THEN BEGIN FOR I:=1 TO 26 DO FRMTBL[I].TRK:=TRK; SETADR(REF(FRMTBL)); IF FRMTRK THEN ERROR('FORMAT'); END; I:=1; SETADR(REF(BUF)); REPEAT IF RDSEC(I) THEN BEGIN WRITELN; WRITELN('Chybny sektor ',I,' ST012:',REF(ST0):3); WRITE('(O)pakovat, (I)gnorovat nebo (K)onec?'); RDCH; IF CH='O' THEN BEGIN HDTXT; GOTO 3 END; IF CH<>'I' THEN GOTO 2; HDTXT; END; I:=I+2; IF I=27 THEN I:=2; UNTIL I=28; TRK:=TRK+1; UNTIL TRK=77; WRITELN; GOTO 2; 9:WRITE('Zaloz systemovou disketu a stiskni '); READLN; END.