Mercurial > hg > Members > kono > nitros9-code
changeset 1871:054c318eda02
Added for future incorporation into NitrOS-9 Manual
author | boisy |
---|---|
date | Mon, 08 Aug 2005 11:48:52 +0000 |
parents | 79edc5d44491 |
children | 2ac4d85bb5b9 |
files | docs/shellplus/ShellPlus_2_1.lzh docs/shellplus/ShellPlus_2_2a.lzh docs/shellplus/shellplus.doc docs/shellplus/shellplus2.2a.doc |
diffstat | 4 files changed, 843 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/shellplus/shellplus.doc Mon Aug 08 11:48:52 2005 +0000 @@ -0,0 +1,751 @@ +88/10/12 19:42 Shell+ V2.1 Page 001 + + + + Hacked Shell+ v2.1 Documentation + For L-II CoCo-3 Only + + By: Ron Lammardo + + + + BUG FIXES: + +Will now unload (unlink) the correct name. Previously, if the module name +did not match the command filename you typed, shell would not unload the +module, and it would stick in memory until manually unlinked. This shell +reads in the actual module name and uses it instead of whatever was on +the command line. Example: "/d0/cmds/bob" will work correctly now: the +module name within the "bob" file will be the one to unload. + +To prevent attempted execution of a write-only device as a procedure file, +and to help with use of L-II window startup, this shell checks modes and +attempts write of a null to std out when shell starts up. + +You can redirect >>> to a write-only device. Before this, the shell would +open the path in UPDATE mode. + +The quote bug is fixed. That is, leaving off the second quote mark in lines +like - format /d0 r "Disk - will not crash the shell. + +The EX bug is fixed..if you type 'EX' with no parameters (to kill a shell) +it will not attempt to fork any module or return an error to the parent +process. + +Standard error path is now 'un-redirected ' after using a pipe. + + + + ADDITIONS: + +NOBLOCK +------- + +The shell now runs in what is commonly called 'No Block Mode'. Under previous +versions of shell / shell+ if you had a shell running on , say, T2 and you were +running on Term there was no convenient way to send messages back and forth. If +you did an 'echo whats new >/t2' from the Term it would wait around until +the other shell recieved keyboard input. While it was waiting, Term would be +hung up waiting for the echo command to complete. This problem was caused by +the other shell doing a read call, thereby 'blocking out' any other input. + +This release of Shell+ gets around that problem by putting itself to sleep +while waiting for keyboard input, allowing other input to get through & +display. Once the first key is hit for a line, the shell goes into its regular +read routine until the <ENTER> key is pressed. + +The noblock feature can be turned off by : modpatch <noblock.off.scr +and then saving the shell. + +It can be turned back on by : modpatch <noblock.on.scr +and then saving the shell. + + +88/10/12 19:42 Shell+ V2.1 Page 002 + + +EXECUTION DIR SCRIPTS +--------------------- + +A favorite feature of preliminary shell+ users, this allows global shell +scripts to be placed in your execution (CMDS dir). Simply build or copy +a shell procedure file to your cmds dir, then set the execution permission +bits on it (attr script e pe). This makes it easy to add some commands +that you can access almost all the time. + +The shell search path becomes: memory, execution dir modules/scripts, +data dir scripts. + +Some people use this for printer setup cmds (using display >/p), others +use it with the IF/THEN/ELSE and GOTO commands to make sophisticated +procedures. I use it a lot for window commands, and program startups. + +For example, I have a script in my cmds dir called "fsm". It opens a VDG +screen on W6, and starts Flight Simulator. When I exit FS, it resets W6 +back to a window type (all done in the background): + + * FSM - Procedure Command File in CMDS that starts FS-II. + xmode /w6 type=1; display c >/w6 + chd /dd/games/fs + (fs <>>>/w6; xmode /w6 type=80)& + + +PROMPTS +------- + +Settable and useful prompts. Ron had a great idea: why not add the device +name you're working from to the prompt ( OS9[T2]: )? Loved it, but everyone +liked different method of presentation. So added user-settable prompt: + + p=prompt The prompt may be up to 21 chars, extra ignored. + A space, return, or semicolon terminates the prompt. + By putting the prompt in quotes, scan will continue + until second quote, return, or 21 chars is reached. + + Options include: + # - show shell's decimal proc id # (00-99). + @ - show device name current std out + $ - show current working directory + ( - show current date + ) - show current time + + More than one #,@,$,(,) is ignored. + + +Examples: Prompt Resulting: + + p=OS9/@: OS9/Term: + p="Hi There!" Hi There! + p=OS.#.@: OS.06.T2: + p=$> /d0> + p=") [@]:" 18:30:14 [Term]: + p= <uses default setup in shell header>: + + + + +88/10/12 19:42 Shell+ V2.1 Page 003 + + +Default prompt- stored starting from offset $003D in this shell. As it comes, +it's set to 'OS9[@]'. You may set using debug to something else. Terminate +your prompt with a $20 (blank). Offset $0054 is the longest you should go +before you run into the rest of the shell code. The longest settable +prompt will stop at $0051 anyway (21 chars worth). + + +It's easy to start up new shells with custom prompts. Just pass it as param. +To start a shell on say, /W4 with a special prompt, you might type: + + 'shell p=OS9/@? i=/w4& ' ... results in shell on W4 with prompt 'OS9/W4?' + +However, if you wish to use the # process id option as a shell parameter +like the above, then since #!&; etc normally means something special, +you must put the string in quotes, which are ignored by P=. Thus instead: + + 'shell p="Hello.#[@]" i=/w4& ' ... gives prompt of 'Hello.07[W4]' + + +PATH REDIRECTION +---------------- + +z={path} - Same as i=/1 except that the parent process is killed. This would be + used in a shellscipt that does a chd,path=,or variable defining that + you want held over when the shellscript ends. + +r=[redirect chars]{path} - redirects the specified paths to the input path. All + allowable path mnemonics are supported : <, >, >>, + <>, <>>, <>>>, >>> + + + +Examples: + +r=>/w - redirects std out to next available window +r=<>>>/w - redirects std in,std out, std err to next available window +r=</h0/shellscript - redirects std in from /h0/shellscript. If the last + line in the file was 'i=/1' , the shellscript would end + with all settings preserved. This method is preferrable + to the 'z=' or 'GPERE' methods as it does not involve + forking any additional shells. + + +MEMORY SCRIPTS +-------------- + +One of the big problems encountered by floppy disk users is 'where did I put +that shell script ?'. The shell will now allow a data module, either resident +in memory or from the execution directory (or from a full path list if +specified) to be executed as if it were a text file containing a shell script. +Using this method, you could convert all your commonly used shellscripts to +data modules (See the DATAMOD utility) , pack them all into one file and load +during startup. This would allow access to all those shellscripts without +accessing the disk. And since shellscripts are generally very small, you should +be able to merge quite a few into an 8K block. + + + + + +88/10/12 19:42 Shell+ V2.1 Page 004 + + +RUNB BASIC09 PARAMETER SETUP +---------------------------- + +A common complaint, and perhaps the reason why more people don't write +packed Basic09 commands, is that Runb requires any passed parameters +to enclosed in parenthesis and quotes. For example, to execute a packed +command, you might have to type: cgp220sd ("/term","/p"). A royal pain. + +This shell recognizes packed procedures, and will do this automatically +for you. Using the same example, you can just type: cgp220sd /term /p . +The shell will still recognize parameters passed in the normal format: +cgp220sd ("/term","/p"). + +I expect this feature to allow the user to go nuts making packed basic09 +custom commands. All parameters of course must be strings. If you need +to pass a number, simply take it in as a string and use the VAL command +to convert it to a number. + +Here's a quick and dirty program to pack. It allows you to see how things +are passed. Examples: + + parmtest 1 2 3 + parmtest hello kevin darling + parmtest only two + parmtest more than three params + +------------------------------------------ + + PROCEDURE ParmTest + PARAM a,b,c:STRING + DIM aa,bb,cc:STRING + ON ERROR GOTO 100 + aa=a + PRINT "Param one=*"; aa; "*" + bb=b + PRINT "Param two=*"; bb; "*" + cc=c + PRINT "Param three=*"; cc; "*" + END + 100 (* Come here on Param Error *) + PRINT "Less than three params given" + END + +------------------------------------------ + + +LOGGING +------- + +The logging feature is toggled by use of the L / -L commands. If logging is on +(default is off) , any non-comment line will be written to log file +/dd/log/uxxx where xxx is last 3 digits of userid prefixed by the date/time the +line was processed. In addition, a line will be written when a shell starts or +terminates (+++START+++ / +++END+++) . + +Logging can be turned on permanently by : modpatch <loglock.on.scr +and then saving the shell. To turn it back off (and enable the L / -L +functions) use : modpatch <loglock.off.scr and then save the shell. + + +88/10/12 19:42 Shell+ V2.1 Page 005 + + +SHELL VARIABLES +--------------- + +The shell now supports up to 10 shell variables of up to 80 characters long +each. These variables remain set as long as the shell is running, and can be +used as all or part of a shell command line. The variables are loaded by : + +var.1 - accepts up to 80 chars from std err to load variable %1 + +var.="......." - loads %0 variable with data between quote characters + + +An example might be a shell script (or MEM script !) used to call the +assembler. Since most programs use the same standard commands, you could set +up a generic script and supply the input when run as in the following: + + +* Comp - generic assembler call file +prompt Program to ASM : +var.0 +var.3="/dd/output" +t +asm #16k %0 L O=/dd/asm/obj/%0 >-%3 +errchk <%3 +unload %0 +load /dd/asm/obj/%0 + +When this is run, the following output will be executed: + +Program to ASM ? - displays on screen +testprog - user types in +asm #16k testprog L O=/dd/asm/obj/testprog >/dd/output +errchk </dd/output +unload testprog +load /dd/asm/obj/testprog + + +To view all current variables, enter 'var.?' on the command line to produce: + +User Variables : +var.0=shell +var.1= +var.2= +var.3=/dd/output + . + . +var.9= + +Shell Sub Variables : +var.0= + . +var.9= + +To turn off variable expansion, use the '-V' option ('V' turns expansion on). +Note however that variable expansion is performed before a line is processed. +So if you have a line like '-v prog "50%"' the % will still be expanded for +that line, but proceeding lines would not expand variables. + + + +88/10/12 19:42 Shell+ V2.1 Page 006 + + +If a variable is referenced but not defined, no expansion takes place but the +%# is removed from the input line. + +As shown in the VAR.? example, there are two sets of variables. The first set, +the User Variables, can be set & examined by the user. The second set, the +Shell Sub Variables, can only be set by a ShellSub. These variables, however, +can be used to load User Variables by specifying them as %%# . + + Example : The Sdate shellsub returns the month name in the first shellsub + variable. If we just want to display this on the current line we + could use : + + echo The current month is %%0 + + Or to run something in a certain month : + + IF %%0=July + THEN + . + . + ENDIF + + +There is one additional variable that can not be set by the user. The variable +'%*' will translate to the error code returned by the last line processed. +This is extremly useful in conjunction with the on error command. + + +INC. / DEC. +----------- + +Shell variables can be incremented / decremented by 1 using the inc.# / dec.# +commands. Result will be a 5 digit number, right justified and zero filled. If +you try to inc./dec. a variable containing a non-numeric field it will treat +the initial field as 00000 and act uppon it accordingly. + +Values can be in the range of 0 - 65535 rolling over in either direction. If +you attempt operations on a value > 65535 it will roll over. + +Examples : + +var.0=1 sets to 1 +inc.0 sets to 00002 +dec.0 sets to 00001 + +var.8=002 sets to 002 +dec.8 sets to 00001 +dec.8 sets to 00000 +dec.8 sets to 65535 + + +PAUSE +----- + +Pause will display a message than wait for key press or mouse click. The +message will be sent from the first non-space to the end of the line. + +Example : pause 'Hit any key when ready' <- displays & waits for key/mouse + + +88/10/12 19:42 Shell+ V2.1 Page 007 + + +WILDCARDS +--------- + +Seemed to be one of the most asked for enhancements , so here they are. +Wildcard expansion is performed AFTER variable expansion but before any other +line checking is done. In order for wildcard expansion to take place the first +character on the line must be a colon (':'), otherwise the line will be +processed as is. This option can be reversed (: will prevent expansion) by: + modpatch <wild.on.scr +and then saving the shell. To restore back, use: modpatch <wild.off.scr +and then save the shell. + +The following characters are supported : + +* - Matches any string of characters +? - Matches any one character +[a-z] - Matches one character in the range within the brackets + +Upper & lower case are treated equally - 'a*' matches ASM , aif.ctl , ... + +To pass a wildcard character to a program,quote it by using the '\' chracter +immediately preceeding the desired chracter. + + +Examples : + +FSTAT * - runs FSTAT on every file in the current data dir +FSTAT [c-g]* - runs FSTAT on every file beginning with c thru g +FSTAT she* - runs FSTAT on every file starting with 'she' +FSTAT *.a - runs FSTAT on files starting ending with '.a' +LS a\* - passes 'a*' to LS for wildcard expansion + +The expanded buffer size is 2048 characters. If the expanded line size is +greater than this, error #191 will be returned (Buffer size to small). + +A utility program 'PARAM' is included in this archive (source and binary) +to reformat an expanded wilcard line. The program takes the parameter line +passed to it and writes it to standard out , one word per line (similar to the +LS command except that wilcard expansion is taking place in the shell). + +Example : param she* <-- input + param shell shell.io <-- expanded to by shell + + shell <-- output line from PARAM + shell.io <-- " " + +If desired, this output could then be piped to a utility requring paramerters +passed one per line (e.g. - param * ! call "copy $ /d1/$"!shell). + + +OUTPUT APPEND AND OVERWRITE +--------------------------- + +Similar to OS9/68000. Great for appending to logs or help files, or merging +modules. Or for using the same temporary filename by overwriting. + + >+filename - also >>+ and >>>+. Appends output to end of [filename]. + + >-filename - also >>- and >>>-. Overwrites contents of [filename]. + +88/10/12 19:42 Shell+ V2.1 Page 008 + + +IF / THEN / ELSE / ENDIF / FI / CLRIF +------------------------------------- + +Condition testing is supported as follows : + +IF -Y - read one char from std err : y=TRUE, n=FALSE +IF -F <file> - TRUE if file exists and is a file +IF -R <file> - TRUE if file exists and is readable +IF -W <file> - TRUE if file exists and is writable +IF -E <file> - TRUE if file exists in execution directory +IF -D <file> - TRUE if file exists and is a directory + +IF ....<condition>.... where <condition> +IF +###<condition>#### where <condition> is one of the following : + + = - TRUE if left side is equal to right side + < - TRUE if left side is less than right side + > - True if left side is greater than right side + <= or =< - True if left side is less than or equal to right side + >= or => - True if left side is greater than or equal to right side + +Without the + symbol in front,the two sides of the equation are compared +character by character from left to right,with any unused characters being +translated to nulls for comparison. If the + symbol is present, the two sides +of the equation are right justified and zero filled, allowing for accurate +numeric condition testing. If either side of the equation is greater than 80 +characters or the test condition is missing , the command will error. Note that +if error exit is turned off (by the -X command) processing will continue on the +next line as if the IF statement was true. + + Examples: + if a=b false if a=b false + if a<=b true if a<>b true + if hello=HellO true if what=what? false + if what<=what? true if what<>what? true + if 09<010 false if 09>010 true + if +09<010 true if +09>010 false + +If a condition is true, following lines will be processed until an optional +ELSE is encountered. Lines will be skipped until a ENDIF or FI is encountered. + +If a condition is false, following lines will be skipped until an ELSE , ENDIF +or FI is encountered. + +The reserved word CLRIF can be used to clear any IF in effect, even if lines +are to be skipped because of a false condition or between ELSE/ENDIF for a +true condition. + +If the input line echo option is on ('T'), the word TRUE or FALSE will be +printing following the if statement depending on how the statement evaluates. + +The condition being tested may be placed in brackets (e.g. - if [ -y ] ) to +maintain compatability with existing IF utilities. + +IF statements can be nested up to 255 deep. The word THEN is optional and will +be ignored if present. + + + + +88/10/12 19:42 Shell+ V2.1 Page 009 + + +GOTO +---- + +Goto [label] - searches for label from the beginning of the file. +Goto [+label] - searches for label from current file position on. + +Label must be an alphanumeric word (up to 40 characters) and must immediatly +follow a '*' comment marker. Label must exactly match the label on the goto +line (upper & lower case are unique). + +If a line contains '*\' as the first two characters, any goto in effect will +be cancelled with processing continuing on the line following. + + +ONERR GOTO +---------- + +Onerr goto [label] +Onerr goto [+label] + +Same as GOTO except that it does not execute until a command errors. After the +error, the GOTO command specified is performed. Note that while executing a +GOTO, the error variable ('%*') is not updated, allowing for error +identification at the goto label. + +Entering ONERR alone on a line causes the on error trap to be cancelled. + +As with the goto command, '*\' causes the goto to be cancelled. + +Example: + +onerr goto lab1 +dir sd <---- errors with #216 +pmap <---- not executed +mmap <---- not executed +*lab1 <---- label matched +if %*=216 <----- expands to 'if 216=216' which evaluates true +goto lab2 <----- jumps to label lab2 +else <----- ignored because condition was true +echo ERROR <----- " " +endif <----- tells shell o.k. to process lines again +smap <----- ignored cause we're going to lab2 +*lab2 <----- found +..... <----- processing continues here + + + + +PATH= +----- + +Path= allows you to specify alternate directorys to search for commands. If the +current execution directory does not contain the desired module, the alternate +paths will be searched in the order specified. This is especially useful for +floppy disk users with limited space, as it allows you to have your CMDS +directory spread across 2 or more disks. The specified paths are retained when +subshells are forked, either by directly calling the shell (shell i=/w&) or by +running a shellscript/memscript. + + +88/10/12 19:42 Shell+ V2.1 Page 010 + + +Pathlists must be separated by spaces only. To clear alternate paths, type +'path=' with no parameters. + +To display the currently assigned paths, use 'path=?' . + +Example: + +path=/d1/cmds /d2/cmds /d2/newcmds + +path=? <** produces +/d1/cmds +/d2/cmds +/d2/newcmds + + +SECURITY +-------- + +If the userid is not 0, any '@' characters will be stripped out to prevent +os9 security being overriden by being able to dump a disk. The potential +problem with prompt setting (@=device name) is taken care of by allowing an +[alt]@ to be accepted in addition to '@'. + +If this feature is undesirable, it can be removed by +'modpatch <atcheck.off.scr' and then saving the shell. It can be turned on +again by 'modpatch <atcheck.on.scr' and saving. + + +SHELL SUBS +---------- + +A new type of module is supported by this release of Shell+ - the ShellSub +module. These modules are asm subroutines which pass data back to the shell +in the 10 reserved shell sub variables (%%0 - %%9). For instance, the Sdate +shellsub (included in this archive) returns the current month name and +year,month,day,hours,minues,seconds all in separate variables. These variables +can then be examined and acted upon by the shell (possibly for displaying or +IF/THEN/ELSE testing). Note again that the shell sub variables can NOT be +modified by the user, only by shell subroutines. They can, however, be loaded +into the regular user variable set for manipulation. + + Technical notes : + When the shell determines that a ShellSub is to be run (by a $51 in the + Type/Language byte in the module header) it loads the registers in a + manner similar to those used when forking a module : + + X - parameter area start + D - parameter area size + Y - subroutine entry point + U - first ShellSub buffer + + It is the responsibility of the shellsub to ensure that each variable + ends with a <cr> and start at the correct locations (10 variables of 81 + bytes each). The shellsub must also end with an rts to return control + back to the shell. The shellsub is therefore also responsible for + ensuring that the stack points to the same place at exit as it did upon + entrance. The shell has about 750 bytes available for stack use. All + registers used by the shell are saved before calling the shellsub & + restored after the shellsub returns. + +88/10/12 19:42 Shell+ V2.1 Page 011 + + +USER STARTUP FILE EXECUTION +--------------------------- + +The reserved word 'S.T.A.R.T.U.P' will cause the shell to attempt running a +file called 'startup' in the CURRENT directory. This is very useful when +running Tsmon/Login and you are changing the users working directory. If the +users directory is changed and then the program forked is 'shell s.t.a.r.t.u.p' +the shell will try to run a startup file in the new directory and then remain +active. If no startup file is present, no error is returned. + + +MISC +---- + +A command called PROMPT is included in this archive. It functions the same as +the ECHO command except that it does not do a linefeed after displaying the +line. See the example script under SHELL VARIABLES. + +Also included in the archive is a shellscript called SHELLSCRIPT. This is what +I use to assemble the various versions of Shell+. It is included as an example +of variables,goto and if/then/else use. It is NOT needed to install or use +Shell+. + +You may modify the priority of commands using the "^" (up carat) symbol. +Example: list file >/p ^100 & + +Since all the coding for PWD/PXD is part of the shell for the $ option on +prompt setting, the commands .PWD and .PXD are included with the shell. Once +you do a .PWD or .PXD the directory will be kept in a buffer so that next time +you execute the command it won't have to check the disk. It will also stay in +the buffer if the $ option is used in the prompt. Note that if a pathlist is +over 129 chars long, it will be printed prefixed with an '*', indicating that +the beginning of the pathlist has not been printed. This also applies when +using the working directory as part of the shell prompt. Note : Even if you +use the .PWD/.PXD functions you should keep those commands in your execution +directory, as other programs (notably basic09 routines) may use the shell to +get the current directorys. It is for this reason that the commands are +prefixed with a '.' . + +CD and CX are also allowed for CHD and CHX for Nuxi people. Also '|' allowed +along with '!' as pipe character. + +Echoed input lines ('T' option) will now display the full input line. Why +print only 80 chars if the input buffer is 200 ? + +All modules are now forked with a minimum of 7936 bytes (8k - 1 page) to +handle the greatly expanded parameter line size. If the module needs > 8k or +a memory modifier > 8k (#16k) is specified, that size will be used. + + +If you find any bugs, please let Ron Lammardo (75706,336) know through the CIS +OS9 forum, so that we can take care of them. Suggestions, bitches and kudos +appreciated also. + + + + + + + +88/10/12 19:42 Shell+ V2.1 Page 012 + + +Some of the enhancements in Shell+ came either directly from or were derived +from existing utilities. The ones I can remember are : + +Goto - Kevin Darling +Z= - from GPERE by Kent Meyers +Wildcards - Simmule Turner +NOBLOCK - Kent Meyers +Logging - Karl Krieder + +Shell+ Release 1.0 by Kent Meyers +Shell+ Release 1.1 by Kent Meyers,Kevin Darling,Ron Lammardo + + +V2.0 additions/changes +----------------------- + +- Current date/time displayed when shell starts + +- Current date / time can be used as all or part of the shell prompt. + +- Standard error redirection return fixed for pipes / EX bug fixed + +- Memory scripts + +- Shell Variables (VAR.# , %# , %*, VAR.? , V , -V ) / INC. / DEC. + +- PATH= command (PATH=?) / PAUSE command + +- IF / THEN / ELSE / ENDIF / FI / CLRIF + +- GOTO / ONERR GOTO / *\ + +- Wildcarding + +- Path redirection (Z= , R=) + +- @ removal for users other than user 0 / Logging (L / -L) + +- Shell Subs (%%#) + +- User Startup execution + + +V2.1 additions/changes +----------------------- + +- Wildcard Quoting ('\' as escape character) + +- Wildcarding rewritten (fix comment line errors,upper/lower match,range) + +- Packed BASIC09 memory size error fixed + +- Large parameter line into shell fixed + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/shellplus/shellplus2.2a.doc Mon Aug 08 11:48:52 2005 +0000 @@ -0,0 +1,92 @@ + This archive should contain: +SCF.IPC ----------->Patchfile to create new SCF with Kevin Darling's keyboard + editing, Bill Nobel's buffer pre-fill call, and some + general optomizations by yours truly +SHELL ------------->Version 2.2a of Shellplus with command history (shell is + so different in it's current state than the Tandy/ + Microware original, I see no sense in making it an IPC + file... someone correct me if I am wrong) +SHELLPLUS2.2A.DOCS->This documentation file + + NOTE: YOU HAVE TO USE THE IPATCH UTILITY TO MAKE A NEW SCF FOR THIS VERSION +OF SHELLPLUS TO WORK. IT REQUIRES THE STOCK SCF AND THE IPATCH UTILILITY, +AVAILABLE ELSEWHERE. + +Ident of original SCF to patch: + +Header for: SCF +Module size: $05E3 #1507 +Module CRC: $F946CA (Good) +Hdr parity: $0E +Edition: $0D #13 +Ty/La At/Rv: $D1 $81 +File Man mod, 6809 obj, re-en, R/O + +Ident of new SCF you should end up with: + +Header for: SCF +Module size: $06E5 #1765 +Module CRC: $E551FB (Good) +Hdr parity: $0B +Edition: $11 #17 +Ty/La At/Rv: $D1 $81 +File Man mod, 6809 obj, re-en, R/O + + In 1992 or 1993, a version of ShellPlus (V2.2) had a limited release that +contained command history (being able to scroll forwards or backwards through +that last few lines that have been typed in the shell. It used Bill Nobel's +modified SCF (which includes Kevin Darling's line editing patches as well) & +worked by temporarily modifying the ABORT & INTERRUPT keyboard signals to be +up & down arrows. (It then used the signals generated by the 2 arrow keys to +go forward or backwards through the command history buffer, even if you were +in the middle of typing a line.) Once you hit <ENTER>, it switched the signals +back to normal, and then processed the line (thus, if you were running a +program, you could still <CTRL>-<C> or <E> out of it). One small problem it +had, though, was that if you DID break out of a program, when it came back to +the shell it still had the <CTRL>-<C> or <E> sitting in the keyboard buffer. +Since the first thing ShellPlus V2.2 did was reset those keys, the real +<CTRL>-<C> / <E> sitting in the buffer got printed as an illegal OS-9 +character ('.'), so you always had a period sitting as the first character on +your new shell prompt line. + I went in and attempted to fix this just after I got this version of +ShellPlus, and did so with partial success. I eliminated the period, but +caused a new bug that if you forking sub-shells and using <CTRL>-<C>/<E> at 2 +or more levels down a Fork chain (ex. doing a '$dir' from BASIC09 ends up +being 2 levels deep), it crashed all shells running on the machine. So, this +version wasn't released. + Just recently I finally figured out how to fix it, and did. To +differentiate between the two versions, mine is called ShellPlus V2.2a. + While it could have been done without it, this version requires a new SCF, +that has an extra option added onto Bill Nobel's keyboard buffer filling +SetStat call. If the high bit of Y is set, a carriage return will NOT be +appended automatically to the keyboard buffer. This SCF also contains some +minor speed optomizations in other parts of the code as well, so even if you +don't use Shell+, it should be worth your while. + NOTE!!!!! + There was a small bug in the original buffer filling call- it didn't bother +to check the size of the buffer you specified in Y before it tried to copy +it... a large value would crash the machine. Since Shell+ V2.2A REQUIRES the +new high-bit Y version of SCF's buffer filling call, it will CRASH an old SCF +machine as soon as you try to abort (with <CTRL>-<E>, <CTRL>-<C> or <BREAK>) +any program you run from the shell. MAKE SURE YOU INSTALL THE NEW SCF BEFORE +INSTALLING SHELLPLUS V2.2A! + Shell+ V2.2A also fixes some bugs in Shell+2.1/2.2: +1) It opens Directories (for CHD/CHX/CD/CX) in READ mode instead of UPDATE +(according to the manual, these will be slightly faster) since none of those +shell commands write to the directories. +2) The ^ option (for setting priority just for the command line you are +typing) now works. The original should have worked, but for some reason +didn't. I think it had something to do with trying to change the priority of +a module just after it was forked; maybe it hadn't been 'fully' forked by the +time the priority was to change. I modified Shell+ to set itself to the new +priority, fork the process, and then immediately set itself back to normal. +3) If a ShellSub module was linked (see ShellPlus V2.1 docs), it didn't +unlink it properly, due to to statements being backwards in the original +source. This has now been fixed. + + For those of you running NitrOS9, the new version 1.20 upgrade will include +this shell, and has an even more extensively optomized SCF (see NitrOS9 docs +for details) + + -L. Curtis Boyle, Aug. 20, 1994- +