|##########|
|#MAGIC   #|DBGFEKBF
|#PROJECT #|""
|#PATHS   #|"EGSProject"
|#FLAGS   #|xx---x--x---xxx-----------------
|#USERSW  #|--------------------------------
|#USERMASK#|--------------------------------
|#SWITCHES#|---x-x----------
|##########|
DEFINITION MODULE EGSIntui;
|
|  5. 8.91 : MasterGadget, TextGadget bekommt "font" Feld
|  9. 8.91 : GadgetFlagSet erhält "callOnElseKey"
| 17. 8.91 : WindowFlagSet erhält "windowSize..."
| 31. 8.91 : MenuItem hat BitMapPtr statt BitMap
|  2. 9.91 : MenuItem hat LONGINT als id
| 20.10.91 : Neue WindowFlags, UserStyle
|            ScreenFlagSet (oh wie peinlich)
|  5. 1.92 : RealGagdet als Flag und Struktur
| 31. 1.92 : Pref Gruppe
|  4. 6.92 : Window Sleep...
|
|  +---------------------------------------------------------------------+
|  |                                                                     |##
|  |                egsintui.library v1.1, © '91,'92 StoneWare           |##
|  |                    EXTENDED - GRAPHICS - STANDARD                   |##
|  |                                                                     |##
|  +---------------------------------------------------------------------+##
|    #######################################################################
|
|
| Diese Library implementiert ein vollständiges Fenstersystem mit Menues,
| Gadgets etc. Sie setzt vollständig auf den anderen egs..-Libraries auf, ist
| also problemlos für andere Graphikkarten implementierbar. Es wurde versucht
| möglichst unabhängig vom aktuellen Graphikmodus zu arbeiten.
|
| Die zugrundelegende Struktur des Systems ist durch die intuition.library
| gegeben. Die meisten Namen und Strukturen sind dort entliehen, allerdings
| teilweise stark verändert.
|
| Die Library benutzt einen zur egs.library erweiterten Screentyp, um dem
| Programmierer die Benutzung des Fenstersystems völlig freizustellen.
|
| Die gesamte Graphiken der Strukturen (Windows, Gadgets und Menüs) läuft
| über IntuiGfx-Porgramme (siehe dort). Dies ist der wohl größte Unterschied
| zur Commodore Library. Der Grund liegt in der ungschickten implementierung
| der Intui-Graphilen der Commo-Library (drei Listen, keine mehrfachbenutzbar-
| keit der Strukturen, Speicherverschwendung durch überladene Strukturen sowie
| mangelnde Flexibilität). Die IntuiGfx-Lösung ist so flexibel, daß sogar
| die Schieberegler eines PropGadgets über ein derartiges Programm realisiert
| werden, selbst die Graphik für den Fensterrahmen ist darüber definiert.
|
| Die Verwendung von 'GimmeZeroZero'-Fenstern ist durchaus zu empfehlen, da
| der Overhead im gegensatz zur Commo-Implementierung nicht so gigantisch ist.
| Lediglich für einfache Requester-Windows empfehlen sich einfache Fenster.
|
| Requester sind in der Library nicht implementiert, da fast alle Requester
| in Wirklichkeit Windows sind, und sich der Aufwand für eine extra Struktur
| nicht lohnt.
|
| Menüs verfügen über zwei erweiterte Funktionen, sie können am Fensterrahmen
| sitzen und 'abgerissen' werden. Dies hat die Vorteile, das der Menü-Weg nicht
| zu weit ist. Ausserdem bleiben häufig benötigte Funktionen im direkten
| Zugriff.
|
FROM EGSLayers       IMPORT LayerPtr,LayerInfoPtr;
FROM EGS             IMPORT EScreenPtr,EBitMap,CLUPtr,EBitMapPtr,
                            EMouse,EMousePtr,HardMouse,SoftMouse;
FROM EGSGfx          IMPORT RastPortPtr,EFontPtr;
FROM IntuiGfx  AS ig IMPORT IntuiGfxPtr,IntuiGfx,WinColors;
FROM Exec            IMPORT MsgPortPtr,LibraryPtr;
FROM Input           IMPORT QualifierSet,lButton,rButton,upPrefix,Qualifiers;
FROM System          IMPORT LONGSET,SysStringPtr,Regs;
FROM EGSBlit         IMPORT ColorTable;
FROM Graphics        IMPORT TextAttrPtr;
|
|
|
|
|
| ... moment der single Pass schlägt zu
|
TYPE
  EIDCMPFlags   = (iMouseButtons,iMouseMove,iRawKey,iActivate,
                   iWindowRefresh,iWindowClose,iWindowSize,iMenu,iGadget,
                   iMenueVerify,iVanillaKey,iSizeVerify,iInactive,
                   iTimeTicks,iDiskInserted,iDiskRemoved,iNewPrefs,
                   iWindowMove,iDrop,iMigrateVerify,iMigrate,iEnter,
                   iWindowIcon,
                   iWBObjectCall = 29,
                   iApplication  = 30,
                   iForward      = 31
                   );
  EIDCMPFlagSet = SET OF EIDCMPFlags;
|
|
| Werte für code Feld
|
CONST
  selectUp     = lButton+upPrefix;
  selectDown   = lButton;
  menuUp       = rButton+upPrefix;
  menuDown     = rButton;

  menuHot      = 1;
  menuCancel   = 2;
  menuWaiting  = 3;

  dropFiles    = 0;
  dropFile     = 1;
  dropClip     = 2;
  dropData     = 3;
  dropWBObject = 4;
  dropBitMap   = 5;


TYPE
  CharPtr       = POINTER TO CHAR;

  WindowPtr     = POINTER TO Window;
  EIntuiMsgPtr  = POINTER TO EIntuiMsg;
