PROGRAM run_demo(INPUT,OUTPUT); { run erzeugt ein Dirctory bestehen aus COM-Files . Jedes } { der Files kann man mit Hilfe der Tasten (links) und } { (rechts) markieren . Eine markierte Datei kann dann } { durch Druecken der -Taste ausgefuehrt werden. } { Dieses Programn kann nur dann verwendet werden , wenn es } { auf Diskette compilert und von CP/M aus aufgerufen wird. } { Die folgende CONST-Anwelsung muss fuer Bildschirme, die } { nicht mit 80 Zeichen/Zeile arbeiten, geaendert werden ! } CONST spalten = 80; { Anzahl Zeichen/ Zeile } TYPE longword = STRING[255]; shortword = STRING[11]; VAR DMA : STRING[128]; FCB : shortword ABSOLUTE $5C; { File Control block } eingabe : longword; name : ARRAY[0..63] OF shortword; r,i : INTEGER; a,z,n,code : BYTE; ein : CHAR; ext : STRING[3]; datei : FILE; PROCEDURE markiere(on:BOOLEAN); { Der ausgewaehlte Filename wird mit Hilfe der inversen } { Schrift markiert } BEGIN GOTOXY((i MOD n)*15+1,(i DIV n)+5); IF on THEN LOWVIDEO ELSE NORMVIDEO; WRITE(COPY(name[i],1,8),'.',COPY(name[i],9,3)); IF on THEN NORMVIDEO ELSE LOWVIDEO END; BEGIN n:=spalten DIV 15; { Anzahl der COM-Dateinamen pro Zeile } CLRSCR; z:=0; { File-Zaehler } FCB:='????????COM'; mem[$5c]:=0; bdos(26,addr(DMA)); { setze DMA-Adresse } a:=bdos(17,$5C); { suche nach ersten Eintrag } WHILE a<255 DO BEGIN a:=a*32+1; { rel. Adresse des Filenamen in DMA-Puffer } name[z]:=''; FOR i:=0 TO 10 DO name[z]:=name[z]+DMA[a+i]; GOTOXY((z MOD n)*15+1,(z DIV n)+5); WRITE(COPY(name[z],1,8),'.',COPY(name[z],9,3)); a:=bdos(18,$5C); { suche nach naechstem Eintrag } z:=z+1; END; z:=z-1; { z=Anzahl des COM-Files-1 } code:=0; i:=0; markiere(TRUE); { markiere erstes (nulltes) File } WHILE code<>13 DO BEGIN READ(KBD,ein); code:=ORD(UPCASE(ein)); IF code=68 THEN r:=1 { nach rechts } ELSE IF code=83 THEN r:=-1 { nach links } ELSE r:=0; IF r<>0 THEN BEGIN markiere(FALSE); { Markierung loeschen } i:=i+r; IF i>z THEN i:=0 ELSE IF i<0 THEN i:=z; markiere(TRUE); { Markierung setzen } END END; ASSIGN(datei,COPY(name[i],1,POS(' ',name[i])-1)+'.COM'); EXECUTE(datei); { Ausfuehrung d. ausgewaehlten Com-Files } END.