Willkommen zum Amiga Modula-2 System! © 15.11.89 Sie befinden sich nun direkt im Modula-2 Editor. Um sich in diesem Text herum- zubewegen, genügt es, wenn Sie mit der Maus auf die gestrichelte Zeile (unten) fahren und links oder rechts klicken, um vor- bzw. rückwärts zu blättern. Pro- bieren Sie es gleich mal aus! Mit der rechten Maustaste können Sie den Menu- balken erscheinen lassen, über welchen Sie m2emacs auch wieder verlassen können. Bevor Sie die beileigenden Demos ausprobieren, sollten sie M2Amiga auf Ihrem System installieren (siehe Kapitel 2 im Handbuch). Auf diese Weise können sie den m2emacs Editor verwenden um die Dokumentationstexte zu den Demos durchzulesen. Bitte lesen Sie die Dokumentationstexte durch, bevor sie die Demoprogramme aufstarten. Änderungen gegenüber dem Handbuch _________________________________ Mit dieser Version wurden einige neue Interface Module in der Sammlung aufgenommen. Diese Zunahme hat dazu geführt, dass die .obj und .sym Dateien nur noch in archivierter Form auf der Diskette Platz gefunden haben. Dank der Verbesserung des Stack-Check Codes ist es dafür nicht mehr notwendig, dass zwei Versionen des Compilers vorhanden sind. Damit Sie die Module verwenden können, müssen Sie diese aus dem Archiv extrahieren. Benutzen Sie dafür den zoo Befehl ab der Demo-Diskette: Beispiel: Neben der System-Diskette brauchen Sie eine weitere formattierte Diskette, die Ihre Arbeitsdiskette werden wird. cd ram: makedir Modules cd Modules zoo -extract Modula-2:M2/Modules copy /Modules Work:Modules ALL Das Modul Windows wurde um zwei Prozeduren erweitert: ClearEOL(u:Window); Löscht alle Zeichen von der aktuellen Cursorposition bis ans Ende der Zeile. ModifyWindow(VAR u:Window; newX,newY,newW,newH:INTEGER); Mit dieser Prozedur kann die Position und Grösse des Fenster verändert werden. Für jeden der Parameter kann auch -1 eingesetzt werden, dann bleibt der entsprechende Wert erhalten. Bsp: ModifyWindow(w,-1,-1,200,-1); Die Breite des Fensters wird auf 200 gesetzt, Höhe und Position des Fensters bleiben unverändert. Das Modul Workbench ist WBArg.lock vom Typ FileLockPtr und nicht vom Typ ADDRESS (Seite 13-101, Zeile 32). Der M2Amiga Compiler ist in der Lage, Prozeduren aus den Amiga-Libraries (z.B. Exec, Intuition) direkt aufzurufen, wobei die Parameter direkt in den Registern üebergeben werden. Manchmal muss der Compiler trotzdem einen Umweg über den Stack eingehen, nämlich wenn Parameter in Register liegen, die vom Compiler speziell behandelt werden. Dies betrifft insbesondere die Register D0 und D1. Bsp: PROCEDURE P(data1{0B}:LONGINT; data2{2B}:LONGINT); i,j:LONGINT; PROCEDURE f(x:LONGINT):LONGINT; Wird nun P(i,j) aufgerufen, dann könnte der Wert der Variablen i direkt in das Register D0 abgelegt werden. Wird aber P(i,f(j)) aufgerufen, dann geht das nicht, denn f(j) würde sein Resultat auch im D0 Register ablegen, und somit den ersten Parameter überschreiben. Um sicher zu gehen, dass solches nicht passieren kann, wird der erste Parameter zuerst auf den Stack geladen und nach dem Auswerten aller Parameter vom Stack ins D0 Register gebracht. Mit der Compileroption Z kann man den Compiler dazu bewegen, die Register direkt zu laden, ohne den Umweg über den Stack: (*$Z-*) P(i,j); (*$Z=*) Diese Option sollte man nur verwenden wenn die Parameter einfache Variablen oder Konstanten sind, und nicht wenn Ausdrücke vorkommen, also z.B. nicht für P(i,f(j)) oder P(i,i*j). Bekannte aber (leider) noch nicht behobene Fehler _________________________________________________ Es ist zwar nicht gut für's Image Fehler zuzugeben, doch wir sind der Meinung, dass wir Ihnen damit einen Dienst erweisen. Sie ersparen sich stundenlanges Fehlersuchen, wenn Sie die Fallen kennen und umgehen können. - Wird der Compiler aufgestartet, wenn nur ca. 150-200 KByte Speicherplatz vorhanden sind, dann wird er zwar vom Amiga Betriebssystem geladen, er hat aber zuwenig Platz für seine Variablen und bleibt hängen und es gibt keine Möglichkeit den Compiler aus dieser Situation heraus zu bringen. - Das Amiga-Betriebssystem weist offensichtlich einen Fehler auf. Es ist uns schon mehrmals aufgefallen, dass, wenn wir globale Variablen im Umfang von insgesamt mehr als 262 kByte definieren, unerklärliche und nicht wiederhol- bare Dinge passieren. Wir konnten der Sache jeweils abhelfen, wenn wir die grössten Variablen in den Heap legten und nur die Zeiger darauf exportierten. Der Fehler haben wir schon an Commodore weitergeleitet und hoffen, dass er in der nächsten Version der Workbench behoben sein wird.