CLIanywhere Version 1 Created by Ray Lambert in 1990 Overview. CLIanywhere is a utility which allows you to open a CLI or Shell on _any_ screen in your system. When CLIanywhere is executed, it will cause a new CLI or Shell to be created on the _topmost_ open screen. CLIanywhere is meant to be used with programs such as PopCLI or DMouse. These programs allow you to execute a command at the touch of a hot-key (usually Left-Amiga+Esc) and are most often used to open a new CLI window by executing "NewCLI" (or "NewShell"). Most of these programs also allow you to specify the command to be executed. If you specify "CLIanywhere" as the command to execute, you can create a new CLI or Shell on the frontmost screen at virtually anytime just by pressing the hot-key. Usage. CLIanywhere only operates from CLI. You may execute it from the command line and then (quickly) move the screen that you want to open a CLI on to the front, however, CLIanywhere does not take any special steps to ensure that method of usage will work -- it is really meant for PopCLI-type programs. Perhaps in the future this will be supported better. Using CLIanywhere from a PopCLI-type program is just as easy as executing any other program in the same manner. It may be neccessary to provide a complete path name for CLIanywhere; see the documentation for your PopCLI-type program for more information. CLIanywhere is PURE which means it can be made resident -- in this case a path name may not be neccessary. (Making CLIanywhere resident also causes your new CLI to open significantly faster -- since CLIanywhere is only 564 bytes long, making it resident seems like a pretty good idea!) CLIanywhere allows you to place the command that you wish it to execute on its command line -- if space characters are neccessary in the command, NO additional quoting is neccessary. Alternately, you may place the command that you wish to execute in a file called "s:CLIanywhere.cmd". CLIanywhere will read this file to get your command. Note that only the first line of this file will be executed -- any additional lines are ignored. (See the enclosed sample file). If a command is specified neither on the command line nor in the file mentioned above, CLIanywhere will use the following default command: c:NewShell "NEWCON:0/11/640/50/ CLIanywhereShell " Note that it is possible to use CLIanywhere to execute programs other than "NewShell" and "NewCLI". In fact, you can use CLIanywhere to execute nearly any program that opens a window on Workbench, and doing so will cause that program's window(s) to open on the topmost screen, in the same manner. Using CLIanywhere in conjunction with the enclosed program, "OpenScreen", it is possible to maintain multiple Workbench screens, each with their own icons, CLI, etc.!!! (Try creating a screen with OpenScreen, opening a CLI or Shell on it with CLIanywhere, and then run "LoadWB" from the new CLI...) Please read the enclosed documentation for OpenScreen. How It Works. CLIanywhere uses a simple but obscure 'trick' to fool Intuition into thinking that the topmost screen at any given time is the Workbench screen. This 'trick' causes no ill effects to the system, and CLIanywhere's implementation of this 'trick' does not produce any lasting or noticable modifications to your environment. The trick works like this: All Intuition screens have a 'screen type' value associated with them. Currently in Workbench 1.3 there are two types called WBENCHSCREEN (Workbench) and CUSTOMSCREEN (all others). Workbench 2.0 will introduce one new screen type, PUBLICSCREEN, however this will have no effect on CLIanywhere's performance. When Intuition tries to find the Workbench screen, it searches the list of all screens to find the first one which is a WBENCHSCREEN type. The screen list is always sorted by topmost to bottommost. CLIanywhere temporarily changes the screen type value of the topmost screen to WBENCHSCREEN (saving its original value) and then executes the command you give it. Assuming that the command you give it is "NewShell" or "NewCLI", Intuition opens the CLI or Shell window on what it thinks is the Workbench screen, but which we all know is really whatever the topmost screen is (which could _really_ be Workbench of course). Once the command is finished executing, CLIanywhere replaces the topmost screen's _real_ (saved) 'type' value. (For you programmer-types reading this, all of what I describe is done in a protected manner, using LockIBase(), etc. However, I cannot keep IntuitionBase locked while I execute the command because that command will most likely request that a window be opened, which of course is not possible while IntuitionBase is locked (result == deadlock). Therefore, I must save a pointer to the screen. Once the command is done executing, I lock IntuitionBase again and restore the old flag value ONLY IF my saved screen pointer is the same as the TopMost screen pointer after I re-lock IntuitionBase. Thus, I am fully protected. See the source code for more information.) Disclaimer. Although the trick that CLIanywhere uses is not officially supported by Commodore (which therefore puts it into the 'hack" category), it does safely work under all versions of Workbench through 2.0 (yes, I've tested it on 2.0 and it works fine). I suggest that when you first install CLIanywhere that you test it a few times (without anything running that could be lost) to be sure it works properly (and to put your mind at ease [grin]). This is especially important to do after you've installed a new version of Workbench. I do not expect you to find any problems, however I have not tested the program in a large number of different system configurations, so it is possible that it may conflict with something (though I highly doubt it). All of this translates to one simple statement: USE THIS PROGRAM AT YOUR OWN RISK -- THE AUTHOR ASSUMES NO RESPONSIBILITY FOR THE USE OR MISUSE OF THIS PROGRAM AND MAKES NO GAURANTEE THAT IT WILL WORK AS DESCRIBED ON ALL SYSTEMS. Warnings. Some programs do not like to cooperate with strange windows that appear on their custom screens. Programs which do not tolerate uninvited windows usually have good reasons for behaving as such. In addition, you must remember that custom screens are really supposed to be private, and therefore are not required to accomodate uninvited windows. Deluxe Paint, for example, doesn't tolerate strange windows on its screen because of performance reasons -- one of the reasons that DPaint is so fast and powerful is because it fully takes advantage of the short cuts that are allowed a custom screen; for example, it does not respect layers. CygnusEd Professional also behaves this way and for the same reason -- its super-fast, blitter-based text scrolling would not be so fast if it took the time to consider layers. In fact, most programs which refuse to cooperate do so for performance reasons, and fail to do so mainly because they ignore layers (layers is a concept built into Intuition which makes multiple windows possible). Generally, you can still open an uninvited CLI window on a screen which ignores layers as long as you do not activate other windows on the screen while your uninvited CLI is there. For example, it is possible to open a CLI on CygnusEd's screen, use the CLI and then close it as soon as you're done with it, with no problem. However, if you try to type into your document or scroll the screen while the CLI is there you will end-up with a mess! A program such as CygnusEd may open its own windows on its screen, however this does not imply that it will cooperate with _your_ CLI window. Usually if a program does open its own windows, it will disable all of its functions which override the layer system. For example, when CygnusEd opens a window (such as its file requester) you are not allowed to type into your document or scroll through it. I have never had a crash as a result of opening an uninvited CLI window on a private screen. Nevertheless, I suggest that you avoid doing this with programs that don't fully cooperate. If you insist on doing this however, you should use care. Although there are programs which act as I've described, you'll find that the vast majority of programs do cooperate. I must make one final warning which is probably most important of all. When you open an uninvited CLI window on some program's private screen, that program has no knowledge at all of your window's existence. It is possible that a program may attempt to close its screen while your visiting CLI window is open on its screen. While it is very unlikely that this will actually cause a crash, it is not good practice to allow this to happen. Therefore, you should NEVER instruct a program to close it's screen before first closing your visiting CLI window. Even if this does not crash your Amiga, you _will_ lose some memory and other resources (at least until you reboot). Enclosed in this archive is a program called "ScreenWatch" which will help protect you from accidently closing a screen while there is still a window open on it. It will also protect you from programs which decide to close their custom screens on their own (without your instructing them to). ScreenWatch is a very small program and works quite effectively -- if you intend to use CLIanywhere I strongly suggest that you also use ScreenWatch as well. Please read the enclosed documentation for ScreenWatch. Legal stuff. CLIanywhere is public domain. I have included the source code so that other programmers can see how this trick works. Also, this documentation has some important warnings and disclaimers in it. Because of this, I request that this documentation and the enclosed source code are distributed together with the executable, without exception. I would also very much like the accompanying programs, ScreenWatch and OpenScreen, and their source code and documentation, to be distributed with CLIanywhere as well. Get to know me! If you have any questions, suggestions, flames, propositions, etc., I can be reached at the following places: People/Link: Analog*Kid (log on often) BIX: AnalogKid (log on sparsely) U.S. Snail: Ray Lambert PO Box 1253 Westport, Massachusetts 02790 Phone: (508) 677-9217