WINX Dokumentation                                                    
----------------------------------------------------------------------

OK, OK, hier fehlt noch 'ne Menge Doku ;-)

Aber immerhin gibt es bisher die folgende Seiten:

Dokumentation zur WINX-Konfiguration
Bootvorgang
GEM 3.xx Erweiterungen
Externe Erweiterungen
WINX Dokumentation fr Entwickler


WINX Dokumentation                                  WINX Konfiguration
----------------------------------------------------------------------

Willkommen bei der Dokumentation des WINX-Konfigurationsmoduls fr das
modulare Kontrollfeld XCONTROL bzw. kompatible Programme.

Falls Ihnen WINX noch nichts sagt, dann sollten sie sich vielleicht
zunchst die entsprechenden Dokumentation ansehen (->WINX).

Das Konfigurationsmodul gibt es auch als eigenstndige Anwendung
WINXCONF, die alternativ zum CPX eingesetzt werden kann, falls man
XCONTROL nicht benutzen will.

Das Kontrollfeldmodul gliedert sich in mehrere Bereiche zur Einstellung
von Optionen. Die Umschaltung erfolgt ber das Popup links oben im Dialog.
Im einzelnen sind folgenden Bereiche vorhanden.

    WINX Copyright, Globale Schalter, Lokale Schalter,
    Wiederholraten,  Rahmenfont

Alle Bereich haben eine eigene Hilfeseite, die ber die HELP-Taste
aus dem Dialog aufgerufen werden kann.

Die Fensterverwaltung von WINX stellt Iconify ber den Iconserver
ICFS bereit. Dieses Feature kann somit durch Deaktivieren von ICFS
abgeschaltet werden.


WINX Konfiguration                                      WINX Copyright
----------------------------------------------------------------------

Freeware, (c) 1991-1996 Martin Osieka

Adresse:  Martin Osieka, Erbacher Str. 2, 64283 Darmstadt
Internet: Martin_Osieka@of2.maus.de
Maus-Net: Martin Osieka @ of2

Schriftlichen Anfragen bitte immer einen adressierten und frankierten
Rckumschlag beilegen. Anfragen ber E-Mail werden jedoch bevorzugt.

Die Benutzung dieser Software geschieht auf eigenes Risiko!


WINX Konfiguration                                    Globale Schalter
----------------------------------------------------------------------

Globale Schalter dienen zur Konfiguration allgemeiner Eigenschaften
des GEM.

Folgende globalen Schalter gibt es:

    G1: 40 Fenster (sonst 8)        G2: Rechtsklick an SCRENMGR
    G3: Linksklick Echtzeitfkt.     G4: Scrollpfeile selekt.
    G5: Scrollbalken selekt.        G6: Mover selektieren
    G7: Sizer selektieren           G8: Breite Sliderumrahmung
    G9: CONTROL modifiziert         G10: BackDrop ermglichen
    G11: 3D-Fensterrahmen           G12: Muster korrigieren
    G13: PRG-Namen bernehmen       G14: Spez. Echtzeitmausform

Bis auf die globalen Schalter G1 und G11 wirken sich alle anderen
sofort aus. So kann man das unterschiedliche Verhalten gut testen.


WINX Konfiguration        Beschreibung der einzelnen globalen Schalter
----------------------------------------------------------------------

G1: 40 Fenster (sonst 8)
    Mit diesem Schalter kann man Maximalzahl der Fenster auf 40 erhhen.
    Allerdings beschrnken einige Programme und auch das integrierte
    Desktop selbst die Anzahl ihrer Fenster. Eines der Fenster ist
    brigens immer fr den Bildschirmhintergrund reserviert. Abschalten
    sollte man den Schalter nur bei extremem Speichermangel oder
    einigen wenigen lteren Programmen, die nicht mit Fensterkennungen
    grer 7 zurechtkommen.

G2: Rechtsklick an SCRENMGR
    Dieser Schalter bewirkt, da auch Klicks mit der rechten Maustaste
    auf den Fensterrahmen an den Fenstermanager weitergemeldet werden
    (sonst an die Applikation). Schaltet man diesen Schalter ab, dann
    sind alle Funktionen, die unter WINX ber die rechte Maustaste aus-
    gelst werden, ber Doppelklick mit der linken Maustaste erreichbar.

G3: Linksklick Echtzeitfkt.
    Da die Echtzeit-Funktionalitt fr Sliden, Verschieben und Vergrern
    die natrlichere ist, liegt sie normalerweise auf der linken und die
    normale Funktionalitt auf der rechten Maustaste. Wem dies zu unge-
    wohnt ist, kann dies durch Ausschalten dieses Schalters vertauschen.
    Nicht vergessen: Ist G2 ausgeschaltet, werden die Funktionen auf
    der rechten Maustaste mit Doppelklick links erreicht!

G4: Scrollpfeile selektieren
    Schalter eingeschaltet: Scrollpfeile selektieren sobald sie ange-
    klickt werden. Selektieren bedeutet entweder invertieren oder unter
    3D eindrcken.

G5: Scrollbalken selektieren
    wie G4, nur fr Scrollbalken
    MO: Dieser Schalter wird in der Regel abgeschaltet

G6: Mover selektieren
    wie G4, nur fr Mover-Kontrollelement

G7: Sizer selektieren
    wie G4, nur fr Sizer-Kontrollelement

G8: Breite Sliderumrahmung
    Die Umrahmung des Hintergrundobjekts des Scrollbalkens ist bei
    eingeschaltetem Schalter 2 Pixel, sonst 1 Pixel.

G9: CONTROL modifiziert
    Um hintere Fenster auch durch Klick auf den Fensterrahmen aktivieren
    zu knnen, gibt es diesen Schalter. Ist er eingeschaltet, dann wird
    das Fenster aktiviert, falls beim Klick die CONTROL-Taste gedrckt
    ist (handelt es sich um das oberste Fenster, dann wird es deaktiviert).
    Dieser Schalter ist natrlich vorallem sinnvoll, falls ber L1 die
    Kontrollelemente fr hintere Fenster aktiviert sind.

G10: BackDrop ermglichen
    Dieser Schalter bewirkt, da das oberste Fenster bei Einfachklick
    mit der linken Maustaste auf den Mover deaktiviert (nach hinten
    gelegt) wird, falls die Applikation, der das Fenster gehrt, die
    entsprechende Nachricht versteht und akzeptiert.

G11: 3D-Fensterrahmen   (ab GEM 3.31)
    Wen der 3D-Effekt der neueren AES-Versionen fr den Fensterrahmen
    strt (vorallem auf schwarz/wei Bildschirmen), der kann durch
    Ausschalten dieses Schalters den Rahmen in 2D darstellen lassen.

G12: Muster korrigieren
    Dieser Schalter bestimmt, da der Bezugspunkt eines Muster mit
    dem ein AES-Objekt ausgegeben wird beim Objekt liegt (sonst in der
    linken oberen Bildschirmecke). Ist der Bezugspunkt beim Objekt,
    dann ist das Aussehen des Objekts nicht abhngig von seiner
    Position, wodurch einige Ausgabeoptimierungen mglich sind, ohne
    da Unsauberkeiten bei der teilweisen Ausgabe von Objekten
    entstehen.

G13: PRG-Namen bernehmen
    Bewirkt, da beim Start eines Programms (auch als Overlay) sein
    Name immer ins AES bernommen wird und somit das Programm auch
    ber die entsprechende AES-Funktion als aktiv identifiziert werden
    kann. Nur wenn dieser Schalter eingeschaltet ist, ist das korrekte
    Setzen der lokalen Schalter in jedem Fall garantiert (ansonsten)
    gelten die Einstellungen des Aufrufers weiter).

G14: Spez. Echtzeitmausform
    Normalerweise wird bei Echtzeitfunktionen eine besondere Mausform
    dargestellt, um dem Anwender ein Feedback ber den Modus zu geben,
    in dem er sich befindet. Schaltet man den Schalter ab, dann wird
    der normale Mauspfeil verwendet (dies ist offenbar bei einer
    bestimmten Grafikkarte notwendig)


WINX Konfiguration                                     Lokale Schalter
----------------------------------------------------------------------

Lokale Schalter dienen zur Konfiguration individueller Eigenschaften
von Applikation. Neben einer Grundeinstellung fr alle Applikationen
("Default") kann fr das integrierte Desktop ("GEM-Desk") und fr bis
zu 30 weitere Applikationen ein eigener Satz lokaler Schalter definiert
werden.

Folgende lokalen Schalter gibt es:

    L1: Hintere F. bedienbar        L2: Rahmengre minimieren
    L3: Neue Nachrichten senden     L4: Aktivieren optimieren
    L5: Verschieben optimieren      L6: Vergrern optimieren
    L7: Redraws zusammenfassen      L8: Fehlermeldungen zeigen
    L9: Scrollpfeile trennen        L10: Scrollpfeile mit -boxen
    L11: Fenster auch links raus    L12: F.gre korrigieren

Im Dialog wird jeweils der komplette Satz von lokalen Schaltern fr
eine Applikation dargestellt. Der Name der Applikation ist rechts oben
in einem Popup sichtbar. ber dieses Popup kann auch in der Liste
der Applikationen, fr die bereits ein Satz lokaler Schalter definiert
ist, hin- und hergeschaltet werden. Im Popup erscheinen auch die Ein-
trge fr "Default" und "GEM-Desk".

Die Applikationsliste kann ber die Knpfe [Anfgen] und [Lschen] ver-
ndert werden. [Lschen] entfernt den Satz lokaler Schalter der gerade
im Dialog sichtbaren Applikation aus der Liste. "Default" und "GEM-Desk"
knnen nicht gelscht werden. [Anfgen] zeigt eine Dateiauswahlbox an,
ber die eine Applikation ausgewhlt werden kann. Sie knnen aber auch
einen beliebigen Dateinamen eingeben, ohne da die Applikation vorhanden
ist. Weder der Ordner in der sich die Applikation befindet noch ein
mglicher Suffix (wie z.B. ".PRG") wird fr den Namen in der Applikations-
liste bercksichtigt.

Zunchst sollte man die Grundeinstellung der lokalen Schalter vornehmen
indem man ber das Popup der Applikationsliste "Default" auswhlt. Die
Standardeinstellung ist normalerweise fr alle Schalter des "Default"-
Satzes "eingeschaltet". Sagt Ihnen eine dieser Eigenschaften nicht zu,
dann schalten Sie sie einfach ber den jeweiligen Schalter ab.

Bentigt man nun fr eine einzelne Applikation oder das integrierte
Desktop eine Eigenschaft, die von den "Default"-Einstellungen abweicht,
dann whlt man die Applikation ber das Popup aus (falls sie noch
nicht in der Liste ist, mu man sie natrlich zunchst anfgen). Im
Gegensatz zu den lokalen Schalter fr "Default" knnen die anderen
3 Zustnde annehmen. Neben "eingeschaltet" und "ausgeschaltet" ist dies
"wie Default". Den "wie Default"-Zustand erkennt man daran, da der
Schalter schwarz hinterlegt ist. Ist ein Schalter im "wie Default"-
Zustand, dann gilt fr ihn die Einstellung des korrespondierenden
Schalters im Satz der lokalen Schalter fr "Default". D.h. wird der
Schalter im "Default"-Satz umgeschaltet, dann auch in der Applikation.
Fgt man eine neue Applikation an, dann sind zunchst alle ihre lokalen
Schalter im "wie Default"-Zustand.

