{ LOU DUCHEZ >I recently wrote a short utility in TP. I want to make it a TSR >which can be activated by a hotkey (like ALT-R). Do I need to >redirect the Keyboard INT to my Program? Right on the nose. >if so, then where does my Program direct the INT after that? To the OLD keyboard interrupt. You can use the GetIntVec to find where the interrupt originally pointed; and trust me, it's a royal pain in the keister to Program your own. (Note: you'll want to execute a PUSHF instruction before calling the "old" interrupt; easily done With the built-in Assembler: Asm PUSHF end.) Now, For reading the Alt-R: you can get the "Alt" key from memory location $0040:$0017. It Records the Alt key, shift keys, caps lock, etc. Each bit sets/reports whether the key is active or inactive ("1" = "active"). Like so: Const insByte = $80; capsByte = $40; numByte = $20; scrollByte = $10; altByte = $08; ctrlByte = $04; lshftByte = $02; rshftByte = $01; Var keyboardstat: Byte Absolute $0040:$0017; To test if Alt is on, see if this expression evaluates to "True": keyboardstat and altByte = altByte As For the "R", check port $60 (the keyboard port) For scan code $13. (Maybe ya oughtta find a complete list of the scan codes.) >Also, I want my Window to disappear when my Program >is finished (and the previous screen to come back). >How can I do this? Store the old screen into memory. Hint: on Mono systems, it's the 4000 Bytes starting at b000:0000; on color, it's the 4000 starting at b800:0000. Use the "Move" Procedure first to move the 4000 Bytes to an Array of 4000 Characters, then use "Move" to move the 4000 Bytes back to the video location. > (BTW, I could do all this on the Commodore 64 back in the good 'ol >days when the 64 was king. Life was much simpler then). Yeah, I can hear ya now: "Oh you spoiled kids. When I started in computers, we had only 64k to work With, and we LIKED it! And we didn't waste our money on a separate 'monitor', oh no! we just hooked our computers up to the TV. Damn kids these days." }