{***************************************************************************} {* Ausgabe des Super-Directorys *} {***************************************************************************} PROCEDURE SchreibListe(EintragZahl : Index); VAR f : text; i : Index; PL, MB, MT, SeitenZahl, seite, zeile, ZeilenZahl, MaxZahl, SpaltenZahl, spalte : integer; DEV : (Bildschirm, Drucker); Selektor : char; PROCEDURE print(VAR f : text; dn : DirName); VAR i : 1..11; FUNCTION trans(x:char):char; {sorgt fuer druckbare Zeichen} VAR c : byte; BEGIN c:=ord(x) AND 127; {loescht achtes Bit} IF c in [32..126] THEN trans:=chr(c) ELSE trans:='!' END; BEGIN {print} FOR i:=1 TO 8 DO write(f,trans(dn[i])); write(f,'.'); FOR i:=9 TO 11 DO write(f,trans(dn[i])); END; {print} BEGIN IF EintragZahl=0 THEN writeln('Kein Eintrag') ELSE REPEAT ClrScr; writeln('Ausgabe der Liste:'); write('B)ildschirm oder D)rucker oder E)nde '); REPEAT read(kbd,Selektor) UNTIL Selektor IN ['b','B','d','D','e','E']; IF NOT(Selektor IN ['e','E']) THEN BEGIN CASE Selektor OF 'b','B' : BEGIN assign(f,'CON:'); PL:=23; MT:=0; MB:=0 END; 'd','D' : BEGIN assign(f,'LST:'); PL:=72; MT:=3; MB:=3 END; END; writeln(Selektor); rewrite(f); MaxZahl:=(PL-MT-MB)*3; ZeilenZahl:=PL-MB-MT; SpaltenZahl:=(EintragZahl-1) DIV ZeilenZahl; IF SpaltenZahl>2 THEN SpaltenZahl:=2; SeitenZahl :=(EintragZahl-1) DIV ((SpaltenZahl+1)*ZeilenZahl); FOR seite:=0 TO SeitenZahl DO BEGIN IF Selektor IN ['b','B'] THEN ClrScr ELSE writeln('Ausgabe auf Drucker.'); FOR zeile:=1 TO MT DO writeln(f); FOR zeile:=1 TO PL-MT-MB DO BEGIN writeln(f); FOR spalte:=0 TO SpaltenZahl DO BEGIN i:=seite*(PL-MB-MT)*(SpaltenZahl+1)+spalte*(PL-MB-MT)+zeile; IF i<=EintragZahl THEN WITH Directory[i] DO BEGIN write(f,DskNr:7,'/',User:2,': '); print(f,Name); {write(copy(Name,1,8),'.',copy(Name,9,3))} IF ord(Name[10])>128 THEN write(f,'/S') ELSE write(f,' '); END; END; END; FOR zeile:=1 TO MB DO writeln(f); IF Selektor IN ['b','B'] THEN readln; END; END; UNTIL Selektor IN ['e','E']; END;