Die Reihenfolge der Applikationen in der Applikationsliste spielt nur
eine Rolle, wenn man Wildcards im Applikationsnamen benutzt. Als
Wildcards sind '*' und '?' vorhanden. Dabei pat '*' auf eine beliebig
lange Zeichenkette und '?' auf genau ein Zeichen. Beim Aufruf einer
Applikation wird die Applikationsliste von oben nach unten nach einem
passenden Namen durchsucht. Der erste passende Name bestimmt die
lokalen Schalter der Applikation. Pat kein Name, dann werden die
lokalen Schalter von "Default" benutzt. Die Reihenfolge kann man beim
Anfgen festlegen, da Anfgen den neuen Namen immer hinter dem Namen
der gerade im Dialog sichtbaren Applikation anfgt.


WINX Konfiguration         Beschreibung der einzelnen lokalen Schalter
----------------------------------------------------------------------

L1: Hintere Fenster bedienbar
    Schaltet man diesen Schalter ein, dann bleiben die Kontrollelemente
    eines Fensters auch erhalten, wenn es deaktiviert (nach hinten
    gelegt wird). Sind Kontrollelemente sichtbar, dann sind sie unter
    WINX auch immer bedienbar.

L2: Rahmengre minimieren
    Die Gre des Fensterrahmen ist auch abhngig von der Art der
    Kontrollelemente die er besitzt. ber diesen Schalter kann man
    die Fensterverwaltung veranlassen, die Gre mglichst klein zu
    halten.

L3: Neue Nachrichten senden
    Da einige ltere Programme allergisch auf die neuen Nachrichten
    reagieren, die die Fensterverwaltung an das Programm schicken kann,
    kann man das Versenden der Nachrichten ber diesen Schalter
    verhindern. Normalerweise sollten Applikationen Nachrichten, die
    sie nicht verstehen, ignorieren.

L4: Aktivieren optimieren
    Bei eingeschaltetem Schalter werden beim Aktivieren eines Fensters
    nur die vorher verdeckten Bereiche des Fensters neu gezeichnet, was
    in der Regel schneller geschehen kann, als wenn das komplette
    Fenster ausgegeben wird.

L5: Verschieben optimieren
    wie L4, nur frs Verschieben

L6: Vergrern optimieren
    wie L4, nur frs Vergrern

L7: Redraws zusammenfassen
    Sorgt dafr, da Nachrichten fr das Neuzeichnen eines Fensters
    mglichst optimal zusammengefat werden, so da mglichst keine
    Mehrfachredraws entstehen.

L8: Fehlermeldungen zeigen
    Einige Programme haben kleinere Fehler im Umgang mit der Fenster-
    verwaltung, die unter WINX mit einem AES-Error quittiert werden.
    ber diesen Schalter kann man die Anzeige der Fehlermeldungen
    fr die entsprechende Applikation verhindern, da WINX die fehler-
    haften Aufrufe ja ignoriert. Trotzdem sollte man vorher den
    Autor des Programms ber die Fehlermeldung informieren.

L9: Scrollpfeile trennen
    In manchen Fllen ist es sinnvoll, wenn man die Scrollpfeile eines
    Fenster zusammenlegt. Dies kann man durch Ausschalten dieses
    Schalters erreichen. Die Scrollpfeile finden sich dann alle rechts
    unten auf dem Fensterrahmen.

L10: Scrollpfeile mit -boxen
    Scrollboxen sind ein spezielle Feature der WINX-Fensterverwaltung,
    Wer es nicht mag, der kann es mit diesem Schalter abschalten.

L11: Fenster auch links raus
    Normalerweise ist es fr Programme kein Problem, wenn ihre Fenster
    nicht nur rechts, sondern auch links aus dem Bildschirm geschoben
    werden knnen. Fr die Ausnahmen unter den Programmen ist dieser
    Schalter vorgesehen.

L12: F.gre korrigieren
    WINX verhindert normalerweise, da eine Fenstergre eingestellt
    wird, bei der nicht mehr alle Kontrollelemente auf dem Fensterrahmen
    dargestellt werden knnen. Auch das Verschieben eines Fensters in
    den Menzeilenbereich wird verhindert. Programme, die mit diesem
    Verhalten Probleme haben - in der Regel an fehlerhaftem Redraw er-
    kennbar -, knnen ber diesen Schalter befriedigt werden.


WINX Konfiguration                                      Wiederholraten
----------------------------------------------------------------------

Die Wiederholraten-Optionen dienen der Einstellung der Wartezeit bis
eine Aktion beim Klick auf ein Kontrollelement wiederholt wird
(solange man die Maustaste gedrckt hlt).

Fr die Scrollpfeile kann man eine Ansprechzeit und eine Wiederholrate
einstellen. Die Ansprechzeit ist die Wartezeit bis zur ersten Wieder-
holung der Scrollaktion, die Wiederholrate die Wartezeit zwischen
allen weiteren Wiederholungen. Oft stellt man die Wiederholrate auf
Null, da einem das Scrollen nicht schnell genug gehen kann. Auf
modernen Rechnern kann das Scrollen jedoch so schnell sein, da man
nichts mehr erkennen kann. In diesem Fall sollte man die Zeit etwas
vergrern. Voreingestellt sind die Zeiten, die auch fr die Tastatur
gelten. Natrlich ist die tatschliche Scrollgeschwindigkeit auch vom
der Art der gescrollten Objekte abhngig.

Im Gegensatz zu den meisten anderen AES-Implementierungen bietet WINX
eine Wiederholfunktion auch fr Closer und Fuller. Die entsprechenden
Werte sollten nicht zu klein gewhlt werden.

Die Wiederholraten-Optionen wirken sich sofort beim Einstellen aus.
So kann man leicht direkt an einem Scrollpfeil prfen, was fr eine
Auswirkung die Vernderung einer Wartezeit hat.


WINX Konfiguration                                          Rahmenfont
----------------------------------------------------------------------

Unter den Rahmenfont-Optionen hat man die Mglichkeit Zeichensatz und
Gre der Elemente der Fensterrahmen einzustellen. Dies wird meistens
benutzt um die Fensterrahmen zu verkleinern.

Zeichenstze werden normalerweise ber GDOS dem System zur Verfgung
gestellt. Will man jedoch auf GDOS verzichten, weil z.B. der Speicher-
platz knapp ist, kann man WINX dazu veranlassen einen Zeichensatz als
zustzlichen Systemfont zu installieren. Diesen Zeichensatz kann man
ber den Knopf [ohne GDOS...] auswhlen. Erlaubt sind allerdings nur
Bitmap-Fontdateien (dies liegt in der Verantwortung des Anwenders!).

Schaltet man die Zeichensatz-Option ein, kann man im Feld darunter
ID und Gre des Zeichensatzes eingeben. Da man diese Werte in der
Regel nicht im Kopf hat, kann man zur Eingabe auch einen Fontselektor
ber den [Auswhlen]-Knopf aufrufen. Ist die Zeichensatz-Option aus-
geschaltet oder wird der Zeichensatz beim Neustart nicht gefunden,
dann wird der normale Zeichensatz des GEM benutzt.

ber die Option Zeichenzellenanpassung kann man die Gre der Kontroll-
elemente des Rahmens einstellen. Ist die Option abgeschaltet, wird eine
quadratische Box um das Zeichen im Kontrollelement benutzt. Ansonsten
wird die zeichensatz-spezifische Gre der Kontrollelementezeichen
vergrert um den horizontalen und vertikalen Wert benutzt.

ACHTUNG:
Eine nderung der Rahmenfont-Optionen wirkt sich erst nach einem
Neustart aus (Sichern nicht vergessen!)

HINWEIS:
Unter AES-Versionen mit 3D-Effekt kann man weitere 4 Pixel in Breite
und Hhe sparen, wenn man den 3D-Effekt fr den Rahmen abschaltet (G11).


WINX Konfiguration                                        Fontselektor
----------------------------------------------------------------------
Ein Fontselektor (Zeichensatzauswahlbox) ist ein Dialog zur Auswahl
eines Zeichensatzes und seiner Gre. Da im TOS kein Fontselektor
integriert ist, mu man ein entsprechendes Zusatzprogramm installieren
(in der Regel im AUTO-Ordner).

Das Kontrollfeldmodul fr WINX untersttzt Fontselektoren mit einer
xFSL-Schnittstelle. Diese wird momentan (1/96) von den Fontselektoren
Calvino, FontSel und HuGo! angeboten.

Mglicherweise werden sie in der Zeichensatzliste einige ihrer
installierten Zeichenstze vermissen. Dies liegt dann daran, da diese
Zeichenstze nicht die geforderten Eigenschaften haben (z.B. drfen
die Zeichen fr Scrollpfeile nicht fehlen). Man kann die Einschrnkung
der Zeichenstze in der Liste verhindern (und so beim Aufruf des Font-
selektors eventuell viel Zeit sparen), wenn man eine SHIFT-Taste
beim Klick auf den [Auswhlen]-Knopf gedrckt hlt. Dann ist man selbst
dafr verantwortlich einen geeigneten Zeichensatz zu whlen.


WINX Konfiguration                    Die Konfigurationsdatei WINX.INF
----------------------------------------------------------------------
Die Datei WINX.INF enthlt alle Optionen, die ber das Kontrollfeld-
modul fr WINX eingestellt werden knnen. WINX.INF wird beim Start
des GEM aus dem AUTO-Ordner in den Speicher geladen, falls die WINX-
Externals installiert sind.

Einige der Optionen in WINX.INF werden nur beim Start des GEM, andere
jedesmal beim Start einer Applikation und wieder andere laufend aus-
gewertet. So kann die Maximalzahl von Fenstern oder der Zeichensatz
fr Fensterrahmen nur beim Start ausgewertet werden. Eine nderung der
Wiederholraten wirkt sich jedoch sofort aus.

Das Kontrollfeldmodul stellt beim ffnen die Optionen der WINX.INF im
Speicher dar. Verlt man das Kontrollfeldmodul ber den [OK]-Knopf,
dann wird nur die WINX.INF im Speicher verndert. [Sichern] hingegen
ndert die WINX.INF im Speicher UND im AUTO-Ordner, so da die
Optionen beim nchsten Neustart noch vorhanden sind.

Sind die externen Erweiterungen nicht installiert, dann wird WINX.INF
beim Start des GEM nicht geladen und kann somit auch nicht im Speicher
verndert werden.

Beim Aufruf des Konfigurationsmoduls wird dieser Fall erkannt und
statt des [Sichern]-Knopfes erscheint ein [WINX.INF]-Knopf. ber
diesen Knopf kann man nun die Optionen einer WINX.INF-Datei explizit
in das Konfigurationsmodul laden bzw. sie in der Datei speichern.

