diff --git a/ocat b/ocat index 6cbe071c..b23790f0 100755 Binary files a/ocat and b/ocat differ diff --git a/showdef.REMOVED.git-id b/showdef.REMOVED.git-id index e3fff2fe..306d069d 100644 --- a/showdef.REMOVED.git-id +++ b/showdef.REMOVED.git-id @@ -1 +1 @@ -4b540a376f943c1a9cd7bd56b1f6020c7722374a \ No newline at end of file +25440b9ec87f8fbe82922ad8cd707a3c8fd4644a \ No newline at end of file diff --git a/src/lib/system/darwin/clang/x86_64/Unix.Mod b/src/lib/system/darwin/clang/x86_64/Unix.Mod index cbcf6d8d..93929381 100644 --- a/src/lib/system/darwin/clang/x86_64/Unix.Mod +++ b/src/lib/system/darwin/clang/x86_64/Unix.Mod @@ -332,7 +332,7 @@ from man gettimeofday PROCEDURE -includeUio() "#include "; - (* for getpid(), lseek(), close(), fsync(), ftruncate(), read() *) + (* for getpid(), lseek(), close(), fsync(), ftruncate(), read(), sleep() *) PROCEDURE -includeUnistd() "#include "; @@ -482,6 +482,11 @@ from man gettimeofday PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : INTEGER): INTEGER + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): INTEGER + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/clang/armv6j/Unix.Mod b/src/lib/system/linux/clang/armv6j/Unix.Mod index 9e46278e..d42d01e8 100644 --- a/src/lib/system/linux/clang/armv6j/Unix.Mod +++ b/src/lib/system/linux/clang/armv6j/Unix.Mod @@ -234,6 +234,22 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) + PROCEDURE -includeStdlib() + "#include "; + + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +383,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/clang/armv6j_hardfp/Unix.Mod b/src/lib/system/linux/clang/armv6j_hardfp/Unix.Mod index 9e46278e..d42d01e8 100644 --- a/src/lib/system/linux/clang/armv6j_hardfp/Unix.Mod +++ b/src/lib/system/linux/clang/armv6j_hardfp/Unix.Mod @@ -234,6 +234,22 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) + PROCEDURE -includeStdlib() + "#include "; + + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +383,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/clang/armv7a_hardfp/Unix.Mod b/src/lib/system/linux/clang/armv7a_hardfp/Unix.Mod index 9e46278e..d42d01e8 100644 --- a/src/lib/system/linux/clang/armv7a_hardfp/Unix.Mod +++ b/src/lib/system/linux/clang/armv7a_hardfp/Unix.Mod @@ -234,6 +234,22 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) + PROCEDURE -includeStdlib() + "#include "; + + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +383,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/clang/powerpc/Unix.Mod b/src/lib/system/linux/clang/powerpc/Unix.Mod index 9e46278e..d42d01e8 100644 --- a/src/lib/system/linux/clang/powerpc/Unix.Mod +++ b/src/lib/system/linux/clang/powerpc/Unix.Mod @@ -234,6 +234,22 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) + PROCEDURE -includeStdlib() + "#include "; + + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +383,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/clang/x86/Unix.Mod b/src/lib/system/linux/clang/x86/Unix.Mod index 9e46278e..d42d01e8 100644 --- a/src/lib/system/linux/clang/x86/Unix.Mod +++ b/src/lib/system/linux/clang/x86/Unix.Mod @@ -234,6 +234,22 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) + PROCEDURE -includeStdlib() + "#include "; + + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +383,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/clang/x86_64/Unix.Mod b/src/lib/system/linux/clang/x86_64/Unix.Mod index 2e3099ce..3e477d69 100644 --- a/src/lib/system/linux/clang/x86_64/Unix.Mod +++ b/src/lib/system/linux/clang/x86_64/Unix.Mod @@ -313,7 +313,7 @@ from man gettimeofday PROCEDURE -includeErrno() "#include "; - (* for read(), write() *) + (* for read(), write() and sleep() *) PROCEDURE -includeUnistd() "#include "; @@ -321,6 +321,14 @@ from man gettimeofday PROCEDURE -includeStdlib() "#include "; + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -455,6 +463,11 @@ from man gettimeofday PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "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 *) diff --git a/src/lib/system/linux/gnuc/armv6j/Unix.Mod b/src/lib/system/linux/gnuc/armv6j/Unix.Mod index 9e46278e..e2a25ec5 100644 --- a/src/lib/system/linux/gnuc/armv6j/Unix.Mod +++ b/src/lib/system/linux/gnuc/armv6j/Unix.Mod @@ -234,6 +234,23 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) +(* commented, doesn't compile on 32bit GNU/Linux platforms + PROCEDURE -includeStdlib() + "#include "; +*) + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +384,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/gnuc/armv6j_hardfp/Unix.Mod b/src/lib/system/linux/gnuc/armv6j_hardfp/Unix.Mod index 9e46278e..e2a25ec5 100644 --- a/src/lib/system/linux/gnuc/armv6j_hardfp/Unix.Mod +++ b/src/lib/system/linux/gnuc/armv6j_hardfp/Unix.Mod @@ -234,6 +234,23 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) +(* commented, doesn't compile on 32bit GNU/Linux platforms + PROCEDURE -includeStdlib() + "#include "; +*) + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +384,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/gnuc/armv7a_hardfp/Unix.Mod b/src/lib/system/linux/gnuc/armv7a_hardfp/Unix.Mod index 9e46278e..e2a25ec5 100644 --- a/src/lib/system/linux/gnuc/armv7a_hardfp/Unix.Mod +++ b/src/lib/system/linux/gnuc/armv7a_hardfp/Unix.Mod @@ -234,6 +234,23 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) +(* commented, doesn't compile on 32bit GNU/Linux platforms + PROCEDURE -includeStdlib() + "#include "; +*) + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +384,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/gnuc/powerpc/Unix.Mod b/src/lib/system/linux/gnuc/powerpc/Unix.Mod index 9e46278e..e2a25ec5 100644 --- a/src/lib/system/linux/gnuc/powerpc/Unix.Mod +++ b/src/lib/system/linux/gnuc/powerpc/Unix.Mod @@ -234,6 +234,23 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) +(* commented, doesn't compile on 32bit GNU/Linux platforms + PROCEDURE -includeStdlib() + "#include "; +*) + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +384,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/gnuc/x86/Unix.Mod b/src/lib/system/linux/gnuc/x86/Unix.Mod index 9e46278e..e2a25ec5 100644 --- a/src/lib/system/linux/gnuc/x86/Unix.Mod +++ b/src/lib/system/linux/gnuc/x86/Unix.Mod @@ -234,6 +234,23 @@ TYPE PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) +(* commented, doesn't compile on 32bit GNU/Linux platforms + PROCEDURE -includeStdlib() + "#include "; +*) + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -367,6 +384,11 @@ TYPE PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : LONGINT): LONGINT + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): LONGINT + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/lib/system/linux/gnuc/x86_64/Unix.Mod b/src/lib/system/linux/gnuc/x86_64/Unix.Mod index 7dfde70d..5bbea785 100644 --- a/src/lib/system/linux/gnuc/x86_64/Unix.Mod +++ b/src/lib/system/linux/gnuc/x86_64/Unix.Mod @@ -313,6 +313,22 @@ from man gettimeofday PROCEDURE -includeErrno() "#include "; + (* for read(), write() and sleep() *) + PROCEDURE -includeUnistd() + "#include "; + + (* for system() *) + PROCEDURE -includeStdlib() + "#include "; + + (* for nanosleep() *) + PROCEDURE -includeTime() + "#include "; + + (* for select() *) + PROCEDURE -includeSelect() + "#include "; + PROCEDURE -err(): LONGINT "errno"; @@ -447,6 +463,11 @@ from man gettimeofday PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT "sigsetmask(mask)"; + PROCEDURE -Sleep*(ms : INTEGER): INTEGER + "sleep(ms)"; + + PROCEDURE -Nanosleep*(VAR req : Timeval; VAR rem : Timeval): INTEGER + "nanosleep(req, rem)"; (* TCP/IP networking *) diff --git a/src/test/vt100/crt.Mod b/src/test/vt100/crt.Mod new file mode 100644 index 00000000..d2b298f2 --- /dev/null +++ b/src/test/vt100/crt.Mod @@ -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. diff --git a/src/test/vt100/vt100.Mod b/src/test/vt100/vt100.Mod index ac302a26..8224579e 100644 --- a/src/test/vt100/vt100.Mod +++ b/src/test/vt100/vt100.Mod @@ -1,7 +1,7 @@ MODULE vt100; IMPORT Console, Strings, IntStr := oocIntStr; - + (* reference http://en.wikipedia.org/wiki/ANSI_escape_code *) CONST Escape* = 1BX; @@ -30,10 +30,18 @@ CONST CSI* : ARRAY 5 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); VAR nstr : ARRAY 2 OF CHAR; - cmd : ARRAY 5 OF CHAR; + cmd : ARRAY 7 OF CHAR; BEGIN IntStr.IntToStr (n, nstr); COPY(CSI, cmd); @@ -42,13 +50,21 @@ CONST Console.String (cmd); 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); VAR nstr, mstr : ARRAY 5 OF CHAR; cmd : ARRAY 12 OF CHAR; BEGIN - IF n < 1 THEN n := 1 END; - IF m < 1 THEN m := 1 END; IntStr.IntToStr(n, nstr); IntStr.IntToStr(m, mstr); @@ -165,34 +181,63 @@ CONST EscSeq2 (n, m, 'f'); END HVP; - (* wrappers *) - PROCEDURE EraseDisplay*; - BEGIN - ED(2); - END EraseDisplay; +(* Select Graphic Rendition + 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 *) - (* pascal crt like wrapper *) - PROCEDURE ClrScr*; + PROCEDURE SGR*( n : INTEGER); BEGIN - ED(2); - END ClrScr; + EscSeq(n, 'm'); + END SGR; - (* pascal crt like wrapper *) - PROCEDURE GotoXY* (x, y: INTEGER); + PROCEDURE SGR2*( n, m : INTEGER); BEGIN - CUP (y, x); - END GotoXY; + EscSeq2(n, m, 'm'); + 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 (* init CSI sequence *) COPY(Escape, CSI); Strings.Append(LeftCrotchet, CSI); - +(* EraseDisplay; GotoXY (0, 0); COPY(CSI, tmpstr); Strings.Append(Green, tmpstr); Strings.Append("hello", tmpstr); Console.String(tmpstr); Console.Ln; - +*) END vt100. diff --git a/voc.REMOVED.git-id b/voc.REMOVED.git-id index 1e280b2d..5d2efab8 100644 --- a/voc.REMOVED.git-id +++ b/voc.REMOVED.git-id @@ -1 +1 @@ -ce94362b690a9421dbf818caf631e4b6122a661b \ No newline at end of file +cdb8a13e4b5934d5f3e3e447f26636575b6b12a8 \ No newline at end of file diff --git a/vocstatic.linux.clang.x86_64.REMOVED.git-id b/vocstatic.linux.clang.x86_64.REMOVED.git-id index 1e280b2d..3c1beac3 100644 --- a/vocstatic.linux.clang.x86_64.REMOVED.git-id +++ b/vocstatic.linux.clang.x86_64.REMOVED.git-id @@ -1 +1 @@ -ce94362b690a9421dbf818caf631e4b6122a661b \ No newline at end of file +e333e29633f079351b61c784c08d606afcb68ffd \ No newline at end of file diff --git a/vocstatic.linux.gnuc.x86_64.REMOVED.git-id b/vocstatic.linux.gnuc.x86_64.REMOVED.git-id index 3c22f56d..5d2efab8 100644 --- a/vocstatic.linux.gnuc.x86_64.REMOVED.git-id +++ b/vocstatic.linux.gnuc.x86_64.REMOVED.git-id @@ -1 +1 @@ -5868f635083b8744630e51f3e436490d72f0e77f \ No newline at end of file +cdb8a13e4b5934d5f3e3e447f26636575b6b12a8 \ No newline at end of file