Die erweiterten Dateiauswahlfunktionen im AES
=============================================

Formatierung:	Tabulatorbreite 5

Andreas Kromke
20.11.95


Wie erkenne ich, ob die Funktionen vorhanden sind ?
===================================================

Unterfunktion 7 von appl_getinfo() liefert in Bit 3 von
ap_gout1 zurck, ob die fslx-Funktionen vorhanden sind.
Deklaration und Aufruf: siehe DOC_WDLG.TXT

Bits in ap_gout1 im berblick:
Bit 0:         wdlg_xx()-Funktionen sind vorhanden (1)
Bit 1:         lbox_xx()-Funktionen sind vorhanden (1)
Bit 2:         fnts_xx()-Funktionen sind vorhanden (1)
Bit 3:		fslx_xx()-Funktionen sind vorhanden (1)


Bedienung der Dateiauswahl
--------------------------

Tastaturcodes:

[Return]		Keine Datei ausgewhlt:
				Gibt den Text im Editfeld an das Programm zurck.
			Datei ausgewhlt:
				Gibt ausgewhlte Datei zurck.
			Ordner ausgewhlt:
				ffnet den Ordner.
[Alt-A..Z]	ffnet das jeweilige Laufwerk im aktuellen Verzeichnis.
[Ctrl-Esc]	Verzeichnis neu einlesen
[Ctrl-H]
	oder
[Ctrl-BS]		Geht eine Verzeichnisebene zurck.
[Ctrl-D]		Deselektiert alle Eintrge. Damit kann man erzwingen, da
			der eingegebene Dateiname statt der selektierten Datei
			zurckgegeben wird.
[Cursor h/r]	Auswahl verschieben
[Ctrl-Cursor]	scrollen
[Sh-Cursor]	Auswahl seitenweise verschieben
[Sh-^-Cursor]	seitenweise scrollen
[Home]		selektiert oberstes Element
[Sh-Home]		selektiert unterstes Element
				

Buttons:

Doppelklick auf das "parent"-Feld geht zurck aufs Wurzelverzeichnis.
Klick auf eine Zeile selektiert das Objekt. Fr den Fall, da mehrere
Dateien auswhlbar sind (ist durch den Systemaufruf beeinflubar), werden
diese durch Shift-Klick ausgewhlt.
In jedem Fall kann man eine Datei mit Shift-Klick deselektieren.


Dateiauswahlfenster ffnen
--------------------------

Prototyp:
		void * fslx_open(
			char *title,
			WORD x, WORD y,
			WORD	*whdl,
			char *path, WORD pathlen,
			char *fname, WORD fnamelen,
			char *patterns,
			WORD	cdecl (*filter)(char *path, char *name, XATTR *xa),
			char *paths,
			WORD sort_mode,
			WORD flags
			);