Verlt man in dieser Situation das Konfigurationsmodul ber den [OK]-
Knopf, dann erhlt man eine Warnung, da die Optionen nicht in die
WINX.INF-Datei im Speicher bernommen werden knnen und hat dann die
Mglichkeit nocheinmal zurckzugehen und die Einstellungen zu
speichern.

Die WINX.INF-Datei kann auch beim Erstellen einer gepatchten TOS-Datei
benutzt werden. In diesem Fall werden die Einstellungen fr die
globalen und die lokalen Schalter (fr Default und GEM-Desk) in den
Patch bernommen und sind somit auch ohne die WINX-Externals aktiv.

WINX.INF ist eine normale Textdatei, die mit einem Editor bearbeitet
werden kann. Prinzipiell sollte man alle nderungen aber ber das
Kontrollfeldmodul vornehmen.


WINX Dokumentation                                         Bootvorgang
----------------------------------------------------------------------
Zunchst erscheint beim Start von WINX whrend des Bootens die
obligatorische Copyright-Meldung:

    (\/) WINX vX.Y
    (c) Martin Osieka

Danach versucht WINX zunchst das GEM zu identifizieren und testet,
ob es im RAM liegt, damit es gepacht werden kann.

Kann das GEM gepatcht werden, wird die Versionsnummer des GEM und die
Art des gepatchten GEM ausgegeben:

    Modifiziertes GEM:  X.XX (YYY)

        YYY kann hier sein:
        LineF (nur bei TOS <= 1.04), GEMRAM
        ROMRAM, VRAM, ROMSPEED, OUTSIDE

Danach wird im AUTO-Ordner des Bootlaufwerks nach der Konfigurations-
datei WINX.INF gesucht und der Zugriffspfad ausgegeben (bzw. Default):

    Konfiguration:  C:\AUTO\WINX.INF

Dieser Zugriffspfad wird auch vom WINX-Konfigurationsprogramm zum
Sichern der Einstellungen benutzt.

Jetzt wird eine Meldung ber den dynamischen Speicherbedarf von
WINX ausgegeben, der zustzlich bentigt wird sobald das GEM nach
der Abarbeitung der Programme im AUTO-Ordner startet:

    Dyn. Speicherbedarf:    XXXXX Bytes

Abgeschlossen wird die Ausgabe mit einer Meldung ber den residenten
Speicherbedarf von WINX. Der residente Speicher bleibt bestehen, wenn
WINX.PRG seinen Bootaufruf beendet. In ihm sind z.B. die externen
WINX-Erweiterungen (wie die WindowShade-Funktionen) enthalten.

    TKR: Keep YYYYY bytes im nemory.

Der Bootvorgang von WINX kann brigens abgebrochen werden, falls beim
Start von WINX.PRG eine SHIFT-Taste gedrckt ist.

Ist das GEM beim Start von WINX bereits gepatcht, dann werden nur die
externen Erweiterungen installiert.


WINX Dokumentation                              GEM 3.xx Erweiterungen
----------------------------------------------------------------------
GEM 3.xx (ab TOS 2.00) ist deutlich grer als die vorherigen Versionen
und enthlt daher auch mehr Raum zum Patchen. In der Folge sind die
WINX-Patches aufgefhrt, die in den lteren GEM-Versionen nicht
vorhanden sind:

a) Aus Sicht des Anwenders:

- Scrollboxen mit variierbarer Scrollgeschwindigkeit
    (nur falls auch L10 eingeschaltet ist)
- Positionierung an Anfang oder Ende des Scrollbereichs auf Mausklick
- Positionierung innerhalb des Scrollbereichs auf Mausklick
- Fensterslider in Echtzeit verndern
- Fensterposition in Echtzeit verndern
- Fenstergre in Echtzeit verndern
- Spezielle Mausform whrend Echtzeitfunktionen
    (nur falls auch G14 eingeschaltet ist)
- Wiederholfunktion fr Closer- und Fuller-Kontrollelement
- 'AES-Error'-Meldungen
    (nur mit WINX-Externals und falls auch L8 eingeschaltet ist)
- optimiertes Redraw beim Vergrern
    (nur falls auch G14 eingeschaltet ist)
- 3D-Fensterrahmen abschaltbar
    (nur ab GEM 3.31 (TOS 4.xx) ber den Schalter G11)
- 3D-Effekt einzelner Kontrollelement ber WinColor.cpx einstellbar.
    (nur ab GEM 3.31 und falls auch G11 eingeschaltet ist)

b) Aus Sicht des Entwicklers:

- erweiterte WM_ARROWED-Nachrichten
- Redraw-Nachrichten werden intelligent Verschmolzen. Eine der Be-
    dingungen ist z.B. da die Gesamtflche nur um einen bestimmten
    Prozentsatz grer als die Summe der Einzelflchen werden darf.
    Allerdings sind momentan max. 2 Nachrichten pro Fenster mglich,
    so da in einigen Fllen doch verschmolzen werden mu.
    (nur falls auch L7 eingeschaltet ist)
- optimiertes Redraw beim Vergrern, nur die neu sichtbar werdenden
    Bereiche werden an Applikation gemeldet.
    (nur falls auch G14 eingeschaltet ist)


WINX Dokumentation                               Externe Erweiterungen
----------------------------------------------------------------------
Da im GEM nur beschrnkter Platz zum Patchen vorhanden ist, mu ein
Teil der WINX-Erweiterungen extern bereitgestellt werden. Dies
geschieht beim Booten mit WINX im AUTO-Ordner automatisch. Die
WINX-Externals sind vorhanden, falls der WINX-Cookie angelegt wurde.

Ein mit WINX gepatches GEM arbeitet ohne externe Erweiterungen
zumindest nicht schlechter als ein GEM ohne Patches. Will man jedoch
die WINX-Externals nutzen, mu auch hier WINX im AUTO-Ordner vorhanden
sein. WINX erkennt dann, da das GEM bereits die WINX-Patches enthlt
und installiert nur die WINX-Externals.

Zusammenfassung der externen Erweiterungen:

a) Aus Sicht des Anwenders:

- 'AES-Error'-Meldungen
    (nur in GEM 3.xx und falls auch L8 eingeschaltet ist)
- Korrektur von Fensterposition und -gre, so da Fenster nicht in
    Menzeile geraten oder zu klein werden.
    (nur falls auch L12 eingeschaltet ist)
- Iconify
    (nur falls auch ICFS installiert ist)
- WindowShade
- Selbstadaptierende Kontrollelemente
- Auswertung von WINX.INF beim Booten
- Individuell einstellbare lokale Schalter
- Fensterrahmenfont und -gre der Kontrollelemente einstellbar
- DPATLINK zur Anbindung von Schreibtischhintergrnden wird nicht
  bentigt
- Alle Fenster einer Applikation knnen aufeinmal nach vorne bzw.
  hinten gebracht werden
- AutoBackDrop bei einem offenen Fenster

b) Aus Sicht des Entwicklers:

- wind_set(): WF_KIND, WF_SHADE, WF_STACK, WF_TOPALL, WF_BOTTOMALL
- wind_set(): WF_ICONIFY, WF_UNICONIFY, WF_UNICONIFYXYWH
    (nur falls auch ICFS installiert ist)
- wind_get(): WF_KIND, WF_SHADE
- wind_get(): WF_ICONIFY, WF_UNICONIFY
    (nur falls auch ICFS installiert ist)
- Nachrichten: WM_SHADED, WM_UNSHADED
    (nur falls auch L3 eingeschaltet ist)
- Nachrichten: WM_ICONIFY, WM_UNICONIFY, WM_ALLICONIFY
    (nur falls auch ICFS installiert ist)
- appl_getinfo( 11): WF_ICONIFY-, WF_UNICONIFY- und SMALLER-Flag
    (nur falls auch ICFS installiert ist)
- appl_getinfo( 12): WM_ICONIFY-, WM_UNICONIFY-, WM_ALLICONIFY-
    und IconCoordinates-Flag
    (nur falls auch ICFS installiert ist)
- appl_getinfo( 22360): WINX like extensions
- Korrektur der Fensterkoordinaten bei wind_set( WF_CURRXYWH),
    wind_open(), wind_set( WF_KIND), erweitertes wind_calc()
    (nur falls auch L12 eingeschaltet ist)
- Mit Pexec() nachgeladene Applikationen ersetzen den Namen der
    aufrufenden Applikation im AES, solange sie aktiv sind.
    Damit knnen sie mit appl_find() im AES gefunden werden.
    (nur falls auch G13 eingeschaltet ist).


WINX Dokumentation                   WINX Dokumentation fr Entwickler
----------------------------------------------------------------------

WINX modernisiert und erweitert die Programmierschnittstelle des AES.
Modernisiert bedeutet, da einige MultiTOS-Funktionen jetzt auch unter
SingleTOS zur Verfgung stehen (vorallem in der Fensterverwaltung).
Erweitert steht fr verschiedene WINX-Features wie WindowShade.

appl_...-Funktionen und -Erweiterungen
wind_...-Funktionen und -Erweiterungen
AES-Nachrichten
Bemerkungen zu Iconify
Eine C-Headerdatei fr WINX-Erweiterungen: WINX.H


WINX Dokumentation fr Entwickler                             appl_...
----------------------------------------------------------------------

appl_find
appl_getinfo


appl_...                                                     appl_find
----------------------------------------------------------------------

int appl_find( const char *appAESName);

Liefert zu einem AES-Namen einer Applikation oder eines Accessories
dessen AES-Kennung, falls es im System aktiv ist, sonst NOAPP.

Ein AES-Name besteht aus den ersten 8 Zeichen des Namensanteils eines
Dateinamens (bis zum ersten '.'). Ist dieser Name krzer als 8 Zeichen,
wird er mit Leerzeichen aufgefllt. So ist z.B. "DEMO    " der AES-Name
von "C:\PROGRAMM\DEMO.PRG".

Der AES-Name wird unter SingleTOS beim Start einer Applikation oder
eines Accessories ber shel_write() gespeichert. WINX sorgt dafr,
da der Name auch beim Start ber Pexec gesetzt wird (G13). Dies war
notwendig, da viele Programme andere mit Pexec nachstarten und diese
dann nicht mit appl_find identifiziert werden konnten. Unter MultiTOS
wird der Name auch gespeichert sobald eine Applikation appl_init()
aufruft (MO: dies ist eigentlich die sinnvollste Lsung).

Seit dem ersten TOS gibt es eine Methode, wie eine Applikation ihren
AES-Namen selbst setzen kann (menu_register( NOAPP, newAESName)).
Mittlerweile hat ATARI dies auch dokumentiert. Normalweise sollten
Applikationen jedoch darauf verzichten. Sinnvoll kann das Setzen des
AES-Namens fr alternative Desktops sein.

Einige AES-Namen sind vordefiniert:
"SCRENMGR": Bildschirmmanager.
"        ": Integriertes Desktop.
"?AGI    ": appl_getinfo() bei AES-Versionen < 4.00 vorhanden
            (In Mag!C und WINX implementiert)


appl_...                                                  appl_getinfo
----------------------------------------------------------------------

int appl_getinfo( int type, int *out1, int *out2, int *out3, int *out4);
    ->type: Art der angefordeten Information
    <-out1..out4: Informationen