|
|###############################################################################
|
| Menüs:
|
| Menüs dienen dazu eine Aktion oder einen Zustand aufzurufen bzw. zu ändern.
| Menüs werden durch betätigen des rechten Mausknopfes ausgelöst, und erscheinen
| am Bildschirm oder Fenstertitel. Ein Punkt wird ausgewählt, indem die Maus
| mit gedrücktem rechten Knopf angefahren wird, und der Knopf dann losgelassen
| wird. (Alternativ können in 'toggleSelect' - Menüpunkten diese auch durch
| kurzes betätigen der linken Maustaste gekippt werden.)
|
| Menüpunkte können über Untermenüs verfügen, die bei erreichen des Menüpunktes
| aufpoppen, und ausgewählt werden können. Diese Staffelung kann beliebig tief
| sein, sollte allerdings nicht übertrieben werden.
|
| Menüs, können abgerissen werden, d.h. sie
| bleiben offen, auch nachdem der rechte Knopf losgelassen wurde. Dies
| geschieht über einen speziellen Menüpunkt. Diese offenen Menüs können mit der
| rechetn Maustaste benutzt oder mit der linken verschoben werden.
|
|-------------------------------------------------------------------------------
|
| Strukturen:
|
| Menu, MenuPtr...
|
|   .itemMaster : Zeiger auf Menüpunkt, dem dieses Menü untergeordnet ist,
|                 NIL falls es sich um das Hauptmenü handelt.
|   .menuMaster : Zeiger aufMenü, dem dieses Menü untergeordnet ist, NIL falls
|                 es sich um das Hauptmenü handelt.
|   .firstItem  : Zeiger auf ersten Menüpunkt dieses Menüs.
|   .leftEdge,
|   .topEdge    : relative Koordinaten des Menüs zum übergeordneten Menüpunkt
|                 oder der Titelzeile
|   .width,
|   .height     : Ausmaße des Menüs. Anhand dieser Koordinaten wird der Hinter-
|                 grund gerettet. Sie sollten also mindestens so groß sein wie
|                 das Menü mit allen Menüpunkten, möglichst aber auch nicht
|                 größer um Speicher zu sparen
|   .border     : Render-routine für die grundlegende Menüstruktur ohne Menü-
|                 punkte. Diese Routine erhält die Breite und Höhe des Menüs
|                 übergeben, so daß sie für jedes Menü verwendet werden kann.
|
|  MenuItem, MenuItemPtr...
|
|   .prev,
|   .next          : Menüpunktverkettung, der erste und letzte menüpunkt
|                    enthalen jeweils NIL im entsprechenden Feld.
|   .leftEdge,
|   .topEgde       : Koordinaten der linken oberen Ecke des Menüpunktes
|   .width,
|   .height        : Ausmaße des Menüpunktes
|   .active        : Zeichenroutine, falls der Menüpunkt aktiv ist
|   .passive       : Zeichenroutine, falls der Menüpunkt passiv ist
|   .checkMark     : Zeichenroutine, falls der Menüpunkt bei einem
|                    'ToggleSelect' ausgewählt ist.
|   .select        : Routine die ausgeführt wird, wenn der Menüpunkt aktiv ist
|                    und die Maus darüber bewegt wird. Diese Routine erhält
|                    die Ausmaße des Menüpunktes übergeben, so daß für jeden
|                    Punkt die selbe benutzt werden kann.
|   .release       : Routine die aufgerufen wird, wenn die Maus vom Menüpunkt
|                    wieder weggefahren wird. Diese Routine erhält ebenfalls die
|                    Ausmaße übergeben. Sie wird auch aufgerufen, wenn das Menü
|                    gezeichnet wird, so daß die normalen Render-Routinen die
|                    Graphik für nicht ausgewählt nicht zeichnen müssen.
|   .flags         : Flags des Menüpunktes:
|
|     - menuActive     : Der Menüpunkt ist aktiv und auswählbar.
|     - menuSelected   : Der Menüpunkt ist angewählt, für Menüpunkte, die an
|                        oder abgeschaltet werden können.
|     - menuSelectable : Der Menüpunkt ist anschaltbar
|     - menuToggle     : Der Menüpunkt wechselt bei jedem anwählen seinen
|                        Zustand.
|     - menuLeave      : Der Menüpunkt wird nicht gemeldet, sondern das Menü
|                        in dem dieser Punkt enthalten ist wird abgerissen.
|
|   .id            : Nummer des Menüs, wir in der Meldung als 'code' übergeben.
|                    Dies hat den Vorteil, daß wenn Menüpunkte zwischengeschoben
|                    werden sich die Meldung nicht verändert.
|   .subMenu       : evtl. Vorhandenes Untermenü, falls keines vorhanden : NIL
|   .mutualExclude : Menge der Menüpunkte, die abgeschaltet werden sollen,
|                    falls dieser Menüpunkt angeschaltet wird. Es wird für diese
|                    Menüpunkte keine extra Message abgeschickt.
|   .mutualInclude : Menge der Menüpunkte, die angeschaltet werden sollen,
|                    falls dieser Menüpunkt angeschaltet wird. Es wird für diese
|                    Menüpunkte keine extra Message abgeschickt.
|   .hotKey        : RawKeyCode, der zuammen mit der rechten Amiga-Taste diesen
|                    Menüpunkt auswählen soll (BUG : funktioniert leider nicht)
|
|-------------------------------------------------------------------------------
|
| Prozeduren:
|
| PROCEDURE PutMenuHome(menu IN A0 : MenuPtr);
| PROCEDURE PutMenuOut(menu IN A0 : MenuPtr;
|                      win  IN A1 : WindowPtr
|                      x    IN D0,
|                      y    IN D1 : INTEGER);
|
|
| Mit diesen Prozeduren werden abreißbare Menüs implementiert. Menüs, die
| abreißbar sein sollen müssen über einen Menüpunkt verfügen, dessen Auswahl
| das Menü offen lassen soll. Wird dieser Menüpunkt aufgerufen, muß das Programm
| die Prozedur 'PutMenuOut' aufrufen. Die Parameter x und y müssen die Werte
| aus aus msg^.mouseX und msg^.mouseY enthalten. Wird dieser Menüpunkt wiederum
| aufgerufen, muß das Programm die Prozedur 'PutMenuHome' aufrufen.
|
| Das Menü kann während es außen liegt verschoben werden, das Programm erhält
| darüber keine Angaben.
|
  MenuItemFlags = (menuActive,menuSelected,menuSelectable,menuToggle,
                   menuMoused,menuMove,menuLeave,mi7,mi8);
  MenuItemFlagSet = SET OF MenuItemFlags;

  MenuPtr       = POINTER TO Menu;
  MenuItemPtr   = POINTER TO MenuItem;
  Menu          = RECORD
                    winPrev,
                    winNext       : MenuPtr;
                    itemMaster    : MenuItemPtr;
                    menuMaster    : MenuPtr;
                    firstItem     : MenuItemPtr;
                    leftEdge,
                    topEdge,
                    width,
                    height        : INTEGER;
                    border        : IntuiGfxPtr;
                    backSave      : EBitMapPtr;
                    layer         : LayerPtr;
                    rast          : RastPortPtr;
                  END;
  MenuItem      = RECORD
                    prev,
                    next          : MenuItemPtr;
                    leftEdge,
                    topEdge,
                    width,
                    height        : INTEGER;
                    active,
                    passive,
                    checkMark,
                    select,
                    release       : IntuiGfxPtr;
                    flags         : MenuItemFlagSet;
                    id            : LONGINT;
                    subMenu       : MenuPtr;
                    mutualExclude,
                    mutualInclude : LONGSET;
                    pad           : SHORTCARD;
                    hotKey        : CHAR;
                  END;
