Start log thor: Shell V45.0: Oh wow, this was a tough job. The Shell really looked like some kind of BCPL left-over. It took several days just to cleanup the code and turn it into something more readable. BCPL was lurking thru the code all over. No more, folks, no more... The V40 shell was unable to perform the "implicit CD" command properly if the directory name was quoted. It inserted an unnecessary blank space behind the directory name. The shell didn't support multiple backticks on the command line; the backtick parser was simply broken: Fixed handling of asterisk-backtick sequences. The backtick wasn't escaped properly. The shell did not treat TABs as blank spaces. Fixed. Removed the SetClock cludge. Whoever is still using a 1.3 SetClock nowadays cannot be helped anymore and deserved to be crashed. (-; Added a few missing Forbid/Permit locks around access of the list of resident commands. Removed an ugly hack to set the RC and Result2 variables; this really uses now the proper system functions and doesn't attempt to hack directly into the variable buffers. Reworked the parser a lot; it partially tried to fiddle in the internal buffers of file handles using structures that have never been documented. The code now loads full lines at once (no matter how big they are) and then parses within its buffers. This removes all dependencies of implementation details of the file handles. Arguments to redirection did not expand backticks. Fixed. Added a lot of proper error checking if it is low on memory. The internal (and deceased "GlobalVector") is no longer passed thru to all functions. Instead, I'm now using some SAS magic to allocate my data segment myself on each invocaton. Decided not to disable echo-ing for non-interactive shells. Otherwise, we could not debug scripts or the startup-sequence. Sorry, Heinz, but I reconsidered and it's really better this way. Shell V45 re-introduces the handling of the "h" bit. Should it find a command with "pure" and "h" bits set, it makes the command resident automatically. Note that this is (again) the V39 behaivour. Note that "h" is for "hold", not for "hidden". The shell does no longer limit command lines to 512 characters. Command lines can now be unlimited in size, provided the command itself is smaller than the AmigaOs file name size limit (107 characters). The Shell will now auto-expand all of its internal buffers if required to do so. Furthermore, it uses now memory pools for this kind of administration. The shell offers now extended "script" support. In case a script file - i.e. a file whose "s" and "e" bits are set - starts with either the magic characters "#!" or ";!", the string behind this magic cookie is understood as the path to a command parser that shall execute this script. Added support for "file browsing". If the shell encounters now a file as first argument that has its "e" bit cleared (!) and is parsed and recognized as a data- type by the data types system, the shell runs a "viewer" program whose path should be placed in the $VIEWER shell variable. Added support for "stderr" redirection. Therefore, the V45 shell introduces three new redirection symbols: *> filename : redirects stderr to a file *>> filename : appends output to stderr to a file *>< : redirects stderr to the same file that stdout goes into. The shell will also assign the console to the stderr stream should stderr be an interactive stream. Added support for "script stdin". A "<<" will pull the next symbol from the shell script and will push all following lines up to a line starting with this symbol as input into the command. Hence, "<<" is exactly the Un*xoid input redirection. Added a new command line token, the "&" character, the "implicit run". If found, the shell opens named consoles with of a name generated thru utility/GetUniqueID(), and assigns these to the stdin/stdout/stderr of the command, shouldn't redirection be used anyhow. Then the command is detached from the shell segment. Added automatic stack size setup for shell commands. This is a new feature that would hopefully limit the number of stack underflows as it allows application developers to increase the stack automatically without the need for stack swap code. The shell scans now the first 1K of each segment of a loaded binary for the magic cookie "$STACK:". The string behind this cookie is expected to be a decimal number, terminated with a line feed (and an ASCII NUL, i.e. '\0', as for all C strings). This number is then interpreted as the stack size in bytes. The shell will automatically increase the stack size *for this command only*. If the pre-defined stack size is larger than the program-implicit, nothing will happen. AGENDA: Rewrite the parser for shell-variables. This looks currently messy and not very well thought-about. Especially the handling of asterisks is broken here. Rewrite the parser for backticks. This happend already to some degree, but it is not yet perfect.