Documentation File Take.txt (revised 5/15/88) >>> Take.Com <<< - a memory resident screen line grabber for IBM PC work-alikes (optimized for use with terminal emulation programs) by Mark C. Smith version 88.5 (test version) Introduction There are many of us who spend a good portion of our PC time interacting with a remote computing network using some kind of terminal emulator software. Unfortunately, the terminal emulators I use do not typically have a facility for the re-entering lines that are still on the screen or in the conversation buffer. The program Take was designed to provide line re-entry with nearly any terminal program (Take is being tested with Window - University of Michigan, Procomm 2.4.2, and Kermit 2.29b). Take is memory-resident and provides some interesting features: - Editing of a potential re-entry line right on the screen in the place the line appears (complete set of editing functions) - Active indication of position and insert status using a normal cursor. Insert on is indicated by a full height (block-style) cursor. - The ability to suspend itself to pass a keystroke pressed when Take is "popped up" that Take does not recognize. This allows scrolling of the communication program's text buffer without turning Take off and back on again (by passing Page Up and Page Down to the program, for example). This is probably Take's most unique and difficult feature that Take implements on top of multiple programs using memory resident techniques. - Transparency to the underlying program. Edited lines are restored on screen, and cursor state is restored as well as is possible. - Facilities to turn off a resident version of Take and to re-start a version turned off (but only one copy of Take can be in memory, even if another is turned off). - Tight code and fast operation. Take is written entirely in 8086 assembler, and screen read and writes are directly to video memory. - User configuration option for all keys used by Take and for some additional options. This will minimize interference with other resident programs. How To Get Take Up And Running Take requires an IBM compatible machine, and should run on any PC,XT,or ATs that have a CGA,MDA,EGA,or VGA display adapter. Take does directly access the video display memory, so this may cause problems in some clones (not likely though). It should run under DOS version 2 or greater. The resident portion of Take steals less then 1900 bytes of memory (about half the code for Take is for configuration modification/display and installation). Take is bundled in the .arc format, which means that it must be unArced to be useful. If you are reading this documentation (take.txt) you must have already accomplished the use of one of the arc programs to extract the files. The files contained in the take.arc file are: take.txt - this brief documentation you're reading now take.com - a version of take configured "generically" (no prefix or suffixes; CGA Snow=Yes) take_p.com - a version of take configured for Procomm. (prefix=ALT-F6,suffix=ESC,CGA Snow=No) take_w.com - a version of take configured for Window (communication program of the University of Michigan. prefix=suffix=none,CGA Snow=No) take_k.com - a version of take configured for Kermit. (prefix=none,suffix=END,CGA Snow=No) Note than all the _? files were made just by running take.com with the configure option. They are provided as a convenience and as examples of use of the prefix and suffix sequences. The only file you need is one of the .com files. I suggest copying one of the _p,_w,_k files to take.com if you only need one of them. The syntax for invoking Take is: take -{option} or take /{option} where {option} is one of BCDIOR (bcdior) Action Syntax Effect ------ ------ ------ install take -i Take is installed (memory resident) if it is not already installed. Header and author contact information is displayed. brief install take -b Same as i(nstall), except most messages are suppressed. display config. take -d Displays the current configuration of Take. This mostly consists of key definitions. configure take -c Invokes the interactive configuration process to set keys and more. turn off take -o The version of Take resident in memory is disabled (effectively off). restart (turn on) take -r The version of Take resident in memory is re-enabled. usage info. take (No option specified). A usage message is displayed. If not installed in memory yet, you will be asked if you want to install Take. Using Take Upon installation, Take becomes memory resident and checks in the background for the hotkey to be pressed (the default is ALT-F9). Typically, you will want to install Take (run with -i or -b option) and then run your favorite terminal emulation program. Any time you wish to use Take to re-enter a line that is on the screen or in the conversation buffer, press the hotkey. As long as the video is not in a graphics mode, Take will pop up. (Note that Take cannot and will never pop up in a graphics mode). Take will first send a prefix keystroke sequence to the program currently running before popping up. This prefix feature is for programs such as Procomm that require some keystroke(s) to invoke conversation buffer scroll-back mode. (In Procomm, the prefix is a single key: ALT-F6). The prefix can be nothing (as for Kermit). Then Take will place the cursor at the beginning of the line above the one it was last on and wait for keystrokes. There are several general types of keys that Take handles in different ways: Cancel Key (configurable, default is ESC) - Take will pass a suffix keystroke sequence to the program running underneath and then return control to that program. The suffix sequence is used to restore the program to its previous state. (In Procomm, ESCAPE is used to drop out of scroll-back mode; in Kermit an END is used to return to the end of the conversation buffer). Grab Key (configurable, default is RETURN) - Take will pass the suffix keystroke sequence (see above), and then all of the text from the left of the line the cursor is on to the last non-blank character in the line. Presently, no trailing Return is sent at the end of the line. This option may be added in the future. Editing Keys (configurable) - Take will perform an editing action on the cursor line. Possible actions and defaults: Default Key Action ----------- ------ HOME Move cursor to beginning of line END Move cursor to end of line Left Arrow Move cursor one position to the left Right Arrow Move cursor one position to the right INSert Toggle Insert/Overwrite mode Insert mode is indicated by a full height (block-style) cursor DELete Remove the character under the cursor Backspace Rubout to the left of the cursor Ctrl-END Erase to end of line (from cursor right) Line Movement Keys (configurable) - Take restores the line the cursor is on, removing any changes made and moves the cursor up (default=Up Arrow) or down (default=Down Arrow) a line and to the beginning of the line. Other Keys (anything else!) - Take attempts to pass the key through to the underlying program (terminal emulator,etc.) so that the program can react to the key. After the key is accepted by the program, Take will regain control and pop back up and place the cursor at the beginning of the screen line Take was last on. Between passing the keystroke and popping back up, any changes to an edited line are restored. This tricky feature (the passing of keys Take doesn't itself use) allows the scrolling of the conversation buffer while line re-entry is taking place (much like some real terminals allow). Page Up and Page Down in Procomm, Kermit, and Window all work properly. Other terminal program functions should also work (the page up and down is probably the most obviously useful, though). Configuring Take Take, unlike the vast majority of PC programs, allows for complete user configuration. This includes the "hotkey" to pop-up take, line editing keys, prefix and suffix keystroke sequences, and more. The -d option can be used to display the current configuration and the -c option is used to begin the interactive configuration process. The procedure should be fairly self- explanatory, since you are prompted for each key. The tricky parts involve the prefix/suffix sequences and the CGA snow question. Prefix and suffix sequences are emitted by Take before popping up and after Take is done executing a re-entry operation (or is cancelled). The sequences can be up to 10 keystrokes in length at present (this should be plenty for most programs, I hope). During configuration of the suffix or prefix, you can enter any series of keystrokes terminated by an ALT- (ALT Minus). This implies that ALT- itself can not be part of the sequence. Let me know if this is a problem, since the terminator is not at present user-configurable. Take asks a "CGA with snow problem" question near the end of the configuration process. Answer y (for yes) if your machine's video adapter is an original IBM CGA or a clone with the dreaded snow problem. If you are unsure, try Take with n (for no) and see if the screen is filled with a snow-like pattern when you do editing on the screen with Take popped up. If the snow appears, you want to say yes. This option is only important if your program actually runs using a CGA. It is ignored for any other video adapter (MDA,EGA,VGA). At the end of the questions, you will be asked if you wish to clone take.com onto disk. Actually, under DOS version 3 or greater, Take extracts the full pathname of the program you ran and will write over that file with the newly configured version if you respond y (for yes) to this question. If you say n (no), the new configuration is discarded. Under DOS 2.x, the file written is always take.com in the default path (since I couldn't find a reliable way to get the actual pathname in these DOS versions). The file will be created if necessary. If you want to have different versions of Take configured for various terminal programs, you can rename and copy the Take.com file and then configure the copies independently, as was done for the versions provided in the take.arc distribution file. Using Take With Other Programs There is no reason why Take should not work with your favorite text editor, word processor, or any other text-mode program except for the problems inherent in a memory resident program interfering with the program it pops up over. For example, Take seems to work o.k. (not perfectly) with the Turbo Pascal 3.x editor, but calling up Take under Microsoft Word 4.0 locks up my machine. The only thing you can do is configure Take as best you can for the program and try it out. Take is (obviously) optimized for terminal emulation programs, since it was designed with that use in mind. It also should work at the DOS command prompt. Technical Information (This is provided only for those interested or in case Take interferes with another memory resident program and you might want to try to guess why). When Take is installed, it chains onto interrupt vector 16h (the BIOS keyboard service routine). Virtually all of Take's work is done from within this service routine. Int. 16h is called by nearly all programs to request keystrokes or status information. When Take is looking for the hotkey, it calls the old int 16h routine and checks all keycodes returned to see if the hotkey is pressed. If so, a request flag is set to indicate to Take that it should pop up at the next available opportunity. The hotkey is NOT extracted from the stream of keystrokes being returned by Int. 16h, but if the hotkey is intercepted during a keyboard status call, Take will probably pop up quickly and absorb the hotkey itself. The main routine for Take is called from within int 16h also, but it is called before the old int 16h routine checks for actual keys (actually only when service 0 or 1 - keystroke or status is called). If the request flags is set (or Take has been suspended), control is passed to the main Take routine. When Take is operating in this main routine, it is effectively in control and the editing and cursor control keys are active. Int. 16h is also used to pass a series of keystrokes to a program for the prefix, suffix, or the text grabbed off the screen. It is worth noting that programs that directly take control of the keyboard and get keystrokes via int. 9 or those that examine scan codes returned by int. 16h will not work properly with Take. Take makes no attempt to calculate a scan code for ascii text sent as keystrokes grabbed off the screen. Take just sends a bogus scan code of 0ffh in all cases. Fortunately, there are very few such programs (or at least non-memory resident ones) that seem to do either of these things. Take can also suspend itself in order to pass the "other" keys to an underlying application so that scrolling of the communication buffer or any other normal operation can be performed while Take is suspended. This is all accomplished with difficulty and trickery from within the same interrupt 16h, the BIOS keyboard service routine. Take requests keystrokes from int. 16h like most other programs, and screen reading and writing is done directly to video display memory for maximum speed. Take attempts to recognize CGA,MDA, and EGA. VGA is treated like EGA, which should work. Take even examines display column width and vertical row height, and in theory will work in EGA 43 line mode and other oddities. All messages and text that Take writes to the screen during the installation process are written to DOS standard output. This implies that you can completely suppress the messages (if you install Take in a batch file) by using redirection: e.g.: take -i >nul Be careful though - input during configuration, etc. is obtained NOT through DOS standard input, but by using keyboard BIOS routine 16h (as all keyboard input in Take is). As mentioned earlier, the present source code is a little over 1300 lines of 8086 Microsoft Masm 4.0 compatible assembler (now being assembled with Masm 5.1). The source code is not distributed along with the executables for various reasons, mainly because I don't want the program to be hacked and modified (unless I do it) while my name is attached. If you have a good reason to want to see part of the source code, or just want to know how something is done, contact me and we can work something out. Known Problems With Take/Things To Look Out For - Support for VGA (MCGA) has only been superficially tested. Other video adapters and various brands of EGAs, etc. may possibly cause problems. I hope not, but let me know. - Some versions of DOS may cause problems. Take seems to have no problems with IBM DOS 2.10 and 3.10, Zenith DOS 3.2, and some others, but I can't reasonable test DOS version out there. Take relies on DOS for very little; the cloning of the program itself is where DOS is most important. The method I use to find the pathname to clone to under DOS 3.x may not be a mandated method (it doesn't work for 2.x) and may cause some problems. Future Desired Enhancements - Modify the configuration routine to show the current definition, provide an option to leave unchanged, and to modify an already memory resident version of Take. Fairly easy to implement, but the configuration/display code is ugly right now and should be cleaned up first. - Provide a configurable option to automatically append a RETURN to the end of a grabbed text line. Easy to do; the most difficult part is again the configuration. - Provide a configurable option to display an indicator on the screen that Take is actually active (it could change when Take is suspended and of course disappear when Take is popped down fully). I had this in, but it really needs to be configurable as to where it will appear on the screen. - Option to uninstall. The current "turn off" and "restart" work to prevent conflicts with other programs you might run after ending a terminal session, but memory is still occupied. - Anything else anyone might request. I am open to suggestions! About the Author/How To Contact Me Mark Smith is currently a senior at the University of Michigan and will be graduating with a B.S.E. in Computer Engineering in the summer of 1988. He has owned a Zenith 158 XT work-alike for nearly three years, and is now finding its 8 Mhz 8088, CGA screen, and 20 MB hard disk lacking. Primary interests are not in software, but in hardware strangely enough, and he could never save enough time in the course of the rest of his life using Take to re-enter lines to balance the time spent programming it. Other interests include any kind of sport, reading any kind of book, and the outdoors. I can be reached for questions, comments, or whatever... via electronic mail: mark_smith@um.cc.umich.edu through June, 1988: 815 S. State Street Apt. #12 Ann Arbor, Michigan 48104 after July 1st: 2225 Shattuck Road Saginaw, Michigan 48603 As the program echoes, this version is free to use for any non-commercial purpose. In particular, any unauthorized sale, distribution of a modified version, or distribution without this accompanying documentation is disallowed. When in doubt, use your own good judgement.