Arthur Yefimov преди 3 години
родител
ревизия
81b6b8a3a4
променени са 8 файла, в които са добавени 225 реда и са изтрити 109 реда
  1. 39 2
      src/GTest.Mod
  2. 13 6
      src/Graph2.Mod
  3. 20 11
      src/OV.Mod
  4. 1 0
      src/TESTGTEST.BAT
  5. 10 10
      src/TestFO.bat
  6. 32 0
      src/compile_GTest.bat
  7. 87 79
      src/make.bat
  8. 23 1
      src/make.sh

+ 39 - 2
src/GTest.Mod

@@ -151,7 +151,7 @@ BEGIN
   G.MakeCol(c2, 0, 255, 0);
   G.MakeCol(c3, 255, 255, 255);
   G.MakeCol(c4, 50, 30, 255);
-  B := G.LoadBitmap('Data/Images/img.png');
+  B := G.LoadBitmap('Data/Images/Icon.png');
   IF B = NIL THEN Out.String('COULD NOT LOAD Data/Images/img.png'); Out.Ln END;
   font := G.LoadFont('Data/Fonts/Main');
   IF font = NIL THEN Out.String('COULD NOT LOAD Data/Fonts/Main'); Out.Ln END;
@@ -164,8 +164,45 @@ BEGIN
   G.Close
 END RunSingle;
 
+PROCEDURE RunSimple;
+VAR c, cc: G.Color;
+  e: G.Event;
+  done: BOOLEAN;
+  X, Y, x, y: INTEGER;
+  F: G.Font;
 BEGIN
