1. RE: Console window size: rows and columns

Terry Constant wrote:
> 
> 
> posted by: Terry Constant <EUforum at terryconstant.com>
> 
> Terry wrote:
> "I am using WinXp. When I use the video_config() function, the number 
> of rows/columns reported is 25/80. However, the console in which 
> I am in is 100/80. Is there a way to get the correct number 
> of rows/columns for the actual console in which a Euphoria program
> is running. BTW, I am using exwc.exe."
> 
> 100/80 should be 80/100 rows/columns. Further, output sometimes 
> gets confused and treats my 100 column console as if it only had
> 80 columns. This second issue is not important (at least not now). 
> I just added it as a bit more information. I am mainly interested
> in being able to get the correct number of rows and columns
> for a console text screen.
> 
> 
> Terry Constant

You should be able to get that info using GetConsoleScreenBufferInfo in 
kernel32.  If you'd like help with it let me know.  If so, I'd like to 
know if you are using any windows helper libraries before I go through 
the trouble of coding in pure Euphoria.

-- Brian

new topic     » topic index » view message » categorize

2. RE: Console window size: rows and columns

Brian wrote:
"You should be able to get that info using GetConsoleScreenBufferInfo in 
kernel32.  If you'd like help with it let me know.  If so, I'd like to 
know if you are using any windows helper libraries before I go through 
the trouble of coding in pure Euphoria."

Brian, thanks for the response. After getting your answer, I decided that
the capability that I wanted was not part of Euphoria. I do not have an 
appropriate helper library and did not want to write them, if I did not
have to. So I did some searching in the archives. 

I found wconsole.zip by Ken Roger in which he has already coded some 
routines for console I/O. I have not yet tested them, but they look like 
they will suffice. You might want to look at them.

Terry Constant

new topic     » goto parent     » topic index » view message » categorize

3. RE: Console window size: rows and columns

Terry Constant wrote:
> 
> Brian wrote:
> "You should be able to get that info using GetConsoleScreenBufferInfo in 
> 
> kernel32.  If you'd like help with it let me know.  If so, I'd like to 
> know if you are using any windows helper libraries before I go through 
> the trouble of coding in pure Euphoria."
> 
> Brian, thanks for the response. After getting your answer, I decided 
> that
> the capability that I wanted was not part of Euphoria. I do not have an 
> appropriate helper library and did not want to write them, if I did not
> have to. So I did some searching in the archives. 
> 
> I found wconsole.zip by Ken Roger in which he has already coded some 
> routines for console I/O. I have not yet tested them, but they look like 
> 
> they will suffice. You might want to look at them.
> 
> Terry Constant

I just had a look at Ken's library and it's close but not quite.  It 
needs some tweaks to get what you want...

my program:}}}
<eucode>
include wconsole.e

? getscreenheight()
? getscreenwidth()
</eucode>
{{{


returns:
15
140

I think it's returning the console buffer size (which on my system is 
140 width and 9999 height).  The actual window size is 140 width and 82 
height.  You just want the size of the visible console window, correct?  
(not the size of the console buffer...?)

Anyway, you can try it and see if it works for you, otherwise I could 
tweak the lib or continue to work on the pure Eu version that I've 
already started...

-- Brian

new topic     » goto parent     » topic index » view message » categorize

4. RE: Console window size: rows and columns

Brian,

You are correct. I will be looking into the specifics 
(such as those you mention) in a little while. I will 
let you know what I determine.

Terry Constant

new topic     » goto parent     » topic index » view message » categorize

5. RE: Console window size: rows and columns

Terry Constant wrote:
>
> Brian,
> 
> You are correct. I will be looking into the specifics 
> (such as those you mention) in a little while. I will 
> let you know what I determine.
> 
> Terry Constant

Well, I'm not sure this is going to help you either since the info 
returned pertains strictly to the console buffer.  If you run the 
program below a few times you'll see what I mean (notice the changing 
values).  But between this code and Ken's you might be able to get 
something going.  I typically take weekends away from the computer so 
I'll just give you my code.  To fix Ken's code, just make note of my use 
of peek2u() instead of his simple peek()'s... 

include dll.e
include machine.e
without warning

constant
   STD_INPUT_HANDLE  = -10,  --((DWORD)-10)
   STD_OUTPUT_HANDLE = -11,  --((DWORD)-11)
   STD_ERROR_HANDLE  = -12   --((DWORD)-12)
  
constant
   SBI_BYTES = 22,
   SBI_SIZEX = 0,
   SBI_SIZEY = 2,
   SBI_CPOSX = 4,
   SBI_CPOSY = 6,
   SBI_ATTR  = 8,
   SBI_WINX1 = 10,
   SBI_WINY1 = 12,
   SBI_WINX2 = 14,
   SBI_WINY2 = 16,
   SBI_MAXX  = 18,
   SBI_MAXY  = 20

constant
   kernel32 = open_dll( "kernel32.dll" ),

   xGetStdHandle = define_c_func( kernel32, "GetStdHandle", {C_UINT}, 
C_POINTER ),
   xGetConsoleScreenBufferInfo =
    define_c_func( kernel32, "GetConsoleScreenBufferInfo", 
{C_POINTER,C_POINTER}, C_INT )

constant
   Info = allocate( SBI_BYTES*8 )

constant
   hStdHandle = c_func( xGetStdHandle, { STD_OUTPUT_HANDLE } )

  ------------------------------

function peek2u( atom address )
   sequence bytes
  
   bytes = peek({address,2})
   return bytes[2]*256+bytes[1]
end function

  ------------------------------

if not c_func( xGetConsoleScreenBufferInfo, { hStdHandle, Info } ) then
   puts(1,"Doh!!!")
   abort(1)
end if

  ------------------------------

printf(1,"Console screen buffer size: %d x %d\n", 
{peek2u(Info+SBI_SIZEX),peek2u(Info+SBI_SIZEY)})
printf(1,"Current buffer cursor postion: (%d,%d)\n", 
{peek2u(Info+SBI_CPOSX),peek2u(Info+SBI_CPOSY)})
printf(1,"Console screen buffer coordinates: (%d,%d)-(%d,%d)\n",
          
{peek2u(Info+SBI_WINX1),peek2u(Info+SBI_WINY1),peek2u(Info+SBI_WINX2),peek2u(Info+SBI_WINY1)})

printf(1,"Maximum size of the console window: %d x %d\n", 
{peek2u(Info+SBI_MAXX),peek2u(Info+SBI_MAXY)})


-- Good Luck!!!
-- Brian

new topic     » goto parent     » topic index » view message » categorize

6. RE: Console window size: rows and columns

Brian wrote:
"just make note of my use 
of peek2u() instead of his simple peek()'s"

Thanks for peek2u(). I have applied it. The code and returns seem to be 
working consistently now. I think I will be able to do what I want.

Terry Constant

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu