Whats New. In the text below: for UNIX read 'any' UNIX (any is a dangerous term in the UNIX world, depends on flavor). for Windows read Windows 3.x, Windows 95 and NT. for DOS read DOS 3.x or above. for AMIGA read AMIGADOS v1.3 or above. When example commands are given below they are enclosed within single quotes, e.g. 'mycommand'. Optional arguments are enclosed within < > marks. If you are uncertain as to how a command work (under UNIX) see the manual pages using 'man ' at the tzsh shell prompt. Functionality has been kept as close as possible with UNIX but there may be variations on parameters supported or results, especially for system level functions. ? provides version info. V0.67 ----------------------------------------------------------------- * Added redirection to null device, e.g. ls $TMP > dev/null * Added check on startup for good $TMP directory, warns if bad path, this was done as when bad, tzsh becomes unstable. * Corrected a bug with find when using -newer dd/mm/ccyy, it now works V0.66 ----------------------------------------------------------------- * Increased internal memory used for names of files and paths to reflect modern files systems. * Fixed bug in grep which prevented it from working when certain character combinations were used in filenames. * Noted bug in cut which means the '-d' option only works if it follows a '-f' option in the command line. V0.65 ----------------------------------------------------------------- * Added 'uniq' command, I hadn't bothered adding this until I really needed it. * Added '-h' mode to df, du and ls commands, to display output in human form. Currently scales to KB to 1 and MB or GB to 2 significant figures. * Added '-maxdepth' to find command to limit depth of recurse while looking down directory tree for files V0.64 ----------------------------------------------------------------- * Updated 'df' command to handle disks bigger than 2GB V0.62 ----------------------------------------------------------------- * Added 'hexview' command to view files in a formatted manner, with hex or decimal output and formatted with data and a cheater block. * Improved 'touch' command so that it now accepts date and time information allowing a files timestamp to be set to an exact value, supports mmddhhmm[ccyy]. * Fixed bug in df command which incorrectly reported size of disks bigger than 2GB * Fixed bug in console which ignored the first character in the second command entered - very strange as this was only place it ever happend, solved now. * Fixed slight formatting bug in du command which did not put newline at end of output V0.61 ----------------------------------------------------------------- * Added 'patchit' function which allows a text string in any sort of file (including binaries) to be replaced with another text string. This is a tzsh specific function. * Added case insensitive search support (option -y) to 'grep' command. V0.60 ----------------------------------------------------------------- * The way in which processes are spawned on Windows32 bit platforms was brought into line with UNIX. The most noticable change is that processes are now fully foreground by default and thus now have uninterrupted console access. To override this a process should be spawed as a background task using the & at the end of the command, just as in UNIX. E.g. 'vi' will take over your console whereas 'vi&' will spawn a new one. V0.56 ----------------------------------------------------------------- * Improved support for pattern manipulation to support functionality like v=${a%$b} where a and b are both variables, until this version only one variable could be used within the braces. V0.55 ----------------------------------------------------------------- * Added support for spawning background processes in another console environment (using & after command string, e.g. 'myprogram&'. 'myprogram' would normally launch the program within the current environment, for an example under Windows try 'mem' and then 'mem&' to see the difference. V0.54 ----------------------------------------------------------------- * Added support for substitution parameter type %, e.g. if the variable 'myvar' was equal to 'anyfile.exe' then 'echo ${myvar%.exe}' would give 'anyfile' without the '.exe' extension. * Added support for -e (to print $ at end of line) on 'cat' when using -v option. * Added -s support on lpstat (does same as lpinfo). * Added verbose option on 'set -o'. V0.53 ----------------------------------------------------------------- * Fixed file sharing problem with stdout redirection which occured when you tried to read and write to the same file during a filtering operation, e.g. 'grep hello *.* > t.t'. * Slight change to the way cat -h and cat -H output their values, now nulls are also displayed as 0x0 (not just 0). * Fixed bug which prevented cascading pipes to work sometimes, now you can do 'cmd1 | cmd2 | cmd3 ... | cmdn' to any level. * Added 'split' command to split files into lines or bytes (-b). Use as 'split [-b] [-number] [file] [output_prefix]'. The number specifies the number of lines (in text mode) or number of bytes (in binary mode) in each destination file. The specified destination file names have aa, ab through zz appended to their name, or x is used as the prefix if none is given. Recombine with 'cat -b files* > single_file'. * Added -b option on 'cat' to process files as binary, see 'split'. * Fixed bug in 'set' and 'env' commands that didn't allow redirection, now you can do 'set | more' or 'set > myfile' and it's ok. * Added a 'strings' function for finding character strings in any file. The option -o will allow the searching of binary files for text as well. * Added support for keyboard special key sequences such as 'ESC -' to recall previous commands issues (only Windows95 and UNIX). For AMIGA and NT use the up and down arrow keys. V0.52 ----------------------------------------------------------------- * Added an 'apropos' command to locate commands by keyword lookup and also added 'man -k ' which does the same (uses apropos). * Added support for wildcards on change directory, the cd command will now change to the nearest matching directory, e.g. 'cd mydi*'. * Added environment variable ESC to supply escape character, on DOS if ansi.sys device is loaded, or UNIX/DOS ansi terminal chars are supported, then can directly output escape sequences on echo line, try 'echo ${ESC}[2J' which will clear the screen, or 'echo ${ESC}4h' for big text mode, etc...all ANSI codes the driver supports will work. * Fixed bug with 'head [-Count] file' parsing on this option. * Extended path size from 80 to 128 for each node of a path (prevents crashing on very long name paths found in typical Win95 trees). V0.51 ----------------------------------------------------------------- * Fixed bug which allowed a file to overwrite itself destroying its contents, nasty result, but a simple fix. * Added support for '|' on 'case' to allow any number of alternatives on the same case line, e.g. 'case x in lett|fred) echo hello ;;'. Also fixed bug which only allows 1 line to execute for a case, now any number of lines will execute and the last can be terminated with ';;' instead of having to have a separate line for the ';;'. * Added support for IFS on 'read' command for putting data into appropriate variables by separating input using the IFS char. * Added support for tilda substitution (i.e. ~ gets replaced by the value of the variable HOME). * Added 'echo \non-special-char' feature to print the slash as well as the non-special char (more Unix like response) where the char is not a special char like t(tab), r(carriage return), n(newline) etc. * Fixed bug in 'chmod' which prevented use of wildcards. * Added a 'whatis' command to give a brief description of a command, the tzsh implementation does not require or use the /usr/share/man/whatis file. V0.50 ----------------------------------------------------------------- * Added support for $(list) syntax for command in-place execution, as an alternative to the older `cmd` syntax. e.g. 'echo The directory $(pwd) is here.' as opposed to 'echo The directory `pwd` is here' or 'v=$(pwd)' Vs 'v=`pwd`'. Doesn't work for multiple commands in list as yet. * Added support for $((expr)) syntax for expression evaluation, as an alternative to `expr`. Try 'v=$(( 5 + 2 ))' Vs 'v=`expr 5 + 2`'. * Fixed bug in 'read' command which cause failure to fill data into first variable. * Replaced 'exitshell' with 'return' command to exit from running a script, but stay in the shell (for more portable ksh style). * Added support for ':' as equivalent of 'true' for boolean checks. * The 'alias' now supports full command string with parms and additional user input, e.g. 'alias ll=ls -l', where 'll *.c' would now work correctly as 'ls -l *.c'. * Added RANDOM system variable, e.g. 'v=$RANDOM' or 'echo $RANDOM' will provide a pseudo random number between 0 and RAND_MAX for an integer. To seed the generator set the variable, use 'RANDOM=seed' syntax. * Added SECONDS system variable, e.g. 'v=$SECONDS' or 'echo $SECONDS' will provide the number of seconds the shell has been active. * Fixed bug in if..then..else..fi logic which insisted on else being present, not can do if..then..fi logic, and it will be accepted. * Added support for elif logic as well, now support full if..then..elif..then..else..fi structures and combinations with any level of nesting. Use of tab chars rather than spaces for indentation is recommended (due to i/o buffer space restriction of 128 chars). * Added 'case...esac' constructs to support full case syntax including the *) for default/remainder operation. Also support basic string check e.g. 'numb*)' or 'ab??z)' etc. Currently don't support fall-throughs or multiple selection (i.e. using the '|' operator, e.g. 'one|two)'. Also, the final ;; for each case block MUST currently be on a separate line. * Adding 'select..[in word list]..do..done' syntax. User response in $REPLY with appropriate variable also receiving value if within word list. * Added support for '-newer dd/mm/ccyy' option on 'find' command. V0.45 ----------------------------------------------------------------- * Added 'wait' option for Windows95 and NT (but NT is using 16bit logic) thanks to lack of support in toolhelp32 library. * Fixed bug in echo command to handle escaped characters correctly. * Fixed bug in script processing so any level of indentation is accepted for all commands. * Windows environments - Trap Ctrl-C break requests, allow user to accept or reject. * Added -ls as an option to 'tree' command to display size info. * Fixed bug in skipping of comment lines. * Added / interactive command to 'more' command so pattern searches can be carried out. At the --More--(x%) prompt type / immediatly followed by the pattern to search for, the file will be scrolled to the first match, or not match will be indicated and the next page will appear. * Added following options to 'head' and 'tail': -n for number of lines (before only directly supported -Count). -f (tail only) to follow a file. * Adding embryonic 'trap' processing. Entering 'trap' with no arguments removes all traps. * Added unary operators 'true' and 'false' * Modified output of '-R' option on 'ls' to give full pathnames as in UNIX, as opposed to indented output which it used to give, this indented format is available from the 'find' command, with the option -'oindent' or simply use the 'tree' command. * Added a 'du' command to show the disk usage of files in a directory tree, supports -a option to show all files. * Fixed bug in parser which didn't allow ; in quoted strings but treated as separate commands, now works OK. Also, quoted strings now correctly work as single string for commands and script arguments. V0.44 ----------------------------------------------------------------- * Added 'set -o [option] ' command options for specific options. Supported options are: xtrace - to trace the commands currently being executed. (=='set -x' or 'set +x') allexport - all variables are automatically exported, (=='set -a' or 'set +a') (at present this is not implemented on Windows). * Added 'exitshell' command to exit from running a script, but stay in the shell. * Major internal change to token replacement, now allow correct multiple variable replacement in single line, e.g. c=${a}middle$b. * Added string manipulation including: ${#parameter} to return the length of the var data ${parameter:-word} to return value of parameter of word ${parameter:+word} to return value of word ${parameter:=word} to return value of parm, or set it (see ksh manual for full explaination). * Updated 'cut' to handle fields (option -f) * Updated 'ps' to accept any of the following args: -aefF, Now defaults to only display current and child processes. * Updated 'kill' to work on 95 and NT (still no support for ps on NT, due to lack of support in SDK for 3.5.1). * Added 'shift' command to shift positional parameters to left, supports 'shift [n]' for varying amounts of shift, e.g. 'shift 2'. V0.43 ----------------------------------------------------------------- * Added UNIX ability to accept input on more than one line, indicated by ending the current line with a backslash \. * Added command 'backdrop' for 32-bit windows environments. This allows the user to set the windows wallpaper by simply specifying the file as a parameter to the command. It does NOT alter the normal wallpaper specified in the win.ini file. * Added command 'hear' for 32-bit windows environments. This allows the user to play and listen to standard wave(sound) files. Currently only handles a single filename. * Extended capability of 'grep' to accept strings delimited by double quotes, as well as single words. * The command 'cd -' which changes to the previous directory now displays the new directory which has been changed to. * Added -C option to 'ls' command, for column formatted display, and made this the default when output is to the terminal (as in UNIX). This mode puts all output into a single line if redirected to a file. * Added 'lpstat' to display queue or device (-d) information on printers and associated jobs, including status, jobid, file being printed and username. It currently does not mimick the UNIX version with regards to parameter response, this will change. * Slight difference made in user interaction between the 'more' and 'page' commands (page no longer gives % of file viewed). Also 'pg' is now an alternate name for 'page'. V0.42 ----------------------------------------------------------------- * Full 32 bit version for Windows95/NT now supported. * Long files names and lower case now usable on all platforms (except 16 bit Windows of course). * Due to changes in task/process management under 95/NT the 'ps', 'kill' and 'wait' commands need to be implemented a different way, 'ps' done but 'kill' and 'wait' are currently inactive. * Now supports 'in place' (tzsh terminal) running for normal DOS programs, no extra window started to run these in, this means that for example the MKS utilities can also now be used within this shell using the same terminal, just try out the MKS vi or even any DOS command, you really don't need the DOS interface anymore ! * Most commands now set an exit value (shell variable $?) * The UNIX 'uname', 'who' and 'id' commands are now supported for Windows95/NT 'uname' displays the computer name for the current system. 'who' and 'id' displays current user for the shell thread. * The UNIX 'ls' command Added -R (recursion) capability. Added total bytes listed output on -s and -l modes Added -p support to print the full path of files (used internally) * The UNIX 'cat' command Added -v (text + M-), -h (text + 0x) and -H (0x) output modes * The UNIX 'df' command was added to the WIN32 version Example, 'df f:/' will display the drive, the volume type (FAT, NTFS, NWCOMPA etc) and the voulme name. Other information is also available depending on flags used. * The UNIX 'chmod' command is supported in numeric mode on WIN32. Example 'chmod 740 myfile' (obviously only the user part (the 7 in the example) is processed on Windows), wildcards are supported. * A 'tree' command has been added which displays all the directories and files under the current directory. * A 'lpinfo' command has been added for Windows NT&95 this displays information about printer devices, supports (p)ort and (d)river info, also sha(r)ed devices. * 'cat' now handles any number of files and/or wildcards * The UNIX 'test' command has been added, with support for: -s(not fully), -f, -r, -w, -n, -z * Shell script argument support was added. This includes variable $# to indicate number of args, variable $0 for the script name, variables $1, $2... for each argument passed to the shell and variable $* for all args together and variable $@ for IFS seperated list * The UNIX 'which' command was added * The UNIX 'paste' command was added, also supports -s mode * Added support for -i flag on 'cp', 'mv' and 'rm' commands, this asks permission if about to destroy an existing file. * Improved handling for piped commands. * Improve handling for file selection and how temporary files are handled. * Multiple cascading pipes and redirections (filters) now supported (with | and > or >> for append). * The UNIX 'wc' word count command was added including line, word and character counting (-l, -w, -c) and -b for omitting blank lines/chars from the count. * Partial implementation of lp command, includes -d option to set destination (try lp -d lpt1 myfile) or LPDEST shell variable. * On MS Windows platforms the spawning of a new task using the & operator is ignored, the & is simply removed from the command. * The UNIX 'touch' command is now supported, currently only sets system time on access and/or modificiation time. * The UNIX 'read' command extended to correctly support multiple variables, excess input (direct to last variable), and also prompt text using form read varname?"prompt text" where the ? delimits the text string from the variable list. Support -u option for taking input from file. * The UNIX 'exec' command supports process redirection for use with read, etc. e.g. can now do the following: exec [id] < [filename] read -u[id] var1 var2 ... *** Known Bugs * The find command is fully network aware and can now handle long filenames, for very long paths an internal memory overflow can occur which causes a crash on exit of the shell or even a machine reboot. The cause is known but not fixed yet. V0.40 ----------------------------------------------------------------- * Pipe handling has been improved but limitation in multiple cascading pipes has not been fixed (future release). * The UNIX 'ps' and 'kill' commands are now supported for Windows and AMIGA Windows: 'ps' displays the module, task and parent task handles as well as the stack size and the command name. 'kill' can be used to terminate the task using the task handle. 'PostMsg' facility has been added to allow the posting of an message (and parameter) to any windows/task. AMIGA: 'ps' uses the system command status to display process id and process name. 'kill' can be used to terminate the task using the process id. * The UNIX 'date' command has been added, only a partial implementation but most of the output type/formats are supported, try them out to be sure. * The UNIX 'sleep' command has been added, this waits a specific time before returning control to the calling process. *The UNIX 'wait' command has been added, this waits until a specific process has ended. The Windows version is implemented, the AMIGA version is still pending. * The UNIX 'cut' command has been added, see below for implementation. By character position (-c flag): Individual characters and blocks of characters can be extracted from a file. By field identification (-f flag): Not Yet Supported. By byte posisiton: As with column position. * Added support for shell variable '!' which contains the id of the last process started (at present only set when using the 'run' command) * Note for Windows: ! is the module id (not the task id which you would use in the 'kill' command, see 'ps' for module & task ids). To view this try 'run notepad' then 'echo $!', then compare with 'ps'. * Added support for UNIX 'grep' command, partially implemented, includes -c to count lines, -n to include line number, -l to list filenames only, -h to suppress filename display on multiple selection, * Added support for redirection to >&1, >&2 and /dev/tty for stdout, stdout and stderr. V0.34 ----------------------------------------------------------------- * The 'more' command displays a percentage of the file viewed, it can now be piped to (as can all commands). * The UNIX 'head' and 'tail' commands have been implemented, default is 10 lines but this can be set to any number (as in UNIX). * The UNIX 'find' command has been implemented. * The script command 'let' has been implemented for explicit variable assignment, although implicit assignment can still be used. * The script 'for' and 'while' commands have been fully implemented. * The script 'read' command for retrieving user input during a script has been implemented (currently only works on stdin, file redirect is pending for future release). * Wildcards and multiple files can now be processed by 'cp', 'mv' and 'rm'. * The UNIX 'mkdir' and 'rmdir' commands have been implemented. * The UNIX 'diff' command has been partially implemented. A file check on exact matching files always works, but not all differences are displayed when files don't match. V0.30 ----------------------------------------------------------------- * The script 'if' 'then' 'else' 'fi' command have been implemented. * The UNIX 'expr' command has now includes the following expression evaluation: =, >, <, +, -, return original value * Variable and Expression token parsing and in-place substitution has been improved. * The 'cd' command was made network aware. * Comment lines are now recognised in script (lines starting with #) V0.20 ----------------------------------------------------------------- * Command pipe facility added. * File redirection facility added, includes ability to redirect stdin and stdout for/from commands making commands like 'ls -l > temp.txt' possible. * In-place execution and result/parameter substitution capability added, allowing commands like 'v=`pwd`' to work. * Repeat Command (history) bug still not fixed. Sometimes attempt to auto repeat a previous command is refused. Not a problem on AMIGA so I haven't bothered fixing it yet. V0.10 ----------------------------------------------------------------- * First development release, basic system and file UNIX commands implemented for DOS, Windows and AMIGA. Commands supported are: ?, cd, pwd, ls, mv, cp, rm, echo/print, clear, cat, more/page, set, unset, alias, unalias, history, r (repeat command) and man Also . works to run a script, run to force execution a command, expr for expression evaluation, help and exit. * Parser for in-place substitution of values from variables works, allowing commands like 'v=3 ; echo $v' echo $PATH' to work etc. * Multiple commands per line works. * Ability to launch native programs in environment added. Known Bugs ------------------------------------------------------------ Total space used in ls and du does not count correctly