Home AESAES ApplikationsfunktionenApplikationsfunktionen DruckdialogeDruckdialoge

8.4 Dateiauswahl

Die Funktionen dieser Bibliothek stellen eine Dateiauswahl zur Verfügung, mit deren Hilfe sich Dateien laden bzw. abspeichern lassen. Für diesen Zweck sind die folgenden Routinen vorhanden:

fsel_boxinput Dateinamen per File-Selektor auswählen (Boxkite)
fsel_exinput Dateinamen per File-Selektor auswählen
fsel_input Dateinamen per File-Selektor auswählen
x_fsel_input Dateinamen per File-Selektor auswählen (Geneva)

Hinweis: Leider werden alternative Dateisysteme (Stichwort: lange Dateinamen) nicht unterstützt; ab MagiC 4 wird dies jedoch von den Funktionen der FSLX-Library übernommen.

Querverweis: Fileselektoren   Style-Guidelines

8.4.1 fsel_boxinput

Name: »File Selection Extended Input« - selektiert Dateinamen.
 
AES-Nummer: 91
 
Deklaration: int16_t fsel_boxinput ( int16_t *global, int8_t *fs_einpath, int8_t *fs_einsel, int16_t *fs_eexbutton, int8_t *elabel, FSEL_CALLBACK callback );
 
Beschreibung: Die Funktion stellt eine Dateiauswahlbox zur Verfügung, der auch ein Titel-String übergeben werden kann. Es handelt sich hierbei um eine erweiterte Version der Dateiauswahl BoxKite.
 
Der Funktion werden folgende Parameter übergeben:
 
Parameter Bedeutung
   
fs_einpath Name des Default-Zugriffspfades (absolut) mit angehängter Suchmaske. Enthält nach dem Aufruf den neuen Pfadnamen.
fs_einsel Name der Default-Datei. Enthält nach dem Aufruf den neuen Dateinamen.
fs_eexbutton
0 = es wurde Abbruch gewählt
1 = es wurde Ok gewählt
fs_elabel Titelzeile
callback Adresse einer Funktion, welche von BoxKite aufgerufen wird falls eine GEM-Message an die Hauptapplikation übergeben werden soll.
Es handelt sich dabei nicht nur um die Message WM_REDRAW. Sondern z.B. auch um WM_MOVED, da es immerhin Betriebssystemversionen gibt, die das Verschieben von hintenliegenden Fenstern ermöglichen. Messages, die implizit neue Fenster öffnen oder vorhandene nach oben bringen, sollten dagegen ignoriert oder aufgehoben und erst nach der Rückkehr aus dem Fileselector behandelt werden. WM_TOPPED-Messages werden nicht an den Message-Callback durchgereicht.

Hinweis: BoxKite stellt ab Version 2.00 auch die Funktionen der MagiC 4 Dateiauswahl zur Verfügung. Das Vorhandensein dieser Funktionen kann per appl_getinfo (Opcode 7) festgestellt werden.
 
Ergebnis: Der Rückgabewert der Funktion (0 = Fehler) sollte unbedingt beachtet werden, da z.B. bei Speichermangel kein Fileselektor mehr benutzt werden kann.
 
Verfügbar: Wenn der BoxKite ab Version 1.71 installiert ist. Dazu kann der Cookie HBFS auf des vorhandensein geprüft werden. Allerdings ist dieser auch schon vor der Version 1.71 vorhanden.
 
Gruppe: Dateiauswahl
 
Querverweis: Binding   XFS-Konzept in MagiC
 

8.4.1.1 Bindings für fsel_boxinput

C:
 
/* Prototyp des Message-Handlers. */
typedef void cdecl (* FSEL_CALLBACK)(int16_t *msg);
 
int16_t fsel_boxinput ( int16_t *global, int8_t *fs_einpath, int8_t *fs_einsel, int16_t *fs_eexbutton, int8_t *elabel, FSEL_CALLBACK callback );
 
Umsetzung:
 
int16_t fsel_boxinput ( int16_t *global, int8_t *fs_einpath,
                        int8_t *fs_einsel,
                        int16_t *fs_eexbutton,
                        int8_t *elabel,
                        FSEL_CALLBACK callback )
{
  void *aespb[6], *addrin[6], *addrout[6];
  int contrl[5], intin[16], intout[7];

  aespb[0] = contrl;
  aespb[1] = global;
  aespb[2] = intin;
  aespb[3] = intout;
  aespb[4] = addrin;
  aespb[5] = addrout;

  contrl[0] = 91;
  contrl[1] = 0;
  contrl[2] = 2;
  contrl[3] = 4;
  contrl[4] = 0;

   addr_in[0] = fs_einpath;
   addr_in[1] = fs_einsel;
   addr_in[2] = elabel;
   addr_in[3] = callback;

  _crystal((AESPB *)aespb);

   *fs_eexbutton = int_out[1];
   return ( int_out[0] );
}
GEM-Arrays:
 

