editor.mod 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. MODULE editor;
  2. (* based on the kilo editor building course*)
  3. (* Step 5 *)
  4. IMPORT FIO, SYSTEM, termios, libc, STextIO;
  5. VAR
  6. c : CHAR;
  7. p : POINTER TO CHAR;
  8. thetermios : termios.TERMIOS;
  9. result : INTEGER;
  10. BEGIN
  11. (* we have to call this procedure because in C, it's a macro *)
  12. TCSAFLUSH := termios.tcsflush ();
  13. result := termios.tcsetattr(FIO.StdOut, TCSAFLUSH, SYSTEM.ADR(thetermios));
  14. RETURN result;
  15. END disableRawMode;
  16. PROCEDURE enableRawMode;
  17. (* PROCEDURE tcgetattr (fd: INTEGER; t: TERMIOS) : INTEGER ; *)
  18. (* exitP = PROCEDURE () : INTEGER ; *)
  19. (* PROCEDURE SetFlag (t: TERMIOS; f: Flag; b: BOOLEAN) : BOOLEAN ; *)
  20. VAR
  21. TCSAFLUSH : INTEGER;
  22. result : INTEGER;
  23. bresult : BOOLEAN;
  24. raw : termios.TERMIOS;
  25. BEGIN
  26. TCSAFLUSH := termios.tcsflush ();
  27. result := termios.tcgetattr(2, SYSTEM.ADR(thetermios));
  28. raw := thetermios;
  29. bresult := termios.SetFlag(SYSTEM.ADR(raw),termios.lecho, TRUE);
  30. result := termios.tcsetattr(2, TCSAFLUSH, SYSTEM.ADR(raw));
  31. END enableRawMode;
  32. BEGIN
  33. enableRawMode;
  34. p := SYSTEM.ADR(c);
  35. (* PROCEDURE ReadNBytes (f: File; nBytes: CARDINAL; dest: ADDRESS) : CARDINAL ; *)
  36. WHILE (FIO.ReadNBytes(FIO.StdIn,1,p) = 1) AND (c <> "q") DO
  37. ;
  38. END;
  39. END editor.