home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / UTILITY / COMPINIT.M < prev    next >
Encoding:
Text File  |  1996-06-25  |  5.0 KB  |  154 lines

  1. MODULE CompInit;
  2.  
  3. (*
  4.  * Treibermodul, das den Compiler als gelinktes Programm lauffähig macht.
  5.  *
  6.  * Anwendung:
  7.  * ----------
  8.  *
  9.  * Der Compiler kann dann als TTP-Programm oder von einer Command-Shell
  10.  * aufgerufen werden. Die Argumente sind wie folgt:
  11.  *
  12.  *  <Dateiname> [ optionen ]
  13.  *
  14.  * Also kommt zuerst der Name der zu compilierenden Datei, dann können
  15.  * Optionen, jeweils mit Leerzeichen getrennt, folgen:
  16.  *   -Q            Kurzausgaben, wie Importe, usw.
  17.  *   +Q            KEINE Kurzausgaben, wie Importe, usw.
  18.  *   /O<pfad>      <pfad> ist der gewünschte Ausgabepfad. Fehlt er, wird
  19.  *                 einer der unten deklarierten Pfade (Def/Imp/ModOutPath)
  20.  *                 verwendet.
  21.  *   /P<name>      Erzeugt ein Protokoll in der Datei <name>
  22.  *   /C<zahl>      Für Protokoll: Breite der Ausgabezeilen.
  23.  *   /Q            Compiler macht ÜBERHAUPT KEINE Ausgaben
  24.  *
  25.  *
  26.  * Installation:
  27.  * -------------
  28.  *
  29.  * Zuerst müssen hier im Modul die 'set'-Aufrufe angepaßt werden
  30.  * auf die Pfade, wie sie auf dem Zielsystem verwendet werden, ebenso
  31.  * müssen die Zuweisungen f. 'ErrListFile', 'DefOutPath', 'ImpOutPath',
  32.  * 'ModOutPath' und 'DefLibName' angepaßt werden.
  33.  * Siehe dazu Anmerkungen mit ">>> .... <<<".
  34.  *
  35.  * In der Shell sollte beim Linker die vollst. Optimierung gewählt
  36.  * werden. Die Stackgröße sollte 16000 betragen. Die Treiber-Module
  37.  *   M2Init,
  38.  *   GEMDOSIO.IMP und
  39.  *   CompInit (dieses Modul)
  40.  * müssen in den Linker-Optionen aktiviert werden.
  41.  *
  42.  * Dann kann der Compiler (MM2COMP.MOD) gelinkt werden und sollte ggf.
  43.  * in "MM2COMP.TTP" umbenannt werden. Achtung: Das Linken des Compilers
  44.  * dauert ungewöhnlich lang!
  45.  *
  46.  * Weiterhin beachte die Hinweise hier im Programmtext!
  47.  *)
  48.  
  49. FROM SYSTEM IMPORT ADDRESS, ADR;
  50.  
  51. FROM ShellMsg IMPORT DefPaths, ImpPaths, ModPaths, SrcPaths,
  52.   Active, DefSfx, ImpSfx, ModSfx, ErrListFile,
  53.   DefLibName, DefOutPath, ImpOutPath, ModOutPath,
  54.   CodeName, ErrorMsg, TextName, TextLine, TextCol;
  55.  
  56. FROM ErrBase IMPORT RaiseError, ErrResp, RtnCond;
  57.  
  58. FROM PrgCtrl IMPORT CurrentExitCode, CatchProcessTerm, TermCarrier;
  59.  
  60. FROM MOSGlobals IMPORT MemArea;
  61.  
  62. IMPORT Lists, Strings, InOut;
  63.  
  64.  
  65.  
  66. VAR     handle: ADDRESS;
  67.  
  68. CONST   pathSize = 64;  (* -- Dieser Wert darf verändert werden -- *)
  69.         maxPath = 20;   (* -- Dieser Wert darf verändert werden -- *)
  70.  
  71. VAR     pathArray: ARRAY [1..maxPath] OF ARRAY [0..pathSize] OF CHAR;
  72.  
  73.  
  74. PROCEDURE setPaths;
  75.   VAR err: BOOLEAN; idx: CARDINAL;
  76.   PROCEDURE set (VAR path: Lists.List; name: ARRAY OF CHAR);
  77.     VAR ok: BOOLEAN;
  78.     BEGIN
  79.       IF Strings.Length (name) >= pathSize THEN
  80.         RaiseError (-1, "'pathSize' erhöhen!", callerCaused, mayContinue)
  81.       ELSE
  82.         IF idx < maxPath THEN
  83.           INC (idx);
  84.           Strings.Assign (name, pathArray [idx], ok);
  85.           Lists.AppendEntry (path, ADR (pathArray[idx]), err)
  86.         ELSE
  87.           RaiseError (-1, "'maxPath' erhöhen!", selfCaused, mayContinue)
  88.         END
  89.       END
  90.     END set;
  91.   BEGIN
  92.     idx:= 0;
  93.     Lists.CreateList (DefPaths,err);
  94.     Lists.CreateList (SrcPaths,err);
  95.  
  96.     (* >>> Hier können die gewünschten Pfade zugewiesen werden. <<< *)
  97.     (* Suchpfade für Def-Module (notwendig): *)
  98.     set (DefPaths, '.\');
  99.     set (DefPaths, 'A:\MM2\DEF\');
  100.     (* Suchpfade für Quelltexte (optional): *)
  101.     set (SrcPaths, '.\');
  102.   END setPaths;
  103.  
  104.  
  105. PROCEDURE termination;
  106.   (*
  107.    * Die Funktion wird aufgerufen, wenn der Compiler fertig ist.
  108.    * Dann kann hier geprüft werden, ob ein Fehler aufgetreten ist
  109.    * und dann beispielsweise die Informationen in eine Datei geschrieben
  110.    * werden, damit ein danach aufzurufender Editor (z.B. TEMPUS) die
  111.    * Fehlerstelle leicht anspringen kann.
  112.    *)
  113.   BEGIN
  114.     CASE CurrentExitCode () OF
  115.       0: (* fehlerfreie Übersetzung *)
  116.     | 1: (* keine Datei zum Übersetzen angegeben *)
  117.     | 2: (* Datei (I/O)-Fehler *)
  118.          InOut.WriteString (ErrorMsg);
  119.          InOut.WriteLn;
  120.     | 3: (* Syntaxfehler *)
  121.          InOut.WriteString (ErrorMsg);
  122.          InOut.WriteLn;
  123.          (*
  124.           * 'TextName', 'TextLine', 'TextCol' enthalten Namen des
  125.           * Quelltextes und die Fehlerposition, die nun weitergereicht
  126.           * werden können.
  127.           *)
  128.     ELSE
  129.     END
  130.   END termination;
  131.  
  132. VAR carrier: TermCarrier;
  133.     wsp: MemArea;
  134.  
  135. BEGIN
  136.   setPaths;  (* Hier werden die Suchpfade für DEF-Dateien gesetzt *)
  137.   DefSfx:= 'DEF';
  138.   ImpSfx:= 'IMP';
  139.   ModSfx:= 'MOD';
  140.   ErrListFile:= 'MODULA.ERR';   (* >>> Hier Pfad mit eintragen! <<< *)
  141.  
  142.   (* Ausgabepfade für übersetzte Dateien: *)
  143.   DefOutPath:= '.\';        (* >>> Pfad f. Symboldateien (.DEF) <<< *)
  144.   ImpOutPath:= '.\';        (* >>> Pfad f. Implementations-Codes (.IMP) <<< *)
  145.   ModOutPath:= '.\';        (* >>> Pfad f. Hauptmodul-Codes (.MOD) <<< *)
  146.  
  147.   (* Name der Library (incl. Pfad!) *)
  148.   DefLibName:= 'MM2DEF.M2L';    (* >>> Hier Pfad mit eintragen! <<< *)
  149.  
  150.   (* Vorbereitungen zum Abfangen von Übersetzungsfehlern treffen *)
  151.   Active:= TRUE;
  152.   CatchProcessTerm (carrier, termination, wsp);
  153. END CompInit.
  154.