include "/var/www/banner.php"; ?>



8.10 Extended file-selectors
The following functions were introduced with MagiC 4, and permit
management of the file-selector:
Note: The existence of these functions can be checked with
a call of appl_getinfo (opcode 7).
The main advantage of using these routines lies in the ability of
the functions specified here to work also with alternative
file-systems (catchword: long filenames).
See also:
File-selector as a dialog File-selector in a window Operation of file-selectors
8.10.1 fslx_close
| Name: |
»File selectionX close« - Close the file-selector and release
memory. |
| Opcode: |
191 |
| Syntax: |
int16_t fslx_close ( void *fsd ); |
| Description: |
The call fslx_close closes the file-selector, and releases the
specified descriptor. The following apply:
| Parameter |
Meaning |
| |
|
| fsd |
Descriptor that was passed at the successful opening of a
file-selector window
|
|
| Return value: |
The function returns the value 1 if successful, else the value
0. |
| Availability: |
The presence of this call should be checked for using appl_getinfo
(opcode 7). |
| Group: |
Extended file-selectors |
| See also: |
Binding fslx_open
|
8.10.1.1 Bindings for fslx_close
8.10.2 fslx_do
| Name: |
»File selectionX do« - Faster call-up of the file-selector. |
| Opcode: |
194 |
| Syntax: |
void *fslx_do ( int8_t *title, int8_t *path, int16_t pathlen,
int8_t *fname, int16_t fnamelen, int8_t *patterns, XFSL_FILTER
*filter, int8_t *paths, int16_t *sort_mode, int16_t flags, int16_t
*button, int16_t *nfiles, int8_t **pattern ); |
| Description: |
The call fslx_do displays a file-selector box on the screen,
and takes over its handling. The following apply:
| Parameter |
Meaning |
| |
|
| title |
Title of the file-selector, or NULL |
| path |
Complete path, which starts with the drive letter, and ends
with '\' |
| pathlen |
Length of the path-receiving buffer |
| fname |
Buffer for the filename |
| fnamelen |
Length of the filename-receiving buffer |
| patterns |
Filename masks such as '*.TXT', '*.PRG' or '*.IMG'; these
alternative selectable masks are separated by EOS and terminated by
EOS, EOS |
| filter |
Filter function which is called before the mask
comparison (or NULL); if this returns the value 0 the file is invalid,
while a value of 1 will display the filename |
| paths |
Path history; the alternative selectable paths are separated by
EOS and terminated by EOS, EOS |
| sort_mode |
Sort-mode for the display:
| 0 |
= |
By name |
| 1 |
= |
By date |
| 2 |
= |
By size |
| 3 |
= |
By type |
| 4 |
= |
Unsorted (physical order) |
|
| flags |
Various settings:
| 1 = |
DOSMODE - This is the compatibility mode, also used by
fsel_(ex)input, and returns filenames basically in the 8+3 format; for
this all subdirectories are called with Dopendir (name, 1) |
| 2 = |
Do not follow symbolic links; so in that case the date,
time as well as the XATTR structure that will pass filter will
belong to the link itself |
| 8 = |
Multiple selection - In this case several files can be selected
and passed at a time
|
|
| button |
Index of the selected button:
| 0 |
= |
'Cancel' button |
| 1 |
= |
'OK' button |
|
| nfiles |
Number of selected files |
| pattern |
Selected file mask, such as '*.TXT'
|
Note: The function is a combination of fslx_open and
fslx_evnt, but uses a non-windowed dialog box. |
| Return value: |
The function returns a pointer to a descriptor, which is to be
specified for the other routines. |
| Availability: |
The presence of this call should be checked for using appl_getinfo
(opcode 7). |
| Group: |
Extended file-selectors |
| See also: |
Binding fslx_open fslx_evnt
|
8.10.2.1 Bindings for fslx_do
| C: |
void *fslx_do ( int8_t *title, int8_t *path, int16_t pathlen,
int8_t *fname, int16_t fnamelen, int8_t *patterns, XFSL_FILTER
*filter, int8_t *paths, int16_t *sort_mode, int16_t flags, int16_t
*button, int16_t *nfiles, int8_t **pattern ); |
| Binding: |
void *fslx_do ( int8_t *title, int8_t *path, int16_t pathlen,
int8_t *fname, int16_t fnamelen, int8_t *patterns,
XFSL_FILTER *filter, int8_t *paths,
int16_t *sort_mode, int16_t flags, int16_t *button,
int16_t *nfiles, int8_t **pattern )
{
addr_in[0] = title;
addr_in[1] = path;
addr_in[2] = fname;
addr_in[3] = patterns;
addr_in[4] = filter;
addr_in[5] = paths;
int_in[0] = pathlen;
int_in[1] = fnamelen;
int_in[2] = *sort_mode;
int_in[3] = flags;
crys_if (194);
*button = int_out[1];
*nfiles = int_out[2];
*sort_mode = int_out[3];
*pattern = addr_out[1];
return ( (void *) addr_out[0] );
}
|
| GEM-Arrays: |
|
8.10.3 fslx_evnt
| Name: |
»File selectionX event« - Takes over the handling of the
file-selector. |
| Opcode: |
193 |
| Syntax: |
int16_t fslx_evnt ( void *fsd, EVNT *events, int8_t *path,
int8_t *fname, int16_t *button, int16_t *nfiles, int16_t *sort_mode,
int8_t **pattern ); |
| Description: |
The call fslx_evnt takes over the handling of the file-selector
displayed on the screen. The following apply:
| Parameter |
Meaning |
| |
|
| fsd |
Descriptor that was passed at a successful opening of a
file-selector window |
| events |
EVNT-structure; the events are serviced by the dialog if they
are intended for the associated window |
| path |
Pointer to the selected path |
| fname |
Pointer to the selected filename |
| button |
Index of the selected button
| 0 |
= |
'Cancel' button |
| 1 |
= |
'OK' button |
|
| nfiles |
Number of selected files |
| sort_mode |
Selected sort-mode |
| pattern |
Seleted file pattern, such as '*.TXT'
|
Note: Events, i.e. mouse clicks, messages and keypresses
are passed on to the file-selector window and serviced by it if
appropriate. When an event has been serviced then the corresponding
bit in the EVENT structure will be cleared. |
| Return value: |
The function returns the value 0 if the dialog is to be
terminated, else the value 1. |
| Availability: |
The presence of this call should be checked for using appl_getinfo
(opcode 7). |
| Group: |
Extended file-selectors |
| See also: |
Binding
|
8.10.3.1 Bindings for fslx_evnt
| C: |
int16_t fslx_evnt ( void *fsd, EVNT *events, int8_t *path,
int8_t *fname, int16_t *button, int16_t *nfiles, int16_t *sort_mode,
int8_t **pattern ); |
| Binding: |
int16_t fslx_evnt ( void *fsd, EVNT *events, int8_t *path,
int8_t *fname, int16_t *button, int16_t *nfiles,
int16_t *sort_mode, int8_t **pattern )
{
addr_in[0] = fsd;
addr_in[1] = events;
addr_in[2] = path;
addr_in[3] = fname;
crys_if (193);
*button = int_out[1];
*nfiles = int_out[2];
*sort_mode = int_out[3];
*pattern = addr_out[0];
return ( int_out[0] );
}
|
| GEM-Arrays: |
|
8.10.4 fslx_getnxtfile
| Name: |
»File selectionX get next file« - Obtains all further selected
entries in the file-selector. |
| Opcode: |
192 |
| Syntax: |
int16_t fslx_getnxtfile ( void *fsd, int8_t *fname ); |
| Description: |
The call fslx_getnxtfile otains all the further, selected
entries in the file-selector. The following apply:
| Parameter |
Meaning |
| |
|
| fsd |
Descriptor that was passed at a successful opening of a
file-selector window |
| fname |
Name of the obtained entry
|
Note: If the flag GETMULTI was passed with fslx_do or
fslx_open, then fslx_do or fslx_evnt will return in the parameter
nfiles the number of files that are still selected in addition
to the one in fname. One can call these further files with
fslx_getnxtfile. Only after this may one call fslx_close. |
| Return value: |
The function returns the value 0 if no further file is
selected, else the value 1 if one filename was still to be copied. |
| Availability: |
The presence of this call should be checked for using appl_getinfo
(opcode 7). |
| Group: |
Extended file-selectors |
| See also: |
Binding fslx_open fslx_close
|
8.10.4.1 Bindings for fslx_getnxtfile
8.10.5 fslx_open
| Name: |
»File selectionX open« - Initializes and opens the
file-selector |
| Opcode: |
190 |
| Syntax: |
void *fslx_open ( int8_t *title, int16_t x, int16_t y, int16_t
*whdl, int8_t *path, int16_t pathlen, int8_t *fname, int16_t fnamelen,
int8_t *patterns, XFSL_FILTER *filter, int8_t *paths, int16_t
sort_mode, int16_t flags ); |
| Description: |
The call fslx_open initializes and opens the file-selector box.
The following apply:
| Parameter |
Meaning |
| |
|
| title |
Window title of file-selector, may be NULL |
| x |
X-coordinate, and |
| y |
Y-coordinate of the top left corner of the window; for
x=y=-1 the window will be centred |
| whdl |
Window handle after successful opening |
| path |
Complete path, starts with drive and ends with '\'.
From MagiC 6.10 onwards the path may be initialized incompletely,
as with fsel_xxx, e.g. as an empty string; MagiC will then complete
the path in a sensible way |
| pathlen |
Length of path buffer, i.e. maximum pathlength + 1 (for EOS) |
| fname |
Buffer for the filename |
| fnamelen |
Length of filename buffer, i.e. maximum length of filename + 1
(for EOS) |
| patterns |
Filemask, e.g. '*.TXT' or '*.PRG,*.APP'. The alternatively
selectable masks are separated by EOS and terminated by EOS,EOS.
From MagiC 6.10 onwards a NULL-pointer may be passed here, in
which case MagiC then uses '*\0'. |
| filter |
May be NULL. The filter function is called before the mask
comparison. If it returns 0 then the file is invalid, if 1 is returned
then the filename will be displayed. |
| paths |
Path "history" e.g. "C:\\BIN\\" etc. The alternatively
selectable paths are separated by EOS and terminated by EOS,EOS. A
NULL-pointer may be passed here. |
| sort_mode |
Sort-mode for the display:
| SORTBYNAME (0) |
= |
By name |
| SORTBYDATE (1) |
= |
By date |
| SORTBYSIZE (2) |
= |
By size |
| SORTBYTYPE (3) |
= |
By type |
| SORTBYNONE (4) |
= |
Unsorted (physical order) |
| SORTDEFAULT (-1) |
= |
Default |
SORTDEFAULT exists from Magic 6.10 onwards and means that the sort
mode saved in the system will be used.
|
| flags |
Various settings:
| 1 = |
(DOSMODE) This is the compatibility mode that is also used by
fsel_(ex)input and basically returns filenames in the 8+3 format; for
this all directories are called with Dopendir(DOPEN_COMPAT) |
| 2 = |
(NFOLLOWSLKS) Symbolic links will not be followed, i.e. date
and time etc., as well as the XATTR-structure that is passed to
filter, belong to the link itself |
| 8 = |
If GETMULTI is set, one can select and pass several files at
the same time; for this fslx_getnxtfile is used if fslx_evnt or
fslx_do in the parameter nfiles signals that there are still
further files selected
|
|
|
| Return value: |
The function returns a descriptor for the further actions,
else the value NULL if an error has arisen. |
| Availability: |
The presence of this call should be checked for using appl_getinfo
(opcode 7). |
| Group: |
Extended file-selectors |
| See also: |
Binding fslx_close
|
8.10.5.1 Bindings for fslx_open
| C: |
void *fslx_open ( int8_t *title, int16_t x, int16_t y, int16_t
*whdl, int8_t *path, int16_t pathlen, int8_t *fname, int16_t fnamelen,
int8_t *patterns, XFSL_FILTER *filter, int8_t *paths, int16_t
sort_mode, int16_t flags ); |
| Binding: |
void *fslx_open ( int8_t *title, int16_t x, int16_t y, int16_t *whdl,
int8_t *path, int16_t pathlen, int8_t *fname,
int16_t fnamelen, int8_t *patterns,
XFSL_FILTER *filter, int8_t *paths,
int16_t sort_mode, int16_t flags )
{
addr_in[0] = title;
addr_in[1] = path;
addr_in[2] = fname;
addr_in[3] = patterns;
addr_in[4] = filter;
addr_in[5] = paths;
int_in[0] = x;
int_in[1] = y;
int_in[2] = pathlen;
int_in[3] = fnamelen;
int_in[4] = sort_mode;
int_in[5] = flags;
crys_if (190);
*whdl = int_out[0];
return ( (void *) addr_out[0] );
}
|
| GEM-Arrays: |
|
8.10.6 fslx_set_flags
| Name: |
»File selectionX set flags« - Sets certain flags of the
file-selector for the whole system. |
| Opcode: |
195 |
| Syntax: |
int16_t fslx_set_flags ( int16_t flags, int16_t *oldval ); |
| Description: |
The call fslx_set_flags sets certain flags of the file-selector
box for the whole system. The following apply:
| Parameter |
Meaning |
| |
|
| flags |
Various flags:
| 1 = |
SHOW8P3 is valid only for the display of directories on DOS
drives; it corresponds to the switch "Show TOS Files as '8+3'" in
Magxdesk
|
|
| oldval |
Previous value
|
|
| Return value: |
The function return the value 0 in case of error, else the
value 1 for error-free execution. |
| Availability: |
The presence of this call should be checked for using appl_getinfo
(opcode 7). |
| Group: |
Extended file-selectors |
| See also: |
Binding fslx_open fslx_close
|
8.10.6.1 Bindings for fslx_set_flags
8.10.7 Operation of file-selectors from MagiC 4 onwards
MagiC as from Version 4.0 makes its own file-selector box
available, which apart from support of long filenames also offers some
operating niceties otherwise known only from alternative
file-selectors. The following table gives a synopsis of the more
important shortcuts:
| Key presses |
Function |
| |
|
| Return |
No file selected: Returns the text in the editable
field to the program.
File selected: Returns the selected file.
Folder selected: Opens the folder. |
| Alt-A..Z |
Opens the respective drive in current directory |
| Ctrl-Esc |
Rereads the directory |
| Ctrl-Backspace |
or |
| Ctrl-H |
Goes back one directory level |
| Ctrl-D |
Deselects all entries. With this one can force the return of
the input filename in place of the selected file. |
| Cursor up,down |
Moves selection up/down |
| Ctrl-Cursor up,down |
Scrolls up/down |
| Sh-Cursor up,down |
Moves selection by one page |
| Sh-Ctrl-Cursor up,down |
Scrolls page by page |
| Home |
Selects topmost element |
| Sh-Home |
Selects lowest element
|
There are some things to note for the operation of the buttons
too: A double-click on the 'parent' field jumps back to the root
directory. A click on a line selects the object. In cases where
several files are selectable (can be influenced through the system
call), these can be selected with a [Shift]-click.
In each case one can deselect one file with [Shift]-click.
Further, one should note:
Long filenames are returned only if the caller has signalled
beforehand with Pdomain(1) that he could do something with them.
When selecting a folder with [Return], the input field will
be cleared. If nothing is selected, then 'Cursor down' selects the
first line, 'Cursor up' the last line.
With the old calls fsel_(ex)input, the sort-mode is set during
booting to 'By name' and later stored in a global variable, i.e. the
last set sort-mode is saved until the next boot process.
With the old function fsel_(ex)input the mask '*.*' instead of
'*' may be returned in some cases.
See also: Key assignments
8.10.8 File-selector as a dialog
fsel = fslx_do(..., &button, &nfiles, ...);
if (fsel) /* Was the selector open? */
{
if (button)
{
while (--nfiles) /* Several files? */
fslx_getnxtfile(...); /* Get them all */
}
fslx_close(fsel); /* Release everything again */
}
8.10.9 File-selector in a window
fsel = fslx_open(...);
if (fsel)
{
do {
evnt.mwhich = evnt_multi(...);
rv = fslx_evnt(fsel, &evnt, ..., &nfiles, ...);
/* Evaluate bits for own windows/menus */
} while (rv);
while (--nfiles) fslx_getnxtfile(...);
fslx_close(fsel);
}