Как использовать ReadConsoleOutputCharacterA в Forth?

я использую

WINAPI: ReadConsoleOutputCharacterA KERNEL32.DLL

который, кажется, работает, но как обрабатывать параметры ввода и вывода? Особенно, как получить

hConsoleOutput [in] Дескриптор экранного буфера консоли. Дескриптор должен иметь право доступа GENERIC_READ. Дополнительные сведения см. в разделе Защита буфера консоли и права доступа.


person Lehs    schedule 01.06.2015    source источник


Ответы (1)


hConsoleOutput есть только подходящий дескриптор как есть. Некоторый пример использования для ReadConsoleOutputCharacter можно найти в каталоге devel (вклад).

Пример использования этого API:

\ Global variables in dictionary space just for learning,
\ -- don't use such approach, especially in multithreading.
VARIABLE lpNumberOfCharsRead
CREATE lpCharacter 5 CHARS ALLOT \ buffer for 5 chars

: XYC@ ( x y -- c )
  16 LSHIFT OR >R \ COORD
  0 lpCharacter C!
  lpNumberOfCharsRead \ _Out_ LPDWORD lpNumberOfCharsRead
  R> \ dwReadCoord
  1  \ nLength  \ to read
  lpCharacter \ _Out_ LPTSTR  lpCharacter
  H-STDOUT
  ReadConsoleOutputCharacterA ERR THROW
  lpCharacter C@
;

\ test
0 0 XYC@ EMIT

Полезная обертка:

: READOUT-CONSOLE-XY ( a-buf u x y -- a-buf u2 ior )
  2SWAP 2>R 16 LSHIFT OR >R
  0 SP@ R>          ( 0 addr-cnt coord )
  R> R@ H-STDOUT    ( 0 addr-cnt coord u a-buf handle )
  ReadConsoleOutputCharacterA ERR ( u2 ior )
  R> -ROT
;

\ test
HERE 50 0 0 READOUT-CONSOLE-XY THROW  TYPE
person ruvim    schedule 01.06.2015