Aufruf:
		contrl[0] = 190		Funktionsnummer
		contrl[1] = 6			Eintrge in intin
		contrl[2] = 1			Eintrge in intout
		contrl[3] = 6			Eintrge in addrin
		contrl[4] = 1			Eintrge in addrout

		intin[0] = x
		intin[1] = y			Bildschirmkoordinaten der linken
							oberen Ecke des Fensters.
							Bei x=y=-1 wird das Fenster zentriert.
		intin[2] = pathlen		Lnge des Pfadpuffers, d.h. maximale
							Pfadlnge + 1 (fr EOS)
		intin[3] = fnamelen		Lnge des Dateinamenpuffers, d.h. maximale
							Lnge des Dateinamens + 1 (fr EOS)
		intin[4] = sort_mode	Sortiermodus fr die Anzeige. Die Modi sind

								#define SORTBYNAME	0
								#define SORTBYDATE	1
								#define SORTBYSIZE	2
								#define SORTBYTYPE	3
								#define SORTBYNONE	4

							SORTBYNONE bedeutet dabei die physikalische
							Reihenfolge.
		intin[5] = flags		verschiedene Einstellungen:

								#define DOSMODE	1
								#define NFOLLOWSLKS	2
								#define GETMULTI	8

							DOSMODE ist der Kompatidingsmodus, der
							auch von fsel_(ex)input verwendet wird
							und Dateinamen grundstzlich im Format
							8+3 liefert. Dazu werden alle Verzeichnisse
							per Dopendir(DOPEN_COMPAT) aufgerufen.

							Ist NFOLLOWSLKS gesetzt, werden
							symbolische Links nicht verfolgt, d.h.
							Datum und Uhrzeit usw. sowie die XATTR-
							Struktur, die <filter> bergeben wird,
							gehren zum Link selbst.

							Ist GETMULTI gesetzt, knnen mehrere
							Dateien auf einmal ausgewhlt und bergeben
							werden. Dazu wird fslx_getnxtfile()
							verwendet, wenn fslx_evnt() bzw. fslx_do()
							im Parameter <nfiles> signalisieren, da
							noch weitere Dateien selektiert sind.

		addrin[0] = title		Fenstertitel der Dateiauswahl, darf NULL
							sein
		addrin[1] = path		vollstndiger Pfad, beginnt mit Laufwerk
							und endet mit '\'
		addrin[2] = fname		Puffer fr den Dateinamen
		addrin[3] = patterns	Dateinamenmuster wie "*.TXT" oder
							"*.PRG,*.APP". Die alternativ anwhlbaren
							Muster sind durch EOS getrennt und durch
							EOS,EOS abgeschlossen.
		addrin[4] = filter		Darf NULL sein. Die Filterfunktion wird
							vor dem Mustervergleich aufgerufen. Gibt
							sie 0 zurck, ist die Datei ungltig, wird
							1 zurckgegeben, wird der Dateiname
							angezeigt.
		addrin[5] = paths		Pfad-"History" wie "C:\\BIN\\" usw.
							Die alternativ anwhlbaren Pfade sind
							durch EOS getrennt und durch EOS,EOS
							abgeschlossen.
		intout[0] = whdl		Fensterhandle nach erfolgreichem ffnen
		addrout[0] = dialog		Liefert einen Deskriptor fr die weiteren
							Aktionen bzw. NULL, wenn ein Fehler
							aufgetreten ist (zuwenig Speicher oder
							kein Fensterhandle mehr frei).

Der entsprechende Deskriptor wird angelegt und das Dateiauswahlfenster
geffnet.


Dateiauswahlfenster oder Dateiauswahldialog schlieen
-----------------------------------------------------

Prototyp:
		WORD fslx_close(
			void *fsd
			);

Aufruf:
		contrl[0] = 191		Funktionsnummer
		contrl[1] = 0			Eintrge in intin
		contrl[2] = 1			Eintrge in intout
		contrl[3] = 1			Eintrge in addrin
		contrl[4] = 0			Eintrge in addrout

		intout[0] = err		0 bei Fehler, sonst 1
		addrin[0] = fsd		Deskriptor, der beim erfolgreichen ffnen
							eines Dateiauwahlfensters bergeben wurde.

Der entsprechende Deskriptor wird freigegeben und das Dateiauswahlfenster
bzw. der -dialog geschlossen.


Dateiauswahlfenster bedienen
----------------------------

Prototyp:
		WORD fslx_evnt(
			void *fsd,
			EVNT *events,
			char *path,
			char *fname,
			WORD *button,
			WORD *nfiles,
			WORD *sort_mode,
			char **pattern
			);

Aufruf:
		contrl[0] = 193		Funktionsnummer
		contrl[1] = 0			Eintrge in intin
		contrl[2] = 4			Eintrge in intout
		contrl[3] = 4			Eintrge in addrin
		contrl[4] = 1			Eintrge in addrout

		addrin[0] = fsd		Deskriptor, der beim erfolgreichen ffnen
							eines Dateiauwahlfensters bergeben wurde.
		addrin[1] = events		EVENT-Struktur wie bei wdlg_evnt und
							fnts_evnt. Die Events werden vom Dialog
							verarbeitet, wenn sie fr das zugehrige
							Fenster bestimmt sind.
		addrin[2] = path		Zeiger auf den ausgewhlten Pfad, wenn
							der Dialog erfolgreich, d.h. per Klick
							auf den OK-Button oder per Doppelklick
							auf eine Datei beendet wurde.
		addrin[3] = fname		Zeiger auf den ausgewhlten Pfad, wenn
							der Dialog erfolgreich, d.h. per Klick
							auf den OK-Button oder per Doppelklick
							auf eine Datei beendet wurde.
		intout[0]				Ist 0, wenn der Dialog beendet werden
							soll, sonst 1
		intout[1] = button
		intout[2] = nfiles
		intout[3] = sort_mode
		addrout[0] = pattern

