瀏覽代碼

Center line on error; partial VOC update

Arthur Yefimov 4 年之前
父節點
當前提交
3c2dbc5c91
共有 7 個文件被更改,包括 38 次插入31 次删除
  1. 1 1
      data/bin/compile.sh
  2. 1 1
      data/bin/link_console.sh
  3. 1 1
      data/bin/link_graph.sh
  4. 2 1
      src/Editor.Mod
  5. 8 6
      src/EditorText.Mod
  6. 15 12
      src/FreeOberon.Mod
  7. 10 9
      src/Makefile_linux

+ 1 - 1
data/bin/compile.sh

@@ -2,7 +2,7 @@
 # This script is run by Free Oberon on Linux. Current directory of the
 # This script is run by Free Oberon on Linux. Current directory of the
 # script will be where FreeOberon executable is located.
 # script will be where FreeOberon executable is located.
 cd bin
 cd bin
-VOCDIR=../data/bin/voc
+VOCDIR=../data/bin/voc/install
 VOC=$VOCDIR/bin/voc
 VOC=$VOCDIR/bin/voc
 $VOC -OC -cfF $2 ../Programs/$1
 $VOC -OC -cfF $2 ../Programs/$1
 retcode=$?
 retcode=$?

+ 1 - 1
data/bin/link_console.sh

@@ -3,7 +3,7 @@
 # script will be where FreeOberon executable is located. This
 # script will be where FreeOberon executable is located. This
 # particular script is for console programs.
 # particular script is for console programs.
 cd bin
 cd bin
-VOCDIR=../data/bin/voc
+VOCDIR=../data/bin/voc/install
 CC=gcc
 CC=gcc
 THENAME="${1%.*}"
 THENAME="${1%.*}"
 ONAME="${THENAME##*/}"
 ONAME="${THENAME##*/}"

+ 1 - 1
data/bin/link_graph.sh

@@ -3,7 +3,7 @@
 # script will be where FreeOberon executable is located. This
 # script will be where FreeOberon executable is located. This
 # particular script is for graphical programs.
 # particular script is for graphical programs.
 cd bin
 cd bin
-VOCDIR=../data/bin/voc
+VOCDIR=../data/bin/voc/install
 CC=gcc
 CC=gcc
 THENAME="${1%.*}"
 THENAME="${1%.*}"
 ONAME="${THENAME##*/}"
 ONAME="${THENAME##*/}"

+ 2 - 1
src/Editor.Mod

@@ -787,7 +787,8 @@ BEGIN OV.WindowMouseDown(c, x, y, button);
       IF x > L.len THEN x := L.len END;
       IF x > L.len THEN x := L.len END;
       t.x := x;
       t.x := x;
       T.GoToXY(c.x + x + 1, c.y + y + 1)
       T.GoToXY(c.x + x + 1, c.y + y + 1)
-    END
+    END;
+    PrintText(c(Editor))
   END
   END
 END EditorMouseDown;
 END EditorMouseDown;
 
 

+ 8 - 6
src/EditorText.Mod

@@ -449,9 +449,9 @@ BEGIN
   RETURN success
   RETURN success
 END LoadFromFile; 
 END LoadFromFile; 
 
 
-PROCEDURE (t: Text) MoveToPos*(pos: INTEGER);
-CONST centerY = 6;
-VAR i: INTEGER; L: Line;
+PROCEDURE (t: Text) MoveToPos*(pos, winH: INTEGER);
+CONST pad = 3;
+VAR i, centerY: INTEGER; L: Line;
 BEGIN
 BEGIN
   L := t.first; t.x := 0; t.y := 0;
   L := t.first; t.x := 0; t.y := 0;
   REPEAT
   REPEAT
@@ -468,9 +468,11 @@ BEGIN
   IF t.x < L.len THEN INC(t.x) END;
   IF t.x < L.len THEN INC(t.x) END;
   t.cur := L;
   t.cur := L;
 
 
