Trick 53: Qual der Verzeichniswahl
ExtraTrick: Mehrere Dateitypen gleichzeitig zur Wahl

Aufgabe: Der Nutzer soll ein Verzeichnis auswählen dürfen

Warum: Es kann immer mal vorkommen, daß bestimmte Dinge
       wohlsortiert in bestimmten, parallelen Ordnern liegen. Wenn es
       dann an die Nutzung der Dinge geht, ist mitunter erst einmal
       der richtige Ordner auszuwählen.

Lösung:
       Mit fnam ... geht das nicht direkt, aber indirekt!
       In xfnam.rtf steht es auch, aber ...

Sagen wir, es hängen mehrere Unterordner an  c:\allegro, und der
Nutzer soll einen davon wählen. Das geht so:

fnam |.c:/allegro/*
ins #uvz
var "Wahl=" #uvz
  zur Wahl anbieten
select
if cancel end
  gewaehlten Namen in #uvZ
ins #uvZ
var "Ihre Wahl: " #uvZ
mes

In #uvZ steht dann nur der Name des Unterordners, den man also
mit c:\allegro\ zusammensetzen muß zum vollständigen Pfadnamen,
z.B. mit   var "c:\\allegro\\" #uvZ

Der Trick steckt in der ersten Zeile, also in dieser Syntax:

fnam |.<verzeichnisname>/*

Hier kann man somit statt  c:/allegro  jeden beliebigen Ordnernamen
einsetzen, mit / oder \\ als Trennzeichen zwischen den Stufen.
Statt nur * könnte da z.B. a* stehen, dann würden nur die mit
a beginnenden Ordnernamen angeboten.

Der Befehl  fnam |.  schreibt die Namen der Unterordner in die iV,
bietet sie also nicht selber zur Wahl an! Das tut erst der Befehl
select, der sich mit der korrekten Syntax anschließt.

Statt als select-Liste kann man auch die Namen als ViewListe anbieten.
Beide Rezepte sind als Beispiele 3 und 4 in der Dokumentation zum
Befehl  fnam  genau angegeben! Trick 53 ist also streng genommen
überflüssig - aber hatten Sie's schon gewußt?

Damit sich's aber trotzdem lohnt, hier noch ein


ExtraTrick:
Dem Nutzer sollen alle Dateien vom Typ .flx und .inc gemeinsam
zur Wahl angeboten werden! Das geht so:

fnam FLEXdateien|*.flx;*.inc

Ergo: Hinter dem | kann nicht nur einer, sondern mehrere Dateitypen
stehen, getrennt durch ;. Das ist nicht neu, das war schon lange so,
es stand bloß noch nirgends.
Wenn es ein bestimmtes Verzeichnis sein soll, z.B. c:\allegro\flex,
dann muß es so aussehen:

fnam FLEXdateien|c:\\allegro\\flex\\*.flx;*.inc

Hier allerdings geht / statt \\ nicht, sorry. Es liegt einfach daran,
daß nicht alle internen Windows-Funktionen in dem Punkt einheitlich
arbeiten.