Willkommen zum Amiga Modula-2 System! © 1.11.88 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Die Diskette enthält zwei Varianten des Compilers. M2:m2c wurde mit aus- geschalteten Bereichs-, Überlauf- und Stapelüberlaufoptionen kompiliert. Der Compiler ist deshalb nur 128kByte gross, sollten sie aber den Stapel- bereich nicht genügend gross gewählt haben, wird es während der Compilation zu einem Systemabsturz kommen. In der Archivdatei sicheres-m2c.zoo befindet sich eine Variante die mit eingeschalteten Optionen kompiliert wurde. Dieser Compiler ist 165kByte gross. Falls Sie über mehr als 512kByte Hauptspeicher verfügen, sollten Sie diesen Compiler verwenden. Sie können ihn mit dem auf der Demo-Diskette mitgeleiferten zoo Befehl aus dem Archiv extrahieren: zoo -extract sicheres-m2c -- Windows -------------------------------------------------------------------- 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. -- Workbench ------------------------------------------------------------------ Das Modul Workbench ist WBArg.lock vom Typ FileLockPtr und nicht vom Typ ADDRESS (Seite 13-101, Zeile 32). -- Serial --------------------------------------------------------------------- Das Interfacemodul Serial (Seite 13-96, Zeile 3) definiert nun korrekt: IOSerialPtr=POINTER TO IOSerial; -- m2c / Compiler ------------------------------------------------------------- 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 Registern 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). Zur Fehlermeldung 3031 fehlt der Text in der FehlerMeldungen Datei: 3031: Inkompatible Zuweisung an einen offenen Feldparameter ------------------------------------------------------------------------------- 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. - Es ist nicht möglich, einer Prozedurvariablen eine Codeprozedur zuzuweisen. Es ist ebenfalls nicht möglich, SYSTEM.ADR auf eine Codeprozedur anzuwenden. - Das verwenden von Resultaten einer Funktion im Index einer Feldvariable kann zu Fehlern führen, z.B. wird a[f(i)]:=g(j); falsch ausgewertet. - Das Amiga-Betriebssystem weist offensichtlich einen Fehler auf. Es ist uns schon mehrmals aufgefallen, dass bei globalen Variablen im Umfang von insgesamt mehr als 262 kByte, unerklärliche und nicht wiederholbare Dinge passieren. Wir konnten der Sache jeweils abhelfen, indem wir die grössten Variablen in den Heap legten und nur die Zeiger darauf exportierten. Den Fehler haben wir schon an Commodore weitergeleitet und hoffen, dass dies in der nächsten Version der Workbench behoben sein wird. - Diese Version des Compilers ist nicht in der Lage fehlende Definitionen bei Zeigertypen zu erkennen. Das nachfolgende Beispiel wird ohne Reklamation übersetzt. Die daraus entstehende Deklaration für P ist jedoch unbrauchbar. Bsp: MODULE Fehler; TYPE P=POINTER TO A; END Fehler. ------------------------------------------------------------------------------- Sollten Sie bei der Arbeit mit M2Amiga auf Probleme stossen, bitten wir Sie uns diese schriftlich mitzuteilen. Eine klare Beschreibung des Problems, eventuell sogar mit Beispielen auf einer Diskette, erleichtert uns die Fehlersuche wesentlich. Besten Dank für Ihr Vertrauen und viel Spass mit M2Amiga!