home *** CD-ROM | disk | FTP | other *** search
- -------------------------------------------------------------------------------
- Aktuelle Informationen zum vorliegenden System
- -------------------------------------------------------------------------------
-
- Stand: 8.6.94
- (Shell 2.3g, Compiler 4.3d)
-
- Inhaltsübersicht
- ----------------
- 1. Installation des Systems
- a) Installation eines Updates
- b) Installation auf Harddisk
- c) Installation ohne Harddisk
- d) Installation bei wenig Speicher (Tiny-Shell)
- e) Komprimierte Dateien
- f) Zusammenarbeit mit NEODESK
- g) Das Megamax-Icon
- h) Sonstige Tips
- 2. Änderungen in der Bibliothek - Portierung der alten Programme
- 3. Besonderheiten und Fehler in Bibliothek & Shell
- 4. Fehler bei Benutzung der FPU (Mathe-Coprozessor)
- 7. Änderungen am GME (Editor)
- 8. Hinweise zum Compiler
- 9. Hinweise zum Linker
- 10. Hinweise zum Make
- 11. Erweiterungen in der Shell
- 12. MM2CLink - Der Linker für Turbo-C & Pure-C
- 13. Die aktuellen Nummern der MAUS-Mailboxen
- 14. Korrekturen zum Handbuch
- 15. Weiterer Support & Vertrieb
-
-
- 1. Installation des Systems
- ---------------------------
-
- a) Installation eines Updates
-
- Wann immer sie ein neues System - in der Regel auf vier Disketten - bekommen,
- sollten Sie ALLE Dateien ersetzen. Gehen Sie also wie bei einer Neuinstallation
- vor und retten Sie vorher Ihre veränderten Dateien, wie "MM2SHELL.M2B" und
- "MM2SHELL.M2P". Die anderen Dateien des MM2-Systems müssen Sie vor einer
- Neuinstallation mit HD_INST löschen, da das Programm sonst bei den erneuerten
- Dateien Fehler meldet.
-
- Wenn Sie auf Version 2.3 updaten, können Sie Ihre alten "M2P"-Dateien nicht
- ohne weiteres übernehmen, da sich deren Format geändert hat. Installieren
- Sie erstmal dieses System und übersetzen Sie dann das Modul "Conv_M2P" aus
- dem UTILITY-Ordner. Folgen Sie den Anweisungen im Quelltext, um damit Ihre
- alten M2P-Dateien automatisch auf das neue System anpassen zu lassen.
-
- In der beiliegenden Datei REPORT.TXT finden Sie übrigens Informationen
- über die bisherigen Korrekturen am System.
-
- b) Installation auf Harddisk
-
- Wie im Handbuch beschrieben, installieren Sie das System bequem mit
- dem Programm "HD_INST.PRG". Wollen Sie das System aber nur mal schnell
- ausprobieren, können Sie auch eine der Shells (MM2SHELL.PRG und
- MM2TINYS.PRG) direkt von der Diskette starten. Wenn die Editor (GME)
- und Compiler (MM2COMP) geladen sind, können Sie die Diskette mit dem
- USER-Ordner einlegen und dann beispielsweise die Beispielprogramme
- aus dem DEMO-Ordner übersetzen und starten.
-
- c) Installation ohne Harddisk
-
- Sie können mit dem Modula-System arbeiten, ohne weitere Installationen
- vorzunehmen: Starten Sie die Shell von der Startdiskette und legen
- Sie danach die Arbeitsdisk (die mit dem USER-Ordner) ein. Darauf sind
- alle Dateien enthalten, um Module übersetzen und starten zu können. Um
- mehr Platz zu erhalten, können Sie auch einiges von der Arbeitsdisk
- löschen, beispielsweise MM2CL1.TOS und den SRC-Ordner. Wenn Sie über
- mehr als ein Megabyte Speicher verfügen, richten Sie sich mit Hilfe der
- "MAXIDISK" (s. entspr. Ordner) eine RAM-Disk ein und lassen sich die
- Dateien im SYS-Ordner der Arbeitsdisk auf die RAM-Disk kopieren. Erweitern
- Sie dann die Pfadlisten im Shell-Batch (MM2SHELL.M2B bzw. MM2TINYS.M2B) um
- diese Verzeichnisse in der RAM-Disk.
-
- d) Installation bei wenig Speicher (Tiny-Shell)
-
- Das Programm "MM2TINYS.PRG" ist eine vereinfachte Version der "normalen"
- "MM2Shell". Sie verzichtet auf alle Desktop-Symbol und -Fenster und
- spart dadurch ca. 100 KB Speicher ein. Wenn Sie nur 1 MB Speicher im
- Rechner haben, sollten Sie in der Regel auf diese Shell zurückgreifen.
- Die weiteren Dateien, die mit "MM2TINYS" beginnen, gehören alle zu
- dieser Shell - die mit "MM2SHELL" beginnenden Dateien gehören entsprechend
- zur großen Shell.
-
- Verwenden Sie als Editor möglichst den GEP_ED statt des GME (einzustellen
- in den Editor-Parametern; entfernen Sie zudem die entspr. Load-Anweisung
- im Shell-Batch!).
-
- Laden Sie Compiler und Editor nicht resident sondern lassen Sie sie
- jedesmal von Disk laden, indem Sie die Load-Anweisungen aus dem Shell-
- Batch entfernen (wenn Sie keine Harddisk haben, müssen Sie die Module
- in den SYS-Ordner der Arbeitsdisk kopieren).
-
- Wenn Sie nur kurzzeitig viel Speicher brauchen, beispielsweise, um die
- Shell neu zu linken, können Sie durch Drücken der "Esc"-Taste während
- des Starts der Shell das Ausführen der "Load"-Anweisungen der Shell-
- Batch-Datei verhindern. Oder starten Sie den Batch "UNLOAD.M2B" - er
- gibt die evtl. geladenen Module "MM2Comp", "GME" und "GEP_ED" frei.
-
- Beachten Sie außerdem die Hinweise im Handbuch im Abschnitt
- "Speicherplatzmangel?" unter Kapitel 2.
-
- e) Komprimierte Dateien
-
- Trotz vier doppelseitig bespielter Disketten mußten viele Dateien
- komprimiert werden, um sie alle darauf unterbringen zu können.
- Wir haben aber darauf geachtet, daß Sie den Großteil des Systems
- trotzdem erstmal ohne weitere Arbeiten benutzen können.
-
- Die beiden Shell-Programme und das RCP (NRSC_ASH.PRG) sind komprimiert,
- entpacken sich aber bei jedem Start selbständig im Speicher. Das dauert
- allerdings eine kurze Zeit. Während das beim RCP nicht stören sollte,
- können Sie bei Bedarf unkomprimierte Versionen der Shells erzeugen,
- indem Sie sie einfach neu linken, z.B. durch Verwendung der Batch-
- Dateien "LINKSHEL.M2B" bzw. "LINKTINY.M2B". Allerdings müssen Sie zuerst
- die Shell übersetzen. Sie finden die Quelltexte beider Shells in gepackter
- Form in SRC\UTILITY (s. nächsten Absatz).
-
- Weiterhin sind die Quelltexte der Definitionen, der MOS-Implementationen,
- der Shells und der UTILITY-Programme gepackt. Die komprimierten Dateien
- befinden sich in den Ordnern "SRC\D", "SRC\MOS" und "SRC\UTILITY". Sie
- finden sich dort als ausführbare Programme - wenn Sie sie starten, beginnen
- sie automatisch, sich zu entpacken. Allerdings muß ausreichend Platz
- auf der Disk vorhanden sein (ca. die doppelte Größe der komprimierten
- Datei). Deshalb müssen Sie u.U. die Dateien erst jeweils auf eine
- leere, doppelseitig formatierte Disk kopieren. Sie können die TOS-Dateien
- auch mit der Endung LZH versehen und dann mit dem beigelegten Programm
- LHARC.TTP die enthaltenen Quelltextdateien einzeln entpacken (starten
- Sie ggf. dazu LHARC.TTP, um eine Kurzanleitung zu erhalten).
-
- Die Dateien in MAXIDISK.4MB und TEMPLMON.V20 sind auf dieselbe Weise
- gepackt. Einfach dort das jeweilige Programm START_ME.TOS starten.
-
- Die Dateien wurden übrigens mit den Programmen "PFXPAK.PRG" sowie
- "MAKESFX.PRG" von Thomas Quester und Markus Fritze komprimiert.
- Vielen Dank dafür!
-
- f) Zusammenarbeit mit NEODESK
-
- Wenn Sie NEODESK benutzen, müssen Sie die Modula-Shell dahingehend anpassen,
- um einen Fehler in NEODESK zu umgehen. Laden Sie dazu den Quelltext der
- von Ihnen verwendeten Shell (MM2SHELL.M oder MM2TINYS.M) und setzen Sie
- die darin befindliche Konstante 'DoShellWrite' auf FALSE. Übersetzen und
- Linken Sie dann die Shell (zum Linken können Sie einfach "LINKSHEL.M2B"
- bzw. "LINKTINY.M2B" starten).
-
- g) Das Megamax-Icon
-
- Die Datei MM2ICON.RSC ist eine GEM-Resource-Datei, die Icons mit dem Megamax-
- Symbol enthält. Sie können es bei Programmen verwenden, bei denen Sie den
- Dateien individuelle Icons zuordnen können, z.B. Gemini, Neodesk, Opaque
- oder dem Desktop des Atari TT.
-
- h) Sonstige Tips
-
- Damit Sie das Make nutzen können, sollten Sie nicht vergessen, das Programm
- "SetTime" aus dem UTILITY-Ordner zu übersetzen, zu linken (s. Quelltext)
- und in Ihren AUTO-Ordner zu kopieren, wenn Sie keine Echtzeituhr im
- Rechner haben.
-
-
- 2. Änderungen in der Bibliothek - Portierung der alten Programme
- ----------------------------------------------------------------
-
- Neben den im Anhang 11 des Handbuchs beschriebenen Änderungen der
- Bibliothek gegenüber dem alten System 1.0 und 1.1 sind noch zwei
- weitere Punkte zu beachten:
-
- * Wenn Sie in Ihren Programmen andere Module mit "Loader.CallModule"
- nachstarten können, sollten Sie alle Ihre eingebundenen Module
- mit der Direktive "$Y+" versehen, da dies beim alten System praktisch
- die Standard-Einstellung war.
-
- * Modul Excepts: 'InstallExc' und 'InstallSupvExc' wurden zu
- 'InstallPreExc' zusammengefaßt - die Unterscheidung trifft nun
- ein zusätzlicher BOOLEAN-Parameter. Wenn Sie 'InstallExc'
- verwendet haben, passen Sie den Namen an und fügen als neues
- drittes Argument "TRUE" ein.
-
- * Das Feld 'year' im Record 'Date' (nun im Modul 'MOSGlobals') hat
- nun den Typ INTEGER, vormals CARDINAL.
-
-
- 3. Besonderheiten und Fehler in Bibliothek und Shell
- ----------------------------------------------------
-
- Wichtige neue Regel:
-
- Wollen Sie das Modula-Programm vorzeitig beenden (z.B. aufgrund eines
- Fehlers, der ein weiterlaufen des Programms unmöglich macht), sollten
- Sie nicht die GEMDOS-Funktion Pterm() dazu aufrufen sondern stattdessen
- immer die Funktion PrgCtrl.TermProcess benutzen. Wenn Sie Pterm direkt
- aufrufen, passiert zwar nichts Schlimmes, aber es kann unter bestimmten
- Umständenden passieren, daß dann ein falscher Exit-Code anstatt des bei
- Pterm angegebenen Wertes an das aufrufende Programm zurückgegeben wird.
-
-
- Folg. Funktionen sind noch nicht implementiert:
-
- Modul Excepts: InstallPostExc.
- Modul Files: Abort.
- Modul InOut: ReadToken, ReadFromLine, ReadLn und EndOfLine.
- Modul LibFiles: CopyLib.
- Modul Textwindows: Abortread.
-
-
- Folgende Macken/Fehler sind zur Zeit bekannt:
-
- * Für unsere Schwizer User: Die Tastenbelegung in der Shell ist teilweise
- verwirrend: So werden die Tasten über ihren Scan-Code (und nicht etwa,
- wie es dann sein sollte, über die Funktionen des Keyboard-Moduls - grrr)
- direkt abgefragt, was dazu führt, daß Sie zum Übersetzen&Starten nicht
- die Plus- sondern die Taste drücken müssen, die rechts und unterhalb
- von der Return-Taste umrungen ist.
-
- * Werden Dateien geladen, die keine vom neuen Compiler erzeugten Module und
- auch keine normalen Programmdateien sind, kommt die Fehlermeldung
- "Unerlaubtes Layout von ..." und danach ist fast aller Speicher belegt.
- Dies liegt an einem Fehler im TOS. Sie müssen daraufhin die Shell bzw.
- das Programm, von dem Sie aus geladen haben, verlassen und neu starten,
- um den Speicher wieder frei zu bekommen.
-
- * Beide Shells laufen unter MultiGEM. Ist allerdings das GDOS "AMCLIGHT"
- installiert, darf die Shell dann nicht mehr verlassen werden, weil sonst
- das System abstürzt! Der Fehler ist bekannt aber kann leider nicht so
- einfach behoben werden.
-
- * Die große Shell MM2SHELL hat Probleme unter MultiTOS. So kommt es oft
- vor, daß beim Verlassen der Shell oder beim Ende des Linker-Aufrufs
- das ganze System stehenbleibt. Wenn Sie wissen sollten, woran das liegt,
- oder nach den Fehlern suchen wollen, melden Sie sich doch bitte bei
- Thomas Tempelmann. Ggf. können Sie auch die notwendigen Quelltexte zum
- Testen/Korrigieren erhalten.
- Programme, die mit dem Modula-System erzeugt wurden, laufen jedoch
- in der Regel unter MultiTOS. Wahrscheinlich ist nur die Shell selbst
- die Ursache für die bekannten Probleme.
- Mit Mag!X gibt es seit der Shell V2.3e übrigens keine bekannten Probleme
- mehr.
-
-
- 4. Fehler bei Benutzung der FPU (Mathe-Coprozessor)
- ---------------------------------------------------
-
- Im Handbuch ist beschrieben, daß Sie sich eine neue Shell linken
- müssen, wenn Sie die FPU benutzen wollen. Wenn Sie ein Programm
- erzeugen, das die FPU benutzt (auch die Shell) und Sie dies Programm
- auf einem Rechner ohne die benötigte FPU starten, liefert es einen
- Exitcode, der den Desktop veranlaßt, "TOS-Fehler #46" anzuzeigen.
-
- Wenn Sie eine Beschleunigerkarte zusammen mit der ST-FPU (SFP004 von
- Atari oder kompatible) einsetzen, kann es sein, daß die Fehlermeldung
- "Protokollverletzung" auftritt oder der Rechner in Endlosschleifen
- verweilt. So beispielsweise bei der 68030er-Karte "hyperCACHE 030"
- von proVME.
- Schalten Sie dann vorher den/die Daten-Cache(s) ab. Der Fehler sollte
- dann nicht mehr auftreten.
-
- Siehe auch Hinweis zu den Konstanten pi und e im Kap. 8.
-
-
- 5. (nicht mehr vorhanden)
-
- 6. (hat sich erledigt)
-
-
- 7. Änderungen am GME (Editor)
- -----------------------------
-
- Es ergaben sich noch einige Umbelegungen der Tastenbefehle.
- Sie können nun je nach Belieben nach Word-Star- oder McIntosh-Art
- Blöcke kopieren und verschieben:
-
- Wenn Sie einen Block mit der Maus (rechte und linke Maustasten für
- Blockanfang und -ende) oder durch ^KB und ^KK markiert haben,
- können Sie ihn entweder mit ^KC sofort kopieren bzw. mit ^KV
- verschieben oder Sie können ihn mit ^C ins "Klemmbrett" kopieren
- bzw. mit ^X ausschneiden und dann mit ^V an anderer Stelle wieder
- einfügen.
-
- Wenn Sie "Einfügen" (^V) im Block-Menü benutzen und Sie unmittelbar
- zuvor einen Block markiert haben, wird der markierte Bereich durch
- den Einzufügenden ersetzt.
-
- ACHTUNG: Wenn Sie das Blockende setzen, beachten Sie, daß der Block
- nur bis zu dem Zeichen VOR dem Cursor markiert wird!
-
- Leider kommt der GME noch nicht korrekt mit Accssories klar. Wenn Sie
- beispielsweise das Kontrollfeld im GME aufrufen, wird sein Fenster
- bei der ersten Editor-Operation überschrieben und kann nicht mehr
- angesprochen werden. Achten Sie also darauf, daß Sie Accessory-Fenster
- nach der Benutzung sofort wieder schließen.
-
-
- 8. Hinweise zum Compiler
- ------------------------
-
- ISO-Erweiterung:
- Prozeduren können unter anderem Namen redefiniert werden über die
- CONST-Anweisung. So kann z.B. mittels
- CONST Wr = InOut.WriteString;
- in Zukunft 'Wr' statt 'InOut.WriteString' geschrieben werden. Solche
- sog. Alias-Prozeduren können natürlich auch aus Definitionsmodulen
- exportiert werden.
-
- Übersetzte Definitionsmodule erhalten nun die Kennung 6 (bisher 5), d.h.,
- Def-Module, die mit Compiler ab V4.3c übersetzt werden, können nicht mehr
- von älteren Compilerversionen importiert werden!
-
- Z-Direktive und Assembler:
- Wird $Z+ verwendet, wird das Resultat von Funktionen in D0 geliefert,
- solange das Datum dort hinein paßt. Sonst wird es wie üblich auf dem
- A3-Stack übergeben.
- Wird solch eine Funktion von Assembler aus aufgerufen, muß direkt
- hinter den Funktionsnamen ein "/" gesetzt werden, um damit zu
- bestätigen, daß man sich der besonderen Übergabe in D0 bewußt ist.
- Andernfalls meldet der Compiler/Assembler einen diesbezüglichen
- Fehler.
-
- T-Direktive:
- Beachten Sie dazu die zweite Seite im Anhang 11 des Handbuchs.
-
- Kapitel A.11: Weiterer Hinweis zum Portieren alter MM2-Programme:
- Früher (PIM 1 und 2) erlaubte N.Wirth, auch Subrange-Variable als
- VAR-Parameter an andere Subrange bzw. den Basistyp zu übergeben.
- So war z.B. folgendes möglich:
- VAR subrange: [1..10];
- BEGIN
- ReadCard (subrange)
- Da hier aber gar nicht überprüft werden kann, ob wirklich nur ein
- Wert von 1 bis 10 in "subrange" eingelesen wurde, hat Wirth in PIM-3
- festgelegt, daß nur noch >>identische<< Typen an VAR-Parameter
- übergeben werden dürfen - Sie müssen nun also z.B. eine echte CARDINAL-
- Variable an ReadCard übergeben!
-
- TABLEs:
- Die Adressen von TABLEs können nun mit der Funktion SYSTEM.CADR ermittelt
- werden.
- TABLEs sind eine einfache Art, um >>unveränderliche<< Daten in Tabellen-
- form im Code (TEXT-Segment, daher nicht verändern!) abzulegen. Die
- Syntax:
- TABLE [.B|.W|.L] ident ":" integer { "," integer } ";"
- Das heißt: Nach "TABLE" kann optional eine Größenangabe folgen (B:Byte,
- W:Word, L:Longword, bei keiner Angabe wird Word angenommen), dann der
- Name der "Tabelle", dann ein Doppelpunkt und zuletzt die Daten, durch
- Kommata getrennt.
- Beispiel:
- TABLE.B Maske: $01,$03,$07,$0F,$1F,$3F,$7F,$FF;
- Ein weiteres Beispiel finden Sie in "TIEFE.M".
-
- DEREF: Diese Funktion im SYSTEM-Modul bietet die Möglichkeit, einen
- Zeigerwert zu derefenzieren, wo es die Modula-Syntax nicht zuläßt,
- beispielsweise den Wert einer Funktion. Alternativ können Sie auch
- die Direktive $A+ verwenden und dann das ^-Zeichen direkt anwenden.
- DEREF ist eine Megamax-Erweiterung. Beispiele:
- Normales Modula: p:= funktion(); x:= p^;
- Mit DEREF: x:= DEREF (funktion());
- Erweiterte Syntax: x:= funktion()^; (vorher $A+ verwenden!)
-
- SHIFT/ROTATE: Diese Funktionen sind im Handbuch fehlerhaft beschrieben.
- Sie haben keine VAR-Parameter sondern liefern ein Funktionsergebnis
- vom selben Typ wie das Argument "x". Außerdem sind diese Funktionen
- noch nicht vollständig implementiert: Wenn das SET nicht vollständig
- ein Byte, Word oder Longword belegt (SET OF BITNUM [0..n], n=7/15/31),
- darf der 2. Parameter "n" für die Anzahl der Verschiebungen nur eine
- Konstante sein. Beispiele:
- set:= SHIFT (set, n);
- set:= ROTATE (set, -1);
-
- Und noch eine Kleinigkeit: Der Compiler besteht zur Zeit aus zwei
- Implementationsmodulen und nicht aus einem Hauptmodul. Die beiden
- zusammengehörenden Module heißen "MM2COMP.IMP" und "MM2COMP2.IMP".
-
- Weitere bekannte "Macken" und Fehler im Compiler:
-
- * Module, die eine Prioritätsangabe im Modulkopf haben, laufen nicht auf
- dem Atari TT. Verwenden Sie dazu stattdessen "IRMask" und "SetIRMask"
- aus dem Modul "SysUtil2".
-
- * ADDRESS ist immer noch zu allen POINTER-Typen kompatibel, obwohl das
- nach PIM (Programieren in Modula-2) nicht korrekt ist.
-
- * Eine CASE-Anweisung erzeugt immer und ausschließlich eine Sprungtabelle.
- Ihre Größe ergibt sich aus der Differenz der kleinsten und größten Marke,
- für die jeweils zwei Byte belegt werden. Dies wird wohl auch in Zukunft
- so bleiben. Beispiel:
- CASE cardinal OF
- 1: ... |
- 3: ... |
- 1990: ... |
- 2000: ... |
- Hierbei werden 4000 Byte für die Sprungtabelle belegt, maximal ist die
- Sprungtabelle auf 32 KB beschränkt.
- Ordnen Sie also bei solchen CASE-Anweisungen ggf. die Marken in zusammen-
- liegenden Gruppen, z.B. durch IF/ELSIF:
- IF cardinal < 1000 THEN
- CASE cardinal OF
- 1: ...|
- 3: ...|
- END
- ELSE
- CASE cardinal OF
- 1990: ... |
- 2000: ... |
- END
- END;
-
- * Die Konstanten "pi" und "e" aus dem Modul MathLib0 haben nicht die
- exakten Werte, wenn sie in einem Modul verwendet werden, das im IEEE-
- Format, also für eine der FPUs, übersetzt wird. Abhilfe ist z.Zt.
- nur so zu erreichen, daß Sie diese Konstanten nochmals im eigenen
- Modul neu deklarieren anstatt sie aus MathLib0 zu importieren.
-
- * Übersicht über die Compiler-Optionen, die zur Konfiguration
- (Speicherverwaltung, In-/Ausgabe usw.) dienen.
- Sie können in einem Batch übergeben oder in der Compiler-Direktiven-
- Zeile der Options-Box eingestellt werden.
-
- /A<Zahl> (Default: /A20000)
- Bestimmt die Größe des sog. DATA-Puffers. In ihm werden
- seit V4.3 Konstanten gesammelt, die größer als 8 Byte
- sind oder als REF-Parameter übergeben werden. Bei
- Auftreten der Fehlermeldung 823 (DATA-Puffer-Überlauf)
- sollte dieser Wert vergrößert werden.
-
- /I<Zahl> (Default: /I2000)
- Bestimmt die Größe des Identifier-Stacks. Ist zu vergrößern,
- wenn der Fehler 807 (Überlauf des Bezeichner-Stacks) auftritt.
-
- /><Zahl> (Default: />32768)
- Bestimmt den Speicher, den der Compiler mindestens
- beim Übersetzen freizuhalten hat. Normalerweise
- reserviert der Compiler, der ja nicht wissen kann, wie
- groß das zu übersetzende Programm werden wird, allen
- verfügbaren Speicher abzüglich dieses Wertes für sich.
- Bei Multitask-Betriebssystemen bleibt dann aber kein
- Speicher mehr für andere Programme übrig. Hierzu kann
- der Wert entsprechend vergrößert werden, allerdings
- kann es dann passieren, daß große Programme vom Compiler
- mangels Speicher nicht mehr übersetzbar sind. Dazu können
- verschiedene Fehler auftreten, die alle im Bereich von
- 800-849 liegen.
-
- /<<Zahl> (Default: /<3000000)
- Bestimmt den Speicher, den der Compiler maximal für
- sich belegen soll. Siehe auch "/<"-Option, welche
- Vorrang hat.
-
- /O<Pfadname> (Default: Erster Pfad aus aus entspr. Pfadliste)
- Bestimmt den Verzeichnisnamen, auf dem alle während dieses
- Compilerlaufs übersetzten Code-Dateien abgelegt werden sollen.
-
- /L<Dateiname> (Default: ShellMsg.DefLibName)
- Bestimmt den Namen der Library mit den Definitionsmodulen
- (hat Vorrang vor den einzelnen DEF-Dateien in den Suchpfaden).
-
- /P<Dateiname>
- /C<Zahl>
- Angaben für Protokollausgabe. Siehe Handbuch.
-
- /Q
- Unterdrückt Ausgaben des Compilers auf den Bildschirm.
-
- /@<Zahl>
- Der Compiler erwartet den Text nicht in einer Datei
- sondern im Speicher mit Beginn der angegebenen Adresse.
-
- /^<Zahl>
- Der Compiler erwartet den Text nicht in einer Datei
- sondern ruft wiederholt die Prozedur auf, deren Adr.
- angegeben ist. Die Prozedur muß jew. einen Zeiger auf
- den Zeilenanfang jeder Zeile zurückgeben, und zwar,
- indem sie die Adresse entsprechend dem Assemblerbefehl
- "MOVE.L <Zeilenadr>,(A3)+" auf dem von MM2 verwendeten
- Parameterstack ablegt.
-
-
- 9. Hinweise zum Linker
- ----------------------
-
- * Aufruf des Linkers über eine Batch-Datei
-
- Nicht alle Optionen des Linkers können in der Shell über die Optionen-Box
- einstellt werden, sondern müssen ggf. dem Compiler über einen Batch in
- der Commandline übergeben werden. Hier werden alle Optionen aufgeführt.
- Die restlichen Einstellungen sind über die anderen Batch-Befehle vorzu-
- nehmen oder werden aus den aktuellen Einstellungen der Linker-Optionen
- übernommen (z.B. die Init-Module).
-
- In der Batch-Datei wird der Linker mit "Link" aufgerufen. Dahinter sollte
- dann zuerst der Name des Hauptmoduls folgen, dann die Optionen.
-
- Jede Option muß mit einem "-" oder "/" eingeleitet werden dann folgt ein
- weiteres Zeichen:
-
- '0'..'9':
- Setzt genau jenes Bit im Flagfeld des "Header" im Programm. Dabei
- entsprechen folgende Bits den Optionen im Linker-Dialog der Shell:
- 0: Fast Load, 1: Fast Code, 2: Fast Memory.
- 'R':
- Größe d. Reloziertabelle. Siehe unten.
- 'S':
- Erzeugen einer Symboldatei. Siehe unten.
- Nach dem 'S' können - ohne Leerzeichen - Optionen angegeben werden,
- die an die Funktion OutputSymbols des im Quelltext mitgelieferten
- Moduls MM2LnkIO übergeben werden.
- 'I':
- Erzeugt Initialisierungsliste. Siehe unten.
- 'H', 'F', 'M':
- Bestimmt Optimierungsmodus. 'M': nur Prozedurnamen entfernen,
- 'H': unbenutzte Prozeduren entfernen ("Prozedurnamen erhalten"),
- 'F': vollständige Optimierung.
- 'V':
- Ruft die Funktion 'VerboseOutput' von MM2LnkIO auf.
- 'O':
- Bestimmt den Pfad/Namen der zu erzeugenden Programms. Ansonsten wird
- der Name des Hauptmoduls mit passender Endung erzeugt.
- 'D':
- Erzeugt ein DATA-Segment. Siehe unten. Zahl (DATA-Größe) oder Dateiname
- (Daten für DATA-Segment) muß ohne Leerzeichen folgen.
-
- * Fehlermeldung "Relocation table overflow"
-
- Sollten Sie bei einem umfangreichen Modul die Fehlermeldung "Relocation
- table overflow", dann haben Sie die kritische Grenze von 1000 zu
- relozierenden Adressen (globale Variablenzugriffe und Prozeduraufrufe)
- in einem Modul überschritten. Abhilfe schaffen Sie, indem Sie einen Batch
- zum Starten des Linkers erstellen und bei der LINK-Anweisung die Option
- "-R", gefolgt von einem neuen Wert, anfügen. So enthielte die Batch-Datei
- dann z.B. folgende Zeile: "LINK <name> -R2000"
-
- * Erzeugen einer Symboldatei
-
- Der Linker erzeugt nun optional eine Symboldatei, in der alle Module und
- Prozeduren samt ihren Adressen im erzeugten Programm aufgeführt werden.
-
- Weiterhin ist aus der Symboldatei ersichtlich, welche Module und Prozeduren
- durch das Optimieren entfernt wurden und von welchen Pfaden die Modulcodes
- geladen wurden.
-
- Um die Datei erzeugen zu lassen, ist in der Linker-Box der Shell der neue
- entsprechende Schalter zu aktivieren. Dann erzeugt der Linker eine Datei
- im selben Verzeichnis und mit selbem Namen wie die Ausgabedatei mit der
- Endung "M2S". D.h, neben einem erzeugten Programm "C:\USER\MOD\DECODE.PRG"
- finden Sie die Symboldatei "C:\USER\MOD\DECODE.M2S".
-
- Die Ausgabe der Symbole kann nach Belieben verändert werden, da die Ausgabe-
- prozedur im Modul MM2LnkIO enthalten ist, das im Quelltext vorliegt (Ordner
- SRC\MOS).
-
- Die Adressen der Symbole sind wie folgt zu interpretieren:
-
- - Der Wert des "Head" beim Modulnamen gibt die Anfangsadresse des Moduls
- relativ zum Codebeginn an.
- - Der Codebeginn ist der des TEXT-Segments und das findet man in der
- Base Page im Feld 'p_tbase' (s. Modul SysTypes). Die Adresse der Base Page
- kann z.B. im laufenden Programm durch 'PrgCtrl.GetBasePageAddr()' ermittelt
- werden.
- - Die Werte vor jeder Prozedur geben die Anfangsadresse relativ zum "Head"
- an. Allerdings ist diese Adresse nicht unbedingt die Einsprungsadresse
- des Prozedurcodes: Wenn die Prozedurnamen nicht aus dem Code wegoptimiert
- wurden, kommt zuerst der Prozedurname und dahinter erst der Programmcode.
- - Der Wert von "Var" beim Modulnamen gibt die Anfangsadresse der globalen
- Variablen des Moduls relativ zum BSS-Segment an. Die Adresse des BSS-
- Segments findet man in der Base Page im Feld 'p_bbase' (s. Modul SysTypes).
- Die Offsets der einzelnen Variablen eines Moduls können Sie erfahren, wenn
- Sie beim Übersetzen des Moduls das Compilerprotokoll einschalten. Am Ende
- des Protokolls finden Sie die globalen Variablen aufgelistet. Wollen Sie
- kein Protokoll des ganzen Moduls, versehen Sie die erste Zeile mit der
- Direktive "(*$P-*)", die letzte vor dem END mit "(*$P+*)".
-
- * Erzeugen einer Initialisierungsliste
-
- Der Linker erzeugt nun optional eine Datei, die die Module in der Reihenfolge
- auflistet, in der sie initialisiert werden. Dazu ist beim MM2Link-Aufruf
- die Option "-I" zu verwenden. Es wird dann eine Datei mit dem Namen
- des gelinkten Programms und der Endung "M2I" erzeugt.
-
- * Erzeugen eines DATA-Segments
-
- Um z.B. CPX-Module erzeugen zu können, muß das gelinkte Programm ein sog.
- DATA-Segment enthalten. Es ist ein Block von Daten, die ähnlich dem Code
- (TEXT-Segment) sind. Der Unterschied ist, daß die Daten im TEXT-Segment
- zur Laufzeit des Programms nicht verändert werden dürfen, während das mit
- den Daten im DATA-Segment sehr wohl passieren darf. Wer also z.B. selbst-
- modifizierenden Code erzeugen möchte, darf die nicht mit dem vom Compiler
- erzeugten Code im Speicher tun sondern muß den Code in einem anderen
- Speicherbereich (entw. in einer Variable (BSS-Segment), im allozierten
- Speicher oder im DATA-Segment) erzeugen. Umgekehrt kann man das DATa-Segment
- auch als einen fest reservierten Variablenbereich ansehen, der mit Werten
- vorbelegt werden kann.
-
- Um dies zu erreichen, gibt es 2 Möglichkeiten:
- a) Es soll lediglich ein Bereich im DATa-Segment reserviert werden (reicht
- in der Regel für CPX-Module aus). Dann muß dem Linker lediglich die Größe
- des Bereichs in Bytes mitgeteilt werden und er erzeugt ein entsprechend
- mit Null-Bytes gefülltes DATA-Segment.
- b) Das DATA-Segment soll mit bestimmten Werten vorbesetzt werden. Dazu
- ist eine Datei zu erzeugen, die diese Werte enthält. Der Linker fügt dann
- genau diese Datei als DATA-Segment ins Programm ein.
-
- Dazu ist dem Linker die Option "-D" anzugeben, gefolgt (ohne Leerzeichen)
- von entweder (a) einer Zahl für die Größe des DATAs oder einem Dateinamen,
- der als DATA einzufügen ist.
- Um die Option dem Linker zu übergeben, muß eine Batch-Datei erzeugt werden,
- die dann zum Linken gestartet wird (s.o.).
-
- Um im Programm auf das DATA-Segment zugreifen zu können, muß der Zeiger aus
- der Base Page ermittelt werden. Beispiel:
- VAR bp: SysTypes.PtrBP; DATAStart: ADDRESS; DATALength: LONGCARD;
- PrgCtrl.GetBasePageAddr (bp);
- DATAStart:= bp^.p_dbase; DATALength:= bp^.p_dlen;
-
- Anmerkung: Konstanten, die der Modula-Compiler erzeugt, werden NICHT im
- DATA-Segment abgelegt!
-
-
- 10. Hinweise zum Make
- ---------------------
-
- Zur besseren Kontrolle gibt das Make-Programm nun bei jeder zu übersetzenden
- Datei an, aus welchem Grund sie übersetzt werden soll. Sie finden diese
- Information in der Make-Datei, die im "Temp. Pfad" unter dem Name "MAKE.M2C"
- abgelegt ist. Laden Sie diese Datei in den Editor, so sehen Sie dort am
- Anfang jeder Zeile eine Include-Anweisung für den Compiler ($I) gefolgt
- vom Namen des zu übersetzenden Moduls. Dahinter steht dann nach "Out:" der
- Pfad, auf dem der zugehörige Code des Moduls gefunden wurde.
- Am Ende der Zeile steht hinter "Reason:"...
- ∙ der Name des importierten Moduls, das ein jüngeres Datum hat oder...
- ∙ "No Code", wenn das Modul noch nicht übersetzt wurde oder...
- ∙ "Modified", wenn die Quelldatei jünger als ihr Code ist, d.h. verändert
- wurde.
-
-
- 11. Erweiterungen in der Shell
- ------------------------------
-
- Zwei neue Batch-Anweisungen POSTAMBLE1 und POSTAMBLE2 erlauben die Bestimmung
- zweier Programmnamen incl. ihrer Parameter, die vor Verlassen der Shell
- gestartet werden sollen. Damit ist es nun möglich, im Shell-Batch eine
- RAM-Disk (z.B. die aus dem Buch "Scheibenkleister") einrichten und beim
- Shell-Ende wieder freigeben zu lassen. Das hat den Vorteil, daß die RAM-Disk
- nur während der Entwicklungszeit in der Shell Speicher belegt.
-
- Die Datei-Information wirkt auch bei Ordnern, allerdings wird die >Länge<
- immer Null anzeigen, auch der Schreibschutz-Knopf bleibt unberücksichtigt.
- Sinn macht dies nur ab TOS 1.4, wo auf diese Weise zumindest der Name des
- Ordners verändert werden kann.
-
- Der Zeichensatz für TextWindows und WindowLists (also alle Fenster mit
- Textausgabe) kann bei der großen Shell (MM2SHELL) gewählt werden. Dazu
- enthalten die Shell-Parameter neue Eingabefelder für den Namen und die
- Größe (in Punkt) des Zeichensatzes.
- Gibt man keinen Namen an, wird der aktuelle Systemzeichensatz eingesetzt.
- Der Name des normalen Systemfonts ist "6x6 system font". Seine Größen sind
- 8, 9, und 10. Andere Fonts werden nur verfügbar, wenn ein GDOS mit Fonts
- geladen ist (im AUTO-Ordner). Wird ein anderer Name eingetragen, muß der
- exakt mit Groß-/Kleinschreibung eingegeben werden, andernfalls kommt eine
- Fehlermeldung.
- Die Namen der vorhandenen Fonts können ggf. mit dem Programm TextDemo.M
- (DEMO-Ordner) ermittelt werden. Startet man es, zeigt es mit jedem
- Tastendruck einen der vorhandenen Fonts an. Die Größen müssen ggf.
- ausprobiert werden, sie rangieren in der Regel zw. 5 und 20.
-
-
- 12. MM2CLink - Der Linker für Turbo-C & Pure-C
- ----------------------------------------------
-
- Das im neuen MM2-Handbuch auf Seite 1-15 beschriebene MM2CLink-Paket ist
- nun auf diesen Disketten enthalten. Es befindet sich in Form von zwei
- selbstentpackenden Archiven MM2CL1.TOS und MM2CL2.TOS auf den MM2-Disketten.
- Zum Ausprobieren muß man diese Dateien in das Verzeichnis der MM2-Shell
- kopieren und dann starten. Es wird dann im Verzeichnis der Shell ein Ordner
- MM2CLink erzeugt. Weitere Dokumentation findet man dann im Ordner MM2CLINK.
- Dank der komfortablen GEM-Einbindung sollte die Bedienung kein Problem sein.
-
- WICHTIG: Sind alle Dateien entpackt, müssen noch ein paar Ordner angelegt
- werden, weil sonst bei der Übersetzung der Module vom Modula-Compiller
- immer eine Fehlermeldung erscheint! Innerhalb des Ordners MM2CLINK befinden
- sich die Ordner PC und TC. In PC müssen Sie die Ordner DEF, IMP und IMP.881
- erzeugen, in TC die Ordner DEF und IMP.
-
- O-Ton Autor Michael Seyfried:
-
- Bis jetzt konnte ich alle meine C-Sourcen und Objektcodes uneingeschränkt
- in MM2-Module konvertieren. Darunter sind auch die Geiß-Bibliothek und das
- Deduktionssystem Otter 2.0.
-
- Dank Thomas Tempelmann kann man die eingebundenen C-Funktionen aus MM2-
- Programmen direkt aufrufen. Dazu wurde der TC-Parameterübergabemechanismus
- im neuen MM2-Compiler 4.0 implementiert.
-
- Ab der Version 2.0 können mit MM2CLink erzeugte Implementationen uneinge-
- schränkt gelinkt werden.
-
- Das MM2CLink-Paket ist nun Shareware. Wenn Sie es einsetzen, sollten Sie
- dafür 50 DM an den Autor zahlen. Damit macht sich die von ihm investierte
- Arbeit zwar längst nicht bezahlt, aber genau deswegen wäre es nur fair,
- ihn dafür wenigstens ein wenig zu belohnen. Und vielleicht hat er ja auch
- noch eine verbesserte Version für Sie...
-
- Seine Adresse:
-
- Michael Seyfried
- Unterer Mauergarten 22
- 6520 Worms 24
- Tel: 06241/54671
- Bankverbindung: Sparkasse Worms BLZ 553 500 10 KNr: 580 630
-
-
- 13. Die aktuellen Nummern der MAUS-Mailboxen
- --------------------------------------------
-
- Nr Kürzel Name Nummer
- -- --- ------------------------- -------------------
- 41 OTR MAUS MAUS On Tour [nicht öffentlich]
- 92 K0 MAUS Usenet-Gateway [nicht öffentlich]
- 52 A2W MAUS Wien-2 0043-1-4703022
- 51 A-W MAUS Wien/Österreich 0043-1-7984204
- 88 A-L MAUS Linz - Österreich 0043-732-315099
- 69 W MAUS Wuppertal 0202-7387524
- 56 ME QUARK Ratingen 02102-475669
- 80 KR2 MAUS Krefeld2 02151-307007
- 34 KR MAUS Krefeld [nicht öffentlich]
- 19 RS MAUS Remscheid 02191-40828
- 11 K2 MAUS Köln-Porz 02203-696379
- 8 K MAUS Köln 0221-1390008
- 74 SU MAUS Rheinbach/Rhein-Sieg 02226-12326
- 65 BM MAUS Hürth/Erftkreis 02233-65194
- 4 BN MAUS Bonn 0228-213230
- 82 HAL MAUS Halle [nicht öffentlich]
- 39 UN MAUS Unna 02303-63102
- 68 UN2 MAUS Unna 2 02303-66232
- 17 DO MAUS Dortmund 0231-125050
- 73 DO2 MAUS Dortmund 2 0231-617299
- 25 MK MAUS Iserlohn 02371-14490
- 26 AC2 MAUS Aachen-2 0241-54080
- 33 AC3 MAUS Aachen-3 0241-54540
- 2 AC MAUS Aachen 0241-902002
- 9 WAF MAUS Drensteinfurt [nicht öffentlich]
- 24 MS3 MAUS Münster 3 0251-260324
- 1 MS MAUS Münster [nicht öffentlich]
- 55 MS2 MAUS Münster 2 0251-77262
- 31 ST MAUS Emsdetten/Steinfurt 02572-88881
- 63 DU2 MAUS Moers/Duisburg 2 02841-55275
- 37 DU MAUS Moers/Duisburg 02841-953182
- 23 B MAUS Berlin 030-6246510
- 70 B2 QUARK Berlin 030-7519443
- 86 L QUARK Leipzig 034298-38577
- 81 CB QUARK Cottbus 0355-539156
- 36 HRO MAUS Hansestadt Rostock 0381-696350
- 79 SN MAUS Schwerin/Meckl. 0385-715917
- 14 HH MAUS Hansestadt Hamburg 040-5381657
- 35 HH2 MAUS Hamburg 2 040-5478556
- 44 HH3 QUARK Hamburg 040-7209674
- 21 HB2 MAUS Hansestadt Bremen 2 0421-702569
- 3 HB MAUS Hansestadt Bremen 0421-86675
- 6 KI MAUS Kiel 04322-6501
- 57 OL MAUS Oldenburg 0441-691296
- 99 WHV MAUS Wilhelmshaven 04421-13435
- 72 HL MAUS Lübeck 0451-394722
- 32 FL MAUS Flensburg 0461-13117
- 40 SL MAUS Schleswig 04621-31820
- 83 NF MAUS Nordfriesland 04671-2382
- 75 IZ MAUS Itzehoe 04821-4691
- 98 H2 MAUS Hannover-2 [nicht öffentlich]
- 71 H MAUS Hannover 0511-775260
- 27 BI QUARK Bielefeld 0521-24222
- 66 PB2 MAUS Paderborn-2 05251-541578
- 42 PB QUARK Paderborn 05251-71409
- 95 PB3 QUARK Paderborn 3 [nicht öffentlich]
- 89 PE2 MAUS Fürstenau/Peine 2 [nicht öffentlich]
- 20 PE MAUS Fürstenau/Peine 05302-7313
- 85 WOB MAUS Wolfsburg-Reislingen 05363-40775
- 29 OS MAUS Osnabrück 0541-597571
- 77 CLP MAUS Bunnen/Loeningen 05434-3797
- 87 GÖ MAUS Göttingen 0551-7704464
- 45 WI MAUS Wiesbaden 0611-721704
- 28 WI2 MAUS Wiesbaden 2 0611-9410986
- 62 HG MAUS Bad Homburg 06172-36953
- 18 MTK MAUS Main-Taunus-Kreis 06196-81041
- 22 HD MAUS Hemsbach/Heidelberg 06201-477275
- 15 LU MAUS Ludwigshafen 0621-6296138
- 91 KL MAUS Kaiserslautern 0631-17901
- 54 ZW MAUS Zweibrücken 06332-16629
- 78 SB MAUS Saarbrücken 0681-3904998
- 97 SB2 MAUS Saarbrücken-2 0681-9931317
- 10 F MAUS Frankfurt 069-6313857
- 46 BB MAUS Böblingen 07031-275496
- 64 S3 MAUS Stuttgart 3 0711-2368367
- 38 S MAUS Stuttgart 0711-5590396
- 43 S2 MAUS Stuttgart 2 0711-6364625
- 53 HN QUARK Heilbronn 07131-507329
- 49 BB2 MAUS Weil/Böblingen 07157-67371
- 76 KA2 MAUS Karlsruhe 2 [nicht öffentlich]
- 48 KA MAUS Karlsruhe 0721-358887
- 59 BL MAUS Albstadt/Balingen 07431-74069
- 90 KN QUARK Konstanz 07531-72341
- 60 FR QUARK Freiburg 0761-30032
- 67 OG MAUS Offenburg 0781-38807
- 30 TBB MAUS Bad Mergentheim 07931-52567
- 12 MB MAUS Bayrischzell 08023-332
- 84 RO MAUS Rosenheim 08031-890496
- 16 LA MAUS Landshut 0871-640321
- 58 M4 MAUS München 4 089-1406018
- 5 M MAUS München 089-6886705
- 96 M2 MAUS München 2 089-983120
- 50 N MAUS Nürnberg 0911-405167
- 47 FÜ MAUS Fürth 0911-7530280
- 61 WUN MAUS Wunsiedel 09232-70251
- 7 WÜ MAUS Würzburg 0931-280269
- 13 R MAUS Regensburg 0941-448518
-
- Alle Boxen können mit einem Modem mit 1200 oder 2400 Baud erreicht werden,
- viele sogar mit 9600, 14400 oder 19200 Baud.
-
- Wenn Sie von einer anderen Box als der MAUS M (Nr. 5) eine persönliche
- Nachricht Thomas Tempelmann schicken wollen, können Sie das nur, wenn
- Sie dort einen Beitrag (ca. 30-50 DM jährlich) bezahlt haben.
- Wenn Sie wegen einer Frage dennoch nicht in der MAUS M anrufen wollen,
- schicken Sie Ihre Abfrage in der Box Ihrer Wahl in der "Gruppe" MM2-FRAGEN
- statt eine persönliche Nachricht zu senden.
-
-
- 14. Korrekturen zum Handbuch
- ----------------------------
-
- * Seite 3-27/30: Die SYSTEM-Funktionen SHIFT/ROTATE haben keinen VAR-Parameter
- sondern liefern den veränderten Wert als Funktionsergebnis.
-
- * Seite 3-32: In der untersten Zeile muß "GEMBase" statt "AESBase und "VDIBase"
- stehen.
-
-
- 15. Weiterer Support & Vertrieb
- -------------------------------
-
- Das Copyright liegt seit Herbst '93 nicht mehr exclusiv bei Application
- Systems Heidelberg. Bei Fragen, Updates und Neukäufen wenden Sie sich
- bitte an:
-
- Thomas Tempelmann
- Schusterwolfstr. 13
- D-81241 München
- Tel. (089) 8347394
- FAX (089) 8206981
-
- (Sollte die Adr. nicht mehr stimmen, wenden Sie sich an ASH: 06221 302210)
-
- Sie können weiterhin jederzeit Updates des Systems erhalten.
- Schicken Sie dazu wie gewohnt Ihre vier Original-Disketten (oder Kopien
- davon) an die neue Adresse und legen Sie 30(!) DM in bar oder als Scheck
- sowie einen adressierten Rückumschlag bei.
-
- Bevor Sie sich schriftlich wegen einer Neubestellung oder wegen Fragen an
- mich wenden, kontaktieren Sie mich bitte zuerst telefonisch oder per FAX,
- denn auf diese Weise erhalten Sie viel eher eine Antwort!
-
-
- Und nun viel Erfolg mit Ihrem Megamax Modula-2!
-
- Die Autoren
-
- Manuel Chakravarty
- Jürgen Müller
- Thomas Tempelmann
-