|
|###############################################################################
|
| Gadgets sind Fensterelemente, die durch den Benutzer bedient werden können,
| und über die er dem Programm informationen gibt. Es gibt vier verschiedene
| Arten von Gadgets:
|
|   - actionGadget          : Bei betätigen wird dem Programm eine Meldung
|                             geschickt, dieses Gadget kann nur angewählt
|                             werden.
|
|   - boolGadget            : Durch betätigen eines derartigen Gadgets wird
|                             ein Flag gekippt, also von TRUE nach FALSE und
|                             umgekehrt. Mit diesen Gadgets können Flags
|                             abgefragt werden. Das Programm kann auf Wunsch
|                             eine Meldung erhalten, falls das Gadget betätigt
|                             wurde.
|
|   - stringGadget          : In diesen Gadgets kann durch den Benutzer eine
|                             Zeichenkette editiert werden, z.B. Filenamen.
|                             Die Editierfunktionen werden durch die Library
|                             geboten, müssen also nicht extra implementiert
|                             werden. Das Programm kann auf Wunsch eine Meldung
|                             bei Betreten und/oder Verlassen des Gadgets
|                             erhalten.
|
|   - propGadget            : Mit diesen Gadgets kann ein Zahlenwert verändert
|                             werden. Dazu wird ein Balken in einem Rechteck
|                             erzeugt, das durch die Maus verschoben werden
|                             kann. Die Poistion des Balkens gibt den Wert an.
|                             Seine Größe ist durch das Verhältniss zwischen
|                             der Anzahl der Werte die er repräsentiert und der
|                             Anzahl der Möglichen Zustände gegeben.
|                             Das Programm kann Meldungen erhalten, wenn das
|                             Gadget angeklickt, bewegt und oder verlassen
|                             wird.
|                             Meldungen über die Bewegung sollten nur verwendet
|                             werden, wenn die Meldungsschlange immer leer-
|                             gefahren wird, um ein Nachlaufen zu verhindern.
|
|-------------------------------------------------------------------------------
|
| Strukturen:
|
| Alle Gadgets besitzen die gleiche Grundstruktur und je nach Art weitere
| Elemente.
|
| Gadget, GadgetPtr...
|
|   .prev,
|   .next          : Verkettung der Gadgets, das letzte und das Erste Element
|                    einer Liste zeigen immer auf NIL
|   .leftEdge,
|   .topEgde       : Koordinaten der linken oberen Ecke
|   .width,
|   .height        : Ausmaße des Gadgets
|   .id            : Erkennungsnummer
|   .active        : Routine, mit der das Gadget gezeichnet wird, falls es
|                    aktiv ist.
|   .passive       : Routine, mit der das Gadget gezeichnet wird, falls es
|                    passiv ist
|   .select        : Routine, die aufgerufen wird, falls das Gadget gedrückt
|                    wird. Diese Routine erhält die Breite und Höhe des Gadgets
|                    übergeben, so daß sie für verschiedene Gadgets verwendet
|                    werden kann.
|   .release       : Routine, die aufgerufen wird, falls das Gadget losgelassen
|                    wird. Sie bekommt ebenfalls Breite und Höhe übergeben. Sie
|                    wird bereits ausgeführt, wenn das Gadget nur gezeichnet
|                    wird, so daß es zu Beginn deaktiviert erscheint.
|   .flags         : Flags des Gadgets
|
|     - gadgetBorder   : Das Gadget liegt im Fensterrahmen
|     - relRight       : Die Gadget-Koordinaten sind relativ zum rechten
|                        Fensterrand.
|     - relBottom      : Die Gadget-Koordinaten sind relativ zum unteren
|                        Fensterrand.
|     - sysGadget      : Es handelt sich um ein Systemgadget.
|     - gadgetSelected : Das Gadget ist das gerade Aktive
|     - relVerify      : Das Gadget meldet nur, wenn der Mauszeiger beim
|                        Loslassen noch darüber steht
|     - gadgetImmediate: Das Gadget sendet eine Meldung, wenn es angeklickt
|                        wird, nicht erst wenn es losgelassen wird
|     - toggleSelect   : Bei Boolgadgets, das Gadget wechselt seinen Zustand
|                        bei jeder Betätigung
|     - repeatGadget   : Das Gadget liefert solange es niedergehalten wird
|                        in kurzen Zeitabständen immer wieder Meldungen.
|     - gadgetInactive : Das Gadget kann nicht angewählt werden.
|     - stdHighlight   : Das Gadget wird mit einer Standarthighlight-Methode
|                        versehen, einem 3d-Rahmen.
|
|   .type          : Typ des Gadgets
|   .call          : Prozedur, die aufgerufen wird, bevor das Gadget eine
|                    Meldung absetzt. Die Prozedur erhält in A1 einen Zeiger
|                    auf die Meldung, und darf diese nach ihrem Bedarf
|                    ändern. Werden die IDCMPFlags der Meldung gelöscht,
|                    wird sie nicht abgeschickt.
|   .userData      : Frei für Benutzerdaten
|
| BoolGadget:
|
|   .flag          : Flag, auf das sich das BoolGadget bezieht. Es wird je nach
|                    Zustand des Gadgets gesetzt oder gelöscht.
|
| StringGadget:
|
|   .buffer        : Zeiger auf den Puffer in dem der Text bearbeitet wird.
|                    Der Text wird durch ein null-Byte abgeschlossen, und kann
|                    nach der Bearbeitung aus diesem Puffer ausgelesen werden.
|   .undoBuffer    : Zeiger auf einen Undo-Puffer. Er muß mindestens so groß
|                    sein wie der original Puffer. Wird das Gadget angewählt,
|                    wird der Inhalt des Puffers in diesen Undo-Puffer kopiert.
|                    Durch Amiga-O kann der Inhalt aus diesem Undo-Puffer in
|                    den Textpuffer kopiert werden.
|   .bufferPos     : Cursorposititon im Textpuffer
|   .maxChars      : Maximale Anzahl von Zeichen im Puffer.
|   .numChars      : Enthält wärend und nach der Bearbeitung die Anzahl der
|                    Zeichen im Puffer
|   .undoPos       : CursorPosition im Undo-Puffer.
|
|  Die Routinen 'select' und 'release' haben für StringGadgets keine Funktion,
|  da hier die Aktivität durch den erscheinenden Cursor angezeigt wird.
|
|
| PropGadget:
|
|   .propflags     : Flags des Gadgets:
|
|     - propHoriz      : Das Gadget ist waagerecht, wenn dieses Bit gesetzt
|                        ist, sonst senkrecht.
|     - propFollow     : Das Programm bekommt bei jeder Bewegung des Gadgets
|                        eine neue Meldung. Dieses Flag sollte sehr vorsichtig
|                        eigesetzt werden, da es zu einem Überlauf des Puffers
|                        kommen kann.
|     - propBorder     : Das Gadget wird, falls das Fenster seine Größe ändert,
|                        automatisch mit verändert
|     - propMoves      : Der Schieber des Gadgets wird gerade bewegt.
|
|
|   .maximum       : Maximaler Wert des Gadgets
|   .size          : Größe des Reglers in Einheiten des Gadgets
|   .value         : Wert des Reglers
|
|
|  Die Routine 'release' hat bei PropGadgets keine Bedeutung. Die Routine
|  'active' sollte den Rahmen des Gadgets zeichnen. Die Routine 'select'
|  wird zum Zeichnen des Knopfes aufgerufen, sie erhält die erwartete Breite
|  (bei vertikalen natürlich die Höhe) übergeben.
|
|
|-------------------------------------------------------------------------------
|
| Prozeduren:
|
| PROCEDURE AddGadget(win IN A0 : WindowPtr;
|                     gad IN A1 : GadgetPtr);
| PROCEDURE AddGList(win IN A0 : WindowPtr;
|                    gad IN A1 : GadgetPtr;
|                    num IN D0  : INTEGER);
|
| Fügt ein Gadget, bzw. eine Liste von Gadgets zu den Gadgets des Fensters.
| Die Gadgets werden sofort gezeichnet.
|
|
| PROCEDURE RemoveGadget(win IN A0 : WindowPtr;
|                        gad IN A1 : GadgetPtr);
| PROCEDURE RemoveGList(win IN A0 : WindowPtr;
|                       gad IN A1 : GadgetPtr;
|                       num IN D0 : INTEGER);
|
| Entfernt ein Gadget, bzw. eine Liste von Gadgets aus dem Fenster. Der Bereich,
| der zuvor von den Gadgets eingenommen wurde, wird mit der Hintergrundfarbe
| des Fensters gefüllt.
|
|
| PROCEDURE RefreshGadget(win IN A0 : WindowPtr;
|                         gad IN A1 : GadgetPtr);
| PROCEDURE RefreshGList(win IN A0 : WindowPtr;
|                        gad IN A1 : GadgetPtr;
|                        num IN D0 : INTEGER);
|
| Zeichnet ein Gadget oder die Gadgets einer Liste neu. Falls der Zustand eines
| Gadgets (z.B. eines StringGadgets) geändert wurde, muß diese Prozedur
| aufgerufen werden. Der Refresh, der durch verdeckte Bildteile verursacht wird,
| wird durch Intuition selbsttätig durchgeführt.
|
|
| PROCEDURE OnGadget(win IN A0 : WindowPtr;
|                    gad IN A1 : GadgetPtr);
| PROCEDURE OnGList(win IN A0 : WindowPtr;
|                   gad IN A1 : GadgetPtr;
|                   num IN D0 : INTEGER);
|
| Schaltet ein Gadget oder die Gadgets einer Liste ein. Diese können danach
| benutzt werden.
|
|
| PROCEDURE OffGadget(win IN A0 : WindowPtr;
|                     gad IN A1 : GadgetPtr);
| PROCEDURE OffGList(win IN A0 : WindowPtr;
|                    gad IN A1 : GadgetPtr;
|                    num IN D0 : INTEGER);
|
| Schaltet ein Gadget oder die Gadgets einer Liste ab. Diese können danach
| nicht mehr benutzt werden.
|
|
| PROCEDURE CalcProportional(VAR gad IN A0 : PropGadget);
|
| Werden die Werte eines PropGadgets geändert, müssen die Werte zur Darstellung
| neu berechnet werden. Diese Prozedur muß vor 'RefreshGadget' aufgerufen
| werden.
|
|
| PROCEDURE ActivateGadget(win   IN A0 : WindowPtr;
|                          gad   IN A1 : GadgetPtr;
|                          force IN D0 : BOOLEAN);
|
|
| Versucht ein Stringgadget zu aktivieren. Ist 'force' FALSE, gelingt dies nur,
| falls kein anderes Gadget oder Fenster aktiv ist. Ist 'force' TRUE, gelingt
| dies fast immer. Ein anderes evtl. aktives Gadget wird deaktiviert, und das
| Fenster in dem sich das Gadget befindet aktiviert.
|
  GadgetFlags   = (gadgetBorder,relRight,relBottom,sysGadget,gadgetSelected,
                   relVerify,gadgetImmediate,toggleSelect,repeatGadget,
                   gadgetInactive,stdHighlight,stdComplement,oldSelect,
                   callOnElseKey,callOnAnyKey,gadgetHidden);
  GadgetFlagSet = SET OF GadgetFlags;
  GadgetTypes   = (actionGadget,boolGadget,stringGadget,propGadget,
                   integerGadget,userDefGadget,masterGadget,realGadget,
                   dropGadget);

  UserGadPtr    = POINTER TO UserGadget;

  GadgetCall    = PROCEDURE(msg IN A1 : EIntuiMsgPtr);
  GadgetCall2   = PROCEDURE(msg IN A1 : EIntuiMsgPtr;
                            gad IN A2 : UserGadPtr);
  GadgetCall3   = PROCEDURE(win IN A1 : WindowPtr;
                            gad IN A0 : ANYPTR);

  GadgetPtr     = POINTER TO Gadget;
  Gadget        = RECORD
                    prev,
                    next        : GadgetPtr;
                    checkLeft,
                    checkTop,
                    leftEdge,
                    topEdge,
                    width,
                    height      : INTEGER;
                    id          : LONGINT;
                    active,
                    passive,
                    select,
                    release     : IntuiGfxPtr;
                    flags       : GadgetFlagSet;
                    type        : GadgetTypes;
                    hotKey      : CHAR;
                    call        : GadgetCall;
                    userData    : ANYPTR;
                  END;

  BoolGadPtr    = POINTER TO BoolGadget;
  GadgetArray   = ARRAY OF BoolGadPtr;
  GadgetArrayPtr= POINTER TO GadgetArray;
  BoolGadget    = RECORD OF Gadget
                    flag    : BOOLEAN;
                    exclude,
                    include : GadgetArrayPtr;
                  END;
  PropFlags     = (propHoriz,propFollow,propMoves,propBorder,propDeltaRefresh,
                   pf5,pf6,pf7,pf8);
  PropFlagSet   = SET OF PropFlags;
  PropGadPtr    = POINTER TO PropGadget;
  PropGadget    = RECORD OF Gadget
                    propflags : PropFlagSet;
                    maximum,
                    size,
                    value     : INTEGER;
                    v_height,
                    v_pos     : INTEGER;
                  END;
  StringJustify = (justifyLeft,justifyRight,justifyCenter);
  StringGadPtr  = POINTER TO StringGadget;
  StringGadget  = RECORD OF Gadget
                    buffer,
                    undoBuffer : CharPtr;
                    bufferPos,
                    maxChars,
                    dispPos,
                    undoPos,
                    numChars,
                    dispCount,
                    dispFront,
                    cLeft,
                    cTop       : INTEGER;
                    justify    : StringJustify;
                    font       : EFontPtr;
                  END;
  IntGadPtr     = POINTER TO IntGadget;
  IntGadget     = RECORD OF StringGadget
                    value : LONGINT;
                    valid : BOOLEAN;
                  END;
  RealGadPtr    = POINTER TO RealGadget;
  RealGadget    = RECORD OF StringGadget
                    value : LONGREAL;
                    valid : BOOLEAN;
                  END;

  UserGadget    = RECORD OF Gadget
                    selectCall,
                    releaseCall  : GadgetCall;
                    actionCall   : GadgetCall2;
                    initCall     : GadgetCall3;
                    callFlags    : EIDCMPFlagSet;
                  END;
  MasterGadPtr  = POINTER TO MasterGadget;
  MasterGadget  = RECORD OF Gadget
                    masterType : LONGINT;
                    firstSon   : GadgetPtr;
                    numSons    : INTEGER;
                  END;

  EGSWBObject   = HIDDEN;

  DropFlags     = (acceptsFiles,acceptsFile,acceptsClip,
                   acceptsData,acceptsWBObject,
                   fullWindowSize,acceptsBitMap,df31=31);
  DropFlagSet   = SET OF DropFlags;

  StrArrayPtr   = POINTER TO StrArray;
  StrArray      = ARRAY OF SysStringPtr;

  DropGadPtr    = POINTER TO DropGadget;

  DropAcceptor  = RECORD
                    key       : LONGINT;
                    mouse     : EMousePtr;
                  END;
  AcceptList    = ARRAY OF DropAcceptor;
  AcceptListPtr = POINTER TO AcceptList;

  DropGadget    = RECORD OF Gadget;
                    dropFlags : DropFlagSet;
                    accepts   : POINTER TO ARRAY OF DropAcceptor;
                  END;