Liefert Informationen vom Typ <type> ber das aktive AES in <out1>
bis <out4>. Sind die Informationen vom angeforderten Typ verfgbar,
liefert die Funktion den Wert 1, sonst 0.

AGI_REGULARFONT         0  Standardzeichensatz
AGI_SMALLFONT           1  Kleiner Zeichensatz
AGI_COLORS              2  Auflsung und Farben
AGI_LANGUAGE            3  Sprache
AGI_ENVIRONMENT1        4  Diverses 1
AGI_ENVIRONMENT2        5  Diverses 2
AGI_ENVIRONMENT3        6  Diverses 3
AGI_OSEXTENSIONS        7  Infos von Systemerweiterungen
AGI_MOUSE               8  Infos zu Mausfunktionen
AGI_MENU                9  Infos zu Menfunktionen
AGI_SHELWRITE          10  Infos zu shel_write
AGI_WINDOW             11  Infos zu Fenstern
AGI_MESAG              12  Infos zu AES-Nachrichten
AGI_OBJECT             13  Infos zu Objekten
AGI_FORM               14  Infos zu Formularen
AGI_WINX            22360  Infos zu WINX

WINX implementiert momentan die Informationstypen AGI_WINDOW, AGI_MESAG
und AGI_WINX (siehe WINX.H). Einige Informationen sind jedoch nur ver-
fgbar, falls die WINX-Externals installiert sind.

Prinzipiell war es sinnvoll, da unter MultiTOS diese Funktion einge-
fhrt wurde. So ist es einem Programm jetzt mglich sich optimal an
seine Laufzeitumgebung anzupassen. Leider kann die Funktion nicht
unter SingleTOS-Versionen aufgerufen werden, da man sonst vom AES mit
einem Alert bestraft wird. Einige Entwickler von alternativen AES-
Versionen bzw. AES-Patches haben sich darauf geeinigt appl_getinfo()
zu implementieren und dies ber appl_find( "?AGI    ") abfragbar zu
machen. Liefert dieser Aufruf einen Wert != NOAPP, dann kann
appl_getinfo() aufgerufen werden, ohne da man ein Alert erhlt. Der
Funktionswert ist immer zu berprfen.

Ein Beispiel in C zeigt, wie man diesen appl_getinfo()-Test in einer
Funktion kapseln kann, die man dann statt appl_getinfo() aufruft:

int ApplGetInfo( int type, int *out1, int *out2, int *out3, int *out4)
{
    static hasApplGetInfo = -1;
    int back;

    if (hasApplGetInfo < 0) {
        if (aesVersion >= 0x0400) {
            hasApplGetInfo = 1;
        }
        else if (appl_find( "?AGI    ") != NOAPP) {
            hasApplGetInfo = 1;
        }
        else {
            hasApplGetInfo = 0;
        }
    }

    if (hasApplGetInfo) {
        back = appl_getinfo( type, out1, out2, out3, out4);
    }
    else {
        back = 0;
    }

    if (back == 0)
        *out1 = *out2 = *out3 = *out4 = 0;

    return back;
} /* ApplGetInfo */


appl_getinfo                                                AGI_WINDOW
----------------------------------------------------------------------

AGI_WINDOW (=11):    Infos zu Fenstern

out1: Bitvektor fr neue WF_-Funktionen in wind_get/wind_set

AGI1_WFTOP          $0001  WF_TOP liefert Fenster unter dem obersten
AGI1_WFNEWDESK      $0002  wind_get(WF_NEWDESK) vorhanden
AGI1_WFCOLOR        $0004  WF_COLOR get/set vorhanden
AGI1_WFDCOLOR       $0008  WF_DCOLOR get/set vorhanden
AGI1_WFOWNER        $0010  WF_OWNER vorhanden fr wind_get
AGI1_WFBEVENT       $0020  WF_BEVENT get/set vorhanden
AGI1_WFBOTTOM       $0040  WF_BOTTOM vorhanden
AGI1_WFICONIFY      $0080  WF_ICONIFY vorhanden
AGI1_WFUNICONIFY    $0100  WF_UNICONIFY vorhanden

out2: Reserviert

out3: Bivektor neuer Kontrollelemente auf Fensterrahmen

AGI3_SMALLER        $0001  Iconifier vorhanden
AGI3_BOTTOMER       $0002  Expliziter Bottomer vorhanden
AGI3_SCBOTTOM       $0004  SHIFT+CLICK um BackDrop auszulsen
AGI3_HOTCLOSE       $0008  "Hot" Closer

out4: wind_update check&set Modus

AGI4_UPDCHKSET      1       Modus ist vorhanden


appl_getinfo                                                 AGI_MESAG
----------------------------------------------------------------------

AGI_MESAG (=12):    Infos zu Nachrichten

out1: Bitvektor fr neue AES-Nachrichten

AGI1_WMNEWTOP       $0001  WM_NEWTOP Nachricht hat Bedeutung
AGI1_WMUNTOPPED     $0002  WM_UNTOPPED Nachricht wird versandt
AGI1_WMONTOP        $0004  WM_ONTOP Nachricht wird versandt
AGI1_APTERM         $0008  AP_TERM Nachricht wird versandt
AGI1_SHUTDOWN       $0010  MultiTOS ShutDown und Auflsungswechsel
                           Nachrichten werden versandt
AGI1_CHEXIT         $0020  CH_EXIT Nachricht wird versandt
AGI1_WMBOTTOMED     $0040  WM_BOTTOMED Nachricht wird versandt
AGI1_WMICONIFY      $0080  WM_ICONIFY Nachricht wird versandt
AGI1_WMUNICONIFY    $0100  WM_UNICONIFY Nachricht wird versandt
AGI1_WMALLICONIFY   $0200  WM_ALLICONIFY Nachricht wird versandt

out2: Bitvektor fr neue AES-Nachrichten II

out3: Bitvektor zur genaueren Beschreibung von Nachrichten

AGI3_ICONCOORS      $0001  WM_ICONIFY-Nachricht liefert Koordinaten

out4: Reserviert


appl_getinfo                                                  AGI_WINX
----------------------------------------------------------------------

AGI_WINX (=22360):    Infos zu Erweiterungen in WINX
                      (dieser Informationstyp existiert seit WINX 2.3)

out1: Bitvektor fr WF_-Funktionen in wind_get/wind_set

AGI1_WFWINX         $0001  WF_WINX vorhanden
AGI1_WFWINXCFG      $0002  WF_WINXCFG vorhanden
AGI1_WFDDELAY       $0004  WF_DDELAY vorhanden
AGI1_WFSHADE        $0008  WF_SHADE vorhanden
AGI1_WFSTACK        $0010  WF_STACK vorhanden
AGI1_WFTOPALL       $0020  WF_TOPALL vorhanden
AGI1_WFBOTTOMALL    $0040  WF_BOTTOMALL vorhanden
AGI1_WFKIND         $0080  WF_KIND vorhanden

out2: Bitvektor fr AES-Nachrichten

AGI2_XWMARROWED     $0001  Erweitertes WM_ARROWED
AGI2_WMSHADED       $0002  WM_SHADED Nachricht wird versandt
AGI2_WMUNSHADED     $0004  WM_UNSHADED Nachricht wird versandt

out3: Bitvektor fr Erweiterungen von AES-Funktionen

AGI3_XWINDCALC      $0001  wind_calc erlaubt WC_WIN-Modi

out4: Bitvektor fr allgemeine Informationen zum AES

AGI4_DPATSUPPORT    $0001  DPAT-Schreibtischhintergrund wird
                            vom AES direkt untersttzt


WINX Dokumentation fr Entwickler                             wind_...
----------------------------------------------------------------------

wind_create - Neues Fenster anlegen
wind_open   - Fenster ffnen
wind_close  - Fenster schlieen
wind_delete - Fenster freigeben
wind_find   - Fenster an Bildschirmposition bestimmen
wind_calc   - Fensterausmae berechnen
wind_get    - Fenstereigenschaften abfragen
wind_set    - Fenstereigenschaften setzen
wind_new    - Fensterverwaltung rcksetzen
wind_update - Kontrolle von Bildschirmausgabe und Mausereignissen


wind_...                                                   wind_create
----------------------------------------------------------------------

Hier fehlt noch was!!!


wind_...                                                     wind_open
----------------------------------------------------------------------

int wind_open( int winID, int openX, int openY, int openW, int openH)
    ->winID: gltige Fensterkennung (geschlossen)
    ->openRect: Strukturbereich

ffnet Fenster an oberster Stelle des Fensterstapels am angegebenen
Strukturbereich. Vor dem ffnen sollten alle definierten Fenster-
elemente bereits mit den entsprechenden wind_set()-Funktionen
initialisiert sein (zumindest bei lteren AES-Versionen). Ein Fenster
sollte im offenen Zustand nicht nocheinmal geffnet werden.

ACHTUNG: Der nach dem ffnen des Fensters gltige Strukturbereich kann
sich von dem bergebenen unterscheiden, da er eventuell korrigiert
wird um z.B. sicherzustellen, da ausreichend Platz fr alle Fenster-
elemente vorhanden ist. Nach dem ffnen sollte man den tatschlichen
Strukturbereich also immer mit wind_get( WF_CURRXYWH) auslesen.

An das zuvor oberste Fenster wird eine WM_UNTOPPED-Nachricht versandt.

Ist das Fenster beim ffnen ikonifiziert und bergibt man als Position
in openX/Y -1/-1, dann wird stattdessen die nchste freie Iconfenster-
position benutzt. Zustzlich kann man auch fr die Gre openW/H -1/-1
angeben, woraufhin die Standardiconfenstergre angenommen wird.

WINX-Erweiterung:

Mit wind_set( WF_STACK) kann man vor dem ffnen des Fensters eine
andere Position als die oberste im Fensterstapel festlegen.


wind_...                                                    wind_close
----------------------------------------------------------------------

Hier fehlt noch was!!!


wind_...                                                   wind_delete
----------------------------------------------------------------------

Hier fehlt noch was!!!


wind_...                                                     wind_find
----------------------------------------------------------------------

Hier fehlt noch was!!!


wind_...                                                     wind_calc
----------------------------------------------------------------------

