1. Console Buffers
- Posted by Pete Lomax <petelomax at blueyonder.co.uk> Dec 23, 2004
- 841 views
- Last edited Dec 24, 2004
Can anyone help, this is so very nearly working. I am attempting to emulate the F1/F2 screen buffering of the debugger. save_text_image() and display_text_image() don't work on exw. I managed to create the second buffer and can flick between it and the original console, however the standard output is ending up in the wrong buffer. I want to keep the a's and the b's separate.
constant FALSE=0, TRUE=1 include dll.e integer topline integer debugOn debugOn=FALSE sequence runScreen, runPos include image.e atom k32,CreateConsoleScreenBuffer,SetActiveScreenBuffer,GetStdHandle,SetStdHandle,runBuffer,dbgBuffer k32=0 global procedure debug_screen(integer on) -- -- if required save the current run-time screen -- if on then if not debugOn then if platform()=WIN32 then if k32=0 then k32=open_dll("kernel32.dll") CreateConsoleScreenBuffer=define_c_func(k32,"CreateConsoleScreenBuffer", {C_LONG,C_LONG,C_POINTER,C_LONG,C_LONG},C_LONG) SetActiveScreenBuffer=define_c_proc(k32,"SetConsoleActiveScreenBuffer",{C_LONG}) GetStdHandle=define_c_func(k32,"GetStdHandle",{C_UINT},C_INT) SetStdHandle=define_c_proc(k32,"SetStdHandle",{C_UINT,C_UINT}) runBuffer=c_func(GetStdHandle,{-11}) --STD_OUTPUT_HANDLE dbgBuffer=c_func(CreateConsoleScreenBuffer,{#C0000000,#00000003,NULL,1,NULL}) -- {generic read+write, file share read+write, NULL, console_textmode_buffer, null} end if c_proc(SetActiveScreenBuffer,{dbgBuffer}) c_proc(SetStdHandle,{-11,dbgBuffer}) else runScreen=save_text_image({1,1},{25,80}) end if runPos=get_position() debugOn=TRUE end if else if debugOn then if platform()=WIN32 then c_proc(SetActiveScreenBuffer,{runBuffer}) c_proc(SetStdHandle,{-11,runBuffer}) else display_text_image({1,1},runScreen) topline=-99 end if position(runPos[1],runPos[2]) debugOn=FALSE end if end if end procedure for i=1 to 10 do debug_screen(1) puts(1,"aa") if getc(0) then end if debug_screen(0) puts(1,"bbb") if getc(0) then end if end for
Regards, Pete
2. Re: Console Buffers
- Posted by "Juergen Luethje" <j.lue at gmx.de> Dec 23, 2004
- 757 views
- Last edited Dec 24, 2004
Pete Lomax wrote: > Can anyone help, this is so very nearly working. > I am attempting to emulate the F1/F2 screen buffering of the debugger. > save_text_image() and display_text_image() don't work on exw. Are you using an Eu version <= 2.4? In Eu 2.5 alpha, it *should* work: <quote> The library routines: put_screen_char(), get_screen_char(), save_text_image() and display_text_image() have been implemented for Windows text-mode consoles. These functions now work across all platforms. Suggested by C.K. Lester. </quote> [Euphoria 2.5 alpha, relnotes.htm] <big snip> Regards, Juergen -- A: Because it considerably reduces the readability of the text. Q: Why? A: Top posting. Q: What is annoying in e-mail and news?