X-Git-Url: https://deadsoftware.ru/gitweb?p=cpc.git;a=blobdiff_plain;f=src%2Fgeneric%2FDsw%2FMod%2FCompiler486Main.cp;h=5461907738b518d28937737892394e19b1a00c6f;hp=5d1a68f85758850af00f8a5423956419fb3fc9db;hb=47136c23919fb14957c4c59240bbc756f56d1942;hpb=e01013bb2dfa7aaab246a94bdde530fd91ea4a43 diff --git a/src/generic/Dsw/Mod/Compiler486Main.cp b/src/generic/Dsw/Mod/Compiler486Main.cp index 5d1a68f..5461907 100644 --- a/src/generic/Dsw/Mod/Compiler486Main.cp +++ b/src/generic/Dsw/Mod/Compiler486Main.cp @@ -2,14 +2,18 @@ MODULE DswCompiler486Main; IMPORT Kernel, HostFiles, Files, Console, Strings, DswDocuments, DevCPM, DevCPT, DevCPB, DevCPP, DevCPE, DevCPV := DevCPV486, DevCPS, - DevCPH; + DevCPH, DevCPR; CONST (* compiler options: *) checks = 0; allchecks = 1; assert = 2; obj = 3; ref = 4; allref = 5; srcpos = 6; reallib = 7; signatures = 8; + (* pVarInd = 14; bigEnd = 15; *) ctime = 16; + mainprog = 20; include0 = 21; hint = 29; oberon = 30; errorTrap = 31; - defopt = {checks, assert, obj, ref, allref, srcpos, signatures}; + defopt = {checks, assert, obj, ref, allref, srcpos, signatures, ctime}; + + version = "0.3"; emulong = 0; defopt2 = {}; @@ -24,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; @@ -68,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; @@ -166,6 +183,17 @@ MODULE DswCompiler486Main; INCL(opts2, emulong) ELSIF p = "-no-long-calls" THEN EXCL(opts2, emulong) + ELSIF p = "-version" THEN + Console.WriteStr(version); Console.WriteLn; + Kernel.Quit(0) + ELSIF p = "-use-time" THEN + 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; @@ -194,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; @@ -207,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); @@ -222,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