wind_calc( type, kinds, inX, inY, inW, inH, &outX, &outY, &outW, &outH);
    Rechnet abhngig von den Fensterelementen einen Ausgabebereich in
    einen Strukturbereich um bzw. umgekehrt.
    ->mode: Funktionsmodus (WC_BORDER/WC_WORK)
    ->kinds: Fensterelemente (von wind_create())
    ->inRect: Quellbereich
    <-outRect: Zielbereich
    WC_BORDER berechnet aus dem Ausgabebereich <inRect> den Struktur-
    bereich <outRect>. WC_WORK berechnet aus dem Strukturbereich
    <inRect> den Ausgabebereich <outRect>. Man sollte niemals Annahmen
    ber die Gre der Fensterelemente machen und die Bereiche immer
    mit dieser Funktion umrechnen.

    WINX-Erweiterung:

    Vorraussetzung: appl_getinfo( AGI_WINX) meldet AGI3_XWINDCALC

    Setzt man Bit 15 in <mode> (z.B. durch Addition der Konstanten
    WC_WIN (=$8000)) und bergibt in <kinds> statt Fensterelementen
    die Kennung eines Fensters, ist es mglich die Ausmae des Fensters
    exakter zu bestimmen, da die Funktion die aktuellen Eigenschaften
    des Fenster bercksichtigen kann (z.B. eine Toolbar). Auerdem
    fhrt die Funktion eine Autokorrektur des Strukturbereichs durch,
    die auch von Funktionen wie wind_open(), wind_set( WF_CURRXYWH)
    vorgenommen wird, falls dies notwendig ist und vom AES untersttzt
    wird.

    Beispiel: Berechnet den exakten Ausgabebereich des Fensters aus
    einem Strukturbereich.

        wind_calc( WC_WORK+WC_WIN, winID,
            borderX, borderY, borderW, borderH,
            &workX, &workY, &workW, &workH);



wind_...                                                      wind_new
----------------------------------------------------------------------

Hier fehlt noch was!!!


wind_...                                             wind_get/wind_set
----------------------------------------------------------------------

int wind_get( int winID, int field, int *w1, int *w2, int *w3, int *w4);
    Liefert Informationen zu einem bestimmten Fenster <winID> oder zur
    Fensterverwaltung allgemein (abhngig von <field>).
    ->winID: Fensterkennung (abhngig von field)
    ->field: Kennung der Unterfunktion
    <-w1..w4: Rckgabewerte der Unterfunktion

int wind_set( int winID, int field, int w1, int w2, int w3, int w4);
    ndert Eigenschaften eines bestimmten Fensters <winID> oder der
    Fensterverwaltung allgemein (abhngig von <field>).
    ->winID: Fensterkennung (abhngig von field)
    ->field: Kennung der Unterfunktion
    ->w1..w4: Parameter fr Unterfunktion (abhngig von field)

Es folgt eine Liste der Unterfunktionen. Die Unterfunktionen selbst
sind auf den nachfolgenden Seiten beschrieben.

    Unterfunktion           Thema

    WF_KIND              1  Fensterelemente
    WF_NAME              2  Titel
    WF_INFO              3  Infozeile
    WF_WORKXYWH          4  Ausgabebereich
    WF_CURRXYWH          5  Strukturbereich
    WF_PREVXYWH          6  Vorheriger Strukturbereich
    WF_FULLXYWH          7  Vordefinierter Strukturbereich
    WF_HSLIDE            8  Position des horizontalen Sliders
    WF_VSLIDE            9  Position des vertikalen Sliders
    WF_TOP              10  Oberstes Fenster des Fensterstapels
    WF_FIRSTXYWH        11  Erstes Element der Rechteckliste
    WF_NEXTXYWH         12  Weitere Elemente der Rechteckliste
    WF_RESVD            13
    WF_NEWDESK          14  Schreibtischhintergrund
    WF_HSLSIZE          15  Gre des horizontalen Sliders
    WF_VSLSIZE          16  Gre des vertikalen Sliders
    WF_SCREEN           17  Quarter Screen Buffer
    WF_COLOR            18  Farben
    WF_DCOLOR           19  Defaultfarben
    WF_OWNER            20  Besitzer und Anordnung im Fensterstapel
    WF_BEVENT           24  Klickereignisse
    WF_BOTTOM           25  Unterstes Fenster des Fensterstapels
    WF_ICONIFY          26  Iconify
    WF_UNICONIFY        27  Uniconify
    WF_UNICONIFYXYWH    28  Uniconifybereich
    WF_TOOLBAR          30  Toolbar
    WF_FTOOLBAR         31  Erstes Element der Toolbar-Rechteckliste
    WF_NTOOLBAR         32  Weitere Elemente der Toolbar-Rechteckliste

    WF_WINX          22360  WINX-Version
    WF_WINXCFG       22361  WINX-Konfiguration
    WF_DDELAY        22362  Verzgerungswerte
    WF_SHADE         22365  WindowShade
    WF_STACK         22366  Positionieren im Fensterstapel
    WF_TOPALL        22367  Fensterstapel: Alle APP-Fenster nach oben
    WF_BOTTOMALL     22368  Fensterstapel: Alle APP-Fenster nach unten


wind_get/wind_set                                              WF_KIND
----------------------------------------------------------------------

WF_KIND (=1):    Fensterelemente

wind_get( winID, WF_KIND, &kinds, &ign, &ign, &ign);
    Liefert die aktuellen Fensterelemente.
    ->winID: gltige Fensterkennung
    <-kinds: Bitvektor der Fensterelemente

wind_set( winID, WF_KIND, kinds, 0, 0, 0);
    Setzt die Fensterelemente.
    ->winID: gltige Fensterkennung
    ->kinds: Neuer Bitvektor der Fensterelemente
    Verndert die Fensterelemente, die bei wind_create() definiert
    wurden. Ist das Fenster offen und erzwingen die neuen Fenster-
    elemente eine nderung des Ausgabe- und/oder Strukturbereichs
    (wobei versucht wird den Strukturbereich unverndert zu lassen),
    dann wird ein Smart-Redraw des Fenster durchgefhrt (ansonsten
    wird nur der Rahmen neu ausgegeben).
    ACHTUNG: Da die Operation die Gre des Fenster ndern kann,
    sollte man den Strukturbereich danach neu auslesen.

WF_KIND ist vorhanden, falls appl_getinfo( AGI_WINX) AGI1_WFKIND
meldet.


wind_get/wind_set                                              WF_NAME
----------------------------------------------------------------------

WF_NAME (=2):    Titel

wind_get    -

wind_set( winID, WF_NAME, titleHig, titleLow, 0, 0);
    Setzt den Fenstertitel.
    ->winID: gltige Fensterkennung
    ->titlePtr: Zeiger auf nullterminierte Zeichenkette.
    Ist das Fenster offen, wird der Titel neu ausgegeben.
    ACHTUNG: Es wird keine Kopie der Zeichenkette gespeichert,
    sondern der Zeiger selbst.


wind_get/wind_set                                              WF_INFO
----------------------------------------------------------------------

WF_INFO (=3):    Infozeile

wind_get    -

wind_set( winID, WF_INFO, infoHig, infoLow, 0, 0);
    Setzt die Infozeile des Fensters.
    ->winID: gltige Fensterkennung
    ->infoPtr: Zeiger auf nullterminierte Zeichenkette.
    Ist das Fenster offen, wird die Infozeile neu ausgegeben.
    ACHTUNG: Es wird keine Kopie der Zeichenkette gespeichert,
    sondern der Zeiger selbst.


wind_get/wind_set                                          WF_WORKXYWH
----------------------------------------------------------------------

WF_WORKXYWH (=4):    Ausgabebereich

wind_get( deskOrWinID, WF_WORKXYWH, &workX, &workY, &workW, &workH);
    Liefert den Ausgabebereich des Fensters.
    ->deskOrWinID: gltige Fensterkennung oder Desktop
    <-workRect: Position und Gre des Ausgabebereichs
    Der Ausgabebereich kann teilweise verdeckt sein (auch beim
    obersten Fenster), daher mu bei jeder Ausgabe die Rechteck-
    liste beachtet werden. Ist das Fenster bei der Abfrage
    geschlossen, ist der Bereich leer.

wind_set    -


wind_get/wind_set                                          WF_CURRXYWH
----------------------------------------------------------------------

WF_CURRXYWH (=5):    Strukturbereich

wind_get( deskOrWinID, WF_CURRXYWH, &currX, &currY, &currW, &currH);
    Liefert den Strukturbereich des Fensters.
    ->deskOrWinID: gltige Fensterkennung oder Desktop
    <-currRect: Position und Gre des Rahmenbereichs
    Ist das Fenster bei der Abfrage geschlossen, ist der Bereich
    leer. Zur Abfrage des Desktopbereichs sollte man WF_WORKXYWH
    benutzen.

wind_set( openWin, WF_CURRXYWH, currX, currY, currW, currH);
    Setzt den Strukturbereich des Fensters.
    ->openWinID: Kennung eines offenen Fensters
    <-currRect: Position und Gre des Strukturbereichs
    Da die Fensterverwaltung Position und Gre von currRect eventuell
    korrigiert (damit z.B. alle Fensterelemente dargestellt werden
    knnen), sollte man die tatschlichen Werte nach dem Setzen
    explizit abfragen (mit wind_get).


wind_get/wind_set                                          WF_PREVXYWH
----------------------------------------------------------------------

WF_PREVXYWH (=6):    Vorheriger Strukturbereich

wind_get( winID, WF_PREVXYWH, &prevX, &prevY, &prevW, &prevH);
    Liefert den vorherigen Strukturbereich.
    ->winID: gltige Fensterkennung
    <-prevRect: Liefert den Strukturbereich, der vor der letzten
        nderung des Strukturbereichs gltig war.
    Operationen wie wind_open(), wind_close() und wind_set( WF_CURRXYWH)
    speichern den aktuellen Strukturbereich bevor sie ihn ndern. Man
    kann diese Information benutzen, um z.B. nach einer FULL-Operation
    die alte Position und Gre eines Fensters wiederherzustellen.

wind_set    -


wind_get/wind_set                                          WF_FULLXYWH
----------------------------------------------------------------------

WF_FULLXYWH (=7):    Vordefinierter Strukturbereich

wind_get( winID, WF_FULLXYWH, &fullX, &fullY, &fullW, &fullH);
    Liefert den vordefinierten Strukturbereich.
    ->winID: gltige Fensterkennung
    <-fullRect: Strukturbereich
    Der vordefinierte Strukturbereich ist derjenige, der bei
    wind_create() bergeben wurde. Oft wird er als Strukturbereich
    fr eine FULL-Operation benutzt.
    MO: Leider kann man diesen Strukturbereich nicht nachtrglich
    ndern, somit ist der Nutzen eingeschrnkt.

wind_set    -


wind_get/wind_set                                            WF_HSLIDE
----------------------------------------------------------------------

WF_HSLIDE (=8):    Position des horizontalen Sliders

wind_get( winID, WF_HSLIDE, &hSlidPos, &ign ,&ign, &ign);
    Liefert die Position des horizontalen Sliders.
    ->winID: gltige Fensterkennung
    <-hSlidPos: Aktuelle Position im Bereich [0..1000]

wind_set( winID, WF_HSLIDE, hSlidPos, 0, 0, 0);
    Positioniert den horizontalen Slider.
    ->winID: gltige Fensterkennung
    ->hSlidPos:  Neue Position im Bereich [0..1000]
    Der Positionswert ist unabhngig von der Gre des Sliders und der
    Darstellung am Bildschirm. Ist das Fenster offen, wird der Slider
    sofort an die neue Position verschoben.


wind_get/wind_set                                            WF_VSLIDE
----------------------------------------------------------------------

WF_VSLIDE (=9):    Position des vertikalen Sliders

wind_get( winID, WF_VSLIDE, &vSlidPos, &ign ,&ign, &ign);
    Liefert die Position des vertikalen Sliders.
    ->winID: gltige Fensterkennung
    <-vSlidPos: Aktuelle Position im Bereich [0..1000]