|
|###############################################################################
|
| Screens:
|
| Screens sind logische Nachfolger der 'EScreens' aus der egs.library. Sie
| wurden um Felder zur Fenster und Layer verwaltung erweitert.
|
| Werden keine Fenster benötigt, lohnt es sich nicht die Screens aus diesem
| Modul zu benutzen, da sie mit einem gewissen Overhead verbunden sind. Auch
| können über diese Screens keine Events abgefangen werden.
|
|-------------------------------------------------------------------------------
|
| Strukturen:
|
| NewScreen...
|
|   .mode        : Modus des Screens, siehe egs.library
|                  "DEFAULT SCREEN" für den default screen
|   .depth       : Tiefe des Screens, siehe egs.library,
|   .title       : Titel des Screens, erscheint in der Titelzeile
|   .colors      : Farben des Screens, siehe egs.library
|   .winColors   : Für Fenster empfohlene Farben
|   .backPen     : Stift für Screen Hintergrund
|   .backPattern : Hintergrundmuster bzw. Bild des Screens
|   .mouse       : Standardmouse für die Screen
|
| Screen,ScreenPtr...
|
|   .front,
|   .back        : Verkettung
|   .escreen     : Zeiger auf die EScreen Struktur
|   .firstWin,
|   .lastWin     : Zeiger auf die Windows des Screens
|   .rastPort    : RastPort des Screens
|   .info        : Zeiger auf LayerInfo-Struktur
|   .titleLayer  : Zeiger auf Layer der Titel-Zeile
|   .titleRast   : Zeiger auf RastPort des Screens
|   .winColors   : Empfohlene Fensterfarben des Screens
|   .width       : Breite des Screens
|   .height      : Höhe des Screens
|   .title       : Zeiger auf Titel des Screens
|   .mouse       : Zeiger auf Standardmauszeiger des Screens
|
|-------------------------------------------------------------------------------
|
| Prozeduren:
|
| PROCEDURE OpenScreen(VAR newScreen IN A0 : NewScreen):ScreenPtr;
|
| Versucht einen Screen anhand einer NewScreen Struktur zu öffnen. War die
| Aktion erfolgreich, wird der Zeiger auf die Screen zurückgegeben, sonst
| NIL.
|
| PROCEDURE CloseScreen(scr IN A0 : ScreenPtr);
|
| Schließt einen mit OpenScreen geöffneten Screen. Alle noch offenen Windows
| werden ebenfalls geschlossen.
|
|
  ScreenPtr     = POINTER TO Screen;
  ColorLock     = HIDDEN;

  IntuiColorTagItem =
    (ScreenBackPen  = $80010000,
     WindowBackPen,
     UnknownPen,
     TextFrontPen,       TextBackPen,
     ScreenLight,        ScreenPen,        ScreenDark,        ScreenText,
     WinLight,           WinPen,           WinDark,           WinText,
     WinActiveLight,     WinActivePen,     WinActiveDark,     WinActiveText,
     WinSleepLight,      WinSleepPen,      WinSleepDark,      WinSleepText,
     GadgetLight,        GadgetPen,        GadgetDark,        GadgetText,
     GadgetSelectedLight,GadgetSelectedPen,GadgetSelectedDark,GadgetSelectedText,
     TextGadgetFront,    TextGadgetBack,
     PropLight,          PropPen,          PropDark,
     KnobLight,          KnobPen,          KnobDark,
     MenuLight,          MenuPen,          MenuDark,          MenuText,
     MenuSelectedLight,  MenuSelectedPen,  MenuSelectedDark,  MenuSelectedText,
     MasterLight,        MasterPen,        MasterDark,        MasterText,
     WinGadgetLight,     WinGadgetDark,    WinGadgetBack,     WinGadgetPen,

     TextSelectFrontPen,    TextSelectBackPen,
     CursorFrontPen,        CursorBackPen,
     CursorSelectFrontPen,  CursorSelectBackPen,
     CursorInactiveFrontPen,CursorInactiveBackPen);

  ColorTablePtr     = POINTER TO WinColorTable;
  WinColorTable     = ARRAY [ScreenBackPen..CursorInactiveBackPen] OF LONGINT;

  ScreenFlags   = (ScreenQuiet,ScreenBehind,ScreenMonochrome);
  ScreenFlagSet = SET OF ScreenFlags;

  NewScreen     = RECORD
                    mode       : SysStringPtr;
                    depth      : INTEGER;
                    title      : SysStringPtr;
                    colors     : CLUPtr;
                    winColors  : WinColors;
                    backPen    : LONGINT;
                    backPattern: EBitMapPtr;
                    mouse      : EMousePtr;
                    font       : TextAttrPtr;
                    flags      : ScreenFlagSet;
                  END;
  Screen        = RECORD
                    front,
                    back       : ScreenPtr;
                    escreen    : EScreenPtr;
                    firstWin,
                    lastWin    : WindowPtr;
                    rastPort   : RastPortPtr;
                    info       : LayerInfoPtr;
                    titleLayer : LayerPtr;
                    titleRast  : RastPortPtr;
                    winColors  : WinColors;
                    width,
                    height     : INTEGER;
                    title      : POINTER TO STRING;
                    mouse      : EMousePtr;
                    font       : EFontPtr;
                    gadSize    : INTEGER;
                    gadImages  : ANYPTR;
                    flags      : ScreenFlagSet;
                    winFont    : EFontPtr;
                    sGadImage  : ANYPTR;
                    colors     : ColorTablePtr;
                    colorLock  : ColorLock;
                    upGadImages: ANYPTR;
                    oldTitle   : ANYPTR;
                    defaultIconImg : EBitMapPtr;
                  END;
