•  Back 
  •  XAcc 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
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.