wind_set( winID, WF_VSLIDE, vSlidPos, 0, 0, 0);
    Positioniert den vertikalen Slider.
    ->winID: gltige Fensterkennung
    ->vSlidPos: Neue Position im Bereich [0..1000]
    Der Positionswert ist unabhngig von der Gre des Sliders und der
    Darstellung am Bildschirm. Ist das Fenster offen, wird der Slider
    sofort an die neue Position verschoben.


wind_get/wind_set                                           WF_ICONIFY
----------------------------------------------------------------------

WF_ICONIFY (=26):    Iconify

wind_get( winID, WF_ICONIFY, &iconified, &defSmallW, &defSmallH, &ign);
    Liefert den Iconify-Zustand des Fensters.
    ->winID: gltige Fensterkennung
    <-iconified: Iconify-Zustand des Fensters
        1: ikonifiziert, 0: nicht ikonifiziert
    <-defSmallW/H: Defaultgre ikonifizierter Fenster
    Die Bereiche des ikonifizierten Fensters kann man, wie beim nicht
    ikonifizierten, ber wind_get( WF_CURRXYWH bzw. WF_WORKXYWH)
    ermitteln.

wind_set( winID, WF_ICONIFY, smallX, smallY, smallW, smallH);
    Ikonifiziert das Fenster.
    ->winID: gltige Fensterkennung
    ->smallRect: Strukturbereich des ikonifizierten Fensters
    Fr smallRect sollte man den Strukturbereich benutzen, der
    mit der WM_ICONIFY-Nachricht bergeben wird.

WF_ICONIFY ist vorhanden, falls appl_getinfo( AGI_WINDOW) AGI1_WFICONIFY
meldet.


wind_get/wind_set                                         WF_UNICONIFY
----------------------------------------------------------------------

WF_UNICONIFY (=27):    Uniconify

wind_get( winID, WF_UNICONIFY, &orgX, &orgY, &orgW, &orgH);
    Liefert den Strukturbereich des Fensters, der vor der Ikonifizierung
    des Fensters eingestellt war, bzw. der ber einen Aufruf von
    wind_set( WF_UNICONIFYXYWH) eingestellt wurde.
    ->winID: gltige Fensterkennung
    <-orgRect: Strukturbereich vor der Ikonifizierung
    MO: IMO sollte diese Funktionalitt unter wind_get( WF_UNICONIFYXYWH)
    angeboten werden.

wind_set( winID, WF_UNICONIFY, normalX, normalY, normalW, normalH);
    Unikonifiziert das Fenster.
    ->winID: gltige Fensterkennung
    ->normalRect: Strukturbereich des unikonifizierten Fensters
    Fr normalRect sollte man den Strukturbereich benutzen, der
    mit der WM_UNICONIFY-Nachricht bergeben wird.

WF_UNICONIFY ist vorhanden, falls appl_getinfo( AGI_WINDOW)
AGI1_WFUNICONIFY meldet.


wind_get/wind_set                                     WF_UNICONIFYXYWH
----------------------------------------------------------------------

WF_UNICONIFYXYWH (=28):    Uniconifybereich

wind_get    -
    MO: IMO sollte eigentlich hier die Funktionalitt angeboten
    werden, die momentan unter wind_get( WF_UNICONIFY) verfgbar ist
    (eine der Inkonsistenzen der Iconify-Schnittstelle).

wind_set( winID, WF_UNICONIFYXYWH, orgX, orgY, orgW, orgH);
    ->winID: gltige Fensterkennung
    ->orgRect: Strukturbereich, der beim Unikonifizieren des Fensters
        benutzt werden soll. Dieser Bereich wird bei WM_UNICONIFY
        bergeben.

Fr WF_UNICONIFYXWH gibt es keine eigene appl_getinfo()-Kennung. Am
besten testet man appl_getinfo( AGI_WINDOW) auf AGI1_WFUNICONIFY.


wind_get/wind_set                                              WF_WINX
----------------------------------------------------------------------

WF_WINX (=22360):    WINX-Version

wind_get( 0, WF_WINX, &version, &date, &funcHig, &funcLow);
    Liefert Informationen zur installierten WINX-Version (ab WINX 2.1).
    <-version:
        Bit [15..12]  Beta-Kennung
        Bit [11.. 8]  Major (momentan 2)
        Bit [ 7.. 4]  Minor (momentan 3)
        Bit [ 3.. 0]  Interne Kennung
    <-date: Erstellungsdatum im GEMDOS-Format
    <-func: Zeiger auf die WINX-Externals (bzw. NULL)

wind_set    -

WF_WINX ist vorhanden, falls appl_getinfo( AGI_WINX) AGI1_WFWINX meldet.
Besser ist es jedoch die Funktion einfach aufzurufen und zu prfen, ob
als Funktionswert WF_WINX zurckgegeben wird.


wind_get/wind_set                                           WF_WINXCFG
----------------------------------------------------------------------

WF_WINXCFG (=22361):    WINX-Konfigurationsschalter

wind_get( 0, WF_WINXCFG, &gMask, &gFlags, &lMask, &lFlags);
    Liefert die globalen und lokalen Schalter der aufrufenden Appli-
    kation (Bit n entspricht jeweils Schalter n+1).
    <-gMask: Bitmaske der von der aktuellen WINX-Version untersttzten
        globalen Schalter (Bit gesetzt bedeutet, Schalter vorhanden).
    <-gFlags: Schalterstellung der globalen Schalter (Bit gesetzt
        bedeutet, Schalter eingeschaltet).
    <-lMask: Bitmaske der von der aktuellen WINX-Version untersttzten
        lokalen Schalter der aktuellen Applikation (Bit gesetzt
        bedeutet, Schalter vorhanden).
    <-lFlags: Schalterstellung der lokalen Schalter der aktuellen
        Applikation (Bit gesetzt bedeutet, Schalter eingeschaltet).
    Normalerweise sollten Applikationen darauf verzichten diese Infor-
    mationen abzufragen.

wind_set( 0, WF_WINXCFG, gMask, gFlags, lMask, lFlags);
    Setzt die globalen und lokalen Schalter der aufrufenden Appli-
    kation, falls dies mglich ist.
    ->gMask: Maske der bei diesem Aufruf zu verndernden globalen
        Schalter (Bit gesetzt bedeutet, Schalter bernehmen).
    ->gFlags: Neue Schalterstellung der globalen Schalter (Bit gesetzt
        bedeutet, Schalter eingeschaltet).
    ->lMask: Maske der bei diesem Aufruf zu verndernden lokalen
        Schalter (Bit gesetzt bedeutet, Schalter bernehmen).
    ->lFlags: Neue Schalterstellung der lokalen Schalter (Bit gesetzt
        bedeutet, Schalter eingeschaltet).
    Welche Schalter tatschlich verndert wurden, kann man nur durch
    einen Aufruf von wind_get( WF_WINXCFG) ermitteln.
    ACHTUNG: Diese Funktion sollte nur von Konfigurationsprogrammen
    aufgerufen werden, die wissen was sie tun ;-) (z.B. WINX.CPX)

WF_WINXCFG ist vorhanden, falls appl_getinfo( AGI_WINX) AGI1_WFWINXCFG
meldet. Besser ist es jedoch die Funktion einfach aufzurufen und zu
prfen, ob als Funktionswert WF_WINXCFG zurckgegeben wird.


wind_get/wind_set                                            WF_DDELAY
----------------------------------------------------------------------

WF_DDELAY (=22362):    Verzgerungswerte

wind_get( 0, WF_DDELAY, &initScroll, &contScroll, &contClose, &contFull);
    Verzgerungswerte abfragen.
    <-initScroll: Startverzgerung beim Klick auf Scrollpfeil
    <-contScroll: Kontinuierliche Verzgerung beim Klick auf Scrollpfeil
    <-contClose: Kontinuierliche Verzgerung beim Klick auf Closer
    <-contFull: Kontinuierliche Verzgerung beim Klick auf Fuller
    Alle Werte werden in Millisekunden zurckgegeben.

wind_set( 0, WF_DDELAY, initScroll, contScroll, contClose, contFull);
    Verzgerungswerte setzen.
    ->initScroll: Startverzgerung beim Klick auf Scrollpfeil
    ->contScroll: Kontinuierliche Verzgerung beim Klick auf Scrollpfeil
    ->contClose: Kontinuierliche Verzgerung beim Klick auf Closer
    ->contFull: Kontinuierliche Verzgerung beim Klick auf Fuller
    Alle Werte sind in Millisekunden anzugeben. Die interne Auflsung
    des AES-Timers betrgt aktuell 20ms. Diese Funktion sollte nur
    von Konfigurationsprogrammen (wie einem XCONTROL-CPX) aufgerufen
    werden. Standardeinstellungen: 460, 0, 1000 und 2000 ms.

WF_DDELAY ist vorhanden, falls appl_getinfo( AGI_WINX) AGI1_WFDDELAY
meldet. Besser ist es jedoch die Funktion einfach aufzurufen und zu
prfen, ob als Funktionswert WF_DDELAY zurckgegeben wird.

Warum kann man berhaupt Verzgerungswerte einstellen?
Die Verzgerungswerte dienen zum Bremsen von Aktionen, falls diese
zu schnell ausgefhrt werden (z.B. wegen neuer Hardware).

Fr Programmierer sind vorallem die Verzgerungswerte fr die Scroll-
pfeile interessant. Diese sollte man z.B. in eigenen Sliderroutinen
abfragen, da diese oft viel zu schnell scrollen.


wind_get/wind_set                                             WF_SHADE
----------------------------------------------------------------------

WF_SHADE (=22365):    WindowShade

wind_get( winID, WF_SHADE, &shadeMode, &ign, &ign, &ign);
    Liefert den Shade-Zustand des Fensters.
    ->winID: gltige Fensterkennung
    <-shadeMode: Aktueller Shade-Zustand.
        1: eingeklappt, 0: ausgeklappt

wind_set( winID, WF_SHADE, shadeMode, 0, 0, 0);
    Setzt den Shade-Zustand des Fensters
    ->winID: gltige Fensterkennung
    ->shadeMode: Zu aktivierender Shade-Zustand
        1: eingeklappt, 0: ausgeklappt,
        -1: Zustand umschalten
    Beim Einklappen wird eine WM_SHADED-Nachricht versandt.
    Beim Ausklappen WM_UNSHADED und ein WM_REDRAW ber den kompletten
    Ausgabebereichs des Fensters. Setzt man den Zustand vor dem ffnen
    des Fensters, dann wird er beim ffnen beachtet. Das Schlieen
    eines Fenster setzt es automatisch auf ausgeklappt.

WF_SHADE ist vorhanden, falls appl_getinfo( AGI_WINX) AGI1_WFSHADE
meldet.


wind_get/wind_set                                             WF_STACK
----------------------------------------------------------------------

WF_STACK (=22366):    Positionieren im Fensterstapel

wind_get    -