Events, d.h. Mausklicks, Nachrichten und Tasten, werden an das
Dateiauswahlfenster bermittelt und von diesem ggf. verarbeitet. Wenn
ein Ereignis verarbeitet wurde, wird das entsprechende Bit in der
EVENT- Struktur gelscht.


Dateiauswahldialog
------------------

Prototy:
	void * fslx_do(
			char *title,
			char *path, WORD pathlen,
			char *fname, WORD fnamelen,
			char *patterns,
			WORD	cdecl (*filter)(char *path, char *name, XATTR *xa),
			char *paths,
			WORD *sort_mode,
			WORD flags,
			WORD *button,
			WORD *nfiles,
			char **pattern );

Aufruf:
		contrl[0] = 194		Funktionsnummer
		contrl[1] = 4			Eintrge in intin
		contrl[2] = 4			Eintrge in intout
		contrl[3] = 6			Eintrge in addrin
		contrl[4] = 2			Eintrge in addrout

		addrin[0] = title
		addrin[1] = path
		addrin[2] = fname
		addrin[3] = patterns
		addrin[4] = filter
		addrin[5] = paths

		intin[0] = pathlen
		intin[1] = fnamelen
		intin[2] = sort_mode
		intin[3] = flags

		intout[0] = 1
		intout[1] = button
		intout[2] = nfiles
		intout[3] = sort_mode

		addrout[0] = fsd;
		addrout[1] = pattern

Diese Funktion ist eine Kombination aus fslx_open() und fslx_evnt(), benutzt
aber eine Dialogbox ohne Fenster.


Weitere ausgewhlte Dateien abfragen
------------------------------------

Prototyp:
	WORD fslx_getnxtfile(
			void *fsd,
			char *fname
			);

Aufruf:
		contrl[0] = 192		Funktionsnummer
		contrl[1] = 0			Eintrge in intin
		contrl[2] = 1			Eintrge in intout
		contrl[3] = 2			Eintrge in addrin
		contrl[4] = 0			Eintrge in addrout

		addrin[0] = fsd		Deskriptor, der beim erfolgreichen ffnen
							eines Dateiauwahlfensters bergeben wurde.
		addrin[1] = fname
		intout[0] = result		0, wenn keine weitere Datei ausgewhlt,
							<fname> ist unverndert.
							1, wenn ein Dateiname nach <fname> kopiert
							wurde.

Wurde das Flag GETMULTI bei fslx_do() oder fslx_open() bergeben, wird durch
fslx_do() bzw. fslx_evnt() im Parameter <nfiles> die Anzahl der Dateien
zurckgegeben, die zustzlich zu dem in <fname> zurckgegebenen noch selektiert
sind. Man kann die weiteren Dateien mit fslx_getnxtfile() abrufen. Erst
danach darf man fslx_close() aufrufen.


Systemglobale Einstellungen
---------------------------

Prototyp:
	WORD fslx_set_flags(
			WORD flags,
			WORD *oldval
			);

Aufruf:
		contrl[0] = 195		Funktionsnummer
		contrl[1] = 2			Eintrge in intin
		contrl[2] = 2			Eintrge in intout
		contrl[3] = 0			Eintrge in addrin
		contrl[4] = 0			Eintrge in addrout

		intin[0]	= 0
		intin[1]	= flags		Verschiedene Flags, z.Zt. nur:

								#define SHOW8P3	1

							SHOW8P3 gilt nur fr die Darstellung von
							Verzeichnissen auf DOS-Laufwerken. Sie
							entspricht dem Schalter "TOS-Dateien als
							8+3" in Magxdesk.

		intout[0] = result		0, wenn Fehler
							1, wenn OK
		intout[1] = oldval		vorheriger Wert

Diese Funktion wird (z.B. von MAGXDESK) verwendet, um den Schalter
"TOS-Dateien als 8+3" auch fr die Dateiauswahl zu setzen.
