Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File15.13.3 Die UFSL-Schnittstelle TOS Der Vollständigkeit halber folgt hier noch die Original-Beschreibung von Michael Thänitz zur ursprünglichen UFSL-Schnittstelle: Programmierschnittstelle: UFSL ist eine Fontauswahlbox für den Autoordner. Sie bietet dem Programmierer eine einfache Programmierschnittstelle über einen Cookie. Der Cookie lautet: "UFSL". Der Cookie liefert einen Zeiger auf folgende Struktur: typedef struct { unsigned long id; /* UFSL ID (UFSL) */ unsigned int version; /* Version (BCD-Format) */ int dialtyp; /* 0=Dialog, 1=Fenster */ int cdecl (*font_selinit)(void); int cdecl (*font_selinput)( int vdihandle, int dummy, char *text, /* eigener Text, max. 34 Zeichen */ int ftype, /* 1=nur monospaced Fonts, 0=alles */ int *fretid, /* eingestellte FontId */ int *fretsize /* eingestellte Fontgröße */ ); OBJECT *helpbutton; /* Typ: BOXTEXT */ void cdecl (*helpfunc)(void); /* Benutzerdefinierte Helpfkt. */ /**** ab Version 0.91 ********************************************/ char *examplestr; /* Beispieltext für Fontdarstellung */ /**** ab Version 0.96 ********************************************/ void cdecl (*msgfunc)(int event, int msgbuf[]);/* Redrawfunktion */ /**** ab Version 0.97 ********************************************/ int cdecl (*fontsel_exinput)( int vdihandle, int ftype, /* 1=nur monospaced Fonts, 0=alles */ char *text, /* eigener Text, max. 34 Zeichen */ int *fretid, /* eingestellte FontId */ int *fretsize /* eingestellte Fontgröße */ ); } UFSL; Aufruf: UFSL *ufsl; ufsl=(UFSL *)get_cookie('UFSL'); ufsl->helpfunc= my_helpfunc; /* Hilfefunktion oder NULL */ ufsl->msgfunc = my_msghandler; /* Redrawfunktion oder NULL, Dialtyp beachten */ ufsl->fontsel_input(vdihandle,"Bitte Font auswählen",0,&id,&size); oder ufsl->fontsel_input(vdihandle,NULL,0,&id,&size); Returncodes: 1 : Alles OK, Werte gültig. 0 : Abbruch gewählt. -1 : Out of memory. -2 : Unzulässiger Mehrfachaufruf. -3 : Fontgröße konnte nicht identifiziert werden. -4 : Anzahl Fonts muß größer null sein. Sonderfunktionen: void cdecl (*helpfunc)(void); /* Benutzerdefinierte Helpfkt. */ UFSL kann eine benutzerdefinierbare Hilfefunktion über den ebenfalls optionalen Hilfebutton aufrufen. helpfunc() benötigt keine Parameter und liefert auch keinen Wert zurück. void cdecl (*msgfunc)(int event, int msgbuf[]); /* Redrawfunktion */ Bei Verwendung von UFSL als Fensterdialog ist es notwendig eine Re- drawfunktion zur Verfügung zu stellen. Sie schickt die anfallenden Events an das aufrufende Programm zurück, damit nach Verschieben des Dialogs die Hintergrundfenster restauriert werden können. msgfunc() liefert als ersten Parameter das Ergebnis von evnt_multi() und als zweiten Parameter die MsgPipe. Ein Returncode wird nicht benötigt. Das Anwenderprogramm muβ die nötigen Routinen zur Fensterbehandlung zur Verfügung stellen. wind_update(..._UPDATE) wird von UFSL nicht ge- setzt, obliegt also dem rufenden Anwenderprogramm. Prinzipbedingt (?) ist die Memoryprotection von MTOS auszuschalten. Grundsätzlich gilt es zu überlegen, ob tatsächlich alle Events ent- sprechend beantwortet werden sollen. Ein WM_TOPPED, das andere eigene Fenster nach vorn bringt, sollte wohl nicht beantwortet werden, da UFSL naturgemäβ nur applikationsmodal sein kann, da UFSL ja in einem eigenen form_do() sprich evnt_multi() kreist.