KEYS allows you to provide automatic keystrokes. One highly useful technique is to run KEYS from a batch file to set up some automatic keystrokes for the next program in the batch file. KEYS is fully compatible with the program KSTACK which is shipped with 4DOS, and is also mostly compatible with 4DOS's KEYSTACK command. KEYS provides a superset of the capabilities of 4DOS KSTACK program and KEYSTACK command, in a fully coexistant environment. KEYS can be substituted for the KSTACK program, or for the KEYSTACK command, or both. KEYS has a more useable command line syntax for keystroke specification than the KEYSTACK command. KEYS consumes less resident memory than the KSTACK program. KEYS comes with assembler source, and can be used independently of 4DOS. To install KEYS, run it with the /I parameter: KEYS /I (This is equivalent to running the KSTACK program with no parameters prior to it being installed, or with the /I parameter at any time.) To check if KEYS has already been installed, run it with no parameters. KEYS will inform you of the installation state. To initialize keystrokes, run it with any of the other parameters below on the command line (They are a superset of KEYSTACK's parameters). If the command line isn't long enough to allow specification of enough keystrokes, you can put the keystroke parameters into a file, and use the command: KEYS /F < file The parsing is very dumb. If you follow the rules below, will should have no problem. If you do not, you may get unpredictable keystrokes. Unquoted numbers should generally be followed by a space. quoted string: begins and ends with the same quote character. All characters between are automatic keystrokes. The quote character itself may be either ' or ", and may not be imbedded within the quoted string. A string delimited by leading and trailing tilde characters ("~") can also be used. In this case, the scancodes used for the digits and for the characters ".*-+" are those from the numeric keypad. -: Satisfies a check for type-ahead with a zero response, is ignored for waited get character requests. !: Clears all pending KEYS keystrokes, as well as all user supplied keystrokes. Does not clear any parameters specified with this same command, however, only keystrokes that existed before this invocation of KEYS are cleared. f1-f12: Generates the extended ASCII sequence for function keys 1 to 12. fs1-fs12: Generates codes for shifted function keys. fc1-fc12: Generates codes for control function keys. fa1-fa12: Generates codes for alternate function keys. r,e: Either of these generate a carriage return. ^c: Generates the control code associated with the character "c". Control-C is not specially recognized by the BIOS in this manner. The character "c" should generally be a letter. &c: Generates the ALT code associated with the character "c". The character "c" should generally be a letter. numbers: The ASCII code of any character can be typed in. If the number is greater than 255 it is assumed to also contain the scan code for the character. Extended ASCII: An @-sign followed by a number code is treated as an Extended ASCII code. All Function keys are included. Enhanced Keyboard Extended ASCII: A %-sign followed by a number code is treated as an Extended ASCII code from the enhanced keyboard. The ASCII value is hex E0 'à'. Scan code: A #-sign followed by a number changes the scan code that is provided for successive characters. The initial value is 255. A value of 255 emulates using the actual keys on the keyboard: the scan code is derived from the ASCII value of the keystroke. Other values of the scan code are used for every character specified until the scan code is changed again. For example, since hitting the "+" key on the numeric pad is indistinguishable from hitting the "+" key on the alphanumeric pad by the ASCII value, KEYSTACK will interpret it as coming from the alphanumeric keyboard. However, to specify it as coming from the numeric pad, use the following parameters: #78 "+". Or ~+~. Strange combinations of scan codes and ASCII codes can result from misuse of this feature. Also, any combination of codes that can be generated from any keyboard can be generated this way. /wnnn: nnn is a number of tenths of seconds that are delayed between between the prior and next parameters. Numbers between 0 and 255 are acceptable. A tenth of a second is approximated by 2 BIOS clock ticks, causing the actual delay to be somewhat longer than specified. Note: minor incompatibilities with the KSTACK program and KEYSTACK command of 4DOS: KEYSTACK's /W parameter is in 18ths of a second, or BIOS clock ticks. KEYS will wait twice as long for the same specification. Generally, this will slow things down a little but otherwise not cause bad effects. Tenths of seconds are felt to be more user-friendly. KEYS automatically supplies the correct BIOS scan code for parameter keystrokes. KEYSTACK generally supplies 0 for the scan code. KEYS can simulate KEYSTACK's behavior in this regard, if you supply as the first parameter "#0". However, KEYS default behavior is superior to KEYSTACK's default behavior. KEYS can be patched to supply scan codes for alternate keyboards. There are two tables at the end of the binary that are used to look up the scan code value for a particular ASCII value... the first with preference for the alphanumeric keyboard, the second with preference for the numeric keypad, for those characters that are on both. Written by Glenn Linderman, glenn.linderman@sandiegoca.ncr.com