home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
pc
/
0400
/
CCE_0493.ZIP
/
CCE_0493.PD
/
SLECTRIC.110
/
SLCTPROG.TXT
< prev
next >
Wrap
Text File
|
1993-10-31
|
10KB
|
220 lines
Programmer's Guide to Selectric™ V1.10
--------------------------------------
November 1993
(c) 1992,93 by Stefan Radermacher
Einleitung
----------
Ja, auch für Selectric™ gibt's einen Programmer's Guide, der jedoch
zur Zeit noch nicht so umfangreich ist. Es ist mehr geplant als bis
jetzt verwirklicht wurde, z.B. wird man Selectric™ irgendwann auch
ein sog. virtuelles Verzeichnis übergeben können, aus dem dann Da-
teien oder Objekte ausgewählen kann. Ich will jetzt aber nicht zuviel
verraten.
Die Möglichkeiten
-----------------
Ich versuche hier mal kurz die Möglichkeiten mit Selectric™ zu
umreißen, um so einen kleinen Überblick zu verschaffen:
Selectric™ installiert einen Cookie-Jar über den die Applikation
Einstellungen vornehmen kann. Das schließt nicht nur die Optionen
oder die Sortierung ein, sondern auch die Preset-Paths und -Ex-
tensions. Die Struktur wurde in diesem Fall sehr flexibel gestaltet
und sieht auf den ersten Blick etwas kompliziert aus. Weiterhin kann
man sich auch mehr als nur einen Dateinamen zurückgeben lassen. Auch
dies geschieht über den Cookie-Jar.
Der Cookie-Jar
--------------
Selectric™ legt einen sog. `FSEL'-Cookie an. Dieser zeigt an, daß man
in jedem Fall fsel_exinput() aufrufen kann, auch wenn der neue File-
Selector abgeschaltet wurde. Der Inhalt `FSEL'-Cookies ist nicht
festgelegt, bei Selectric™ zeigt er auf die folgende Struktur:
typedef struct
{
unsigned long id; /* Selectric ID (`SLCT') */
unsigned int version; /* Version (BCD-Format) */
struct
{
unsigned : 7; /* reserviert */
unsigned todaytime : 1; /* aktuelle Dateien mit Uhrzeit */
unsigned pthsav : 1; /* TOS-Pfade sichern */
unsigned stdest : 1; /* Im Zielpfad bleiben */
unsigned : 1; /* reserviert */
unsigned numsrt : 1; /* numerisches Sortieren */
unsigned lower : 1; /* Kleinbuchstaben benutzen */
unsigned dclick : 1; /* Ordner mit Doppelklick */
unsigned hidden : 1; /* versteckte Dateien */
unsigned onoff : 1; /* Selectric™ AN/AUS */
} config;
int sort; /* Sortiermodus (neg. = rev.) */
int num_ext; /* Anzahl Extensions */
char *(*ext)[]; /* Standard-Extensions */
int num_paths; /* Anzahl Pfade */
char *(*paths)[]; /* Standard-Pfade */
int comm; /* communication word */
int in_count; /* input counter */
void *in_ptr; /* input pointer */
int out_count; /* output counter */
void *out_ptr; /* output pointer */
int cdecl (*get_first)(DTA *dta, int attrib);
int cdecl (*get_next)(DTA *dta);
int cdecl (*release_dir)(void);
} SLCT_STR;
Fangen wir mal an:
id Das ist die ID von Selectric™, also `SLCT'. Es reicht
also nicht nur den `FSEL'-Cookie abzfragen, sondern
muß zusätzlich nich die ID checken.
version Hier steht die Versionsnummer im BCD-Format, also
0x0100 für 1.00.
config.
onoff Über dieses Bit wird Selectric™ ein (logisch 1)
bzw. ausgeschaltet.
hidden Zeigt an, ob versteckte Dateien angezeigt werden
sollen.
dclick Ordner erst auf Doppelklick öffnen.
lower Pfadangaben etc. in der Hauptseite in
Kleinbuchstaben anzeigen.
numsrt Schaltet die numerische Sortierung ein.
stdest Nach Kopier/Verschiebe-Aktionen im Zielpfad
bleiben.
pthsav Ist dieses Flag gesetzt, so speichert Selectric™
die GEMDOS-Pfade und stellt sie kurz vor
Verlassen wieder her.
todaytime Bei aktuellen Objekten Uhrzeit statt Datum
anzeigen.
sort Konfiguriert das Sortierkriterium, dabei gelten fol-
gende Werte:
1 Sortiert nach dem Namen
2 nach Datum
3 nach Größe
4 nach Typ bzw. Extension
5 unsortiert
Ist der Wert negativ, so wird rückwärts sortiert (z.B.
-3 für `nach Größe' und `rückwärts').
num_ext Dieser Wert gibt die Anzahl der möglichen Preset-
Extensions an. Wird von der Applikation eine andere
Anzahl von Extensions übergeben, so muß dieser Wert
angepaßt werden. Selectric™ V1.0 verarbeitet z.Zt. nur
10 Extensions, werden mehr übergeben, so wird der Wert
von Selectric™ aus auf 10 reduziert.
*(*ext)[] Dieser Zeiger zeigt auf ein Array aus Zeigern auf
Strings. In diesen Strings stehen die Preset-
Extensions. Wird der Pointer von der Applikation
verändert, so muß er auf eine gleichartige Struktur
zeigen. Der Zeiger (und auch die Anzahl) wird von
Selectric™ aus wieder zurückgesetzt.
num_paths Gibt die Anzahl der Preset-Paths an (ansonsten siehe
`num_ext').
*(*paths)[] Das ist für die Preset-Paths da (s.a. `*(*ext)[]').
Bemerkung: Das übergeben von Pfaden sollte wirklich
nur dann angewendet werden, wenn dies auch sinnvoll
erscheint. Weiterhin sollte man diese Pfade auch in
der Applikation abspeichern können (Selectric™ spei-
chert nur seine eigenen Extensions/Paths ab, die von
der Applikation übergebenen können aber trotzdem
editiert werden!).
comm Dieses Wort wird zur Kommunikation zwischen Selectric™
und der Applikation benutzt. Es wird nach Verlassen von
Selectric™ automatisch auf Null zurückgesetzt. Zur Zeit
wird nur die Richtung Applikation -> Selectric™
unterstützt. Die einzelnen Bits haben folgende
Bedeutung:
Bit 0 Das Programm erwartet mehr als einen
Dateinamen (s.a. *out_ptr). Dabei wird die
gleiche Struktur wie bei `paths' und `ext'
erwartet. Ordner werden mit einem Backslash
am Ende gekennzeichnet.
Bit 1 Dieses Bit gilt nur in Verbindung mit Bit 0.
Ist das Bit gesetzt, dann werden die
Dateinamen durch Leerzeichen als einziger
String zurückgegeben, fast so wie wenn man
einem Programm eine Kommandozeile übergeben
würde. Auch hier sind die Ordner mit einem
Backslash am Ende gekennzeichnet.
Die anderen Bits sind resrviert und sollten (besser:
dürfen) nicht verändert bzw. benutzt werden.
in_count z.Zt. unbenutzt
*in_ptr z.Zt. unbenutzt
out_count Die Applikation benutzt es, um anzugeben wieviele Items
zurückgegeben werden sollen. Selectric™ schreibt kurz
vor dem Verlassen die tatsächliche Anzahl rein.
*out_ptr Dieser Pointer muß bei Benutzung auf einen
Speicherbereich bzw. Struktur, welche innerhalb der
Applikation alloziert wurde, zeigen. Wichtig ist dabei,
daß genügend Speicher alloziert wurde!
Seit Version 1.02 gibt es auch noch drei neue Funktionen, mit denen
man noch auf eine andere Art und Weise mehrere Dateinamen zu-
rückbekommen kann. Sie arbeiten nach dem First/Next-Prinzip und haben
den Vorteil, daß die Hauptapplikation keinen Speicher für die Da-
teiliste zur Verfügung stellen muß. Sie arbeiten äquivalent zu den
TOS-Routinen Fsfirst() und Fsnext(), mit dem kleinen Unterschied, daß
man jeweils einen Zeiger auf eine DTA-Struktur übergeben muß. Ebenso
kann man bei get_first() keine Dateimuster übergeben, da das ja
eigentlich der User im Selector macht. Weiterhin muß nach dem Holen
der Dateinamen release_dir() aufgerufen werden, damit Selectric den
Speicher wieder freigibt. Die ganze Aktion muß mit wind_update()
eingeschachtelt werden, da es sonst zu Reentranzproblemen in Selectric
kommen kann.
Bemerkung: Die Struktur ist in den Grundzügen kompatibel zu der
aus FSELECT 1.2.x von Martin Patzel/Köhling, d.h. ID,
Versionsnummer und das ON/OFF Bit sind an der gleichen
Stelle zu finden. Der Rest ist natürlich nur in
Selectric™ vorhanden.
Nach dem Motto `ein Programm sagt mehr als tausend Worte' verweise ich
an dieser Stelle auf das Beispielprogramm und das Binding.
Nachwort
--------
Bleibt nur noch zu sagen, daß noch einiges geplant ist, welches in
späteren Versionen auch verwirklicht wird, jedoch wollte ich das
nicht `übers Knie brechen'. Aber schon jetzt hat Selectric™ die um-
fangreichste Programmierschnittstelle in der File-Selektor Welt.
Ach ja, das Binding und das Sample wurden nicht so intensiv getestet,
jedoch sollten keine schwerwiegenden Fehler enhalten sein. Für Bug-
Reports bin ich aber immer sehr dankbar.
Meine Adresse ...
Stefan Radermacher
Unter Krahnenbäumen 52-54
50668 Köln
Deutschland
email: sr@k.maus.de
It's not a trick, it's Selectric™.