MultiDialog fr Atari TOS-Rechner GEM-Dialoge und Multitasking Anleitung fr die Versionen ab 1.00 von Helmut Neukirchen Stand: 30. Mai 1993 (c) 1992-93, alle Rechte vorbehalten Inhaltsverzeichnis: I. Demonstration fr Neugierige II. Einleitung III. MultiDialog in der Praxis IV. Installation V. Konfiguration VI. Einschr„nkungungen und zuknftige Versionen VII. GEM-Programmierer und MultiDialog VIII. Fragen und Antworten IX. Vertrieb, Rechtslage Zu dieser Anleitung: Eine Zusammenfassung erhalten Sie, indem Sie nur die Textstellen lesen, die eingerckt und rechtsbndig geschrieben sind. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I. Demonstration fr Neugierige - MULTDIAL.PRG starten (sollte statt MULTDIAL.PRG nur MULTDIAL.ACC vorhanden sein, kann man auch MULTDIAL.ACC in MULTDIAL.PRG umbennen) - Daraufhin sollte eine Dialogbox erscheinen, die sich in einem Fenster befindet. Dieses Fenster kann man nach Lust und Laune verschieben. - Wenn man mit MultiTOS (oder anderen Multitasking- Erweiterungen) arbeitet, kann man jetzt - ohne den Dialog von MULTDIAL.PRG zu beenden - z.B. LINES.PRG starten und das Multitasking bei aktiver Dialogbox bewundern. - Den Dialog von MULTDIAL.PRG kann man beenden, indem man dort auf "OK" oder "Abbruch" klickt. - Die Dialogboxen aller anderen Programme sollten, nun ebenfalls in Fenstern erscheinen. (Falls nicht, findet man die Grnde in Kapitel VI.) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> II. Einleitung Wir befinden uns im Jahre 1993 n. Chr. Das ganze Multitasking auf dem ST ist von Dialogboxen lahmgelegt... Das ganze Multitasking ? Nein! Ein von einem unbeugsamen Programmierer entwickeltes Programm h”rt nicht auf, den Dialogboxen Widerstand zu leisten. Was wollen uns diese Worte sagen ? Sobald eine Dialogbox auf dem Bildschirm dargestellt wird, steht fr alle anderen Applikationen, die ebenfalls auf den Bildschirm ausgeben wollen, das Multitasking komplett!!! Aus dem - ach so sch”nen - Multitasking-Betriebssystem wird zu diesem Zeit- punkt wieder fast ein Singletasking-Betriebssystem, das wertvolle Zeit damit verbringt, tatenlos in einer Schleife zu warten bis der Benutzer nun endlich den Dialog beendet! Doch das muž nicht sein: Was Atari bei der Implementierung des Multitasking-AES vergessen hat, wird nun durch MultiDialog nachgeholt: Dialogboxen vorhandener GEM-Applikationen erscheinen in GEM-Fenstern; MultiDialog erm”glicht so uneingeschr„nktes Multitasking unter GEM. (naja, ATARI wird es wohl nicht vergessen haben, sondern die Implementierung verworfen haben, da es Inkompatibilit„ten gibt (s. Kapitel VI), die sich ATARI nicht leisten kann.) Mittlerweile drfte klargeworden sein, daž MultiDialog haupts„chlich fr ein Multitasking-TOS gedacht ist: Entsprechend wurde es auch unter MultiTOS getestet (auf ST, TT und FALCON). Zu Mag!X, MultiGEM oder anderen Multitasking-Erweiterungen kann ich nichts sagen, aber MultiDialog mžte auch unter diesen Systemen laufen, da es keine speziellen Eigenschaften von MultiTOS voraussetzt. (Das kann sich aller- dings in zuknftigen Versionen „ndern, da es im Moment bereits MultiTOS Aufrufe benutzt, wenn dieses vorhanden ist!) (es w„re nett, wenn mir jemand mal schreibt, ob MultiDialog mit Mag!X oder MultiGEM funktioniert...) Im brigen l„uft MultiDialog auch auf den altbekannten TOS-Versionen, allerdings drfte es dort nur im Zusammenspiel mit Accessories sinnvoll zum Einsatz kommen. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> III. MultiDialog in der Praxis Was macht MultiDialog ? MultiDialog verankert sich im Betriebssystem und sorgt bei beliebigen GEM- Applikationen dafr, daž deren Dialoge komplett in Fenstern abgewickelt werden. Unter einem Multitasking GEM k”nnen daher andere Applikationen ungehindert weiterlaufen. Solche Dialoge kennen einige vielleicht bereits von anderen, neueren Applikatonen, wo Dialogboxen in Fenstern bereits "serienm„žig" vorzufinden sind. MultiDialog macht dasselbe, halt nur mit beliebigen GEM-Applikationen. Der Begriff "beliebige GEM-Applikationen" muž an dieser Stelle allerdings sofort wieder relativiert werden, da es tats„chlich viele Programme gibt, bei denen MultiDialog keine Wirkung zeigt. Ist das bei einem Programm der Fall, so wird der entsprechende Dialog wie bisher gewohnt durchgefhrt, mit der Konsequenz, daž das Multitasking lahmgelegt ist. (N„heres dazu in Kapitel VI. "Einschr„nkungen und zuknftige Versionen") Was „ndert sich in der Praxis ? Die Bedienung der Dialoge erfolgt wie gewohnt und doch gibt es einige Neuerungen: Die Dialogboxen mssen nicht mehr unbedingt in der Mitte erscheinen: Bisher erschienen die Dialogboxen genau in der Bildschirmmitte. Insbesondere auf Grožbildschirmen ist das jedoch sehr l„stig, da dann die Wege, die man mit dem Mauszeiger zurcklegen muž, sehr grož werden. MultiDialog bietet die M”glichkeit, die Dialogbox an anderen Positionen erscheinen zu lassen. Die Dialogboxen erscheinen in Fenstern: Je nach Einstellung (s. Kapitel V. "Konfiguration") das fr die Optik, daž die Dialogboxen am oberen Rand den bekannten Bewegungs- und Namensbalken eines Fensters besitzen oder auch nur zus„tzlich den Fensterrand samt Schatten "verpažt" bekommen. Das heižt aber auch, daž die Gesamtausmaže einer Dialogbox gr”žer werden k”nnen, so daž sie evtl. nicht mehr komplett auf den Bildschirm pažt. Im Extremfall ist dann die unterste Zeile im Dialog nicht mehr sichtbar. Dialog-Fenster, die von MultiDialog fr Dialoge ge”ffnet wurden, besitzen den Titel " MultiDialog: ", wobei der Name des Programms ist, von dem der Dialog stammt. (Wenn Sie kein MultiTOS benutzen, erscheint bei Accessories der Name "Accessory".) Da das Fenster einen Bewegungsbalken besitzt, kann damit die gesamte Dialogbox veschoben werden. Die Dialoge k”nnen aužerdem verschoben werden, indem man auf den Hintergrund einer Dialogbox klickt, um diese dann mit gedrckter Maustaste zu verschieben. (Das funktioniert allerdings nur, wenn das betreffende Programm form_dial-Aufrufe benutzt.) MultiDialog macht somit FlyDials berflssig! Aber das Sch”nste ist: W„hrend der Dialogbehandlung l„uft das Multitasking weiter: Das heižt, die Menleiste ist weiterhin zug„nglich. Man kann dann z.B. ein Accessory oder eine andere Applikation anw„hlen und damit arbeiten. Ebenso ist es m”glich, die Fenster oder das Desktop der anderen Applikationen zu manipulieren. Jegliche Aktionen mit der Menleiste oder den Fenstern der Applikation, die gerade den Dialog durchfhrt, sind jedoch nicht m”glich. Man kann zwar deren Meneintrage ausw„hlen oder versuchen, deren Fenster zu ver„ndern, allerdings erfolgt darauf keine Reaktion. Das ist erst wieder m”glich, wenn der entsprechende Dialog abgeschlossen wird. Alle anderen Fenster der dazugeh”rigen Applikation k”nnen nicht aktiviert werden, solange dieser Dialog stattfindet. Kurz: Mit einer Applikation kann erst wieder gearbeitet werden, wenn deren Dialog beendet ist. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> IV. Installation Die Installation von MultiDialog gestaltet sehr einfach: Kopieren Sie die Datei MULTDIAL.PRG in den AUTO-Ordner Ihres Bootlaufwerks. Beim n„chsten Systemstart wird es dann automatisch eingebunden. Nach der Installation k”nnen Sie MultiDialog konfigurieren. Starten Sie hierzu MULTDIAL.PRG oder richten Sie MultiDialog als Accessory ein. (MULTDIAL.PRG als MULTDIAL.ACC in das Verzeichnis kopieren, aus dem Ihre Accessories geladen werden. In der Regel also A:\ oder C:\) Der Accessory-Betrieb drfte allerdings nur notwendig sein, wenn Sie die Konfiguration oft „ndern mssen, z.B. um die optimalen Einstellungen fr ein Programm herauszufinden. Hinweis fr MiNT/MultiTOS-Benutzer: Ob Sie MULTDIAL.PRG vor oder nach MINT.PRG in den AUTO-Ordner kopieren, sollte eigentlich egal sein (die Programmflags fr die Memory-Protection mssen jedoch auf GLOBAL eingestellt sein). Ich empfehle jedoch, es nach MINT.PRG zu starten. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> V. Konfiguration Wird MultiDialog als GEM-Programm gestartet, so erscheint eine Dialogbox, in der MultiDialog konfiguriert werden kann. Wurde MultiDialog als Accessory installiert, so muž man dazu in der Menleiste den Accessory-Eintrag "MultiDialog" anw„hlen. (Wurde MultiDialog nur als Accessory installiert, so muž zun„chst MULTDIAL.PRG gestartet werden, um MultiDialog zu installieren. Diesen Fall teilt das Accessory dem Benutzer ber eine Alertbox mit.) Nach Start von MULTDIAL.PRG oder nach anw„hlen des Accessory-Eintrags "MultiDialog" erscheint auf dem Bildschirm eine Dialogbox, in der verschiedene Parameter von MultiDialog eingestellt werden k”nnen. (Die Bedeutung der einzelnen Einstellungen wird sich dem Nicht-Programmierer nicht so schnell erschliežen, da sie sehr technischer Art sind. Die meisten Einstellungen mssen aber sowieso nie ver„ndert werden, da sie standard- m„žig auf der sinnvollsten Stellung stehen.) Im einzelnen sind das folgende Schalter: "MultiDialog: An/Aus": (MultiDialog ein- und ausschalten) Mit diesem Schalter kann MultiDialog abgeschaltet werden. MultiDialog ist dann zwar immer noch im Betriebssystem eingeklinkt, aber alle weiteren Aufrufe, die MultiDialog sonst abfangen wrde, werden ignoriert und einfach ans Betriebssystem durchgereicht. W„hrend dieser Schalter von globaler Wirkung ist, k”nnen sich alle weiteren Schalter auf einzelne Applikationen beziehen (s.u.): "FormCenter: immer/Mitte/Ecke/Maus": (Position der Dialogboxen) Diese Schalter beziehen sich auf den Ort, an dem eine Dialogbox erscheint. (der Name stammt von der GEM-Funktion form_center, mit der Applikationen ihre Dialogboxen positionieren k”nnen.) Normalerweise erscheinen Dialogboxen immer in der Mitte des Bildschirms; auf Ganzseitenbildschirmen kann das aber auf Dauer ziemlich st”rend sein, da man die Maus erst mehrere Kilometer ;-) bewegen muž, um den Dialog bedienen zu k”nnen. MultiDialog kann dies lindern, indem es mehrere Alternativen anbietet, die Dialogbox zu positionieren. In der Stellung "Ecke" wird die Dialogbox in der linken oberen Ecke (also in der N„he der Menleiste) erscheinen, in der Stellung "Maus" sucht die Dialogbox die N„he des Mauszeigers. Ist "Mitte" eingestellt, so erscheint die Dialogbox - wie gewohnt - in der Mitte, allerdings merkt sich MultiDialog die Position der Dialogboxen, so daž sie an der Stelle erscheinen, an der Sie sie zuletzt positioniert haben. Im Gegensatz zu den bisher aufgefhrten M”glichkeiten, verh„lt sich "immer" nicht so. Hier erscheint die Dialogbox immer in der Mitte des Bildschirms, egal wo sie sich beim letzten Mal befand. Sollten Sie irgendwelche Probleme mit Dialogboxen haben, die nicht ganz sichtbar sind, weil sie z.B. aus dem Bildschirm ragen, stellen Sie hier "immer" ein. Dann wird die Routine benutzt, die auch ohne MultiDialog verwendet wrde. "Fenster bei: Alert|FormDial|FormDo": (Bedingungen, wann Fenster verwendet werden) Diese Schalter geben an, unter welchen Umst„nden ein Dialog in einem Fenster dargestellt wird. Ist "Alert" eingeschaltet, so erscheinen Alertboxen in einem Fenster. (Alertboxen sind daran zu erkennen, daž sie maximal 3 Kn”pfe und 5 Zeilen Text, sowie evtl. ein kleines Warnsymbol besitzen.) Alertboxen sollten eigentlich keine Probleme bereiten, weshalb dieser Schalter immer aktiviert sein kann. (Naja, mit dem Redraw gibt es manchmal doch Probleme, die aber rein optischer Natur sind.) Die beiden anderen Schalter beziehen sich nicht mehr auf Alertboxen, sondern auf Dialogboxen, welche ”fter Verwendung finden. Die Einstellung "FormDial" bietet die gr”žte Flexibilit„t, es gibt jedoch einen Umstand, der es n”tig macht, "FormDial" zu deaktivieren (s. Kapitel VI.). (Der Name stammt von der GEM-Funktion form_dial, mit der Dialogboxen angekndigt werden sollen.) Sollten Sie feststellen, daž nach Beendigung eines Dialogs das Fenster "tot" zurckbleibt und nicht gel”scht wird, so deaktivieren Sie bitte den Schalter "FormDial" und verwenden Sie stattdessen die Einstellung "FormDo", die dieses Problem nicht aufwirft. (Lesen Sie dazu auch das Kapitel VIII. "Fragen und Antworten".) Da es aužerdem einige Programme gibt, die keine form_dial-Aufrufe t„tigen, gibt es aužerdem noch die M”glichkeit, mittels "FormDo" auch diese in den Genuž von Fenstern kommen zu lassen. (mittels form_do k”nnen Programme einen Dialog bedienen lassen.) Dialogboxen, die erst durch die Einstellung "FormDo" in Fenster gelangen, sind allerdings nicht so bequem zu Bedienen, wie diejenigen bei denen "FormDial" gengt. Zum einen k”nnen deren Fenster nicht verschoben werden, zum anderen wird das Fenster zu Anfang jedes FormDo-Aufrufs ge”ffnet und bei dessen Ende geschlossen. Daraus resulieren zwei Nachteile: In vielen Dialogen kann der Benutzer Eintr„ge in der Dialogbox ber Pfeile o.„. scrollen (z.B. im IKONEN ANMELDEN Dialog der neueren Desktops, wobei dieser Dialog ein schlechtes Beispiel ist, wie weiter unten erl„utert wird). Jedesmal wenn ein neuer Eintrag angezeigt wird, muž das Fenster ge”ffnet und sp„ter wieder geschlossen werden. Zum einen ben”tigt das jedesmal relativ viel Zeit, zum anderen kann es passieren, daž dieser Dialog dabei von anderen Fenstern, die kurzzeitig aktiv werden, bermalt wird (was fr die Optik sicherlich nicht vorteilhaft ist). Der letztere Effekt kann evtl. mit der Einstellung bei "ObjcDraw bei FormDo" gelindert werden. Im Gegensatz zu FormDial-Dialogen k”nnen die Fenster der FormDo-Dialoge nicht verschoben werden! Es gibt noch eine dritte Art von Dialogen, n„mlich solche, die weder einen form_dial-, noch eine form_do-Aufruf benutzen. Das sind in der Regel solche, die bereits eine besondere Form der Dialogbehandlung anbieten (z.B. verschiebbare (sog. FlyDials) oder ber Tastatur bedienbare Dialoge). Diese k”nnen von MultiDialog nicht abgefangen und in Fenstern dargestellt werden. "ObjcDraw bei FormDo: Ja/Nein": (Inhalt der Dialogbox neuzeichnen) Diesen Schalter k”nnen Sie nur ver„ndern wenn bei "Fenster bei:" "FormDo" aktiviert ist, da sich diese Einstellung nur auf Dialoge bezieht, die bei einem form_do-Aufruf in ein Fenster umgeleitet wurden. Wie bereits oben erw„hnt k”nnen dabei Probleme auftreten, weil der Inhalt der Dialogbox durch andere Fenster bermalt wird. Da das in der Regel der Fall ist, sollte hier "Ja" eingestellt werden. Manche Dialogboxen enthalten jedoch Grafiken (z.B. Bilder, Farbverl„ufe), die MultiDialog nicht ber den GEM-Aufruf objc_draw rekonstruieren kann; in diesem Fall ist "Nein" einzustellen. "Fenstertitel: Ja/Nein": (Dialogfenster mit Titelbalken) Hiermit k”nnen Sie einstellen, ob die Dialogfenster, die MultiDialog anlegt, den von Fenstern gewohnten Titel- bzw. Bewegungsbalken besitzen sollen oder nicht. Bei "Ja" wird ein Fenster mit Titelzeile verwendet, so daž man sofort ablesen kann, wozu der entsprechende Dialog geh”rt. "Nein" unterbindet dies, was den Vorteil hat, daž die Fenster nicht soviel Platz wegnehmen. "^", "v", "Neu", "L”schen": (Liste fr automatische Umschaltung) Da das eine Programm eine andere Einstellung als das andere ben”tigt, besitzt MultiDialog eine automatische Umschaltung der Einstellungen. Das geschieht ber eine Liste, in der jedem Programm seine Einstellung zugeordnet ist. Mittels des "Neu"-Knopfes kann ein neuer Eintrag in der Liste angelegt werden. Tippen Sie dazu nach Drcken des "Neu"-Knopfes einfach den Namen des Programms, fr das eine spezielle Einstellung n”tig ist, ein. (Nehmen Sie den Namen, wie er von MultiDialog im Fenstertitel angezeigt wird. Wenn Sie kein MultiTOS verwenden, kann der Name von Accessories nicht ermittelt werden; daher ist fr Accessories auch keine automatische Umschaltung m”glich.) Mit den Pfeilkn”pfen k”nnen Sie durch die Eintr„ge bl„ttern und nachtr„glich deren Einstellungen „ndern (sie beziehen sich immer auf das Programm mit dem neben den Pfeilkn”pfen angezeigte Namen.) Da die meisten Programme mit derselben Einstellung laufen, gibt es den Eintrag "Default", dessen Einstellungen immer dann benutzt werden, wenn MultiDialog den Namen eines Programms nicht in der Liste, die Sie angelegt haben, finden kann. Wenn Sie Eintr„ge aus der Liste wieder l”schen wollen, so k”nnen Sie dies mit dem "L”schen"-Knopf machen. Es wird dann der Eintrag gel”scht, der im Moment angezeigt wird. Fr dieses Programm wird dann wieder die Default-Einstellung verwendet, die man nicht l”schen kann. "Sichern", "OK", "Abbruch": Um die gemachten Einstellungen zu sichern, wird der "Sichern"-Knopf verwendet. Er speichert die Einstellungen dann in der Datei "MULTDIAL.INF" ab. Zun„chst wird versucht, diese im AUTO-Ordner Ihres Startlaufwerks anzulegen (von wo sie MultiDialog auch beim n„chsten Start l„dt), scheitert dies, so wird sie im aktuellen Verzeichnis gespeichert. "OK" beendet den Dialog, "Abbruch" macht das gleiche, aber die zuletzt gemachte Žnderung wird ignoriert. (Das bezieht sich dabei auf Žnderungen, die an der im Moment sichtbaren Einstellung gemacht worden sind. Sobald Sie die Pfeiltasten (oder "Neu" bzw. "L”schen") benutzen, werden die Žnderungen, die Sie gemacht haben, sofort bernommen!) Aužerdem befindet sich im unteren Ende der Dialogbox ein Anzeige, in der alles wichtige aus dieser Datei kurz zusammengefažt ist. Mit den Pfeilen, die sich rechts daneben befinden, kann man den angezeigten Ausschnitt ver„ndern. >>>>>>>>>>>>>>>>>>>>>>>>>>>>> VI. Einschr„nkungen und zuknftige Versionen Alle zur Zeit bekannten Fehler, die MultiDialog besitzt, sind rein optischer Natur und beintr„chtigen in keiner Weise die Betriebssicherheit: Zun„chst die Fehler, die nur bei Singeltask-Betriebssystemen auftreten: Das Desktop benutzt keine TRAP #2 GEM-Aufrufe, deshalb kann MultiDialog die Dialogboxen des Desktop nicht abfangen. (Das Desktop des MultiTOS hingegen verwendet TRAP #2 Aufrufe, so daž hier MultiDialog aktiv wird.) MultiDialog kann die Namen von Accessories nicht herausfinden, aus diesem Grund ist auch keine automatische Einstellungsumschaltung fr Accessories m”glich. (In AES Versionen < 4.0 gibt es keine M”glichkeit, nach Prozessen zu suchen.) Da MultiDialog MultiTOS kennt, gibt es hier nur einen speziellen Fehler: MultiDialog benutzt den appl_search-Aufruf, um den Namen einer Applikation herauszufinden; dabei wird der interne Z„hler von appl_search ver„ndert. Ruft daher z.B. eine Applikation appl_search auf, benutzt dann einen Dialog und ruft anschliežend nochmal appl_search auf, so liefert der 2. Aufruf nicht den erwarteten Wert, da in der Zwischenzeit MultiDialog ebenfalls appl_search aufgerufen hat. Nun die Fehler, die in allen TOS-Versionen auftreten: Programme, die eigene Dialogroutinen besitzen (z.B. fly-dials), profitieren nicht von MultiDialog, da sie keinen form_do-Aufruf benutzen, den MultiDialog aber ben”tigt. Nicht immer ist ein Redraw fr die Fenster der Applikation, deren Dialog abgefangen wurde, m”glich. MultiDialog kann n„mlich nur den Teil eines Fensters neuzeichnen, der sichtbar war, als das Dialogfenster ge”ffnet wurde. Žhnliche Probleme gibt's bei Alertboxen. Die originalen GEM-Alertboxen retten den Bildschirminhalt und restaurieren ihn wieder; MultiDialog macht das nicht, da ja in der Zwischenzeit der Bildschirminhalt sich v”llig ver„ndert haben kann. Einige Programme benutzen Alertboxen bei ausgeschaltetem Mauszeiger. Die originale Betriebssystemfunktion kann in diesem Fall ohne Probleme den Mauszeiger anschalten, MultiDialog hingegen nicht. (wenn mir jemand verr„t, wie ich herausfinde, wie oft ich graf_mouse(M_ON) aufrufen muž, bis der Mauszeiger sichtbar ist, lieže sich dieses Problem auch beheben.) Žltere Programme reservieren so ziemlich allen freien Speicher. MultiDialog ben”tigt aber Speicher, um Dialoge in Fenster zu legen, weshalb nach Start dieses Programms keine Dialoge mehr in Fenstern erscheinen. (Da diese Programme aber unter MultiTOS ebenfalls Probleme bereiten, drfte diese Unart aussterben.) Dank MultiDialog kann man auf die Menleiste auch w„hrend eines Dialogs zugreifen. Das Programm kann aber auf keinerlei Ereignisse reagieren, weil es nur darauf wartet, daž der Dialog beendet wird. W„hlt man trotzdem eine Meneintrag an, so passiert nichts. (Man muž halt zuerst den Dialog beenden; aus genau dem gleichen Grund kann man auch nicht mit den Fenstern oder dem Desktop des betreffenden Programms arbeiten, man muž erst den Dialog beenden.) Jedesmal, wenn eine Dialogbox bewegt oder neugezeichnet wird, springt der Cursor in einem Eingabefeld an das Ende des Feldes. Es ist gar keine gute Idee, ein Programm zu starten bzw. zu beenden oder die Aufl”sung zu wechseln, w„hrend ein Dialog, der von MultiDialog abgefangen wird, sichtbar ist. (Ersteres bezieht sich auf Singletask- Betriebs-systeme, letzteres auf MultiTOS.) MultiDialog kann zwar damit umgehen, aber dazu muž es die Dialoge gewaltsam beenden: Es tut so, als habe der Benutzer den Default-Knopf gedrckt (normalerweise ist das "OK" oder "Abbruch"). Wenn kein Default- Button existiert, wird ein Druck auf auf den letzten Knopf der Dialogbox simuliert, was h„ufig der "Abbruch"-Knopf ist. Aber dieser Knopf k”nnte genauso gut ein "Alles l”schen/Formatiere Festplatte/Starte Atomkrieg"-Knopf sein, weshalb man besser erst die Dialogbox verl„žt und dann den Aufl”sungswechsel durchfhrt oder ein Programm startet bzw. beendet. Das Dateiauswahl-Formular wird von MultiDialog nicht abgefangen. (So daž bei einer Dateiauswahl die Bildschirmausgabe weiterhin stillsteht.) Gleiches gilt fr kritischen Fehlermeldungen des TOS. Kommen wir nun zu einem wirklich „rgerlichen Problem :-( Macht ein Programm mehr form_dial(FMD_START)-Aufrufe als form_dial(FMD_CLOSE), so bleiben "Fensterleichen" auf dem Bildschirm zurck. Diese Fenster k”nnen weder geschlossen, noch bewegt werden - eine M”glichkeit ist, das Programm, zu dem der Dialog geh”rt, zu beenden. Tritt dieses Problem auf, so sollte man man "Fenster bei: FormDial" ausschalten und stattdessen "Fenster bei: FormDo" benutzen. (Aus diesem Grunde habe ich die automatische Umschaltung eingebaut - wahrscheinlich ist das auch der Grund, weshalb ATARI so etwas „hnliches wie MultiDialog nicht ins MultiTOS eingebaut hat!) Lesen Sie dazu das Kapitel VIII. "Fragen und Antworten"; dort wird erkl„rt, wie Sie ein "totes" Fenster wieder entfernen k”nnen, ohne das betroffene Programm zu beenden. Anmerkung: Solch ein Verhalten ist weniger ein Fehler in MultiDialog als ein echter Fehler der betreffenden Applikation, der auch den Entwicklern dieser Applikation gemeldet werden sollte. Aber es kommt noch besser: Ratet mal, welchen Fehler das Desktop in MultiTOS hat! Na? Genau: Alle Dialoge in denen ein "šberspringen"-Knopf existiert, rufen jedesmal, wenn die Dialogbox fr die n„chste Datei aufgebaut wird form_dial(FMD_START) auf, machen aber nur _ein_ form_dial(FMD_FINISH), nachdem die letzte Datei dargestellt wurde. MultiDialog versucht daher, diese Fehler zu abzufangen, aber es funktioniert nur mit dem MultiTOS vom 16.2.1993, dies kann bei zuknftigen MultiTOS Versionen scheitern. (Ich habe diesen Fehler Eric Smith gemeldet, hoffentlich ist er bald behoben!) Fehler-Berichte, die MultiDialog betreffen, bitte an meine Adresse (s.u.). Am liebsten natrlich per e-mail (Emaille?)! Aber, nicht vergessen: Immer Versionsnummer von MultiDialog, TOS-Version und bei MultiTOS das AES-Datum und Sprache des AES angeben. Was wird in den n„chsten Versionen von MultiDialog kommen ? Nun zun„chst einmal werde ich versuchen, die Zuverl„ssigkeit weiter zu erh”hen und die bekannten Fehler zu beheben. Wenn meine Arbeit finanziell untersttzt wird, kommt dann aužerdem noch eine Tastaturuntersttzung hinzu, d.h. beliebige Dialogboxen k”nnen per Tastatur bedient werden. Irgendwann werde ich auch mal einen C-Compiler bemhen mssen, um ein CPX fr's erweiterte Kontrollfeld zur Konfiguration zu schreiben. Aužerdem gibt's vielleicht eine englischsprachige Version (Falls sich viele englischsprachige Benutzer finden). >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> VII. GEM-Programmierung und MultiDialog Die folgenden Ausfhrungen sind fr Programmierer gedacht, der Nur-Anwender kann getrost ber sie hinweg lesen: MultiDialog verbiegt ein paar Vektoren mittels XBRA-Strukturen (die Kennung ist "MDIA"). Es benutzt den TRAP #2 Vektor (GEM, um die AES-Aufrufe abzufangen), TRAP #13 (BIOS, um MultiDialog in den TRAP #2 Vektor einzu- klinken) und den GEM-Vektor 258 (etv_term, um bei einem Programmabbruch den angelegten Speicher korrekt zu entfernen). Um MultiDialog ein korrektes Arbeiten zu erm”glichen, sollte es nur in Umgebungen eingesetzt werden, in denen fr den TRAP #2 und etv_term-Vektor ebenfalls XBRA-Strukturen verwendet werden! Wenn der cookie-jar existiert, wird aužerdem ein cookie ("MDIA") angelegt: Der Cookie MDIA enth„lt einen Zeiger auf ein Langwort, das die aktuelle Globale Konfiguration von MultiDialog enth„lt. Das oberste Bit (31) entspricht dabei der Schalterstellung "MultiDialog: An/Aus" (Bit gesetzt: An, Bit gel”scht: Aus). Alle weiteren Bits bleiben undokumentiert und drfen nicht ver„ndert werden. Das diesem Langwort vorhergehende Wort enth„lt die BCD-codierte Versionsnummer von MultiDialog (z.B. V1.01=$0101, V1.23=$0123). Versionen vor 1.01 enthalten in diesem Wort den Wert 0. Also: IF Versionswort = $0000 THEN Version<1.01 ELSE Version=Versionswort Das diesem Wort vorhergehende Wort enth„lt einen Bitvektor, der ver- schlsselt die F„higkeiten der installierten MultiDialogversion enth„lt (unabh„ngig davon, ob die jeweiligen F„higkeiten vom Benutzer deaktiviert wurden): Bit 0: es existiert eine neue form_center-Routine Bit 1: Dialogboxen werden in Fenster umgeleitet Bit 2: Alertboxen werden in Fenster umgeleitet Bit 3: Dialogboxen k”nnen per Tastatur bedient werden Bit 4: Dialogfenster k”nne ohne MOVER & NAMEn dargestellt werden (alle brigen Bits sind reserviert; gesetzte Bits bedeuten, daž die entsprechende F„higkeit vorhanden ist.) Dieses Wort existiert enth„lt in Versionen vor 1.01 den Wert 0 und muž dann als $0007 interpretiert werden. Also: If Versionswort = $0000 THEN F„higkeiten=$0007 ELSE F„higkeiten=F„higkeitenwort Zusammenfassung: Word: F„higkeiten (Version=$0000=>$0007) Word: Version ($0000=>Version<1.01) Cookie Jar: MDIA Zeiger ----> Long: Konfiguration Dieser Speicherbereich hat den Protectionstatus GLOBAL. Fr jeden dargestellten Dialog wird Speicher ber den Malloc-Befehl ange- fordert, fr lokale Variablen, das Fenster (wird vom AES gemacht) und ziemlich viel Speicher fr Redraw-Anforderungen der nicht-Dialog-Fenster einer Applikation (bei ST-Aufl”sungen 32kB, aber mit True-Color und Ganzseitenbildschirmen kann's auch 0,5MB und mehr werden.) Wenn kein Speicher mehr frei ist, kann dann nicht mehr das Redraw ausgefhrt werden oder im Extremfall das Fenster nicht mehr ge”ffnet werden, in diesem Fall wird dann die herk”mmliche Routine ausgefhrt. (Durch die Benutzung von dynamischem Speicher ist MultiDialog voll reentrant und untersttzt beliebig viele Dialoge gleichzeitig.) Wenn auch Ihr Programm von MultiDialog profitieren soll, sollten Sie form_dial(FMD_START) zu Beginn eines Dialogs, form_do fr den eigentlichen Dialog und form_dial(FMD_FINISH) am Ende des Dialogs benutzen. Dabei muž unbedingt zu jedem form_dial(FMD_START) auch ein form_dial(FMD_FINISH) existieren, sonst bleiben Fensterleichen zurck. MultiDialog baut darauf, daž auf jeden form_dial(FMD_START)-Befehl wieder ein form_dial(FMD_FINISH) folgt! Untersuchen sie ihre Programme, ob es zu jedem form_dial(FMD_START) auch ein form_dial(FMD_FINISH) gibt! Wenn nicht, l„uft ihr Programm garantiert nicht vernnftig mit MultiDialog. Ich empfehle, die Dialogbehandlung nach dem Beispiel im "ST/STE/TT-Profibuch" auf Seite 777 durchzufhren. Eine Dialogroutine sollte dementsprechend folgendermažen aussehen: form_center(dialog,size_x,size_y,size_w,size_h) wind_update(BEG_UPDATE) wind_update(BEG_MCTRL) /* nicht unbedingt n”tig */ form_dial(FMD_START, size_x, size_y, size_w, size_h, size_x, size_y, size_w, size_h) objc_draw(dialog,ROOT,MAX_DEPTH,size_x, size_y, size_w, size_h) rc=form_do(dialog,ROOT) form_dial(FMD_FINISH, size_x, size_y, size_w, size_h, size_x, size_y, size_w, size_h) wind_update(END_MCTRL) /* nicht unbedingt n”tig */ wind_update(END_UPDATE) Die Gr”že des Bereichs, der bei form_dial reserviert wird, sollte also den Ausmažen der Dialogbox entsprechen; sonst wird das Fenster, das Fenster, das MultiDialog ”ffnet zu grož. Bei der Benutzung von "Spezial-Objekten", die mit objc_draw w„hrend des Dialogs neugemalt werden, sollten man die wirklichen Koordinaten des Objekts (die erh„lt man ber objc_offset) als Clipping-Bereich verwenden - und nicht etwa den Bereich, den man von form_center zurckbekommen hat. Der Benutzer kann n„mlich die Dialogbox aus dem ursprnglichen Clipping- Bereich herausbewegt haben. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> VIII. Fragen und Antworten Frage: Warum erscheint bei mir keine einzige Dialogbox im Fenster ? Antwort: Entweder MultiDialog ist berhaupt nicht installiert (bei Start ber den AUTO-Ordner, muž MultiDialog die erfolgreiche Installation melden), oder es ist abgeschaltet. Prfen Sie in der Konfigurationsdialogbox von MultiDialog nach, ob MultiDialog angeschaltet ist. Aužerdem muž mindestens einer der Kn”pfe "Alert", "FormDial" oder "FormDo" selektiert sein. (Sollten Sie kein MultiTOS benutzen, so erscheinen die Dialogboxen des Desktops nie in Fenstern.) Frage: MultiDialog verursacht bei mir eine Memory-Violation. Was tun ? Antwort: šberprfen Sie, ob die Memory-Protection-Flags von MULTDIAL.PRG auf GLOBAL gesetzt sind (z.B. mit dem Programm PRGFLAGS oder nehmen Sie CHPROT, das macht das automatisch). Aužerdem k”nnen Sie versuchen, ob sich eine Verbesserung ergibt, wenn MULTDIAL.PRG vor oder nach MINT.PRG gestartet wird. Falls das immer noch keine Besserung bringt, schreiben Sie dem Autor mit genauer Beschreibung der Konfiguration. Vielleicht kann ich das Problem beheben, bis dahin wird man die Memory-Protection wohl oder bel abschalten mssen. Frage: Wieso strzen bei mir MultiDialog oder andere Programme immer ab ? Antwort: Es kann sein, daž MultiDialog in Verbindung mit anderen residenten Programmen nicht funktioniert. Deaktivieren Sie nacheinander alle anderen Programme im AUTO-Ordner, um den B”sewicht herauszufinden (Hoffentlich ist nicht MULTDIAL der alleinige šbelt„ter!). Unter MiNT/MultiTOS spielt es evtl. auch eine Rolle, ob die Programme vor oder hinter MINT.PRG im AUTO-Ordner ausgefhrt werden. Im Extremfall muž man hier alle m”glichen Kombinationen ausprobieren (w„hrend ich MultiDialog ausprobiert und auf Inkompatibilit„ten getestet habe, wurde MULTDIAL.PRG meistens als letzte Datei geladen.) MultiDialog vertr„gt sich nicht gut mit Let'em'fly! Man muž sich also fr einen Dialogmanager entscheiden... Frage: Wieso werden bei manchen Programmen die Dialoge nicht in Fenstern dargestellt ? Antwort: K”nnen Sie die betreffenden Dialoge ohne MultiDialog mit der Maus auf dem Bildschirm hin- und herbewegen oder die Kn”pfe mit der Tastatur bedienen ? Dann gibt es keine Chance, die Dialoge in Fenster zu verfrachten, da das Programm eine eigene Dialogverwaltung benutzt. Ansonsten k”nnen Sie mal probieren, den Knopf "FormDo" in der MultiDialog-Konfiguration zu aktivieren, vielleicht klappt's dann. Frage: Dialogfenster, die sehr dicht unter der Menuleiste erscheinen, besitzen keine Titelzeile. Warum ? Antwort: Bei diesen Dialogen ist kein Platz fr den Fenstertitel, so daž dieser in der Menuleiste erscheinen wrde. Um das zu verhindern, wird daher ein Fenster ohne Titel ge”ffnet. Frage: Wieso erscheinen manche Alertboxen des MultiTOS (z.B. "Laufwerk antwortet nicht") nicht in Fenstern ? Antwort: Diese Alertboxen geh”ren zu kritischen Fehlern. Die sind selbst MultiDialog zu kritisch, so daž hier die herk”mmliche Routine benutzt wird. Frage: Bei einigen Programmen erscheinen Alertboxen auf dem Bildschirm, aber der Mauszeiger ist nicht sichtbar. Kann man das verhindern ? Antwort: Im Moment leider nicht. Programme, bei denen dieses Problem auftritt, verlassen sich auf die undokumentierte Tatsache, daž das AES bei einer Alertbox immer den Mauszeiger einschaltet. Da MultiDialog dazu nicht in der Lage ist (zumindest zur Zeit nicht), mssen Sie die Alertbox entweder "blind" bedienen oder Sie deaktivieren "Alert" im Konfigurations- Dialog bei "Fenster bei:". (Wenn mir jemand verr„t, wie ich feststellen kann, wieviele graf_mouse(M_ON)-Aufrufe man machen muž, bis der Mauszeiger sichtbar ist, w„re dieses Problem gel”st...) Frage: Nach Beendigung eines Dialogs bleibt das Fenster dieses Dialogs weiterhin auf dem Bildschirm stehen. Ich kann es aber weder bewegen, noch schliežen. Wie kann ich das verhindern ? Antwort: Schalten Sie in der MultiDialog-Konfiguration den Knopf "FormDial" ab und benutzen Sie stattdessen "FormDo". Dann sollten Sie dieses Problem, das auf unsaubere Programmierung des betroffenen Programms zurckzufhren ist, nicht mehr haben. Am bequemsten ist es, wenn Sie fr dieses Programm einen eigenen Eintrag in der Umschalt-Liste von MultiDialog anlegen und dort die beste Einstellung fr dieses Programm angeben. (s. Kapitel V.) Das "tote" Fenster wird entfernt, wenn Sie das Programm verlassen. H„ufig gelingt es auch, das Fenster zu entfernen, indem man MultiDialog zun„chst abschaltet und dann das betreffende Programm eine Dialogbox anzeigen l„žt. Bei Beendigung dieses Dialogs wird dann das Fenster entfernt. Danach k”nnen Sie MultiDialog wieder einschalten. Frage: Ein Dialog erscheint zwar in einem Fenster und alle anderen Prozesse laufen weiter, aber ich kann das Fenster nicht bewegen. Woher kommt das ? Antwort: Hierbei handelt es sich um einen Dialog, der nach einem form_do Aufruf in ein Fenster umgeleitet wurde. Solche Dialoge k”nnen grunds„tzlich nicht bewegt werden. Falls fr das betreffende Programm "Fenster bei: FormDial" deaktiviert ist, k”nnen Sie probieren, diese Einstellung zu aktivieren, vielleicht k”nnen Sie das Fenster dann bewegen. (Dieses Ph„nomen kann aužerdem bei unsauber programmierten Programmen auftreten!) Frage: Die Dialogbox erscheint zwar in einem Fenster, aber es tr„gt nur den Titel "Dialog" statt "MultiDialog". Woran liegt das ? Antwort: In diesem Fall benutzt das Programm zwar die form_dial-Funktion, aber es verwendet nicht - wie von MultiDialog erwartet - einen form_do-Aufruf. Das ist nicht weiter schlimm, der Dialog (so es denn berhaupt einer ist - manchmal erscheinen auch Statusmeldungen in so einem Fenster) blockiert dann halt die anderen Programme. Frage: Manchmal scheinen Scrollpfeile und andere Auswahlm”glichkeiten in einer Dialogbox nicht mehr richtig zu funktionieren. Ist das normal ? Antwort: Wahrscheinlich haben Sie die Dialogbox verschoben, so daž der Bereich, in dem das Programm die Auswahl darstellen will, sich nicht mehr an der erwarteten Position befindet. Die Auswahl funktioniert dann i.d.R. trotzdem, sie wird nur nicht angezeigt. Versuchen Sie, das Dialogfenster an die alte Position zurckzuschieben, dann mžte es wieder funktionieren. Frage: Ich bin von MultiDialog richtig begeistert. Ist das normal ? Antwort: Ja. Verleihen Sie Ihrer Begeisterung Ausdruck, indem Sie die Arbeit des Autors mit einer Geldspende honorieren. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> IX. Vertrieb, Rechtslage MultiDialog darf (und muž) kostenlos weitergegeben werden. (M”glichst nur komplett; wenn keine Einweisung erfolgte muž aber auf jeden Fall diese Anleitung mitkopiert werden. In Mailboxen am Besten das komplette Archiv uploaden.) Zur Zeit besteht MultiDialog aus folgenden Dateien: MULTDIAL.PRG: Treiber fr den AUTO-Ordner, PRG und ACC in einem ANLEITUN.TXT: diese Datei MANUAL.TXT: englische Anleitung HISTORY.TXT: MultiDialog's Lebenslauf README.1ST: Bemerkungen zur jeweils neuen Version OLDMTOS.TXT: Informationen fr Benutzer „lterer MultiTOS-Versionen FUTURE.TXT: Ausblick auf zuknftige Versionen Jede Art kommerziellen Vertriebes ist untersagt. Der Vertrieb auf PD-Sammeldisketten, die verkauft werden, scheidet somit aus (auch wenn es sich dabei "nur" um sogenannte "Selbstkostenbeitr„ge" handelt: schon mal 'ne Leer-Diskette gesehen, die 8 DM kostet ?) Der Vertrieb zusammen mit kommerziellen Programmen ist nur mit Genehmigung des Autors erlaubt. Bitte setzen Sie sich bei Interesse mit mir in Verbindung. šbrig bleibt daher eigentlich nur der Vertrieb ber Mailboxen, sonstige Netze und direkt ber den Autor. Der Autor bernimmt keinerlei Haftung fr Sch„den, die durch Benutzung des Programms entstehen. Die Benutzung erfolgt auf eigene Gefahr. (w„r ja noch sch”ner, erst nix bezahlen, und dann auf diese Tour kommen.) Regelm„žigen Benutzern wird nahegelegt, den Autor und die Entwicklung von MultiDialog finanziell zu untersttzen. Der Betrag sollte sich dabei nach dem eigenen Einkommen richten (und danach, was einem das Programm wert ist). Damit sich der Verwaltungsaufwand auch lohnt, ist DM 10,-- als Untergrenze anzusehen (Die Obergrenze ist bei 60.000 Atair-Dollars anzusetzen). šberweisungen bitte auf mein Girokonto: Helmut Neukirchen, Stadtsparkasse Krefeld, BLZ 320 500 00 Kontonummer 80 486 947 Untersttzen Sie MultiDialog, nur so ist dessen Weiterentwicklung gew„hrleistet!!! (Eigentlich mssen hier 1000 Ausrufezeichen stehen, denn in MultiDialog habe ich ca. 1000 wertvolle Stunden investiert. Naja, fast jedenfalls.) Um dem Aufwand bei šberweisungen aus dem Ausland aus dem Weg zu gehen, sollen ausl„ndische Benutzer (d.h. ohne Anbindung an den Deutschen Giroverband) den Betrag an ihre jeweilige Greenpeace Organisation berweisen. Neueste Versionen von MultiDialog gibt's ber das Internet per FTP auf dem FTP-Server ftp.informatik.rwth-aachen.de im Verzeichnis /pub/atari/mint (oder so „hnlich) und in der Mailbox MAUS Krefeld. Sollten Sie mit dem Begriff FTP oder MAUS nichts anfangen k”nnen, haben Sie aužerdem natrlich die M”glichkeit, direkt ber den Autor an die neueste Version zu kommen. Schicken Sie mir dazu eine formatierte Diskette und einen ausreichend frankierten, selbstadressierten Rckumschlag. Wenn Sie dann noch angeben, welche Version Sie zur Zeit besitzen, bekommen Sie Ihre Diskette zurck- geschickt, sobald eine neuere MultiDialog Version existiert. Meine Adresse: Helmut Neukirchen e-mail: hn@pool.informatik.rwth-aachen.de B”nnersdyk 63 W-4150 Krefeld <- Ab 1.7.93: D-47803 Krefeld Deutschland Dank gilt allen, die die Weiterentwicklung von MultiDialog untersttzen.