The following article was printed in the special issue 4 1987 of the magazine „
CPC
".
Discussion of a Turbo Pascal program displaying a directory.
Turbo Directory
Dieses Programm erzeugt ein Directory aus einem Turbo-Pascal-Programm heraus und ist auf allen CP/M-Rechnern lauffähig.
Für die Rechner, deren Zeilenbreite < > 80 Zeichen/Zeile beträgt, kann im Programmkopf die Zeile
CONST spalten = 80
entsprechend geändert werden.
1: PROGRAM Dir_Demo(INPUT,OUTPUT); 2: 3: { Erzeugung eines Directories nach Eingabe der Maske unter } 4: { Beruecksichtigung der jeweiligen Bildschirmbreite } 5: CONST spalten = 80; { Bildschirmbreite = 80 Spalten } 6: 7: TYPE longword = STRING[255]; 8: shortword = STRING[11]; 9: 10: 11: VAR eingabe : longword; 12: filename : shortword; 13: i,z,a,n : INTEGER; 14: FCB : shortword ABSOLUTE $5c;{ File Control Block } 15: DMA : STRING[128]; 16: 17: FUNCTION gross(w:longword):longword; 18: { Umwandlung aller Buchstaben eines Wortes in Grossbuchst. } 19: VAR i : BYTE; 20: BEGIN 21: FOR i:=1 TO LENGTH(w) DO w[i]:=UPCASE(w[i]); 22: gross:=w 23: END; 24: 25: FUNCTION wildcard(x: longword): shortword; 26: { Der Filenane wird so aufbereitet, so dass er In den FCB } 27: { geschrieben werden kann. Wildcards ('*') werden berueck- } 28: { sichtigt. } 29: 30: VAR laenge,punkt,Stern : BYTE; 31: filename : STRING[8]; 32: ext : STRING[3]; 33: BEGIN 34: filename:=''; 35: ext:=' '; 36: laenge:=LENGTH(x); 37: punkt:=POS('.',x); { Pos. d. Punktes in Filenamen } 38: IF (punkt=0) AND (laenge>8) 39: THEN laenge:=8 40: ELSE BEGIN 41: ext:=COPY(x,punkt+1,3)+' '; 42: IF punkt>9 THEN laenge:=8 43: ELSE laenge:=punkt-1; 44: stern:=POS('*',ext); 45: IF stern<>0 THEN ext:=COPY(ext,1,stern-1)+'???'; 46: END; 47: Stern:=POS('*',x); 48: IF stern<>0 THEN filename:=COPY(x,1,stern-1)+'????????' 49: ELSE filename:=COPY(x,1,laenge)+' '; 50: wildcard:=filename+ext; 51: END; 52: 53: 54: BEGIN 55: WRITE('Maske : '); { Maske fuer das Directory } 56: READLN(eingabe); 57: filename:=wildcard(gross(eingabe)); 58: CLRSCR; 59: GOTOXY(15,3); 60: WRITELN('DIRECTORY'); 61: z:=0; 62: FCB:=filename; { Filename in den File-Control-Block } 63: mem[$5c]:=0; 64: bdos(26,addr(DMA)); { DMA-Adresse festlegen } 65: a:=bdos(17,$5C); { Suche nach dem ersten Namen } 66: WHILE a<255 DO 67: BEGIN 68: a:=a*32+1; 69: n:=spalten DIV 14; 70: GOTOXY((z MOD n)*14+2,(z DIV n)+5); 71: z:=z+1; 72: filename:='' ; 73: FOR i:=0 TO 10 DO filename:=filename+DMA[a+i]; 74: WRITE(COPY(filename,1,8),'.',COPY(filename,9,3)); 75: a:=bdos(18,$5C); { Suche nach den naechsten Eintrag } 76: END; 77: WRITELN; 78: END. 79:
[
Turbo-Pascal
source
]
Scanned by
Werner Cirsovius
September 2002
© CPC