-  RunSingle;
+  G.Settings(0, 0, {});
+  G.Init;
+  F := G.LoadFont('Data/Fonts/Main');
+  G.MakeCol(c, 40, 150, 200);
+  G.MakeCol(cc, 230, 210, 150);
+  done := FALSE; X := 20; Y := 20;
+  REPEAT
+    WHILE G.HasEvents() DO
+      G.WaitEvent(e);
+      IF e.type = G.quit THEN done := TRUE
+      ELSIF e.type = G.mouseMove THEN
+        X := e.x; Y := e.y;      
+      END
+    END;
+    G.ClearToColor(c);
+    G.Line(20, 20, 620, 380, cc);
+    G.Line(20, 20, 20, 380, cc);
+    G.Line(20, 380, 620, 380, cc);
+    G.Line(20, 380, X, Y, cc);
+    FOR y := 0 TO 400 BY 16 DO
+      FOR x := 20 TO 800 BY 12*8 DO
+        G.DrawString('Hello World!', X + x, Y + y, F, cc)
+      END
+    END;
+    G.Flip
+  UNTIL done;
+  G.Close
+END RunSimple;
+
+BEGIN
+  RunSimple;
+  (*RunSingle;*)
 (*
   nofdialogs := 0;
   Z := 0;

+ 13 - 6
src/Graph2.Mod

@@ -790,6 +790,10 @@ BEGIN
 
 END Pause;
 
+PROCEDURE ConvertMemoryBitmaps*;
+BEGIN Al.convert_memory_bitmaps
+END ConvertMemoryBitmaps;
+
 PROCEDURE RecreateDisplay(W: Window; alterSize: BOOLEAN);
 VAR d: Al.Display;
   q: ARRAY 256 OF SHORTCHAR;
@@ -813,13 +817,11 @@ BEGIN isCurTarget := target = W;
   Al.set_new_display_option(Al.renderMethod, n, Al.suggest);
   Al.set_new_display_option(Al.vsync, 2(*off*), Al.suggest);
   Al.set_new_display_option(Al.singleBuffer, 1, Al.suggest);
-
   IF smooth IN W.options THEN n := 1;
     Al.set_new_display_option(Al.samples, 8, Al.suggest)
   ELSE n := 0
   END;
-  Al.set_new_display_option(Al.sampleBuffers, n, Al.suggest);
-
+  (* Al.set_new_display_option(Al.sampleBuffers, n, Al.suggest); *)
   GetDesktopResolution(dw, dh);
   dw := FLOOR(FLT(dw) / wantScaleX + 0.1);
   dh := FLOOR(FLT(dh) / wantScaleY + 0.1);
@@ -890,6 +892,9 @@ BEGIN isCurTarget := target = W;
   IF W.bmp # NIL THEN Al.destroy_bitmap(W.bmp); W.bmp := NIL END;
   W.display := Al.create_display(sw, sh);
   IF W.display # NIL THEN
+    IF (windowList = NIL) OR (windowList.next = NIL) THEN
+      ConvertMemoryBitmaps
+    END;
     W.winW := Al.get_display_width(W.display);
     W.winH := Al.get_display_height(W.display);
     W.w := w; W.h := h;
@@ -1329,12 +1334,14 @@ END SetWindowIcon;
 PROCEDURE InitScreen(): BOOLEAN;
 VAR opt: SET;
 BEGIN
-  IF ~(fullscreen IN settings) & ((wantW <= 0) OR (wantH <= 0)) THEN
-    wantW := 640; wantH := 400
-  END;
   opt := settings;
   IF {fullscreen, window} * opt = {} THEN INCL(opt, fullscreen)
   ELSIF fullscreen IN opt THEN EXCL(opt, window)
+  END;
+  IF (wantW <= 0) OR (wantH <= 0) THEN
+    IF fullscreen IN opt THEN wantW := -1; wantH := -1
+    ELSE wantW := 640; wantH := 400
+    END
   END
 RETURN NewWindow(-1, -1, wantW, wantH, wantTitle, opt) # NIL END InitScreen;
 

+ 20 - 11
src/OV.Mod

@@ -684,6 +684,7 @@ TYPE
     lastMouseDownTime*: INTEGER;
     quit*: BOOLEAN;
     needRedraw*: BOOLEAN;
+    sync*: BOOLEAN;
     mouseBtn*: INTEGER
   END;
 
@@ -2072,7 +2073,7 @@ BEGIN cancel := FALSE;
 END CloseAllWindows;
 
 PROCEDURE RefreshDisplay*(c: Control);
-BEGIN T.ClearTo(0, 7); NeedRedraw(c.app)
+BEGIN T.ClearTo(0, 7); NeedRedraw(c.app); c.app.sync := TRUE
 END RefreshDisplay;
 
 (* Window *)
@@ -2137,8 +2138,8 @@ VAR tW, tH: INTEGER;
 BEGIN T.Size(tW, tH);
   IF c(Window).zoomBtn # NIL THEN
     IF (c.x = 0) & (c.w = tW) & (c.y = 1) & (c.h = tH - 2) THEN
-      c(Window).zoomBtn.caption[0] := 012X
-    ELSE c(Window).zoomBtn.caption[0] := 018X
+      c(Window).zoomBtn.caption[0] := 12X
+    ELSE c(Window).zoomBtn.caption[0] := 18X
     END
   END
 END WindowRefresh;
@@ -2289,6 +2290,7 @@ BEGIN app.windows := NIL;
   app.lastMouseDownTime := 0;
   app.quit := FALSE;
   app.needRedraw := TRUE;
+  app.sync := TRUE;
   app.mouseBtn := 0
 END InitApp;
 
@@ -2516,20 +2518,27 @@ END OnResize;
 
 PROCEDURE RunApp*(app: App);
 VAR E: T.Event;
+  break: BOOLEAN;
 BEGIN
   ticks := 0;
   T.StartTimer(1/4);
   app.quit := FALSE;
   DrawApp(app); T.Flush;
   REPEAT
-    T.WaitEvent(E);
-    IF E.type = T.mouse THEN OnMouse(app, E)
-    ELSIF E.type = T.timer THEN INC(ticks)
-    ELSIF E.type = T.key THEN OnKey(app, E)
-    ELSIF E.type = T.resize THEN OnResize(app, E)
-    ELSIF E.type = T.quit THEN app.quit := TRUE
-    END;
-    IF app.needRedraw THEN DrawApp(app); T.Flush END
+    break := FALSE;
+    REPEAT
+      T.WaitEvent(E);
+      IF E.type = T.mouse THEN OnMouse(app, E)
+      ELSIF E.type = T.timer THEN INC(ticks); break := TRUE
+      ELSIF E.type = T.key THEN OnKey(app, E)
+      ELSIF E.type = T.resize THEN OnResize(app, E)
+      ELSIF E.type = T.quit THEN app.quit := TRUE
+      END
+    UNTIL break OR ~T.HasEvents();
+    IF app.needRedraw THEN
+      DrawApp(app);
+      IF app.sync THEN T.Sync; app.sync := FALSE ELSE T.Flush END
+    END
   UNTIL app.quit
 END RunApp;
 

+ 1 - 0
src/TESTGTEST.BAT

@@ -0,0 +1 @@
+compile_GTest & cd .. & GTest & cd src

+ 10 - 10
src/test.bat → src/TestFO.bat

@@ -1,10 +1,10 @@
-@CLS
-@CALL make
-@IF ERRORLEVEL 1 GOTO ERR
-@CD..
-FreeOberon --window
-@CD src
-@GOTO QUIT
-:ERR
-@EXIT/B 1
-:QUIT
+@CLS
+@CALL make
+@IF ERRORLEVEL 1 GOTO ERR
+@CD..
+FreeOberon --window
+@CD src
+@GOTO QUIT
+:ERR
+@EXIT/B 1
+:QUIT

+ 32 - 0
src/compile_GTest.bat

@@ -0,0 +1,32 @@
+@ECHO OFF
+SET PROG=GTest
+SET OFRDIR=..\Data\bin\OfrontPlus\Target\Win32
+SET GCCDIR=C:\mingw-w64\i686\mingw32\bin
+SET PATH=%GCCDIR%;%OFRDIR%;%PATH%
+SET OBERON=.;%OFRDIR%\Lib\Sym
+
+
+SET OFR=ofront+ -s -48
+SET CC=gcc
+SET AR=ar
+SET CCFULL=%CC% -g3 -O0 -fno-exceptions -I %OFRDIR%\..\..\Mod\Lib -I %OFRDIR%\Lib\Obj
+
+ECHO ON
+%OFR% -7w Allegro5.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w Graph2.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7wm GTest.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+
+%CCFULL% -o ..\%PROG%.exe resources.o ^
+  Graph2.c ^
+  %PROG%.c ^
+  ..\Data\bin\FreeOberon.a ^
+  %OFRDIR%\Lib\Ofront.a ^
+  -lallegro -lallegro_primitives -lallegro_image
+
+@GOTO QUIT
+:ERR
+@EXIT/B 1
+:QUIT

+ 87 - 79
src/make.bat

@@ -1,79 +1,87 @@
-@ECHO OFF
-SET PROG=FreeOberon
-SET OFRDIR=..\Data\bin\OfrontPlus\Target\Win64
-SET GCCDIR=..\Data\bin\mingw64\bin
-SET PATH=%GCCDIR%;%OFRDIR%;%PATH%
-SET OBERON=.;%OFRDIR%\Lib\Sym
-REM SET SDL2Opts=-w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2
-SET SDL2Opts=-lmingw32 -lSDL2main -lSDL2
-SET OFR=ofront+ -s -88
-SET CC=gcc
-SET AR=ar
-SET CCFULL=%CC% -g3 -O0 -fno-exceptions -I %OFRDIR%\..\..\Mod\Lib -I %OFRDIR%\Lib\Obj
-
-ECHO ON
-%OFR% -C Config_win32.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Utf8.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Strings.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Reals.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Int.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C In.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Out.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Files.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -7w StrList.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -7w Dir.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -Ci SDL2.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Graph.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Terminal.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Term.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C OV.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C EditorText.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -C Editor.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-%OFR% -Cm FreeOberon.Mod
-@IF ERRORLEVEL 1 GOTO ERR
-windres resources.rc resources.o
-@REM                        -O0 change to -Os (?)   add -s (?)
-%CCFULL% -c Utf8.c
-%CCFULL% -c Strings.c
-%CCFULL% -c Reals.c
-%CCFULL% -c Int.c
-%CCFULL% -c In.c
-%CCFULL% -c Out.c
-%CCFULL% -c Files.c
-%CCFULL% -c StrList.c
-%CCFULL% -c Dir.c
-%CCFULL% -c SDL2.c
-%CCFULL% -c Graph.c
-%AR% -crs ..\Data\bin\FreeOberon.a ^
-  Utf8.o Strings.o Reals.o Int.o In.o Out.o Files.o ^
-  StrList.o Dir.o SDL2.o Graph.o
-
-%CCFULL% Config.c term\term_win32.c ^
-  Utf8.o Strings.o Reals.o Int.o In.o Out.o Files.o ^
-  StrList.o Dir.o SDL2.o Graph.o ^
-  Term.c Terminal.c OV.c EditorText.c Editor.c ^
-  %PROG%.c -o ..\%PROG%.exe resources.o ^
-  %OFRDIR%\Lib\Ofront.a ^
-  %SDL2Opts% -lSDL2_image
-
-@GOTO QUIT
-:ERR
-@EXIT/B 1
-:QUIT
+@ECHO OFF
+SET PROG=FreeOberon
+SET OFRDIR=..\Data\bin\OfrontPlus\Target\Win32
+SET GCCDIR=C:\mingw-w64\i686\mingw32\bin
+SET PATH=%GCCDIR%;%OFRDIR%;%PATH%
+SET OBERON=.;%OFRDIR%\Lib\Sym
+
+
+SET OFR=ofront+ -s -48
+SET CC=gcc
+SET AR=ar
+SET CCFULL=%CC% -g3 -O0 -fno-exceptions -I %OFRDIR%\..\..\Mod\Lib -I %OFRDIR%\Lib\Obj
+
+ECHO ON
+%OFR% -C Config_win32.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw Utf8.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw Strings.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw Reals.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw Int.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw In.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw Out.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw Files.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w Texts.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w Random.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w StrList.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w Dir.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w Allegro5.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w Graph2.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w TermBox.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw Term.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w OV.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw EditorText.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cw Editor.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+%OFR% -Cwm FreeOberon.Mod
+@IF ERRORLEVEL 1 GOTO ERR
+windres resources.rc resources.o
+@REM                        -O0 change to -Os (?)   add -s (?)
+%CCFULL% -c Utf8.c
+%CCFULL% -c Strings.c
+%CCFULL% -c Reals.c
+%CCFULL% -c Int.c
+%CCFULL% -c In.c
+%CCFULL% -c Out.c
+%CCFULL% -c Files.c
+%CCFULL% -c Texts.c
+%CCFULL% -c Random.c
+%CCFULL% -c StrList.c
+%CCFULL% -c Dir.c
+%CCFULL% -c Graph2.c
+%CCFULL% -c TermBox.c
+
+%AR% -crs ..\Data\bin\FreeOberon.a ^
+  Utf8.o Strings.o Reals.o Int.o In.o Out.o Files.o Texts.o Random.o ^
+  StrList.o Dir.o Graph2.o TermBox.o
+
+%CCFULL% -o ..\%PROG%.exe resources.o ^
+  Graph2.c TermBox.c ^
+  Config.c term\term_win32.c ^
+  Term.c OV.c EditorText.c Editor.c ^
+  %PROG%.c ^
+  ..\Data\bin\FreeOberon.a ^
+  %OFRDIR%\Lib\Ofront.a ^
+  -lallegro -lallegro_primitives -lallegro_image
+
+@GOTO QUIT
+:ERR
+@EXIT/B 1
+:QUIT

+ 23 - 1
src/make.sh

@@ -5,33 +5,55 @@ OFRDIR="../Data/bin/OfrontPlus/Target/Linux_amd64"
 PATH="$OFRDIR:$PATH"
 export OBERON=.:$OFRDIR/Lib/Sym
 
-SDL2Opts="-lSDL2"
+
 OFR="ofront+ -s -88"
 CC="gcc"
 AR="ar"
 CCFULL="$CC -g3 -O0 -fno-exceptions -I $OFRDIR/../../Mod/Lib -I $OFRDIR/Lib/Obj"
 
+
 $OFR -Cw Config_linux.Mod
+
 $OFR -Cw Utf8.Mod
+
 $OFR -Cw Strings.Mod
+
 $OFR -Cw Reals.Mod
+
 $OFR -Cw Int.Mod
+
 $OFR -Cw In.Mod
+
 $OFR -Cw Out.Mod
+
 $OFR -Cw Files.Mod
+
 $OFR -7w Texts.Mod
+
 $OFR -7w Random.Mod
+
 $OFR -7w StrList.Mod
+
 $OFR -7w Dir.Mod
+
 $OFR -7w Allegro5.Mod
+
 $OFR -7w Graph2.Mod
+
 $OFR -7w TermBox.Mod
+
 $OFR -Cw Term.Mod
+
 $OFR -7w OV.Mod
+
 $OFR -Cw EditorText.Mod
+
 $OFR -Cw Editor.Mod
+
 $OFR -Cwm FreeOberon.Mod
 
+
+
 $CCFULL -c Utf8.c
 $CCFULL -c Strings.c
 $CCFULL -c Reals.c