-------------------------------------------------------------------------------
               Aktuelle Informationen zum vorliegenden System
-------------------------------------------------------------------------------

                                                                 Stand: 8.6.94
                                                    (Shell 2.3g, Compiler 4.3d)

Inhaltsbersicht
----------------
 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 fr 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 vernderten Dateien, wie "MM2SHELL.M2B" und
"MM2SHELL.M2P". Die anderen Dateien des MM2-Systems mssen Sie vor einer
Neuinstallation mit HD_INST lschen, da das Programm sonst bei den erneuerten
Dateien Fehler meldet.

Wenn Sie auf Version 2.3 updaten, knnen Sie Ihre alten "M2P"-Dateien nicht
ohne weiteres bernehmen, da sich deren Format gendert 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, knnen Sie auch eine der Shells (MM2SHELL.PRG und
MM2TINYS.PRG) direkt von der Diskette starten. Wenn die Editor (GME)
und Compiler (MM2COMP) geladen sind, knnen 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 knnen 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 knnen. Um
mehr Platz zu erhalten, knnen Sie auch einiges von der Arbeitsdisk
lschen, beispielsweise MM2CL1.TOS und den SRC-Ordner. Wenn Sie ber
mehr als ein Megabyte Speicher verfgen, 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 zurckgreifen.
Die weiteren Dateien, die mit "MM2TINYS" beginnen, gehren alle zu
dieser Shell - die mit "MM2SHELL" beginnenden Dateien gehren entsprechend
zur groen Shell.

Verwenden Sie als Editor mglichst 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, mssen Sie die Module
in den SYS-Ordner der Arbeitsdisk kopieren).

Wenn Sie nur kurzzeitig viel Speicher brauchen, beispielsweise, um die
Shell neu zu linken, knnen Sie durch Drcken der "Esc"-Taste whrend
des Starts der Shell das Ausfhren 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 auerdem die Hinweise im Handbuch im Abschnitt
"Speicherplatzmangel?" unter Kapitel 2.

  e) Komprimierte Dateien

Trotz vier doppelseitig bespielter Disketten muten viele Dateien
komprimiert werden, um sie alle darauf unterbringen zu knnen.
Wir haben aber darauf geachtet, da Sie den Groteil des Systems
trotzdem erstmal ohne weitere Arbeiten benutzen knnen.

Die beiden Shell-Programme und das RCP (NRSC_ASH.PRG) sind komprimiert,
entpacken sich aber bei jedem Start selbstndig im Speicher. Das dauert
allerdings eine kurze Zeit. Whrend das beim RCP nicht stren sollte,
knnen 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 mssen Sie zuerst
die Shell bersetzen. Sie finden die Quelltexte beider Shells in gepackter
Form in SRC\UTILITY (s. nchsten 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 ausfhrbare Programme - wenn Sie sie starten, beginnen
sie automatisch, sich zu entpacken. Allerdings mu ausreichend Platz
auf der Disk vorhanden sein (ca. die doppelte Gre der komprimierten
Datei). Deshalb mssen Sie u.U. die Dateien erst jeweils auf eine
leere, doppelseitig formatierte Disk kopieren. Sie knnen 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 dafr!

  f) Zusammenarbeit mit NEODESK

Wenn Sie NEODESK benutzen, mssen 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 knnen 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 enthlt. Sie knnen es bei Programmen verwenden, bei denen Sie den
Dateien individuelle Icons zuordnen knnen, z.B. Gemini, Neodesk, Opaque
oder dem Desktop des Atari TT.

  h) Sonstige Tips

Damit Sie das Make nutzen knnen, 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 gegenber 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 knnen, 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' zusammengefat - die Unterscheidung trifft nun
  ein zustzlicher BOOLEAN-Parameter. Wenn Sie 'InstallExc'
  verwendet haben, passen Sie den Namen an und fgen 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 unmglich 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
Umstndenden passieren, da dann ein falscher Exit-Code anstatt des bei
Pterm angegebenen Wertes an das aufrufende Programm zurckgegeben 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:

* Fr 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 fhrt, da Sie zum bersetzen&Starten nicht
  die Plus- sondern die Taste drcken mssen, 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 mssen 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 abstrzt! Der Fehler ist bekannt aber kann leider nicht so
  einfach behoben werden.

* Die groe 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. knnen 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 fr 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
mssen, 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 bentigte FPU starten, liefert es einen
Exitcode, der den Desktop veranlat, "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 knnen nun je nach Belieben nach Word-Star- oder McIntosh-Art
Blcke kopieren und verschieben:

Wenn Sie einen Block mit der Maus (rechte und linke Maustasten fr
Blockanfang und -ende) oder durch ^KB und ^KK markiert haben,
knnen Sie ihn entweder mit ^KC sofort kopieren bzw. mit ^KV
verschieben oder Sie knnen ihn mit ^C ins "Klemmbrett" kopieren
bzw. mit ^X ausschneiden und dann mit ^V an anderer Stelle wieder
einfgen.

Wenn Sie "Einfgen" (^V) im Block-Men benutzen und Sie unmittelbar
zuvor einen Block markiert haben, wird der markierte Bereich durch
den Einzufgenden 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 schlieen.


