Dateiauswahl als Menü

Es folgt ein Beispiel, wie man mit PBASICs Menü-Befehl ein Dateiauswahlmenü erstellen kann.

Als erstes mache man sich eine Feldvariable die die Liste aller Dateien enthalten soll, im folgenden Beispiel reichen 50 Dateien (DIM FN$(50)). Ganz oben in der Liste (FN$(0)) platzieren wir den Titel des Menüs „Dateien“. Dann folgt die erste Datei (FN$(1)). Mit dem FINDNEXT$-Befehl laden wir alle weiteren Dateinamen in einer FOR-NEXT-Schleife. Wenn ein Dateiname leer ist, so gibt es keine weitere Datei und die Liste ist vollständig (I wird um eins verringert und ist somit die Anzahl an Dateien), das Menu kann aufgerufen werden (Zeilennummer 20).

MC=MENU(2,25,5,0,0,-I-1,FN$(0))

Zuerst stehen die Koordinaten der Menüposition (Zeile 2, Spalte 25).
Die 5 steht für die tiefe des Menüs (wieviele Dateinamen im Fenster sichtbar sind).
Die beiden nächsten Werte bestimmen die Position des Cursors innerhalb der Liste, zuerst die Nummer der Datei die in der ersten Zeile stehen soll, dann die Nummer der Datei auf die der Cursor zeigen soll. -I-1 ist die Anzahl der Menüoptionen, sie ist negativ um anzuzeigen, dass die nächste Angabe eine Feldvariable ist.
Wenn der MENU-Befehl eine -1 zurückgibt, dann hat der Benutzer die Escape-Taste gedrückt.
Wenn die ausgewählte Datei im obersten Bereich des Menüs (unter den ersten sichtbaren Dateinamen ohne zu scrollen) ist so ist der zurückgegebene Wert kleiner als 256 und kann direkt als Ordinalzahl in der Liste verwendet werden. Wenn eine Datei erst nach Scrollen erreicht wurde, so ist der Wert größer als 255. Die Ordinalzahl in der Liste ist dann der Modulo des Werts (MC=MC%256).
Am Ende des Programms wird der Name der ausgewählten Datei angezeigt.

10 REM Dateiauswahl als Menü
DIM FN$(50)                      :REM maximal 50 Dateien
FN$(0)="Dateien"	            :REM Menütitel
FN$(1)=FINDFILE$("*.*")          :REM erste Datei
FOR I=2 TO 50		            :REM Schleife für weitere Dateien
 FN$(I)=FINDNEXT$	            :REM nächste Datei
 IF FN$(I)="" THEN I=I-1:GOTO 20 :REM letzte DATEI?
NEXT I
20 REM END OF LIST	            :REM Liste komplett
MC=MENU(2,25,5,0,0,-I-1,FN$(0))  :REM Menüaufruf
IF MC=-1 THEN END		     :REM Escape gedrückt?
IF MC>255 THEN MC=(MC%256)	     :REM Ordinalzahl ermitteln
?FN$(MC+1)                       :REM Name zeigen
END