|
|###############################################################################
|
| Windows:
|
| Windows setzen auf Layers, RastPorts und Screens auf. Sie sind die Über-
| struktur über Gadgets und Menüs. Sie versenden nach Wunsch Meldungen über
| Benutzeraktionen und anderen Events.
|
| Ein Fenster besteht aus einem oder zwei Layers (GimmeZeroZero). Der Aufwand
| des zweiten Layers ist nicht so groß, daß er den Vorteil des automatischen
| Clippings ausgleichen würde. Lediglich einfache Requesterwindows ohne Sizing-
| Gadget, sollten mit einfachen Fenstern implementiert werden.
|
| Fenster können über eine Render-Routine verfügen, die bei einem Refresh von
| der Library automatisch ausgeführt wird. Dies befreit das Programm von
| unötigen Refresh gleichbleibender Graphikelementen.
|
|-------------------------------------------------------------------------------
|
| Strukturn:
|
| EIntuiMsg, EIntuiMsgPtr
|
|   .class      : Art der Meldung:
|
|     - iMouseButtons  : Betätignug der Mausknöpfe, welcher Knopf und ob
|                        Drücken oder Loslassen wird im Feld Code Mittgeteilt
|     - iMouseMove     : Bewegung der Maus
|     - iRawKey        : 'rohe' Tastaturmeldung, also Scanncode und Qualifier
|                        ist ebenfalls Vanillakey gewählt, werden normale
|                        Tasten als Vanillakey und Steuerzeichen als RawKey
|                        gemeldet.
|     - iActivate      : Das Fenster wurde aktiviert
|     - iWindowRefresh : Das Fenster benötigt einen Refresh, der Refresh-Key
|                        (siehe egslayers) wird im Feld 'iAddress' mitgegeben.
|     - iWindowClose   : Der Benutzer hat das Close-Gadget betätigt.
|     - iWindowSize    : Das Fenster wurde in seiner Größe verändert
|     - iMenu          : Ein Menüpunkt wurde ausgewählt
|     - iGadget        : Ein Gadget wurde betätigt
|     - iVanillaKey    : Meldung über verabeitete Tastaturmeldungen, der ASCII
|                        Code der Taste ist im Feld Code.
|     - iSizeVerify    : Versucht der Benutzer das Fenster zu vergrößern, wird
|                        eine SizeVerify-Meldung geschickt. Intuition wartet
|                        solange, bis die Meldung zurückkommt. Das Programm
|                        kann die Aktion durch die entsprechende Meldung im
|                        code-Feld unterbinden.
|     - iDiskInserted  : Es wurde eine neue Diskette eingelegt
|     - iDiskRemoved   : Es wurde die Diskette aus dem Laufwerk entfernt
|     - iNewPrefs      : Es wurden neue Preferences eingestellt.
|
|   .code       : Genauere Information über die Meldung
|   .qualifier  : Zustand der Qualifier (Shift...) während der Event abgeschickt
|                 wurde.
|   .iAddress   : Adresse der Event-Auslösenden Struktur (Gadget oder Menü)
|   .mouseX,
|   .mouseY     : Mausposition zum Eventzeitpunkt, relativ zur linken oberen
|   .seconds,
|   .micros     : Zeitpunkt des Events
|   .idcmpWindow: Fenster, das den Event auslöste
|
| NewWindow...
|
|   .leftEdge,
|   .topEdge    : Linke obere Ecke des Fensters
|   .width,
|   .height     : Größe des Fensterinhalts
|   .minWidth,
|   .minHeight  : Minimale Größe des Fensters
|   .maxWidth,
|   .maxHeight  : Maximale Größe des Fensters
|   .screen     : Screen, auf dem das Fenster geöffnet werden soll. Wird NIL
|                 angegeben, wird das Fenster auf einem Standardscreen
|                 geöffnet. Das Programm sollte keine Annahmen über den Screen
|                 machen, weder Größe noch Tiefe.
|   .sysGadgets : System Gadgets des Fensters:
|
|     - windowClose     : Schließgadget
|     - windowSize      : Größengadget in der unteren rechten Ecke
|     - windowFront     : Gadget für Fenster nach vorne,
|     - windowBack      : Gadget für Fenster nach hinten, ist nur eines der
|                         beiden Gadgets vorhanden, hat dies 2.0 Funktion
|     - windowFlip      : Wechsel zwischen zwei Positionen und Größen 2.0
|     - windowBig       : Vergößerungsgadget auf maximale Größe
|     - windowSmall     : Verkleinerungsgadget auf minimale Größe
|     - windowIcon      : Iconify
|     - windowArrowL,
|     - windowArrowR,
|     - windowArrowU,
|     - windowArrowD    : Pfeile für Scrollgadgets
|     - windowScrollH,
|     - windowScrollV   : Scrollgadgets für die Fenster
|     - windowDrag      : Bewegungsgadget
|
|   .gadgets    : Liste der Gadgets die das Fenster von beginn an haben soll
|   .name       : Titel des Fensters
|   .flags      : Flags des Fensters
|
|     - GimmeZeroZero   : GZZ-Window, mit zwei Layers, und extra RastPort für
|                         inneres und Rahmen.
|     - BorderLess      : Das Fenster hat keinen Rahmen, kann also auch nicht
|                         bewegt werden.
|     - SuperBitMap     : Das Fenster hat ein SuperBitMap-Layer, alle
|                         Intialisierungen werden automatisch vorgenommen, die
|                         Größe der SuperBitMap ergibt sich aus der Maximal-
|                         größe des Fensters.
|     - SimpleRefresh   : Der Benutzer erhält Meldungen, über nötige Refreshs
|     - WindowActive    : Das Fenster ist das gerade aktive
|     - WindowMenuLocal : Das Menü des Fensters ist relativ zum Fenstertitel
|     - OwnColorPalette : Das Fenster hat eine eigene Farbtabelle für Rahmen etc
|     - RMBTrap         : Der rechte Mausknopf wird, falls er nicht ausserhalb
|                         des Fensters betätigt wurde, gemeldet und nicht für
|                         Menübearbeitung benutzt.
|     - reportMouse     : Die Mausposition wird fortlaufen in die Fenster
|                         struktur eingetragen. Dieses Flag ist notwendig um
|                         MouseMove events zu erhalten
|     - BackDrop        : Das Fenster wird hinter allen anderen geöffnet
|     - SmartRefresh    : Das Fenster kümmert sich mit Ausnahme von Größen-
|                         änderungen automatisch um seinen Refresh
|     - WindowMenuPopUp : Die Menüs dieses Fensters erscheinen direkt an der
|                         Mausposition
|     - WindowSizeBottom: Das Größengadget des Fensters liegt nur am unteren
|                         Rand
|     - WindowSizeRight : Das Größengadget des Fensters liegt nur am rechten
|                         Rand
|
|   .idcmpFlags : Events, die dem Fenster gemeldet werden sollen
|   .port       : Zeiger auf eigenen Datenport für Benutzeraktionen. Ist dieser
|                 Zeiger NIL richtet die Library einen extra Port ein, und
|                 entfernt diesen auch beim Schließen des Fensters.
|   .colors     : Eigene Farbtabelle des Fensters für Rahmen und Text.
|   .menu       : Zeiger auf das Menü des Fensters
|   .render     : Routine zum Zeichnen des Standardfensterinhalt
|
| Window, WindowPtr...
|
|   .leftEdge,
|   .topEdge    : linke obere Ecke des Fensters
|   .width,
|   .height     : Größe des Fensterinneren
|   .leftBorder,
|   .topBorder,
|   .rightBorder,
|   .bottomBorder : Breite bzw. Höhe der Fensterrahmen
|   .rPort      : RastPort des Fensterinhalts
|   .layer      : Layer des Fensterinhalts
|   .screen     : Zeiger auf die Screen des Fensters
|
|-------------------------------------------------------------------------------
|
| Prozeduren:
|
| PROCEDURE OpenWindow(VAR new IN A0 : NewWindow):WindowPtr;
|
| Versucht ein Fenster anhand einer NewWindow-Struktur zu öffnen. War sie
| erfolgreich, gibt sie einen WindowPtr zurück, sonst NIL;
|
|
| PROCEDURE CloseWindow(win IN A0 : WindowPtr);
|
| Schließt ein Window wieder;
|
|
| PROCEDURE ActivateWindow(win IN A0 : WindowPtr);
|
| Aktiviert ein Fenster.
|
|
| PROCEDURE DeactivateWindow(win IN A0 : WindowPtr);
|
| Deaktiviert ein Fenster, falls es vorher aktiv war.
|
|
| PROCEDURE WindowToFront(win IN A0 : WindowPtr);
|
| Bringt ein Fenster nach vorne.
|
|
| PROCEDURE WindowToBack(win IN A0 : WindowPtr);
|
| Bringt ein Fenster nach hinten.
|
|
| PROCEDURE MoveWindow(win IN A0 : WindowPtr;
|                      dx  IN D0,
|                      dy  IN D1 : INTEGER);
|
| Bewegt ein Fenster um die angegebene Strecke.
|
|
| PROCEDURE ScrollWindow(win IN A0 : WindowPtr;
|                        dx  IN D0,
|                        dy  IN D1 : INTEGER);
|
| Scrollt den Fensterinhalt, um die angegebene Strecke.
|
|
| PROCEDURE SizeWindow(win IN A0 : WindowPtr;
|                      dx  IN D0,
|                      dy  IN D1 : INTEGER);
|
| Ändert die Größe eines Windows um die angegebene Strecke.
|
|
| PROCEDURE WindowBorder(win IN A0 : WindowPtr;
|                        dx  IN D0,
|                        dy  IN D1 : INTEGER);
|
| Ändert die Maximalgröße eines Fensters (nur bei GZZ, nicht bei SuperBitMap);
|
|
| PROCEDURE BeginRefresh(win IN A0 : WindowPtr;key IN D0 : LONGINT):BOOLEAN;
|
| Beginnt den Refresh eines Fensters. War der RefreshKey noch aktuell, wird
| TRUE zurückgegeben, und der Refresh kann durchgeführt werden, sonst muß
| er abgebrochen werden.
|
|
| PROCEDURE EndRefresh(win IN A0 : WindowPtr;ready IN D0 : BOOLEAN);
|
 | Beendet den Refresh eines Fensters.