-  i := centerY;
-  WHILE (L.prev # NIL) & (i > 0) DO L := L.prev; DEC(i) END;
-  t.scrY := t.y - centerY + i; t.scrFirst := L
+  IF (t.y < t.scrY + pad) OR (t.y >= t.scrY + winH - pad) THEN
+    centerY := winH DIV 2; i := centerY;
+    WHILE (L.prev # NIL) & (i > 0) DO L := L.prev; DEC(i) END;
+    t.scrY := t.y - centerY + i; t.scrFirst := L
+  END
 END MoveToPos;
 END MoveToPos;
 
 
 END EditorText.
 END EditorText.

+ 15 - 12
src/FreeOberon.Mod

@@ -19,7 +19,7 @@ along with Free Oberon.  If not, see <http://www.gnu.org/licenses/>.
 IMPORT G := Graph, T := Terminal, Files, Modules,
 IMPORT G := Graph, T := Terminal, Files, Modules,
        OV, Editor, Term, Config, Strings, Out;
        OV, Editor, Term, Config, Strings, Out;
 CONST
 CONST
-  version* = '1.0.3';
+  version* = '1.0.4';
 
 
   (* Direction of Selection *)
   (* Direction of Selection *)
   dirLeft  = 0;
   dirLeft  = 0;
@@ -216,8 +216,8 @@ BEGIN
   OV.DrawApp(app)
   OV.DrawApp(app)
 END FocusOrOpenFile;
 END FocusOrOpenFile;
 
 
-PROCEDURE ParseErrors(VAR s: ARRAY OF CHAR; filename: ARRAY OF CHAR);
-VAR i, j, pos, st, len, skip: INTEGER; found: BOOLEAN;
+PROCEDURE ParseErrors(VAR s: ARRAY OF CHAR; filename: ARRAY OF CHAR; VAR pos: INTEGER);
+VAR i, j, st, len, skip: INTEGER; found: BOOLEAN;
 BEGIN
 BEGIN
   StringsFindNext(' pos ', s, 0, found, i);
   StringsFindNext(' pos ', s, 0, found, i);
   IF found THEN (* Read the position *)
   IF found THEN (* Read the position *)
@@ -240,11 +240,7 @@ BEGIN
         WHILE (j > 0) & (s[j - 1] = ' ') DO DEC(j) END;
         WHILE (j > 0) & (s[j - 1] = ' ') DO DEC(j) END;
         s[j] := '.'; INC(j); s[j] := 0X;
         s[j] := '.'; INC(j); s[j] := 0X;
         (* Capitalize first letter (0th is a space). *)
         (* Capitalize first letter (0th is a space). *)
-        IF (s[1] >= 'a') & (s[1] <= 'z') THEN s[1] := CAP(s[1]) END;
-        FocusOrOpenFile(filename);
-        app.windows(Editor.Editor).text.MoveToPos(pos);
-        Editor.PrintText(app.windows(Editor.Editor));
-        T.ResetCursorBlink (* !FIXME *)
+        IF (s[1] >= 'a') & (s[1] <= 'z') THEN s[1] := CAP(s[1]) END
       END
       END
     END
     END
   END
   END
@@ -427,8 +423,9 @@ PROCEDURE RunCommand(filename: ARRAY OF CHAR;
     link, graph, main: BOOLEAN; list: StrList): BOOLEAN;
     link, graph, main: BOOLEAN; list: StrList): BOOLEAN;
 CONST bufLen = 20480;
 CONST bufLen = 20480;
 VAR buf: ARRAY bufLen OF CHAR;
 VAR buf: ARRAY bufLen OF CHAR;
+    e: Editor.Editor;
     p: StrList;
     p: StrList;
-    len, err: INTEGER;
+    len, err, pos: INTEGER;
     command: ARRAY 32 OF CHAR;
     command: ARRAY 32 OF CHAR;
     cmd: ARRAY 1024 OF CHAR;
     cmd: ARRAY 1024 OF CHAR;
     s, sN: ARRAY 80 OF CHAR;
     s, sN: ARRAY 80 OF CHAR;
@@ -472,7 +469,13 @@ BEGIN
       IF buf[len - 1] = 0AX THEN buf[len - 1] := 0X
       IF buf[len - 1] = 0AX THEN buf[len - 1] := 0X
       ELSE buf[len] := 0X
       ELSE buf[len] := 0X
       END;
       END;
-      ParseErrors(buf, filename)
+
+      ParseErrors(buf, filename, pos);
+      FocusOrOpenFile(filename);
+      e := app.windows(Editor.Editor);
+      e.text.MoveToPos(pos, e.h - 2);
+      Editor.PrintText(app.windows(Editor.Editor));
+      T.ResetCursorBlink (* !FIXME *)
     ELSIF link THEN buf := 'Linking failed.'
     ELSIF link THEN buf := 'Linking failed.'
     ELSE buf := 'Compilation failed.'
     ELSE buf := 'Compilation failed.'
     END;
     END;
@@ -526,7 +529,7 @@ BEGIN
         s := p.s; Strings.Append('.Mod', s);
         s := p.s; Strings.Append('.Mod', s);
         IF ~Compile(s, TRUE) THEN ok := FALSE END
         IF ~Compile(s, TRUE) THEN ok := FALSE END
       END;
       END;
-      IF ~Link(p.s, graph, modules) THEN ok := FALSE END
+      IF ok & ~Link(p.s, graph, modules) THEN ok := FALSE END
     END
     END
   ELSE ok := FALSE
   ELSE ok := FALSE
   END;
   END;
@@ -768,7 +771,7 @@ END OnBuild;
 PROCEDURE HelpAbout(c: OV.Control);
 PROCEDURE HelpAbout(c: OV.Control);
 BEGIN
 BEGIN
   IF app.statusText[0] # 0X THEN OV.SetStatusText(app, '')
   IF app.statusText[0] # 0X THEN OV.SetStatusText(app, '')
-  ELSE OV.SetStatusText(app, 'Visit freeoberon.su')
+  ELSE OV.SetStatusText(app, '  free.oberon.org  ')
   END
   END
 END HelpAbout;
 END HelpAbout;
 
 

+ 10 - 9
src/Makefile_linux

@@ -1,6 +1,7 @@
 PROG=FreeOberon
 PROG=FreeOberon
 OS=linux
 OS=linux
-VOC=../data/bin/voc/bin/voc
+VOCDIR=../data/bin/voc/install
+VOC=$(VOCDIR)/bin/voc
 CC=gcc
 CC=gcc
 SDL2Opts=`sdl2-config --cflags --libs`
 SDL2Opts=`sdl2-config --cflags --libs`
 VER=1.0.3
 VER=1.0.3
@@ -14,7 +15,7 @@ $(PROG): $(PROG).sym
 		-o $(PROG) $(PROG).o Graph.o SDL2.o \
 		-o $(PROG) $(PROG).o Graph.o SDL2.o \
 		OV.o Editor.o Term.o Terminal.o \
 		OV.o Editor.o Term.o Terminal.o \
 		EditorText.o Config.o term/term.o \
 		EditorText.o Config.o term/term.o \
-		../data/bin/voc/lib/libvoc-OC.a \
+		$(VOCDIR)/lib/libvoc-OC.a \
 		$(SDL2Opts) -lSDL2_image && \
 		$(SDL2Opts) -lSDL2_image && \
 		mv $(PROG) ..
 		mv $(PROG) ..
 
 
@@ -56,14 +57,14 @@ cleanfo:
 		../Programs/.tmp..* ../bin/*
 		../Programs/.tmp..* ../bin/*
 
 
 clean: cleanfo
 clean: cleanfo
-	make -C ../data/bin/voc/src clean
+	make -C ../data/bin/voc clean
 
 
 cleanall: clean
 cleanall: clean
 	rm -f ../$(PROG) ../$(PROG).exe
 	rm -f ../$(PROG) ../$(PROG).exe
-	make -C ../data/bin/voc/src cleanall
+	make -C ../data/bin/voc cleanall
 
 
 prepare:
 prepare:
-	chmod +x ../data/bin/*.sh ../data/bin/voc/src/*.sh
+	chmod +x ../data/bin/*.sh ../data/bin/voc/*.sh
 
 
 pack: clean prepare
 pack: clean prepare
 	rm -rf Makefile ../$(PROG) ../*.exe ../*.dll \
 	rm -rf Makefile ../$(PROG) ../*.exe ../*.dll \
@@ -80,11 +81,11 @@ pack: clean prepare
 	rm -rf $(TMPDIR)
 	rm -rf $(TMPDIR)
 
 
 voc:
 voc:
-	make -C ../data/bin/voc/src
+	make -C ../data/bin/voc full
 
 
 install:
 install:
-	cp Graph.sym SDL2.sym ../data/bin/voc/C/sym
-	cp Graph.h SDL2.h SDL2.h0 ../data/bin/voc/C/include
-	cp Graph.o SDL2.o ../data/bin/voc/lib
+	cp Graph.sym SDL2.sym $(VOCDIR)/C/sym
+	cp Graph.h SDL2.h SDL2.h0 $(VOCDIR)/C/include
+	cp Graph.o SDL2.o $(VOCDIR)/lib
 	mkdir -p ../bin
 	mkdir -p ../bin