| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- MODULE editor2;
- (* based on the kilo editor building course*)
- (* Step 7 *)
- (* identical to step6 : it was set with BufferMode *)
- IMPORT IO, termios, FIO, libc ;
- VAR
- c : CHAR;
- theTermios : termios.TERMIOS;
- TCSAFLUSH : INTEGER;
- PROCEDURE disablerawMode() : INTEGER;
- VAR
- result : INTEGER;
- BEGIN
- IO.BufferedMode(0,TRUE);
- IO.BufferedMode(1,TRUE);
- result := termios.tcsetattr(FIO.StdIn, TCSAFLUSH, theTermios);
- IF result = -1 THEN
- theTermios := termios.KillTermios(theTermios);
- HALT
- ELSE
- RETURN result
- END;
- END disablerawMode;
- PROCEDURE enablerawMode;
- BEGIN
- libc.atexit(disablerawMode);
- theTermios := termios.InitTermios();
- IF termios.tcgetattr(FIO.StdIn, theTermios) = -1 THEN
- HALT
- END;
- IO.UnBufferedMode(0,TRUE);
- IO.UnBufferedMode(1,TRUE);
- END enablerawMode;
- BEGIN
- TCSAFLUSH := termios.tcsflush ();
- enablerawMode;
- LOOP
- IO.Read(c);
- IF c = "q" THEN
- EXIT
- END;
- END;
- END editor2.
|