|
|
  SysGadgetTypes= (windowClose,windowSize,
                   windowFront,windowBack,windowFlip,
                   windowBig,windowSmall,windowIcon,
                   windowArrowL,windowArrowR,
                   windowArrowU,windowArrowD,
                   windowScrollH,windowScrollV,windowDrag,sg15,sg16);
  SysGadgetSet  = SET OF SysGadgetTypes;

  WindowFlags   = (GimmeZeroZero,BorderLess,
                   SuperBitMap,SimpleRefresh,InRefresh,WindowActive,
                   WindowMenuLocal,OwnIDCMPPort,OwnColorPalette,
                   FrontBackGadget,RMBTrap,reportMouse,BackDrop,
                   SmartRefresh,WindowMenuPopUp,
                   WindowSizeBottom,WindowSizeRight,WindowUserStyle,
                   ActiveToFront,QuickScroll,WindowSleeping,
                   FixWindowRatio,ForceToScreen,WindowCenter,
                   SendOutsideMoves,Migrateable);
  WindowFlagSet = SET OF WindowFlags;

|  EIDCMPFlags   = (iMouseButtons,iMouseMove,iRawKey,iActivate,
|                   iWindowRefresh,iWindowClose,iWindowSize,iMenu,iGadget,
|                   iMenueVerify,iVanillaKey,iSizeVerify,iInactive,ei13,ei14,ei15,ei16);
|  EIDCMPFlagSet = SET OF EIDCMPFlags;

  ResizeHookPtr = POINTER TO ResizeHook;
  ResizeHook    = RECORD
                    preCall,
                    postCall  : PROCEDURE(win  IN A0 : WindowPtr;
                                          data IN A1 : ANYPTR);
                    data      : ANYPTR;
                  END;

  Window        = RECORD
                    front,
                    back,
                    prev,
                    next,
                    oldActive    : WindowPtr;

                    leftEdge,
                    topEdge,
                    width,
                    height       : INTEGER;

                    leftBorder,
                    topBorder,
                    rightBorder,
                    bottomBorder : INTEGER;

                    fullWidth,
                    fullHeight   : INTEGER;

                    leftUsed,
                    rightUsed    : INTEGER;

                    mouseX,
                    mouseY       : INTEGER;

                    rPort        : RastPortPtr;
                    layer        : LayerPtr;
                    screen       : ScreenPtr;
                    bRast        : RastPortPtr;
                    bLayer       : LayerPtr;
                    flags        : WindowFlagSet;
                    idcmpFlags   : EIDCMPFlagSet;
                    port         : MsgPortPtr;
                    firstGadget  : GadgetPtr;
                    gadColors    : ColorTable(5);
                    winColors    : WinColors;
                    name,
                    sname        : POINTER TO STRING;
                    border,
                    render       : IntuiGfxPtr;
                    outerMenu,
                    menu         : MenuPtr;

                    mouse        : EMousePtr;

                    minWidth,
                    minHeight,
                    maxWidth,
                    maxHeight,
                    flipWidth,
                    flipHeight,
                    flipLeft,
                    flipTop      : INTEGER;

                    font         : EFontPtr; |!!NEW!!

                    userData     : ANYPTR;

                    colors       : ColorTablePtr;

                    sleepCount   : LONGINT;
                    savedFont    : EFontPtr;
                    mmi          : LONGINT;
                    resizeHook   : ResizeHookPtr;

                    sizeGSize    : INTEGER;
                    windowIcon   : ANYPTR;
                    windowIconImg: EBitMapPtr;
                  END;

  EIntuiMsg     = RECORD OF Exec.Message
                    class        : EIDCMPFlagSet;
                    code         : CARDINAL;
                    qualifier    : QualifierSet;
                    iAddress     : ANYPTR;
                    mouseX,
                    mouseY       : INTEGER;
                    seconds,
                    micros       : LONGCARD;
                    idcmpWindow  : WindowPtr;
                    repCount     : INTEGER;
                    dropType     : LONGINT;
                    dropItem     : ANYPTR;
                    dropSize     : LONGINT;
                    tablet       : EGS.TabletDataPtr;
                  END;

  UserStylePtr  = POINTER TO UserStyle;
  UserStyle     = RECORD
                    leftBorder,
                    topBorder,
                    rightBorder,
                    bottomBorder : INTEGER;
                    |
                    | Parameter:
                    |  fullHeight fullWidth
                    |  lightColor darkColor borderColor
                    |  name       topBorder font
                    |
                    drawBorder   : IntuiGfxPtr;
                  END;

  NewWindow     = RECORD
                    leftEdge,
                    topEdge,
                    width,
                    height     : INTEGER;
                    minWidth,
                    minHeight,
                    maxWidth,
                    maxHeight  : INTEGER;
                    screen     : ScreenPtr;
                    IF KEY : BOOLEAN  | Wenn Flag 'WindowUserStyle' in flags
                      OF TRUE  THEN userStyle  : UserStylePtr;
                      OF FALSE THEN sysGadgets : SysGadgetSet;
                    END;
                    gadgets    : GadgetPtr;
                    name       : SysStringPtr;
                    flags      : WindowFlagSet;
                    idcmpFlags : EIDCMPFlagSet;
                    port       : MsgPortPtr;
                    colors     : WinColors;
                    menu       : MenuPtr;
                    render     : IntuiGfxPtr;
                  END;
