DEADSOFTWARE

add preprocesor for condition compilation
[cpc.git] / src / generic / Dsw / Mod / Compiler486Main.cp
index 1797a6daea7243ad6e985d42520b5313a4e42300..5461907738b518d28937737892394e19b1a00c6f 100644 (file)
@@ -2,7 +2,7 @@ MODULE DswCompiler486Main;
 
   IMPORT Kernel, HostFiles, Files, Console, Strings, DswDocuments,
     DevCPM, DevCPT, DevCPB, DevCPP, DevCPE, DevCPV := DevCPV486, DevCPS,
-    DevCPH;
+    DevCPH, DevCPR;
 
   CONST
     (* compiler options: *)
@@ -28,8 +28,15 @@ MODULE DswCompiler486Main;
       next: Elem
     END;
 
+    Def = POINTER TO RECORD
+      name: DevCPT.Name;
+      val: BOOLEAN;
+      next: Def
+    END;
+
   VAR
     u: Elem;
+    d: Def;
 
   PROCEDURE GetPath (IN path: ARRAY OF CHAR; OUT dir, name: Files.Name);
     VAR i, j, len: INTEGER;
@@ -72,6 +79,12 @@ MODULE DswCompiler486Main;
       END
     END Check;
 
+    PROCEDURE Define (IN name: DevCPT.Name; val: BOOLEAN);
+      VAR def: Def;
+    BEGIN
+      NEW(def); def.name := name$; def.val := val; def.next := d; d := def
+    END Define;
+
   BEGIN
     outsym := ""; outcode := "";
     opts := defopt; opts2 := defopt2; found := FALSE;
@@ -177,6 +190,10 @@ MODULE DswCompiler486Main;
           INCL(opts, ctime)
         ELSIF p = "-no-use-time" THEN
           EXCL(opts, ctime)
+        ELSIF p = "-define+" THEN
+          Check; Define(Kernel.argv[i]$, TRUE); INC(i)
+        ELSIF p = "-define-" THEN
+          Check; Define(Kernel.argv[i]$, FALSE); INC(i)
         ELSE
           Console.WriteStr("unknown option ");
           Console.WriteStr(p); Console.WriteLn;
@@ -205,7 +222,7 @@ MODULE DswCompiler486Main;
   END InitOptions;
 
   PROCEDURE Module (source: POINTER TO ARRAY OF CHAR; m: Elem; OUT error: BOOLEAN);
-    VAR ext, new: BOOLEAN; p: DevCPT.Node;
+    VAR ext, new: BOOLEAN; p: DevCPT.Node; def: Def;
   BEGIN
     DevCPM.Init(source);
     DevCPM.symList := m.insym;
@@ -218,7 +235,14 @@ MODULE DswCompiler486Main;
     DevCPT.Init(m.opts);
     DevCPB.typSize := DevCPV.TypeSize;
     DevCPT.processor := DevCPV.processor;
+    DevCPR.Init;
+    def := d;
+    WHILE def # NIL DO
+      DevCPR.Set(def.name, def.val);
+      def := def.next
+    END;
     DevCPP.Module(p);
+    DevCPR.Check;
     IF DevCPM.noerr THEN
       IF DevCPT.libName # "" THEN EXCL(m.opts, obj) END;
       DevCPV.Init(m.opts); DevCPV.Allocate; DevCPT.Export(ext, new);
@@ -233,6 +257,7 @@ MODULE DswCompiler486Main;
     IF DevCPM.noerr & (new OR ext) THEN DevCPM.RegisterNewSym
     ELSE DevCPM.DeleteNewSym
     END;
+    DevCPR.Close;
     DevCPT.Close;
     error := ~DevCPM.noerr;
     IF error THEN