Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File8.7.8 Nachrichten TOS Die Standardmessages des Screenmanagers sind wie folgt aufgebaut: msg[0] Art der Message msg[1] ID der Applikation, die die Nachricht abgeschickt hat msg[2] Anzahl der Bytes die über die Standardlänge von 16 Bytes hinausgehen, und dann mit appl_read gelesen werden müssen Arten der Standardmessages: Nachricht Bedeutung AC_CLOSE (41) wird an ein Accessory geschickt, wenn die aktuelle Applikation beendet, der Bildschirm gelöscht und der Windowmanager neu initialisiert wird. msg[3] Identifikator des Accessories Hinweis: Diese Nachricht spielt in Multitaskingsystemen praktisch keine Rolle mehr, und ist in MagiC auch nicht mehr vorhanden! AC_OPEN (40) ein Accessory wurde aktiviert msg[4] Identifikator des Accessories PC-GEM liefert diese Information in msg[3]! KAOS 1.4.2 setzt beide Einträge. Geneva have the following extension: If an application sends an AC_OPEN message to another application, it can optionally set word 4 of the message to -1. In this case, Geneva will automatically substitute the correct menu identifier for the application in word 4. Example to open application with ID #5: int buf[8]im { AC_OPEN, 5, 0, my_apid, -1 }; appl_write( 5, 16, buf ); Sending an AC_OPEN message to a desk accessory will cause it to open if it is not already open, or it will make its window topmost (by sending a WM_TOPPED message) if the desk accessory has a window open. An application will receive a WM_TOPPED message, if it has a window open. AP_DRAGDROP (63) ist ein Teil des Drag&Drop-Protokolls und wird vom Sender an den Empfänger geschickt. msg[3] Kennung des Zielfensters msg[4] X-Position des Mauszeigers msg[5] Y-Position des Mauszeigers msg[6] Keyboard-Shift-Status msg[7] zwei Zeichen der Pipe-Extension Hinweis: Wird anstelle einer gültigen Fensterkennung der Wert -1 übergeben, so ist das Ziel der Drag&Drop Operation kein spezielles Fenster, sondern die Applikation selbst. Es sollte dann normalerweise ein zusätzliches Fenster für die angegebenen Daten geöffnet werden. AP_RESCHG (57) durch diese Nachricht wird die betreffende Applikation darüber informiert, daß ein Auflösungswechsel stattfinden soll. Der Empfänger dieser Nachricht sollte sich dann sobald wie möglich beenden. AP_TERM (50) das Betriebssystem fordert die Applikation auf, sich zu beenden. Dies kann z.B. beim Auflösungswechsel notwendig sein, oder von einem allgemeinen Shut-Down Utility ausgelöst werden. msg[5] Grund des Shut-Downs, also z.B. AP_TERM (generell beenden) AP_RESCHG (Auflösungswechsel) Achtung: Entgegen der üblichen Konvention muss in msg[1] der Wert -1 eingetragen werden, da lt. MagiC Dokumentation sonst nicht garantiert ist, daß der Desktop von einer Shut-Down- Sequenz (Alternate-Control-Delete) ausgeht. AP_TFAIL (51) wird vom Empfänger einer AC_CLOSE bzw. AP_TERM Nachricht verschickt, falls dieser sich nicht beenden möchte oder kann. CH_EXIT (90) wird an den Parent-Prozess geschickt, wenn ein Child terminiert. msg[3] Applikations-ID des Childs msg[4] Exit-Code des Childs CT_KEY (53) wird vom modularen Kontrollfeld XCONTROL verschickt, um Tastendrücke auswerten zu können, die keine Auswirkungen auf Editfelder haben können, also z.B. HELP oder UNDO. msg[3] Highbyte: Scancode der gedrückten Taste. Lowbyte : ASCII-Code der Taste. FNT_CHANGED (83) wird verschickt, wenn zur Laufzeit GDOS-Fonts an- bzw. abgemeldet wurden. Auf den Empfang dieser Nachricht sollte mit vst_unload_fonts und direkt anschließendem vst_load_fonts reagiert werden. Dadurch ist sichergestellt, daß die Applikation mit den aktuellen Zeichensätzen arbeiten kann. MN_SELECTED (10) ein Menüeintrag wurde ausgewählt msg[3] Objektnummer des Titeleintrags msg[4] Objektnummer des Eintrags msg[5] Zeiger auf die OBJECT-Struktur des Menübaums, wie er auch an msg[6] menu_bar übergeben wurde. msg[7] Parent des angewählten Eintrags, d.h. die Objektnummer der 'heruntergefallenen' Box, die den Eintrag enthält. Hinweis: Das Vorhandensein der erweiterten Nachricht (msg[5] und folgende) sollte am besten per appl_getinfo (Opcode 9) ermittelt werden. PRN_CHANGED (82) Diese Nachricht wird vom GDOS- Konfigurationsprogramm an alle erreichbaren Applikationen verschickt, um diese über Änderungen an Gerätetreibern zu informieren. Es gilt: msg[3] Gerätenummer msg[4] Aktion 0 = neu 1 = geändert 2 = entfernt Eine Applikation kann nach dem Empfang dieser Nachricht z.B. die entsprechende Workstation neu öffnen, die jetzt aktuellen Einstellungen ermitteln, und einen evtl. Preview neu anbieten. RESCH_COMPLETED (61) diese Nachricht wird an diejenige Applikation geschickt, die einen Auflösungswechsel eingeleitet hat. Wenn kein Fehler aufgetreten ist, muß diese sich nun auch beenden. msg[3] Status (0 = Fehler, 1 = OK) SC_CHANGED (80) diese Nachricht sollte von einem Programm an alle anderen Applikationen im System verschickt werden, wenn dieses den Inhalt des GEM- Klemmbrettes verändert hat. msg[3] Beschreibung des File-Formats: 0x0000 = keine genauere Spezifizierung 0x0001 = Daten für eine Datenbank 0x0002 = Textdateien 0x0004 = Vektor-Grafiken 0x0008 = Raster-Grafiken 0x0010 = Spreadsheet-Daten 0x0020 = Samples, MIDI-Files, Sound 0x0040 = Archivdateien (z.B. ".zip", ".lzh") 0x8000 = Systemdateien (z.B. Farbpaletten) Dabei sollte das Format 0x0000 nach Möglichkeit vermieden werden! msg[4] 4 Zeichen, die das "beste" Format (möglichst wenig Informationsverlust) für msg[5] den Datenimport beschreiben. Beispiel: ".RTF" statt ".TXT" msg[6] reserviert, 0 msg[7] reserviert, 0 SH_WDRAW (72) diese Nachricht sollte von einer Applikation an die System-Shell versandt werden, wenn der Inhalt eines Laufwerkes verändert worden ist. Die Shell kann daraufhin die entsprechenden Fenster aktualisieren. msg[3] Laufwerk (0 = A, 1 = B, usw). Hinweis: Ein Wert von -1 bedeutet, daß die Shell alle Fenster aktualisieren soll. SHUT_COMPLETED (60) wird vom Betriebssystem an den Initiator eines Shut-Down geschickt, wenn alle anderen Applikationen davon bereits informiert wurden, und diese positiv reagiert haben. SM_M_SPECIAL (101) diese Nachricht steht nur unter MagiC (ab Version 2.0) zur Verfügung, und muß an den Screen-Manager geschickt werden. msg[3] 0 msg[4] 'MA' msg[5] 'GX' msg[6] gewünschte Aktion; es gilt: 0 = Redraw ausführen 1 = Applikation beenden 2 = auf Applikation umschalten 3 = Applikation einfrieren 4 = Applikation wieder auftauen 5 = z.Zt. keine Information bekannt 6 = alle Applikationen einblenden 7 = andere Applikationen ausblenden 8 = aktuelle Applikation ausblenden msg[7] 0 Hinweis: Die Codes 6..8 von msg[6] stehen dabei erst ab MagiC Version 3.1 zur Verfügung. Bei "Redraw ausführen" und "alle Applikationen einblenden" muß als ID die des Screenmanager (1) angegeben werden. THR_EXIT (88) Diese Nachricht wird an den Thread bzw. die Applikation geschickt, der bzw. die den beendeten Thread erzeugt hat. Es gilt: msg[3] AES ID des beendeten Threads msg[4] Rückgabe- bzw. Fehlercode als msg[5] LONG-Wert WM_ALLICONIFY (36) alle Fenster der Applikation sollen zu einem ikonifizierten Fenster zusammengefaßt werden. msg[4] X-Koordinate msg[5] Y-Koordinate msg[6] Breite msg[7] Höhe des ikonifizierten Fensters WM_ARROWED (24) ein Pfeil oder Rollbalken wurde angeklickt. msg[3] Handle des Fensters msg[4] einer der folgenden Werte: WA_UPPAGE (0) = Seite nach oben WA_DNPAGE (1) = Seite nach unten WA_UPLINE (2) = Zeile nach oben WA_DNLINE (3) = Zeile nach unten WA_LFPAGE (4) = Seite nach links WA_RTPAGE (5) = Seite nach rechts WA_LFLINE (6) = Spalte nach links WA_RTLINE (7) = Spalte nach rechts WA_WHEEL (8) = siehe unten Ab XaAES v0.960 gibt es einer Erweiterung dieser Nachricht, da es neue Treiber für Mäuse mit Rädern gibt. msg[5] 'MW' (0x4d57) oder 'Mw' (0x4d77) 'MW' (0x4d57) für die erste Mausrad Drehung 'Mw' (0x4d77) für jeder weitere msg[6] 0 msg[7] Aktuelle Nummer der Mausrad Drehung. Damit kann man mehrere Drehungen zusammenfassen, z.B. zu einer Bewegung des Sliders. Es besteht aber auch die Möglichkeit per WF_WHEEL echte Nachrichten der Mausrad Drehung zu bekommen. msg[4] WA_WHEEL (8) msg[6] Nummer des Rädchen msg[7] Anzahl der Mausrad Drehung. Damit kann man mehrere Drehungen zusammenfassen, z.B. zu einer Bewegung des Sliders. Falls WINX installiert ist kann es zu einer erweiterten WM_ARROWE Nachricht kommen. msg[5] negierter Geschwindigkeitsfaktor für msg[4] msg[6] Scrollart und Richtung, mögliche Werte wie msg[4] msg[7] negierter Geschwindigkeitsfaktor für msg[6] Man sollte so vorgehen: Ist [5] >=0, dann handelt es sich um eine normale Scrollnachricht. Ist [5] < 0, dann negiert man den Wert und erhält den Faktor für [4] Ist [7] < 0, dann negiert man den Wert und erhält den Faktor für [6] ansonsten wird [6] ignoriert Beispiel: Erhält man z.B. [WM_ARROWED 1 0 win WA_DNLINE -2 WA_RTLINE -1], dann sollte man zwei Zeilen nach unten und eine Spalte nach rechts scrollen. WM_BACKDROPPED (31) msg[3] Handle des betreffenden Fensters Beim betätigen des Backdrop-Button des Fensters bekommt die Applikation diese Meldung. Nur in KAOS 1.4.2 sowie MagiC 1 und 2 vorhanden. Seit MagiC Version 3 wird WM_BOTTOMED verschickt. WM_BOTTOMED (33) wird vom Screen-Manager benutzt um die Applikation aufzufordern, ein Fenster in den Hintergrund zu legen. msg[3] Handle des betreffenden Fensters Hinweis: das Fenster kann von der Applikation dann einfach per wind_set (msg[3], WF_BOTTOM, 0, 0 ,0, 0) in den Hintergrund gelegt werden. Unter MagiC 2.0 heißt diese Meldung noch WM_M_BDROPPED. WM_CLOSED (22) das oberste Fenster soll geschlossen werden msg[3] Handle des zu schließenden Fensters WM_FULLED (23) der Fullsizeknopf des obersten Fensters wurde angeklickt. msg[3] Handle des Fensters, das auf volle Größe gebracht werden soll WM_HSLID (25) der horizontale Rollbalken wurde verschoben msg[3] Handle des Fensters msg[4] die neue Sliderposition: 0000 = ganz links 1000 = ganz rechts WM_ICONIFY (34) ein Fenster der Applikation soll ikonifiziert werden. msg[3] Kennung des betreffenden Fensters msg[4] X-Koordinate msg[5] Y-Koordinate msg[6] Breite msg[7] Höhe des ikonifizierten Fensters WM_M_BDROPPED (100) wird vom Screen-Manager benutzt um die Applikation aufzufordern, ein Fenster in den Hintergrund zu legen. Ab MagiC 3 wird nicht mehr dieser Opcode, sondern WM_BOTTOMED verschickt. msg[3] Handle des betreffenden Fensters WM_MOVED (28) das ganze Fenster wurde verschoben msg[3] Handle des Fensters msg[4] neue x-Koordinate msg[5] neue y-Koordinate msg[6] neue Fensterbreite (unverändert) msg[7] neue Fensterhöhe (unverändert) WM_NEWTOP (29) das Fenster wurde nach oben gebracht msg[3] Handle des Fensters WM_ONTOP (31) ein Fenster wird (nach dem Schließen oder Deaktivieren eines anderen Fensters) zum aktuellen bzw. aktiven. msg[3] Handle des betreffenden Fensters Hinweis: zum Zeitpunkt der Ankunft der Nachricht kann sich der Fensterstapel bereits wieder verändert haben. Die Nachricht wird nur verschickt, wenn die Applikation nicht mit einem Aufruf das Fenster selbst in den Vordergrund gesetzt hat. Nachrichten dieses Typs werden im AES- Messagepuffer verschmolzen. Daraus folgt, daß immer die letzte Nachricht dieser Art empfangen wird; es können sich also nicht mehrere dieser Nachrichten im Puffer befinden. WM_REDRAW (20) ein Fensterbereich muß neu gezeichnet werden msg[3] Handle des neuzuzeichnenden Fensters msg[4] x-Koordinate des Bereichs msg[5] y-Koordinate des Bereichs msg[6] Breite des Bereichs msg[7] Höhe des Bereichs WM_SHADED (22360) Fenster wurde eingeklappt. msg[3] Handle des Fensters WM_SIZED (27) die Fenstergröße wurde verändert msg[3] Handle des Fensters msg[4] neue x-Koordinate (unverändert) msg[5] neue y-Koordinate (unverändert) msg[6] neue Fensterbreite msg[7] neue Fensterhöhe WM_TOOLBAR (37) behandelt Mausklicks in ein Toolbar-Objekt; es gilt: msg[3] Kennung des Fensters msg[4] angeklicktes Objekt msg[5] Anzahl der Mausklicks msg[6] Tastatur-Status von Shift, Alternate und Control Hinweis: Bei allen Objekten der Toolbox sollte das Flag TOUCHEXIT gesetzt werden, gilt nicht für XaAES. Hier gibt es noch den zusätzlichen Wert: msg[7] Aktuelles Objekt in dem sich der Textcursor befindet. WM_TOPPED (21) ein Fenster soll zum oben liegenden Fenster werden. msg[3] Handle des nach oben zu holenden Fensters WM_UNICONIFY (35) ein oder mehrere Fenster der Applikation sollen unikonifiziert werden. Falls mehrere Fenster betroffen sind (WM_ALLICONIFY) ist die Applikation auf sich allein gestellt, da das AES keine Informationen über die betroffenen Fenster sowie deren Positionen/Ausmaße bereitstellt. msg[3] Kennung des betreffenden Fensters msg[4] X-Koordinate msg[5] Y-Koordinate msg[6] Breite msg[7] Höhe des unikonifizierten Fensters WM_UNSHADED (22361) Fenster wurde ausgeklappt. msg[3] Handle des Fensters WM_UNTOPPED (30) ein Fenster wird gerade inaktiv. msg[3] Handle des betreffenden Fensters Hinweis: zum Zeitpunkt der Ankunft der Nachricht kann sich der Fensterstapel bereits wieder verändert haben. Die Nachricht wird nur verschickt, wenn die Applikation nicht mit einem Aufruf das Fenster selbst in den Hintergrund gelegt hat. WM_VSLID (26) der vertikale Rollbalken wurde verschoben msg[3] Handle des Fensters msg[4] die neue Sliderposition: 0000 = ganz oben 1000 = ganz unten Die Unterstützung der neuen Nachrichtentypen kann per appl_getinfo (Opcode 12) erfragt werden. Für benutzerdefinierte Mitteilungen hat Digital Research übrigens Message-Nummern jenseits von 1024 vorgeschlagen. Zur Größe des Nachrichtenpuffers: Eine einzelne Applikation sollte unter MagiC 2.0 nicht mehr als 16 Fenster nutzen, da sonst der Nachrichtenpuffer des Systems überlaufen kann und evtl. Redraws nicht mehr ausgeführt werden können. Querverweis: evnt_multi evnt_mesag AV-Protokoll OLGA-Protokoll Drag&Drop