2
0
Arthur Yefimov 3 жил өмнө
parent
commit
1edf9844b8
6 өөрчлөгдсөн 49 нэмэгдсэн , 14 устгасан
  1. 20 0
      src/Args.Mod
  2. 7 8
      src/FreeOberon.Mod
  3. 9 4
      src/Int.Mod
  4. 4 0
      src/Utf8.Mod
  5. 5 1
      src/make.bat
  6. 4 1
      src/make.sh

+ 20 - 0
src/Args.Mod

@@ -0,0 +1,20 @@
+MODULE Args;
+IMPORT CmdArgs, Int, Utf8;
+
+TYPE SHORTCHAR = Utf8.SHORTCHAR;
+VAR Count*: INTEGER;
+
+PROCEDURE Get*(n: INTEGER; VAR s: ARRAY OF CHAR);
+VAR q: ARRAY 4096 OF SHORTCHAR;
+BEGIN CmdArgs.Get(n, q); Utf8.Decode(q, s)
+END Get;
+
+PROCEDURE GetInt*(n: INTEGER; VAR i: INTEGER);
+VAR s: ARRAY 30 OF CHAR;
+  ok: BOOLEAN;
+BEGIN Get(n, s); i := Int.ValEx(s, ok);
+  IF ~ok THEN i := 0 END
+END GetInt;
+
+BEGIN Count := CmdArgs.Count
+END Args.

+ 7 - 8
src/FreeOberon.Mod

@@ -19,7 +19,7 @@ along with Free Oberon.  If not, see <http://www.gnu.org/licenses/>.
 IMPORT T := TermBox, Files, Args, Utf8,
        OV, Editor, Term, FoStrings, Config, Strings, Int, Out, Kernel;
 CONST
-  version* = '1.1.0-alpha.1';
+  version* = '1.1.0-alpha.2';
   year = 2022;
 
   (* Direction of Selection *)
@@ -1254,17 +1254,16 @@ VAR i, nofnames: INTEGER;
   q: ARRAY 2048 OF SHORTCHAR;
 BEGIN fs := TRUE; sw := FALSE; i := 1; nofnames := 0; w := defW; h := defH;
   lang := defLang;
-  WHILE i # Args.argc DO
-    Args.Get(i, q); Utf8.Decode(q, s);
+  WHILE i <= Args.Count DO Args.Get(i, s);
     IF s = '--window' THEN fs := FALSE
     ELSIF s = '--software' THEN sw := TRUE
     ELSIF s = '--size' THEN
-      IF i + 1 # Args.argc THEN
-        INC(i); Args.Get(i, q); Utf8.Decode(q, s); ParseSize(s, w, h)
+      IF i # Args.Count THEN
+        INC(i); Args.Get(i, s); ParseSize(s, w, h)
       END
     ELSIF s = '--lang' THEN
-      IF i + 1 # Args.argc THEN
-        INC(i); Args.Get(i, q); Utf8.Decode(q, lang);
+      IF i # Args.Count THEN
+        INC(i); Args.Get(i, lang);
         IF ~FoStrings.LangExists(lang) THEN Out.String('Language "');
           Out.String(lang); Out.String('" does not exist.'); Out.Ln;
           lang := defLang
@@ -1291,7 +1290,7 @@ VAR success, fs, sw: BOOLEAN;
 BEGIN
   success := FALSE;
   ParseArgs(fs, sw, w, h, lang, fnames);
-  opt := {T.resizable};
+  opt := {T.resizable, T.center};
   IF fs THEN INCL(opt, T.fullscreen) ELSE INCL(opt, T.window) END;
   T.Settings(w, h, opt);
   FoStrings.SetLang(lang);

+ 9 - 4
src/Int.Mod

@@ -21,18 +21,23 @@ BEGIN
   END
 END Str;
 
-PROCEDURE Val*(IN s: ARRAY OF CHAR): INTEGER;
+PROCEDURE ValEx*(IN s: ARRAY OF CHAR; VAR ok: BOOLEAN): INTEGER;
 VAR i, n: INTEGER;
   c: CHAR;
   neg: BOOLEAN;
