Version 2.11: (nicht ffentlich)
    - bei den Variablen hpos,vpos,hsize,vsize der SCROLL-Struktur handelt
      es sich jetzt um Long-Integer
    - Aufbau der Nachrichten XACC_AV_EXIT u. WIN_SCROLLED gendert
    - Funktion 'window_scroll_slider' wird nicht mehr exportiert (Funktion
      ist nur noch intern vorhanden)
    - Mausform war nach ICFS-Deikonifizierung bzw. nach dem Schlieen eines
      Dialogs oder nach dem ffnen von Fenstern anderer Anwendungen teil-
      weise falsch gesetzt
    - falsche Benutzung von 'sizeof' in den Beispielprogrammen korrigiert
    - mit neueren Pure C-Versionen (ab Mrz 93) gab' es teilweise Probleme mit
      der Definition von WM_BOTTOMED im Header-File 'E_GEM.H'
    - GDOS-Fonts werden jetzt immer geladen
    - Window-/Clipboardviewer/XClipboard:
        -> externe Fontselektoren u. GDOS-Fonts werden untersttzt
        -> Einstellungen (Font-ID/Gre/Farbe jeweils fr Dump/Textfenster,
           voreingestellte Tabulatorgre sowie Fensterausmae/position
           (letzteres nicht im WindowViewer)) knnen abgespeichert werden
        -> Texte/Dumps knnen jetzt beliebig (abhngig vom freien Speicher)
           lang sein (vorher max. 32767 Zeilen bzw. 2 MByte)
        -> Image/Text-Routinen zusammengefat, verallgemeinert u. optimiert
           (DATA.C ist jetzt ein allgemeines Modul, welches auch in
            eigener Software eingesetzt werden kann)
        -> Texte knnen jetzt Nullbytes als Zeilentrenner enthalten
        -> nachlauffreies Tastatur-Scrolling
        -> der Dump-Modus kann beim beim Laden der Datei durch die
           Alternate-Taste, der Text-Modus durch die Control-Taste er-
           zwungen werden
    - Window-/Clipboardviewer:
        -> exponentielles Mausscrolling
        -> maximale Fensterausmae wurden bei langen Textdateien (mehr als
           2000 Zeilen) aufgrund eines Integerberlaufs falsch gesetzt
        -> nach dem Wechsel der Tabulatorgre sprang die Anzeige wieder
           an den Anfang der Datei
        -> Informations-Dialog (per Doppelklick oder HELP aufrufbar)
        -> Icon bei ikonifizierter Darstellung
    - WindowViewer:
        -> beliebige Daten knnen per Drag&Drop empfangen werden
        -> View-Protokoll V1.04 (Nachricht VIEW_DATA) wird untersttzt
        -> mehrere Dateien knnen geladen werden
        -> blinkender Cursor im Text- und Dump-Modus (kann auch per Maus
           positioniert werden)
        -> Anzeige des ASCII-Codes (Hexdezimal/Dezimal/Zeichen) des Zeichens
           unter dem Cursor
        -> mehrere Dateien knnen auf einmal per Drag&Drop emfpangen bzw.
           beim Programmstart oder im Fileselector angegeben werden
        -> Marker setzen (CTRL-[0-9]) und anspringen (ALT-[0-9])
        -> Suchenfunktion ((SHIFT-/ALT-) CTRL-F/G)
        -> Ist der Viewer bereits im Speicher vorhanden, so bermittelt
           ein spter gestarteter Viewer die Kommandozeile an diese und
           beendet sich selbst
    - XClipboard:
        -> unter MTOS/Mint bzw. bei vorhandenem Speicherschutz wird jetzt
           globaler Speicher angefordert
        -> Datenbertragung per XAcc2-Protokoll verbessert, u.a. werden
           seltener temporre Dateien angelegt
    - Resource-Previewer:
        -> Bume ohne Exit-Objekt knnen dargestellt werden (auer Pull-
           Down-Mens)
        -> beim Programmstart kann eine Resource-Datei bergeben werden
        -> Drag&Drop-Untersttzung
        -> Icon bei ikonifizierter Darstellung
        -> Hilfs/Informations-Dialog
        -> mehrere kleinere Fehler korrigiert und Oberflche berarbeitet
    - XAcc-Monitor:
        -> Anzeige der gefundenen Applikationen im ikonifizierten Zustand
        -> Informations/Hilfe-Text
        -> externe Fontselektoren und beliebige GDOS-Fonts werden untersttzt
        -> Einstellungen (Font, Gre, Farbe, Fensterausmae/position)
           knnen gespeichert werden
        -> kleinere Fehler korrigiert

