{***************************************************************************} {* Eingabe der Disketten *} {***************************************************************************} PROCEDURE DirEingabe; VAR Auswahl, LDriveC : char; PROCEDURE LiesDirectory(VAR EintragZahl : Index); {Liest das gesamte Directory einer Diskette oder eines Festplattenlaufwerks'} VAR z : Byte; Nummer : DiskIdent; FCB : ARRAY [0..31] OF char; Puffer : ARRAY[0..127] OF char; PROCEDURE Kill(DI:DiskIdent; VAR EintragZahl : Index); {Sorgt fuer ein automatisches Update, indem vor der Neueingabe einer Diskettennummer eventuell vorhandene Eintraege geloescht werden.} VAR i : Index; BEGIN i:=1; WHILE i<=EintragZahl DO IF Directory[i].DskNr=DI THEN BEGIN Directory[i]:=Directory[EintragZahl]; EintragZahl:=pred(EintragZahl) END ELSE i:=succ(i) END; BEGIN {LiesDirectory} write('Disknummer : '); readln(Nummer); write('Diskette einlegen und dann RETURN druecken !'); readln; Kill(Nummer,EintragZahl); FCB:='????????????'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0; BDOS($0D); {Diskettensystem zuruecksetzen} BDOS($0E,LDrive); {Bezugslaufwerk festlegen} BDOS($1A,Addr(Puffer)); {Datenuebergabe-Adresse festlegen} z:=BDOS($11,Addr(FCB)); {Ersten Eintrag holen} WHILE z<>255 DO BEGIN IF Puffer[z*32]<#128 THEN BEGIN EintragZahl:=succ(EintragZahl); IF Eintragzahl>MaxZahl THEN EintragZahl:=MaxZahl; WITH Directory[EintragZahl] DO BEGIN Name:=copy(Puffer,z*32+2,11); DskNr:=Nummer; User:=ord(Puffer[z*32]) AND 31 END; END; z:=BDOS(18); {naechsten Eintrag holen} END END; {LiesDirectory} BEGIN {DirEingabe} REPEAT writeln('Bezugslaufwerk : ',chr(LDrive+65)); writeln(MaxZahl-DirZahl,' Eintraege frei.'); write('L)aufwerk wechseln, E)ingabe, Q)uit '); REPEAT read(kbd,Auswahl) UNTIL upcase(Auswahl) IN ['L','E','Q']; writeln(upcase(Auswahl)); CASE upcase(Auswahl) OF 'L' : BEGIN write('Neues Laufwerk : '); REPEAT read(kbd,LDriveC); LDriveC:=upcase(LDriveC) UNTIL LDriveC IN [#13,'A'..'P']; IF LDriveC<>#13 THEN LDrive:=ord(LDriveC)-65; writeln(chr(LDrive+65)) END; 'E' : BEGIN LiesDirectory(DirZahl); IF DirZahl=MaxZahl THEN writeln('Directory voll!') END; END; writeln; UNTIL upcase(Auswahl)='Q'; QSort(1,DirZahl); SchreibSuperDir(DirZahl) END;