Window-Manager V1.2 (Demo) von Taurus-Software (1992,93) Marco Brandt Zweibrueckerstr. 42 W-6780 (D-66953) Pirmasens Deutsche Anleitung zur Demoversion von Window-Manager 1. Anwendungsbereich des Programms: Das Programm Window-Manager dient dazu, dem Benutzter Informationen über die Elemente des Intuition-Systems (Screens,Windows...) zu liefern. Es eignet sich deshalb sehr gut zur Fehlersuche in eigenen Programmen, die das Intuition-System nutzen. Man kann mit Window-Manager die wichtigsten Daten eines Windows abfragen (z.B. Basisadresse der Window-Struktur,Adresse der Screen-Struktur,Window-Flags). Somit ist es möglich, die Fehler eines eigenen Programmes zu erkennen, ohne Kenntnisse über die internen Betriebssystemstrukturen zu besitzen. (Wer in Assembler oder C programmiert, besitzt natürlich sowieso Kenntnisse über Window-Strukturen). Durch die Funktion, sich die Daten eines Fensters als Assembler- quellcode ausgeben lassen zu können, ist es möglich, fertige Windows auf einfachste Weise ins eigene Programm zu übernehmen. Natürlich ist Window-Manager auch ideal, wenn man einfach etwas über die interne Verwaltung von Windows unter Intuition erfahren will. 2. Vorliegende Version und Nutzungsrechte: Es gibt momentan 3 Versionen von Window-Manager: Version 1.2: Diese Version ist die Demo-Version von Window-Manager. Sie läuft unter jeder bekannten Version des Betriebs- systems. Diese Version gestattet die Untersuchung von Intuition-Windows. Weitere Intuition-Elemente werden zur Zeit noch nicht unterstützt. Die Demo-Version darf frei benutzt und kopiert werden, solange diese Anleitungen und das Programm selbst nicht verändert werden. Außerdem müssen alle Dateien in einem Verzeichnis gelassen werden. Die Verbreitung des Programms ohne die dazugehörigen Text-Files ist nicht erlaubt. Das Programm darf auf unbegrenzte Zeit benutzt werden, ohne daß eine Zahlung an den Autor getätigt werden muß. Version 1.3: Diese Version ist die erste Vollversion des Programms. Sie läuft unter jeder bekannten Version des Betriebs- systems. Die Benutzteroberfläche dieser Version ist bereits im "2.0er-Look" gestaltet. Bei Window-Manager V1.3 wird neben dem Fenster-Infoservice auch die Untersuchung von Screens und Menus unterstützt. Diese Version ist nur zur Erhaltung der Kompatiblität mit OS 1.x erstellt worden. Deshalb enthält diese Version von Window-Manager keinen Update-Service. Version 1.4: Diese Version ist die endgültige Vollversion des Window- Manager. Sie ist nur ab Kickstart 2.04 lauffähig. Es wurden seit Version 1.3 erhebliche Verbesserungen vorgenommen. Diese Version beinhaltet ein kostenloses Update (bzw. Upgrade bei erscheinen von WindowMan. 1.5) Alle Versionen ab V1.3 dürfen nicht frei kopiert werden. Jeder Benutzer von Window-Manager wird registriert und erhält eine eigene Benutzernummer. Nur so ist es möglich, alle registrierten Benutzer über das Erscheinen einer neuen Version von Window-Manager zu informieren. Das Erstellen von Sicherheitskopien und die Installation auf Festplatte sind natürlich erlaubt. Lediglich die Weitergabe an einen nicht registrierten Benutzer ist untersagt. Ein unrechtmäßiger Besitzer des Programms erhält natürlich kein Update. 3. Bedienungsanleitung Window-Manager V1.2 3.1 Grundlagen von Intuition: Damit man die Funktion des Programmes besser versteht, sollte man wissen, wie Intuition intern die Windows verwaltet. Für jedes Window gibt es einen eigenen Speicherbereich, in dem die Informationen über das Window stehen. Dieser Bereich ist 132 Byte groß und sieht so aus: (unter Kick 1.x) Struktur Window (definiert im Include-File intuition/intuition.i) $00 00 APTR Struct Window *NextWindow ;Zeiger auf Nächstes $04 04 WORD LeftEdge ;X-Koord linker Rand $06 06 WORD TopEdge ;Y-Koord oberer Rand $08 08 WORD Width ;Breite $0A 10 WORD Height ;Höhe $0C 12 WORD MouseY ;Mausposition Y $0E 14 WORD MouseX ;Mausposition X $10 16 WORD MinWidth ;Minimale Breite $12 18 WORD MinHeight ;Minimale Höhe $14 20 UWORD MaxWidth ;Maximale Breite $16 22 UWORD MaxHeight ;Maximale Höhe $18 24 ULONG Flags ;Window-Flaggen $1C 28 APTR Struct Menu *Menustrip ;Zeiger auf Menuleiste $20 32 APTR UBYTE *Title ;Zeiger auf Windowtitle $24 36 APTR Struct Requester *FirstRequest ;Zeiger auf ersten Req. $28 40 APTR Struct Requester *DMRequest ;Zeiger auf DMouseReq. $2C 44 WORD Reqcount ;Anzahl der Requester $2E 46 APTR Struct Screen *WScreen ;Zeiger auf Screen $32 50 APTR Struct Rastport *Rport ;Zeiger auf Rastport $36 54 BYTE Borderleft ;Breite der Ränder $37 55 BYTE BorderTop $38 56 BYTE BorderRight $39 57 BYTE BorderBottom $3A 58 APTR Struct Rastport *BorderRport ;Zeiger auf RandRport $3E 62 APTR Struct Gadget *FirstGadget ;Zeiger auf Gadgetliste $42 66 APTR Struct Window *Parent ;Zeiger auf Vorgänger $46 70 APTR Struct Window *Descendant ;Zum Schliessen $4A 74 APTR USHORT *Pointer ;Zeiger auf Mauscursor $4E 78 BYTE PtrHeight ;Höhe des Mauscursor $4F 79 BYTE PrtWidth ;Breite des Mauscursor $50 80 BYTE XOffset ;Markierung Hot-Spot $51 81 BYTE YOffset $52 82 ULONG IDCMPFlags ;Message-Flags $56 86 APTR Struct MsgPort *UserPort ;Zeiger auf Userport $5A 90 APTR Struct MsgPort *WindowPort ;Zeiger auf Windowport $5E 94 APTR Struct Intuimessage *MessageKey ;Nachricht von Intuition $62 98 UBYTE DetailPen ;Vordergrundfarbe $63 99 UBYTE BlockPen ;Hintergrundfarbe $64 100 APTR Struct Image *CheckMark ;Zeiger auf Grafik $68 104 APTR UBYTE *ScreenTitle ;Zeiger auf Screentitle $6C 108 WORD GZZMouseX ;Mausposition im GZZWin $6E 110 WORD GZZMouseY $70 112 WORD GZZWidth ;GZZWin Breite $72 114 WORD GZZHeight ;GZZWin Höhe $74 116 APTR UBYTE *ExtData ;Zeiger auf weitere Daten $78 120 APTR BYTE *UserData ;Zeiger auf eigene Daten $7C 124 APTR Struct Layer *WLayer ;Zeiger auf Layer für Win $80 128 APTR Struct Textfont *Ifont ;Zeiger auf Font Die beiden Zahlen geben zuerst das Offset zur Basisadresse der Struktur an. Diese Basisadresse erhält man z.B. von der Funktion OPENWINDOW. Danach folgt der Datentyp (z.B Byte,Word,Long). Steht kein "U" vor diesem Datentyp, so kann es sich um eine Größe mit Vorzeichen handeln. Hier sind die wichtigsten Felder erklärt: NextWindow: In diesem Langwort befindet sich die Adresse der nächsten Window-Struktur. Die Strukturen sind in einer sg. verketteten Liste aneinandergesetzt. In jeder Struktur befindet sich also ein Zeiger auf den Nachfolger,in diesem befindet sich wieder ein Zeiger auf die nächste Struktur. Der Zeiger auf das erste Window im Screen befindet sich in der Screen-Struktur. LeftEdge, TopEdge: Diese Felder beinhalten die X und Y-Koordinaten relativ zur linken oberen Ecke des Screens in Pixeln. Width, Height: Breite und Höhe des Windows in Bildpunkten. MouseX,Y: Mausposition in Bildpunkten relativ zur linken oberen Ecke des Windows. Min,Max- Width& Height: Das ist die Größe, die das Window minimal bzw. maximal annehmen kann. Die maximale Größe ist natürlich durch den Screen beschränkt. Flags: Window-Flags. Diese Flags geben an, welche Eigenschaften das Window hat. Unter Kick 1.x existieren folgende Windowflags: Bit 0 ($0001) - WINDOWSIZING : Das Fenster kann seine Größe ändern. Bit 1 ($0002) - WINDOWDRAG : Das Fenster kann verschoben werden (Titelleiste). Bit 2 ($0004) - WINDOWDEPTH : Das Fenster hat Tiefen- Gadgets. Bit 3 ($0008) - WINDOWCLOSE : Das Fenster hat ein Schließ- Symbol. Bit 4 ($0010) - SIZEBRIGHT Bit 5 ($0020) - SIZEBOTTOM Bit 6 ($0040) - SIMPLE_REFR : Das Fenster meldet nur Beschädigungen Bit 7 ($0080) - SUPER_BITMAP : Das Fenster hat eigene Bitmap (Refresh) Wenn kein Refresh-Bit gesetzt ist, dann gilt SMART_REFR. Bit 8 ($0100) - BACKDROP : Das Fenster ist ein Back- drop Fenster (wie Workbench) Bit 9 ($0200) - REPORTMOUSE Bit 10 ($0400) - GIMMEZEROZERO: Der Rand wird getrennt vom Fenster verwaltet. Bit 11 ($0800) - BORDERLESS : Das Fenster hat keinen Rand. Bit 12 ($1000) - ACTIVATE : Beim Öffnen soll das Fenster aktiviert werden. Bit 13 ($2000) - WINDOWACTIVE : Das Fenster ist gerade aktiv. Bit 14 ($4000) - INREQUEST : Das Fenster hat gerade einen Requester Bit 15 ($8000) - MENUMODE : Das Menu vom Fenster wird gerade angewählt. Bit 16 $100000 - RMBTRAP : Bei Druck auf rechtem Maus- knopf soll kein Menu kommen. MenuStrip: Zeiger auf eine Menustruktur. Da eine Menuleiste zwar in der Screenleiste erscheint, aber zum Fenster gehört, steht der Zeiger in der Windowstruktur. Title: Zeiger auf den Titeltext des Windows, der mit einem Nullbyte ($00 nicht ASC("0")) abgeschlossen sein muß. WScreen: Zeiger auf die Struktur des Screens, auf dem das Fenster geöffnet ist. First Gadget: Zeiger auf eine verkettete Liste aller Gadgets in diesem Window. IDCMPFlags: Diese Flags bestimmen, bei welchen Ereignissen die Application von Intuition eine Nachricht erhalten soll. Wenn nämlich ein Window ein Schließsymbol enthält, heißt das noch lange nicht, das es damit auch geschlossen werden kann. (Man nehme nur einmal das Fenster eines abgestürzten Programmes. Da kann man noch so oft auf das Close-Gadget klicken, das Fenster wird sich nicht schließen.) Damit sich das Fenster schließt, muß die Application (das Anwenderprogramm) die Routine CLOSEWINDOW aufrufen. Damit sie jedoch überhaupt weiß, wann das Fenster geschlossen werden soll (wann der User das Schließsymbol angewählt hat), setzt man das IDCMP- Flag CLOSEWINDOW. Dann erhält man eine Nachricht von Intuition im UserPort des Windows, sobald der User wünscht, es zu schliessen. Die IDCMP-Flags geben also an, über welche Ereignisse am Window man informiert werden will. Es gibt folgende IDCMP-Flags: SIZEVERIFY : Das Fenstergröße wird geändert NEWSIZE : Die neue Größe liegt fest REFRESHWINDOW : Der Inhalt wurde beschädigt MOUSEBUTTONS : Eine Maustaste gedrückt MOUSEMOVE : Maus wurde bewegt GADGETDOWN : Gadget wurde gedrückt GADGETUP : Gadget wurde losgelassen REQSET : Requester wurde eingerichtet MENUPICK : Menu wurde angewählt CLOSEWINDOW : Closegadget angewählt RAWKEY : Taste gedrückt (Roh-Format) REQVERIFY REQCLEAR : Requester wieder gelöscht MENUVERIFY NEWPREFS : Neue Voreinstellungen eingerichtet DISKINSERTET : Eine Diskette wurde eingelegt DISKREMOVED : Diskette wurde entfernt WBENCHMESSAGE ACTIVEWINDOW : Fenster wurde aktiviert INACTIVEWINDOW : Fenster wurde deaktiviert DELTAMOVE : Relative Mauskoordinaten VANILLAKEY : Taste gedrückt (überarbeitet) INTUITICKS : Ticks gesendet Die Flags stehen in der Reihenfolge der gesetzten Bits (0-22). Userport: Messageport, in dem die Nachrichten von Intuition ankommen. WindowPort: Messageport, in den die Nachrichten für Intuition gesteckt werden. Screentitle: Der Zeiger auf den mit $00 beendeten Titeltext des Screens steht deshalb in der Windowstruktur, weil der Screen bei jedem Window einen anderen Titel haben kann (wie beim Menu). 3.2 Window-Manager und die Strukturen Das Hauptfenster des Window-Manager zeigt wichtige Felder der Window-Struktur an. Dies wären im einzelnen die Felder für die Position,Größe,minimale und maximale Größe,Flags,IDCMP, Adresse der Menustruktur,Adresse des Screens,Adresse der Window-Struktur und natürlich der Name des Fensters. In späteren Versionen wird Window-Manager noch weitere Felder unterstützen, jedoch reichen die Angaben von Window-Manager 1.2 schon aus, um die wichtigsten Daten des Windows zu erkennen. 3.3 Bedienung der Gadgets von Window-Manager 1.2 In der Basis der Intuition.library existiert ein Zeiger auf das gerade aktive Fenster. Diesen Zeiger kann man mit dem Gadget "GET INFO" ausnutzen. Dazu klickt man einfach auf das Gadget und aktiviert danach innerhalb von 3 Sekunden das Fenster, über das man Informationen haben will. Beim Anwählen des Gadgets wird natürlich das Fenster vom Window-Manager aktiviert. Falls man danach kein weiteres Fenster aktiviert, bekommt man die Informationen über das Fenster vom Window-Manager. Wie bereits oben erwähnt, sind die Fenster in einer verketteten Liste organisiert. Jedes Fenster hat also einen Vorgänger und einen Nachfolger. Mit Hilfe des Gadgets "NEXT" kann man sich Informationen über den Nachfolger eines Fensters holen. Falls ein Programm ein offenes Fenster auf der Workbench hat, und dieses Programm abstürzt, so kann es passieren, daß dieses Fenster sich nicht mehr schliessen läßt. Da der Amiga ja ein Multitasking-Betriebssystem hat, kann man in der Regel trotz des abgestürzten Programmes weiterarbeiten. Das offene Fenster verbraucht jedoch wertvollen Speicherplatz und stört außerdem die Arbeitsoberfläche der Workbench. Um das Fenster zu beseitigen, holt man es sich einfach mit Hilfe von "GET INFO" oder "NEXT" in den Window-Manager, und kann es dann einfach mit dem Gadget "CLOSE" schliessen. Bevor jedoch das Fenster geschlossen wird, erscheint noch ein Requester mit einer Sicherheitsabfrage. Sollte man nämlich einmal ein Fenster schließen, das noch in Gerauch ist, so wird das ganze System mit hoher Wahrscheinlichkeit abstürzen. WARNUNG: Bei diesen Abstürzen handelt es sich meist um totale Systemabstürze !! Alle Daten, die zu diesem Zeitpunkt im Speicher waren gehen verloren !!!!! Mit dem Gadget "SAVE" kann man die Daten des untersuchten Fensters als NEWWINDOW-Struktur abspeichern. Dazu muß man nur noch den Pfad und Namen der Datei angeben z.B. RAM:NEWWINDOW, und der Window-Manager speichert die Struktur im Assemblerformat. Mit dem Gadget "HEX" kann man die Darstellung der Daten ändern. Nach dem Klicken auf dieses Gadget werden die Daten dezimal angezeigt. Das dezimale Format ist natürlich leichter zu verstehen als die hexadezimale Darstellung. Dafür kann es allerdings vorkommen, daß die angezeigte Zahl nicht ganz in das Display passt. Mit dem "?" kann man sich noch einmal eine Kurzzusammenfassung der Gadgets geben lassen. Mit dem Closegagdet kann man das Programm beenden. 4. Vorschau auf die Vollversionen: Wer jetzt den Window-Manager schon für ein gutes Utility hält, wird sich über den Funktionsumfang der Vollversionen erst recht freuen. Window-Manager V1.2 ist ja immerhin nur eine Demoversion und hat nur ca. 1/4 des Funktionsumfangs der Version 1.3. Und bei Version 1.4, die dann nur noch unter Kickstart 2.04 läuft kommt noch eine Unzahl neuer Funktionen hinzu. Nun aber zu den konkreten Änderungen von 1.2 auf 1.3: Ein ähnliches Info-Fenster, wie es jetzt für die Windows vorhanden ist, wird es auch für die Screens geben. * Funktion zum Schließen toter Screens. * Holen des ersten Fensters des Screens * Neues Fenster zum Untersuchen von Menus * Unterstützung von Tastaturkommandos * weiteres Hilfesystem * Routine zum Modifizieren der Closewindow-Routine * Schließen eines Fensters kann verhindert werden * Strukturspeicherung auch bei Screens möglich * lauffähig unter Kick 1.0 bis 3.0 (getestet auf 1.2,1.3 und 2.04) * Fehler im 60-Zeichenmodus behoben * 2.0er-Look (3D-Oberfläche) * mehr Gadget Auswahlmöglichkeiten * englische und deutsche Version verfügbar Verbesserungen auf Window-Manager V1.4: (zusätzlich zu denen auf V1.3) * vernünftiger ASL-Filerequester * Unterstützung der neuen IntuiItem-Flags * Unterstützung der ECS-Viewmodes bei Screens * Listenfunktion zur besseren Auswahl der Windows/Screens/Menus... * Abspeichern von Strukturen und Taglisten möglich * Freibabe des "Ändern"-Gadgets * Ein (1!) kostenloses Update/Upgrade für registrierte Benutzer Achtung: Wenn Sie Kickstart 2.04 oder höher besitzen, sollten Sie auf jeden Fall Window-Manager 1.4 bestellen. Nur diese und die nachfolgenden Versionen nutzen die Fähigkeiten des neuen Betriebssystems voll aus ! M.Brandt Zweibrueckerstr. 42 W-6780 (D-66953) Pirmasens