Version 2.20:
    - FontPalette, FontSelector, XAcc-Monitor, Resource-Previewer und
      PlayIt! als (neue) EGEM-Utilities sowie fnf weitere neue
      Beispielprogramme
    - Mini-Varianten der Utilities Clipboard/WindowViewer und XAcc-Monitor
    - D&D-Fontprotokoll (Nachrichten FONT_CHANGED/SELECT/ACK, s. Anleitung)
      sowie Paula-Protokoll werden untersttzt
    - neue Funktionen (Parameter/Rckgabewerte/Strukturen s. Anleitung):
        boolean driver_avaiable(int dev)
            -> Testet, ob der GDOS-Treiber mit der Gertenummer 'dev'
               existiert
        boolean open_device(int dev,int *handle,int *work_out);
            -> GDOS-Treiber mit Gertenummer 'dev' ffnen
        void close_device(int handle)
            -> GDOS-Treiber mit Device-Handle 'handle' schlieen
        int mm2dpi(int size)
            -> DPI (dots per inch) eines Ausgabegerts berechnen
        void graf_rt_slidecursor(SLINFO *slider,int exit)
            -> automatische Positionierung des Slidercursors (sl_cursor)
               und evtl. Scrolling des Sliders 'slider' in Abhngigkeit von
               der Mausposition.
        void graf_rt_lines(int *objects,boolean close)
            -> mehrere graue Objektrahmen (diese sollten nur aus horizon-
               talen und vertikalen Linien bestehen) im XOR-Modus zeichnen.
        int graf_rt_dragbox(int desk_clip,GRECT *start,GRECT *bound,int *x,
                 int *y,void(*box_do)(boolean draw,int *array,MKSTATE *mk))
            -> Verschieben des Rechtecks 'start' innerhalb des greren
               Begrenzungsrechtecks 'bound'
        int graf_rt_dragobjects(int desk_clip,int *objects,GRECT *bound,
               void (*object_do)(boolean draw,int *objects,MKSTATE *mk));
            -> Verschieben der Objekte 'objects' innerhalb des Begrenzungs-
               rechtecks 'bound'.
        long NewTimer(long timer,long para,long (*fkt)(long,long,MKSTATE *))
            -> neuen erweiterten Timer anmelden
        int KillTimer(long id)
            -> Timer wieder entfernen
        char *ParseArgs(char *args)
            -> (Drag&Drop-) Kommandozeile auswerten
        int VaStart(int sendto,char *args)
            -> Argumente/Kommandozeile 'args' an Applikation 'sendto'
               senden
        void ob_edit_init(DIAINFO *info,int first_edit)
            -> Eingabefelder des Dialogs 'info' neu initialisieren (NICHT
               lschen) und evtl. Cursor neu positionieren
        void ob_edit_handler(boolean (*handler)(char valid,char input,
                             char *out))
            -> Handler fr Gltigkeitsmasken in Eingabefeldern an-
               oder abmelden. Hierdurch knnen neue Gltigkeitsmasken im-
               plementiert sowie vorhandene gendert oder ergnzt werden.
        void ob_hide(OBJECT *tree,int obj,int hide)
            -> Objekt 'obj' im Baum 'tree' verstecken (hide==0) oder
               anzeigen (hide!=0)
        void ob_pos(OBJECT *tree,int object,GRECT *rect);
            -> Ausmae und absolute Koordinaten des Objekts 'object' im
               Baum 'tree' ermitteln u. in der GRECT-Struktur 'rect' sichern
        OBJECT *ob_copy_tree(OBJECT *tree)
            -> Kopie des Objektbaums 'tree' erzeugen
        void ob_set_cursor(DIAINFO *info,int obj,int index,int insert)
            -> Eingabecursor neu setzen/Eingabemodus umschalten
        FONTINFO *FontInfo(int id)
            -> Zeiger auf FONTINFO-Struktur des Zeichensatzes mit der ID
               'id' ermitteln
        FONTINFO *FastFontInfo(int id)
            -> entspricht obiger Funktion mit gewissen Einschrnkung, ar-
               beitet dafr aber teilweise deutlich schneller
        int FontList((int type,int min_size,int max_size,int max_fonts,
                     FONTINFO *fonts[],
                     int (*font_test)(FONTINFO *info,int size))
            -> Liste von Fonts mit den gewnschten Attributen erstellen.
        int FontSizes(int font_id,int free_scale,int min_size,int max_size,
                      int max_cnt,int *sizes,
                      int (*font_test)(FONTINFO *info,int size))
            -> Liste von Gren (in Punkt) des Fonts mit der ID 'font_id'
               erstellen
        int FontChanged(int apID,int handle,int id,int size,int effect,
                         int color)
            -> Nachricht FONT_CHANGED an Applikation 'apID' oder alle
               Applikationen (apID<0) senden
        int CallFontSelector(int handle,int id,int size,int color,int effects)
            -> D&D-FontSelector (gegenbenenfalls mit aktuellen Attributen)
               aufrufen
        int FontAck(int font_selector,boolean ack)
            -> Besttigungsnachricht FONT_ACK an D&D-Fontselector schicken
        int FontSelect((int mode,FONTSEL *fs)
            -> Fontselector ffnen oder geffneten Fontselector neu setzen
        boolean UpdateFsel(boolean all,boolean example)
            -> FONTSEL-Struktur eines geffneten Fontselectors aktualisieren
        int mouse(int *x,int *y)
            -> Position und Zustand der Knpfe der Maus ermitteln
        void ClrKeybd(void)
            -> Tastatur-Puffer lschen
        void NoClick(void)
            -> auf das Loslassen beider Maustaste warten
        void MouseUpdate(int block)
            -> automatische Mauszeigerverwaltung sperren (block==TRUE) oder
               freigeben (block==FALSE)
        int MouseForm(int index,MFORM *user)
            -> an die unterschiedliche Verwaltung des Mauszeigers in den
               diversen MultiTasking-Systemen angepate graf_mouse()-
               Variante
        int beg_update(int test,int off)
            -> Update-Status setzen (test==0) bzw. testen, ob Status
               gesetzt werden kann und dann evtl. setzen und optional
               Maus ausschalten (off!=0)
        void end_update(int on)
            -> Update-Status wieder lschen und Maus einschalten (on!=0)
        int beg_ctrl(int test,int output,int mouse)
            -> Maus-Kontrolle bernehmen und Update-Status (s. beg_update)
               setzen (Test-Modus, falls test!=0), Bibliotheksausgabe
               (output!=0) und Mauszeigerverwaltung (mouse!=0) sperren
        void end_ctrl(int output,int mouse)
            -> Maus-Kontrolle/Update-Status sowie Bibliotheksausgabe
               (output!=0) sowie Mauszeigerverwaltung (mouse!=0) freigeben
        void draw_window(WIN *win,GRECT *area,void *para,int mouse,
                         void (*draw)(int first,WIN *win,GRECT *area,
                         GRECT *work,void *para))
            -> beliebige Ausgabe in Fenster 'win' ber Ausgabe-Funktion
               'draw' vornehmen
        WIN *get_window_list(int first)
            -> erste (first==TRUE) oder nchste (first==FALSE) WIN-Struktur
               der internen Fensterliste ermitteln
        int GetTop(void)
            -> Handle des obersten Fensters ermitteln
        int window_work(WIN *win,GRECT *out)
            -> Arbeitsbereich des Fensters 'win' abzglich eventuell
               vorhandener Toolbarbereiche berechnen
        void windial_calc(int calc_work,DIAINFO *info,GRECT *work)
            -> Objektbaumausmae oder Fensterarbeitsbereich des Dialogs
               'info' berechnen
        int window_output(void)
            -> Testet, ob Ausgabe in ein Fenster mglich ist
        int WindowHandler(int mode,WIN *window,GRECT *icon)
            -> verschiedene Fenster-Funktionen (Schlieen, Ikonfizieren,
               Wechseln usw.; abhngig vom Parameter 'mode') ausfhren
        void v_line(int x1,int y1,int x2,int y2)
            -> Linie von den Koordinaten (x1,y1) zu den Koordinaten (x2,y2)
               entsprechend den Linien-Attributen der internen Workstation
               x_handle zeichnen
        void v_rect(int x1,int y1,int x2,int y2)
            -> Rechteck mit der linken oberen Ecke (x1,y1) und der rechten
               unteren Ecke (x2,y2) entsprechend den Linien-Attributen der
               internen Workstation x_handle zeichnen
        int v_set_font(int font_id)
            -> Zeichensatz mit der Font-ID 'font_id' einstellen
        int v_set_point(int all,int height)
            -> Zeichenhhe in Punkt einstellen (evtl. auch Zwischengren)
        void header_options(boolean set,boolean center,boolean frame,
                            boolean small,boolean transp,int tcolor,
                            int fcolor,int bcolor,int bpattern)
            -> Optik der Rahmen-Objekte (erweiterter Typ HEADER) setzen
        int int2str(char *str,int val,int size)
            -> vorzeichenbehafteten Integer-Wert 'val' in String 'str'
               konvertieren
        char *strend(char *str)
            -> Liefert einen Zeiger auf das Null-Byte hinter dem String
        char *strlcpy(char *dest,char *source)
            -> Kopiert den String 'source' in den String 'dest' (entspricht
               strend(strcpy(dest,source)))
        char *strwild(char *string,char *wild)
            -> Testet, ob die Zeichenkette 'string' auf den Unix-Wildcard
               'wild' pat (v.a. fr Datei/Pfadnamen geeignet)
        int FormObject(int exit)
            -> Objektnummer aus X_Form_Do-Rckgabewert 'exit' ermitteln
        int XFormObject(DIAINFO **back)
            -> entspricht FormObject(X_Form_Do(back))
        void MenuItems(MITEM *close,MITEM *closeall,MITEM *cycle,
             MITEM *invcycle,MITEM *globcycle,MITEM *full,MITEM *bottom,
             MITEM *iconify,MITEM *iconify_all,MITEM *menu,int menu_cnt)
            -> Hotkeys und Menpunkte fr verschiedene Fenster-Funktionen
               definieren, welche automatisch ausgewertet werden.
        void WindowItems(WIN *win,int cnt,MITEM *items)
            -> Hotkeys/Tastaturkommandos sowie evtl. dazugehrige
               Menpunkte fr ein Fenster definieren.
        int PaulaStop(void)
            -> Musikwiedergabe von Paula (ab Version 2.4) stoppen
        int PaulaShutDown
            -> Musikwiedergabe von Paula (ab Version 2.4) stoppen,
               Speicher freigeben und Paula-Fenster schlieen
        int PaulaStart(char *mod_files)
            -> Musikwiedergabe von Paula (auch bei lteren Versionen)
               starten. ber den Parameter 'mod_files' kann gegebenenfalls
               eine Liste von MOD-Files (getrennt durch Leerzeichen oder
               Semikolon) bergeben werden, sofern mod_files!=NULL
        int objc_sysvar(int ob_smode,int ob_swhich,int ob_sival1,
                        int ob_sival2,int *ob_soval1,int *ob_soval2)
            -> erweiterte Variante der AES-Funktion objc_sysvar(), welche
               die Existenz diese Funktion selbstndig ermittelt.
        boolean SaveInfoFile(char *file,boolean auto_path,void *info,
                             int len,char *id,int version)
            -> Einstellungen des Programms sichern. Die Informationsdatei
               verfgt dabei im automatisch erzeugten Header sowohl ber
               eine Identifikation als auch eine Prfsumme. Ebenso sind mit
               dieser Funktion (zusammen mit LoadInfoFile) auf- und abwrts-
               kompatible Informationsdateien mglich.
        int LoadInfoFile(char *file,boolean auto_path,void *info,int len,
                         int min_len,char *id,int min_version)
            -> Einstellungen des Programms laden. Der Speicherbereich
               mit den Einstellungen wird dabei nur verndert, wenn Daten
               erfolgreich geladen werden konnten und der Header allen
               Anforderungen entspricht (korrekte Prfsumme, Identifikation,
               Versionsnummer, Lnge der Einstellungen).
        OBJECT *MakeAscii(void)
            -> Erzeugt eine Kopie des Sonderzeicheneingabebaums. Hierdurch
               kann dieser Dialog selber verwaltet/fr eigene Zwecke ver-
               wendet und auch nonmodal sowie mehrfach geffnet werden.
        char ExitAscii(OBJECT *tree,int exit)
            -> gewnschten ASCII-Wert in Sonderzeicheneingabebox aus an-
               geklicktem Objekt berechnen.
        ALERT *MakeAlert(int default,int undo,int icon,BITBLK *user_icon,
                        int modal,int center,int width,
                        char *title,char *text,char *buttons)
            -> Erzeugt einen neuen Objektbaum einer Alertbox mit den
               gewnschten Parametern (s. Funktion xalert()). Hierdurch
               kann dieser Dialog selber verwaltet/fr eigene Zwecke ver-
               wendet und auch nonmodal sowie mehrfach geffnet werden.
        int ExitAlert(ALERT *alert,int exit)
            -> Button-Index aus angeklicktem Alert-Objekt berechnen.
        void dialog_mouse(DIAINFO *info,
                          int (*mouse)(DIAINFO *info,OBJECT *tree,int obj,
                          int last_obj,int x,int y,GRECT *out))
            -> Handler fr objektabhngige Dialogmausform des Dialogs 'info'
               anmelden (mouse!=NULL) oder abmelden (mouse==NULL)
        char *strwild(char *string,char *wild)
            -> Testet, ob die Zeichenkette 'string' auf den Unix-Wildcard
               'wild' pat (v.a. fr Datei/Pfadnamen geeignet)
        X_TEXT *get_xtext(OBJECT *tree,int object)
            -> Zeiger auf X_TEXT-Struktur des Attributtextes 'object'
               im Baum 'tree' ermitteln.
    - genderte Parameter/Namen/Rckgabewerte:
        int FileSelect(...,char *sel,...,int out,char *outptr[])
            -> sel: Dateimaske wird automatisch an die Mglichkeiten des
                    Dateisystems (Gro-/Kleinschreibung) angepat)
            -> out/outptr: Mehrfachauswahl von erweiterten Dateiselektoren
                           sowie Freedom wird untersttzt (s. Anleitung)
        int open_rsc(char *,char *win_id,...)
        int init_gem(char *win_id,...)
            -> Programmkrzel vor jedem Fenster-Titel oder NULL
        void close_rsc(boolean all,int)
        void exit_gem(boolean all,int)
            -> GEM (all==FALSE) oder GEM u. Programm (all==TRUE) beenden
        int key(int scan,int ascii)
            -> Funktion 'sl_key' in 'key' umbenannt
        void v_set_text(int,int,int,int effect,int rotate,int *)
            -> Text-Effekte (effect) und -winkel (rotate)
            -> bei Vektorfonts knnen jetzt beliebige Punkt-Gren angegeben
               werden
        void v_set_fill(...,int peri)
            -> Umrandung ein-/ausschalten
        void v_set_line(...,int type,int start,int end)
            -> Linien-Typ (type), -anfang (start) und -ende (end)
        WIN *open_window(...,void (*redraw)(int first,WIN *,GRECT *),
                           void *para,int msgs)
            -> first: erstes (Bit 0,RC_FIRST) Rechteck der Rechteckliste
                      Scrolling (Bit 1,RC_SCROLL) oder Redraw
            -> para:  beliebiger Parameter, der in der WIN-Struktur ge-
                      speichert wird und beispielsweise auf die zum Fenster
                      gehrigen Daten-Strukturen zeigen kann
            -> msgs:  Bitmap der Fenster-Nachrichten, die automatisch ausge-
                      wertet werden sollen (s.a. Anleitung:
                       XM_TOP:    WM_TOPPED
                       XM_BOTTOM: WM_BOTTOMED
                       XM_SIZE:   WM_FULLED,WM_SIZED,WM_MOVED (Nachricht
                                  WIN_SIZED wird nach Vernderung an
                                  Event-Handler geschickt)
        void window_set_mouse(WIN *win,int in,int work,int out,int icon,
                              MFORM *in_form,MFORM *work_form,
                              MFORM *out_form,MFORM *icon_form)
            -> Form des Mauszeigers in Abhngigkeit von der Position rela-
               tiv zum Fenster 'win' festlegen und vollautomatisch ver-
               walten
            -> in, in_form:     Mausform innerhalb des Fensterbereichs,
                                aber nicht im Arbeitsbereich (z.B. ber
                                Toolbar) (Bedeutung s. graf_mouse()).
               work, work_form: Mausform innerhalb des Arbeitsbereichs
               icon, icon_form: Mausform innerhalb des ikonifizierten
                                Fensterbereichs
               out, out_form:   Mausform auerhalb des Fensterbereichs
        void dial_options(...,boolean standard,...,boolean background,...,
                            boolean keys,...,boolean clipboard,int hz)
            -> standard: gewhnliche GEM-Optik bei Checkboxen, Sliderpfeilen
                         und Cycle-Buttons verwenden
            -> background: ALWAYS_BACK:  Fenster (-dialoge) knnen unter
                                         jeder TOS-Version im Hintergrund
                                         bedient werden
                           NO_BACK:      Keine Hintergrundbedienung
                           AES_BACK:     Hintergrundbedienung nur, wenn
                                         dies durch GEM untersttzt wird
            -> keys: KEY_FIRST:  Tastendruck erst an Event-Handler
                     KEY_STD:    Tastendruck wird zuerst von Dialog-
                                 Routinen ausgewertet
                     KEY_ALWAYS: wie KEY_STD, nur da nicht ausgewertete
                                 Tastendrcke immer weitergeleitet werden
            -> clipboard:  Klemmbrettuntersttzung in Eingabefeldern
            -> hz: Blinkrate (in Hertz) des Cursors in Eingabefeldern
                   oder statischer Cursor (hz<=0)
            -> 2. und 3. Parameter wurden entfernt (kann durch neue Funk-
               tion 'header_options' gesetzt werden)
        void dial_colors(...,int dial_frame,...,int cycle_backgrnd,
             int check_backgrnd,int radio_backgrnd,int arrow_backgrnd,
             int edit_3d,int draw_3d)
            -> Farbe des Dialograhmens, Hintergrundfarben der Cycle-Buttons,
               Check-Boxes, Radio-Buttons und Arrows, Untersttzung der AES-
               3D-Farben, bessere Dialog-Optik in Farbauflsungen, Eingabe-
               felder (edit_3d) und Objekte mit DRAW3D-Status (draw_3d)
               automatisch auf selektierten 3D-Look setzen
        void cycle_image(...,char cycle)
            -> Zeichen fr den Cycle-Button, sofern die Images aufgrund der
               Ausmae des Systemfonts nicht verwendet werden knnen
        DIAINFO *open_dialog(...,XPOPUP **popup)
            -> Rckgabewert: Zeiger auf initialisierte DIAINFO-Struktur des
               Dialogs oder NULL, falls Dialog nicht geffnet werden konnte
            -> popup: Zeiger auf Liste mit Adressen der XPOPUP-Strukturen
                      (letzter Listen-Eintrag gleich NULL) der Popups des
                       Dialogs oder NULL, wenn keine Popups automatisch ver-
                       waltet werden sollen
            -> 2. Parameter entfernt
        int close_dialog(...)
            -> Rckgabewert: TRUE, falls Dialog geschlossen wurde, und
               ansonsten FALSE (s. Anleitung)
        void window_reinit(...,int draw)
               TRUE  -> Fenster ohne Toolbar-Bereich neuzeichnen
               FALSE -> komplettes Fenster neuzeichnen
               FAIL  -> Fenster nicht neuzeichnen
        int ob_draw_chg(...)
            -> Parameter 'top' (boolean) entfernt
        void Event_Timer(int,int,int nokeys)
            -> Tastaturauswertung whrend der Wartezeit sperren (nokeys!=0)
        int graf_rt_rubberbox(int desk_clip,...,int min_w,int min_h,
                              void(*box_do)(boolean draw,int *,MKSTATE *mk))
            -> die Funktion kann auch bei nicht gedrckter Maustaste aufge-
               rufen werden und wird dann durch einen Mausklick beendet
            -> minimale Breite und Hhe des Rechtecks (min_w,min_h)
            -> optionales Clipping mit Desktop-Fenster (desk_clip!=0)
            -> zustzliche Parameter an die Echtzeitfunktion:
               draw: Rechteck wird gerade gezeichnet (TRUE) oder
                     gelscht (FALSE)
               mk:   Zeiger auf eine MKSTATE-Struktur sowie ein Parameter
        void graf_rt_slidebox(...,int pos,int cursor)
            -> neue Slider- und Cursorposition fr neues Sliderkommando
               SL_SET
        int X_Form_Do(...)
        int Popup(...)
            -> Bit 14 des Rckgabewerts wird jetzt gesetzt, wenn es sich
               um einen Rechtsklick handelte (RIGHT_CLICK)
        char ascii_box(DIAINFO *dialog,...)
            -> dialog: Zeiger auf DIAINFO-Struktur des Dialogs, in
                       dessen aktuelles Eingabefeld die Sonderzeichen
                       eingefgt werden sollen oder NULL, wenn die
                       Sonderzeichen zurckgeliefert werden sollen
    - neue erweiterte Objekt-Typen:
        - Escape-Button (ESC_BTN=erweiterter Typ 21)
    - neue globale Variablen/Konstanten:
        int mtos:
          -> Multi-TOS vorhanden (mtos!=0)
        int has_3d;
          -> AES-3D-Effekte (Bits 9/10 der Objekts-Flags) sind vorhanden
        int bevent,bottom,owner;
          -> wind_get/wind_set-Modi WF_BEVENT, WF_BOTTOM und WF_OWNER sind
             vorhanden
        unsigned int gemdos_version:
          -> Versionsnummer des Gemdos
        int speedo:
          -> FSM-GDOS (1), Speedo-GDOS (2), Speedo 5.0/NVDI 3.0 (3)
             oder keine Vektorfonts (0)
        int work_out[57];
          -> Ausgabefeld vom ffen der virtuellen internen Workstation
        int ext_work_out[57];
          -> erweitertes Ausgabefeld (s. Funktion vq_extnd())
        DIAINFO *FSelDialog;
          -> Zeiger auf DIAINFO-Struktur des Fontselector-Dialogs, sofern
             dieser geffnet ist (ansonsten NULL)
        E_GEM:
          -> Name der Library ("EnhancedGEM")
        E_GEM_DATE:
          -> Erstellungsdatum der Library (wie __DATE__)
        E_GEM_VERSION:
          -> Versionsnummer der Library ("x.xx")
    - diverse Teile der Library knnen durch SMALL_NO_DD, SMALL_NO_EDIT,
      SMALL_NO_XACC_AV, SMALL_NO_GRAF, SMALL_EGEM, SMALL_NO_FONT,
      SMALL_NO_FSEL, SMALL_NO_DD_FSEL, SMALL_NO_POPUP, SMALL_NO_CLIPBRD,
      SMALL_NO_SCROLL, SMALL_EDIT, SMALL_NO_HZ, SMALL_ALERT, SMALL_NO_MENU,
      SMALL_NO_ICONIFY, SMALL_NO_XTEXT, SMALL_NO_PAULA sowie SMALL_LIGHT
      ausgeblendet werden
    - neue Fensterdialogelemente:
        SMALL_FRAME/SMART_FRAME:
          -> Dnner/Mittlerer Rahmen um Fensterdialog (bisher nur kein oder
             dicker Rahmen)
        DDD_DIAL:
          -> bei fliegenden Dialogen unter 3D-AES 3D-Rahmen verwenden
        WD_CLOSER:
          -> Schliebox (auch bei modalen Dialogen!)
        WD_TREE_SIZE:
          -> maximale Fenstergre auf Dialoggre setzen und Dialoggre
             nicht verndern (s. Anleitung)
    - neuer Dialog-Skalierungsmodus (Parameter 'scaling' bei rsrc_calc(),
      rsrc_init() und fix_objects())
        STATIC_SCALING: Dialog immer in Originalgre skalieren
    - SLINFO-Struktur stark erweitert (u.a. automatische Cursorverwaltung,
      automatisches Scrolling des Ausgabebereichs, minimale Schiebergre,
      genderte Parameter der Echtzeitfunktion sl_do, Schieber optional
      als Zhlbox einsetzbar usw., s. Anleitung)
    - grtenteils dynamische Speicherverwaltung sowie geringerer Speicher-
      bedarf
    - bei open_dialog() angegebene Slider werden vor dem ffnen des Dialogs
      automatisch per graf_set_slider() initialisiert
    - Echtzeitfunktion 'sl_do' (s. SLINFO-Struktur) wird jetzt auch bei
      graf_set_slider() aufgerufen
    - sehr schnelles optionales Fensterscrolling (s. verschiedene Modi
      der Variable 'scroll' der SCROLL-Struktur)
    - Wird in einem Eingabefeld, in dem Leerzeichen nicht eingegeben werden
      knnen, ein Leerzeichen eingegeben, so wird das Eingabefeld bis zum
      nchsten festen Maskenzeichen mit Leerzeichen gefllt. Wurde das ganze
      Eingabefeld gefllt, so wird anschlieend zum nchsten Feld gesprungen
    - CTRL-Space deikonifiziert unter MTOS (ab V1.07), Geneva sowie
      MagiC (ab V3.00) Fenster
    - Fenster in Hintergrund per Hotkey Ctrl-#/ legen
    - inverses und globales Fenster wechseln (Hotkeys CTRL-Shift-W sowie
      ALT-CTRL-W)
    - Durch Setzen des Bits 7 (DRAW3D) in den Objekt-Flags wird das ent-
      sprechende Objekte auf selektierten 3D-Look eingestellt
    - Attribut-Text mit 3D- (DRAW3D) und Titel-Effekt (WHITEBAK)
    - Text in Alerts links-/rechtsbndig/zentriert, mit kleinem/groem
      Systemfont, bis zu 24 Zeilen
    - flexiblere Popup-Funktion (u.a. optional Verwaltung der Hkchen durch
      die Anwendung sowie Verwendung von Popups fr einfache Fenster-
      Mens (Modus POPUP_MENU) oder Submens (Modus POPUP_SUB), optional
      3D-, schattierter oder dnner Rand (Modi POPUP_3D, POPUP_NO_SHADOW)
      sowie optionaler Funktionszeiger, der bei jeder nderung der Selektion
      aufgerufen wird, inverses Popup-Cycle)
    - optional vollautomatische Popups (XPOPUP-Struktur, neue Nachricht
      'POPUP_CHANGED' sowie erweiterte Nachricht 'MN_SELECTED', s.
      Parameter 'popup' der Funktion open_dialog())
    - bei Hotkeys mu jetzt in nicht-modalen Fensterdialogen immer die
      Alternate-Taste gedrckt werden; durch die Control-Taste lt sich ein
      Rechtsklick simulieren
    - Anpassung an neuere Versionen des AV-Protokolls (u.a. AV_STARTED)
      und Untersttzung von AV_OPENWIND/AV_XWIND (Umwandlung in Nachricht
      OBJC_DRAGGED, s. Anleitung), Quoting von Dateinamen sowie Protokoll-
      Initialisierung berarbeitet, AV_PATH_UPDATE wird bei scrp_changed
      nicht mehr verschickt
    - XAcc-Protokoll unter TOS bei Accessories verbessert (neue Nachricht
      XACC_AV_CLOSE)
    - alle Fenster (auch Alertboxen) werden wieder bei einem AV-Server ange-
      meldet
    - Funktion AvSendMsg() leitet Nachrichten an die eigene Applikation
      in den internen Nachrichtenpuffer um
    - deutlich beschleunigte Ereignisauswertung unter MTOS (Tastendrcke
      und Fensterelemente)
    - neue Nachricht 'WIN_NEWTOP', wenn ein anderes Fenster nach oben ge-
      holt wurde (s. Anleitung)
    - neue Nachricht 'SLIDER_CHANGED', wenn sich die (Cursor-) Position
      eines vollautomatischen Sliders gendert hat
    - Hintergrundbedienung bei alten AES-Versionen (<3.30, kein Winx)
      verbessert (schnellere Reaktion auf Mausklicks)
    - Optik und Bedienung des ASCII-Zeichendialogs verbessert, u.a. ist
      jetzt bei einem Aufruf die Auswahl von mehreren Zeichen mglich
    - neues Radiobutton-Image (radio_image(8,NULL)) und neues Cyclebutton-
      Image (cycle_image(2,NULL,0))
    - Funktionen ob_set_text() und ob_get_text() funktionieren auch beim
      Objekt-Typ G_ICON
    - Hotkeys werden jetzt bei der Resource-Initialisierung korrekt und
      besser positioniert und knnen auch erweitertem Attribut-Text zuge-
      ordnet werden
    - whrend dem "Fliegen" eines Dialogs werden jetzt Ereignisse ausgewer-
      tet
    - die XAcc/AV-Untersttzung der Applikation wird jetzt in die interne
      XAcc/AV-Liste integriert und kann somit mit Hilfe der Funktionen
      find_id, find_xacc_xdsc und find_app ebenfalls ermittelt werden
    - Fensterdialoge (u.a. applikations-modale Alertboxen) lassen sich
      durch Anklicken eines nicht selektier-/editierbaren Objekts und
      Gedrckthalten der linken Maustaste optional verschieben.
    - bei aktiver Hintergrundbedienung werden Hintergrundfenster nach
      einen kurzen Linksklick auf ein nicht selektier-/editierbares
      Objekt nach vorne gebracht
    - vollautomatische Verwaltung des Mauszeigers (Funktion window_mouse()
      entfernt), wobei jetzt die Mausform auch bei Fensterdialogen per
      window_set_mouse() festgelegt werden kann.
    - ASCII-Zeichendialog und Alertboxen knnen mehrfach geffnet werden
    - Echtzeitschieber knnen flexibler gestaltet werden (z.B. beliebiger
      Rand)
    - Echtzeitschieber und fliegende Dialoge knnen durch einen kurzen
      Klick (auf das Flugobjekt) an die Maus angehngt werden, d.h. werden
      durch nochmaligen Klick positioniert
    - EGEM-Accessories tragen sich frher im ACC-Men ein
    - ikonifizierte Fenster knnen nicht mehr im Hintergrund bedient werden
    - ICFS-Ikonifizierung verbessert (s. Anleitung)
    - Popups knnen AES-3D-Effekte besitzen
    - Funktion 'CycleCloseWindows' entfernt (durch MenuItems() ersetzt)
    - Konstanten SET_STATE/CLEAR_STATE/FLIP_STATE wieder entfernt (neuer
      Aufruf der Funktionen ob_select/ob_disable s. Anleitung)
    - Nachricht OBJC_SIZED wird jetzt auch beim Verschieben von fliegenden
      Dialogen verschickt
    - ob_set_hotkey() funktionierte nicht korrekt bei den Objekttypen
      G_FTEXT und G_FBOXTEXT
    - bei 3D-Objekten verschwanden die Hotkeys nach einer Selektierung
    - fix_objects() zerstrte bei einem Objekt-Baum, der nur ein Objekt
      enthielt, meistens mehr oder weniger viel Speicher hinter diesem Baum
    - fehlerhafte Darstellung mancher erweiterter Objekte unter TOS 4.01/2
      behoben
    - Auflsungswechsel-Untersttzung unter MTOS funktionierte nicht
    - Probleme mit appl_getinfo- und Winx-Erkennung sowie bei appl_search()-
      Aufrufen behoben
    - Control-Tastendrcke wurden bei geffneten Dialogen ohne Eingabe-
      felder nicht an den Event-Handler weitergeleitet (stattdessen wurde
      X_Form_Do verlassen)
    - fehlende wind_update()-Klammerung bei Fileselect()-Funktion integriert
    - erweiterte Rechteck-Events MU_M3/4 fhrten zu Abstrzen
    - unter SingleTasking (TOS) konnte es im Programmbetrieb zu Endlos-
      schleifen kommen, wenn eine Tastatureingabe in einem Fenster nicht
      ausgewertet wurde
    - an den Event-Handler der Applikation wurden teilweise Events geliefert,
      die von der Library angefordert wurden
    - Tastatur-Bedienung von Popups war teilweise fehlerhaft
    - VSCR-Cookie wurde nicht korrekt ausgewertet
    - Konnte ein Fensterdialog nicht geffnet werden, so war der fliegende
      Dialog anschlieend nicht umrandet Rand (Dialog-Modus AUTO_DIAL)
    - kleinere Anpassungen an GNU-C