Adresse Feldelement Belegung
control control[0] 91 # Opcode der Funktion
control+2 control[1] 0 # Einträge in int_in
control+4 control[2] 2 # Einträge in int_out
control+6 control[3] 4 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
addr_in addr_in[0] fs_einpath
addr_in+4 addr_in[1] fs_einsel
addr_in+8 addr_in[2] elabel
addr_in+12 addr_in[3] callback
int_out int_out[0] Return-Wert
int_out+2 int_out[1] fs_eexbutton

Achtung BoxKite benötigt Informationen aus dem 'global'-Array der Hauptapplikation. Die mitgelieferten GEM-Bindings von Entwicklungssystemen übergeben dieses normalerweise automatisch.

8.4.2 fsel_exinput

Name: »File Selection Extended Input« - selektiert Dateinamen.
 
AES-Nummer: 91
 
Deklaration: int16_t fsel_exinput ( int8_t *fs_einpath, int8_t *fs_einsel, int16_t *fs_eexbutton, int8_t *elabel );
 
Beschreibung: Die Funktion stellt eine Dateiauswahlbox zur Verfügung, der auch ein Titel-String übergeben werden kann.
 


Der Funktion werden folgende Parameter übergeben:
 
Parameter Bedeutung
   
fs_einpath Name des Default-Zugriffspfades (absolut) mit angehängter Suchmaske. Enthält nach dem Aufruf den neuen Pfadnamen.
fs_einsel Name der Default-Datei. Enthält nach dem Aufruf den neuen Dateinamen.
fs_eexbutton
0 = es wurde Abbruch gewählt
1 = es wurde Ok gewählt
fs_elabel Titelzeile

Hinweis: Die Funktion sollte mit wind_update (BEG_MCTRL bzw. END_MCTRL) geschachtelt werden, um zu verhindern, daß Doppelklicks an darunter liegende Fenster weitergereicht werden.
 
Ergebnis: Der Rückgabewert der Funktion (0 = Fehler) sollte unbedingt beachtet werden, da z.B. bei Speichermangel kein Fileselektor mehr benutzt werden kann.
 
Verfügbar: Diese Funktion ist erst ab AES 1.4 verfügbar.
 
This is also present in FreeGEM. To check for this feature, use appl_init and check that xbuf.arch is nonzero.
 
Gruppe: Dateiauswahl
 
Querverweis: Binding   fsel_input   XFS-Konzept in MagiC
 

8.4.2.1 Bindings für fsel_exinput

C: int16_t fsel_exinput ( int8_t *fs_einpath, int8_t *fs_einsel, int16_t *fs_eexbutton, int8_t *elabel );
 
Umsetzung:
 
int16_t fsel_exinput (int8_t *fs_einpath, int8_t *fs_einsel,
                      int16_t *fs_eexbutton, int8_t *elabel)
{
   addr_in[0] = fs_einpath;
   addr_in[1] = fs_einsel;
   addr_in[2] = elabel;

   crys_if (91);

   *fs_eexbutton = int_out[1];
   return ( int_out[0] );
}
GEM-Arrays:
 

Adresse Feldelement Belegung
control control[0] 91 # Opcode der Funktion
control+2 control[1] 0 # Einträge in int_in
control+4 control[2] 2 # Einträge in int_out
control+6 control[3] 3 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
addr_in addr_in[0] fs_einpath
addr_in+4 addr_in[1] fs_einsel
addr_in+8 addr_in[2] elabel
int_out int_out[0] Return-Wert
int_out+2 int_out[1] fs_eexbutton

8.4.3 fsel_input

Name: »File Selection Input« - selektiert Dateinamen.
 
AES-Nummer: 90
 
Deklaration: int16_t fsel_input ( int8_t *fs_iinpath, int8_t *fs_iinsel, int16_t *fs_iexbutton );
 
Beschreibung: Die Funktion stellt eine Dateiauswahlbox zur Verfügung. Es gilt:
 
Parameter Bedeutung
   
fs_iinpath Name des Default-Zugriffspfades (absolut) mit angehängter Suchmaske. Enthält nach dem Aufruf den neuen Pfadnamen.
fs_iinsel Name der Default-Datei. Enthält nach dem Aufruf den neuen Dateinamen.
fs_iexbutton
0 = es wurde Abbruch gewählt
1 = es wurde Ok gewählt

Hinweis: Die Funktion sollte mit wind_update (BEG_MCTRL bzw. END_MCTRL) geschachtelt werden, um zu verhindern, daß Doppelklicks an darunter liegende Fenster weitergereicht werden.
 
In AES-Versionen kleiner als 1.4 können übrigens nur maximal 100 Dateien angezeigt werden; dort wird dann mit einem 'Ping'-Geräusch gewarnt, wenn nicht alle Dateien angezeigt werden konnten.
 
