AUSH - User's Manual AboutThisDoc This manual describes release 3.17 of the utility AUSH. This program is (c)1992-1994 by Denis GOUNELLE, any commercial usage or selling without author's written authorization is strictly forbidden. You can copy and spread this program under the following conditions: - all the files are provided - the files are not modified in any way - you don't charge more than $6 for copy fee In spite of several tests, no warranty is made that there are no errors in AUSH. YOU USE THIS PROGRAM AT YOUR OWN RISK. In no event will I be liable for any damage, direct or indirect, resulting of the use of AUSH. Introduction AUSH (Amiga Ultimate SHell) is a new command line interpreter, designed to replace Commodore's shell. It takes several features from some UNIX and Amiga shells I used (sh, csh, tcsh 6.00.03, AShell 1.3 and Csh 4.01A) but also adds a lot of new possibilities, while remaining almost fully compatible with Commodore shell. Criticisms and suggestions will always be welcomed. Write to: M. GOUNELLE Denis 27, rue Jules GUESDE 45400 FLEURY-LES-AUBRAIS FRANCE You can also send a message to the following Internet address : "gounelle@alphanet.ch". Note that this mailbox is not mine, so please send only short messages. As I don't have direct access to the messages, don't expect an answer before a dozen of days. Many thanks to Pierre ARDICHVILI, Jean-Yves PROUX, Jean-Philippe RAPP, and Michel SCHINZ for tests and suggestions. Installation This version of AUSH only works under system release 2.04 or higher. Copy the "AUSH" (the shell itself) and "NewAUSH" (command to start a new shell) files to your "C:" directory. Both AUSH and NewAUSH are written in "pure" code, and can be made resident. AUSH is now localized, so it can adapt itself to your favorite language. All you have to do is to copy the good catalog file into the directory corresponding to your language. For exemple, if your default language is french, copy the "français.catalog" into the "SYS:Locale/Catalogs/Français" directory, under the name "AUSH.catalog." The german catalog was translated by Stefan SALEWSKI. The NewAUSH command The NewAUSH command is the command to start a new shell (as Commodore's NewCLI and NewShell). It won't work unless you put AUSH in the command search directories defined by the "Path" command. To start a new shell, enter the following command: NewAUSH [WINDOW=window specification] [FROM=startup file] Example: NewAUSH WINDOW=CON:0/11/640/180/AUSH From WorkBench, you must create a "Project" icon, and specify NewAUSH complete path in the "DEFAULT TOOL" field. You can also specify a stack size ("STACK" field), a window specification ("TOOLS TYPE" field, the syntax is "WINDOW=specification") and a alternate startup file ("TOOLS TYPE" field, the syntax is "FROM=file"). Command line parsing Each command you enter is parsed by AUSH before it tries to execute it. First, alias substitution is performed on the command name. An alias can be defined by another one (CAUTION: there's no test for alias recursion !). You can prevent alias substitution by adding a "\" character before command name (e.g. "\ls df0:"). All command arguments are also scanned, and the following substitutions are performed: ; start comment (the rest of the line is discarded). ^chr replaced by "CTRL-chr" if "chr" is a letter, by "chr" otherwise. §n replaced by the n-th directory in the directory stack. $var replaced by the value of the given variable (the local variables are scanned first, then the global variables, and last the Commodore environment variables list) or by an empty string if this variable is not defined. Variable names may be put between brackets: to display the value of variable "foo" followed by "hello", you must type "echo ${foo}hello" instead of "echo $foohello". Variable names may be followed by a function name. This function will be applied on variable value (if the variable is defined) during substitution. The variable value is not modified. Function supported are: lower convert to lower-case upper convert to upper-case first extract first character slead skip leading tabs or spaces len return len base delete path name noext delete file extension expand expand the pattern split break value into words (see "for" command below) The syntax is "$var:function", e.g. "$config:lower" or "${config:lower}". pattern replaced by the name of all files matching the pattern. A pattern is a word with at least one of the AmigaDOS wildcards. Take care that some commands (list, copy, ...) expect the pattern and expand it themselves, so you'll have to quote it (e.g. "list '#?.o'") in order to avoid conflicts. {expr} replaced by the result of the expression (see below for syntax). !! replaced by last command in history. !n replaced by n-th command in history. !str replaced by last command beginning with "str" in history. `cmd` replaced by the first output line of specified command. Leading spaces are deleted, the line is considered as a whole word and is not parsed again. Example: "set foo `type config`" copies the first line of "config" file in a local variable named "foo". \chr escape the meaning of the "chr" character. 'str' copies "str" without parsing (except for the "\chr" form). "str" copies "str" without parsing (except for "^chr", "§n", "$var", "{expr}" and "\chr" forms, pattern expansion is not disabled). >file specify output redirection. If the file does not exist it is created, otherwise it is truncated to zero length. >>file specify output redirection. If the file does not exist it is created, otherwise output is append to existing file. shift right & and | or sx store stack top in register x (x = 0 to 9) lx push register x (x = 0 to 9) HEX change output base to hexadecimal Registers are set to zero when you start AUSH, and are not modified between two expression evaluations. Numbers and operators must be separated by at least one space. Examples: echo { 34 3 / 4 + } => 15 echo { 7 3 - } => 4 echo { 10 -2 + } => 8 set cpt 3 echo { $cpt 2 * } => 6 set cpt { $cpt 1 + } echo $cpt => 4 Command line editing Command line editing is enabled by setting the "lineedit" variable to "1". AUSH takes control of the shell window, and recognizes the following keys: left previous character. right next character. shift-left previous word. shift-right next word. shift-up last command in history beginning with the current line. up previous command in history. down next command in history. ^A beginning of line. ^B previous character. ^E end of line. ^F next character. ^K delete end of line. ^L refresh line. ^N next command in history. ^P previous command in history. ^T first command in history. ^W delete end of word. ^X kill current line. ^Z last command in history. RETURN save command and execute it. ESC save command but don't execute it. ^V suppose that previous word is a variable name, and replace it by it's value. Example: echo version<^V> => echo 1.10 TAB filename/varname completion. Example: cd ram: list Cl => list ClipBoards/ echo $hi => echo $history If the prefix you gave matches several names, it is extended up to the point of ambiguity and all the possibility are displayed. To perform filename completion, AUSH adds the content of the "filepat" variable to the prefix and expands the resulting pattern. ^D displays the list the possibilities for filename/ varname completion, but does not modify command line. HELP opens a file requester. If you select a file, it's name will be added to the command line. f1 to f10 replaced by the content of "f1" to "f10" variables (of "F1" to "F10" if shifted). The TAB and ^D keys may also be used in the middle of a word. The "keys" special variable may be used to remap control keys (see below). Other features AUSH can execute script files (which are text files containing several commands) just as any other program. In such files, the local variable "argc" is set to the number of arguments you gave. AUSH also sets some "pseudo" local variables (the "set" command won't show them, and you can't modify them): the variable "0" is set to the script file name, "*" to the argument list (each argument separated by a space) and "1", "2",... variables to the arguments themselves. On startup, AUSH tries to execute the "S:.aushrc" script file. AUSH can save your commands in an history. The "history" variable tells how many commands are to be kept. The "history" command displays the history content. The "savehist" variable tells how many commands must be saved when you quit AUSH. This file is read when AUSH starts, and all commands in the file are stored in the command history. You can define the "histfile" variable to the name of the file to use to save/load command history. Default name is "S:.history". The alias "dircmd" (if defined) is executed each time you enter a directory name as a command name (without arguments, redirection, pipe, or background specification). So, "alias dircmd cd %1" gives you an "implicit cd": to change of directory you just have to enter the new directory name. Of course, you can define a more complex alias, like "alias dircmd cd %1 , list QUICK FILES". AUSH manage a stack of directories (64 entries). You push a directory with "pushd", you pop a directory with "popd", and you list the stack content with "dirs" (all these internal commands are described below). You can use this stack in your commands, with the "§n" form (replaced by the n-th directory in the stack). With the default stack of 4000 bytes, AUSH can't execute more than about 15 nested script files and/or loops (you'll get the error "not enough stack space !"). If the name of the output redirection file is "TTY" (i.e. ">TTY" or ">>TTY") the output will be redirected to the shell's window. This may be useful in a script file, to display a message when all output have been redirected to a file. By default, pipes are handled via temporary files in the "T:" directory (see "truepipes" variable). The "T:" directory is also used for command substitution and loop execution. A command like "cmd &" is the same as "run cmd" under Commodore shell. AUSH will wait for *ALL* background commands to finish before terminating. Use the "jobs" command to list background commands. Internal commands These commands can't be run in background, but can have their input and/or output redirected. They always return 0 (RETURN_OK) or 20 (RETURN_FAIL). "set" and "setvar" commands display variables with their attributes ("x" for exportable, "r" for readonly). alias Displays all aliases and their definitions. alias name Displays definition of alias "name". alias name 'string' Define an alias "name" to the given string. In the string, the "[]" symbol tells AUSH where to copy alias arguments. You may also use the "%1", "%2", cd [dir] Without argument displays the name of the current directory, otherwise sets current directory to "dir". dirs Displays the directory stack. echo [-c] [args...] Just displays all given arguments, followed by a new-line character (except if you specify the "-c" option). eval Enters expression evaluation mode: every line you enter is supposed to be a expression, which result is displayed. To exit this mode, enter the character "x" alone on a newline. exit [code] Returns to previous execution level, with the specified return code (0 if no arguments). In interactive mode, it terminates the shell. export vars... Makes the given local variables "exportable", so they can be read, modified or destroyed by any script file started from the current execution level. for var in val1 val2... valn .... done Performs a loop. The local variable "var" is set to each value in the list, and for each value the loop is executed. After the "done" command, the "var" variable tells for which value the loop was last executed. You can also use the form "for var in val1 .. val2", where "val1" and "val2" are numeric values. Both numbers may be negatives. If "val2" is lower than "val1", loop step will be negative. The "split" function may be very useful here: if the "foo" variable value is "this is an example", the "for i in $foo" command will only make one loop, with the variable "i" set to "this is an example". However, with the "for i in $foo:split" command, you will have four loops and the variable "i" will be set to "this", "is", "and" and "example". for var from file ... done Performs a loop the same way as for the previous form, except that the local variable "var" is set to each line of the given file. history [str] Displays the command history. If the optional "str" argument is specified, only commands beginning by the "str" string will be displayed. if [NOT] condition .... [else ....] endif Conditionnal execution. The condition may be: -d name true if "name" if a directory (1) -e name true if "name" exists (1) -f name true if "name" is a file (1) -o name name2 true if "name" and "name2" exist and "name" is older than "name2" (1) -s name true if "name" is not an empty file (1) str = str true if strings are equal str == str true if strings are equal (case-insensitive) n1 LT n2 true if n1 is lower than n2 n1 LE n2 true if n1 is lower than or equal to n2 n1 EQ n2 true if n1 is equal to n2 n1 NE n2 true if n1 is not equal to n2 n1 GT n2 true if n1 is greater than n2 n1 GE n2 true is n1 is greater than or equal to n2 The word "NOT" may be used to invert the condition. Up to 16 "if" commands may be nested. (1) If the letter after the minus sign is an upper-case letter (e.g. "-D"), the test will fail without any AmigaDOS requester if volume is not mounted, if there is no disk in drive, etc... jobs Displays the list of background commands. loadhist Loads command history from history file. May be useful if you've just changed the "histfile" variable, and want to use the new history file. popd [nb] Without arguments, pops the last directory in the directory stack and makes it the current directory. Otherwise, truncs stack size to "nb" entries (i.e. "popd 0" clears the stack). pushd dir Pushes the current directory onto the directory stack and sets current directory to "dir". read [-f] var Sets local variable "var" to the first line read on standard input. Returns RETURN_FAIL on end of file. If you specify the "-f" option, the user won't be allowed to enter an empty string. readonly vars... Makes the specified variables "readonly". This works both on local and global variables. set Displays all local variables and their values. set name Displays value of local variable "name." set name value Sets local variable "name" to "value". setvar Displays all global variables and their values. setvar name Displays value of global variable "name." setvar name value Sets global variable "name" to "value". shift Shifts script file arguments: "1" pseudo-variable is set to "2", "2" is set to "3",... The "argc" and "*" variables are updated. source file Execute a script file. If you specify an output redirection, all commands in the file will be redirected. stop [code] Exits a "for...done" loop with the specified return code (0 if no arguments). time Runs the given command and displays the execution time of this command. Can be used for all commands, including internal and background ones. unalias name... Destroys the specified aliases. unset name... Destroys the specified local variables. window front window back window move x y window size width height Put the window in front of all other windows, in back, move it or resize it. writehist Writes immediatly command history to history file. Can be useful, for example, before running a program that may crash you Amiga. Special variables These variables are used to control AUSH. You should define them as global variables (that is what AUSH does when setting them to their initial values). cmdnum command number (_ShellNumber_CmdNumber, guaranted to be different for each command being executed). cwd current directory. debug if set to "1", displays commands before and after parsing (may be useful to debug script files). delim list of word delimiters for "next word", "previous word" and "delete end of word" functions of the command line editor. Initial value: " :/". filepat string added to current word to perform filename completion. Initial value: "#?". fullhist if set to "1", save all commands in the history. Otherwise, don't save twice again the same command. histfile name of the file to use to save/load command history. If not set, "S:.history" is assumed. histmin minimal length that a command must have in order to be saved in history. Initial value: 3. insert if set to "1", command line edition is in insert mode (overstrike mode otherwise). Initial value: 1. ioerror last IoErr() code sets by an internal command. Initial value: 0. keys allows you to remap control keys. Must be set to a string of lowercase characters, each character setting the control key to use to call one of the command line editor's functions. The corresponding function is found by to the position of the letter in the string: position 1 go to beginning of line position 2 previous character position 3 list completion position 4 go to end of line position 5 next character position 6 kill end of line position 7 refresh line position 8 next line position 9 previous line position 10 swap characters position 11 go to beginning of history position 12 replace variable position 13 kill end of word position 14 kill line position 15 go to end of history For example, if the fourth letter is "o", you will have to press ^o to go to end of line. When remapping control keys, avoid to use ^h, ^i, ^j and ^m keys, because they are handled in a special way. Initial value: "abdefklnpstvwxz". lineedit if set to "1", enables AUSH command line editor. Ignored if "remote" variable is set to "1". noexpand if set to "1", patterns in command lines are not expanded. path command search path. Directory names must be separated by a semi-colon character ";", and the name "." stands for the current directory. If a file with the "s" bit set is found when searching for a command, AUSH tries to run the appropriate command: rx if the file begins with "/*" (AREXX script) source if the file begins with ";AUSH" (AUSH script) execute in all other cases Example: setvar path 'ram:;.;c:;sys:utilities' prompt defines normal prompt. You can include the following sequences: %h current history number %# shell number %i "if...endif" nesting level %l "for...done" nesting level %c current directory ("cwd" variable) %b basename of current directory %s last return code ("status" variable) %Vname valeur of "name" variable %T time (HH:MM:SS) %d day in the month (1-31) %D day in the week (Mon-Sun) %m month (1-12) %M name of the month (Jan-Dec) %y year (1900-1999) %C CSI character (0x9B) %N carriage return %f size of FAST memory free %v size of CHIP memory free %a size of memory free (FAST+CHIP) %% the '%' sign Initial value: "%C0;33;40m< %# - #c >%C0;31;40m" prompt2 defines prompt between "if" and "endif". Initial value: "%i> ". prompt3 defines prompt between "for" and "done". Initial value: "%l) ". remote set to "1" if running over a serial line (AUX:). savehist number of commands to save. If not defined or set to a value lower than 1, nothing is saved. status last return code. titlebar defines the titlebar of the current window (same syntax as for the prompts). Ignored if "remote" variable is set "1". trap command(s) to run when CTRL-C or CTRL-D are hit during a script file or a loop execution. I suggest you define it as a local variable, so that each script file could modify it for it's own use. I also suggest that you give an "exit" command as last command (e.g. "set trap 'delete $tmpfile , exit 20'"), otherwise execution will not be stopped (so to ignore breaks use "set trap ';'"). If this variable is not defined, execution is stopped with a return code of 20. truepipes if set to "1", pipes are handled via "PIPE:" device. version current version of AUSH. UNIX version AUSH understands the "variable=value" form. The "@pri" and "&pri" forms are ignored, because the nice() system call doesn't allow raising priority. As expected, Cd without argument goes back to the $HOME directory. The ".aushrc" and ".history" files are searched in the $HOME directory. In prompt definition, the "%f", "%v", "%a" and "%C" specifications are ignored. The "truepipes" variable is ignored (pipes are handled with temporary files in the "/tmp" directory). Child death time is set to the time we detect it's death (should be ok because the SIGCHLD signal is trapped). Under any regular UNIX shell, the "set" command shows all environment variables. Under AUSH, you get all local variables. If you want environnement, you must use the "env" command. The command line editor uses the value of the TERM variable to know which terminal you use. As it's impossible to get the value of shifted function keys, and shifted up-arrow, these keys are handled only if the terminal is "amiga". The HELP key is ignored. History v1.00 28-Feb-92, 29564 bytes o First release. v1.10 28-Mar-92, 31828 bytes o When expanding vars, look also in ARP/Commodore and Manx lists. o "^D" key displays possibilities for file/varname completion ; "^B", "^F", "^N" and "^P" keys do the same as "left", "right", "down" and "up" keys. o The command line editor erase cursor while executing a command (faster display). o The file request read the current work to set request initial's directory. o Reset SIGBREAKF signals when returning from command line editing (they are set if you press "^D", "^E" or "^F" keys) o "!!", "!n" and "!string" can be specified anywhere on the command line. o Added -D, -E and -F switches to "if" command. o Added "for var in val1 .. val2" specification to "for...done" command. o Added alias "dircmd". o Add a space after an alias definition without argument (if you enter "alias ls dir", and then type "ls ram:", you will no longer have a "Please insert volume dirram: in any drive" requester). o Error messages in german if the "language" variable is set to "deutsch". o Renamed "setenv" command to "setvar" (no more conflicts with Commodore's command), added "echo" command. o Added special variables "version" and "path", the "ioerror" command is initialized to "0", the "insert" command is initialized to "1", removed "autocd" variable. v1.11 29-Mar-92, 31832 bytes o Bug fixed: The "echo" command can new be output redirected. v1.12 11-Apr-92, 32244 bytes o Load history *after* "S:.aushrc" execution, in order to allow a change of the value of "history" variable in the startup-sequence. o Added "NE", "LE", and "GE" switches to "if" command. o In "for i in val1 .. val2" specification, "val2" may be lower than "val1", and both value may be negative. o No more checking of arguments size for internal commands. o Added "^V" key to command line editor. v1.13 18-Apr-92, 32280 bytes o When searching a command with the "path" variable, check that the object is a file (and not a directory). v1.14 26-Apr-92, 32300 bytes o Two bugs fixed in command substitution: didn't remove the final "`", error in arguments length computation. o Bug fixed in the parser: didn't escaped "<>,;" special meaning when in first position of a quoted string. o Better german messages. v1.15 01-May-92, 32364 bytes o Added "histfile" variable. o Two bug fixed in arguments length computation: forgetted quotes, and didn't add some more space for "splitted" arguments. v1.16 11-May-92, 32404 bytes o Bug fixed: the "-c" option of "echo" command *really* delete the final "\n" (doesn't replace it with a space) v1.20 16-May-92, 32568 bytes o Added "loadhist" and "writehist" commands. o Added "%Vname" specification to prompt syntax. o Parser modified: parse right part of a complex command *after* left part execution, so: - "cd ram: , delete *" does what expected ("*" was expanded before going to "ram:") - all commands in a complex command may be aliases (not only the first one) - you can write a loop in one command ("for i in 1 .. 50 , echo $i , done" didn't worked, now even "cd ram: , for i in *.c , echo $i , compress $i , done , echo fini" does !) v1.21 17-May-92, 32912 bytes o Added "time" command. v1.22 23-May-92, 32944 bytes o Bug fixed in loop handling: when writing commands to temporary file, didn't ensure there was a "\n" character after each command. v1.23 01-Jun-92, 33328 bytes o Several bugs fixed in loop handling (when written on a single line): now "for i in 1 .. 5,echo $i,done" and "for i in 1 .. 5 , list | wc , done" work. o If a file with the "s" bit set if found, when searching for a command in the path defined by the "path" variable, a "source" command is automatically run on this file. o The "^S" key swaps the two previous characters. o The "^D" and "" keys can now be used without prefix, i.e. at the beginning of a line or after a space character. o Bug fixed in command line editor: after a "shift-up" key, the "up" and "down" keys didn't give the expected commands. v1.30 14-Jun-92, 33932 bytes o Fixed several errors detected with "Enforcer" and "Mungwall". o Bug fixed in "shift" command: didn't set "argc" to the good value. o Handles "$*" (list of arguments separated with a space). o Added -f option to "read" command. o "argc" variable is now read-only. o Checks varnames given to internal commands ("pseudo" local variables are not allowed). o "&[pri]" and "@pri" can be specified anywhere on the command line. v1.40 26-Jun-92, 37764 bytes o Now compiled with SAS/C 5.10b (with pragmas and optimization) o Can be made resident ("pure" code) o Bug fixed in strxcat() function: didn't save a2 register o Several changes for better support of 2.04 system release, so: - no more need for "arp.library" - can execute ROM resident/internal commands - AmigaDOS "Execute" command works o Expression evaluator modified: - hex (0x13F) values supported - added "HEX", "<", ">", "&", and "|", operators o Added "-o" switch to "if" command o Bug fixed in "if" command: didn't always UnLock() file v1.41 30-Jun-92, 37864 bytes o Bug fixed in command search: doesn't search path for resident commands v1.42 06-Jul-92, 37872 bytes (Fish #706) o Bug fixed in loop handling "for...done": command redirection was "forgotten" o No more "Enforcer" hits whith "!string" (or "shift-up" in command line editor) when there's no command starting with "string" in history v1.50 21-Aug-92, 37736 bytes o Added global var "keys" (allows to remap control keys) o Optional argument "FROM file" o More checking at startup time: proc->pr_CLI must be a valid pointeur, stop if started from WB, etc... o Bug fixed in expression parsing: displayed result in decimal even if "HEX" was specified o Bug fixed under 1.3 system release: didn't give full command path to function that start command execution v1.51 01-Sep-92, 37808 bytes o Bug fixed in path search: after automatic sourcing of a script (bit "s" detected) the following commands were sometimes also considered like a script (and sourced !!!) o "history str" displays only commands starting with "str" o The "history" command checks CTRL-C while displaying history o Displays command founded when using "!!", "!n" or "!str" forms o Bug fix: when you did a "cd volume:" the $cwd variable didn't ended with a ':' (so problems for example with a "copy df0:foo $cwd") o Bug fixed in file name completion: distinguished lower case and upper case characters. v1.52 22-Sep-92, 40000 bytes (Fish #747) o Allow the ${varname} form o Added variable functions (e.g. "$var:function" or "${var:function}") o Added "==" condition to "if" command o Command line length is no longer limitated to 256 characters under system 2.0 o Bug fixed: test "s" protection bit even if full command path name is given o Some bugs fixed in "for...done" loop handling o The $cwd variable now always ended with a ":" or a "/" o If no file correspond to a pattern, displays an error message and don't execute command v1.53 22-Sep-92, 40136 bytes o May now be used over the serial port (AUX:) o Added "remote" variable o "cmdnum", "cwd", "status", "version" and "remote" variables are now readonly o Access to directories stack is done with "§nb" instead of "=nb" (no more need to protect "=" for the "if" command) v1.54 05-Oct-92, 40120 bytes o No more deadlocks in command line editor o Bug fixed: couldn't execute a command located on a volume which name has spaces in o Bug fixed: if an syntax error occured in !!, !n or !str forms, still executed the command v1.55 23-Oct-92, 40764 bytes o Added "for var from file" form o When starting a background command, stdin and stdout are redirected to "NIL:" (if they have not been redirected yet) o Uses "PIPE:" to handle pipes if "truepipes" variable is set to "1" (under 2.0 system release only) o Added "base" and "noext" functions v2.00 03-Feb-93, 37744 bytes o Recompiled with SAS/C 6.2 o Now works only under system release 2.0 or more o Fully localized. v2.01 07-Mar-93, 37988 bytes o Now handle shell window closing gadget o Build argument string in a different way (add spaces before args, not after) o You can get a '%' in prompt or titlebar v2.03 13-Apr-93, 38060 bytes o In filename completion, automatically add a '/' if the name if a directory name or a ' ' if it's a filename v2.04 04-May-93, 38268 bytes o Added "split" function v3.00 14-May-93, 39336 bytes o Parser rewritten from scratch ("$foo:split" work as a command, etc...) o Aliases handling modified: - definitions MUST NOT be enclosed between quotes - you may use "%1", "%2,... to specify argument positions o Command line editor modified: - no more problems with commands on several lines - filename completion works even in the middle of a word - "top of history" and "bottom of history" functions now work o When finding a script (with bit "s"), try to guess it's type (AREXX/AUSH/other) v3.10 25-May-93, 45964 bytes o Compile and run under UNIX o Added "expand" function and "window" command o The "time" command work again o If an error code doesn't have a message in the locale catalogue, call the Fault() function to get it's meaning o All locale catalogues modified o Several bugs fixed ("echo" without arguments, filename completion with cursor at the end of a word, varname checking, etc...) v3.11 01-Jun-93, 46388 bytes o On an Amiga, don't lose typeahead characters anymore o "window" without arguments shows position and size of the window v3.12 17-Jun-93, 46396 bytes o Bug fixed: interpreted ',' and '|' even if at the beginning of a string between o Bug fixed: an empty line in a script was considered at end of file v3.13 27-Jun-93, 46472 bytes o Some changes to make compilation easier/better under UNIX o Under UNIX, the default prompt doesn't contains ANSI sequences anymore o Added "%b" specification for prompt definition v3.14 10-Jul-93, 46588 bytes o Compiled with SAS/C 6.3 o Calling the file requester caused an Enforcer "hit" o Bug fixed in parser (substitution of '*' by '#?' is better now) o The NewAUSH command returns 0 (instead of 1) v3.15 25-Jul-93, 46608 bytes o Maximal number of arguments for a command is now 128 (instead of 64) o Bug fixed in parser: $i, "foo" and 'bar' were not handled correctly after a redirection symbol ('>' and '<', for exemple "foo > $i" didn't worked) o Bug fixed: "cd" didn't changed cli_SetName under AmigaDOS v3.16 08-Apr-94, 46644 bytes o Recompiled with SAS/C 6.51 (fixes some bugs) v3.17 01-Jul-94, 46608 bytes o Bug fix: "NewAUSH" didn't handle arguments the good way