8. Hinweise zum Compiler
------------------------

ISO-Erweiterung:
  Prozeduren knnen 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 knnen natrlich 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, knnen 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 pat. 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
  besttigen, da man sich der besonderen bergabe in D0 bewut ist.
  Andernfalls meldet der Compiler/Assembler einen diesbezglichen
  Fehler.

T-Direktive:
  Beachten Sie dazu die zweite Seite im Anhang 11 des Handbuchs.

Kapitel A.11: Weiterer Hinweis zum Portieren alter MM2-Programme:
  Frher (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 mglich:
    VAR subrange: [1..10];
    BEGIN
      ReadCard (subrange)
  Da hier aber gar nicht berprft 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 drfen - Sie mssen nun also z.B. eine echte CARDINAL-
  Variable an ReadCard bergeben!

TABLEs:
  Die Adressen von TABLEs knnen nun mit der Funktion SYSTEM.CADR ermittelt
  werden.
  TABLEs sind eine einfache Art, um >>unvernderliche<< Daten in Tabellen-
  form im Code (TEXT-Segment, daher nicht verndern!) abzulegen. Die
  Syntax:
    TABLE [.B|.W|.L] ident ":" integer { "," integer } ";"
  Das heit: Nach "TABLE" kann optional eine Grenangabe 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 Mglichkeit, einen
Zeigerwert zu derefenzieren, wo es die Modula-Syntax nicht zult,
beispielsweise den Wert einer Funktion. Alternativ knnen 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". Auerdem sind diese Funktionen
noch nicht vollstndig implementiert: Wenn das SET nicht vollstndig
ein Byte, Word oder Longword belegt (SET OF BITNUM [0..n], n=7/15/31),
darf der 2. Parameter "n" fr 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
zusammengehrenden Module heien "MM2COMP.IMP" und "MM2COMP2.IMP".

Weitere bekannte "Macken" und Fehler im Compiler:

* Module, die eine Priorittsangabe 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 ausschlielich eine Sprungtabelle.
  Ihre Gre ergibt sich aus der Differenz der kleinsten und grten Marke,
  fr 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 fr die Sprungtabelle belegt, maximal ist die
  Sprungtabelle auf 32 KB beschrnkt.
  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 fr 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 knnen in einem Batch bergeben oder in der Compiler-Direktiven-
  Zeile der Options-Box eingestellt werden.
  
  /A<Zahl>  (Default: /A20000)
     Bestimmt die Gre des sog. DATA-Puffers. In ihm werden
     seit V4.3 Konstanten gesammelt, die grer als 8 Byte
     sind oder als REF-Parameter bergeben werden. Bei
     Auftreten der Fehlermeldung 823 (DATA-Puffer-berlauf)
     sollte dieser Wert vergrert werden.

  /I<Zahl>  (Default: /I2000)
     Bestimmt die Gre des Identifier-Stacks. Ist zu vergrern,
     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
     verfgbaren Speicher abzglich dieses Wertes fr sich.
     Bei Multitask-Betriebssystemen bleibt dann aber kein
     Speicher mehr fr andere Programme brig. Hierzu kann
     der Wert entsprechend vergrert werden, allerdings
     kann es dann passieren, da groe Programme vom Compiler
     mangels Speicher nicht mehr bersetzbar sind. Dazu knnen
     verschiedene Fehler auftreten, die alle im Bereich von
     800-849 liegen.

  /<<Zahl>  (Default: /<3000000)
     Bestimmt den Speicher, den der Compiler maximal fr
     sich belegen soll. Siehe auch "/<"-Option, welche
     Vorrang hat.

  /O<Pfadname>  (Default: Erster Pfad aus aus entspr. Pfadliste)
     Bestimmt den Verzeichnisnamen, auf dem alle whrend 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 fr Protokollausgabe. Siehe Handbuch.

  /Q
     Unterdrckt 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 zurckgeben, 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 knnen in der Shell ber die Optionen-Box
 einstellt werden, sondern mssen ggf. dem Compiler ber einen Batch in
 der Commandline bergeben werden. Hier werden alle Optionen aufgefhrt.
 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':
     Gre d. Reloziertabelle. Siehe unten.
   'S':
     Erzeugen einer Symboldatei. Siehe unten.
     Nach dem 'S' knnen - 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': vollstndige 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-Gre) oder Dateiname
     (Daten fr 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, anfgen. 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 aufgefhrt 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 verndert 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 knnen 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 knnen, 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 verndert werden drfen, whrend das mit
 den Daten im DATA-Segment sehr wohl passieren darf. Wer also z.B. selbst-
 modifizierenden Code erzeugen mchte, 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 Mglichkeiten:
 a) Es soll lediglich ein Bereich im DATa-Segment reserviert werden (reicht
 in der Regel fr CPX-Module aus). Dann mu dem Linker lediglich die Gre
 des Bereichs in Bytes mitgeteilt werden und er erzeugt ein entsprechend
 mit Null-Bytes geflltes DATA-Segment.
 b) Das DATA-Segment soll mit bestimmten Werten vorbesetzt werden. Dazu
 ist eine Datei zu erzeugen, die diese Werte enthlt. Der Linker fgt 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 fr die Gre des DATAs oder einem Dateinamen,
 der als DATA einzufgen 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 knnen, 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 fr den Compiler ($I) gefolgt