Ergebnis: Der Rückgabewert der Funktion (0 = Fehler) sollte unbedingt beachtet werden, da z.B. bei Speichermangel kein Fileselektor mehr benutzt werden kann.
 
Verfügbar: All AES versions, not present in ViewMAX/3, and will crash ViewMAX/2.
 
Gruppe: Dateiauswahl
 
Querverweis: Binding   fsel_exinput   XFS-Konzept in MagiC
 

8.4.3.1 Bindings für fsel_input

C: int16_t fsel_input ( int8_t *fs_iinpath, int8_t *fs_iinsel, int16_t *fs_iexbutton );
 
Umsetzung:
 
int16_t fsel_input (int8_t *fs_iinpath, int8_t *fs_iinsel,
                    int16_t *fs_iexbutton)
{
   addr_in[0] = fs_iinpath;
   addr_in[1] = fs_iinsel;

   crys_if (90);

   *fs_iexbutton = int_out[1];
   return ( int_out[0] );
}
GEM-Arrays:
 

Adresse Feldelement Belegung
control control[0] 90 # Opcode der Funktion
control+2 control[1] 0 # Einträge in int_in
control+4 control[2] 2 # Einträge in int_out
control+6 control[3] 2 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
addr_in addr_in[0] fs_iinpath
addr_in+4 addr_in[1] fs_iinsel
int_out int_out[0] Return-Wert
int_out+2 int_out[1] fs_iexbutton

8.4.4 x_fsel_input

Name: »Extended file selector«
 
AES-Nummer: 28960
 
Deklaration: int16_t x_fsel_input( int8_t *inpath, int16_t pathlen, int8_t *files, int16_t sels, int16_t *exbutton, int8_t *label );
 
Beschreibung:
 
Parameter Bedeutung
   
inpath Pointer to the path (with wildcards) to start selection at
pathlen Maximum length (incl. null) of inpath
files Pointer to the string containing the default filename to be displayed. Also, holds up to "sels" filenames (each null-terminated) upon return.
sels Maximum number of items that can be selected upon return from the call
exbutton Exit Button:
0 = es wurde Abbruch gewählt
1 = es wurde Ok gewählt
label A label of up to 30 characters, which will appear at the top of the item selector.

This function is similar to fsel_exinput, but has several extensions:
 
  • The inpath parameter can contain not only the traditional * and ? wildcards, but can also contain regular expressions using [] and {}:
    • Any characters contained between square brackets ("[]") define a list of acceptable characters to substitute into that one position. This can either be individual characters, like "[ABCD]", a range separated by a hyphen like "[A-D]", or a mix of the two, like "[A-DXYZ]".
    • A list of words contained within curly brackets ("{}") defines one or more acceptable values. The values must be separated by commas.
  • The pathlen parameter defines the maximum length of inpath. If the user adds too many extensions or the path otherwise grows too long, an error alert will appear.
  • Upon successful return, files can contain up to sels filenames. Each name in the list is followed by a NULL character (ASCII 0) and the last filename is followed by a final NULL. The exception to this rule is when sels is one, in which case the final NULL is not used; For all other cases, the area pointed to by files must be at least (13 * sels)+1 bytes long.
Ergebnis: 0 = Ein Fehler ist aufgetreten.
 
Verfügbar: Die Funktion steht nur unter Geneva zur Verfügung.
 
Gruppe: Dateiauswahl
 
Querverweis: Binding
 

8.4.4.1 Bindings für x_fsel_input

C: int16_t x_fsel_input( int8_t *inpath, int16_t pathlen, int8_t *files, int16_t sels, int16_t *exbutton, int8_t *label );
 
Umsetzung:
 
int16_t x_fsel_input( int8_t *inpath, int16_t pathlen, int8_t
*files, int16_t sels, int16_t *exbutton, int8_t *label )
{
   int_in[0] = pathlen;
   int_in[1] = sels;

   addr_in[0] = inpath;
   addr_in[1] = files;
   addr_in[2] = label;

   crys_if(28960);

   *exbutton = int_out[1];

   return ( int_out[0] );
}
GEM-Arrays:
 

Adresse Feldelement Belegung
control control[0] 28960 # Opcode der Funktion
control+2 control[1] 2 # Einträge in int_in
control+4 control[2] 2 # Einträge in int_out
control+6 control[3] 3 # Einträge in addr_in
control+8 control[4] 0 # Einträge in addr_out
int_in int_in[0] pathlen
int_in+2 int_in[1] sels
addr_in addr_in[0] inpath
addr_in+4 addr_in[1] files
addr_in+8 addr_in[2] label
int_out int_out[0] Return-Wert
int_out+2 int_out[1] exbutton

Home AESAES ApplikationsfunktionenApplikationsfunktionen DruckdialogeDruckdialoge