|
|###############################################################################
|
| Standardrequester:
|
| SystemRequest:
|
|
|PROCEDURE SysRequest(win     IN A0 : WindowPtr;
|                     title   IN A1 : SysStringPtr;
|                     bodyTxt IN A2 : SysStringPtr;
|                     gadgTxt IN A3 : SysStringPtr):INTEGER;
|
|
| win       : Fenster, auf dessen Screen der Requester aufgehen soll
| title     : Titel des Requesterfensters
| bodyTxt   : Text den der Informationsbereich des Requesters enthalten soll.
|             Einzelne Zeilen werden durch ein "|" im String getrennt. Es
|             können maximal 20 Zeilen angegeben werden.
| gadgTxt   : Text der Gadgets. Die Bezeichner der einzelnen Gadgets werden
|             durch ein "|" voneinander getrennt.
|
| Beispiel:
|
|   .. SysRequest(WorkbenchWindow,
|                 "Workbench".data'PTR,
|                 "Error while copying 'EDITOR'|object already exists".data'PTR,
|                 "Replace|Replace All|Cancel".data'PTR);
|
| Der Rückgabewert ist die Nummer des betätigten Gadgets (von links nach rechts
| bei 0 beginnend.)
|

|
| Prefs:
|
TYPE
  EGSFontTypes = (screenFont,windowFont,systemFont);
  NewScreenPtr = POINTER TO NewScreen;

TYPE
  IntuiMouseTagItem =
    (StandardMouse  = $80020000,

     SleepMouse,         WaitMouse,        DiskReadMouse,     DiskWriteMouse,
     DiskIOMouse,        WorkingMouse,     PlayMacroMouse,    PrintingMouse,
     SearchingMouse,     FrozenMouse,

     CopyMouse,          SwapMouse,        MoveMouse,         SelectMouse,
     ZoomMouse,          FillMouse,        PasteMouse,        CutMouse,
     RecordMacroMouse,   CrosshairMouse,   SizeMouse,         TextMouse,
     AirbrushMouse,      PickMouse,        DrawMouse,         PaintMouse,
     SelectToMouse,      RangeMouse,       ClickMouse,        RotateMouse);



VAR EGSIntuiBase : LibraryPtr;


LIBRARY EGSIntuiBase BY -30  PROCEDURE LockIntuition;

LIBRARY EGSIntuiBase BY -36  PROCEDURE UnlockIntuition;


LIBRARY EGSIntuiBase BY -42  PROCEDURE OpenScreen(VAR newScreen IN A0 : NewScreen):ScreenPtr;

LIBRARY EGSIntuiBase BY -48  PROCEDURE CloseScreen(scr IN A0 : ScreenPtr);

GROUP ScreenGrp = NewScreen,ScreenPtr,CLUPtr,OpenScreen,CloseScreen;


LIBRARY EGSIntuiBase BY -54  PROCEDURE OpenWindow(VAR new IN A0 : NewWindow):WindowPtr;

LIBRARY EGSIntuiBase BY -60  PROCEDURE CloseWindow(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -66  PROCEDURE ActivateWindow(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -72  PROCEDURE DeactivateWindow(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -510 PROCEDURE IconifyWindow(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -516 PROCEDURE DeiconifyWindow(win IN A0 : WindowPtr);


LIBRARY EGSIntuiBase BY -78  PROCEDURE WindowToFront(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -84  PROCEDURE WindowToBack(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -90  PROCEDURE MoveWindow(win IN A0 : WindowPtr;
                                                dx  IN D0,
                                                dy  IN D1 : INTEGER);

LIBRARY EGSIntuiBase BY -96  PROCEDURE ScrollWindow(win IN A0 : WindowPtr;
                                                  dx  IN D0,
                                                  dy  IN D1 : INTEGER);

LIBRARY EGSIntuiBase BY -102 PROCEDURE SizeWindow(win IN A0 : WindowPtr;
                                                dx  IN D0,
                                                dy  IN D1 : INTEGER);

LIBRARY EGSIntuiBase BY -522 PROCEDURE ChangeWindow(win  IN A0 : WindowPtr;
                                                    dx   IN D0,
                                                    dy   IN D1,
                                                    dw   IN D2,
                                                    dh   IN D3 : INTEGER);

LIBRARY EGSIntuiBase BY -234 PROCEDURE WindowBorder(win IN A0 : WindowPtr;
                                                  dx  IN D0,
                                                  dy  IN D1 : INTEGER);

|---NEW---|
LIBRARY EGSIntuiBase BY -240 PROCEDURE SetWindowTitles(win     IN A0 : WindowPtr;
                                                     wTitle  IN A1,
                                                     sTitle  IN A2 : CharPtr);

LIBRARY EGSIntuiBase BY -108 PROCEDURE BeginRefresh(win IN A0 : WindowPtr;key IN D0 : LONGINT):BOOLEAN;

LIBRARY EGSIntuiBase BY -114 PROCEDURE EndRefresh(win IN A0 : WindowPtr;ready IN D0 : BOOLEAN);

GROUP WindowGrp = NewWindow,WindowPtr,WindowFlags,WindowFlagSet,
                  SysGadgetTypes,SysGadgetSet,EIDCMPFlags,
                  EIDCMPFlagSet,
                  OpenWindow,CloseWindow,
                  WindowToFront,WindowToBack,MoveWindow,ScrollWindow,
                  SizeWindow,BeginRefresh,EndRefresh,WindowBorder;

LIBRARY EGSIntuiBase BY -120 PROCEDURE CalcProportional(VAR gad IN A0 : PropGadget);

LIBRARY EGSIntuiBase BY -126 PROCEDURE BackCalcProportional(VAR gad IN A0 : PropGadget);

LIBRARY EGSIntuiBase BY -132 PROCEDURE RedrawGadgetList(win    IN A0 : WindowPtr;
                                                      border IN D0,
                                                      inside IN D1 : BOOLEAN);

LIBRARY EGSIntuiBase BY -138 PROCEDURE ActivateGadget(win   IN A0 : WindowPtr;
                                                    gad   IN A1 : GadgetPtr;
                                                    force IN D0 : BOOLEAN);

LIBRARY EGSIntuiBase BY -144 PROCEDURE AddGadget(win IN A0 : WindowPtr;
                                               gad IN A1 : GadgetPtr);
LIBRARY EGSIntuiBase BY -150 PROCEDURE AddGList(win IN A0 : WindowPtr;
                                              gad IN A1 : GadgetPtr;
                                              num IN D0  : INTEGER);

LIBRARY EGSIntuiBase BY -156 PROCEDURE RemoveGadget(win IN A0 : WindowPtr;
                                                  gad IN A1 : GadgetPtr);
LIBRARY EGSIntuiBase BY -162 PROCEDURE RemoveGList(win IN A0 : WindowPtr;
                                                 gad IN A1 : GadgetPtr;
                                                 num IN D0 : INTEGER);

LIBRARY EGSIntuiBase BY -168 PROCEDURE RefreshGadget(win IN A0 : WindowPtr;
                                                   gad IN A1 : GadgetPtr);
LIBRARY EGSIntuiBase BY -174 PROCEDURE RefreshGList(win IN A0 : WindowPtr;
                                                  gad IN A1 : GadgetPtr;
                                                  num IN D0 : INTEGER);

LIBRARY EGSIntuiBase BY -180 PROCEDURE OnGadget(win IN A0 : WindowPtr;
                                              gad IN A1 : GadgetPtr);
LIBRARY EGSIntuiBase BY -186 PROCEDURE OnGList(win IN A0 : WindowPtr;
                                             gad IN A1 : GadgetPtr;
                                             num IN D0 : INTEGER);

LIBRARY EGSIntuiBase BY -192 PROCEDURE OffGadget(win IN A0 : WindowPtr;
                                               gad IN A1 : GadgetPtr);
LIBRARY EGSIntuiBase BY -198 PROCEDURE OffGList(win IN A0 : WindowPtr;
                                              gad IN A1 : GadgetPtr;
                                              num IN D0 : INTEGER);

LIBRARY EGSIntuiBase BY -534 PROCEDURE ShowGadget(win IN A0 : WindowPtr;
                                                 gad IN A1 : GadgetPtr);
LIBRARY EGSIntuiBase BY -540 PROCEDURE ShowGList(win IN A0 : WindowPtr;
                                                 gad IN A1 : GadgetPtr;
                                                 num IN D0 : INTEGER);

LIBRARY EGSIntuiBase BY -546 PROCEDURE HideGadget(win IN A0 : WindowPtr;
                                                  gad IN A1 : GadgetPtr);
LIBRARY EGSIntuiBase BY -552 PROCEDURE HideGList(win IN A0 : WindowPtr;
                                                 gad IN A1 : GadgetPtr;
                                                 num IN D0 : INTEGER);

GROUP GadgetGrp = GadgetFlags,GadgetFlagSet,GadgetTypes,GadgetPtr,
                  Gadget,BoolGadget,PropFlags,PropFlagSet,
                  PropGadget,StringGadget,PropGadPtr,BoolGadPtr,
                  StringGadPtr,GadgetArray,
                  CalcProportional,BackCalcProportional,
                  RedrawGadgetList,ActivateGadget,
                  AddGadget,AddGList,
                  RemoveGadget,RemoveGList,
                  RefreshGadget,RefreshGList,
                  OnGadget,OnGList,
                  OffGadget,OffGList;

LIBRARY EGSIntuiBase BY -204 PROCEDURE PutMenuHome(menu IN A0 : MenuPtr);

LIBRARY EGSIntuiBase BY -210 PROCEDURE PutMenuOut(menu IN A0 : MenuPtr;
                                                win  IN A1 : WindowPtr;
                                                x    IN D0,
                                                y    IN D1 : INTEGER);

|---NEW---|
LIBRARY EGSIntuiBase BY -246 PROCEDURE SetMenuStrip(win   IN A0 : WindowPtr;
                                                    menu  IN A1 : MenuPtr);


LIBRARY EGSIntuiBase BY -360 PROCEDURE FindMenuItem(menu IN A0 : MenuPtr;id IN D0 : LONGINT):MenuItemPtr;

LIBRARY EGSIntuiBase BY -366 PROCEDURE FindSubMenu(menu IN A0 : MenuPtr;id IN D0 : LONGINT):MenuPtr;

LIBRARY EGSIntuiBase BY -372 PROCEDURE ToggleMenuItem(menu IN A0 : MenuPtr;item IN A1 : MenuItemPtr);

LIBRARY EGSIntuiBase BY -504 PROCEDURE SetMenuItem(menu IN A0 : MenuPtr;item IN A1 : MenuItemPtr;flag IN D0 : BOOLEAN);

LIBRARY EGSIntuiBase BY -378 PROCEDURE OnMenuItem(menu IN A0 : MenuPtr;item IN A1 : MenuItemPtr);

LIBRARY EGSIntuiBase BY -384 PROCEDURE OffMenuItem(menu IN A0 : MenuPtr;item IN A1 : MenuItemPtr);

GROUP
  MenuGrp    = Menu,MenuPtr,MenuItem,MenuItemPtr,MenuItemFlags,
               MenuItemFlagSet,PutMenuOut,PutMenuHome;

LIBRARY EGSIntuiBase BY -216 PROCEDURE SetPointer(win   IN A0 : WindowPtr;
                                                  mouse IN A1 : EMousePtr);

LIBRARY EGSIntuiBase BY -222 PROCEDURE ClearPointer(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -426 PROCEDURE GetPrefPointer(tag IN D0 : IntuiMouseTagItem):EMousePtr;

GROUP PointerGrp = SetPointer,ClearPointer,EMouse,SoftMouse,HardMouse,
                   IntuiMouseTagItem,GetPrefPointer,EMousePtr;

LIBRARY EGSIntuiBase BY -228 PROCEDURE DoubleClick(StartSec    IN D0,
                                                 StartMicros IN D1,
                                                 EndSec      IN D2,
                                                 EndMicros   IN D3 : LONGINT):BOOLEAN;


|---NEW---|
LIBRARY EGSIntuiBase BY -252 PROCEDURE ModifyIDCMP(win   IN A0 : WindowPtr;
                                                 flags IN D0 : EIDCMPFlagSet);

|---NEW---|
LIBRARY EGSIntuiBase BY -258 PROCEDURE ReportMouse(win   IN A0 : WindowPtr;
                                                 flag  IN D0 : BOOLEAN);

LIBRARY EGSIntuiBase BY -480 PROCEDURE SetMouseMoveInterval(win    IN A0 : WindowPtr;
                                                            micros IN D0 : LONGINT);

GROUP
  MessageGrp = Exec.GetMsg,Exec.WaitPort,Exec.ReplyMsg,
               EIDCMPFlags,EIDCMPFlagSet,
               EIntuiMsgPtr,Qualifiers,QualifierSet;

|

LIBRARY EGSIntuiBase BY -264 PROCEDURE Interpret(    rast   IN A0 : RastPortPtr;
                                               VAR colors IN A1 : WinColors;
                                                   toff   IN A2 : IntuiGfxPtr;
                                                   prog   IN A3 : IntuiGfxPtr;
                                                   x      IN D0,
                                                   y      IN D1 : INTEGER);

LIBRARY EGSIntuiBase BY -270 PROCEDURE InterpretStacked(    rast   IN A0 : RastPortPtr;
                                                      VAR colors IN A1 : WinColors;
                                                          prog   IN A2 : IntuiGfxPtr;
                                                          x      IN D0,
                                                          y      IN D1 : INTEGER);

LIBRARY EGSIntuiBase BY -276 PROCEDURE Interpret1Param(    rast   IN A0 : RastPortPtr;
                                                     VAR colors IN A1 : WinColors;
                                                         prog   IN A2 : IntuiGfxPtr;
                                                         x      IN D0,
                                                         y      IN D1 : INTEGER;
                                                         para1  IN D2 : LONGINT);

LIBRARY EGSIntuiBase BY -282 PROCEDURE Interpret2Param(    rast   IN A0 : RastPortPtr;
                                                     VAR colors IN A1 : WinColors;
                                                         prog   IN A2 : IntuiGfxPtr;
                                                         x      IN D0,
                                                         y      IN D1 : INTEGER;
                                                         para1  IN D2 : LONGINT;
                                                         para2  IN D3 : LONGINT);


LIBRARY EGSIntuiBase BY -288 PROCEDURE SysRequest(win     IN A0 : WindowPtr;
                                                  title   IN A1 : SysStringPtr;
                                                  bodyTxt IN A2 : SysStringPtr;
                                                  gadgTxt IN A3 : SysStringPtr):INTEGER;


LIBRARY EGSIntuiBase BY -294 PROCEDURE GetPrefFont(type IN D0 : EGSFontTypes):TextAttrPtr;

LIBRARY EGSIntuiBase BY -300 PROCEDURE GetDefaultScreen():NewScreenPtr;

LIBRARY EGSIntuiBase BY -306 PROCEDURE RefreshWindow(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -312 PROCEDURE RefreshScreen(scr IN A0 : ScreenPtr);

LIBRARY EGSIntuiBase BY -318 PROCEDURE SleepWindow(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -324 PROCEDURE WakeWindow(win IN A0 : WindowPtr);

LIBRARY EGSIntuiBase BY -330 PROCEDURE ObtainColor(scr IN A0 : ScreenPtr;r IN D0,g IN D1,b IN D2 : SHORTCARD):LONGINT;

LIBRARY EGSIntuiBase BY -336 PROCEDURE ReleaseColor(scr IN A0 : ScreenPtr;color IN D0 : LONGINT);

LIBRARY EGSIntuiBase BY -342 PROCEDURE GetWinColor(colors IN A0 : ColorTablePtr;tag IN D0 : IntuiColorTagItem):LONGINT;

LIBRARY EGSIntuiBase BY -348 PROCEDURE GetDefaultColor(depth IN D0 : INTEGER;tag IN D1 : IntuiColorTagItem):LONGINT;

LIBRARY EGSIntuiBase BY -462 PROCEDURE GetPrefsColor(depth IN D0 : INTEGER;tag IN D1 : IntuiColorTagItem):LONGINT;

LIBRARY EGSIntuiBase BY -354 PROCEDURE CloneColor(scr IN A0 : ScreenPtr;color IN D0 : LONGINT):LONGINT;


LIBRARY EGSIntuiBase BY -390 PROCEDURE FreeMenu(menu IN A0 : MenuPtr);

LIBRARY EGSIntuiBase BY -396 PROCEDURE CreateMenu():MenuPtr;

LIBRARY EGSIntuiBase BY -402 PROCEDURE AddToMenu(menu IN A0 : MenuPtr;
                                                 add  IN A1 : MenuItemPtr);

LIBRARY EGSIntuiBase BY -408 PROCEDURE AddToItem(item IN A0 : MenuItemPtr;
                                                 add  IN A1 : MenuItemPtr);

LIBRARY EGSIntuiBase BY -414 PROCEDURE CreateItem(    font   IN A0 : EFontPtr;
                                                  REF name   IN A1 : STRING;
                                                      id     IN D0 : LONGINT;
                                                      key    IN D1 : CHAR;
                                                      toggle IN D2 : BOOLEAN):MenuItemPtr;

LIBRARY EGSIntuiBase BY -528 PROCEDURE CreateExtItem(    font   IN A0 : EFontPtr;
                                                     REF name   IN A1 : STRING;
                                                         id     IN D0 : LONGINT;
                                                     REF ext    IN A2 : STRING;
                                                         toggle IN D2 : BOOLEAN):MenuItemPtr;


LIBRARY EGSIntuiBase BY -420 PROCEDURE CreateLeave():MenuItemPtr;



PROCEDURE CreateMenuL(items : LIST OF MenuItemPtr):MenuPtr;
PROCEDURE CreateItemL(    font    : EFontPtr;
                      REF name    : STRING;
                          id      : LONGINT  := 0;
                          key     : CHAR     := &0;
                          toggle  : BOOLEAN  := FALSE;
                          exclude : LONGSET  := LONGSET:{};
                          sub     : LIST OF MenuItemPtr):MenuItemPtr;


LIBRARY EGSIntuiBase BY -432 PROCEDURE ChangePrefs;

LIBRARY EGSIntuiBase BY -438 PROCEDURE DragNDropClip(draw   IN A0 : IntuiGfxPtr;
                                                     ox     IN D0,
                                                     oy     IN D1 : INTEGER;
                                                     w      IN D2,
                                                     h      IN D3 : INTEGER;
                                                     from   IN A1 : WindowPtr;
                                                     type   IN D4 : LONGINT;
                                                     clipID IN D5 : LONGINT);

LIBRARY EGSIntuiBase BY -444 PROCEDURE DragNDropFile(draw   IN A0 : IntuiGfxPtr;
                                                     ox     IN D0,
                                                     oy     IN D1 : INTEGER;
                                                     w      IN D2,
                                                     h      IN D3 : INTEGER;
                                                     from   IN A1 : WindowPtr;
                                                     type   IN D4 : LONGINT;
                                                     file   IN A2 : SysStringPtr);

LIBRARY EGSIntuiBase BY -450 PROCEDURE DragNDropFiles(draw   IN A0 : IntuiGfxPtr;
                                                      ox     IN D0,
                                                      oy     IN D1 : INTEGER;
                                                      w      IN D2,
                                                      h      IN D3 : INTEGER;
                                                      from   IN A1 : WindowPtr;
                                                      type   IN D4 : LONGINT;
                                                      files  IN A2 : StrArrayPtr);

LIBRARY EGSIntuiBase BY -456 PROCEDURE DragNDropData(draw   IN A0 : IntuiGfxPtr;
                                                     ox     IN D0,
                                                     oy     IN D1 : INTEGER;
                                                     w      IN D2,
                                                     h      IN D3 : INTEGER;
                                                     from   IN A1 : WindowPtr;
                                                     type   IN D4 : LONGINT;
                                                     data   IN A2 : ANYPTR;
                                                     size   IN D5 : LONGINT);

LIBRARY EGSIntuiBase BY -486 PROCEDURE DragNDropWBObject(draw   IN A0 : IntuiGfxPtr;
                                                         ox     IN D0,
                                                         oy     IN D1 : INTEGER;
                                                         w      IN D2,
                                                         h      IN D3 : INTEGER;
                                                         from   IN A1 : WindowPtr;
                                                         obj    IN A2 : EGSWBObject);

LIBRARY EGSIntuiBase BY -498 PROCEDURE DragNDropBitMap(draw   IN A0 : IntuiGfxPtr;
                                                       ox     IN D0,
                                                       oy     IN D1 : INTEGER;
                                                       w      IN D2,
                                                       h      IN D3 : INTEGER;
                                                       from   IN A1 : WindowPtr;
                                                       type   IN D4 : LONGINT;
                                                       map    IN A2 : EBitMapPtr;
                                                       clone  IN D5 : BOOLEAN);



LIBRARY EGSIntuiBase BY -468 PROCEDURE DeactivateGadget;

LIBRARY EGSIntuiBase BY -474 PROCEDURE MigrateWindow(win IN A0 : WindowPtr;
                                                     scr IN A1 : ScreenPtr;
                                                     x   IN D0 : INTEGER;
                                                     y   IN D1 : INTEGER);

LIBRARY EGSIntuiBase BY -492 PROCEDURE SetWindowIconImg(win IN A0 : WindowPtr;
                                                        img IN A1 : EBitMapPtr);




|
| Last is -498 DragNDropBitMap
|
GROUP
  All        = ScreenGrp,WindowGrp,GadgetGrp,MenuGrp,MessageGrp,
               PointerGrp,DoubleClick;

END EGSIntui.


