Terminal control/Positional read: Difference between revisions
Content added Content deleted
m (sorry - forget the "store in a variable" part) |
(→{{header|TXR}}: Added.) |
||
Line 161: | Line 161: | ||
other = scrRead(40, 6, 1) /*same thing, but for row forty. */ |
other = scrRead(40, 6, 1) /*same thing, but for row forty. */ |
||
/*stick a fork in it, we're done.*/</lang> |
/*stick a fork in it, we're done.*/</lang> |
||
=={{header|TXR}}== |
|||
<lang txrlisp>;;; Type definitions and constants |
|||
(typedef BOOL (enum BOOL FALSE TRUE)) |
|||
(typedef HANDLE cptr) |
|||
(typedef WCHAR wchar) |
|||
(typedef DWORD uint32) |
|||
(typedef SHORT short) |
|||
(typedef COORD (struct COORD |
|||
(X SHORT) |
|||
(Y SHORT))) |
|||
;;; Various constants |
|||
(defvarl STD_INPUT_HANDLE (- #x100000000 10)) |
|||
(defvarl STD_OUTPUT_HANDLE (- #x100000000 11)) |
|||
(defvarl STD_ERROR_HANDLE (- #x100000000 12)) |
|||
(defvarl NULL cptr-null) |
|||
(defvarl INVALID_HANDLE_VALUE (cptr-int -1)) |
|||
;;; Foreign Function Bindings |
|||
(with-dyn-lib "kernel32.dll" |
|||
(deffi GetStdHandle "GetStdHandle" HANDLE (DWORD)) |
|||
(deffi ReadConsoleOutputCharacter |
|||
"ReadConsoleOutputCharacterW" BOOL (HANDLE |
|||
(ptr-out (array 1 WCHAR)) |
|||
DWORD |
|||
COORD |
|||
(ptr-out (array 1 DWORD))))) |
|||
;;; Now the character at <2, 5> -- column 3, row 6. |
|||
(let ((console-handle (GetStdHandle STD_OUTPUT_HANDLE))) |
|||
(when (equal console-handle INVALID_HANDLE_VALUE) |
|||
(error "couldn't get console handle")) |
|||
(let* ((chars (vector 5)) |
|||
(nread (vector 1)) |
|||
(success-p (ReadConsoleOutputCharacter console-handle |
|||
chars |
|||
1 |
|||
#S(COORD X 2 Y 5) |
|||
nread))) |
|||
(unless success-p |
|||
(error "ReadConsoleOutputCharacter failed")) |
|||
(unless (plusp [nread 0]) |
|||
(error "ReadConsoleOutputCharacter read zero characters")) |
|||
(format t "character is ~s\n" [chars 0])))</lang> |
|||
=={{header|XPL0}}== |
=={{header|XPL0}}== |