vom Namen des zu bersetzenden Moduls. Dahinter steht dann nach "Out:" der
Pfad, auf dem der zugehrige Code des Moduls gefunden wurde.
Am Ende der Zeile steht hinter "Reason:"...
  der Name des importierten Moduls, das ein jngeres Datum hat oder...
  "No Code", wenn das Modul noch nicht bersetzt wurde oder...
  "Modified", wenn die Quelldatei jnger als ihr Code ist, d.h. verndert
   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 mglich, 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 whrend der Entwicklungszeit in der Shell Speicher belegt.

Die Datei-Information wirkt auch bei Ordnern, allerdings wird die >Lnge<
immer Null anzeigen, auch der Schreibschutz-Knopf bleibt unbercksichtigt.
Sinn macht dies nur ab TOS 1.4, wo auf diese Weise zumindest der Name des
Ordners verndert werden kann.

Der Zeichensatz fr TextWindows und WindowLists (also alle Fenster mit
Textausgabe) kann bei der groen Shell (MM2SHELL) gewhlt werden. Dazu
enthalten die Shell-Parameter neue Eingabefelder fr den Namen und die
Gre (in Punkt) des Zeichensatzes.
Gibt man keinen Namen an, wird der aktuelle Systemzeichensatz eingesetzt.
Der Name des normalen Systemfonts ist "6x6 system font". Seine Gren sind
8, 9, und 10. Andere Fonts werden nur verfgbar, 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 knnen ggf. mit dem Programm TextDemo.M
(DEMO-Ordner) ermittelt werden. Startet man es, zeigt es mit jedem
Tastendruck einen der vorhandenen Fonts an. Die Gren mssen ggf.
ausprobiert werden, sie rangieren in der Regel zw. 5 und 20.


12. MM2CLink - Der Linker fr 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, mssen 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 mssen 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 uneingeschrnkt
  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-Parameterbergabemechanismus
  im neuen MM2-Compiler 4.0 implementiert.

  Ab der Version 2.0 knnen mit MM2CLink erzeugte Implementationen uneinge-
  schrnkt gelinkt werden.

Das MM2CLink-Paket ist nun Shareware. Wenn Sie es einsetzen, sollten Sie
dafr 50 DM an den Autor zahlen. Damit macht sich die von ihm investierte
Arbeit zwar lngst nicht bezahlt, aber genau deswegen wre es nur fair,
ihn dafr wenigstens ein wenig zu belohnen. Und vielleicht hat er ja auch
noch eine verbesserte Version fr 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 Krzel   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 Kln-Porz            02203-696379
 8 K   MAUS Kln                 0221-1390008
74 SU  MAUS Rheinbach/Rhein-Sieg 02226-12326
65 BM  MAUS Hrth/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 Mnster 3            0251-260324
 1 MS  MAUS Mnster              [nicht ffentlich]
55 MS2 MAUS Mnster 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 Lbeck               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 Frstenau/Peine 2    [nicht ffentlich]
20 PE  MAUS Frstenau/Peine      05302-7313
85 WOB MAUS Wolfsburg-Reislingen 05363-40775
29 OS  MAUS Osnabrck            0541-597571
77 CLP MAUS Bunnen/Loeningen     05434-3797
87 G  MAUS Gttingen            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 Zweibrcken          06332-16629
78 SB  MAUS Saarbrcken          0681-3904998
97 SB2 MAUS Saarbrcken-2        0681-9931317
10 F   MAUS Frankfurt            069-6313857
46 BB  MAUS Bblingen            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/Bblingen       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 Mnchen 4            089-1406018
 5 M   MAUS Mnchen              089-6886705
96 M2  MAUS Mnchen 2            089-983120
50 N   MAUS Nrnberg             0911-405167
47 F  MAUS Frth                0911-7530280
61 WUN MAUS Wunsiedel            09232-70251
 7 W  MAUS Wrzburg             0931-280269
13 R   MAUS Regensburg           0941-448518

Alle Boxen knnen 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 persnliche
Nachricht Thomas Tempelmann schicken wollen, knnen Sie das nur, wenn
Sie dort einen Beitrag (ca. 30-50 DM jhrlich) 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 persnliche Nachricht zu senden.


14. Korrekturen zum Handbuch
----------------------------

* Seite 3-27/30: Die SYSTEM-Funktionen SHIFT/ROTATE haben keinen VAR-Parameter
  sondern liefern den vernderten 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 Neukufen wenden Sie sich
bitte an:

Thomas Tempelmann
Schusterwolfstr. 13
D-81241 Mnchen
Tel. (089) 8347394
FAX  (089) 8206981

(Sollte die Adr. nicht mehr stimmen, wenden Sie sich an ASH: 06221 302210)

Sie knnen 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 Rckumschlag 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
                         Jrgen Mller
                       Thomas Tempelmann
