Browse Source

Restore keyboard input in terminal

Arthur Yefimov 3 years ago
parent
commit
b1af17b8be
2 changed files with 18 additions and 14 deletions
  1. 0 4
      src/EditorText.Mod
  2. 18 10
      src/FreeOberon.Mod

+ 0 - 4
src/EditorText.Mod

@@ -359,11 +359,8 @@ VAR f: Files.File; r: Files.Rider;
   L: Line;
   L: Line;
 BEGIN success := FALSE;
 BEGIN success := FALSE;
   FixFname(fname);
   FixFname(fname);
-  Out.String('fname='); Out.String(fname);Out.Ln;
   f := Files.New(fname);
   f := Files.New(fname);
-  Out.String('END?'); Out.Ln;
   IF f # NIL THEN (*!FIXME error checking is wrong *)
   IF f # NIL THEN (*!FIXME error checking is wrong *)
-    Out.String('f # NIL.'); Out.Ln;
     Files.Set(r, f, 0);
     Files.Set(r, f, 0);
     L := t.first;
     L := t.first;
     WHILE L # NIL DO
     WHILE L # NIL DO
@@ -381,7 +378,6 @@ BEGIN success := FALSE;
     t.changed := FALSE;
     t.changed := FALSE;
     success := TRUE
     success := TRUE
   END ;
   END ;
-  Out.String('End of proc.'); Out.Ln;
 RETURN success END SaveToFile;
 RETURN success END SaveToFile;
 
 
 PROCEDURE ReadLine(VAR r: Files.Rider; L: Line);
 PROCEDURE ReadLine(VAR r: Files.Rider; L: Line);

+ 18 - 10
src/FreeOberon.Mod

@@ -380,11 +380,11 @@ BEGIN
   END
   END
 END HandleTerminalKeyDown;
 END HandleTerminalKeyDown;
 
 
-PROCEDURE HandleTerminalTextInput(s: ARRAY OF CHAR; sym: INTEGER);
+PROCEDURE HandleTerminalTextInput(s: ARRAY OF CHAR; ch: INTEGER);
 BEGIN
 BEGIN
-  IF (sym # 0) & (inputBufLen < LEN(inputBuf)) THEN
-    inputBuf[inputBufLen] := CHR(sym); INC(inputBufLen);
-    T.Write(CHR(sym))
+  IF (ch # 0) & (inputBufLen < LEN(inputBuf)) THEN
+    inputBuf[inputBufLen] := OV.ToCP866(ch); INC(inputBufLen);
+    T.Write(OV.ToCP866(ch))
   END
   END
 END HandleTerminalTextInput;
 END HandleTerminalTextInput;
 
 
@@ -398,7 +398,7 @@ BEGIN quit := FALSE;
       CASE event.type OF
       CASE event.type OF
         G.mouseMove: HandleMouseMotion
         G.mouseMove: HandleMouseMotion
       | G.keyDown: HandleTerminalKeyDown(event.key, quit)
       | G.keyDown: HandleTerminalKeyDown(event.key, quit)
-      | G.textInput: HandleTerminalTextInput(event.s, event.key.sym)
+      | G.textInput: HandleTerminalTextInput(event.s, event.ch)
       ELSE
       ELSE
       END
       END
     END;
     END;
@@ -454,7 +454,13 @@ BEGIN
     cmd := 'data/bin/'; Strings.Append(command, cmd);
     cmd := 'data/bin/'; Strings.Append(command, cmd);
     Strings.Append('.sh ', cmd)
     Strings.Append('.sh ', cmd)
   END;
   END;
-  Strings.Append(fname, cmd);
+
+  IF Strings.Pos(Editor.stdPath, fname, 0) = 0 THEN
+    Strings.Extract(fname, Strings.Length(Editor.stdPath), LEN(s), s)
+  ELSE s := fname$
+  END;
+  Strings.Append(s, cmd);
+
   IF main THEN Strings.Append(' -m', cmd)
   IF main THEN Strings.Append(' -m', cmd)
   ELSIF link & (list # NIL) THEN
   ELSIF link & (list # NIL) THEN
     p := list;
     p := list;
@@ -732,12 +738,14 @@ RETURN p # NIL END ImportsGraph;
 
 
 (* "Module.Mod" -> "Module" *)
 (* "Module.Mod" -> "Module" *)
 PROCEDURE GetModuleName(fname: ARRAY OF CHAR; VAR modname: ARRAY OF CHAR);
 PROCEDURE GetModuleName(fname: ARRAY OF CHAR; VAR modname: ARRAY OF CHAR);
-VAR i: INTEGER;
-BEGIN i := 0;
+VAR i, j: INTEGER;
+BEGIN i := 0; j := 0;
+  WHILE (fname[i] # 0X) & (fname[i] # '/') DO INC(i) END;
+  IF fname[i] = 0X THEN i := 0 ELSE INC(i) END;
   WHILE (fname[i] # 0X) & (fname[i] # '.') DO
   WHILE (fname[i] # 0X) & (fname[i] # '.') DO
-    modname[i] := fname[i]; INC(i)
+    modname[j] := fname[i]; INC(i); INC(j)
   END;
   END;
-  modname[i] := 0X
+  modname[j] := 0X
 END GetModuleName;
 END GetModuleName;
 
 
 PROCEDURE OnBuild(c: OV.Control);
 PROCEDURE OnBuild(c: OV.Control);