wind_set( winID, WF_STACK, aboveWinID, 0, 0, 0)
    Stellt das Fenster <winID> im Fensterstapel unter das Fenster
    <aboveWinID> ohne die Bildschirmposition selbst zu ndern.
    ->winID: gltige Fensterkennung
    ->aboveWinID: offenes Fenster/DESKWINDOW/NOWINDOW
    Ist <winID> geschlossen, wird der Positionierungswunsch gespeichert
    und beim ffnen des Fensters mit wind_open() bercksichtigt.
    <aboveWinID> wird erst bei der eigentlichen Positionierung aus-
    gewertet. Ist (<aboveWinID> == DESKWINDOW), wird das Fenster nach
    ganz hinten gestellt (entspricht WF_BOTTOM). Ist (<aboveWinID> ==
    NOWINDOW) oder <aboveWinID> nicht offen, dann wird das Fenster
    <winID ganz nach vorne gestellt (entspricht WF_TOP).

WF_STACK ist vorhanden, falls appl_getinfo( AGI_WINX) AGI1_WFSTACK
meldet.

Beispiel: Fenster an unterster Position im Fensterstapel ffnen

    winID = wind_create( winElems, x, y, w, h);
    wind_set( winID, WF_STACK, DESKWINDOW, 0, 0, 0);
    wind_open( winID, x, y, w, h);


wind_get/wind_set                                            WF_TOPALL
----------------------------------------------------------------------

WF_TOPALL (=22367):    Fensterstapel: Alle APP-Fenster nach oben

wind_get    -

wind_set( winID, WF_TOPALL, apID, 0, 0, 0)
    Holt alle Fenster der Applikation <apID> nach vorne.
    ->winID: offenes Fenster/DESKWINDOW
    ->apID: Kennung der Applikation
    bergibt man in <winID> ein Fensterkennung ungleich DESKWINDOW,
    dann wird <winID> zustzlich ganz nach vorne gestellt (ansonsten
    wird die Reihenfolge der Fenster untereinander nicht gendert).
    <winID> mu offen sein und der Applikation <apID> gehren.

WF_TOPALL ist vorhanden, falls appl_getinfo( AGI_WINX) AGI1_WFTOPALL
meldet.

ACHTUNG: Es ist nicht garantiert, da eine Applikation WF_TOPALL auf
die Fenster einer anderen Applikation anwenden kann (vorallem in einer
Multitasking-Umgebung). In diesem Fall wird 0 zurckgegeben.


wind_get/wind_set                                         WF_BOTTOMALL
----------------------------------------------------------------------

WF_BOTTOMALL (=22368):    Fensterstapel: Alle APP-Fenster nach unten

wind_get    -

wind_set( winID, WF_BOTTOMALL, apID, 0, 0, 0)
    Stellt alle Fenster der Applikation <apID> nach hinten.
    ->winID: offenes Fenster/DESKWINDOW
    ->apID: Kennung der Applikation
    bergibt man in <winID> ein Fensterkennung ungleich DESKWINDOW,
    dann wird <winID> zustzlich ganz nach hinten gestellt (ansonsten
    wird die Reihenfolge der Fenster untereinander nicht gendert).
    <winID> mu offen sein und der Applikation <apID> gehren.

WF_BOTTOMALL ist vorhanden, falls appl_getinfo( AGI_WINX)
AGI1_WFBOTTOMALL meldet.

ACHTUNG: Es ist nicht garantiert, da eine Applikation WF_BOTTOMALL auf
die Fenster einer anderen Applikation anwenden kann (vorallem in einer
Multitasking-Umgebung). In diesem Fall wird 0 zurckgegeben.


WINX Dokumentation fr Entwickler                      AES-Nachrichten
----------------------------------------------------------------------

WM_REDRAW (=20):
    [WM_REDRAW senderID 0 winID drawX drawY drawW drawH]

WM_TOPPED (=21):
    [WM_TOPPED senderID 0 winID 0 0 0 0]

WM_CLOSED (=22):
    [WM_CLOSED senderID 0 winID 0 0 0 0]

WM_FULLED (=23):
    [WM_FULLED senderID 0 winID 0 0 0 0]

WM_ARROWED (=24):
    Standard:
    [WM_ARROWED senderID 0 winID WA_-Code 0 0 0]
    Erweitert:
    [WM_ARROWED senderID 0 winID WA_xxx speed_xxx WA_yyy speed_yyy]

WM_HSLID (=25):

WM_VSLID (=26):

WM_SIZED (=27):

WM_MOVED (=28):

WM_NEWTOP (=29):
    [WM_NEWTOP senderID 0 winID 0 0 0 0]

WM_UNTOPPED (=30):                      (ab AES 4.00)
    [WM_UNTOPPED senderID 0 winID 0 0 0 0]

WM_ONTOP (=31):                         (ab AES 4.00)
    [WM_ONTOP senderID 0 winID 0 0 0 0]

WM_OFFTOP (=32):                        (MultiGEM only)

WM_BOTTOMED (=33):                      (ab AES 4.10)
    [WM_BOTTOMED senderID 0 winID 0 0 0 0]
    Diese Nachricht benutzt der SCRENMGR um die Applikation aufzu-
    fordern, das Fenster mit
        wind_set( win, WF_BOTTOM, 0, 0, 0, 0)
    nach hinten zu stellen. Nach dieser Aktion sollte die Applikation
    kein eigenes Fenster explizit aktivieren. Hat die Applikation mehr
    als ein Fenster offen, und will sie deren Reihenfolge nicht ndern
    (weil z.B. das oberste Fenster modal ist), sollte sie alle eigenen
    Fenster nach hinten stellen. Dies ist z.B. mglich mit
        wind_set( 0, WF_BOTTOMALL, apID, 0, 0, 0);

WM_ICONIFY (=34):                       (ab AES 4.10)

WM_UNICONIFY (=35):                     (ab AES 4.10)

WM_ALLICONIFY (=36):                    (ab AES 4.10)

WM_TOOLBAR (=37):                       (ab AES 4.10)

WM_SHADED (=22360):                     (ab WINX 2.3)
    [WM_SHADED senderID 0 winID 0 0 0 0]

WM_UNSHADED (=22361):                   (ab WINX 2.3)
    [WM_UNSHADED senderID 0 winID 0 0 0 0]


WINX Dokumentation fr Entwickler               Bemerkungen zu Iconify
----------------------------------------------------------------------

Implementierung von Iconify in MultiTOS
Implementierung von Iconify in WINX
Beispielcode fr Iconify in C


Bemerkungen zu Iconify         Implementierung von Iconify in MultiTOS
----------------------------------------------------------------------

Beobachtet 1995 von Martin Osieka.

Die Implementierung von Iconify unter MultiTOS ist sicher nicht aus-
gereift. Offiziell hat die Programmierschnittstelle den Betazustand
nie verlassen. Trotzdem ist alles an Funktionen vorhanden was man fr
Programmierung braucht. Man mu nur einige Punkte beachten.

MultiTOS-AES unterscheidet zwischen dem Setzen bzw. Lschen des
'iconified'-Flags eines Fensters und dem Reservieren bzw. Freigeben
einer Iconposition (ICONID) fr ein Fenster.

Der SCRENMGR reserviert beim Klick auf den SMALLER eine ICONID,
assoziiert sie mit dem Fenster und verschickt ein WM_ICONIFY-
Nachricht mit der zu ICONID gehrenden Position und Gre an die
Applikation, der das Fenster gehrt. Hlt der Anwender beim Klick
die Control-Taste gedrckt, dann wird eine WM_ALLICONIFY-Nachricht
versandt. Die Applikation darf diese Nachrichten nicht ignorieren,
da ansonsten ICONIDs verloren gehen knnen, wenn der Anwender
mehrmals auf den SMALLER klickt (dies knnte man aber auch als Bug
bezeichnen).

Ein Doppelklick auf die Ausgabeflche eines Fensters, dessen
'iconified'-Flag gesetzt ist, fhrt zur Freigabe der assoziierten
ICONID und dem Versenden einer WM_UNICONIFY-Nachricht an die
Applikation, der das Fenster gehrt. Auch diese Nachricht sollte
daher nicht ignoriert werden.

Das BEvent-Flag wird auch bei ikonifizierten Fenster beachtet. Nur
Doppelklicks auf die Fensterinnenflche fhren zum Versenden einer
UNICONIFY-Nachricht ohne das Fenster vorher zu toppen.

Ein Aufruf von
    wind_set( win, WF_ICONIFY, x, y, w, h);
fhrt zum Setzen des 'iconified'-Flags und dem Umbau des Fenster-
rahmens auf die Fensterelemente, die in diesem Zustand von den
Originalfensterelementen erhalten bleiben (NAME und MOVER). Ist das
Fenster offen, wird zustzlich die aktuelle Position und Gre
gesichert (fr eine WM_UNICONIFY-Nachricht) und das Fenster dann auf
die angegeben Position und Gre gebracht. Eine ICONID wird nicht
reserviert.

Bei geschlossenem Fenster kann man Position und Gre fr
eine WM_UNICONIFY-Nachricht mit
    wind_set( win, WF_UNICONIFYXYWH, x, y, w, h);
setzen. Diese Funktion bei offenem Fenster aufzurufen fhrt zum Chaos.

Ein Aufruf von
    wind_set( win, WF_UNICONIFY, x, y, w, h);
fhrt zum Lschen des 'iconified'-Flags und dem Umbau des
Fensterrahmens auf die Originalfensterelemente. Ist das Fenster
offen, wird es zustzlich auf die angegeben Position und
Gre gebracht. Eine mglicherweise fr das Fenster reservierte
ICONID wird nicht freigegeben.

Das Schlieen eines Fensters mit wind_close() gibt die mit einem
Fenster assoziierte ICONID auf jeden Fall frei. Diese steht im
Widerspruch zur Dokumentation der letzten MultiTOS Betaversionen.

Will man eine ICONID reservieren bzw. freigeben, ohne dazu vom
SCRENMGR durch eine entsprechende Nachricht aufgefordert worden zu
sein, dann klappt das nur korrekt, wenn man das Fenster zunchst
schliet, dann den neuen Zustand einstellt und das Fenster dann
wieder ffnet. Beim ffnen im ikonifizierten Zustand ist auerdem
als X/Y-Position -1/-1 anzugeben. Nur dann wird eine neue ICONID
reserviert und die Position auch bernommen. Zustzlich kann man
auch fr Breite und Hhe des Fenster -1/-1 bergeben, was dazu
fhrt, da die Defaulticonbreite angenommen wird.

MultiTOS-AES legt beim Start eine Tabelle fr alle mglichen
Iconpositionen auf dem  Bildschirm an. In dieser Tabelle wird die
Anzahl der Reservierungen dieser Position gespeichert. Beim
Reservieren einer neuen Iconposition wird diese Tabelle von links
unten nach rechts oben nach der Position durchsucht, die am wenigsten
belegt ist. Maximal 127 Icons knnen an einer Position liegen (das
sollte reichen ;-) .


Bemerkungen zu Iconify             Implementierung von Iconify in WINX
----------------------------------------------------------------------

