vt100 and crt units, some changes in Unix.Mod

Former-commit-id: 7f11185f6a
This commit is contained in:
Norayr Chilingarian 2014-04-11 21:41:49 +04:00
parent 8603eeef82
commit 98bfa994fa
20 changed files with 388 additions and 25 deletions

BIN
ocat

Binary file not shown.

View file

@ -1 +1 @@
4b540a376f943c1a9cd7bd56b1f6020c7722374a 25440b9ec87f8fbe82922ad8cd707a3c8fd4644a

View file

@ -332,7 +332,7 @@ from man gettimeofday
PROCEDURE -includeUio() PROCEDURE -includeUio()
"#include <sys/uio.h>"; "#include <sys/uio.h>";
(* for getpid(), lseek(), close(), fsync(), ftruncate(), read() *) (* for getpid(), lseek(), close(), fsync(), ftruncate(), read(), sleep() *)
PROCEDURE -includeUnistd() PROCEDURE -includeUnistd()
"#include <unistd.h>"; "#include <unistd.h>";
@ -482,6 +482,11 @@ from man gettimeofday
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : INTEGER): INTEGER
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): INTEGER
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,22 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +383,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,22 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +383,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,22 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +383,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,22 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +383,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,22 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +383,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -313,7 +313,7 @@ from man gettimeofday
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() *) (* for read(), write() and sleep() *)
PROCEDURE -includeUnistd() PROCEDURE -includeUnistd()
"#include <unistd.h>"; "#include <unistd.h>";
@ -321,6 +321,14 @@ from man gettimeofday
PROCEDURE -includeStdlib() PROCEDURE -includeStdlib()
"#include <stdlib.h>"; "#include <stdlib.h>";
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -455,6 +463,11 @@ from man gettimeofday
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : INTEGER): INTEGER
"(INTEGER)sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): INTEGER
"(INTEGER)nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,23 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
(* commented, doesn't compile on 32bit GNU/Linux platforms
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
*)
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +384,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,23 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
(* commented, doesn't compile on 32bit GNU/Linux platforms
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
*)
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +384,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,23 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
(* commented, doesn't compile on 32bit GNU/Linux platforms
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
*)
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +384,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,23 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
(* commented, doesn't compile on 32bit GNU/Linux platforms
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
*)
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +384,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -234,6 +234,23 @@ TYPE
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
(* commented, doesn't compile on 32bit GNU/Linux platforms
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
*)
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -367,6 +384,11 @@ TYPE
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : LONGINT): LONGINT
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

View file

@ -313,6 +313,22 @@ from man gettimeofday
PROCEDURE -includeErrno() PROCEDURE -includeErrno()
"#include <errno.h>"; "#include <errno.h>";
(* for read(), write() and sleep() *)
PROCEDURE -includeUnistd()
"#include <unistd.h>";
(* for system() *)
PROCEDURE -includeStdlib()
"#include <stdlib.h>";
(* for nanosleep() *)
PROCEDURE -includeTime()
"#include <time.h>";
(* for select() *)
PROCEDURE -includeSelect()
"#include <sys/select.h>";
PROCEDURE -err(): LONGINT PROCEDURE -err(): LONGINT
"errno"; "errno";
@ -447,6 +463,11 @@ from man gettimeofday
PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT
"sigsetmask(mask)"; "sigsetmask(mask)";
PROCEDURE -Sleep*(ms : INTEGER): INTEGER
"sleep(ms)";
PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): INTEGER
"nanosleep(req, rem)";
(* TCP/IP networking *) (* TCP/IP networking *)

64
src/test/vt100/crt.Mod Normal file
View file

@ -0,0 +1,64 @@
MODULE crt;
IMPORT vt100, Unix, Console,
Strings; (* strings to remove later ? *)
TYPE
PFdSet = POINTER TO Unix.FdSet;
VAR tmpstr : ARRAY 23 OF CHAR;
PROCEDURE EraseDisplay*;
BEGIN
vt100.ED(2);
END EraseDisplay;
PROCEDURE ClrScr*;
BEGIN
vt100.ED(2);
END ClrScr;
PROCEDURE ClrEol*;
BEGIN
vt100.EL(0);
END ClrEol;
PROCEDURE cursoroff*;
BEGIN
vt100.DECTCEMl;
END cursoroff;
PROCEDURE cursoron*;
BEGIN
vt100.DECTCEMh;
END cursoron;
PROCEDURE Delay*( ms : INTEGER);
VAR i : LONGINT;
tv : Unix.Timeval;
pfd : PFdSet;
BEGIN
tv.sec := 0;
tv.usec := ms * 1000;
pfd := NIL;
i := Unix.Select(0, pfd^, pfd^, pfd^, tv);
END Delay;
PROCEDURE GotoXY* (x, y: INTEGER);
BEGIN
vt100.CUP (y, x);
END GotoXY;
BEGIN
(* test *)
EraseDisplay;
GotoXY (0, 0);
COPY(vt100.CSI, tmpstr);
Strings.Append(vt100.Green, tmpstr);
Strings.Append("hello", tmpstr);
Console.String(tmpstr); Console.Ln;
Delay (2000);
END crt.

View file

