News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests
NB: Posting URL's See here: Posted URL Change

Main Menu

inkey hangs

Started by markallyn, September 17, 2017, 03:16:20 AM

Previous topic - Next topic

markallyn

Good morning, Hutch,

OK, I ran your code and again it failed to read my keystroke.  And I had to terminate the session ungracefully.  Perhaps I should note that I am running masm/masm32 under WINE on a Linux box.  To date I have had no problems although doing this involves a few more keystrokes than would a WIN 32/64 session. 

As noted above, the masm32 printf macro works nicely.

Regards,

Mark

hutch--

Mark,

It may be the case the Wine does not respond to the MSVCRT dll in the same way that it does in Windows 32/64. From memory you can construct a similar effect with an API function call but its been years since I have done one like that so I don't remember how its done.

markallyn

Hutch,

I'm going to work under that assumption.  Since printf macro works fine it will do as a substitute.

This question is off-topic.  I will post it to The Campus if you think I should do so.  Here goes.

I have been attempting to install the 64 bit version of masm32 on another Linux box that is 64 bits.  The unzipped version I was able to download came with a file buildx64 containing a makeall.bat.  I've run into problems doing the build, again using Wine.  Gets partway thru and asks me (Yes|No) if I want to overwrite the lib file in buildx64.  When I hit the Yes response it crashes. 

Is there a more recent version of the 64 bit package that has the lib/include files already built?

Thanks,
Mark

dedndave

this program calls a function that uses ReadConsoleInput
it displays the values returned for any keystroke
to exit the program, press the Esc key
the function may be used in a similar way to inkey...

hutch--

Mark,

The problem here is I am developing 64 bit on Win 10 64 bit and have had to do a massive amount of testing to make it compatible with what works on Win 10. I check the apps on Win7 64 bit and have had no problems there but I am not willing to install Linux on a machine to further install Wine to test apps as I only have one life left and I don't have to time to learn a variant operating system to do the testing. I only undertake to make this 64 bit stuff so it works correctly on Win64 systems.

nidud

#20
deleted

nidud

#21
deleted

markallyn

Good morning Hutch and Nidud,

Hutch:  Do you have a masm64 package (I'm happy with whatever runs on Win 7) that I can download that is fully "made" in the form in which masm32 is built?  If so, how may I download it?

nidud:  Your last sentence appears to be fully consistent with what I am experiencing.

Thanks, folks.

Mark

markallyn

Hutch,

I forgot that 64 bit Win 7 probably doesn't exist!  My bad.

Mark

hutch--

You sound like someone out of the Unix world. Win7 64 bit Ultimate certainly exists and I have it on my last machine which still runs perfectly.

RE : 64 bit MASM, I do not have the right to distribute Microsoft 64 bit binaries and don't intend to drag through negotiation with Microsoft to try and get it. Your best chance is to use JWASM or UASM of Nidud's version as it may be better suited for the Linux platform you are using.

dedndave

i am curious to know if this works

;***********************************************************************************************

AnyKey  PROC

;Wait for Any Console Key Press - DednDave
;version 1, 12-2011
;version 2, 2-2013
;
;  This function returns when any console key is pressed (bKeyDown = 1).
;A possible drawback is that all input event records are removed from
;the console input queue until a key is pressed. In many cases, this is
;not an issue. The virtual key code, virtual scan code, TCHAR character,
;and control key state values are returned in registers.

;Call With: Nothing
;
;  Returns: EAX = TCHAR character (high word of EAX = 0)
;           ECX = control key state flags
;               Bit   Name                Meaning
;                0    RIGHT_ALT_PRESSED   Right ALT key is pressed
;                1    LEFT_ALT_PRESSED    Left ALT key is pressed
;                2    RIGHT_CTRL_PRESSED  Right CTRL key is pressed
;                3    LEFT_CTRL_PRESSED   Left CTRL key is pressed
;                4    SHIFT_PRESSED       SHIFT key is pressed
;                5    NUMLOCK_ON          NUM LOCK light is on
;                6    SCROLLLOCK_ON       SCROLL LOCK light is on
;                7    CAPSLOCK_ON         CAPS LOCK light is on
;                8    ENHANCED_KEY        Key is enhanced
;           EDX:
;           low word (DX) = virtual key code
;               high word = virtual scan code
;
;           all other registers are preserved

;-------------------------------------------------

    LOCAL   ir          :INPUT_RECORD
    LOCAL   uRecCnt     :UINT
    LOCAL   hStdInp     :HANDLE

;-------------------------------------------------

    INVOKE  GetStdHandle,STD_INPUT_HANDLE
    mov     hStdInp,eax
    .repeat
        INVOKE  ReadConsoleInput,hStdInp,addr ir,1,addr uRecCnt
        movzx   edx,word ptr ir.EventType
    .until (edx==KEY_EVENT) && (edx==ir.KeyEvent.bKeyDown)
    movzx   eax,word ptr ir.KeyEvent.UnicodeChar
    mov     ecx,ir.KeyEvent.dwControlKeyState
    mov     edx,dword ptr ir.KeyEvent.wVirtualKeyCode
    ret

AnyKey  ENDP

;***********************************************************************************************

nidud

#26
deleted