{***************************************************************************} {* Lesen und Schreiben des Super-Directorys *} {***************************************************************************} PROCEDURE LiesSuperDir(MusterIdent:DiskIdent; MusterName:DirName; VAR Anzahl:Index); {Es werden nur diejenigen Eintraege in den Speicher geholt, auf die das Muster passt} VAR f : FILE OF DirEintrag; i : 1..11; temp : DirEintrag; passt : boolean; BEGIN assign(f,'SUPERDIR.DAT'); {$I-} reset(f) {$I+}; Anzahl:=0; IF IOresult=0 THEN WHILE NOT EOF(f) DO BEGIN read(f,temp); passt:=true; WITH temp DO BEGIN FOR i:=1 TO 11 DO IF (ord(Name[i]) AND 127<>ord(MusterName[i])) AND (MusterName[i]<>'?') THEN passt:=false; IF passt THEN IF MusterIdent<>'' THEN passt:=MusterIdent=DskNr; END; IF passt THEN BEGIN Directory[Anzahl+1]:=temp; Anzahl:=succ(Anzahl) END; END; close(f) END; PROCEDURE SchreibSuperDir(Anzahl : Index); {Falls eine File mehrere Directory-Eintraege (=Extensions) belegt, werden diese nicht ins Super-Directory uebernommen} VAR f : FILE OF DirEintrag; i : Index; FUNCTION gleich(x,y:DirEintrag):boolean; BEGIN gleich:=(x.DskNr=y.DskNr) AND (x.Name=y.Name) AND (x.User=y.User) END; BEGIN writeln('SUPERDIR-Diskette in ',chr(LDrive+65),': einlegen und dann RETURN druecken'); readln; BDOS($0D); {Diskettensystem zuruecksetzen} BDOS($0E,LDrive); {Bezugslaufwerk festlegen} assign(f,'SUPERDIR.BAK'); {$I-} reset(f) {$I+}; IF IOResult=0 THEN BEGIN close(f); Erase(f) END; assign(f,'SUPERDIR.DAT'); {$I-} reset(f) {$I+}; IF IOResult=0 THEN BEGIN close(f); Rename(f,'SUPERDIR.BAK') END; assign(f,'SUPERDIR.DAT'); rewrite(f); FOR i:=1 TO Anzahl DO IF i>1 THEN IF NOT gleich(Directory[i-1],Directory[i]) THEN write(f,Directory[i]) ELSE ELSE write(f,Directory[i]); close(f) END;