@ -1,7 +1,7 @@
MODULE vt100; MODULE vt100;
IMPORT Console, Strings, IntStr := oocIntStr; IMPORT Console, Strings, IntStr := oocIntStr;
(* reference http://en.wikipedia.org/wiki/ANSI_escape_code *)
CONST CONST
Escape* = 1BX; Escape* = 1BX;
@ -30,10 +30,18 @@ CONST
CSI* : ARRAY 5 OF CHAR; CSI* : ARRAY 5 OF CHAR;
tmpstr : ARRAY 32 OF CHAR; tmpstr : ARRAY 32 OF CHAR;
PROCEDURE EscSeq0 (letter : ARRAY OF CHAR);
VAR
cmd : ARRAY 9 OF CHAR;
BEGIN
COPY(CSI, cmd);
Strings.Append (letter, cmd);
Console.String (cmd);
END EscSeq0;
PROCEDURE EscSeq (n : INTEGER; letter : ARRAY OF CHAR); PROCEDURE EscSeq (n : INTEGER; letter : ARRAY OF CHAR);
VAR nstr : ARRAY 2 OF CHAR; VAR nstr : ARRAY 2 OF CHAR;
cmd : ARRAY 5 OF CHAR; cmd : ARRAY 7 OF CHAR;
BEGIN BEGIN
IntStr.IntToStr (n, nstr); IntStr.IntToStr (n, nstr);
COPY(CSI, cmd); COPY(CSI, cmd);
@ -42,13 +50,21 @@ CONST
Console.String (cmd); Console.String (cmd);
END EscSeq; END EscSeq;
PROCEDURE EscSeqSwapped (n : INTEGER; letter : ARRAY OF CHAR);
VAR nstr : ARRAY 2 OF CHAR;
cmd : ARRAY 7 OF CHAR;
BEGIN
IntStr.IntToStr (n, nstr);
COPY(CSI, cmd);
Strings.Append (letter, cmd);
Strings.Append (nstr, cmd);
Console.String (cmd);
END EscSeqSwapped;
PROCEDURE EscSeq2(n, m : INTEGER; letter : ARRAY OF CHAR); PROCEDURE EscSeq2(n, m : INTEGER; letter : ARRAY OF CHAR);
VAR nstr, mstr : ARRAY 5 OF CHAR; VAR nstr, mstr : ARRAY 5 OF CHAR;
cmd : ARRAY 12 OF CHAR; cmd : ARRAY 12 OF CHAR;
BEGIN BEGIN
IF n < 1 THEN n := 1 END;
IF m < 1 THEN m := 1 END;
IntStr.IntToStr(n, nstr); IntStr.IntToStr(n, nstr);
IntStr.IntToStr(m, mstr); IntStr.IntToStr(m, mstr);
@ -165,34 +181,63 @@ CONST
EscSeq2 (n, m, 'f'); EscSeq2 (n, m, 'f');
END HVP; END HVP;
(* wrappers *) (* Select Graphic Rendition
PROCEDURE EraseDisplay*; Sets SGR parameters, including text color. After CSI can be zero or more parameters separated with ;. With no parameters, CSI m is treated as CSI 0 m (reset / normal), which is typical of most of the ANSI escape sequences *)
BEGIN
ED(2);
END EraseDisplay;
(* pascal crt like wrapper *) PROCEDURE SGR*( n : INTEGER);
PROCEDURE ClrScr*;
BEGIN BEGIN
ED(2); EscSeq(n, 'm');
END ClrScr; END SGR;
(* pascal crt like wrapper *) PROCEDURE SGR2*( n, m : INTEGER);
PROCEDURE GotoXY* (x, y: INTEGER);
BEGIN BEGIN
CUP (y, x); EscSeq2(n, m, 'm');
END GotoXY; END SGR2;
(* Device Status Report
Reports the cursor position (CPR) to the application as (as though typed at the keyboard) ESC[n;mR, where n is the row and m is the column.) *)
PROCEDURE DSR*(n : INTEGER);
BEGIN
EscSeq(6, 'n');
END DSR;
(* Save Cursor Position *)
PROCEDURE SCP*;
BEGIN
EscSeq0('s');
END SCP;
(* Restore Cursor Position *)
PROCEDURE RCP*;
BEGIN
EscSeq0('u');
END RCP;
(* Hide the cursor *)
PROCEDURE DECTCEMl*;
BEGIN
EscSeq0("?25l")
END DECTCEMl;
(* shows the cursor *)
PROCEDURE DECTCEMh*;
BEGIN
EscSeq0("?25h")
END DECTCEMh;
BEGIN BEGIN
(* init CSI sequence *) (* init CSI sequence *)
COPY(Escape, CSI); COPY(Escape, CSI);
Strings.Append(LeftCrotchet, CSI); Strings.Append(LeftCrotchet, CSI);
(*
EraseDisplay; EraseDisplay;
GotoXY (0, 0); GotoXY (0, 0);
COPY(CSI, tmpstr); COPY(CSI, tmpstr);
Strings.Append(Green, tmpstr); Strings.Append(Green, tmpstr);
Strings.Append("hello", tmpstr); Strings.Append("hello", tmpstr);
Console.String(tmpstr); Console.Ln; Console.String(tmpstr); Console.Ln;
*)
END vt100. END vt100.

View file

@ -1 +1 @@
ce94362b690a9421dbf818caf631e4b6122a661b cdb8a13e4b5934d5f3e3e447f26636575b6b12a8

View file

@ -1 +1 @@
ce94362b690a9421dbf818caf631e4b6122a661b e333e29633f079351b61c784c08d606afcb68ffd

View file

@ -1 +1 @@
5868f635083b8744630e51f3e436490d72f0e77f cdb8a13e4b5934d5f3e3e447f26636575b6b12a8