-BEGIN n := 0; c := s[0];
+BEGIN n := 0; c := s[0]; ok := FALSE;
   IF c = '-' THEN neg := TRUE; i := 1; c := s[1] ELSE neg := FALSE; i := 0 END;
-  WHILE ('0' <= c) & (c <= '9') DO
+  WHILE ('0' <= c) & (c <= '9') DO ok := TRUE;
     n := n * 10 + ORD(c) - ORD('0');
     INC(i); c := s[i]
   END;
+  IF s[i] # 0X THEN ok := FALSE END;
   IF neg THEN n := -n END ;
-RETURN n END Val;
+RETURN n END ValEx;
+
+PROCEDURE Val*(IN s: ARRAY OF CHAR): INTEGER;
+VAR ok: BOOLEAN;
+BEGIN RETURN ValEx(s, ok) END Val;
 
 PROCEDURE Insert*(n: INTEGER; pos: INTEGER; VAR s: ARRAY OF CHAR);
 VAR sn: ARRAY 30 OF CHAR;

+ 4 - 0
src/Utf8.Mod

@@ -1,5 +1,9 @@
 MODULE Utf8;
 
+TYPE
+  CHAR8 = SHORTCHAR;
+  SHORTCHAR* = CHAR8;
+
 VAR
   Done-: BOOLEAN;
 

+ 5 - 1
src/make.bat

@@ -27,6 +27,8 @@ ECHO ON
 @IF ERRORLEVEL 1 GOTO ERR
 %OFR% -Cw Out.Mod
 @IF ERRORLEVEL 1 GOTO ERR
+%OFR% -7w Args.Mod
+@IF ERRORLEVEL 1 GOTO ERR
 %OFR% -Cw Files.Mod
 @IF ERRORLEVEL 1 GOTO ERR
 %OFR% -7w Texts.Mod
@@ -70,6 +72,8 @@ windres resources.rc resources.o
 @IF ERRORLEVEL 1 GOTO ERR
 %CCFULL% -c Out.c
 @IF ERRORLEVEL 1 GOTO ERR
+%CCFULL% -c Args.c
+@IF ERRORLEVEL 1 GOTO ERR
 %CCFULL% -c Files.c
 @IF ERRORLEVEL 1 GOTO ERR
 %CCFULL% -c Texts.c
@@ -86,7 +90,7 @@ windres resources.rc resources.o
 @IF ERRORLEVEL 1 GOTO ERR
 
 %AR% -crs ..\Data\bin\FreeOberon.a ^
-  Utf8.o Strings.o Reals.o Int.o In.o Out.o Files.o Texts.o Random.o ^
+  Utf8.o Strings.o Reals.o Int.o In.o Out.o Args.o Files.o Texts.o Random.o ^
   StrList.o Dir.o Graph2.o TermBox.o
 @IF ERRORLEVEL 1 GOTO ERR
 

+ 4 - 1
src/make.sh

@@ -26,6 +26,8 @@ $OFR -Cw In.Mod &&
 
 $OFR -Cw Out.Mod &&
 
+$OFR -7w Args.Mod &&
+
 $OFR -Cw Files.Mod &&
 
 $OFR -7w Texts.Mod &&
@@ -62,6 +64,7 @@ $CCFULL -c Reals.c &&
 $CCFULL -c Int.c &&
 $CCFULL -c In.c &&
 $CCFULL -c Out.c &&
+$CCFULL -c Args.c &&
 $CCFULL -c Files.c &&
 $CCFULL -c Texts.c &&
 $CCFULL -c Random.c &&
@@ -71,7 +74,7 @@ $CCFULL -c Graph2.c &&
 $CCFULL -c TermBox.c &&
 
 $AR -crs ../Data/bin/libFreeOberon.a \
-  Utf8.o Strings.o Reals.o Int.o In.o Out.o Files.o Texts.o Random.o \
+  Utf8.o Strings.o Reals.o Int.o In.o Out.o Args.o Files.o Texts.o Random.o \
   StrList.o Dir.o Graph2.o TermBox.o &&
 
 $CCFULL -o ../$PROG \