WINX bildet zur Applikation hin die Iconify-Programmierschnittstelle
der letzten MultiTOS Beta nach. Die Implementierung basiert auf dem
externen Iconserver ICFS, der die Verwaltung der Iconpositionen
(ICONIDs) bernimmt und ber ein CPX komfortabel konfiguriert werden
kann. WINX selbst bernimmt die Kommunikation zwischen SCRENMGR, ICFS
und Applikationen, erzeugt die Fensterrahmen mit SMALLER-Gadget und
die Rahmen im iconifizierten Zustand.

Folgende Unterschiede bestehen zu MultiTOS:

- Es knnen keine ICONIDs verloren gehen.
- ALLE Klicks mit der linken Maustaste auf ein ikonifizertes Fenster
    gehen immer an den SCRENMGR
- WM_ALLICONIFY wird durch Drcken der SHIFT-Taste beim Klick auf
    den SMALLER ausgelst (statt CONTROL, da CONTROL unter WINX
    generell dazu dient die Bedeutung der Fensterelemente zu
    unterdrcken).
- Die Gre des Fonts der Titelzeile eines ikonifizierten Fenster
    wird nicht gendert, da der Anwender unter WINX die Fensterrahmen-
    gre selbst einstellen kann.
- Da WINX eine SingleTOS-Erweiterung ist, werden alle ikonifizierten
    Fenster und ICONIDs beim Beenden eines Programms freigegeben.
    Accessories sollten beim Erhalt der AC_CLOSE-Nachricht alle eigenen
    Informationen ber Iconify ebenfalls lschen.
- WINX implementiert Iconify ber den Iconserver ICFS. Nur wenn ICFS
    installiert ist, meldet appl_getinfo() die entsprechenden
    Informationen und nur dann stehen die Iconify-Funktionen auch zur
    Verfgung.
- Die Gre der ikonifizierten Fenster ist vom Anwender einstellbar.
    Aus diesem Grund sollte man Icons im Fenster zentrieren.


Bemerkungen zu Iconify                   Beispielcode fr Iconify in C
----------------------------------------------------------------------

Hier fehlt noch was!!!


WINX Dokumentation fr Entwickler                               WINX.H
----------------------------------------------------------------------
/*********************************************************************
//
// WINX Definitions
//
*********************************************************************/

#ifndef __WINX__
#define __WINX__


/*** mesages ***/

#define WM_SHADED       22360
#define WM_UNSHADED     22361


/*** wind_get/wind_set ***/
                                    /* get set */
#define WF_WINX         22360       /*  0   -  */
#define WF_WINXCFG      WF_WINX+1   /*  0   0  */
#define WF_DDELAY       WF_WINX+2   /*  0   0  */
#define WF_SHADE        WF_WINX+5   /*  w   w  */
#define WF_STACK        WF_WINX+6   /*  -   w  */
#define WF_TOPALL       WF_WINX+7   /*  -  0/o */
#define WF_BOTTOMALL    WF_WINX+8   /*  -  0/o */
/* -: not available; w: needs created window; o: needs open window */


/*** wind_calc ***/

#define WC_WIN  0x8000


/*** appl_getinfo ***/

#ifndef AGI_WINDOW
#define AGI_WINDOW  11

    #define AGI1_WFTOP          0x0001
    #define AGI1_WFNEWDESK      0x0002
    #define AGI1_WFCOLOR        0x0004
    #define AGI1_WFDCOLOR       0x0008
    #define AGI1_WFOWNER        0x0010
    #define AGI1_WFBEVENT       0x0020
    #define AGI1_WFBOTTOM       0x0040
    #define AGI1_WFICONIFY      0x0080
    #define AGI1_WFUNICONIFY    0x0100

    #define AGI3_SMALLER        0x0001
    #define AGI3_BOTTOMER       0x0002
    #define AGI3_SCBOTTOM       0x0004
    #define AGI3_HOTCLOSE       0x0008

    #define AGI4_UPDCHKSET      1
#endif

#ifndef AGI_MESAG
#define AGI_MESAG   12

    #define AGI1_WMNEWTOP       0x0001
    #define AGI1_WMUNTOPPED     0x0002
    #define AGI1_WMONTOP        0x0004
    #define AGI1_APTERM         0x0008
    #define AGI1_SHUTDOWN       0x0010
    #define AGI1_CHEXIT         0x0020
    #define AGI1_WMBOTTOMED     0x0040
    #define AGI1_WMICONIFY      0x0080
    #define AGI1_WMUNICONIFY    0x0100
    #define AGI1_WMALLICONIFY   0x0200

    #define AGI3_ICONCOORS      0x0001
#endif

#ifndef AGI_WINX
#define AGI_WINX        22360

    #define AGI1_WFWINX         0x0001
    #define AGI1_WFWINXCFG      0x0002
    #define AGI1_WFDDELAY       0x0004
    #define AGI1_WFSHADE        0x0008
    #define AGI1_WFSTACK        0x0010
    #define AGI1_WFTOPALL       0x0020
    #define AGI1_WFBOTTOMALL    0x0040
    #define AGI1_WFKIND         0x0080

    #define AGI2_XWMARROWED     0x0001
    #define AGI2_WMSHADED       0x0002
    #define AGI2_WMUNSHADED     0x0004

    #define AGI3_XWINDCALC      0x0001

    #define AGI4_DPATSUPPORT    0x0001
#endif

#endif

WINX Dokumentation fr Entwickler                      Fensterelemente
----------------------------------------------------------------------

Die Fensterelemente bei wind_create und wind_set( WF_KIND) werden
als Bitvektor bergeben. Dieser kann aus den folgenden Elementen
zusammengesetzt werden:

NAME        $0001   Fenstertitel
CLOSER      $0002   Kontrollelement zum Schlieen
FULLER      $0004   Kontrollelement zur Einstellung der Standardgre
MOVER       $0008   Kontrollelement zum Verschieben
INFO        $0010   Infozeile
SIZER       $0020   Kontrollelement zum ndern der Gre
UPARROW     $0040   Kontrollelement zum Scrollen nach oben
DNARROW     $0080   Kontrollelement zum Scrollen nach unten
VSLIDE      $0100   Kontrollelement zum vertikalen Scrollen
LFARROW     $0200   Kontrollelement zum Scrollen nach links
RTARROW     $0400   Kontrollelement zum Scrollen nach rechts
HSLIDE      $0800   Kontrollelement zum horizontalen Scrollen
SMALLER     $4000   Kontrollelement zum Ikonifizieren


WINX Dokumentation fr Entwickler                       Fensterobjekte
----------------------------------------------------------------------

W_BOX            0
W_TITLE          1
W_CLOSER         2
W_NAME           3
W_FULLER         4
W_INFO           5
W_DATA           6
W_WORK           7
W_SIZER          8
W_VBAR           9
W_UPARROW       10
W_DNARROW       11
W_VSLIDE        12
W_VELEV         13
W_HBAR          14
W_LFARROW       15
W_RTARROW       16
W_HSLIDE        17
W_HELEV         18
W_SMALLER       19      /* ab AES 4.10 */
W_BOTTOMER      20      /* Mag!C */


WINX Dokumentation                                               Index
----------------------------------------------------------------------
 A  AES-Kennung                                 
    AES-Nachrichten                             
    AES-Name                                    
    AGI_...                                     
    AGI_MESAG                                   
    AGI_WINDOW                                  
    AGI_WINX                                    
    appl_...                                    
    appl_find                                   
    appl_getinfo                                
    Ausgabebereich                              

 B  Beispielcode fr Iconify in C               
    Bemerkungen zu Iconify                      
    Beschreibung der einzelnen globalen Schalter
    Beschreibung der einzelnen lokalen Schalter 
    Bootvorgang                                 

 C  C-Source: Erweitertes appl_getinfo()        
    C-Source: Fenster hinten ffnen             
    C-Source: Iconify                           
    C-Source: WINX.H                            
    CLOSER                                      

 D  DESKWINDOW                                  
    Die Konfigurationsdatei WINX.INF            
    DNARROW                                     

 E  Externe Erweiterungen                       

 F  Fensterelemente                             
    Fensterobjekte                              
    Fensterstapel                               
    Fontselektor                                
    FULLER                                      

 G  G...                                        
    GEM 3.xx Erweiterungen                      
    Globale Schalter                            

 H  HSLIDE                                      

 I  Implementierung von Iconify in MultiTOS     
    Implementierung von Iconify in WINX         
    INFO                                        

 L  L...                                        
    LFARROW                                     
    Lokale Schalter                             

 M  MO:                                         
    MOVER                                       

 N  NAME                                        
    NOAPP                                       
    NOWINDOW                                    

 R  Rahmenfont                                  
    Rechteckliste                               
    RTARROW                                     

 S  SCRENMGR                                    
    SIZER                                       
    SMALLER                                     
    Strukturbereich                             

 U  UPARROW                                     

 V  VSLIDE                                      

 W  W_...                                       
    W_BOTTOMER                                  
    W_BOX                                       
    W_CLOSER                                    
    W_DATA                                      
    W_DNARROW                                   
    W_FULLER                                    
    W_HBAR                                      
    W_HELEV                                     
    W_HSLIDE                                    
    W_INFO                                      
    W_LFARROW                                   
    W_NAME                                      
    W_RTARROW                                   
    W_SIZER                                     
    W_SMALLER                                   
    W_TITLE                                     
    W_UPARROW                                   
    W_VBAR                                      
    W_VELEV                                     
    W_VSLIDE                                    
    W_WORK                                      
    WF_...                                      
    WF_BOTTOMALL                                
    WF_CURRXYWH                                 
    WF_DDELAY                                   
    WF_FULLXYWH                                 
    WF_HSLIDE                                   
    WF_ICONIFY                                  
    WF_INFO                                     
    WF_KIND                                     
    WF_NAME                                     
    WF_PREVXYWH                                 
    WF_SHADE                                    
    WF_STACK                                    
    WF_TOPALL                                   
    WF_UNICONIFY                                
    WF_UNICONIFYXYWH                            
    WF_VSLIDE                                   
    WF_WINX                                     
    WF_WINXCFG                                  
    WF_WORKXYWH                                 
    Wiederholraten                              
    wind_...                                    
    wind_calc                                   
    wind_close                                  
    wind_create                                 
    wind_delete                                 
    wind_find                                   
    wind_get                                    
    wind_get/wind_set                           
    wind_new                                    
    wind_open                                   
    wind_set                                    
    WINX Copyright                              
    WINX Dokumentation                          
    WINX Dokumentation fr Entwickler           
    WINX Konfiguration                          
    WINX-Externals                              
    WINX.H                                      
    WINX.INF                                    
    WM_...                                      
    WM_ALLICONIFY                               
    WM_ARROWED                                  
    WM_BOTTOMED                                 
    WM_CLOSED                                   
    WM_FULLED                                   
    WM_HSLID                                    
    WM_ICONIFY                                  
    WM_MOVED                                    
    WM_NEWTOP                                   
    WM_OFFTOP                                   
    WM_ONTOP                                    
    WM_REDRAW                                   
    WM_SHADED                                   
    WM_SIZED                                    
    WM_TOOLBAR                                  
    WM_TOPPED                                   
    WM_UNICONIFY                                
    WM_UNSHADED                                 
    WM_UNTOPPED                                 
    WM_VSLID                                    

