[fpc-pascal] KeyPressed.

Lowell C. Savage savage at lanl.gov
Fri Aug 19 18:54:13 CEST 2005


I've got a weird one for the experts here.

I'm running an old DOS (originally compiled with TP) Pascal program that 
uses the CRT unit.  It has several places where it uses KeyPressed/ReadKey 
to pause a screen until the user responds.  It uses the same combination to 
read user input.  However, it appears to be a random function which 
determines whether (or when?) a key is detected.

For instance, when the program begins, it sets up the screen, (clears, 
displays a title at the top, and displays some initial messages, then uses 
"KeyPressed/ReadKey" to clear the keyboard buffer. then displays a "Press 
any key to continue:" prompt and waits for a successful "KeyPressed" (using 
"REPEAT UNTIL KeyPressed;" and then discards the return from the following 
ReadKey.

The trouble is that after that "Press any key to continue" prompt comes up, 
I may need to press anywhere from 1 to 10 keys to get the "KeyPressed" 
routine to see it.  (I inserted logging statements between each line of code.)

Of course, being a (moderately) creative sort, I threw together a small 
test program that had just the elements I was interested in.  That program 
worked!  So there is apparently some interaction with something (WinCRT? 
DOS? something else?) which is making KeyPressed not work in the big old 
DOS program while it works just fine in the small test program.

Any ideas?  (Note, please don't dig too much into this on my behalf--I'm 
hoping someone else has run into this issue and figured it out.  Now that I 
know how to do it, I'm almost done with another DLL which does my keyboard 
IO using the standard C libraries.  In other words, I'm replacing all my 
"KeyPressed" and "ReadKey" calls with "CheckKey" and "GetKey" calls 
respectively which, in turn, respectively call the C standard library 
<conio.h> functions "_kbhit" and "getch".  But if there is a simple fix to 
the KeyPressed issue, then my IO.pp unit can simply have an implementation 
that calls KeyPressed and ReadKey instead of using the DLL.)

Thanks in advance.

Lowell C. Savage
savage at lanl.gov
505-667-6964 (office/msg)
360-961-8965 (cell/msg)
505-667-4341 (shared fax)  






More information about the fpc-pascal mailing list