From c900218965173a69c5fe9afa5ba53430ae663a11 Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Sun, 14 Sep 2014 06:09:09 +0400 Subject: [PATCH] re re revised oberon compiler for RISC works -- noch --- src/voc07R/CompatFiles.Mod | 677 +++++++++++++++++++++++++++++++++++++ src/voc07R/CompatTexts.Mod | 581 +++++++++++++++++++++++++++++++ src/voc07R/Fonts.Mod | 146 ++++++++ src/voc07R/ORB.Mod | 90 ++--- src/voc07R/ORC.Mod | 206 ----------- src/voc07R/ORG.Mod | 310 ++++++++--------- src/voc07R/ORP.Mod | 182 ++++------ src/voc07R/ORS.Mod | 44 +-- src/voc07R/Oberon.Mod | 103 ++++++ src/voc07R/makefile | 4 +- voc | Bin 1276147 -> 1276178 bytes 11 files changed, 1771 insertions(+), 572 deletions(-) create mode 100644 src/voc07R/CompatFiles.Mod create mode 100644 src/voc07R/CompatTexts.Mod create mode 100644 src/voc07R/Fonts.Mod delete mode 100644 src/voc07R/ORC.Mod create mode 100644 src/voc07R/Oberon.Mod diff --git a/src/voc07R/CompatFiles.Mod b/src/voc07R/CompatFiles.Mod new file mode 100644 index 00000000..d7a9c06e --- /dev/null +++ b/src/voc07R/CompatFiles.Mod @@ -0,0 +1,677 @@ +MODULE CompatFiles; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files *) +(* modified version of Files, which opens only the file provided and does not scan any path in any environment variable, also ReadLine procedure added; -- noch *) + IMPORT SYSTEM, Unix, Kernel, Args, Console; + + (* standard data type I/O + + little endian, + Sint:1, Int:2, Lint:4 + ORD({0}) = 1, + false = 0, true =1 + IEEE real format, + null terminated strings, + compact numbers according to M.Odersky *) + + + CONST + nofbufs = 4; + bufsize = 4096; + fileTabSize = 64; + noDesc = -1; + notDone = -1; + + (* file states *) + open = 0; create = 1; close = 2; + + + TYPE + FileName = ARRAY 101 OF CHAR; + File* = POINTER TO Handle; + Buffer = POINTER TO BufDesc; + + Handle = RECORD + workName, registerName: FileName; + tempFile: BOOLEAN; + dev, ino, mtime: LONGINT; + fd-, len, pos: LONGINT; + bufs: ARRAY nofbufs OF Buffer; + swapper, state: INTEGER + END ; + + BufDesc = RECORD + f: File; + chg: BOOLEAN; + org, size: LONGINT; + data: ARRAY bufsize OF SYSTEM.BYTE + END ; + + Rider* = RECORD + res*: LONGINT; + eof*: BOOLEAN; + buf: Buffer; + org, offset: LONGINT + END ; + + Time = POINTER TO TimeDesc; + TimeDesc = RECORD + sec*, min*, hour*, mday*, mon*, year*, wday*, isdst*, zone*, gmtoff*: LONGINT; +(* sec*, min*, hour*, mday*, mon*, year*, wday*, isdst*, zone*, gmtoff*: INTEGER;*) + END ; + + VAR + fileTab: ARRAY fileTabSize OF LONGINT (*=File*); + tempno: INTEGER; + +(* for localtime *) + PROCEDURE -includetime() + '#include "time.h"'; + + PROCEDURE -localtime(VAR clock: LONGINT): Time + "(CompatFiles_Time) localtime(clock)"; + + PROCEDURE -getcwd(VAR cwd: Unix.Name) + "getcwd(cwd, cwd__len)"; + + PROCEDURE -IdxTrap "__HALT(-1)"; + + PROCEDURE^ Finalize(o: SYSTEM.PTR); + + PROCEDURE Err(s: ARRAY OF CHAR; f: File; errno: LONGINT); + BEGIN + Console.Ln; Console.String("-- "); Console.String(s); Console.String(": "); + IF f # NIL THEN + IF f.registerName # "" THEN Console.String(f.registerName) ELSE Console.String(f.workName) END + END ; + IF errno # 0 THEN Console.String(" errno = "); Console.Int(errno, 1) END ; + Console.Ln; + HALT(99) + END Err; + + PROCEDURE MakeFileName(dir, name: ARRAY OF CHAR; VAR dest: ARRAY OF CHAR); + VAR i, j: INTEGER; + BEGIN i := 0; j := 0; + WHILE dir[i] # 0X DO dest[i] := dir[i]; INC(i) END ; + IF dest[i-1] # "/" THEN dest[i] := "/"; INC(i) END ; + WHILE name[j] # 0X DO dest[i] := name[j]; INC(i); INC(j) END ; + dest[i] := 0X + END MakeFileName; + + PROCEDURE GetTempName(finalName: ARRAY OF CHAR; VAR name: ARRAY OF CHAR); + VAR n, i, j: LONGINT; + BEGIN + INC(tempno); n := tempno; i := 0; + IF finalName[0] # "/" THEN (* relative pathname *) + WHILE Kernel.CWD[i] # 0X DO name[i] := Kernel.CWD[i]; INC(i) END; + IF Kernel.CWD[i-1] # "/" THEN name[i] := "/"; INC(i) END + END; + j := 0; + WHILE finalName[j] # 0X DO name[i] := finalName[j]; INC(i); INC(j) END; + DEC(i); + WHILE name[i] # "/" DO DEC(i) END; + name[i+1] := "."; name[i+2] := "t"; name[i+3] := "m"; name[i+4] := "p"; name[i+5] := "."; INC(i, 6); + WHILE n > 0 DO name[i] := CHR(n MOD 10 + ORD("0")); n := n DIV 10; INC(i) END; + name[i] := "."; INC(i); n := SHORT(Unix.Getpid()); + WHILE n > 0 DO name[i] := CHR(n MOD 10 + ORD("0")); n := n DIV 10; INC(i) END; + name[i] := 0X + END GetTempName; + + PROCEDURE Create(f: File); + VAR stat: Unix.Status; done: BOOLEAN; + errno: LONGINT; err: ARRAY 32 OF CHAR; + BEGIN + IF f.fd = noDesc THEN + IF f.state = create THEN GetTempName(f.registerName, f.workName); f.tempFile := TRUE + ELSIF f.state = close THEN + f.workName := f.registerName; f.registerName := ""; f.tempFile := FALSE + END ; + errno := Unix.Unlink(f.workName); (*unlink first to avoid stale NFS handles and to avoid reuse of inodes*) + f.fd := Unix.Open(f.workName, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); + done := f.fd >= 0; errno := Unix.errno(); + IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (f.fd >= fileTabSize)) THEN + IF done & (f.fd >= fileTabSize) THEN errno := Unix.Close(f.fd) END ; + Kernel.GC(TRUE); + f.fd := Unix.Open(f.workName, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); + done := f.fd >= 0 + END ; + IF done THEN + IF f.fd >= fileTabSize THEN errno := Unix.Close(f.fd); Err("too many files open", f, 0) + ELSE fileTab[f.fd] := SYSTEM.VAL(LONGINT, f); INC(Kernel.nofiles); Kernel.RegisterObject(f, Finalize); + f.state := open; f.pos := 0; errno := Unix.Fstat(f.fd, stat); + f.dev := stat.dev; f.ino := stat.ino; f.mtime := stat.mtime + END + ELSE errno := Unix.errno(); + IF errno = Unix.ENOENT THEN err := "no such directory" + ELSIF (errno = Unix.ENFILE) OR (errno = Unix.EMFILE) THEN err := "too many files open" + ELSE err := "file not created" + END ; + Err(err, f, errno) + END + END + END Create; + + PROCEDURE Flush(buf: Buffer); + VAR res: LONGINT; f: File; stat: Unix.Status; + BEGIN + IF buf.chg THEN f := buf.f; Create(f); + IF buf.org # f.pos THEN res := Unix.Lseek(f.fd, buf.org, 0) END ; + res := Unix.Write(f.fd, SYSTEM.ADR(buf.data), buf.size); + IF res < 0 THEN Err("error in writing file", f, Unix.errno()) END ; + f.pos := buf.org + buf.size; + buf.chg := FALSE; + res := Unix.Fstat(f.fd, stat); + f.mtime := stat.mtime + END + END Flush; + + PROCEDURE Close* (f: File); + VAR i, res: LONGINT; + BEGIN + IF (f.state # create) OR (f.registerName # "") THEN + Create(f); i := 0; + WHILE (i < nofbufs) & (f.bufs[i] # NIL) DO Flush(f.bufs[i]); INC(i) END ; + res := Unix.Fsync(f.fd); + IF res < 0 THEN Err("error in writing file", f, Unix.errno()) END + END + END Close; + + PROCEDURE Length* (f: File): LONGINT; + BEGIN RETURN f.len + END Length; + + PROCEDURE New* (name: ARRAY OF CHAR): File; + VAR f: File; + BEGIN + NEW(f); f.workName := ""; COPY(name, f.registerName); + f.fd := noDesc; f.state := create; f.len := 0; f.pos := 0; f.swapper := -1; (*all f.buf[i] = NIL*) + RETURN f + END New; +(* + PROCEDURE ScanPath(VAR pos: INTEGER; VAR dir: ARRAY OF CHAR); (* supports ~, ~user and blanks inside path *) + VAR i: INTEGER; ch: CHAR; home: ARRAY 256 OF CHAR; + BEGIN + i := 0; ch := Kernel.OBERON[pos]; + WHILE (ch = " ") OR (ch = ":") DO INC(pos); ch := Kernel.OBERON[pos] END ; + IF ch = "~" THEN + INC(pos); ch := Kernel.OBERON[pos]; + home := ""; Args.GetEnv("HOME", home); + WHILE home[i] # 0X DO dir[i] := home[i]; INC(i) END ; + IF (ch # "/") & (ch # 0X) & (ch # ":") & (ch # " ") THEN + WHILE (i > 0) & (dir[i-1] # "/") DO DEC(i) END + END + END ; + WHILE (ch # 0X) & (ch # ":") DO dir[i] := ch; INC(i); INC(pos); ch := Kernel.OBERON[pos] END ; + WHILE (i > 0) & (dir[i-1] = " ") DO DEC(i) END ; + dir[i] := 0X + END ScanPath; +*) + PROCEDURE HasDir(VAR name: ARRAY OF CHAR): BOOLEAN; + VAR i: INTEGER; ch: CHAR; + BEGIN i := 0; ch := name[0]; + WHILE (ch # 0X) & (ch # "/") DO INC(i); ch := name[i] END ; + RETURN ch = "/" + END HasDir; + + PROCEDURE CacheEntry(dev, ino: LONGINT; mtime: LONGINT): File; + VAR f: File; i: INTEGER; stat: Unix.Status; res: LONGINT; + BEGIN i := 0; + WHILE i < fileTabSize DO + f := SYSTEM.VAL(File, fileTab[i]); + IF (f # NIL) & (ino = f.ino) & (dev = f.dev) THEN + IF mtime # f.mtime THEN i := 0; + WHILE i < nofbufs DO + IF f.bufs[i] # NIL THEN f.bufs[i].org := -1; f.bufs[i] := NIL END ; + INC(i) + END ; + f.swapper := -1; f.mtime := mtime; + res := Unix.Fstat(f.fd, stat); f.len := stat.size + END ; + RETURN f + END ; + INC(i) + END ; + RETURN NIL + END CacheEntry; + + PROCEDURE Old* (name: ARRAY OF CHAR): File; + VAR f: File; fd, res, errno: LONGINT; pos: INTEGER; done: BOOLEAN; + dir, path: ARRAY 256 OF CHAR; + stat: Unix.Status; + BEGIN + IF name # "" THEN + IF HasDir(name) THEN dir := ""; COPY(name, path) + ELSE + pos := 0; + COPY(name, path); (* -- noch *) + (*ScanPath(pos, dir);*) (*MakeFileName(dir, name, path);*) (*ScanPath(pos, dir)*) + END ; + LOOP + fd := Unix.Open(path, Unix.rdwr, {}); done := fd >= 0; errno := Unix.errno(); + IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (fd >= fileTabSize)) THEN + IF done & (fd >= fileTabSize) THEN res := Unix.Close(fd) END ; + Kernel.GC(TRUE); + fd := Unix.Open(path, Unix.rdwr, {}); + done := fd >= 0; errno := Unix.errno(); + IF ~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE)) THEN Err("too many files open", f, errno) END + END ; + IF ~done & ((errno = Unix.EACCES) OR (errno = Unix.EROFS) OR (errno = Unix.EAGAIN)) THEN + (* errno EAGAIN observed on Solaris 2.4 *) + fd := Unix.Open(path, Unix.rdonly, {}); done := fd >= 0; errno := Unix.errno() + END ; +IF (~done) & (errno # Unix.ENOENT) THEN + Console.String("warning Files.Old "); Console.String(name); + Console.String(" errno = "); Console.Int(errno, 0); Console.Ln; +END ; + IF done THEN + res := Unix.Fstat(fd, stat); + f := CacheEntry(stat.dev, stat.ino, stat.mtime); + IF f # NIL THEN res := Unix.Close(fd); RETURN f + ELSIF fd >= fileTabSize THEN res := Unix.Close(fd); Err("too many files open", f, 0) + ELSE NEW(f); fileTab[fd] := SYSTEM.VAL(LONGINT, f); INC(Kernel.nofiles); Kernel.RegisterObject(f, Finalize); + f.fd := fd; f.state := open; f.len := stat.size; f.pos := 0; f.swapper := -1; (*all f.buf[i] = NIL*) + COPY(name, f.workName); f.registerName := ""; f.tempFile := FALSE; + f.dev := stat.dev; f.ino := stat.ino; f.mtime := stat.mtime; + RETURN f + END + ELSIF dir = "" THEN RETURN NIL + ELSE (*MakeFileName(dir, name, path);*) (*ScanPath(pos, dir)*) + RETURN NIL + END + END + ELSE RETURN NIL + END + END Old; + + PROCEDURE Purge* (f: File); + VAR i: INTEGER; stat: Unix.Status; res: LONGINT; + BEGIN i := 0; + WHILE i < nofbufs DO + IF f.bufs[i] # NIL THEN f.bufs[i].org := -1; f.bufs[i] := NIL END ; + INC(i) + END ; + IF f.fd # noDesc THEN res := Unix.Ftruncate(f.fd, 0); res := Unix.Lseek(f.fd, 0, 0) END ; + f.pos := 0; f.len := 0; f.swapper := -1; + res := Unix.Fstat(f.fd, stat); f.mtime := stat.mtime + END Purge; + + PROCEDURE GetDate* (f: File; VAR t, d: LONGINT); + VAR stat: Unix.Status; clock, res: LONGINT; time: Time; + BEGIN + Create(f); res := Unix.Fstat(f.fd, stat); + time := localtime(stat.mtime); + t := time.sec + ASH(time.min, 6) + ASH(time.hour, 12); + d := time.mday + ASH(time.mon+1, 5) + ASH(time.year MOD 100, 9) + END GetDate; + + PROCEDURE Pos* (VAR r: Rider): LONGINT; + BEGIN RETURN r.org + r.offset + END Pos; + + PROCEDURE Set* (VAR r: Rider; f: File; pos: LONGINT); + VAR org, offset, i, n, res: LONGINT; buf: Buffer; + BEGIN + IF f # NIL THEN + IF pos > f.len THEN pos := f.len ELSIF pos < 0 THEN pos := 0 END ; + offset := pos MOD bufsize; org := pos - offset; i := 0; + WHILE (i < nofbufs) & (f.bufs[i] # NIL) & (org # f.bufs[i].org) DO INC(i) END ; + IF i < nofbufs THEN + IF f.bufs[i] = NIL THEN NEW(buf); buf.chg := FALSE; buf.org := -1; buf.f := f; f.bufs[i] := buf + ELSE buf := f.bufs[i] + END + ELSE + f.swapper := (f.swapper + 1) MOD nofbufs; + buf := f.bufs[f.swapper]; + Flush(buf) + END ; + IF buf.org # org THEN + IF org = f.len THEN buf.size := 0 + ELSE Create(f); + IF f.pos # org THEN res := Unix.Lseek(f.fd, org, 0) END ; + n := Unix.ReadBlk(f.fd, buf.data); + IF n < 0 THEN Err("read from file not done", f, Unix.errno()) END ; + f.pos := org + n; + buf.size := n + END ; + buf.org := org; buf.chg := FALSE + END + ELSE buf := NIL; org := 0; offset := 0 + END ; + r.buf := buf; r.org := org; r.offset := offset; r.eof := FALSE; r.res := 0 + END Set; + + PROCEDURE Read* (VAR r: Rider; VAR x: SYSTEM.BYTE); + VAR offset: LONGINT; buf: Buffer; + BEGIN + buf := r.buf; offset := r.offset; + IF r.org # buf.org THEN Set(r, buf.f, r.org + offset); buf := r.buf; offset := r.offset END ; + IF (offset < buf.size) THEN + x := buf.data[offset]; r.offset := offset + 1 + ELSIF r.org + offset < buf.f.len THEN + Set(r, r.buf.f, r.org + offset); + x := r.buf.data[0]; r.offset := 1 + ELSE + x := 0X; r.eof := TRUE + END + END Read; + + PROCEDURE ReadBytes* (VAR r: Rider; VAR x: ARRAY OF SYSTEM.BYTE; n: LONGINT); + VAR xpos, min, restInBuf, offset: LONGINT; buf: Buffer; + BEGIN + IF n > LEN(x) THEN IdxTrap END ; + xpos := 0; buf := r.buf; offset := r.offset; + WHILE n > 0 DO + IF (r.org # buf.org) OR (offset >= bufsize) THEN + Set(r, buf.f, r.org + offset); + buf := r.buf; offset := r.offset + END ; + restInBuf := buf.size - offset; + IF restInBuf = 0 THEN r.res := n; r.eof := TRUE; RETURN + ELSIF n > restInBuf THEN min := restInBuf ELSE min := n END ; + SYSTEM.MOVE(SYSTEM.ADR(buf.data) + offset, SYSTEM.ADR(x) + xpos, min); + INC(offset, min); r.offset := offset; INC(xpos, min); DEC(n, min) + END ; + r.res := 0; r.eof := FALSE + END ReadBytes; + + PROCEDURE ReadByte* (VAR r : Rider; VAR x : ARRAY OF SYSTEM.BYTE); + BEGIN + ReadBytes(r, x, 1); + END ReadByte; + + PROCEDURE Base* (VAR r: Rider): File; + BEGIN RETURN r.buf.f + END Base; + + PROCEDURE Write* (VAR r: Rider; x: SYSTEM.BYTE); + VAR buf: Buffer; offset: LONGINT; + BEGIN + buf := r.buf; offset := r.offset; + IF (r.org # buf.org) OR (offset >= bufsize) THEN + Set(r, buf.f, r.org + offset); + buf := r.buf; offset := r.offset + END ; + buf.data[offset] := x; + buf.chg := TRUE; + IF offset = buf.size THEN + INC(buf.size); INC(buf.f.len) + END ; + r.offset := offset + 1; r.res := 0 + END Write; + + PROCEDURE WriteByte* (VAR r : Rider; x : SYSTEM.BYTE); (* added for compatibility with PO 2013, -- noch *) + BEGIN + Write(r, x); + END WriteByte; + + PROCEDURE WriteBytes* (VAR r: Rider; VAR x: ARRAY OF SYSTEM.BYTE; n: LONGINT); + VAR xpos, min, restInBuf, offset: LONGINT; buf: Buffer; + BEGIN + IF n > LEN(x) THEN IdxTrap END ; + xpos := 0; buf := r.buf; offset := r.offset; + WHILE n > 0 DO + IF (r.org # buf.org) OR (offset >= bufsize) THEN + Set(r, buf.f, r.org + offset); + buf := r.buf; offset := r.offset + END ; + restInBuf := bufsize - offset; + IF n > restInBuf THEN min := restInBuf ELSE min := n END ; + SYSTEM.MOVE(SYSTEM.ADR(x) + xpos, SYSTEM.ADR(buf.data) + offset, min); + INC(offset, min); r.offset := offset; + IF offset > buf.size THEN INC(buf.f.len, offset - buf.size); buf.size := offset END ; + INC(xpos, min); DEC(n, min); buf.chg := TRUE + END ; + r.res := 0 + END WriteBytes; + +(* another solution would be one that is similar to ReadBytes, WriteBytes. +No code duplication, more symmetric, only two ifs for +Read and Write in buffer, buf.size replaced by bufsize in Write ops, buf.size and len +must be made consistent with offset (if offset > buf.size) in a lazy way. + +PROCEDURE Write* (VAR r: Rider; x: SYSTEM.BYTE); + VAR buf: Buffer; offset: LONGINT; +BEGIN + buf := r.buf; offset := r.offset; + IF (offset >= bufsize) OR (r.org # buf.org) THEN + Set(r, buf.f, r.org + offset); buf := r.buf; offset := r.offset; + END ; + buf.data[offset] := x; r.offset := offset + 1; buf.chg := TRUE +END Write; + + +PROCEDURE WriteBytes ... + +PROCEDURE Read* (VAR r: Rider; VAR x: SYSTEM.BYTE); + VAR offset: LONGINT; buf: Buffer; +BEGIN + buf := r.buf; offset := r.offset; + IF (offset >= buf.size) OR (r.org # buf.org) THEN + IF r.org + offset >= buf.f.len THEN x := 0X; r.eof := TRUE; RETURN + ELSE Set(r, buf.f, r.org + offset); buf := r.buf; offset := r.offset + END + END ; + x := buf.data[offset]; r.offset := offset + 1 +END Read; + +but this would also affect Set, Length, and Flush. +Especially Length would become fairly complex. +*) + + PROCEDURE Delete* (name: ARRAY OF CHAR; VAR res: INTEGER); + BEGIN + res := SHORT(Unix.Unlink(name)); + res := SHORT(Unix.errno()) + END Delete; + + PROCEDURE Rename* (old, new: ARRAY OF CHAR; VAR res: INTEGER); + VAR fdold, fdnew, n, errno, r: LONGINT; + ostat, nstat: Unix.Status; + buf: ARRAY 4096 OF CHAR; + BEGIN + r := Unix.Stat(old, ostat); + IF r >= 0 THEN + r := Unix.Stat(new, nstat); + IF (r >= 0) & ((ostat.dev # nstat.dev) OR (ostat.ino # nstat.ino)) THEN + Delete(new, res); (* work around stale nfs handles *) + END ; + r := Unix.Rename(old, new); + IF r < 0 THEN res := SHORT(Unix.errno()); + IF res = Unix.EXDEV THEN (* cross device link, move the file *) + fdold := Unix.Open(old, Unix.rdonly, {}); + IF fdold < 0 THEN res := 2; RETURN END ; + fdnew := Unix.Open(new, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); + IF fdnew < 0 THEN r := Unix.Close(fdold); res := 3; RETURN END ; + n := Unix.Read(fdold, SYSTEM.ADR(buf), bufsize); + WHILE n > 0 DO + r := Unix.Write(fdnew, SYSTEM.ADR(buf), n); + IF r < 0 THEN errno := Unix.errno(); r := Unix.Close(fdold); r := Unix.Close(fdnew); + Err("cannot move file", NIL, errno) + END ; + n := Unix.Read(fdold, SYSTEM.ADR(buf), bufsize) + END ; + errno := Unix.errno(); + r := Unix.Close(fdold); r := Unix.Close(fdnew); + IF n = 0 THEN r := Unix.Unlink(old); res := 0 + ELSE Err("cannot move file", NIL, errno) + END ; + ELSE RETURN (* res is Unix.Rename return code *) + END + END ; + res := 0 + ELSE res := 2 (* old file not found *) + END + END Rename; + + PROCEDURE Register* (f: File); + VAR idx, errno: INTEGER; f1: File; file: ARRAY 104 OF CHAR; + BEGIN + IF (f.state = create) & (f.registerName # "") THEN f.state := close (* shortcut renaming *) END ; + Close(f); + IF f.registerName # "" THEN + Rename(f.workName, f.registerName, errno); + IF errno # 0 THEN COPY(f.registerName, file); HALT(99) END ; + f.workName := f.registerName; f.registerName := ""; f.tempFile := FALSE + END + END Register; + + PROCEDURE ChangeDirectory*(path: ARRAY OF CHAR; VAR res: INTEGER); + BEGIN + res := SHORT(Unix.Chdir(path)); + getcwd(Kernel.CWD) + END ChangeDirectory; + + PROCEDURE FlipBytes(VAR src, dest: ARRAY OF SYSTEM.BYTE); + VAR i, j: LONGINT; + BEGIN + IF ~Kernel.littleEndian THEN i := LEN(src); j := 0; + WHILE i > 0 DO DEC(i); dest[j] := src[i]; INC(j) END + ELSE SYSTEM.MOVE(SYSTEM.ADR(src), SYSTEM.ADR(dest), LEN(src)) + END + END FlipBytes; + + PROCEDURE ReadBool* (VAR R: Rider; VAR x: BOOLEAN); + BEGIN Read(R, SYSTEM.VAL(CHAR, x)) + END ReadBool; + +(* PROCEDURE ReadInt* (VAR R: Rider; VAR x: INTEGER); + VAR b: ARRAY 2 OF CHAR; + BEGIN ReadBytes(R, b, 2); + x := ORD(b[0]) + ORD(b[1])*256 + END ReadInt; + *) + + PROCEDURE ReadInt* (VAR R: Rider; VAR x: LONGINT); (* to compile OR compiler; -- noch *) + VAR b: ARRAY 4 OF CHAR; + BEGIN ReadBytes(R, b, 4); + x := ORD(b[0]) + ORD(b[1])*100H + ORD(b[2])*10000H + ORD(b[3])*1000000H + END ReadInt; + + PROCEDURE ReadLInt* (VAR R: Rider; VAR x: LONGINT); + VAR b: ARRAY 4 OF CHAR; + BEGIN ReadBytes(R, b, 4); + x := ORD(b[0]) + ORD(b[1])*100H + ORD(b[2])*10000H + ORD(b[3])*1000000H + END ReadLInt; + + PROCEDURE ReadSet* (VAR R: Rider; VAR x: SET); + VAR b: ARRAY 4 OF CHAR; + BEGIN ReadBytes(R, b, 4); + x := SYSTEM.VAL(SET, ORD(b[0]) + ORD(b[1])*100H + ORD(b[2])*10000H + ORD(b[3])*1000000H) + END ReadSet; + + PROCEDURE ReadReal* (VAR R: Rider; VAR x: REAL); + VAR b: ARRAY 4 OF CHAR; + BEGIN ReadBytes(R, b, 4); FlipBytes(b, x) + END ReadReal; + + PROCEDURE ReadLReal* (VAR R: Rider; VAR x: LONGREAL); + VAR b: ARRAY 8 OF CHAR; + BEGIN ReadBytes(R, b, 8); FlipBytes(b, x) + END ReadLReal; + + PROCEDURE ReadString* (VAR R: Rider; VAR x: ARRAY OF CHAR); + VAR i: INTEGER; ch: CHAR; + BEGIN i := 0; + REPEAT Read(R, ch); x[i] := ch; INC(i) UNTIL ch = 0X + END ReadString; + + (* need to read line; -- noch *) + PROCEDURE ReadLine* (VAR R: Rider; VAR x: ARRAY OF CHAR); + VAR i: INTEGER; ch: CHAR; b : BOOLEAN; + BEGIN i := 0; + b := FALSE; + REPEAT + Read(R, ch); + IF ((ch = 0X) OR (ch = 0AX) OR (ch = 0DX)) THEN + b := TRUE + ELSE + x[i] := ch; + INC(i); + END; + UNTIL b + END ReadLine; + + PROCEDURE ReadNum* (VAR R: Rider; VAR x: LONGINT); + VAR s: SHORTINT; ch: CHAR; n: LONGINT; + BEGIN s := 0; n := 0; Read(R, ch); + WHILE ORD(ch) >= 128 DO INC(n, ASH(ORD(ch) - 128, s) ); INC(s, 7); Read(R, ch) END; + INC(n, ASH(ORD(ch) MOD 64 - ORD(ch) DIV 64 * 64, s) ); + x := n + END ReadNum; + + PROCEDURE WriteBool* (VAR R: Rider; x: BOOLEAN); + BEGIN Write(R, SYSTEM.VAL(CHAR, x)) + END WriteBool; + +(* PROCEDURE WriteInt* (VAR R: Rider; x: INTEGER); + VAR b: ARRAY 2 OF CHAR; + BEGIN b[0] := CHR(x); b[1] := CHR(x DIV 256); + WriteBytes(R, b, 2); + END WriteInt; + *) + PROCEDURE WriteInt* (VAR R: Rider; x: LONGINT); (* to compile OR compiler; -- noch *) + VAR b: ARRAY 4 OF CHAR; + BEGIN + b[0] := CHR(x); b[1] := CHR(x DIV 100H); b[2] := CHR(x DIV 10000H); b[3] := CHR(x DIV 1000000H); + WriteBytes(R, b, 4); + END WriteInt; + + PROCEDURE WriteLInt* (VAR R: Rider; x: LONGINT); + VAR b: ARRAY 4 OF CHAR; + BEGIN + b[0] := CHR(x); b[1] := CHR(x DIV 100H); b[2] := CHR(x DIV 10000H); b[3] := CHR(x DIV 1000000H); + WriteBytes(R, b, 4); + END WriteLInt; + + PROCEDURE WriteSet* (VAR R: Rider; x: SET); + VAR b: ARRAY 4 OF CHAR; i: LONGINT; + BEGIN i := SYSTEM.VAL(LONGINT, x); + b[0] := CHR(i); b[1] := CHR(i DIV 100H); b[2] := CHR(i DIV 10000H); b[3] := CHR(i DIV 1000000H); + WriteBytes(R, b, 4); + END WriteSet; + + PROCEDURE WriteReal* (VAR R: Rider; x: REAL); + VAR b: ARRAY 4 OF CHAR; + BEGIN FlipBytes(x, b); WriteBytes(R, b, 4) + END WriteReal; + + PROCEDURE WriteLReal* (VAR R: Rider; x: LONGREAL); + VAR b: ARRAY 8 OF CHAR; + BEGIN FlipBytes(x, b); WriteBytes(R, b, 8) + END WriteLReal; + + PROCEDURE WriteString* (VAR R: Rider; x: ARRAY [1] OF CHAR); + VAR i: INTEGER; + BEGIN i := 0; + WHILE x[i] # 0X DO INC(i) END ; + WriteBytes(R, x, i+1) + END WriteString; + + PROCEDURE WriteNum* (VAR R: Rider; x: LONGINT); + BEGIN + WHILE (x < - 64) OR (x > 63) DO Write(R, CHR(x MOD 128 + 128)); x := x DIV 128 END; + Write(R, CHR(x MOD 128)) + END WriteNum; + + PROCEDURE GetName*(f: File; VAR name: ARRAY OF CHAR); + BEGIN + COPY (f.workName, name); + END GetName; + + PROCEDURE Finalize(o: SYSTEM.PTR); + VAR f: File; res: LONGINT; + BEGIN + f := SYSTEM.VAL(File, o); + IF f.fd >= 0 THEN + fileTab[f.fd] := 0; res := Unix.Close(f.fd); f.fd := -1; DEC(Kernel.nofiles); + IF f.tempFile THEN res := Unix.Unlink(f.workName) END + END + END Finalize; + + PROCEDURE Init; + VAR i: LONGINT; + BEGIN + i := 0; WHILE i < fileTabSize DO fileTab[i] := 0; INC(i) END ; + tempno := -1; Kernel.nofiles := 0 + END Init; + +BEGIN Init +END CompatFiles. diff --git a/src/voc07R/CompatTexts.Mod b/src/voc07R/CompatTexts.Mod new file mode 100644 index 00000000..f94b3151 --- /dev/null +++ b/src/voc07R/CompatTexts.Mod @@ -0,0 +1,581 @@ +MODULE CompatTexts; (*JG 21.11.90 / NW 11.7.90 / 24.12.95 / 22.11.10 / 26.3.2014*) + IMPORT Files := CompatFiles, Fonts; + + TYPE INTEGER = LONGINT; (* voc adaptation by noch *) + BYTE = CHAR; + + CONST (*scanner symbol classes*) + Inval* = 0; (*invalid symbol*) + Name* = 1; (*name s (length len)*) + String* = 2; (*literal string s (length len)*) + Int* = 3; (*integer i (decimal or hexadecimal)*) + Real* = 4; (*real number x*) + Char* = 6; (*special character c*) + + (* TextBlock = TextTag "1" offset run {run} "0" len {AsciiCode}. + run = fnt [name] col voff len. *) + + TAB = 9X; CR = 0DX; maxD = 9; + TextTag = 0F1X; + replace* = 0; insert* = 1; delete* = 2; unmark* = 3; (*op-codes*) + + TYPE Piece = POINTER TO PieceDesc; + PieceDesc = RECORD + f: Files.File; + off, len: LONGINT; + fnt: Fonts.Font; + col, voff: INTEGER; + prev, next: Piece + END; + + Text* = POINTER TO TextDesc; + Notifier* = PROCEDURE (T: Text; op: INTEGER; beg, end: LONGINT); + TextDesc* = RECORD + len*: LONGINT; + changed*: BOOLEAN; + notify*: Notifier; + trailer: Piece; + pce: Piece; (*cache*) + org: LONGINT; (*cache*) + END; + + Reader* = RECORD + eot*: BOOLEAN; + fnt*: Fonts.Font; + col*, voff*: INTEGER; + ref: Piece; + org: LONGINT; + off: LONGINT; + rider: Files.Rider + END; + + Scanner* = RECORD (Reader) + nextCh*: CHAR; + line*, class*: INTEGER; + i*: LONGINT; + x*: REAL; + y*: LONGREAL; + c*: CHAR; + len*: INTEGER; + s*: ARRAY 32 OF CHAR + END; + + Buffer* = POINTER TO BufDesc; + BufDesc* = RECORD + len*: LONGINT; + header, last: Piece + END; + + Writer* = RECORD + buf*: Buffer; + fnt*: Fonts.Font; + col*, voff*: INTEGER; + rider: Files.Rider + END; + + VAR TrailerFile: Files.File; + + (* voc adaptation by noch *) + PROCEDURE FLOOR(x : REAL): INTEGER; + BEGIN + RETURN ENTIER(x) + END FLOOR; + + PROCEDURE LSL (x, n : INTEGER): INTEGER; + BEGIN + RETURN ASH(x, n); + END LSL; + + PROCEDURE ASR (x, n : INTEGER): INTEGER; + BEGIN + RETURN ASH(x, n); + END ASR; + + + (* -------------------- Filing ------------------------*) + + PROCEDURE Trailer(): Piece; + VAR Q: Piece; + BEGIN NEW(Q); + Q.f := TrailerFile; Q.off := -1; Q.len := 1; Q.fnt := NIL; Q.col := 0; Q.voff := 0; RETURN Q + END Trailer; + + PROCEDURE Load* (VAR R: Files.Rider; T: Text); + VAR Q, q, p: Piece; + off: LONGINT; + N, fno: INTEGER; bt: BYTE; + f: Files.File; + FName: ARRAY 32 OF CHAR; + Dict: ARRAY 32 OF Fonts.Font; + BEGIN f := Files.Base(R); N := 1; Q := Trailer(); p := Q; + Files.ReadInt(R, off); Files.ReadByte(R, bt); + (*fno := bt;*) + fno := ORD(bt); (* voc adaptation by noch *) + WHILE fno # 0 DO + IF fno = N THEN + Files.ReadString(R, FName); + Dict[N] := Fonts.This(FName); INC(N) + END; + NEW(q); q.fnt := Dict[fno]; + Files.ReadByte(R, bt); + (*q.col := bt;*) + q.col := ORD(bt); (* voc adaptation by noch *) + Files.ReadByte(R, bt); + (*q.voff := ASR(LSL(bt, -24), 24);*) + q.voff := ASR(LSL(ORD(bt), -24), 24); (* voc adaptation by noch *) + Files.ReadInt(R, q.len); + Files.ReadByte(R, bt); + (*fno := bt;*) + fno := ORD(bt); (* voc adaptation by noch *) + q.f := f; q.off := off; off := off + q.len; + p.next := q; q.prev := p; p := q + END; + p.next := Q; Q.prev := p; + T.trailer := Q; Files.ReadInt(R, T.len); (*Files.Set(R, f, Files.Pos(R) + T.len)*) + END Load; + + PROCEDURE Open* (T: Text; name: ARRAY OF CHAR); + VAR f: Files.File; R: Files.Rider; Q, q: Piece; + tag: CHAR; len: LONGINT; + BEGIN f := Files.Old(name); + IF f # NIL THEN + Files.Set(R, f, 0); Files.Read(R, tag); + IF tag = TextTag THEN Load(R, T) + ELSE (*Ascii file*) + len := Files.Length(f); Q := Trailer(); + NEW(q); q.fnt := Fonts.Default; q.col := 1; q.voff := 0; q.f := f; q.off := 0; q.len := len; + Q.next := q; q.prev := Q; q.next := Q; Q.prev := q; T.trailer := Q; T.len := len + END + ELSE (*create new text*) + Q := Trailer(); Q.next := Q; Q.prev := Q; T.trailer := Q; T.len := 0 + END ; + T.changed := FALSE; T.org := -1; T.pce := T.trailer (*init cache*) + END Open; + + PROCEDURE Store* (VAR W: Files.Rider; T: Text); + VAR p, q: Piece; + R: Files.Rider; + off, rlen, pos: LONGINT; + N, n: INTEGER; + ch: CHAR; + Dict: ARRAY 32, 32 OF CHAR; + BEGIN pos := Files.Pos(W); Files.WriteInt(W, 0); (*place holder*) + N := 1; p := T.trailer.next; + WHILE p # T.trailer DO + rlen := p.len; q := p.next; + WHILE (q # T.trailer) & (q.fnt = p.fnt) & (q.col = p.col) & (q.voff = p.voff) DO + rlen := rlen + q.len; q := q.next + END; + (*Dict[N] := p.fnt.name;*) + COPY(p.fnt.name, Dict[N]); (* voc adaptation by noch *) + n := 1; + WHILE Dict[n] # p.fnt.name DO INC(n) END; + (*Files.WriteByte(W, n);*) + Files.WriteByte(W, SHORT(SHORT(n))); (* voc adaptation by noch *) + IF n = N THEN Files.WriteString(W, p.fnt.name); INC(N) END; + (*Files.WriteByte(W, p.col);*) + Files.WriteByte(W, SHORT(SHORT(p.col))); (* voc adaptation by noch *) + (*Files.WriteByte(W, p.voff);*) + Files.WriteByte(W, SHORT(SHORT(p.voff))); (* voc adaptation by noch *) + Files.WriteInt(W, rlen); + p := q + END; + Files.WriteByte(W, 0); Files.WriteInt(W, T.len); + off := Files.Pos(W); p := T.trailer.next; + WHILE p # T.trailer DO + rlen := p.len; Files.Set(R, p.f, p.off); + WHILE rlen > 0 DO Files.Read(R, ch); Files.Write(W, ch); DEC(rlen) END ; + p := p.next + END ; + Files.Set(W, Files.Base(W), pos); Files.WriteInt(W, off); (*fixup*) + T.changed := FALSE; + IF T.notify # NIL THEN T.notify(T, unmark, 0, 0) END + END Store; + + PROCEDURE Close*(T: Text; name: ARRAY OF CHAR); + VAR f: Files.File; w: Files.Rider; + BEGIN f := Files.New(name); Files.Set(w, f, 0); + Files.Write(w, TextTag); Store(w, T); Files.Register(f) + END Close; + + (* -------------------- Editing ----------------------- *) + + PROCEDURE OpenBuf* (B: Buffer); + BEGIN NEW(B.header); (*null piece*) + B.last := B.header; B.len := 0 + END OpenBuf; + + PROCEDURE FindPiece (T: Text; pos: LONGINT; VAR org: LONGINT; VAR pce: Piece); + VAR p: Piece; porg: LONGINT; + BEGIN p := T.pce; porg := T.org; + IF pos >= porg THEN + WHILE pos >= porg + p.len DO INC(porg, p.len); p := p.next END + ELSE p := p.prev; DEC(porg, p.len); + WHILE pos < porg DO p := p.prev; DEC(porg, p.len) END + END ; + T.pce := p; T.org := porg; (*update cache*) + pce := p; org := porg + END FindPiece; + + PROCEDURE SplitPiece (p: Piece; off: LONGINT; VAR pr: Piece); + VAR q: Piece; + BEGIN + IF off > 0 THEN NEW(q); + q.fnt := p.fnt; q.col := p.col; q.voff := p.voff; + q.len := p.len - off; + q.f := p.f; q.off := p.off + off; + p.len := off; + q.next := p.next; p.next := q; + q.prev := p; q.next.prev := q; + pr := q + ELSE pr := p + END + END SplitPiece; + + PROCEDURE Save* (T: Text; beg, end: LONGINT; B: Buffer); + VAR p, q, qb, qe: Piece; org: LONGINT; + BEGIN + IF end > T.len THEN end := T.len END; + FindPiece(T, beg, org, p); + NEW(qb); qb^ := p^; + qb.len := qb.len - (beg - org); + qb.off := qb.off + (beg - org); + qe := qb; + WHILE end > org + p.len DO + org := org + p.len; p := p.next; + NEW(q); q^ := p^; qe.next := q; q.prev := qe; qe := q + END; + qe.next := NIL; qe.len := qe.len - (org + p.len - end); + B.last.next := qb; qb.prev := B.last; B.last := qe; + B.len := B.len + (end - beg) + END Save; + + PROCEDURE Copy* (SB, DB: Buffer); + VAR Q, q, p: Piece; + BEGIN p := SB.header; Q := DB.last; + WHILE p # SB.last DO p := p.next; + NEW(q); q^ := p^; Q.next := q; q.prev := Q; Q := q + END; + DB.last := Q; DB.len := DB.len + SB.len + END Copy; + + PROCEDURE Insert* (T: Text; pos: LONGINT; B: Buffer); + VAR pl, pr, p, qb, qe: Piece; org, end: LONGINT; + BEGIN + FindPiece(T, pos, org, p); SplitPiece(p, pos - org, pr); + IF T.org >= org THEN T.org := org - p.prev.len; T.pce := p.prev END ; + pl := pr.prev; qb := B.header.next; + IF (qb # NIL) & (qb.f = pl.f) & (qb.off = pl.off + pl.len) + & (qb.fnt = pl.fnt) & (qb.col = pl.col) & (qb.voff = pl.voff) THEN + pl.len := pl.len + qb.len; qb := qb.next + END; + IF qb # NIL THEN qe := B.last; + qb.prev := pl; pl.next := qb; qe.next := pr; pr.prev := qe + END; + T.len := T.len + B.len; end := pos + B.len; + B.last := B.header; B.last.next := NIL; B.len := 0; + T.changed := TRUE; + (*T.notify(T, insert, pos, end)*) + IF T.notify # NIL THEN + T.notify(T, insert, pos, end) + END(* voc adaptation by noch *) + END Insert; + + PROCEDURE Append* (T: Text; B: Buffer); + BEGIN Insert(T, T.len, B) + END Append; + + PROCEDURE Delete* (T: Text; beg, end: LONGINT; B: Buffer); + VAR pb, pe, pbr, per: Piece; orgb, orge: LONGINT; + BEGIN + IF end > T.len THEN end := T.len END; + FindPiece(T, beg, orgb, pb); SplitPiece(pb, beg - orgb, pbr); + FindPiece(T, end, orge, pe); + SplitPiece(pe, end - orge, per); + IF T.org >= orgb THEN (*adjust cache*) + T.org := orgb - pb.prev.len; T.pce := pb.prev + END; + B.header.next := pbr; B.last := per.prev; + B.last.next := NIL; B.len := end - beg; + per.prev := pbr.prev; pbr.prev.next := per; + T.len := T.len - B.len; + T.changed := TRUE; + IF T.notify # NIL THEN (* noch *) + T.notify(T, delete, beg, end) + END + END Delete; + + PROCEDURE ChangeLooks* (T: Text; beg, end: LONGINT; sel: SET; fnt: Fonts.Font; col, voff: INTEGER); + VAR pb, pe, p: Piece; org: LONGINT; + BEGIN + IF end > T.len THEN end := T.len END; + FindPiece(T, beg, org, p); SplitPiece(p, beg - org, pb); + FindPiece(T, end, org, p); SplitPiece(p, end - org, pe); + p := pb; + REPEAT + IF 0 IN sel THEN p.fnt := fnt END; + IF 1 IN sel THEN p.col := col END; + IF 2 IN sel THEN p.voff := voff END; + p := p.next + UNTIL p = pe; + T.changed := TRUE; + IF T.notify # NIL THEN (* noch *) + T.notify(T, replace, beg, end) + END + END ChangeLooks; + + PROCEDURE Attributes*(T: Text; pos: LONGINT; VAR fnt: Fonts.Font; VAR col, voff: INTEGER); + VAR p: Piece; org: LONGINT; + BEGIN FindPiece(T, pos, org, p); fnt := p.fnt; col := p.col; voff := p.voff + END Attributes; + + (* ------------------ Access: Readers ------------------------- *) + + PROCEDURE OpenReader* (VAR R: Reader; T: Text; pos: LONGINT); + VAR p: Piece; org: LONGINT; + BEGIN FindPiece(T, pos, org, p); + R.ref := p; R.org := org; R.off := pos - org; + Files.Set(R.rider, p.f, p.off + R.off); R.eot := FALSE + END OpenReader; + + PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR); + BEGIN Files.Read(R.rider, ch); + R.fnt := R.ref.fnt; R.col := R.ref.col; R.voff := R.ref.voff; + INC(R.off); + IF R.off = R.ref.len THEN + IF R.ref.f = TrailerFile THEN R.eot := TRUE END; + R.org := R.org + R.off; R.off := 0; + R.ref := R.ref.next; R.org := R.org + R.off; R.off := 0; + Files.Set(R.rider, R.ref.f, R.ref.off) + END + END Read; + + PROCEDURE Pos* (VAR R: Reader): LONGINT; + BEGIN RETURN R.org + R.off + END Pos; + + (* ------------------ Access: Scanners (NW) ------------------------- *) + + PROCEDURE OpenScanner* (VAR S: Scanner; T: Text; pos: LONGINT); + BEGIN OpenReader(S, T, pos); S.line := 0; S.nextCh := " " + END OpenScanner; + + (*floating point formats: + x = 1.m * 2^(e-127) bit 0: sign, bits 1- 8: e, bits 9-31: m + x = 1.m * 2^(e-1023) bit 0: sign, bits 1-11: e, bits 12-63: m *) + + PROCEDURE Ten(n: INTEGER): REAL; + VAR t, p: REAL; + BEGIN t := 1.0; p := 10.0; (*compute 10^n *) + WHILE n > 0 DO + IF ODD(n) THEN t := p * t END ; + p := p*p; n := n DIV 2 + END ; + RETURN t + END Ten; + + PROCEDURE Scan* (VAR S: Scanner); + CONST maxExp = 38; maxM = 16777216; (*2^24*) + VAR ch, term: CHAR; + neg, negE, hex: BOOLEAN; + i, j, h, d, e, n, s: INTEGER; + k: LONGINT; + x: REAL; + BEGIN ch := S.nextCh; i := 0; + WHILE (ch = " ") OR (ch = TAB) OR (ch = CR) DO + IF ch = CR THEN INC(S.line) END ; + Read(S, ch) + END ; + IF ("A" <= ch) & (ch <= "Z") OR ("a" <= ch) & (ch <= "z") THEN (*name*) + REPEAT S.s[i] := ch; INC(i); Read(S, ch) + UNTIL ((ch < "0") & (ch # ".") OR ("9" < ch) & (ch < "A") OR ("Z" < ch) & (ch < "a") OR ("z" < ch)) OR (i = 31); + S.s[i] := 0X; S.len := i; S.class := Name + ELSIF ch = 22X THEN (*string*) + Read(S, ch); + WHILE (ch # 22X) & (ch >= " ") & (i # 31) DO S.s[i] := ch; INC(i); Read(S, ch) END; + S.s[i] := 0X; S.len := i+1; Read(S, ch); S.class := String + ELSE hex := FALSE; + IF ch = "-" THEN neg := TRUE; Read(S, ch) ELSE neg := FALSE END ; + IF ("0" <= ch) & (ch <= "9") THEN (*number*) + n := ORD(ch) - 30H; h := n; Read(S, ch); + WHILE ("0" <= ch) & (ch <= "9") OR ("A" <= ch) & (ch <= "F") DO + IF ch <= "9" THEN d := ORD(ch) - 30H ELSE d := ORD(ch) - 37H; hex := TRUE END ; + n := 10*n + d; h := 10H*h + d; Read(S, ch) + END ; + IF ch = "H" THEN (*hex integer*) Read(S, ch); S.i := h; S.class := Int (*neg?*) + ELSIF ch = "." THEN (*real number*) + Read(S, ch); x := 0.0; e := 0; j := 0; + WHILE ("0" <= ch) & (ch <= "9") DO (*fraction*) + h := 10*n + (ORD(ch) - 30H); + IF h < maxM THEN n := h; INC(j) END ; + Read(S, ch) + END ; + IF ch = "E" THEN (*scale factor*) + s := 0; Read(S, ch); + IF ch = "-" THEN negE := TRUE; Read(S, ch) + ELSE negE := FALSE; + IF ch = "+" THEN Read(S, ch) END + END ; + WHILE ("0" <= ch) & (ch <= "9") DO + s := s*10 + ORD(ch) - 30H; Read(S, ch) + END ; + IF negE THEN DEC(e, s) ELSE INC(e, s) END ; + END ; + (*x := FLT(n);*) + x := n; (* voc adaptation by noch *) + DEC(e, j); + IF e < 0 THEN + IF e >= -maxExp THEN x := x / Ten(-e) ELSE x := 0.0 END + ELSIF e > 0 THEN + IF e <= maxExp THEN x := Ten(e) * x ELSE x := 0.0 END + END ; + IF neg THEN S.x := -x ELSE S.x := x END ; + IF hex THEN S.class := 0 ELSE S.class := Real END + ELSE (*decimal integer*) + IF neg THEN S.i := -n ELSE S.i := n END; + IF hex THEN S.class := Inval ELSE S.class := Int END + END + ELSE (*spectal character*) S.class := Char; + IF neg THEN S.c := "-" ELSE S.c := ch; Read(S, ch) END + END + END ; + S.nextCh := ch + END Scan; + + (* --------------- Access: Writers (NW) ------------------ *) + + PROCEDURE OpenWriter* (VAR W: Writer); + BEGIN NEW(W.buf); + OpenBuf(W.buf); W.fnt := Fonts.Default; W.col := 15; W.voff := 0; + Files.Set(W.rider, Files.New(""), 0) + END OpenWriter; + + PROCEDURE SetFont* (VAR W: Writer; fnt: Fonts.Font); + BEGIN W.fnt := fnt + END SetFont; + + PROCEDURE SetColor* (VAR W: Writer; col: INTEGER); + BEGIN W.col := col + END SetColor; + + PROCEDURE SetOffset* (VAR W: Writer; voff: INTEGER); + BEGIN W.voff := voff + END SetOffset; + + PROCEDURE Write* (VAR W: Writer; ch: CHAR); + VAR p: Piece; + BEGIN + IF (W.buf.last.fnt # W.fnt) OR (W.buf.last.col # W.col) OR (W.buf.last.voff # W.voff) THEN + NEW(p); p.f := Files.Base(W.rider); p.off := Files.Pos(W.rider); p.len := 0; + p.fnt := W.fnt; p.col := W.col; p.voff:= W.voff; + p.next := NIL; W.buf.last.next := p; + p.prev := W.buf.last; W.buf.last := p + END; + Files.Write(W.rider, ch); + INC(W.buf.last.len); INC(W.buf.len) + END Write; + + PROCEDURE WriteLn* (VAR W: Writer); + BEGIN Write(W, CR) + END WriteLn; + + PROCEDURE WriteString* (VAR W: Writer; s: ARRAY OF CHAR); + VAR i: INTEGER; + BEGIN i := 0; + WHILE s[i] >= " " DO Write(W, s[i]); INC(i) END + END WriteString; + + PROCEDURE WriteInt* (VAR W: Writer; x, n: LONGINT); + VAR i: INTEGER; x0: LONGINT; + a: ARRAY 10 OF CHAR; + BEGIN + (*IF ROR(x, 31) = 1 THEN WriteString(W, " -2147483648") + ELSE*) i := 0; (* voc adaptation by noch *) + IF x < 0 THEN DEC(n); x0 := -x ELSE x0 := x END; + REPEAT + a[i] := CHR(x0 MOD 10 + 30H); x0 := x0 DIV 10; INC(i) + UNTIL x0 = 0; + WHILE n > i DO Write(W, " "); DEC(n) END; + IF x < 0 THEN Write(W, "-") END; + REPEAT DEC(i); Write(W, a[i]) UNTIL i = 0 + (*END*) + END WriteInt; + + PROCEDURE WriteHex* (VAR W: Writer; x: LONGINT); + VAR i: INTEGER; y: LONGINT; + a: ARRAY 10 OF CHAR; + BEGIN i := 0; Write(W, " "); + REPEAT y := x MOD 10H; + IF y < 10 THEN a[i] := CHR(y + 30H) ELSE a[i] := CHR(y + 37H) END; + x := x DIV 10H; INC(i) + UNTIL i = 8; + REPEAT DEC(i); Write(W, a[i]) UNTIL i = 0 + END WriteHex; +(* commented out because it's not necessary to compile OR compiler; -- noch + PROCEDURE WriteReal* (VAR W: Writer; x: REAL; n: INTEGER); + VAR e, i, m: INTEGER; x0: REAL; neg: BOOLEAN; + d: ARRAY 16 OF CHAR; + BEGIN + IF x = 0.0 THEN + WriteString(W, " 0.0"); i := 5; + WHILE i < n DO Write(W, " "); INC(i) END + ELSE + IF x < 0.0 THEN x := -x; neg := TRUE ELSE neg := FALSE END ; + x0 := x; UNPK(x0, e); + IF e = 255 THEN WriteString(W, " NaN") + ELSE + REPEAT Write(W, " "); DEC(n) UNTIL n <= 14; + IF neg THEN Write(W, "-") ELSE Write(W, " ") END ; + e := e * 77 DIV 256 - 6; + IF e >= 0 THEN x := x / Ten(e) ELSE x := x * Ten(-e) END ; + IF x >= 10.0E6 THEN x := 0.1*x; INC(e) END ; + m := FLOOR(x + 0.5); i := 0; + IF x >= 10.0E6 THEN x := 0.1*x; INC(e) END ; + REPEAT d[i] := CHR(m MOD 10 + 30H); m := m DIV 10; INC(i) UNTIL m = 0; + DEC(i); Write(W, d[i]); Write(W, "."); + IF i < n-6 THEN n := 0 ELSE n := 13-n END ; + WHILE i > n DO DEC(i); Write(W, d[i]) END ; + Write(W, "E"); INC(e, 6); + IF e < 0 THEN Write(W, "-"); e := -e ELSE Write(W, "+") END ; + Write(W, CHR(e DIV 10 + 30H)); Write(W, CHR(e MOD 10 + 30H)) + END + END + END WriteReal; + *) + PROCEDURE WriteRealFix* (VAR W: Writer; x: REAL; n, k: INTEGER); + VAR i, m: INTEGER; neg: BOOLEAN; + d: ARRAY 12 OF CHAR; + BEGIN + IF x = 0.0 THEN WriteString(W, " 0") + ELSE + IF x < 0.0 THEN x := -x; neg := TRUE ELSE neg := FALSE END ; + IF k > 7 THEN k := 7 END ; + x := Ten(k) * x; m := FLOOR(x + 0.5); + i := 0; + REPEAT d[i] := CHR(m MOD 10 + 30H); m := m DIV 10; INC(i) UNTIL m = 0; + REPEAT Write(W, " "); DEC(n) UNTIL n <= i+3; + IF neg THEN Write(W, "-"); DEC(n) ELSE Write(W, " ") END ; + WHILE i > k DO DEC(i); Write(W, d[i]) END ; + Write(W, "."); + WHILE k > i DO DEC(k); Write(W, "0") END ; + WHILE i > 0 DO DEC(i); Write(W, d[i]) END + END + END WriteRealFix; + + PROCEDURE WritePair(VAR W: Writer; ch: CHAR; x: LONGINT); + BEGIN Write(W, ch); + Write(W, CHR(x DIV 10 + 30H)); Write(W, CHR(x MOD 10 + 30H)) + END WritePair; + + PROCEDURE WriteClock* (VAR W: Writer; d: LONGINT); + BEGIN + WritePair(W, " ", d DIV 20000H MOD 20H); (*day*) + WritePair(W, ".", d DIV 400000H MOD 10H); (*month*) + WritePair(W, ".", d DIV 4000000H MOD 40H); (*year*) + WritePair(W, " ", d DIV 1000H MOD 20H); (*hour*) + WritePair(W, ":", d DIV 40H MOD 40H); (*min*) + WritePair(W, ":", d MOD 40H) (*sec*) + END WriteClock; + +BEGIN TrailerFile := Files.New("") +END CompatTexts. diff --git a/src/voc07R/Fonts.Mod b/src/voc07R/Fonts.Mod new file mode 100644 index 00000000..1798cfb6 --- /dev/null +++ b/src/voc07R/Fonts.Mod @@ -0,0 +1,146 @@ +MODULE Fonts; (*JG 18.11.90; PDR 8.6.12; NW 25.3.2013*) + IMPORT SYSTEM, Files := CompatFiles; + + TYPE INTEGER = LONGINT; (* voc adaptation by noch *) + BYTE = CHAR; + + CONST FontFileId = 0DBH; + + TYPE Font* = POINTER TO FontDesc; + FontDesc* = RECORD + name*: ARRAY 32 OF CHAR; + height*, minX*, maxX*, minY*, maxY*: INTEGER; + next*: Font; + T: ARRAY 128 OF INTEGER; + raster: ARRAY 2360 OF BYTE + END ; + + LargeFontDesc = RECORD (FontDesc) ext: ARRAY 2560 OF BYTE END ; + LargeFont = POINTER TO LargeFontDesc; + + (* raster sizes: Syntax8 1367, Syntax10 1628, Syntax12 1688, Syntax14 1843, Syntax14b 1983, + Syntax16 2271, Syntax20 3034, Syntac24 4274, Syntax24b 4302 *) + +VAR Default*, root*: Font; + +PROCEDURE GetPat*(fnt: Font; ch: CHAR; VAR dx, x, y, w, h, patadr: INTEGER); + VAR pa: INTEGER; dxb, xb, yb, wb, hb: BYTE; +BEGIN pa := fnt.T[ORD(ch) MOD 80H]; patadr := pa; + SYSTEM.GET(pa-3, dxb); SYSTEM.GET(pa-2, xb); SYSTEM.GET(pa-1, yb); SYSTEM.GET(pa, wb); SYSTEM.GET(pa+1, hb); + (*dx := dxb;*) + dx := ORD(dxb); (* voc adaptation by noch *) + (*x := xb;*) + x := ORD(xb); (* voc adaptation by noch *) + (*y := yb;*) + y := ORD(yb); (* voc adaptation by noch *) + (*w := wb;*) + w := ORD(wb); (* voc adaptation by noch *) + (*h := hb;*) + h := ORD(hb); (* voc adaptation by noch *) + (*IF yb < 128 THEN y := yb ELSE y := yb - 256 END*) + IF ORD(yb) < 128 THEN y := ORD(yb) ELSE y := ORD(yb) - 256 END (* voc adaptation by noch *) +END GetPat; + +PROCEDURE This*(name: ARRAY OF CHAR): Font; + + TYPE RunRec = RECORD beg, end: BYTE END ; + BoxRec = RECORD dx, x, y, w, h: BYTE END ; + + VAR F: Font; LF: LargeFont; + f: Files.File; R: Files.Rider; + NofRuns, NofBoxes: BYTE; + NofBytes: INTEGER; + height, minX, maxX, minY, maxY: BYTE; + i, j, k, m, n: INTEGER; + a, a0: INTEGER; + b, beg, end: BYTE; + run: ARRAY 16 OF RunRec; + box: ARRAY 512 OF BoxRec; + + PROCEDURE RdInt16(VAR R: Files.Rider; VAR b0: BYTE); + VAR b1: BYTE; + BEGIN Files.ReadByte(R, b0); Files.ReadByte(R, b1) + END RdInt16; + +BEGIN F := root; + WHILE (F # NIL) & (name # F.name) DO F := F.next END; + IF F = NIL THEN + f := Files.Old(name); + IF f # NIL THEN + Files.Set(R, f, 0); Files.ReadByte(R, b); + (*IF b = FontFileId THEN*) + IF ORD(b) = FontFileId THEN (* voc adaptation by noch *) + Files.ReadByte(R, b); (*abstraction*) + Files.ReadByte(R, b); (*family*) + Files.ReadByte(R, b); (*variant*) + NEW(F); + (*F.name := name;*) + COPY(name, F.name); (* voc adaptation by noch *) + RdInt16(R, height); RdInt16(R, minX); RdInt16(R, maxX); RdInt16(R, minY); RdInt16(R, maxY); RdInt16(R, NofRuns); + (*NofBoxes := 0;*) (* voc adaptation by noch *) + NofBoxes := 0X; + k := 0; + (*WHILE k # NofRuns DO*) + WHILE k # ORD(NofRuns) DO (* voc adaptation by noch *) + RdInt16(R, beg); + run[k].beg := beg; RdInt16(R, end); + run[k].end := end; + (*NofBoxes := NofBoxes + end - beg;*) + NofBoxes := CHR(ORD(NofBoxes) + ORD(end) - ORD(beg)); (* voc adaptation by noch *) + INC(k) + END; + NofBytes := 5; j := 0; + (*WHILE j # NofBoxes DO*) + WHILE j # ORD(NofBoxes) DO (* voc adaptation by noch *) + RdInt16(R, box[j].dx); RdInt16(R, box[j].x); RdInt16(R, box[j].y); + RdInt16(R, box[j].w); RdInt16(R, box[j].h); + (*NofBytes := NofBytes + 5 + (box[j].w + 7) DIV 8 * box[j].h;*) + NofBytes := (NofBytes + 5 + (ORD(box[j].w) + 7) DIV 8 * ORD(box[j].h)); (* voc adaptation by noch *) + INC(j) + END; + IF NofBytes < 2300 THEN NEW(F) ELSE NEW(LF); F := LF END ; + (*F.name := name;*) + COPY(name, F.name); (* voc adaptation by noch *) + (*F.height := height; F.minX := minX; F.maxX := maxX; F.maxY := maxY;*) + F.height := ORD(height); F.minX := ORD(minX); F.maxX := ORD(maxX); F.maxY := ORD(maxY); (* voc adaptation by noch *) + (*IF minY >= 80H THEN F.minY := minY - 100H ELSE F.minY := minY END ;*) + IF ORD(minY) >= 80H THEN F.minY := ORD(minY) - 100H ELSE F.minY := ORD(minY) END ; (* voc adaptation by noch *) + a0 := SYSTEM.ADR(F.raster); + SYSTEM.PUT(a0, 0X); SYSTEM.PUT(a0+1, 0X); SYSTEM.PUT(a0+2, 0X); SYSTEM.PUT(a0+3, 0X); SYSTEM.PUT(a0+4, 0X); + (*null pattern for characters not in a run*) + INC(a0, 2); a := a0+3; j := 0; k := 0; m := 0; + (*WHILE k < NofRuns DO*) + WHILE k < ORD(NofRuns) DO + (*WHILE (m < run[k].beg) & (m < 128) DO F.T[m] := a0; INC(m) END;*) + WHILE (m < ORD(run[k].beg)) & (m < 128) DO F.T[m] := a0; INC(m) END; (* voc adaptation by noch *) + (*WHILE (m < run[k].end) & (m < 128) DO*) (* voc adaptation by noch *) + WHILE (m < ORD(run[k].end)) & (m < 128) DO + F.T[m] := a+3; + SYSTEM.PUT(a, box[j].dx); SYSTEM.PUT(a+1, box[j].x); SYSTEM.PUT(a+2, box[j].y); + SYSTEM.PUT(a+3, box[j].w); SYSTEM.PUT(a+4, box[j].h); INC(a, 5); + (*n := (box[j].w + 7) DIV 8 * box[j].h;*) + n := (ORD(box[j].w) + 7) DIV 8 * ORD(box[j].h); (* voc adaptation by noch *) + WHILE n # 0 DO DEC(n); Files.ReadByte(R, b); SYSTEM.PUT(a, b); INC(a) END ; + INC(j); INC(m) + END; + INC(k) + END; + WHILE m < 128 DO F.T[m] := a0; INC(m) END ; + F.next := root; root := F + ELSE (*bad file id*) F := Default + END + ELSE (*font file not available*) F := Default + END + END; + RETURN F +END This; + +PROCEDURE Free*; (*remove all but first two from font list*) + VAR f: Font; +BEGIN f := root.next; + IF f # NIL THEN f := f.next END ; + f.next := NIL +END Free; + +BEGIN root := NIL; Default := This("Oberon10.Scn.Fnt") +END Fonts. diff --git a/src/voc07R/ORB.Mod b/src/voc07R/ORB.Mod index e155d1bc..61d23f4f 100644 --- a/src/voc07R/ORB.Mod +++ b/src/voc07R/ORB.Mod @@ -1,6 +1,6 @@ -MODULE ORB; (*NW 7.10.2013 in Oberon-07*) - IMPORT Files, ORS, S := SYSTEM; - TYPE BYTE = S.BYTE; +MODULE ORB; (*NW 25.6.2014 in Oberon-07*) + IMPORT Files := CompatFiles (* voc adaptation by noch *) + , ORS; (*Definition of data types Object and Type, which together form the data structure called "symbol table". Contains procedures for creation of Objects, and for search: NewObj, this, thisimport, thisfield (and OpenScope, CloseScope). @@ -8,6 +8,9 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) Import and Export. This module contains the list of standard identifiers, with which the symbol table (universe), and that of the pseudo-module SYSTEM are initialized. *) + TYPE INTEGER = LONGINT; (* voc adaptation by noch *) + BYTE = CHAR; + CONST versionkey* = 1; maxTypTab = 64; (* class values*) Head* = 0; Const* = 1; Var* = 2; Par* = 3; Fld* = 4; Typ* = 5; @@ -146,11 +149,9 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) PROCEDURE Read(VAR R: Files.Rider; VAR x: INTEGER); VAR b: BYTE; - BEGIN - (*Files.ReadByte(R, b);*) - Files.ReadBytes(R, b, 1); + BEGIN Files.ReadByte(R, b); (*IF b < 80H THEN x := b ELSE x := b - 100H END*) - IF S.VAL(SHORTINT, b) < 128 THEN x := S.VAL(SHORTINT, b) ELSE x := S.VAL(SHORTINT, b) - 100H END + IF b < 80X THEN x := ORD(b) ELSE x := ORD(b) - 100H END (* voc adaptation by noch *) END Read; PROCEDURE InType(VAR R: Files.Rider; thismod: Object; VAR T: Type); @@ -170,8 +171,7 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) InType(R, thismod, t.base); IF t.base.form = NoTyp THEN t.base := NIL; obj := NIL ELSE obj := t.base.dsc END ; Files.ReadNum(R, t.len); (*TD adr/exno*) - (*Files.ReadNum(R, t.nofpar);*) (*ext level*) - Files.ReadInt(R, t.nofpar); (*ext level*) + Files.ReadNum(R, t.nofpar); (*ext level*) Files.ReadNum(R, t.size); Read(R, class); WHILE class # 0 DO (*fields*) @@ -191,15 +191,14 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) END ; Files.ReadString(R, modname); IF modname[0] # 0X THEN (*re-import*) - (*Files.ReadInt(R, key); Files.ReadString(R, name);*) - Files.ReadNum(R, key); Files.ReadString(R, name); + Files.ReadInt(R, key); Files.ReadString(R, name); mod := ThisModule(modname, modname, FALSE, key); obj := mod.dsc; (*search type*) WHILE (obj # NIL) & (obj.name # name) DO obj := obj.next END ; IF obj # NIL THEN T := obj.type (*type object found in object list of mod*) ELSE (*insert new type object in object list of mod*) NEW(obj); obj.name := name; obj.class := Typ; obj.next := mod.dsc; mod.dsc := obj; obj.type := t; - t.mno := mod.lev; T := t + t.mno := mod.lev; t.typobj := obj; T := t END ; typtab[ref] := T END @@ -218,10 +217,7 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) thismod.lev := 0; thismod.dsc := system; thismod.rdo := TRUE ELSE MakeFileName(fname, modid1, ".smb"); F := Files.Old(fname); IF F # NIL THEN - Files.Set(R, F, 0); - (*Files.ReadInt(R, key); Files.ReadInt(R, key);*) - Files.ReadNum(R, key); Files.ReadNum(R, key); - Files.ReadString(R, modname); + Files.Set(R, F, 0); Files.ReadInt(R, key); Files.ReadInt(R, key); Files.ReadString(R, modname); thismod := ThisModule(modid, modid1, TRUE, key); thismod.rdo := TRUE; Read(R, class); (*version key*) IF class # versionkey THEN ORS.Mark("wrong version") END ; @@ -234,12 +230,7 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) WHILE k # 0 DO typtab[k].base := t; Read(R, k) END ELSE IF class = Const THEN - IF obj.type.form = Real THEN - (*Files.ReadInt(R, obj.val) *) - Files.ReadNum(R, obj.val) - ELSE - Files.ReadNum(R, obj.val) - END + IF obj.type.form = Real THEN Files.ReadInt(R, obj.val) ELSE Files.ReadNum(R, obj.val) END ELSIF class = Var THEN Files.ReadNum(R, obj.val); obj.rdo := TRUE END END ; @@ -254,8 +245,8 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) PROCEDURE Write(VAR R: Files.Rider; x: INTEGER); BEGIN - (*Files.WriteByte(R, x)*) (* -128 <= x < 128 *) - Files.WriteByte(R, SHORT(x)) (* -128 <= x < 128 *) + (*Files.WriteByte(R, x)*) + Files.WriteByte(R, SHORT(SHORT(x))) (* voc adaptation by noch *) END Write; PROCEDURE OutType(VAR R: Files.Rider; t: Type); @@ -288,11 +279,7 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) ELSE obj := t.typobj; IF obj # NIL THEN Write(R, Ref); t.ref := Ref; INC(Ref) ELSE (*anonymous*) Write(R, 0) END ; Write(R, t.form); - IF t.form = Pointer THEN - IF t.base.ref > 0 THEN Write(R, -t.base.ref) - ELSIF (t.base.typobj = NIL) OR ~t.base.typobj.expo THEN (*base not exported*) Write(R, -1) - ELSE OutType(R, t.base) - END + IF t.form = Pointer THEN OutType(R, t.base) ELSIF t.form = Array THEN OutType(R, t.base); Files.WriteNum(R, t.len); Files.WriteNum(R, t.size) ELSIF t.form = Record THEN IF t.base # NIL THEN OutType(R, t.base) ELSE OutType(R, noType) END ; @@ -302,20 +289,17 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) WHILE fld # NIL DO (*fields*) IF fld.expo THEN Write(R, Fld); Files.WriteString(R, fld.name); OutType(R, fld.type); Files.WriteNum(R, fld.val) - ELSE FindHiddenPointers(R, fld.type, fld.val) + ELSE FindHiddenPointers(R, fld.type, fld.val) (*offset*) END ; fld := fld.next END ; - Write(R, 0) + Write(R, 0) ELSIF t.form = Proc THEN OutType(R, t.base); OutPar(R, t.dsc, t.nofpar); Write(R, 0) END ; IF (t.mno > 0) & (obj # NIL) THEN (*re-export, output name*) mod := topScope.next; WHILE (mod # NIL) & (mod.lev # t.mno) DO mod := mod.next END ; - IF mod # NIL THEN Files.WriteString(R, mod.name); - (*Files.WriteInt(R, mod.val); *) - Files.WriteNum(R, mod.val); - Files.WriteString(R, obj.name) + IF mod # NIL THEN Files.WriteString(R, mod.name); Files.WriteInt(R, mod.val); Files.WriteString(R, obj.name) ELSE ORS.Mark("re-export not found"); Write(R, 0) END ELSE Write(R, 0) @@ -349,9 +333,7 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) Write(R, 0) ELSIF obj.class = Const THEN IF obj.type.form = Proc THEN Files.WriteNum(R, obj.exno) - ELSIF obj.type.form = Real THEN - (*Files.WriteInt(R, obj.val)*) - Files.WriteNum(R, obj.val) + ELSIF obj.type.form = Real THEN Files.WriteInt(R, obj.val) ELSE Files.WriteNum(R, obj.val) END ELSIF obj.class = Var THEN @@ -365,26 +347,13 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) END ; REPEAT Write(R, 0) UNTIL Files.Length(F) MOD 4 = 0; FOR Ref := Record+1 TO maxTypTab-1 DO typtab[Ref] := NIL END ; - Files.Set(R, F, 0); sum := 0; (* compute key (checksum) *) - WHILE ~R.eof DO - (*Files.ReadInt(R, x); *) - Files.ReadNum (R, x); - sum := sum + x - END ; + Files.Set(R, F, 0); sum := 0; Files.ReadInt(R, x); (* compute key (checksum) *) + WHILE ~R.eof DO sum := sum + x; Files.ReadInt(R, x) END ; F1 := Files.Old(filename); (*sum is new key*) - IF F1 # NIL THEN - Files.Set(R1, F1, 4); - (*Files.ReadInt(R1, oldkey) *) - Files.ReadNum(R1, oldkey) - ELSE - oldkey := sum+1 - END ; + IF F1 # NIL THEN Files.Set(R1, F1, 4); Files.ReadInt(R1, oldkey) ELSE oldkey := sum+1 END ; IF sum # oldkey THEN - IF newSF THEN - key := sum; Files.Set(R, F, 4); - (*Files.WriteInt(R, sum); *) - Files.WriteNum(R, sum); - Files.Register(F) (*insert checksum*) + IF newSF OR (F1 = NIL) THEN + key := sum; newSF := TRUE; Files.Set(R, F, 4); Files.WriteInt(R, sum); Files.Register(F) (*insert checksum*) ELSE ORS.Mark("new symbol file inhibited") END ELSE newSF := FALSE; key := sum @@ -406,8 +375,11 @@ MODULE ORB; (*NW 7.10.2013 in Oberon-07*) BEGIN NEW(obj); (*obj.name := name; *) - COPY(name, obj.name); - obj.class := cl; obj.type := type; obj.val := n; obj.dsc := NIL; + COPY(name, obj.name); (* voc adaptation by noch *) + obj.class := cl; + obj.type := type; + obj.val := n; + obj.dsc := NIL; IF cl = Typ THEN type.typobj := obj END ; obj.next := system; system := obj END enter; @@ -425,7 +397,7 @@ BEGIN (*initialize universe with data types and in-line procedures; LONGINT is synonym to INTEGER, LONGREAL to REAL. - LED, ADC, SBC; LDPSR, LDREG, REG, COND, MSK are not in language definition*) + LED, ADC, SBC; LDPSR, LDREG, REG, COND are not in language definition*) system := NIL; (*n = procno*10 + nofpar*) enter("UML", SFunc, intType, 132); (*functions*) enter("SBC", SFunc, intType, 122); diff --git a/src/voc07R/ORC.Mod b/src/voc07R/ORC.Mod deleted file mode 100644 index 84bfb97a..00000000 --- a/src/voc07R/ORC.Mod +++ /dev/null @@ -1,206 +0,0 @@ -MODULE ORC; (*Connection to RISC; NW 11.11.2013*) - IMPORT SYSTEM, Files, Texts, Oberon, V24; - CONST portno = 1; (*RS-232*) - BlkLen = 255; pno = 1; - REQ = 20X; REC = 21X; SND = 22X; CLS = 23X; ACK = 10X; - Tout = 1000; - - VAR res: LONGINT; - W: Texts.Writer; - - PROCEDURE Flush*; - VAR ch: CHAR; - BEGIN - WHILE V24.Available(portno) > 0 DO V24.Receive(portno, ch, res); Texts.Write(W, ch) END ; - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) - END Flush; - - PROCEDURE Open*; - VAR ch: CHAR; - BEGIN V24.Start(pno, 19200, 8, V24.ParNo, V24.Stop1, res); - WHILE V24.Available(pno) > 0 DO V24.Receive(pno, ch, res) END ; - IF res > 0 THEN Texts.WriteString(W, "open V24, error ="); Texts.WriteInt(W, res, 4) - ELSE Texts.WriteString(W, "connection open") - END ; - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) - END Open; - - PROCEDURE TestReq*; - VAR ch: CHAR; - BEGIN V24.Send(pno, REQ, res); Rec(ch); Texts.WriteInt(W, ORD(ch), 4); - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) - END TestReq; - - PROCEDURE SendInt(x: LONGINT); - VAR i: INTEGER; - BEGIN i := 4; - WHILE i > 0 DO - DEC(i); V24.Send(portno, CHR(x), res); x := x DIV 100H - END - END SendInt; - - PROCEDURE Load*; (*linked boot file F.bin*) - VAR i, m, n, w: LONGINT; - F: Files.File; R: Files.Rider; - S: Texts.Scanner; - BEGIN Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S); - IF S.class = Texts.Name THEN (*input file name*) - Texts.WriteString(W, S.s); F := Files.Old(S.s); - IF F # NIL THEN - Files.Set(R, F, 0); Files.ReadLInt(R, n); Files.ReadLInt(R, m); n := n DIV 4; - Texts.WriteInt(W, n, 6); Texts.WriteString(W, " loading "); Texts.Append(Oberon.Log, W.buf); - i := 0; SendInt(n*4); SendInt(m); - WHILE i < n DO - IF i + 1024 < n THEN m := i + 1024 ELSE m := n END ; - WHILE i < m DO Files.ReadLInt(R, w); SendInt(w); INC(i) END ; - Texts.Write(W, "."); Texts.Append(Oberon.Log, W.buf) - END ; - SendInt(0); Texts.WriteString(W, "done") - ELSE Texts.WriteString(W, " not found") - END ; - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) - END - END Load; - -(* ------------ send and receive files ------------ *) - - PROCEDURE Rec(VAR ch: CHAR); (*receive with timeout*) - VAR time: LONGINT; - BEGIN time := Oberon.Time() + 3000; - LOOP - IF V24.Available(pno) > 0 THEN V24.Receive(pno, ch, res); EXIT END ; - IF Oberon.Time() >= time THEN ch := 0X; EXIT END - END - END Rec; - - PROCEDURE SendName(VAR s: ARRAY OF CHAR); - VAR i: INTEGER; ch: CHAR; - BEGIN i := 0; ch := s[0]; - WHILE ch > 0X DO V24.Send(pno, ch, res); INC(i); ch := s[i] END ; - V24.Send(pno, 0X, res) - END SendName; - - PROCEDURE Send*; - VAR ch, code: CHAR; - n, n0, L: LONGINT; - F: Files.File; R: Files.Rider; - S: Texts.Scanner; - BEGIN V24.Send(pno, REQ, res); Rec(code); - IF code = ACK THEN - Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S); - WHILE S.class = Texts.Name DO - Texts.WriteString(W, S.s); F := Files.Old(S.s); - IF F # NIL THEN - V24.Send(pno, REC, res); SendName(S.s); Rec(code); - IF code = ACK THEN - Texts.WriteString(W, " sending "); - L := Files.Length(F); Files.Set(R, F, 0); - REPEAT (*send paket*) - IF L > BlkLen THEN n := BlkLen ELSE n := L END ; - n0 := n; V24.Send(pno, CHR(n), res); DEC(L, n); - WHILE n > 0 DO Files.Read(R, ch); V24.Send(pno, ch, res); DEC(n) END ; - Rec(code); - IF code = ACK THEN Texts.Write(W, ".") ELSE Texts.Write(W, "*"); n := 0 END ; - Texts.Append(Oberon.Log, W.buf) - UNTIL n0 < BlkLen; - Rec(code) - ELSE Texts.WriteString(W, " no response"); Texts.WriteInt(W, ORD(code), 4) - END - ELSE Texts.WriteString(W, " not found") - END ; - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); Texts.Scan(S) - END - ELSE Texts.WriteString(W, " connection not open"); - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) - END - END Send; - - PROCEDURE Receive*; - VAR ch, code: CHAR; - n, L, LL: LONGINT; - F: Files.File; R: Files.Rider; - orgname: ARRAY 32 OF CHAR; - S: Texts.Scanner; - BEGIN V24.Send(pno, REQ, res); Rec(code); - IF code = ACK THEN - Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S); - WHILE S.class = Texts.Name DO - Texts.WriteString(W, S.s); COPY(S.s, orgname); - F := Files.New(S.s); Files.Set(R, F, 0); LL := 0; - V24.Send(pno, SND, res); SendName(S.s); Rec(code); - IF code = ACK THEN - Texts.WriteString(W, " receiving "); - REPEAT Rec(ch); L := ORD(ch); n := L; - WHILE n > 0 DO V24.Receive(pno, ch, res); Files.Write(R, ch); DEC(n) END ; - V24.Send(pno, ACK, res); LL := LL + L; Texts.Write(W, "."); Texts.Append(Oberon.Log, W.buf) - UNTIL L < BlkLen; - Files.Register(F); Texts.WriteInt(W, LL, 6) - ELSE Texts.WriteString(W, " no response"); Texts.WriteInt(W, ORD(code), 4) - END ; - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); Texts.Scan(S) - END - ELSE Texts.WriteString(W, " connection not open"); - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) - END - END Receive; - - PROCEDURE Close*; - BEGIN V24.Send(pno, CLS, res); - Texts.WriteString(W, "Server closed"); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) - END Close; - -(* ------------ Oberon-0 commands ------------ *) - - PROCEDURE RecByte(VAR ch: CHAR); - VAR T: LONGINT; ch0: CHAR; - BEGIN T := Oberon.Time() + Tout; - REPEAT UNTIL (V24.Available(portno) > 0) OR (Oberon.Time() >= T); - IF V24.Available(portno) > 0 THEN V24.Receive(portno, ch, res) ELSE ch := 0X END ; - END RecByte; - - PROCEDURE RecInt(VAR x: LONGINT); - VAR i, k, T: LONGINT; ch: CHAR; - BEGIN i := 4; k := 0; - REPEAT - DEC(i); V24.Receive(portno, ch, res); - k := SYSTEM.ROT(ORD(ch)+k, -8) - UNTIL i = 0; - x := k - END RecInt; - - PROCEDURE SR*; (*send, then receive sequence of items*) - VAR S: Texts.Scanner; i, k: LONGINT; ch, xch: CHAR; - BEGIN Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S); - WHILE (S.class # Texts.Char) & (S.c # "~") DO - IF S.class = Texts.Int THEN Texts.WriteInt(W, S.i, 6); SendInt(S.i) - ELSIF S.class = Texts.Real THEN - Texts.WriteReal(W, S.x, 12); SendInt(SYSTEM.VAL(LONGINT, S.x)) - ELSIF S.class IN {Texts.Name, Texts.String} THEN - Texts.Write(W, " "); Texts.WriteString(W, S.s); i := 0; - REPEAT ch := S.s[i]; V24.Send(portno, ch, res); INC(i) UNTIL ch = 0X - ELSIF S.class = Texts.Char THEN Texts.Write(W, S.c) - ELSE Texts.WriteString(W, "bad value") - END ; - Texts.Scan(S) - END ; - Texts.Write(W, "|"); (*Texts.Append(Oberon.Log, W.buf);*) - (*receive input*) - REPEAT RecByte(xch); - IF xch = 0X THEN Texts.WriteString(W, " timeout"); Flush - ELSIF xch = 1X THEN RecInt(k); Texts.WriteInt(W, k, 6) - ELSIF xch = 2X THEN RecInt(k); Texts.WriteHex(W, k) - ELSIF xch = 3X THEN RecInt(k); Texts.WriteReal(W, SYSTEM.VAL(REAL, k), 15) - ELSIF xch = 4X THEN Texts.Write(W, " "); V24.Receive(portno, ch, res); - WHILE ch > 0X DO Texts.Write(W, ch); V24.Receive(portno, ch, res) END - ELSIF xch = 5X THEN V24.Receive(portno, ch, res); Texts.Write(W, ch) - ELSIF xch = 6X THEN Texts.WriteLn(W) - ELSIF xch = 7X THEN Texts.Write(W, "~"); xch := 0X - ELSIF xch = 8X THEN RecByte(ch); Texts.WriteInt(W, ORD(ch), 4); Texts.Append(Oberon.Log, W.buf) - ELSE xch := 0X - END - UNTIL xch = 0X; - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) - END SR; - -BEGIN Texts.OpenWriter(W); -END ORC. diff --git a/src/voc07R/ORG.Mod b/src/voc07R/ORG.Mod index eed166b4..9495337c 100644 --- a/src/voc07R/ORG.Mod +++ b/src/voc07R/ORG.Mod @@ -1,16 +1,20 @@ -MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) - IMPORT SYSTEM, Files, ORS, ORB; +MODULE ORG; (* NW 24.6.2014 code generator in Oberon-07 for RISC*) + IMPORT SYSTEM, Files := CompatFiles, ORS, ORB; (*Code generator for Oberon compiler for RISC processor. Procedural interface to Parser OSAP; result in array "code". Procedure Close writes code-files*) + (* voc adaptation by noch *) + TYPE INTEGER = LONGINT; + BYTE = CHAR; + CONST WordSize* = 4; StkOrg0 = -64; VarOrg0 = 0; (*for RISC-0 only*) MT = 12; SB = 13; SP = 14; LNK = 15; (*dedicated registers*) maxCode = 8000; maxStrx = 2400; maxTD = 120; C24 = 1000000H; Reg = 10; RegI = 11; Cond = 12; (*internal item modes*) - (*frequently used opcodes*) U = 2000H; + (*frequently used opcodes*) U = 2000H; V = 1000H; Mov = 0; Lsl = 1; Asr = 2; Ror= 3; And = 4; Ann = 5; Ior = 6; Xor = 7; Add = 8; Sub = 9; Cmp = 9; Mul = 10; Div = 11; Fad = 12; Fsb = 13; Fml = 14; Fdv = 15; @@ -28,7 +32,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) (* Item forms and meaning of fields: mode r a b -------------------------------- - Const - value (proc adr) (immediate value) + Const - value (proc adr) (immediate value) Var base off - (direct adr) Par - off0 off1 (indirect adr) Reg regno @@ -40,8 +44,9 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) entry: LONGINT; (*main entry point*) RH: LONGINT; (*available registers R[0] ... R[H-1]*) curSB: LONGINT; (*current static base in SB*) + frame: LONGINT; (*frame offset changed in SaveRegs and RestoreRegs*) fixorgP, fixorgD, fixorgT: LONGINT; (*origins of lists of locations to be fixed up by loader*) - check, inhibitCalls: BOOLEAN; (*emit run-time checks*) + check: BOOLEAN; (*emit run-time checks*) version: INTEGER; (* 0 = RISC-0, 1 = RISC-5 *) relmap: ARRAY 6 OF INTEGER; (*condition codes for relations*) @@ -49,6 +54,15 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) data: ARRAY maxTD OF LONGINT; (*type descriptors*) str: ARRAY maxStrx OF CHAR; + (* voc adaptation by noch *) + PROCEDURE LSL (x, n : INTEGER): INTEGER; + + BEGIN + + RETURN ASH(x, n); + END LSL; + + (*instruction assemblers according to formats*) PROCEDURE Put0(op, a, b, c: LONGINT); @@ -58,7 +72,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE Put1(op, a, b, im: LONGINT); BEGIN (*emit format-1 instruction, -10000H <= im < 10000H*) - IF im < 0 THEN INC(op, 1000H) END ; (*set v-bit*) + IF im < 0 THEN INC(op, V) END ; code[pc] := (((a+40H) * 10H + b) * 10H + op) * 10000H + (im MOD 10000H); INC(pc) END Put1; @@ -83,36 +97,21 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE incR; BEGIN - IF RH < MT THEN INC(RH) ELSE ORS.Mark("register stack overflow") END + IF RH < MT-1 THEN INC(RH) ELSE ORS.Mark("register stack overflow") END END incR; PROCEDURE CheckRegs*; BEGIN IF RH # 0 THEN ORS.Mark("Reg Stack"); RH := 0 END ; - IF pc >= maxCode - 40 THEN ORS.Mark("Program too long"); END + IF pc >= maxCode - 40 THEN ORS.Mark("Program too long") END END CheckRegs; - PROCEDURE SaveRegs(r: LONGINT); (* R[0 .. r-1] to be saved; R[r .. RH-1] to be moved down*) - VAR rs, rd: LONGINT; (*r > 0*) - BEGIN rs := r; rd := 0; - REPEAT DEC(rs); Put1(Sub, SP, SP, 4); Put2(Str, rs, SP, 0) UNTIL rs = 0; - rs := r; rd := 0; - WHILE rs < RH DO Put0(Mov, rd, 0, rs); INC(rs); INC(rd) END ; - RH := rd - END SaveRegs; - - PROCEDURE RestoreRegs(r: LONGINT; VAR x: Item); (*R[0 .. r-1] to be restored*) - VAR rd: LONGINT; (*r > 0*) - BEGIN Put0(Mov, r, 0, 0); rd := 0; - REPEAT Put2(Ldr, rd, SP, 0); Put1(Add, SP, SP, 4); INC(rd) UNTIL rd = r - END RestoreRegs; - PROCEDURE SetCC(VAR x: Item; n: LONGINT); BEGIN x.mode := Cond; x.a := 0; x.b := 0; x.r := n END SetCC; PROCEDURE Trap(cond, num: LONGINT); - BEGIN Put3(BLR, cond, ORS.Pos()*100H + num*10H + MT) + BEGIN num := ORS.Pos()*100H + num*10H + MT; Put3(BLR, cond, num) END Trap; (*handling of forward reference, fixups of branch addresses and constant tables*) @@ -174,13 +173,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) BEGIN IF x.type.size = 1 THEN op := Ldr+1 ELSE op := Ldr END ; IF x.mode # Reg THEN - IF x.mode = ORB.Var THEN - IF x.r > 0 THEN (*local*) Put2(op, RH, SP, x.a) - ELSE GetSB(x.r); Put2(op, RH, SB, x.a) - END ; - x.r := RH; incR - ELSIF x.mode = ORB.Par THEN Put2(Ldr, RH, SP, x.a); Put2(op, RH, RH, x.b); x.r := RH; incR - ELSIF x.mode = ORB.Const THEN + IF x.mode = ORB.Const THEN IF x.type.form = ORB.Proc THEN IF x.r > 0 THEN ORS.Mark("not allowed") ELSIF x.r = 0 THEN Put3(BL, 7, 0); Put1a(Sub, RH, LNK, pc*4 - x.a) @@ -191,6 +184,12 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) IF x.a MOD 10000H # 0 THEN Put1(Ior, RH, RH, x.a MOD 10000H) END END ; x.r := RH; incR + ELSIF x.mode = ORB.Var THEN + IF x.r > 0 THEN (*local*) Put2(op, RH, SP, x.a + frame) + ELSE GetSB(x.r); Put2(op, RH, SB, x.a) + END ; + x.r := RH; incR + ELSIF x.mode = ORB.Par THEN Put2(Ldr, RH, SP, x.a + frame); Put2(op, RH, RH, x.b); x.r := RH; incR ELSIF x.mode = RegI THEN Put2(op, x.r, x.r, x.a) ELSIF x.mode = Cond THEN Put3(BC, negated(x.r), 2); @@ -204,16 +203,16 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE loadAdr(VAR x: Item); BEGIN IF x.mode = ORB.Var THEN - IF x.r > 0 THEN (*local*) Put1a(Add, RH, SP, x.a) + IF x.r > 0 THEN (*local*) Put1a(Add, RH, SP, x.a + frame) ELSE GetSB(x.r); Put1a(Add, RH, SB, x.a) END ; x.r := RH; incR - ELSIF x.mode = ORB.Par THEN Put2(Ldr, RH, SP, x.a); + ELSIF x.mode = ORB.Par THEN Put2(Ldr, RH, SP, x.a + frame); IF x.b # 0 THEN Put1a(Add, RH, RH, x.b) END ; x.r := RH; incR ELSIF x.mode = RegI THEN IF x.a # 0 THEN Put1a(Add, x.r, x.r, x.a) END - ELSE ORS.Mark("address error") + ELSE ORS.Mark("address error") END ; x.mode := Reg END loadAdr; @@ -295,15 +294,15 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) IF check THEN (*check array bounds*) IF lim >= 0 THEN Put1a(Cmp, RH, y.r, lim) ELSE (*open array*) - IF x.mode IN {ORB.Var, ORB.Par} THEN Put2(Ldr, RH, SP, x.a+4); Put0(Cmp, RH, y.r, RH) + IF x.mode IN {ORB.Var, ORB.Par} THEN Put2(Ldr, RH, SP, x.a+4+frame); Put0(Cmp, RH, y.r, RH) ELSE ORS.Mark("error in Index") END END ; - Trap(10, 1) + Trap(10, 1) (*BCC*) END ; - IF s = 4 THEN Put1(Lsl, y.r, y.r, 2) ELSIF s > 1 THEN Put1(Mul, y.r, y.r, s) END ; + IF s = 4 THEN Put1(Lsl, y.r, y.r, 2) ELSIF s > 1 THEN Put1a(Mul, y.r, y.r, s) END ; IF x.mode = ORB.Var THEN - IF x.r > 0 THEN Put0(Add, y.r, SP, y.r) + IF x.r > 0 THEN Put0(Add, y.r, SP, y.r); INC(x.a, frame) ELSE GetSB(x.r); IF x.r = 0 THEN Put0(Add, y.r, SB, y.r) ELSE Put1a(Add, RH, SB, x.a); Put0(Add, y.r, RH, y.r); x.a := 0 @@ -311,7 +310,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) END ; x.r := y.r; x.mode := RegI ELSIF x.mode = ORB.Par THEN - Put2(Ldr, RH, SP, x.a); + Put2(Ldr, RH, SP, x.a + frame); Put0(Add, y.r, RH, y.r); x.mode := RegI; x.r := y.r; x.a := x.b ELSIF x.mode = RegI THEN Put0(Add, x.r, x.r, y.r); DEC(RH) END @@ -321,10 +320,10 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE DeRef*(VAR x: Item); BEGIN IF x.mode = ORB.Var THEN - IF x.r > 0 THEN (*local*) Put2(Ldr, RH, SP, x.a) ELSE GetSB(x.r); Put2(Ldr, RH, SB, x.a) END ; + IF x.r > 0 THEN (*local*) Put2(Ldr, RH, SP, x.a + frame) ELSE GetSB(x.r); Put2(Ldr, RH, SB, x.a) END ; NilCheck; x.r := RH; incR ELSIF x.mode = ORB.Par THEN - Put2(Ldr, RH, SP, x.a); Put2(Ldr, RH, RH, x.b); NilCheck; x.r := RH; incR + Put2(Ldr, RH, SP, x.a + frame); Put2(Ldr, RH, RH, x.b); NilCheck; x.r := RH; incR ELSIF x.mode = RegI THEN Put2(Ldr, x.r, x.r, x.a); NilCheck ELSIF x.mode # Reg THEN ORS.Mark("bad mode in DeRef") END ; @@ -358,7 +357,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) IF s <= 24 THEN s := 32 ELSIF s <= 56 THEN s := 64 ELSIF s <= 120 THEN s := 128 ELSE s := (s+263) DIV 256 * 256 END ; - data[dcw] := s; INC(dcw); + T.len := dc; data[dcw] := s; INC(dcw); k := T.nofpar; (*extension level!*) IF k > 3 THEN ORS.Mark("ext level too large") ELSE Q(T, dcw); @@ -369,13 +368,17 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) END BuildTD; PROCEDURE TypeTest*(VAR x: Item; T: ORB.Type; varpar, isguard: BOOLEAN); + VAR pc0: LONGINT; BEGIN (*fetch tag into RH*) - IF varpar THEN Put2(Ldr, RH, SP, x.a+4) - ELSE load(x); NilCheck; Put2(Ldr, RH, x.r, -8) + IF varpar THEN Put2(Ldr, RH, SP, x.a+4+frame) + ELSE load(x); + pc0 := pc; Put3(BC, EQ, 0); (*NIL belongs to every pointer type*) + Put2(Ldr, RH, x.r, -8) END ; Put2(Ldr, RH, RH, T.nofpar*4); incR; loadTypTagAdr(T); (*tag of T*) - Put0(Cmp, RH, RH-1, RH-2); DEC(RH, 2); + Put0(Cmp, RH-1, RH-1, RH-2); DEC(RH, 2); + IF ~varpar THEN fix(pc0, pc - pc0 - 1) END ; IF isguard THEN IF check THEN Trap(NE, 2) END ELSE SetCC(x, EQ); @@ -514,32 +517,20 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE Singleton*(VAR x: Item); (* x := {x} *) BEGIN IF x.mode = ORB.Const THEN - (*x.a := LSL(1, x.a)*) (* o7 -> o2 *) - x.a := ASH(1, x.a) - ELSE - load(x); Put1(Mov, RH, 0, 1); Put0(Lsl, x.r, RH, x.r) + x.a := LSL(1, x.a) + ELSE load(x); Put1(Mov, RH, 0, 1); Put0(Lsl, x.r, RH, x.r) END END Singleton; PROCEDURE Set*(VAR x, y: Item); (* x := {x .. y} *) BEGIN IF (x.mode = ORB.Const) & ( y.mode = ORB.Const) THEN - IF x.a <= y.a THEN - (*x.a := LSL(2, y.a) - LSL(1, x.a)*) (* o7 -> o2 *) - x.a := ASH(2, y.a) - ASH(1, x.a) - ELSE - x.a := 0 - END + IF x.a <= y.a THEN x.a := LSL(2, y.a) - LSL(1, x.a) ELSE x.a := 0 END ELSE - IF (x.mode = ORB.Const) & (x.a < 10H) THEN - (*x.a := LSL(-1, x.a)*) (* o7 -> o2 *) - x.a := ASH(-1, x.a) + IF (x.mode = ORB.Const) & (x.a < 16) THEN x.a := LSL(-1, x.a) ELSE load(x); Put1(Mov, RH, 0, -1); Put0(Lsl, x.r, RH, x.r) END ; - IF (y.mode = ORB.Const) & (y.a < 10H) THEN - (*Put1(Mov, RH, 0, LSL(-2, y.a)); *) (* o7 -> o2 *) - Put1(Mov, RH, 0, ASH(-2, y.a)); - y.mode := Reg; y.r := RH; INC(RH) + IF (y.mode = ORB.Const) & (y.a < 16) THEN Put1(Mov, RH, 0, LSL(-2, y.a)); y.mode := Reg; y.r := RH; incR ELSE load(y); Put1(Mov, RH, 0, -2); Put0(Lsl, y.r, RH, y.r) END ; IF x.mode = ORB.Const THEN @@ -641,36 +632,36 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) BEGIN load(y); IF x.type.size = 1 THEN op := Str+1 ELSE op := Str END ; IF x.mode = ORB.Var THEN - IF x.r > 0 THEN (*local*) Put2(op, y.r, SP, x.a) + IF x.r > 0 THEN (*local*) Put2(op, y.r, SP, x.a + frame) ELSE GetSB(x.r); Put2(op, y.r, SB, x.a) END - ELSIF x.mode = ORB.Par THEN Put2(Ldr, RH, SP, x.a); Put2(op, y.r, RH, x.b); + ELSIF x.mode = ORB.Par THEN Put2(Ldr, RH, SP, x.a + frame); Put2(op, y.r, RH, x.b); ELSIF x.mode = RegI THEN Put2(op, y.r, x.r, x.a); DEC(RH); ELSE ORS.Mark("bad mode in Store") END ; DEC(RH) END Store; - PROCEDURE StoreStruct*(VAR x, y: Item); (* x := y *) + PROCEDURE StoreStruct*(VAR x, y: Item); (* x := y, frame = 0 *) VAR s, pc0: LONGINT; BEGIN loadAdr(x); loadAdr(y); IF (x.type.form = ORB.Array) & (x.type.len > 0) THEN IF y.type.len >= 0 THEN - IF x.type.len >= y.type.len THEN Put1(Mov, RH, 0, (y.type.size+3) DIV 4) + IF x.type.len >= y.type.len THEN Put1a(Mov, RH, 0, (y.type.size+3) DIV 4) ELSE ORS.Mark("source array too long") END ELSE (*y is open array*) Put2(Ldr, RH, SP, y.a+4); s := y.type.base.size; (*element size*) pc0 := pc; Put3(BC, EQ, 0); IF s = 1 THEN Put1(Add, RH, RH, 3); Put1(Asr, RH, RH, 2) - ELSIF s # 4 THEN Put1(Mul, RH, RH, s DIV 4) + ELSIF s # 4 THEN Put1a(Mul, RH, RH, s DIV 4) END ; IF check THEN - Put1(Mov, RH+1, 0, (x.type.size+3) DIV 4); Put0(Cmp, RH+1, RH, RH+1); Trap(GT, 3) + Put1a(Mov, RH+1, 0, (x.type.size+3) DIV 4); Put0(Cmp, RH+1, RH, RH+1); Trap(GT, 3) END ; fix(pc0, pc + 5 - pc0) END - ELSIF x.type.form = ORB.Record THEN Put1(Mov, RH, 0, x.type.size DIV 4) + ELSIF x.type.form = ORB.Record THEN Put1a(Mov, RH, 0, x.type.size DIV 4) ELSE ORS.Mark("inadmissible assignment") END ; Put2(Ldr, RH+1, y.r, 0); Put1(Add, y.r, y.r, 4); @@ -698,10 +689,10 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) VAR xmd: INTEGER; BEGIN xmd := x.mode; loadAdr(x); IF (ftype.form = ORB.Array) & (ftype.len < 0) THEN (*open array*) - IF x.type.len >= 0 THEN Put1(Mov, RH, 0, x.type.len) ELSE Put2(Ldr, RH, SP, x.a+4) END ; + IF x.type.len >= 0 THEN Put1a(Mov, RH, 0, x.type.len) ELSE Put2(Ldr, RH, SP, x.a+4+frame) END ; incR ELSIF ftype.form = ORB.Record THEN - IF xmd = ORB.Par THEN Put2(Ldr, RH, SP, x.a+4); incR ELSE loadTypTagAdr(x.type) END + IF xmd = ORB.Par THEN Put2(Ldr, RH, SP, x.a+4+frame); incR ELSE loadTypTagAdr(x.type) END END END VarParam; @@ -711,7 +702,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE OpenArrayParam*(VAR x: Item); BEGIN loadAdr(x); - IF x.type.len >= 0 THEN Put1a(Mov, RH, 0, x.type.len) ELSE Put2(Ldr, RH, SP, x.a+4) END ; + IF x.type.len >= 0 THEN Put1a(Mov, RH, 0, x.type.len) ELSE Put2(Ldr, RH, SP, x.a+4+frame) END ; incR END OpenArrayParam; @@ -772,38 +763,47 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) BEGIN FixLink(x.a) END Fixup; + PROCEDURE SaveRegs(r: LONGINT); (* R[0 .. r-1]*) + VAR r0: LONGINT; + BEGIN (*r > 0*) r0 := 0; + Put1(Sub, SP, SP, r*4); INC(frame, 4*r); + REPEAT Put2(Str, r0, SP, (r-r0-1)*4); INC(r0) UNTIL r0 = r + END SaveRegs; + + PROCEDURE RestoreRegs(r: LONGINT); (*R[0 .. r-1]*) + VAR r0: LONGINT; + BEGIN (*r > 0*) r0 := r; + REPEAT DEC(r0); Put2(Ldr, r0, SP, (r-r0-1)*4) UNTIL r0 = 0; + Put1(Add, SP, SP, r*4); DEC(frame, 4*r) + END RestoreRegs; + PROCEDURE PrepCall*(VAR x: Item; VAR r: LONGINT); - BEGIN - IF x.type.form = ORB.Proc THEN - IF x.mode # ORB.Const THEN - load(x); code[pc-1] := code[pc-1] + 0B000000H; x.r := 11; DEC(RH); inhibitCalls := TRUE; - IF check THEN Trap(EQ, 5) END - END - ELSE ORS.Mark("not a procedure") - END ; - r := RH + BEGIN (*x.type.form = ORB.Proc*) + IF x.mode > ORB.Par THEN load(x) END ; + r := RH; + IF RH > 0 THEN SaveRegs(RH); RH := 0 END END PrepCall; PROCEDURE Call*(VAR x: Item; r: LONGINT); - BEGIN - IF inhibitCalls & (x.r # 11) THEN ORS.Mark("inadmissible call") ELSE inhibitCalls := FALSE END ; - IF r > 0 THEN SaveRegs(r) END ; - IF x.type.form = ORB.Proc THEN - IF x.mode = ORB.Const THEN - IF x.r >= 0 THEN Put3(BL, 7, (x.a DIV 4)-pc-1) - ELSE (*imported*) - IF pc - fixorgP < 1000H THEN - Put3(BL, 7, ((-x.r) * 100H + x.a) * 1000H + pc-fixorgP); fixorgP := pc-1 - ELSE ORS.Mark("fixup impossible") - END + BEGIN (*x.type.form = ORB.Proc*) + IF x.mode = ORB.Const THEN + IF x.r >= 0 THEN Put3(BL, 7, (x.a DIV 4)-pc-1) + ELSE (*imported*) + IF pc - fixorgP < 1000H THEN + Put3(BL, 7, ((-x.r) * 100H + x.a) * 1000H + pc-fixorgP); fixorgP := pc-1 + ELSE ORS.Mark("fixup impossible") END - ELSE Put3(BLR, 7, x.r) END - ELSE ORS.Mark("not a procedure") - END ; - IF x.type.base.form = ORB.NoTyp THEN RH := 0 ELSE - IF r > 0 THEN RestoreRegs(r, x) END ; + IF x.mode <= ORB.Par THEN load(x); DEC(RH) + ELSE Put2(Ldr, RH, SP, 0); Put1(Add, SP, SP, 4); DEC(r); DEC(frame, 4) + END ; + IF check THEN Trap(EQ, 5) END ; + Put3(BLR, 7, RH) + END ; + IF x.type.base.form = ORB.NoTyp THEN (*procedure*) RH := 0 + ELSE (*function*) + IF r > 0 THEN Put0(Mov, r, 0, 0); RestoreRegs(r) END ; x.mode := Reg; x.r := r; RH := r+1 END ; invalSB @@ -811,14 +811,14 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE Enter*(parblksize, locblksize: LONGINT; int: BOOLEAN); VAR a, r: LONGINT; - BEGIN invalSB; + BEGIN invalSB; frame := 0; IF ~int THEN (*procedure prolog*) a := 4; r := 0; Put1(Sub, SP, SP, locblksize); Put2(Str, LNK, SP, 0); WHILE a < parblksize DO Put2(Str, r, SP, a); INC(r); INC(a, 4) END ELSE (*interrupt procedure*) - Put1(Sub, SP, SP, 8); Put2(Str, 0, SP, 0); Put2(Str, 1, SP, 4) - (*R0 and R1 saved, but NOT LNK*) + Put1(Sub, SP, SP, 12); Put2(Str, 0, SP, 0); Put2(Str, 1, SP, 4); Put2(Str, SB, SP, 8) + (*R0, R1, SB saved os stack*) END END Enter; @@ -827,8 +827,8 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) IF form # ORB.NoTyp THEN load(x) END ; IF ~int THEN (*procedure epilog*) Put2(Ldr, LNK, SP, 0); Put1(Add, SP, SP, size); Put3(BR, 7, LNK) - ELSE (*interrupt*) - Put2(Ldr, 1, SP, 4); Put2(Ldr, 0, SP, 0); Put1(Add, SP, SP, 8); Put3(BR, 7, 10H) + ELSE (*interrupt return, restore SB, R1, R0*) + Put2(Ldr, SB, SP, 8); Put2(Ldr, 1, SP, 4); Put2(Ldr, 0, SP, 0); Put1(Add, SP, SP, 12); Put3(BR, 7, 10H) END ; RH := 0 END Return; @@ -837,35 +837,26 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE Increment*(upordown: LONGINT; VAR x, y: Item); VAR op, zr, v: LONGINT; - BEGIN + BEGIN (*frame = 0*) IF upordown = 0 THEN op := Add ELSE op := Sub END ; IF x.type = ORB.byteType THEN v := 1 ELSE v := 0 END ; IF y.type.form = ORB.NoTyp THEN y.mode := ORB.Const; y.a := 1 END ; IF (x.mode = ORB.Var) & (x.r > 0) THEN zr := RH; Put2(Ldr+v, zr, SP, x.a); incR; - IF y.mode = ORB.Const THEN Put1(op, zr, zr, y.a) ELSE load(y); Put0(op, zr, zr, y.r); DEC(RH) END ; + IF y.mode = ORB.Const THEN Put1a(op, zr, zr, y.a) ELSE load(y); Put0(op, zr, zr, y.r); DEC(RH) END ; Put2(Str+v, zr, SP, x.a); DEC(RH) ELSE loadAdr(x); zr := RH; Put2(Ldr+v, RH, x.r, 0); incR; - IF y.mode = ORB.Const THEN Put1(op, zr, zr, y.a) ELSE load(y); Put0(op, zr, zr, y.r); DEC(RH) END ; + IF y.mode = ORB.Const THEN Put1a(op, zr, zr, y.a) ELSE load(y); Put0(op, zr, zr, y.r); DEC(RH) END ; Put2(Str+v, zr, x.r, 0); DEC(RH, 2) END END Increment; PROCEDURE Include*(inorex: LONGINT; VAR x, y: Item); - VAR zr: LONGINT; + VAR op, zr: LONGINT; BEGIN loadAdr(x); zr := RH; Put2(Ldr, RH, x.r, 0); incR; - IF inorex = 0 THEN (*include*) - IF y.mode = ORB.Const THEN - (*Put1(Ior, zr, zr, LSL(1, y.a))*) (* o7 -> o2 *) - Put1(Ior, zr, zr, ASH(1, y.a)) - ELSE load(y); Put1(Mov, RH, 0, 1); Put0(Lsl, y.r, RH, y.r); Put0(Ior, zr, zr, y.r); DEC(RH) - END - ELSE (*exclude*) - IF y.mode = ORB.Const THEN - (*Put1(And, zr, zr, -LSL(1, y.a)-1)*) (* o7 -> o2 *) - Put1(And, zr, zr, - ASH(1, y.a)-1) - ELSE load(y); Put1(Mov, RH, 0, 1); Put0(Lsl, y.r, RH, y.r); Put1(Xor, y.r, y.r, -1); Put0(And, zr, zr, y.r); DEC(RH) - END + IF inorex = 0 THEN op := Ior ELSE op := Ann END ; + IF y.mode = ORB.Const THEN Put1a(op, zr, zr, LSL(1, y.a)) + ELSE load(y); Put1(Mov, RH, 0, 1); Put0(Lsl, y.r, RH, y.r); Put0(op, zr, zr, y.r); DEC(RH) END ; Put2(Str, zr, x.r, 0); DEC(RH, 2) END Include; @@ -950,7 +941,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) END Odd; PROCEDURE Floor*(VAR x: Item); - BEGIN load(x); Put1(Mov+U, RH, 0, 4B00H); Put0(Fad+1000H, x.r, x.r, RH) + BEGIN load(x); Put1(Mov+U, RH, 0, 4B00H); Put0(Fad+V, x.r, x.r, RH) END Floor; PROCEDURE Float*(VAR x: Item); @@ -965,7 +956,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE Len*(VAR x: Item); BEGIN IF x.type.len >= 0 THEN x.mode := ORB.Const; x.a := x.type.len - ELSE (*open array*) Put2(Ldr, RH, SP, x.a + 4); x.mode := Reg; x.r := RH; incR + ELSE (*open array*) Put2(Ldr, RH, SP, x.a + 4 + frame); x.mode := Reg; x.r := RH; incR END END Len; @@ -1005,7 +996,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE H*(VAR x: Item); BEGIN (*x.mode = Const*) - Put0(Mov + U + (x.a MOD 2 * 1000H), RH, 0, 0); x.mode := Reg; x.r := RH; incR + Put0(Mov + U + x.a MOD 2 * V, RH, 0, 0); x.mode := Reg; x.r := RH; incR END H; PROCEDURE Adr*(VAR x: Item); @@ -1022,8 +1013,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) END Condition; PROCEDURE Open*(v: INTEGER); - BEGIN pc := 0; tdx := 0; strx := 0; RH := 0; fixorgP := 0; fixorgD := 0; fixorgT := 0; - check := v # 0; version := v; inhibitCalls := FALSE; + BEGIN pc := 0; tdx := 0; strx := 0; RH := 0; fixorgP := 0; fixorgD := 0; fixorgT := 0; check := v # 0; version := v; IF v = 0 THEN pc := 8 END END Open; @@ -1033,7 +1023,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE Header*; BEGIN entry := pc*4; - IF version = 0 THEN code[0] := 0E7000000H-1 + pc; Put1(Mov, SB, 0, 16); Put1(Mov, SP, 0, StkOrg0) (*RISC-0*) + IF version = 0 THEN code[0] := 0E7000000H-1 + pc; Put1a(Mov, SB, 0, VarOrg0); Put1a(Mov, SP, 0, StkOrg0) (*RISC-0*) ELSE Put1(Sub, SP, SP, 4); Put2(Str, LNK, SP, 0); invalSB END END Header; @@ -1054,9 +1044,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) PROCEDURE FindPtrs(VAR R: Files.Rider; typ: ORB.Type; adr: LONGINT); VAR fld: ORB.Object; i, s: LONGINT; BEGIN - IF (typ.form = ORB.Pointer) OR (typ.form = ORB.NilTyp) THEN - (*Files.WriteInt(R, adr)*) (* o7 -> o2 *) - Files.WriteNum(R, adr) + IF (typ.form = ORB.Pointer) OR (typ.form = ORB.NilTyp) THEN Files.WriteInt(R, adr) ELSIF typ.form = ORB.Record THEN fld := typ.dsc; WHILE fld # NIL DO FindPtrs(R, fld.type, fld.val + adr); fld := fld.next END @@ -1089,70 +1077,43 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) size := varsize + strx + comsize + (pc + nofimps + nofent + nofptrs + 1)*4; (*varsize includes type descriptors*) ORB.MakeFileName(name, modid, ".rsc"); (*write code file*) - F := Files.New(name); Files.Set(R, F, 0); Files.WriteString(R, modid); - (*Files.WriteInt(R, key); *) (* o7 -> o2 *) - Files.WriteNum(R, key); - (*Files.WriteByte(R, version);*) - Files.WriteByte(R, SHORT(version)); - (*Files.WriteInt(R, size);*) - Files.WriteNum(R, size); + F := Files.New(name); Files.Set(R, F, 0); Files.WriteString(R, modid); Files.WriteInt(R, key); + (*Files.WriteByte(R, version);*) (* who writes like that? -- noch *) + Files.WriteByte(R, SHORT(SHORT(version))); (* voc adaptation by noch *) + Files.WriteInt(R, size); obj := ORB.topScope.next; WHILE (obj # NIL) & (obj.class = ORB.Mod) DO (*imports*) - IF obj.dsc # ORB.system THEN - Files.WriteString(R, obj(ORB.Module).orgname); - (*Files.WriteInt(R, obj.val) *) - Files.WriteNum(R, obj.val) - END ; + IF obj.dsc # ORB.system THEN Files.WriteString(R, obj(ORB.Module).orgname); Files.WriteInt(R, obj.val) END ; obj := obj.next END ; Files.Write(R, 0X); - (*Files.WriteInt(R, tdx*4);*) - Files.WriteNum(R, tdx*4); + Files.WriteInt(R, tdx*4); i := 0; - WHILE i < tdx DO - (*Files.WriteInt(R, data[i]); *) - Files.WriteNum(R, data[i]); - INC(i) - END ; (*type descriptors*) - (*Files.WriteInt(R, varsize - tdx*4);*) (*data*) - Files.WriteNum(R, varsize - tdx*4); (*data*) - (*Files.WriteInt(R, strx);*) - Files.WriteNum(R, strx); + WHILE i < tdx DO Files.WriteInt(R, data[i]); INC(i) END ; (*type descriptors*) + Files.WriteInt(R, varsize - tdx*4); (*data*) + Files.WriteInt(R, strx); FOR i := 0 TO strx-1 DO Files.Write(R, str[i]) END ; (*strings*) - (*Files.WriteInt(R, pc);*) (*code len*) - Files.WriteNum(R, pc); (*code len*) - FOR i := 0 TO pc-1 DO - (*Files.WriteInt(R, code[i]) *) - Files.WriteNum(R, code[i]) - END ; (*program*) + Files.WriteInt(R, pc); (*code len*) + FOR i := 0 TO pc-1 DO Files.WriteInt(R, code[i]) END ; (*program*) obj := ORB.topScope.next; WHILE obj # NIL DO (*commands*) IF (obj.exno # 0) & (obj.class = ORB.Const) & (obj.type.form = ORB.Proc) & (obj.type.nofpar = 0) & (obj.type.base = ORB.noType) THEN - Files.WriteString(R, obj.name); - (*Files.WriteInt(R, obj.val)*) - Files.WriteNum(R, obj.val) + Files.WriteString(R, obj.name); Files.WriteInt(R, obj.val) END ; obj := obj.next END ; Files.Write(R, 0X); - (*Files.WriteInt(R, nofent);*) - Files.WriteNum(R, nofent); - (*Files.WriteInt(R, entry);*) - Files.WriteNum(R, entry); + Files.WriteInt(R, nofent); Files.WriteInt(R, entry); obj := ORB.topScope.next; WHILE obj # NIL DO (*entries*) IF obj.exno # 0 THEN IF (obj.class = ORB.Const) & (obj.type.form = ORB.Proc) OR (obj.class = ORB.Var) THEN - (*Files.WriteInt(R, obj.val)*) - Files.WriteNum(R, obj.val) + Files.WriteInt(R, obj.val) ELSIF obj.class = ORB.Typ THEN - IF obj.type.form = ORB.Record THEN - (*Files.WriteInt(R, obj.type.len MOD 10000H)*) - Files.WriteNum(R, obj.type.len MOD 10000H) + IF obj.type.form = ORB.Record THEN Files.WriteInt(R, obj.type.len MOD 10000H) ELSIF (obj.type.form = ORB.Pointer) & ((obj.type.base.typobj = NIL) OR (obj.type.base.typobj.exno = 0)) THEN - (*Files.WriteInt(R, obj.type.base.len MOD 10000H)*) - Files.WriteNum(R, obj.type.base.len MOD 10000H) + Files.WriteInt(R, obj.type.base.len MOD 10000H) END END END ; @@ -1164,14 +1125,7 @@ MODULE ORG; (* NW 10.10.2013 code generator in Oberon-07 for RISC*) obj := obj.next END ; Files.WriteInt(R, -1); - (*Files.WriteInt(R, fixorgP);*) - Files.WriteNum(R, fixorgP); - (*Files.WriteInt(R, fixorgD);*) - Files.WriteNum(R, fixorgD); - (*Files.WriteInt(R, fixorgT);*) - Files.WriteNum(R, fixorgT); - (*Files.WriteInt(R, entry);*) - Files.WriteNum(R, entry); + Files.WriteInt(R, fixorgP); Files.WriteInt(R, fixorgD); Files.WriteInt(R, fixorgT); Files.WriteInt(R, entry); Files.Write(R, "O"); Files.Register(F) END Close; diff --git a/src/voc07R/ORP.Mod b/src/voc07R/ORP.Mod index 16010fd6..7c59e50f 100644 --- a/src/voc07R/ORP.Mod +++ b/src/voc07R/ORP.Mod @@ -1,11 +1,13 @@ -MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07*) - IMPORT Args, Out := Console, Texts, (*Oberon,*) ORS, ORB, ORG; - (*Author: Niklaus Wirth, 2011. +MODULE ORP; (*N. Wirth 1.7.97 / 7.6.2014 Oberon compiler for RISC in Oberon-07*) + IMPORT Texts := CompatTexts, Oberon, ORS, ORB, ORG; + (*Author: Niklaus Wirth, 2014. Parser of Oberon-RISC compiler. Uses Scanner ORS to obtain symbols (tokens), ORB for definition of data structures and for handling import and export, and ORG to produce binary code. ORP performs type checking and data allocation. Parser is target-independent, except for part of the handling of allocations.*) + TYPE INTEGER = LONGINT; (* voc adaptation by noch *) + TYPE PtrBase = POINTER TO PtrBaseDesc; PtrBaseDesc = RECORD (*list of names of pointer base types*) name: ORS.Ident; type: ORB.Type; next: PtrBase @@ -21,7 +23,7 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 modid: ORS.Ident; pbsList: PtrBase; (*list of names of pointer base types*) dummy: ORB.Object; - (*W: Texts.Writer;*) + W: Texts.Writer; PROCEDURE Check(s: INTEGER; msg: ARRAY OF CHAR); BEGIN @@ -166,8 +168,10 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 IF (t0.base = t1.base) & (t0.nofpar = t1.nofpar) THEN p0 := t0.dsc; p1 := t1.dsc; WHILE p0 # NIL DO - (*IF (p0.class = p1.class) & CompTypes(p0.type, p1.type, TRUE) & (ORD(p0.rdo) = ORD(p1.rdo)) THEN*) - IF (p0.class = p1.class) & CompTypes(p0.type, p1.type, TRUE) & (p0.rdo = p1.rdo) THEN + IF (p0.class = p1.class) & CompTypes(p0.type, p1.type, TRUE) & + (*(ORD(p0.rdo) = ORD(p1.rdo))*) + (p0.rdo = p1.rdo) (* voc adaptation by noch *) + THEN IF p0.type.form >= ORB.Array THEN com := CompTypes(p0.type, p1.type, (p0.class = ORB.Par)) END ; p0 := p0.next; p1 := p1.next ELSE p0 := NIL; com := FALSE @@ -207,7 +211,7 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 ELSIF (x.type.form = ORB.Array) & (par.type.form = ORB.Array) & (x.type.base.form = par.type.base.form) & (par.type.len < 0) THEN ORG.OpenArrayParam(x); - ELSIF (x.type.form = ORB.String) & (par.class = ORB.Par) & (par.type.form = ORB.Array) & + ELSIF (x.type.form = ORB.String) & varpar & par.rdo & (par.type.form = ORB.Array) & (par.type.base.form = ORB.Char) & (par.type.len < 0) THEN ORG.StringParam(x) ELSIF (par.type.form = ORB.Array) & (par.type.base.form = ORB.Int) & (par.type.size = x.type.size) THEN ORG.VarParam(x, par.type) @@ -314,11 +318,11 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 IF obj.class = ORB.SFunc THEN StandFunc(x, obj.val, obj.type) ELSE ORG.MakeItem(x, obj, level); selector(x); IF sym = ORS.lparen THEN - ORS.Get(sym); ORG.PrepCall(x, rx); ParamList(x); + ORS.Get(sym); IF (x.type.form = ORB.Proc) & (x.type.base.form # ORB.NoTyp) THEN - ORG.Call(x, rx); x.type := x.type.base - ELSE ORS.Mark("not a function") - END ; + ORG.PrepCall(x, rx); ParamList(x); ORG.Call(x, rx); x.type := x.type.base + ELSE ORS.Mark("not a function"); ParamList(x) + END END END ELSIF sym = ORS.int THEN ORG.MakeConstItem(x, ORB.intType, ORS.ival); ORS.Get(sym) @@ -472,6 +476,12 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 END END TypeCase; + PROCEDURE SkipCase; + BEGIN + WHILE sym # ORS.colon DO ORS.Get(sym) END ; + ORS.Get(sym); StatSequence + END SkipCase; + BEGIN (* StatSequence *) REPEAT (*sync*) obj := NIL; IF ~((sym = ORS.ident) OR (sym >= ORS.if) & (sym <= ORS.for) OR (sym >= ORS.semicolon)) THEN @@ -496,9 +506,10 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 END ELSIF sym = ORS.eql THEN ORS.Mark("should be :="); ORS.Get(sym); expression(y) ELSIF sym = ORS.lparen THEN (*procedure call*) - ORS.Get(sym); ORG.PrepCall(x, rx); ParamList(x); - IF (x.type.form = ORB.Proc) & (x.type.base.form = ORB.NoTyp) THEN ORG.Call(x, rx) - ELSE ORS.Mark("not a procedure") + ORS.Get(sym); + IF (x.type.form = ORB.Proc) & (x.type.base.form = ORB.NoTyp) THEN + ORG.PrepCall(x, rx); ParamList(x); ORG.Call(x, rx) + ELSE ORS.Mark("not a procedure"); ParamList(x) END ELSIF x.type.form = ORB.Proc THEN (*procedure call without parameters*) IF x.type.nofpar > 0 THEN ORS.Mark("missing parameters") END ; @@ -554,14 +565,16 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 ORS.Get(sym); IF sym = ORS.ident THEN qualident(obj); orgtype := obj.type; - IF ~((orgtype.form = ORB.Pointer) OR (orgtype.form = ORB.Record) & (obj.class = ORB.Par)) THEN - ORS.Mark("bad case var") - END ; - Check(ORS.of, "OF expected"); TypeCase(obj, x); L0 := 0; - WHILE sym = ORS.bar DO - ORS.Get(sym); ORG.FJump(L0); ORG.Fixup(x); obj.type := orgtype; TypeCase(obj, x) - END ; - ORG.Fixup(x); ORG.FixLink(L0); obj.type := orgtype + IF (orgtype.form = ORB.Pointer) OR (orgtype.form = ORB.Record) & (obj.class = ORB.Par) THEN + Check(ORS.of, "OF expected"); TypeCase(obj, x); L0 := 0; + WHILE sym = ORS.bar DO + ORS.Get(sym); ORG.FJump(L0); ORG.Fixup(x); obj.type := orgtype; TypeCase(obj, x) + END ; + ORG.Fixup(x); ORG.FixLink(L0); obj.type := orgtype + ELSE ORS.Mark("numeric case not implemented"); + Check(ORS.of, "OF expected"); SkipCase; + WHILE sym = ORS.bar DO SkipCase END + END ELSE ORS.Mark("ident expected") END ; Check(ORS.end, "no END") @@ -605,7 +618,7 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 ELSIF sym = ORS.comma THEN ORS.Get(sym); ArrayType(typ.base) ELSE ORS.Mark("missing OF"); typ.base := ORB.intType END ; - IF len >= 0 THEN typ.size := len * typ.base.size ELSE typ.size := 2*ORG.WordSize (*array desc*) END ; + IF len >= 0 THEN typ.size := (len * typ.base.size + 3) DIV 4 * 4 ELSE typ.size := 2*ORG.WordSize (*array desc*) END ; typ.form := ORB.Array; typ.len := len; type := typ END ArrayType; @@ -613,10 +626,10 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 VAR obj, obj0, new, bot, base: ORB.Object; typ, tp: ORB.Type; offset, off, n: LONGINT; - BEGIN NEW(typ); typ.form := ORB.NoTyp; typ.base := NIL; typ.mno := level; typ.nofpar := 0; - offset := 0; bot := NIL; + BEGIN NEW(typ); typ.form := ORB.NoTyp; typ.base := NIL; typ.mno := -level; typ.nofpar := 0; offset := 0; bot := NIL; IF sym = ORS.lparen THEN ORS.Get(sym); (*record extension*) + IF level # 0 THEN ORS.Mark("extension of local types not implemented") END ; IF sym = ORS.ident THEN qualident(base); IF base.class = ORB.Typ THEN @@ -651,7 +664,7 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 bot := obj; IF sym = ORS.semicolon THEN ORS.Get(sym) ELSIF sym # ORS.end THEN ORS.Mark(" ; or END") END END ; - typ.form := ORB.Record; typ.dsc := bot; typ.size := offset; type := typ + typ.form := ORB.Record; typ.dsc := bot; typ.size := (offset + 3) DIV 4 * 4; type := typ END RecordType; PROCEDURE FPSection(VAR adr: LONGINT; VAR nofpar: INTEGER); @@ -715,6 +728,11 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 END END FormalType0; + PROCEDURE CheckRecLevel(lev: INTEGER); + BEGIN + IF lev # 0 THEN ORS.Mark("ptr base must be global") END + END CheckRecLevel; + PROCEDURE Type0(VAR type: ORB.Type); VAR dmy: LONGINT; obj: ORB.Object; ptbase: PtrBase; BEGIN type := ORB.intType; (*sync*) @@ -736,13 +754,16 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 IF sym = ORS.ident THEN obj := ORB.thisObj(); ORS.Get(sym); IF obj # NIL THEN - IF (obj.class = ORB.Typ) & (obj.type.form IN {ORB.Record, ORB.NoTyp}) THEN type.base := obj.type + IF (obj.class = ORB.Typ) & (obj.type.form IN {ORB.Record, ORB.NoTyp}) THEN + CheckRecLevel(obj.lev); type.base := obj.type ELSE ORS.Mark("no valid base type") END - END ; - NEW(ptbase); ORS.CopyId(ptbase.name); ptbase.type := type; ptbase.next := pbsList; pbsList := ptbase + ELSE CheckRecLevel(level); (*enter into list of forward references to be fixed in Declarations*) + NEW(ptbase); ORS.CopyId(ptbase.name); ptbase.type := type; ptbase.next := pbsList; pbsList := ptbase + END ELSE Type(type.base); - IF type.base.form # ORB.Record THEN ORS.Mark("must point to record") END + IF type.base.form # ORB.Record THEN ORS.Mark("must point to record") END ; + CheckRecLevel(level) END ELSIF sym = ORS.procedure THEN ORS.Get(sym); ORB.OpenScope; @@ -768,11 +789,7 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 expression(x); IF (x.type.form = ORB.String) & (x.b = 2) THEN ORG.StrToChar(x) END ; ORB.NewObj(obj, id, ORB.Const); obj.expo := expo; - IF x.mode = ORB.Const THEN - obj.val := x.a; - (*obj.lev := x.b;*) - obj.lev := SHORT(x.b); - obj.type := x.type + IF x.mode = ORB.Const THEN obj.val := x.a; obj.lev := x.b; obj.type := x.type ELSE ORS.Mark("expression not constant"); obj.type := ORB.intType END; Check(ORS.semicolon, "; missing") @@ -789,12 +806,9 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 IF tp.form = ORB.Record THEN ptbase := pbsList; (*check whether this is base of a pointer type; search and fixup*) WHILE ptbase # NIL DO - IF obj.name = ptbase.name THEN - IF ptbase.type.base = ORB.intType THEN ptbase.type.base := obj.type ELSE ORS.Mark("recursive record?") END - END ; + IF obj.name = ptbase.name THEN ptbase.type.base := obj.type END ; ptbase := ptbase.next END ; - tp.len := dc; IF level = 0 THEN ORG.BuildTD(tp, dc) END (*type descriptor; len used as its address*) END ; Check(ORS.semicolon, "; missing") @@ -835,7 +849,6 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 IF sym = ORS.times THEN ORS.Get(sym); int := TRUE END ; IF sym = ORS.ident THEN ORS.CopyId(procid); ORS.Get(sym); - (*Texts.WriteLn(W); Texts.WriteString(W, procid); Texts.WriteInt(W, ORG.Here(), 7);*) ORB.NewObj(proc, ORS.id, ORB.Const); parblksize := 4; NEW(type); type.form := ORB.Proc; type.size := ORG.WordSize; proc.type := type; CheckExport(proc.expo); @@ -875,25 +888,15 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 VAR key: LONGINT; obj: ORB.Object; impid, impid1: ORS.Ident; - BEGIN - (*Texts.WriteString(W, " compiling "); *) - Out.String(" compiling "); - ORS.Get(sym); + BEGIN Texts.WriteString(W, " compiling "); ORS.Get(sym); IF sym = ORS.module THEN ORS.Get(sym); - IF sym = ORS.times THEN - version := 0; - (*Texts.Write(W, "*"); *) - Out.Char("*"); - ORS.Get(sym) - ELSE - version := 1 - END ; + IF sym = ORS.times THEN version := 0; Texts.Write(W, "*"); ORS.Get(sym) ELSE version := 1 END ; ORB.Init; ORB.OpenScope; IF sym = ORS.ident THEN ORS.CopyId(modid); ORS.Get(sym); - (*Texts.WriteString(W, modid); Texts.Append(Oberon.Log, W.buf)*) - Out.String(modid); Out.Ln + Texts.WriteString(W, modid); Texts.Append(Oberon.Log, W.buf); + Oberon.DumpLog; (* voc adaptation; -- noch *) ELSE ORS.Mark("identifier expected") END ; Check(ORS.semicolon, "no ;"); level := 0; dc := 0; exno := 1; key := 0; @@ -927,30 +930,22 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 ELSE ORS.Mark("identifier missing") END ; IF sym # ORS.period THEN ORS.Mark("period missing") END ; - IF ORS.errcnt = 0 THEN + IF (ORS.errcnt = 0) & (version # 0) THEN ORB.Export(modid, newSF, key); - IF newSF THEN - (*Texts.WriteLn(W); Texts.WriteString(W, "new symbol file ") *) - Out.Ln; Out.String("new symbol file ") - END + IF newSF THEN Texts.WriteString(W, " new symbol file") END END ; IF ORS.errcnt = 0 THEN - ORG.Close(modid, key, exno); - (*Texts.WriteLn(W); Texts.WriteString(W, "compilation done ");*) - Out.Ln; Out.String("compilation done "); - (*Texts.WriteInt(W, ORG.pc, 6); Texts.WriteInt(W, dc, 6)*) - Out.Int(ORG.pc, 6); Out.Int(dc, 6) - ELSE - (*Texts.WriteLn(W); Texts.WriteString(W, "compilation FAILED")*) - Out.Ln; Out.String("compilation FAILED") + ORG.Close(modid, key, exno); + Texts.WriteInt(W, ORG.pc, 6); Texts.WriteInt(W, dc, 6); Texts.WriteHex(W, key) + ELSE Texts.WriteLn(W); Texts.WriteString(W, "compilation FAILED") END ; - (*Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);*) - Out.Ln; + Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); + Oberon.DumpLog; (* voc adaptation; -- noch *) ORB.CloseScope; pbsList := NIL ELSE ORS.Mark("must start with MODULE") END END Module; -(* + PROCEDURE Option(VAR S: Texts.Scanner); BEGIN newSF := FALSE; IF S.nextCh = "/" THEN @@ -958,24 +953,12 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 IF (S.class = Texts.Name) & (S.s[0] = "s") THEN newSF := TRUE END END END Option; -*) - PROCEDURE Option(VAR s: ARRAY OF CHAR); - BEGIN - newSF := FALSE; - IF s[0] = "-" THEN - IF s[1] = "s" THEN newSF := TRUE END - END - END Option; PROCEDURE Compile*; VAR beg, end, time: LONGINT; - (*T: Texts.Text; - S: Texts.Scanner;*) - s, name : ARRAY 32 OF CHAR; - T : Texts.Text; - BEGIN - (*Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); - Texts.Scan(S); + T: Texts.Text; + S: Texts.Scanner; + BEGIN Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S); IF S.class = Texts.Char THEN IF S.c = "@" THEN Option(S); Oberon.GetSelection(T, beg, end, time); @@ -995,35 +978,20 @@ MODULE ORP; (*N. Wirth 1.7.97 / 5.11.2013 Oberon compiler for RISC in Oberon-07 NEW(T); Texts.Open(T, S.s); IF T.len > 0 THEN Option(S); ORS.Init(T, 0); Module ELSE Texts.WriteString(W, S.s); Texts.WriteString(W, " not found"); - Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) + Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); + Oberon.DumpLog; (* voc adaptation; -- noch *) END ; IF (T.len # 0) & (ORS.errcnt = 0) THEN Texts.Scan(S) ELSE S.class := 0 END END END ; Oberon.Collect(0) - *) - IF Args.argc <= 1 THEN HALT(1) END; - Args.Get (1, s); - Option(s); - IF s[0] = "-" THEN - IF Args.argc < 3 THEN Out.String ("module name expected"); Out.Ln; HALT(1) END; - Args.Get(2, name); - ELSE - COPY(s, name); - END; - NEW(T); - Texts.Open(T, name); - IF T.len > 0 THEN - ORS.Init(T, 0); Module - ELSE - Out.String ("module not found"); Out.Ln - END; END Compile; -BEGIN (*Texts.OpenWriter(W); Texts.WriteString(W, "OR Compiler 5.11.2013");*) - Out.String("OR Compiler 5.11.2013"); Out.Ln; - (*Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf);*) +BEGIN Texts.OpenWriter(W); Texts.WriteString(W, "OR Compiler 7.6.2014"); + Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); + Oberon.DumpLog; (* voc adaptation; -- noch *) NEW(dummy); dummy.class := ORB.Var; dummy.type := ORB.intType; expression := expression0; Type := Type0; FormalType := FormalType0; - Compile; + + Compile (* voc adaptation; -- noch *) END ORP. diff --git a/src/voc07R/ORS.Mod b/src/voc07R/ORS.Mod index fddb871f..c6909944 100644 --- a/src/voc07R/ORS.Mod +++ b/src/voc07R/ORS.Mod @@ -1,5 +1,7 @@ -MODULE ORS; (* NW 19.9.93 / 10.10.2013 Scanner in Oberon-07*) - IMPORT SYSTEM, Texts, Console, S := SYSTEM; +MODULE ORS; (* NW 19.9.93 / 1.4.2014 Scanner in Oberon-07*) + IMPORT SYSTEM, Texts := CompatTexts, Oberon; + + TYPE INTEGER = LONGINT; (* voc adaptation by noch *) (* Oberon Scanner does lexical analysis. Input is Oberon-Text, output is sequence of symbols, i.e identifiers, numbers, strings, and special symbols. @@ -10,7 +12,7 @@ MODULE ORS; (* NW 19.9.93 / 10.10.2013 Scanner in Oberon-07*) If Get delivers ident, then the identifier (a string) is in variable id, if int or char in ival, if real in rval, and if string in str (and slen) *) - CONST IdLen* = 32; WS = 4; (*Word size*) + CONST IdLen* = 32; NKW = 34; (*nof keywords*) maxExp = 38; stringBufSize = 256; @@ -29,7 +31,6 @@ MODULE ORS; (* NW 19.9.93 / 10.10.2013 Scanner in Oberon-07*) else* = 55; elsif* = 56; until* = 57; return* = 58; array* = 60; record* = 61; pointer* = 62; const* = 63; type* = 64; var* = 65; procedure* = 66; begin* = 67; import* = 68; module* = 69; - eof = 70; TYPE Ident* = ARRAY IdLen OF CHAR; @@ -60,8 +61,9 @@ MODULE ORS; (* NW 19.9.93 / 10.10.2013 Scanner in Oberon-07*) VAR p: LONGINT; BEGIN p := Pos(); IF (p > errpos) & (errcnt < 25) THEN - Console.Ln; Console.String(" pos "); Console.Int(p, 1); Console.Char(" "); - Console.String(msg) + Texts.WriteLn(W); Texts.WriteString(W, " pos "); Texts.WriteInt(W, p, 1); Texts.Write(W, " "); + Texts.WriteString(W, msg); Texts.Append(Oberon.Log, W.buf); + Oberon.DumpLog; END ; INC(errcnt); errpos := p + 4 END Mark; @@ -124,7 +126,7 @@ MODULE ORS; (* NW 19.9.93 / 10.10.2013 Scanner in Oberon-07*) END Ten; PROCEDURE Number(VAR sym: INTEGER); - CONST max = 2147483647 (*2^31*); maxM = 16777216; (*2^24*) + CONST max = 2147483647 (*2^31 - 1*); VAR i, k, e, n, s, h: LONGINT; x: REAL; d: ARRAY 16 OF INTEGER; negE: BOOLEAN; @@ -149,25 +151,24 @@ MODULE ORS; (* NW 19.9.93 / 10.10.2013 Scanner in Oberon-07*) IF ch = "." THEN (*double dot*) ch := 7FX; (*decimal integer*) REPEAT IF d[i] < 10 THEN - h := k*10 + d[i]; - IF h < max THEN k := h ELSE Mark("too large") END + IF k <= (max-d[i]) DIV 10 THEN k := k *10 + d[i] ELSE Mark("too large"); k := 0 END ELSE Mark("bad integer") END ; INC(i) UNTIL i = n; sym := int; ival := k ELSE (*real number*) x := 0.0; e := 0; - REPEAT (*integer part*) h := k*10 + d[i]; - IF h < maxM THEN k := h ELSE Mark("too many digits") END ; - INC(i) - UNTIL i = n; - WHILE (ch >= "0") & (ch <= "9") DO (*fraction*) - h := k*10 + ORD(ch) - 30H; - IF h < maxM THEN k := h ELSE Mark("too many digits*") END ; - DEC(e); Texts.Read(R, ch) + REPEAT (*integer part*) + (*x := x * 10.0 + FLT(d[i]); *) + x := x * 10.0 + (d[i]); (* voc adaptation by noch *) + INC(i) + UNTIL i = n; + WHILE (ch >= "0") & (ch <= "9") DO (*fraction*) + (*x := x * 10.0 + FLT(ORD(ch) - 30H);*) + x := x * 10.0 + (ORD(ch) - 30H); (* voc adaptation by noch *) + DEC(e); + Texts.Read(R, ch) END ; - (*x := FLT(k);*) - x := S.VAL(REAL, k); IF (ch = "E") OR (ch = "D") THEN (*scale factor*) Texts.Read(R, ch); s := 0; IF ch = "-" THEN negE := TRUE; Texts.Read(R, ch) @@ -275,8 +276,9 @@ MODULE ORS; (* NW 19.9.93 / 10.10.2013 Scanner in Oberon-07*) PROCEDURE EnterKW(sym: INTEGER; name: ARRAY OF CHAR); BEGIN (*keyTab[k].id := name; *) - COPY(name, keyTab[k].id); - keyTab[k].sym := sym; INC(k) + COPY(name, keyTab[k].id); (* voc adaptation by noch *) + keyTab[k].sym := sym; + INC(k) END EnterKW; BEGIN Texts.OpenWriter(W); k := 0; KWX[0] := 0; KWX[1] := 0; diff --git a/src/voc07R/Oberon.Mod b/src/voc07R/Oberon.Mod new file mode 100644 index 00000000..736d664c --- /dev/null +++ b/src/voc07R/Oberon.Mod @@ -0,0 +1,103 @@ +MODULE Oberon; + +IMPORT Args, Strings, Texts := CompatTexts, (*Files := CompatFiles,*) Out := Console; + +VAR Log*: Texts.Text; + + Par*: RECORD + text*: Texts.Text; + pos* : LONGINT; + END; + +arguments : ARRAY 2048 OF CHAR; + +PROCEDURE GetSelection* (VAR text: Texts.Text; VAR beg, end, time: LONGINT); + (*VAR M: SelectionMsg;*) + BEGIN + (*M.time := -1; Viewers.Broadcast(M); time := M.time; + IF time >= 0 THEN text := M.text; beg := M.beg; end := M.end END*) + END GetSelection; + +PROCEDURE Collect*( count : LONGINT); +BEGIN + +END Collect; + +PROCEDURE ArgsToString(VAR opts : ARRAY OF CHAR); +VAR i : INTEGER; + opt : ARRAY 256 OF CHAR; +BEGIN + + i := 1; + opt := ""; COPY ("", opts); + + WHILE i < Args.argc DO + Args.Get(i, opt); + Strings.Append(opt, opts);(* Strings.Append (" ", opts);*) + INC(i) + END; + +END ArgsToString; + +PROCEDURE StringToText(VAR arguments : ARRAY OF CHAR; VAR T : Texts.Text); +VAR + W : Texts.Writer; +BEGIN + Texts.OpenWriter(W); + Texts.WriteString(W, arguments); + Texts.Append (T, W.buf); +END StringToText; +(* +PROCEDURE WriteTextToFile(VAR T : Texts.Text; filename : ARRAY OF CHAR); + VAR f : Files.File; r : Files.Rider; +BEGIN + f := Files.New(filename); + Files.Set(r, f, 0); + Texts.Store(r, T); + Files.Register(f); +END WriteTextToFile; +*) +PROCEDURE TextToString(VAR T : Texts.Text; VAR string : ARRAY OF CHAR); + VAR R : Texts.Reader; + ch : CHAR; + i : LONGINT; +BEGIN + COPY("", string); + Texts.OpenReader(R, T, 0); + i := 0; + WHILE Texts.Pos(R) < T.len DO + Texts.Read(R, ch); + string[i] := ch; + INC(i); + END; + (*string[i] := 0X;*) +END TextToString; + +PROCEDURE DumpLog*; +VAR s : POINTER TO ARRAY OF CHAR; +BEGIN + NEW(s, Log.len + 1); + COPY("", s^); + TextToString(Log, s^); + Out.String(s^); Out.Ln; + + NEW(Log); + Texts.Open(Log, ""); +END DumpLog; + + +BEGIN + NEW(Log); + Texts.Open(Log, ""); + + NEW(Par.text); + Texts.Open(Par.text, ""); + Par.pos := 0; + + COPY("", arguments); + ArgsToString(arguments); + StringToText(arguments, Par.text); + (*WriteTextToFile(Par.text, "params.txt");*) + (*WriteTextToFile(Log, "log.txt");*) + (*DumpLog;*) +END Oberon. diff --git a/src/voc07R/makefile b/src/voc07R/makefile index dffd2946..7f9f03bd 100644 --- a/src/voc07R/makefile +++ b/src/voc07R/makefile @@ -7,7 +7,9 @@ all: #$(VOC0) -s ORS.Mod #$(VOC0) -s ORB.Mod #$(VOC0) -s ORG.Mod - $(VOC0) -s ORS.Mod ORB.Mod ORG.Mod ORP.Mod -M + $(VOC0) -s CompatFiles.Mod \ + Fonts.Mod CompatTexts.Mod Oberon.Mod \ + ORS.Mod ORB.Mod ORG.Mod ORP.Mod -M test: ./ORP -s test.Mod diff --git a/voc b/voc index c2141d5ead9b48d2d3e1f3cb25fb884e3671608d..83842f359842b851cdb948a605d2f45392e7573c 100755 GIT binary patch delta 222328 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 G=L7)snWDA;