========================== ConMan V1.1 ========================== This is the official V1.1 release of ConMan. As before, ConMan is freely distributable as shareware (user-supported software), so please pass along a copy to your friends and post the ARCed file CONMAN11.ARC to Amiga BBS's everywhere! If you've never used ConMan and dislike reading long documentation files, try this: first double-click on the "LoadLib" icon and then on "ConMan". Now open a CLI and enter a command like "CD". Try pressing the up-arrow. Interested? Read on! The included ConMan.doc file has a full description of the new features, but here's a brief summary of the changes: Features/Enhancements: -- new editing keys CTRL-], CTRL-^, CTRL-U, F7, F8 -- fast search keys F5 and F6 -- Undo key CTRL-minus for changed lines -- CTRL-B to clear history -- New installation option -wrap for wrap-around history -- History utility to load or save the history buffer -- KeyMap utility to select (local) keymap -- Handsome icons by Jeff White to activate ConMan from WorkBench Bugs fixed: -- Now works with original ABasiC -- Lines reentered in history buffer after CTRL-Y -- Shift-TAB key trapped ... William S. Hawes (617) 568-8695 (March 4, 1988) PLINK: WHAWES BIX: WHAWES CIS: 72230,267 ======================================================================== ConMan V1.1 Copyright (c) 1987, 1988 by William S. Hawes ======================================================================== ConMan is a replacement console handler that provides line editing and command history for any program that uses CON: windows. It runs under AmigaDOS V1.2 and is completely transparent to other software. After ConMan has been activated, all CON: windows opened by AmigaDOS will automatically use the ConMan handler. This includes command windows opened by NEWCLI as well as any data input/output windows that your program may use. Version 1.1 offers several new features including command searching, word-delete keys, an "undo" buffer, a utility to preload or save the history buffer, and a command to select a keymap. The most surprising new feature, though, is an old feature --- ConMan is still shareware! You've probably noticed that a number of popular shareware programs have "gone commercial" and demand payment in advance; ConMan won't join these, although my future products will be commercial until there is greater public awareness towards shareware. ----- Line Editing ----- ConMan allows you to edit the active (command) line using the left- and right-arrow keys for cursor positioning. The shifted left-arrow key skips to the beginning of the current or previous word, and the shifted right-arrow key skips to the start of the next word. ConMan supports both insert and overstrike editing modes. The CTRL-A key toggles between the two modes, and the CTRL-^ key unconditionally selects insert mode. The default input mode is insert, but you can set the global -o flag to select overstrike mode. The input mode normally reverts to the default mode each time you press RETURN, but the global -s ("sticky") flag will cause the mode to remain set until you change it explicitly. You can select the preferred input mode when you first install ConMan, and can change it at any time using the SetCMan command utility. Try experimenting to see which input mode you like best, but note that these are global flags and therefore apply to ALL ConMan windows. Refer to the paragraph on installation for a list of the global option flags. There are several keys that can be used to delete characters, words, or the entire line. The DEL key deletes the character under the cursor, and the BACKSPACE key deletes the character to the left of the cursor. CTRL-Y deletes from the cursor position to the end of the line, and CTRL-U deletes from the cursor to the start of the line. CTRL-X deletes the entire line, in keeping with the default CON: device. Function keys F7 and F8 can be used to delete words in the backwards and forwards direction, respectively. They work just like the shifted left- and right-arrow keys except that the characters are deleted. CTRL-Z deletes both the current line and any lines that have been typed ahead (but not yet read); this is very handy if you want to completely abandon all typed-ahead lines. CTRL-R provides a less drastic recall by posting the typed-ahead lines back to the command line. The Undo Buffer. If you're editing a line and accidentally hit the up- or down-arrow key, all is not lost. Just press the CTRL-- (control-minus) key and the former line will be posted back to the active line. Only lines that have been changed are added to the undo buffer. Flow Control. CTRL-S and CTRL-Q have been implemented to hold and release the screen output, respectively. While the CTRL-S action is not strictly necessary, since entering any character will halt output to the screen, it is a standard control option. CTRL-W clears the entire window and refreshes the active line. End-of-File. One other control character is recognized: CTRL-\ sends an end-of-file (a zero-length block) to the task reading from the handler. All characters not explicitly required for editing purposes are passed on to the command line. In order to provide a consistent display, characters that might cause interference with the display (like CTRL-L) are displayed as a caret (^) followed by the uppercase alphabetic character. Version 1.1 now supports the CTRL-N (shift-in) and CTRL-O (shift-out) characters. Miscellaneous non-printable characters are displayed as a hash mark. ----- Command History ----- ConMan "remembers" the commands that you type and lets you recall them sequentially using the up- and down-arrow keys. If you go past the line you want, the down-arrow key will retrieve the next (more recent) line. The shifted up-arrow key recalls the oldest line, and shifted down-arrow recalls the most recent line. The CTRL-B key will clear the buffer. The history buffer is organized as a fixed-length memory pool with a default length of 488 bytes. New lines are inserted at one end, and the oldest lines are "pushed off" the other end to make room. The number of lines that can be saved depends on their lengths, but is generally in the range of 25 to 30. The default size can be changed when you install ConMan by using the -b option followed by the desired size in bytes. For example, the command "conman -c -b1000" installs ConMan with a 1000-byte history buffer. ConMan maintains the history in one of two modes. In the default mode, recalled lines are not re-entered into the history buffer unless the line was "touched," and the history index pointer is left positioned at the retrieved line. This mode is convenient if you often go back into the buffer to retrieve sequences of commands. In "true history" mode, every line is re-entered into the history buffer, even if it hasn't been modified after being recalled. The history pointer is always reset (to the most recent line) whenever a line is added to the buffer. The history mode can be selected when ConMan is installed or by using the SetCMan utility. If you prefer to regard the history buffer as a circular buffer rather than a stack, try setting the -wrap option with ConMan or SetCMan. The index will "wrap-around" when it hits the top or bottom of the stack. Release V1.1 of ConMan includes a command called "History" that will save, load, or display the history buffer. Refer to the "history.doc" file for more information. ----- Function Keys ----- There are several additional editing functions and window control features that use the function keys. Key F1 shrinks ("iconifies") the window to its minimum size, and F2 "zooms" the window to its maximum size (usually the entire screen.) Both keys act as "toggles," and shrunken windows may be zoomed (and vice-versa.) If the window was opened without a sizing gadget, neither F1 or F2 will have any effect. Keys F5 and F6 are used to search for commands. If you type a partial command line and then press F6, ConMan searches in the up-arrow direction for a line matching up to the cursor position. You can move the cursor to the right to constrain the search. Key F5 works similarly in the down-arrow direction. Keys F7 and F8 delete words in the backwards and forwards direction. They operate just like the shifted left- and right-arrow keys except that the words are deleted rather than just skipped over. Function key F9 moves the screen to the front or back of the display, and F10 moves the window to the front or back. Both keys act as "toggles" provided that you don't deactivate the window or screen. These keys are useful when you're working with multiple windows or screens and need to peek at the one in back. ----- Window Definitions ----- ConMan accepts the standard AmigaDOS window specifications. For example, "CON:160/50/320/100/MyWindow" specifies a window 320x100 pixels in size, beginning in position (160,50). The numeric parameters are truncated against the maximum screen size, so a larger-than-normal window may be safely specified (for those of you using "morerows"). The default size is the full screen width and height. ConMan sets the minimum window size to allow room for the close gadget and depth gadgets. Various Intuition options and gadgets can be selected by including a list of attributes after the window title. Here's how it works: put another slash ("/") after the window title, and follow it with any of the attribute options listed below. Option Character Default Value ---------------- ------------- A <==> Activate Activated B <==> BackDrop Not a backdrop C <==> Close gadget No close gadget D <==> Depth gadgets Depth gadgets M <==> Move (drag) gadget Drag gadget N <==> NoBorder Border (sorry, "B" was used) R <==> Refresh (SMART/SIMPLE) Smart refresh S <==> Sizing gadget Sizing gadget Z <==> Zero-Zero Not a GZZ Each option character serves to TOGGLE the corresponding window attribute, so if you include an option twice, it will cancel the effect. The closing slash is optional. My apologies to those who wanted a slash in the title. Examples: CON:10/10/300/100/Behind/nb/ a borderless backdrop window. CON:10/10/300/100/Fixed/acm a nonactivated window, with a close gadget, that won't budge. ----- Installation ---- To install ConMan you will need to copy two files to your system disk, but don't worry --- they're both small. Install the file "Conhandler" (184 bytes) in your L: directory, to keep those bigger handlers company. Then copy the file "conhandler.library" (6152 bytes) into your LIBS: directory. If you received ConMan in the form of an ARCed file, first unARC it and then be sure to rename "conlib.lib" and "chandler", or use the provided "ARCinstall" script to copy the files. Once these files have been installed, issue the command "conman -c" to activate the handler. You should only run ConMan once, as it allocates 20 bytes of memory for the handler name string which won't be released. After you've activated ConMan, open a window using NEWCLI and check to to make sure that the new window has line editing and command history. Once every thing is working properly, you should place the "conman -c" command in your startup-sequence so that it's always available. NOTE: ConMan affects only those windows opened AFTER you activate it! It would be very impolite indeed to pull the old handler out from under the existing windows. You can specify several command line arguments with the ConMan command: Code Action ------ ------ -bNNNN select buffer size NNNN bytes -c install as CON: (the default) -o select overstrike mode -r install as RAW: -s select "sticky" mode -t maintain "true history" -w select "wrap-around" history These command options can appear in any order and remain in effect until you reboot the computer. The -q option used in previous releases is now obsolete, as ConMan writes its copyright to standard output by default. A separate utility program called "SetCMan" has been provided to modify or display the global options. You can use SetCMan to change the -o, -s, -t, or -w options at any time. Examples: setcman ? setcman -o -s -t If you usually operate from WorkBench and only occasionally need a CLI, you can activate ConMan by using the icons. First double-click on the "LoadLib" icon to load the conhandler library, and then activate ConMan by double-clicking the "ConMan" icon. The next CLI you open should now have the line editing and command history provided by ConMan. ----- Distribution ----- This program is distributed as shareware (user-supported software) to Amigoid life-forms everywhere! Make sure your friends get a copy. Your contributions are greatly appreciated and will help me maintain ConMan as well as develop new products. Send all correspondence to: William S. Hawes P.O. Box 308 Maynard, MA 01754 (617) 568-8695 My network addresses are BIX: whawes, PLINK: whawes, and CIS: 72230,267. The suggested contribution is $10 (based on an earlier survey), but any amount is welcome. Fewer than 200 people have contributed in the year since ConMan was first released. Although this is actually good by shareware standards, it wouldn't suffice to buy even one full-page ad in (for example) AmigaWorld. Commercial vendors are welcome to include ConMan with their products, provided that it's noted as being shareware and that the documentation accompanies the software. ----- Other Products ----- I have a couple of other products available commercially. ARexx and WShell can be found at better dealers**, or you can order them directly from me at the above address. ARexx is a multitasking implementation of the REXX language, a high-level interpreted language designed for macro-processing. ARexx can be used as the macro language for any software package that includes an ARexx interface. ............................ Only $49.95 (plus $2.00 shipping) WShell is a fully-compatible CLI replacement with aliases, built-in and resident commands, concurrent piping (as in pgm1 | pgm2 | ... | pgmN), extended prompt/window titlebar fields, transparent support for REXX macro programs, and a number of other features. Isn't it time you put some mussel in your command environment? Just 50 clams (+ $2.00 shipping) ** better dealers are those that stock ARexx and WShell. ----- Further Notes ----- ConMan also accepts input specifications in the form "CON:w20480", where the hex digits following the "w" are the absolute address of an Intuition window pointer. This allows you to attach a console handler to an existing window in a multitasking-safe way (unlike the methods that require setting a field in the DOS device list). If you're writing in C, you could use the following sequence to open a window and attach a DOS console to it: window = OpenWindow(&newwindow); /* get a window */ sprintf(buffer,"CON:W%x",window); /* build the name string */ file = Open(buffer,MODE_OLDFILE); /* open a console stream */ You can open a console window on a custom screen by including the hex address of the screen in the specification string, as in "CON:S123abc/10/10/300/100/MyWindow." Other Names. ConMan answers to several names in addition to "CON:". You can define it as the "CNC:" device by appending the included "mountlist" file to your DEVS:mountlist and then issuing the command "mount CNC:". The CNC: device can then be used just like a CON: window. This allows the CON: definition to be left intact, in case there are any incompatibilities between ConMan and your existing software (but please let me know of any problems!) ConMan is also a pipe-handler responding to the name PIP:NNNN, where NNNN is the "capacity" of the pipe. It must be opened using a private packet called ACTION_DOUBLE (value 2000L); the filehandle you get from a call to Open() counts for two and so can be cloned by your program. My WShell command shell uses the ConMan PIP: device as the pipe handler. Keymapping. ConMan supports the Amiga's keymapping facility, which allows you to reassign the editing functions to the keys of your choice. To do this, you must first construct a keymap either in assembly language or with the help of a keymap editor. You can then load the keymap using the SetMap program on your WorkBench disk. By default SetMap makes a keymap global; if you want to use a special keymap from just one CLI, you can use the included KeyMap command to define the desired map. KeyMap with no arguments will display a list of the available keymaps. ----- What Next? ----- Several additional features will be added in the next release of ConMan. A number of people have requested an option to have the handler not display typed-ahead lines, so that the running program can write freely to the screen and lines will be displayed only as they are read. Also in the works is support for an improved "iconify" state, so that the window can be double-clicked to bring it back up to the former size. I'm planning to release a ROM version of ConMan as soon as the hardware vendors start including decoded ROM sockets on their boards. If you're interested in ROM-based software, drop me a note (or write directly to the hardware companies). ----- Bugs ----- All known bugs have been fixed in this release, so you should find it to be very reliable. If you do find a problem, PLEASE report it so I can fix it! There is a warning with regard to the "shrink" and "zoom" keys: rapid toggling between window states will crash the machine. The problem appears to be an interaction between Intuition and the console device and will probably get fixed when Commodore upgrades the console device in version 1.4. Until then, take it easy with the F1/F2 keys. An additional warning: the console device exhibits serious problems with windows below some minimum size. Opening windows of certain sizes (e.g. con:0/0/10/20/) may cause the machine to crash, whether or not ConMan is active. For these reasons, I strongly urge you avoid console windows smaller than 60X25 or so. ----- Acknowledgements ----- Special thanks to John Toebes and the Software Distillery for all the great suggestions, and to the contributors who helped make V1.1 possible. WSH (03/07/88) ======================================================================== PUSH, QUEUE, and DROPBUF ======================================================================== ConMan provides special capabilities (in versions 1.0 and later) that allow an input stream to be used as a temporary "scratchpad" to store a series of data lines. These lines can be "stacked" (last in, first out) or "queued" (first in, first out) to be read at a later time. These special capabilities are available through the CLI command utilities PUSH, QUEUE, and DROPBUF. Here's what they do: PUSH takes its command line and "stacks" it in the input stream. Stacked lines always go the the head of the internal buffer, and are then available for the next program (or the CLI) that reads from the stream. For example, entering "push echo hi" would result in 1> push echo hi 1> hi 1> The command line can be surrounded by double-quotes to prevent the CLI from breaking it; the quotes are stripped off before the line is actually stacked. PUSH is useful within an "execute" script to allow a series of responses to be prepared for a program. For exam[le, suppose that the program "myprog" expects three lines of input. Then the following script could be used to launch the program: ; Launch "myprog" with prepared data push data line 3 push data line 2 push data line 1 df1:c/myprog -t Note that the command lines are stacked in reverse order (well, in normal order if you're a Forth programmer.) The QUEUE command behaves just like the PUSH command, except that it places the data in "first in, first out" order. New data is placed behind all previously queued (or stacked) data. The choice of whether to use PUSH or QUEUE is usually just a matter of convenience, unless the data is available in a particular order that constrains the decision. Data lines entered by PUSH or QUEUE are never displayed on the console, and are always ahead of any data received through the input stream. Sometimes it may be necessary to delete or purge previously stacked data. For example, if a program aborted after reading only part of its prepared input stream, it would be confusing (or dangerous!) for the stacked data to be read from the command stream. The DROPBUF command is provided to "drop" (delete) all stacked or queued data, without perturbing any of the lines received through the input stream. Two brief demonstration scripts, "pushdemo" and "dropdemo", have been included as examples. Type them out and then try "execute pushdemo". ======================================================================== DROPBUF ======================================================================== ConMan provides special capabilities (in versions 1.0 and later) that allow an input stream to be used as a temporary "scratchpad" to store a series of data lines. These lines can be "stacked" (last in, first out) or "queued" (first in, first out) to be read at a later time. These special capabilities are available through the CLI command utilities PUSH, QUEUE, and DROPBUF. Refer to the PUSH.doc file for further info. ======================================================================== QUEUE ======================================================================== ConMan provides special capabilities (in versions 1.0 and later) that allow an input stream to be used as a temporary "scratchpad" to store a series of data lines. These lines can be "stacked" (last in, first out) or "queued" (first in, first out) to be read at a later time. These special capabilities are available through the CLI command utilities PUSH, QUEUE, and DROPBUF. Refer to the PUSH.doc file for further info. ======================================================================== History ======================================================================== History is a command utility to save, load, or display the history buffer. It allows you to save and then preload a set of commands for working on a particular project. History works only from a CLI or other command shell and requires version 1.1 or later of ConMan. Usage. The usage template for history looks like history [>savefile] [inputfile] If you don't specify any options, the command displays the current buffer on the standard output stream. You can redirect this output into a file to save it (or perhaps edit it). If you specify a filename argument after the command, History will load the contents of that file into the history buffer. The new lines are loaded just as though they had been typed in. You can use the CTRL-B key to clear the buffer first if you don't want any of the current commands. The lines that you put into the history buffer should be obtained by capturing a previous session. If you try something silly like loading an executable file into the buffer, nothing will break, but you'll end up with a lot of funny-looking characters in the command history. Errors. History checks to be sure that you've run it from a command shell that uses ConMan, since the history is maintained by ConMan. If you try it from another environment, it will issue the message Not a ConMan console window