From c5f0e1e345d7f4444793c720cdcfc9c9c192e32a Mon Sep 17 00:00:00 2001 From: norayr Date: Wed, 7 Dec 2016 17:43:09 +0400 Subject: [PATCH 1/9] added original Beautifier module. --- src/tools/beautifier/Beautifier.Mod | Bin 0 -> 36838 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/tools/beautifier/Beautifier.Mod diff --git a/src/tools/beautifier/Beautifier.Mod b/src/tools/beautifier/Beautifier.Mod new file mode 100644 index 0000000000000000000000000000000000000000..27abc010490318052e684530ba1f4311ab124f8d GIT binary patch literal 36838 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 Date: Wed, 7 Dec 2016 17:44:01 +0400 Subject: [PATCH 2/9] ocat fixed --- src/tools/ocat/OCatCmd.Mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/ocat/OCatCmd.Mod b/src/tools/ocat/OCatCmd.Mod index 030011a1..3d76a745 100644 --- a/src/tools/ocat/OCatCmd.Mod +++ b/src/tools/ocat/OCatCmd.Mod @@ -2,7 +2,7 @@ MODULE OCatCmd; (* J. Templ, 13-Jan-96 *) (* looks at the OBERON search path and writes one or more Oberon or ascii texts to standard out *) - IMPORT Args, Console, Files := Files0, Texts := Texts0; + IMPORT Args, Console, Files, Texts; PROCEDURE Cat*; VAR path: ARRAY 128 OF CHAR; i: INTEGER; T: Texts.Text; R: Texts.Reader; ch: CHAR; tab: BOOLEAN; From ada56e2770150a74484ed9da69b25e230382a4e1 Mon Sep 17 00:00:00 2001 From: norayr Date: Wed, 7 Dec 2016 17:44:45 +0400 Subject: [PATCH 3/9] Beautifier converted to plain ascii file. --- src/tools/beautifier/Beautifier.Mod | Bin 36838 -> 23291 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/tools/beautifier/Beautifier.Mod b/src/tools/beautifier/Beautifier.Mod index 27abc010490318052e684530ba1f4311ab124f8d..0a822d43ed96fe02f2dd5bde0f10ac5ed5eff6fd 100644 GIT binary patch literal 23291 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 Date: Wed, 7 Dec 2016 18:57:55 +0400 Subject: [PATCH 4/9] Beautifier compiled --- src/tools/beautifier/Beautifier.Mod | 86 ++++++++++++++++------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/src/tools/beautifier/Beautifier.Mod b/src/tools/beautifier/Beautifier.Mod index 0a822d43..c87712d6 100644 --- a/src/tools/beautifier/Beautifier.Mod +++ b/src/tools/beautifier/Beautifier.Mod @@ -1,6 +1,6 @@ MODULE Beautifier; -IMPORT FoldElems, Fonts, Oberon, Out, Strings, TextFrames, Texts, Viewers, MenuViewers; +IMPORT Oberon, Out, Strings, Texts; CONST Tab = 09X; LF = 0DX; @@ -23,7 +23,7 @@ VAR fC, lC: ARRAY 23 OF INTEGER; hashT: ARRAY 51 OF Keyword; -PROCEDURE (VAR k: Keyword) Init (s: ARRAY 10 OF CHAR; class: SHORTINT); +PROCEDURE (VAR k: Keyword) Init (s: ARRAY (*10*) OF CHAR; class: SHORTINT); BEGIN COPY(s, k.word); k.class := class @@ -66,7 +66,7 @@ BEGIN END END END passProcHead; - +(* PROCEDURE MarkedViewer (): TextFrames.Frame; VAR v: Viewers.Viewer; BEGIN @@ -77,17 +77,17 @@ BEGIN RETURN NIL END END MarkedViewer; - +*) PROCEDURE NoNotify (t: Texts.Text; op: INTEGER; beg, end: LONGINT); END NoNotify; PROCEDURE ParseCmdLine (VAR bText: Texts.Text; VAR oldNotifier: Texts.Notifier); VAR beg, end, time: LONGINT; - f: TextFrames.Frame; + (*f: TextFrames.Frame;*) par: Oberon.ParList; s: Texts.Scanner; t: Texts.Text; - +(* PROCEDURE OpenText (fileName: ARRAY OF CHAR; VAR t: Texts.Text; VAR f: TextFrames.Frame); VAR menuF: TextFrames.Frame; v: Viewers.Viewer; x, y: INTEGER; BEGIN @@ -97,13 +97,21 @@ BEGIN Oberon.AllocateUserViewer(0, x, y); v := MenuViewers.New(menuF, f, TextFrames.menuH, x, y) END OpenText; +*) +PROCEDURE OpenText (fileName: ARRAY OF CHAR; VAR t: Texts.Text); +BEGIN + NEW(t); + Texts.Open(t, fileName); +END OpenText; BEGIN oldNotifier := NIL; par := Oberon.Par; Texts.OpenScanner(s, par.text, par.pos); Texts.Scan(s); IF s.class = Texts.Name THEN (* Called by filename *) - OpenText(s.s, bText, f) + (*OpenText(s.s, bText, f)*) + OpenText(s.s, bText) + (* ELSIF (s.class = Texts.Char) & (s.c = "*") THEN (* Called by selected viewer *) f := MarkedViewer() ELSIF (s.class = Texts.Char) & (s.c = "^") THEN (* Called by selection *) @@ -114,17 +122,18 @@ BEGIN OpenText(s.s, bText, f) END END + *) (* commented out oberon system specific parts. -- noch *) END; - IF f # NIL THEN + (*IF f # NIL THEN bText := f.text; oldNotifier := f.text.notify; bText.notify := NoNotify ELSE Out.String("Could not find TextFrames.Frame. Program aborted."); Out.Ln; HALT(99) - END + END*) END ParseCmdLine; - +(* PROCEDURE GetFontsFromText (bText: Texts.Text; VAR expNamFnt, cmtFnt: Fonts.Font); VAR r: Texts.Reader; @@ -145,7 +154,7 @@ BEGIN Strings.Insert("i", i, italicfont); cmtFnt := Fonts.This(italicfont) END GetFontsFromText; - +*) PROCEDURE UpdateText (bText: Texts.Text; oldNotifier: Texts.Notifier); BEGIN IF oldNotifier # NIL THEN @@ -273,7 +282,7 @@ BEGIN END END END IndentCheck; - +(* PROCEDURE ChangeFont (bText: Texts.Text; expNamFnt, cmtFnt: Fonts.Font); VAR s: Texts.Scanner; ch: CHAR; oPos, pos: LONGINT; exp: BOOLEAN; noExpLine: INTEGER; @@ -316,21 +325,22 @@ BEGIN END END END ChangeFont; - +*) PROCEDURE Format*; VAR - bText: Texts.Text; oldNotifier: Texts.Notifier; expNamFnt, cmtFnt: Fonts.Font; + bText: Texts.Text; oldNotifier: Texts.Notifier;(* expNamFnt, cmtFnt: Fonts.Font;*) BEGIN bText := NIL; oldNotifier := NIL; ParseCmdLine(bText, oldNotifier); IF bText = NIL THEN - Out.String("Usage: Beautifier.Format * | ^ | Filename.Mod"); Out.Ln + (*Out.String("Usage: Beautifier.Format * | ^ | Filename.Mod"); Out.Ln*) + Out.String("Usage: beautifier Filename.Mod"); Out.Ln ELSE - GetFontsFromText(bText, expNamFnt, cmtFnt); + (*GetFontsFromText(bText, expNamFnt, cmtFnt); FoldElems.ExpandAll(bText, 0, TRUE); - ChangeFont(bText, expNamFnt, cmtFnt); + ChangeFont(bText, expNamFnt, cmtFnt);*) IndentCheck(bText); - FoldElems.CollapseAll(bText, {FoldElems.tempLeft}); + (*FoldElems.CollapseAll(bText, {FoldElems.tempLeft});*) UpdateText(bText, oldNotifier) END END Format; @@ -384,16 +394,16 @@ BEGIN IF bText = NIL THEN Out.String("Usage: Beautifier.RemSemicolons * | ^ | Filename.Mod"); Out.Ln ELSE - FoldElems.ExpandAll(bText, 0, TRUE); + (*FoldElems.ExpandAll(bText, 0, TRUE);*) RemSemicolons(bText); - FoldElems.CollapseAll(bText, {FoldElems.tempLeft}); + (*FoldElems.CollapseAll(bText, {FoldElems.tempLeft});*) UpdateText(bText, oldNotifier) END END RemoveSemicolons; PROCEDURE FoldProcedures (bText: Texts.Text); - VAR s: Texts.Scanner; start, end: LONGINT; procName: ARRAY 24 OF CHAR; err: BOOLEAN; ch: CHAR; e: FoldElems.Elem; te: Texts.Elem; + VAR s: Texts.Scanner; start, end: LONGINT; procName: ARRAY 24 OF CHAR; err: BOOLEAN; ch: CHAR; (*e: FoldElems.Elem;*) te: Texts.Elem; BEGIN Texts.OpenScanner(s, bText, 0); Texts.Scan(s); @@ -404,7 +414,7 @@ BEGIN start := Texts.Pos(s); (* --- Read to end of line *) Texts.Read(s, ch); - WHILE (ch # LF) & ((s.elem = NIL) OR ~(s.elem IS FoldElems.Elem)) DO Texts.Read(s, ch) END; + WHILE (ch # LF) & ((s.elem = NIL)(* OR ~(s.elem IS FoldElems.Elem)*)) DO Texts.Read(s, ch) END; te := s.elem; (* --- find end of procedure *) @@ -420,7 +430,7 @@ BEGIN END; (* --- Check, whether Procedure has not yet been folded *) - IF (te = NIL) OR ~(te IS FoldElems.Elem) THEN + (*IF (te = NIL) OR ~(te IS FoldElems.Elem) THEN (* --- Insert FoldElems *) NEW(e); e.mode := FoldElems.expRight; e.W := FoldElems.elemW; e.H := FoldElems.elemH; e.handle := FoldElems.FoldHandler; e.visible := TRUE; Texts.WriteElem(w, e); Texts.Insert(bText, end, w.buf); @@ -428,14 +438,14 @@ BEGIN e.handle := FoldElems.FoldHandler; NEW(e.hidden); Texts.OpenBuf(e.hidden); e.visible := TRUE; Texts.WriteElem(w, e); Texts.Insert(bText, start, w.buf); Texts.OpenScanner(s, bText, end) - END + END*) END ELSIF (s.class = Texts.Name) & (s.s = "BEGIN") THEN (* Fold Module-Body *) start := Texts.Pos(s) - 1; Texts.OpenReader(s, bText, start); (* --- Read to end of line *) Texts.Read(s, ch); - WHILE (ch # LF) & ((s.elem = NIL) OR ~(s.elem IS FoldElems.Elem)) DO Texts.Read(s, ch) END; + WHILE (ch # LF) & ((s.elem = NIL)(* OR ~(s.elem IS FoldElems.Elem)*)) DO Texts.Read(s, ch) END; te := s.elem; (* --- Find end of Module *) @@ -447,7 +457,7 @@ BEGIN END END; (* --- Check, whether Procedure has not yet been folded *) - IF (te = NIL) OR ~(te IS FoldElems.Elem) THEN + (*IF (te = NIL) OR ~(te IS FoldElems.Elem) THEN (* --- Insert FoldElems *) NEW(e); e.mode := FoldElems.expRight; e.W := FoldElems.elemW; e.H := FoldElems.elemH; e.handle := FoldElems.FoldHandler; e.visible := TRUE; Texts.WriteElem(w, e); Texts.Insert(bText, end, w.buf); @@ -455,7 +465,7 @@ BEGIN e.handle := FoldElems.FoldHandler; NEW(e.hidden); Texts.OpenBuf(e.hidden); e.visible := TRUE; Texts.WriteElem(w, e); Texts.Insert(bText, start, w.buf); Texts.OpenScanner(s, bText, end) - END + END*) ELSIF (s.class = Texts.Char) & (s.c = "(") & (s.nextCh = "*") THEN passComments(s) END; @@ -470,9 +480,9 @@ BEGIN IF bText = NIL THEN Out.String("Usage: Beautifier.FoldProc * | ^ | Filename.Mod"); Out.Ln ELSE - FoldElems.ExpandAll(bText, 0, TRUE); + (*FoldElems.ExpandAll(bText, 0, TRUE);*) FoldProcedures(bText); - FoldElems.CollapseAll(bText, {FoldElems.tempLeft}); + (*FoldElems.CollapseAll(bText, {FoldElems.tempLeft});*) UpdateText(bText, oldNotifier) END END FoldProc; @@ -643,31 +653,32 @@ BEGIN IF bText = NIL THEN Out.String("Usage: Beautifier.SpaceOps * | ^ | Filename.Mod"); Out.Ln ELSE - FoldElems.ExpandAll(bText, 0, TRUE); + (*FoldElems.ExpandAll(bText, 0, TRUE);*) SpaceOperators(bText); SpaceFormParms(bText); RemSpaces(bText); - FoldElems.CollapseAll(bText, {FoldElems.tempLeft}); + (*FoldElems.CollapseAll(bText, {FoldElems.tempLeft});*) UpdateText(bText, oldNotifier) END END SpaceOps; PROCEDURE Beautify*; - VAR bText: Texts.Text; oldNotifier: Texts.Notifier; expNamFnt, cmtFnt: Fonts.Font; + VAR bText: Texts.Text; oldNotifier: Texts.Notifier; (*expNamFnt, cmtFnt: Fonts.Font;*) BEGIN ParseCmdLine(bText, oldNotifier); IF bText = NIL THEN - Out.String("Usage: Beautifier.SpaceOps * | ^ | Filename.Mod"); Out.Ln + (*Out.String("Usage: Beautifier.SpaceOps * | ^ | Filename.Mod"); Out.Ln*) + Out.String("Usage: Beautifier Filename.Mod"); Out.Ln ELSE - GetFontsFromText(bText, expNamFnt, cmtFnt); + (*GetFontsFromText(bText, expNamFnt, cmtFnt); FoldElems.ExpandAll(bText, 0, TRUE); - ChangeFont(bText, expNamFnt, cmtFnt); + ChangeFont(bText, expNamFnt, cmtFnt);*) IndentCheck(bText); RemSemicolons(bText); FoldProcedures(bText); SpaceOperators(bText); SpaceFormParms(bText); - FoldElems.CollapseAll(bText, {FoldElems.tempLeft}); + (*FoldElems.CollapseAll(bText, {FoldElems.tempLeft});*) UpdateText(bText, oldNotifier); END END Beautify; @@ -715,5 +726,6 @@ BEGIN Texts.OpenWriter(w); NEW(b); Texts.OpenBuf(b); - InitHashTable + InitHashTable; + Beautify END Beautifier. From 9f6c788219572da97e3aa0ab767a39ad5cc2e417 Mon Sep 17 00:00:00 2001 From: norayr Date: Wed, 7 Dec 2016 19:31:48 +0400 Subject: [PATCH 5/9] texts module can save plain ascii files with CloseAscii function. --- src/runtime/Texts.Mod | 80 +++++++++++++++++++++++++++++ src/tools/beautifier/Beautifier.Mod | 1 + 2 files changed, 81 insertions(+) diff --git a/src/runtime/Texts.Mod b/src/runtime/Texts.Mod index f20750d9..d6af078e 100644 --- a/src/runtime/Texts.Mod +++ b/src/runtime/Texts.Mod @@ -877,5 +877,85 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91** Files.Rename(name, bak, res); Files.Register(f) END Close; + PROCEDURE StoreAscii* (VAR r: Files.Rider; T: Text); + VAR r1: Files.Rider; u, un: Run; e: Elem; org, pos, delta, hlen, rlen: LONGINT; ecnt, fcnt: SHORTINT; ch: CHAR; (* << *) + fno: SYSTEM.INT8; + msg: FileMsg; iden: IdentifyMsg; + mods, procs: ARRAY 64, 32 OF CHAR; + fnts: ARRAY 32 OF FontsFont; + block: ARRAY 1024 OF CHAR; + + PROCEDURE StoreElem (VAR r: Files.Rider; pos: LONGINT; e: Elem); + VAR r1: Files.Rider; org, span: LONGINT; eno: SYSTEM.INT8; + BEGIN COPY(iden.mod, mods[ecnt]); COPY(iden.proc, procs[ecnt]); eno := 1; + WHILE (mods[eno] # iden.mod) OR (procs[eno] # iden.proc) DO INC(eno) END; + Files.Set(r1, Files.Base(r), Files.Pos(r)); + Files.WriteLInt(r, 0); Files.WriteLInt(r, 0); Files.WriteLInt(r, 0); (*fixup slot*) + Files.Write(r, eno); + IF eno = ecnt THEN INC(ecnt); Files.WriteString(r, iden.mod); Files.WriteString(r, iden.proc) END; + msg.pos := pos; org := Files.Pos(r); e.handle(e, msg); span := Files.Pos(r) - org; + Files.WriteLInt(r1, -span); Files.WriteLInt(r1, e.W); Files.WriteLInt(r1, e.H) (*fixup*) + END StoreElem; + + BEGIN + org := Files.Pos(r); msg.id := store; msg.r := r; (*Files.WriteLInt(msg.r, 0)*); (*fixup slot*) + u := T.head.next; pos := 0; delta := 0; fcnt := 1; ecnt := 1; + (*WHILE u # T.head DO + IF u IS Elem THEN iden.mod[0] := 0X; u(Elem).handle(u(Elem), iden) ELSE iden.mod[0] := 1X END; + IF iden.mod[0] # 0X THEN + fnts[fcnt] := u.fnt; fno := 1; + WHILE fnts[fno].name # u.fnt.name DO INC(fno) END; + Files.Write(msg.r, fno); + IF fno = fcnt THEN INC(fcnt); Files.WriteString(msg.r, u.fnt.name) END; + Files.Write(msg.r, u.col); Files.Write(msg.r, u.voff) + END; + IF u IS Piece THEN rlen := u.len; un := u.next; + WHILE (un IS Piece) & (un.fnt = u.fnt) & (un.col = u.col) & (un.voff = u.voff) DO + INC(rlen, un.len); un := un.next + END; + Files.WriteLInt(msg.r, rlen); INC(pos, rlen); u := un + ELSIF iden.mod[0] # 0X THEN StoreElem(msg.r, pos, u(Elem)); INC(pos); u := u.next + ELSE INC(delta); u := u.next + END + END; + Files.Write(msg.r, 0); Files.WriteLInt(msg.r, T.len - delta); + (*!!!hlen := Files.Pos(msg.r) - org;*) hlen := Files.Pos(msg.r) - org + 2; + Files.Set(r1, Files.Base(msg.r), org); Files.WriteLInt(r1, hlen); (*fixup*) + *) + Files.Set(r1, Files.Base(msg.r), 0); + u := T.head.next; + WHILE u # T.head DO + IF u IS Piece THEN + WITH u: Piece DO + IF u.ascii THEN Files.Set(r1, u.file, u.org); delta := u.len; (* << LF to CR *) + WHILE delta > 0 DO Files.Read(r1, ch); DEC(delta); + (*IF ch = 0AX THEN Files.Write(msg.r, CR) ELSE*) Files.Write(msg.r, ch); (*END*) + END + ELSE Files.Set(r1, u.file, u.org); delta := u.len; + WHILE delta > LEN(block) DO Files.ReadBytes(r1, block, LEN(block)); + Files.WriteBytes(msg.r, block, LEN(block)); DEC(delta, LEN(block)) + END; + Files.ReadBytes(r1, block, delta); Files.WriteBytes(msg.r, block, delta) + END + END + ELSE iden.mod[0] := 0X; u(Elem).handle(u(Elem), iden); + IF iden.mod[0] # 0X THEN Files.Write(msg.r, ElemChar) END + END; + u := u.next + END; + r := msg.r; + IF T.notify # NIL THEN T.notify(T, unmark, 0, 0) END + END StoreAscii; + + PROCEDURE CloseAscii* (T: Text; name: ARRAY OF CHAR); + VAR f: Files.File; r: Files.Rider; i, res: INTEGER; bak: ARRAY 64 OF CHAR; + BEGIN + f := Files.New(name); Files.Set(r, f, 0); (*Files.Write(r, textTag); Files.Write(r, version);*) StoreAscii(r, T); + i := 0; WHILE name[i] # 0X DO INC(i) END; + COPY(name, bak); bak[i] := "."; bak[i+1] := "B"; bak[i+2] := "a"; bak[i+3] := "k"; bak[i+4] := 0X; + Files.Rename(name, bak, res); Files.Register(f) + END CloseAscii; + + BEGIN del := NIL; NEW(FontsDefault); FontsDefault.name := "Syntax10.Scn.Fnt" END Texts. diff --git a/src/tools/beautifier/Beautifier.Mod b/src/tools/beautifier/Beautifier.Mod index c87712d6..a8b53f2d 100644 --- a/src/tools/beautifier/Beautifier.Mod +++ b/src/tools/beautifier/Beautifier.Mod @@ -680,6 +680,7 @@ BEGIN SpaceFormParms(bText); (*FoldElems.CollapseAll(bText, {FoldElems.tempLeft});*) UpdateText(bText, oldNotifier); + Texts.CloseAscii(bText, 'test'); END END Beautify; From 886c18303e77b7bde77276a4acc5f6fcae2b6b44 Mon Sep 17 00:00:00 2001 From: norayr Date: Wed, 7 Dec 2016 19:38:07 +0400 Subject: [PATCH 6/9] added dump text functions to beautifier. --- src/tools/beautifier/Beautifier.Mod | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/tools/beautifier/Beautifier.Mod b/src/tools/beautifier/Beautifier.Mod index a8b53f2d..a949c5e4 100644 --- a/src/tools/beautifier/Beautifier.Mod +++ b/src/tools/beautifier/Beautifier.Mod @@ -662,6 +662,31 @@ BEGIN END END SpaceOps; +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); + IF ch # 0DX THEN string[i] := ch ELSE string[i] := 0AX END; + INC(i); + END; + (*string[i] := 0X;*) +END TextToString; + +PROCEDURE DumpText(VAR t: Texts.Text); +VAR s : POINTER TO ARRAY OF CHAR; +BEGIN + NEW(s, t.len + 1); + COPY("", s^); + TextToString(t, s^); + Out.String(s^); Out.Ln; +END DumpText; + PROCEDURE Beautify*; VAR bText: Texts.Text; oldNotifier: Texts.Notifier; (*expNamFnt, cmtFnt: Fonts.Font;*) BEGIN @@ -680,7 +705,8 @@ BEGIN SpaceFormParms(bText); (*FoldElems.CollapseAll(bText, {FoldElems.tempLeft});*) UpdateText(bText, oldNotifier); - Texts.CloseAscii(bText, 'test'); + (*Texts.CloseAscii(bText, 'test');*) + DumpText(bText) END END Beautify; From e6532bfe234afa0095e1246a9b64fa0cd506ce9f Mon Sep 17 00:00:00 2001 From: norayr Date: Wed, 7 Dec 2016 19:40:08 +0400 Subject: [PATCH 7/9] reverted back Texts module changes. --- src/runtime/Texts.Mod | 82 +------------------------------------------ 1 file changed, 1 insertion(+), 81 deletions(-) diff --git a/src/runtime/Texts.Mod b/src/runtime/Texts.Mod index d6af078e..305b225d 100644 --- a/src/runtime/Texts.Mod +++ b/src/runtime/Texts.Mod @@ -341,7 +341,7 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91** IF (ch = 0AX) & u(Piece).ascii THEN ch := CR (* << LF to CR *) ELSIF (ch = CR) & u(Piece).ascii THEN (* << CR LF to CR *) pos := Files.Pos(R.rider); Files.Read(R.rider, nextch); - IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END + IF nextch = 0AX THEN INC(R.off) ELSE Files.Set(R.rider, u(Piece).file, pos) END END ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem) ELSE ch := 0X; R.elem := NIL; R.eot := TRUE @@ -877,85 +877,5 @@ MODULE Texts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91** Files.Rename(name, bak, res); Files.Register(f) END Close; - PROCEDURE StoreAscii* (VAR r: Files.Rider; T: Text); - VAR r1: Files.Rider; u, un: Run; e: Elem; org, pos, delta, hlen, rlen: LONGINT; ecnt, fcnt: SHORTINT; ch: CHAR; (* << *) - fno: SYSTEM.INT8; - msg: FileMsg; iden: IdentifyMsg; - mods, procs: ARRAY 64, 32 OF CHAR; - fnts: ARRAY 32 OF FontsFont; - block: ARRAY 1024 OF CHAR; - - PROCEDURE StoreElem (VAR r: Files.Rider; pos: LONGINT; e: Elem); - VAR r1: Files.Rider; org, span: LONGINT; eno: SYSTEM.INT8; - BEGIN COPY(iden.mod, mods[ecnt]); COPY(iden.proc, procs[ecnt]); eno := 1; - WHILE (mods[eno] # iden.mod) OR (procs[eno] # iden.proc) DO INC(eno) END; - Files.Set(r1, Files.Base(r), Files.Pos(r)); - Files.WriteLInt(r, 0); Files.WriteLInt(r, 0); Files.WriteLInt(r, 0); (*fixup slot*) - Files.Write(r, eno); - IF eno = ecnt THEN INC(ecnt); Files.WriteString(r, iden.mod); Files.WriteString(r, iden.proc) END; - msg.pos := pos; org := Files.Pos(r); e.handle(e, msg); span := Files.Pos(r) - org; - Files.WriteLInt(r1, -span); Files.WriteLInt(r1, e.W); Files.WriteLInt(r1, e.H) (*fixup*) - END StoreElem; - - BEGIN - org := Files.Pos(r); msg.id := store; msg.r := r; (*Files.WriteLInt(msg.r, 0)*); (*fixup slot*) - u := T.head.next; pos := 0; delta := 0; fcnt := 1; ecnt := 1; - (*WHILE u # T.head DO - IF u IS Elem THEN iden.mod[0] := 0X; u(Elem).handle(u(Elem), iden) ELSE iden.mod[0] := 1X END; - IF iden.mod[0] # 0X THEN - fnts[fcnt] := u.fnt; fno := 1; - WHILE fnts[fno].name # u.fnt.name DO INC(fno) END; - Files.Write(msg.r, fno); - IF fno = fcnt THEN INC(fcnt); Files.WriteString(msg.r, u.fnt.name) END; - Files.Write(msg.r, u.col); Files.Write(msg.r, u.voff) - END; - IF u IS Piece THEN rlen := u.len; un := u.next; - WHILE (un IS Piece) & (un.fnt = u.fnt) & (un.col = u.col) & (un.voff = u.voff) DO - INC(rlen, un.len); un := un.next - END; - Files.WriteLInt(msg.r, rlen); INC(pos, rlen); u := un - ELSIF iden.mod[0] # 0X THEN StoreElem(msg.r, pos, u(Elem)); INC(pos); u := u.next - ELSE INC(delta); u := u.next - END - END; - Files.Write(msg.r, 0); Files.WriteLInt(msg.r, T.len - delta); - (*!!!hlen := Files.Pos(msg.r) - org;*) hlen := Files.Pos(msg.r) - org + 2; - Files.Set(r1, Files.Base(msg.r), org); Files.WriteLInt(r1, hlen); (*fixup*) - *) - Files.Set(r1, Files.Base(msg.r), 0); - u := T.head.next; - WHILE u # T.head DO - IF u IS Piece THEN - WITH u: Piece DO - IF u.ascii THEN Files.Set(r1, u.file, u.org); delta := u.len; (* << LF to CR *) - WHILE delta > 0 DO Files.Read(r1, ch); DEC(delta); - (*IF ch = 0AX THEN Files.Write(msg.r, CR) ELSE*) Files.Write(msg.r, ch); (*END*) - END - ELSE Files.Set(r1, u.file, u.org); delta := u.len; - WHILE delta > LEN(block) DO Files.ReadBytes(r1, block, LEN(block)); - Files.WriteBytes(msg.r, block, LEN(block)); DEC(delta, LEN(block)) - END; - Files.ReadBytes(r1, block, delta); Files.WriteBytes(msg.r, block, delta) - END - END - ELSE iden.mod[0] := 0X; u(Elem).handle(u(Elem), iden); - IF iden.mod[0] # 0X THEN Files.Write(msg.r, ElemChar) END - END; - u := u.next - END; - r := msg.r; - IF T.notify # NIL THEN T.notify(T, unmark, 0, 0) END - END StoreAscii; - - PROCEDURE CloseAscii* (T: Text; name: ARRAY OF CHAR); - VAR f: Files.File; r: Files.Rider; i, res: INTEGER; bak: ARRAY 64 OF CHAR; - BEGIN - f := Files.New(name); Files.Set(r, f, 0); (*Files.Write(r, textTag); Files.Write(r, version);*) StoreAscii(r, T); - i := 0; WHILE name[i] # 0X DO INC(i) END; - COPY(name, bak); bak[i] := "."; bak[i+1] := "B"; bak[i+2] := "a"; bak[i+3] := "k"; bak[i+4] := 0X; - Files.Rename(name, bak, res); Files.Register(f) - END CloseAscii; - - BEGIN del := NIL; NEW(FontsDefault); FontsDefault.name := "Syntax10.Scn.Fnt" END Texts. From 1e15d47936a3cdfc2f21fe5a54cc3148b014e443 Mon Sep 17 00:00:00 2001 From: norayr Date: Wed, 7 Dec 2016 19:43:45 +0400 Subject: [PATCH 8/9] renamed to vbeautify, added makefile. -- noch --- src/tools/beautifier/makefile | 4 ++++ src/tools/beautifier/{Beautifier.Mod => vbeautify.Mod} | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 src/tools/beautifier/makefile rename src/tools/beautifier/{Beautifier.Mod => vbeautify.Mod} (99%) diff --git a/src/tools/beautifier/makefile b/src/tools/beautifier/makefile new file mode 100644 index 00000000..2108b547 --- /dev/null +++ b/src/tools/beautifier/makefile @@ -0,0 +1,4 @@ +VOC = /opt/voc/bin/voc + +all: + $(VOC) -m vbeautify.Mod diff --git a/src/tools/beautifier/Beautifier.Mod b/src/tools/beautifier/vbeautify.Mod similarity index 99% rename from src/tools/beautifier/Beautifier.Mod rename to src/tools/beautifier/vbeautify.Mod index a949c5e4..6480dbcf 100644 --- a/src/tools/beautifier/Beautifier.Mod +++ b/src/tools/beautifier/vbeautify.Mod @@ -1,4 +1,4 @@ -MODULE Beautifier; +MODULE vbeautify; IMPORT Oberon, Out, Strings, Texts; @@ -755,4 +755,4 @@ BEGIN Texts.OpenBuf(b); InitHashTable; Beautify -END Beautifier. +END vbeautify. From fd27239b2d10bec24536b5288126ee65a1184851 Mon Sep 17 00:00:00 2001 From: norayr Date: Wed, 7 Dec 2016 19:47:51 +0400 Subject: [PATCH 9/9] changed help to conform to the binary name. -- noch --- src/tools/beautifier/vbeautify.Mod | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/beautifier/vbeautify.Mod b/src/tools/beautifier/vbeautify.Mod index 6480dbcf..ef38edba 100644 --- a/src/tools/beautifier/vbeautify.Mod +++ b/src/tools/beautifier/vbeautify.Mod @@ -334,7 +334,7 @@ BEGIN ParseCmdLine(bText, oldNotifier); IF bText = NIL THEN (*Out.String("Usage: Beautifier.Format * | ^ | Filename.Mod"); Out.Ln*) - Out.String("Usage: beautifier Filename.Mod"); Out.Ln + Out.String("Usage: vbeautify Filename.Mod"); Out.Ln ELSE (*GetFontsFromText(bText, expNamFnt, cmtFnt); FoldElems.ExpandAll(bText, 0, TRUE); @@ -693,7 +693,7 @@ BEGIN ParseCmdLine(bText, oldNotifier); IF bText = NIL THEN (*Out.String("Usage: Beautifier.SpaceOps * | ^ | Filename.Mod"); Out.Ln*) - Out.String("Usage: Beautifier Filename.Mod"); Out.Ln + Out.String("Usage: vbeautify Filename.Mod"); Out.Ln ELSE (*GetFontsFromText(bText, expNamFnt, cmtFnt); FoldElems.ExpandAll(bText, 0, TRUE);