cvsuser 03/06/22 20:53:03
Modified: languages/BASIC/compiler RT_platform.pasm
RT_platform_ANSIscreen.pasm
Log:
Got the INKEY$() function working. Mostly.
Revision Changes Path
1.12 +1 -3 parrot/languages/BASIC/compiler/RT_platform.pasm
Index: RT_platform.pasm
===================================================================
RCS file: /cvs/public/parrot/languages/BASIC/compiler/RT_platform.pasm,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -w -r1.11 -r1.12
--- RT_platform.pasm 23 Jun 2003 03:40:07 -0000 1.11
+++ RT_platform.pasm 23 Jun 2003 03:53:02 -0000 1.12
@@ -83,11 +83,9 @@
ne sys, "MSWin32", NOTWIN
call _WIN32_INKEY
branch END
+NOTWIN: call _POSIX_INKEY
END: restoreall
ret
-
-NOTWIN: print "Not supported yet\n"
- end
.end
## Problem in ANSI
#SCREEN_GETFORE:
1.7 +37 -1 parrot/languages/BASIC/compiler/RT_platform_ANSIscreen.pasm
Index: RT_platform_ANSIscreen.pasm
===================================================================
RCS file: /cvs/public/parrot/languages/BASIC/compiler/RT_platform_ANSIscreen.pasm,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -w -r1.6 -r1.7
--- RT_platform_ANSIscreen.pasm 8 Jun 2003 18:15:41 -0000 1.6
+++ RT_platform_ANSIscreen.pasm 23 Jun 2003 03:53:02 -0000 1.7
@@ -109,4 +109,40 @@
restoreall
ret
.end
+.sub _POSIX_INKEY
+ saveall
+ loadlib P1, ""
+ dlfunc P0, P1, "system", "it"
+ set I0, 1
+ set S5, "stty cbreak -echo"
+ invoke
+ dlfunc P0, P1, "fcntl", "iiii"
+ set I0, 1
+ set I5, 0 # Stdin
+ set I6, 3 # F_GETFL
+ invoke
+
+ set I9, I5 # Old values
+ bor I7, I5, 2048 # O_NONBLOCK 04000
+ set I5, 0 # Stdin
+ set I6, 4 # F_SETFL
+ invoke
+
+ read S0, 1
+
+ set I7, I9
+ set I5, 0
+ set I6, 4
+ invoke
+
+ loadlib P1, ""
+ dlfunc P0, P1, "system", "it"
+ set I0, 1
+ set S5, "stty -cbreak echo"
+ invoke
+
+ .return S0
+ restoreall
+ ret
+.end