ASH V0.70 Copyright (c) 1986,1987 CSL/jdn INTRODUCTION: This is Version 0.70 of the ASH document file. If the program you're using isn't V0.70 there's a good chance some of the features won't work as documented in this file. ASH is an acronym for 'A SHell'. It has some of the features I like best from the shell I use the most. This is the only formal documentation for ASH. The HELP key also provides a few screens of information that are helpful if pressed while ASH is running. That information is contained in the 'ash.hlp' file. ASH is shareware and you're welcome to copy it and pass it along to as many people as you want. Please include the copyright notice above in all associated files. To contact me about ASH use the following address: CSL, ATTN: ASH Jerry Nowlin 318 N. Center Street Plano, IL 60545 ASH may never be really 'finished' so any and all comments are welcome. It's something that some of us (me), who prefer typing to clicking, needed to be productive. It isn't perfect so please report any problems. If you like ASH, you can report that too. If you like it enough to use it on a regular basis please send along a few bucks. This will put your name on the registered ASH user list and will enable me to notify you of any major bug fixes or new releases. It will also help my wife appreciate the hours I spend in front of my ST. CONTENTS INTRODUCTION ........................................................ 1 QUICK COMMANDS ...................................................... 2 BUILT-IN COMMANDS ................................................... 4 COMMAND HISTORY ..................................................... 8 HISTORY EDIT COMMANDS ............................................... 8 I/O REDIRECTION ..................................................... 11 COMMAND LINES ....................................................... 11 SET VARIABLES ....................................................... 12 ASH INITIALIZATION .................................................. 13 COMMAND SELECTION ................................................... 13 ASH SCRIPTS ......................................................... 14 LIMITATIONS ......................................................... 14 MISCELLANEOUS ....................................................... 15 V0.70 NOTES ......................................................... 15 - 1 - ASH V0.70 QUICK COMMANDS: The following list describes the ASH quick or single keystroke commands. NOTE: these commands DO NOT go into the command history buffer. ESC The escape key (ESC) puts ASH into history edit mode. In this mode the current command line can be edited or previous commands in the history buffer can be pulled back and edited. The editing commands are explained in a later section of this document. ^L The control-L key (^L) will cause a listing of the command history buffer to be displayed on the screen. There can be up to 23 command lines in the history buffer. The number preceding a command line in the history buffer can be used with the ^R command (see below) to repeat execution of the line. ^R [n-m] The control-R (^R) key will cause either the previous command line, the 'n'th command line or the 'n'th through 'm'th command lines to be re-executed. Unlike the other quick commands, a ^R has to be followed by a carriage return. Due to the way the history buffer is numbered, a sequence of command lines can be repeated by repeating ^R's with the same value of 'n'. For example, in the develop/debug cycle for the Icon language you edit, translate and execute. The beginning of the history listing generated with a ^L might look like this: history list: 1 - iconx mortgage loan.dat 2 - icont mortgage.icn 3 - vix mortgage.icn ... To repeat these three steps after completing the first cycle you just keep invoking ^R with an 'n' of 3. An alternative method would be to invoke ^R with the range '3-1'. This would automatically execute command lines 3 through 1 in that order. Due to the way command lines are numbered in history, the high number in a range should be first if you want the commands to be executed in the same order as they were originally. If you want the commands to execute in reverse order you can use '1-3'. Both orders are acceptable as long as the history numbers in the range are valid. ^W The control-W (^W) key causes a what and who message about ASH to be displayed on the screen. This information is similar to the initial section of this document. ^P The control-P (^P) key causes the prompt to toggle back and forth between simply displaying the current drive and displaying the current drive and the current directory path. For example if you - 2 - ASH V0.70 were in the AUTO folder on drive A you could toggle your prompt back and forth between: [A:\AUTO] and [A:] The default is to display the drive and path. ^V The control-V (^V) key makes the cursor visible. Some programs that can be invoked from ASH cause the cursor to become invisible. For instance MicroEMACS 3.7 and ASH itself assume you're going back to the desktop when they exit so the cursor is turned off. The ^V is a simple way to make it reappear. BS/^H The backspace and control-H (^H) keys will cause the last character typed to be erased. ^X/^U The control-X (^X) and the control-U (^U) keys will cause the line currently being typed to be aborted. The aborted command will NOT be included in the history buffer. ^C The control-C (^C) key will SOMETIMES cause the current running command or program to abort. This doesn't always work and repeated ^C's will sometimes cause ASH itself to abort. When a program does abort its exit code is frequently munged into a GEMDOS error that causes the 'Invalid Function' message to be printed. ASH scripts can be aborted by typing a ^C after a pause command has suspended a script. ^D/^Z The control-D (^D) and the control-Z (^Z) keys will cause ASH to exit to the desktop fast with no looking back. UNDO The UNDO key will cause ASH to ask the user if they want to exit to the desktop. A 'y' will cause the program to exit. Any other character will abort the exit. CLR/HOME The CLR/HOME key will clear the screen and move the cursor to the upper left corner of the screen. HELP The HELP key will cause one of two different help messages to be displayed. When in normal command mode a summary of the quick and the built-in commands is displayed. When in the history edit mode a list of the history editing commands is displayed. Any other control characters typed to ASH are considered an error. You'll be beeped and the character will be ignored. In addition TAB characters (^I) typed as part of an ASH command line are automatically changed to spaces. - 3 - ASH V0.70 BUILT-IN COMMANDS: The following commands are ASH built-in commands. They are very similar to equivalent UN*X commands where that comparison applies. This version of ASH has I/O redirection built into the built-in commands. See the I/O REDIRECTION section for details. Invoking any of the built-in commands with a '-?' argument will result in a usage message for that command. These usage messages are more informative than the simple HELP summary but not as detailed as this document. All built-in commands are lower case. They will not be recognized if typed as upper case. This is a trap door to let you execute external commands that might have the same name as a built-in command. date [mm/dd/yy] [hh:mm:ss] This command will display the current date and time. If a new date or time specification or both are included as parameters, the new values are used to set the date and/or time. Both the GEMDOS clock and the intelligent keyboard clock are set by this command. The GEMDOS clock is used to display the date and time. set [var=value ...] This command lists all the defined set variables when invoked with no parameters. If it's invoked with one or more 'var=value' parameters, they're added to the list of defined set variables. unset var [var ...] The unset command deletes variables from the list of defined set variables. echo [-n] [arg ...] This command echos its arguments back to the screen. The default is to terminate the display of arguments with a carriage return and a line feed. The '-n' flag will cause the arguments to be echoed without a CR/LF. Echo recognizes the sequence of a backslash (\) followed by three octal digits in its arguments and will replace that sequence with the corresponding ASCII character. For example, the ASCII BELL character is \007 and the ASCII TAB character is \011. The escape sequence to home the cursor and clear the screen is ESC-H-ESC-J. To generate this sequence with echo you would use: echo "\033H\033J" This same method of generating ASCII characters is used for the pattern argument of the find command, the OPRINIT set variable and the F1-F10 function key set variables. pause The pause command is mainly for use inside ASH scripts. It will cause - 4 - ASH V0.70 ASH to suspend execution until a carriage return is typed. If you respond with a ^C instead of a CR all currently running scripts will be aborted and you'll be left at the interactive level of ASH. This is a handy trap door to abort scripts that have had problems. find [-n] pat file [file ...] The find command takes a pattern as its first argument. Upper and lower case letters in the pattern are unique. A pattern can contain no special characters to signify regular expressions, but it can contain backslash ASCII character sequences like those explained in the description of the echo command. Find searches for lines in the files given as arguments that contain the pattern. The lines that match are printed to the screen with the file name prepended to them. If the '-n' flag is used the line numbers of any matching lines are inserted between the file name and the line. rez {-l | -m} The rez command changes the screen resolution to medium or low. Since you can't change to high resolution from medium or low there's no option for changing to high and if you're in high resolution you won't be allowed to change to low or medium. There is a possibly confusing side effect of this command. When you change resolution the color pot that's used to paint the foreground color changes too. In low resolution pot 15 is the foreground. In medium it's pot 3. If you aren't satisfied with the foreground color after changing resolutions use the color command (see below) to change it. One last caveat. There are some programs that check the system resolution and work fine after ASH has changed resolution. There are others that don't detect the fact that the resolution has changed and continue to complain about the system being in medium even when it's obvious that the screen is in low. Any hints as to how I can make ASH convince everyone the resolution has changed are welcome. color {-f | -b} [RGB] The color command is used to report or change the foreground and background colors of the screen. The '-f' and '-b' screen section flags stand for foreground and background respectively. When invoked with only a screen section flag this command reports the current color mix for that section. You can select a new color mix for the foreground and background color pots by including a 'RGB' parameter in the color command. The 'RGB' parameter must be a 3 digit number with each digit ranging from 0 to 7. The first digit is the intensity level of RED used to compose the new color. The second digit is the GREEN intensity level and the third is the BLUE. This gives you access to 512 possible colors. A value of 000 will generate BLACK, 777 will generate WHITE, 070 will be intense GREEN and so on. It can be interesting mixing - 5 - ASH V0.70 your foreground and background colors but be careful not to make them identical or you'll be flying blind. ls [-s] [-l] [-h] [d:][file] The ls command lists directory information about the files specified or about all files on the current drive and directory if no files or any other type of file specification is given. You can use drive specifications or directories as arguments to ls and the entire contents of that drive or directory will be listed. The '-s' flag causes the sizes of the files to be listed in addition to the file names. The '-l' flag causes a long listing with the names, sizes, times and dates of the last modification, etc. included in the output. The '-h' flag causes hidden files to show up in the listing. The order of the files is exactly their order in the directory. At this time there is no option to sort the files listed by name, extension, size or time stamp. df [-t] [d: ...] The df command will display the free space remaining on the drives specified. If no drives are specified then the free space on the current drive is given. The '-t' flag will cause the total amount of space on a drive to be listed as well. cat [-n] file [file ...] The cat command will cause the files specified to be sent to the screen in a paginated form. You will be prompted to hit a key after every screen full of output. When using output redirection, or if cat is invoked from a script, pagination is turned off. The '-n' flag will cause line numbers to be included in the display. opr [-n] [-oN] file [file ...] The opr command will print the specified files on the printer. The '-n' flag will cause line numbers to be included in the output. The '-oN' flag will cause the left margin to be offset or padded by 'N' spaces. The set variable OPRINIT can be used to initialize the printer for a given invocation of opr. See the section on SET VARIABLES below for details. cp file1 file2 The cp command will copy 'file1' to 'file2' if there are only two arguments and both are files. cp file1 ... filen dir This invocation of the cp command will copy the first through the next to last arguments, which must be files, to the last argument, which must be a directory or drive specification. New files created with cp have a time stamp corresponding to the time they were copied. WARNING: Unlike the desktop copy routine (dragging to another window), the cp command does not care if there are conflicting file names. It - 6 - ASH V0.70 will copy over a file with the same name in the target directory or drive without any warning. mv file1 file2 The mv command will move or rename 'file1' to 'file2' if there are only two arguments and both are files. mv file1 ... filen dir This invocation of the mv command will move the first through the next to last arguments, which must be files, to the last argument, which must be a directory or drive specification. Files moved with mv retain their original time stamp even when physically created on a new drive. WARNING: Unlike the desktop rename routine (SHOW INFO), the mv command does not care if there are conflicting file names. It will move over a file with the same name in the target directory or drive without any warning. rm [-i] file [file ...] The rm command removes or erases the files specified. If you're the cautious type the '-i' flag will cause rm to work interactively. In this mode rm will prompt you with each file name and wait for you to respond with a 'y' or 'n' before removing the file. If you respond with a 'q' the rm is aborted but the files already removed are gone. WARNING: Unlike the desktop remove routine (dragging to the TRASH), the rm command does not prompt you to verify if you got the file name right. It will remove your files with no remorse if asked to do so. If you want to verify the expansion of a wildcard argument before using it with rm, try it with echo first and make sure you aren't specifying some files you want to keep. attr {-w | -r} file [file...] The attr command allows you to set the read and write or read only attributes of a file. Most files default to read and write. For example, if you execute an ls command with the '-l' flag on a file with read and write permission you'll see the attributes as 'R/W'. A file with read only permission will have 'R/O' in the attributes column. A file with read and write attributes can be removed or modified. A read only file is protected. It can be copied or printed but it can't be removed or modified. cd dir The cd command is used to change the current working directory. You can change to directories on the same drive or you can change to directories that cross drive boundaries. Don't confuse the latter with changing the current drive. To change drives you simply type the drive specification of the drive you want to change to. For example to change to drive A you would type: - 7 - ASH V0.70 a: If you had previously been in the AUTO folder on A you would then be back in A:\AUTO. If you executed the command: cd a: you would be placed in the base directory of the A drive. In general, to get to A:\AUTO you should explicitly execute: cd a:\auto Remember that directory paths on the ST use backslashes (\) instead of slashes (/). pwd The pwd command will display the current working directory. This can be redundant if the default of having the current directory included in your prompt is on. (See the ^P command above.) mkdir dir [dir ...] The mkdir command is used to create new directories. Directory names have the same restrictions as file names. rmdir dir [dir ...] The rmdir command is used to remove EMPTY directories. Notice the EMPTY. You must remove the contents of a directory before you can remove the directory itself. COMMAND HISTORY: ASH uses a command history buffer that holds up to the last 23 command lines typed from the keyboard. The command lines in this buffer can be listed (^L), repeated (^R) and edited (ESC) with a set of simple line editing commands. The command lines in the history buffer are numbered from 1 to 23 with the most recent command line being number 1 and the oldest being number 23. Each new command line causes the lines already in the buffer to age by one. Once a command line has aged past 23 it's gone for good. HISTORY EDIT COMMANDS: When you've put ASH in the history edit mode with the escape (ESC) key, there are a number of single key commands available with which you can call back previous commands and modify them. You have to be in history edit mode for these commands to work. I've abbreviated the up, down, left and right arrow keys as UA, DA, LA and RA respectively. - 8 - ASH V0.70 UA/-/k These three keys let you browse backwards through the commands in the history buffer. When you get to the end you'll be beeped. DA/+/j These three keys let you browse forwards through the commands in the history buffer. When you get to the beginning you'll be beeped. LA/BS/h Any of these three keys cause the cursor to move backwards or left one character on the current command line. You can't move past the first character of the command line. RA/SP/l Any of these three keys cause the cursor to move forwards or right one character on the current command line. You can't move past the last character of the command line. 0 This key (zero) causes the cursor to move to the first character of the currently displayed command line. ^ This key causes the cursor to move to the first visible character of the currently displayed command line. If there are spaces at the beginning of the command line this will skip over them. $ This key causes the cursor to move to the last character of the currently displayed command line. In the next three commands the distinction is made between a word and a WORD. For this discussion a word is delimited by any non-alphanumeric characters like punctuation marks, spaces or other special symbols. A WORD is delimited by only white space. w/W These two keys cause the cursor to move right or forward to the beginning of a word or a WORD respectively. e/E These two keys cause the cursor to move right or forward to the end of a word or a WORD respectively. b/B These two keys cause the cursor to move left or back to the beginning of a word or a WORD respectively. ~ This key will change the case (if alphabetic) of the current character from upper to lower case or from lower to upper case. The cursor moves forward past the character changed. Non- alphabetic characters are simply skipped over. r This key will cause the current character to be replaced with another single character. The next character typed will be used as the replacement. x This key will cause the current character to be crossed out or deleted. - 9 - ASH V0.70 d This key will cause the current character to be deleted. It's functionally the same as the 'x' command. D This key will cause the rest of the command line including the current character to be deleted. The next seven keys cause the history editor to go into insert mode where you can add multiple characters to the command line. To stop adding characters you must hit the ESC key. You will then be back in history edit command mode. s This key lets you substitute multiple characters for the current character. c This key lets you change the current character for multiple new characters. It's functionally the same as the 's' command. C This key will cause the rest of the command line including the current character to be changed for multiple new characters. i This key lets you start inserting characters before the current character on the command line. The INSERT key, in the group with the arrow keys, works just like 'i'. I This key lets you start inserting characters before the first character in the command line. a This key lets you start appending characters after the current character in the command line. A This key lets you start appending characters after the last character in the command line. CR/LF These keys cause the history editor to be exited and the currently displayed command line to be executed. ^C/^U/^X These keys cause the history editor to be aborted without executing the currently displayed command line. HELP This key will cause a brief summary of all the history editing commands to be displayed. There has to be a caveat to history editing. The history editing commands will work on lines that wrap around the screen but the display is not adjusted in any way. In other words, editing command lines that are longer than one physical line can be interesting. - 10 - ASH V0.70 I/O REDIRECTION: This version of ASH has I/O redirection built into the built-in commands. The standard 'file' and '>>file' arguments will cause standard input to be redirected from file, standard output to be redirected to overwrite or create file and standard output to be redirected to append to or create file respectively. There can be NO SPACE between the redirection characters and the redirection file name. The redirection arguments to built-in commands can appear anywhere in the list of command arguments. The redirection of standard input is of dubious value since none of the built-in commands currently use standard input. NOTE: standard error is not redirectable at this time. Redirection for external commands that get executed by ASH depends entirely on how those commands were created. If they were created with most of the standard C development packages they should support similar redirection arguments. Megamax, Lattice, Mark Williams and the Developers Kit all support I/O redirection for programs that are built with them. Some require that the main() function be declared with argc and argv as arguments and some require the redirection arguments to be the first arguments on the command line. You'll have to refer to the documentation that comes with the programs you use or try them to see how they work. COMMAND LINES: Command lines can be up to 255 characters long. Built-in commands can use the entire 255 characters. External commands that are invoked by the Pexec() GEMDOS call are limited to a command tail of 127 characters. The command name itself isn't included in this 127 characters so the effective length of an external command is over 127 characters but not too much. If the command tail limit is exceeded ASH will print an error message and ignore the command. You can enter multiple ASH commands on one command line by separating them with semi-colons (;). Everything on a command line after a pound sign (#) is treated as a comment. Command separators and comment characters can be quoted with apostrophes (') or double quotes (") if they're needed as part of a command's arguments. If you want a double quote or apostrophe to be included in an argument you must quote it with the other quoting character. For example, this echo command will generate an error: echo this won't work The apostrophe is parsed as a mismatched quote. The following command works because the apostrophe is quoted: echo "this won't work (yes it will)" The same quoting mechanism is applicable to the wildcard characters * and ?. ASH expands all arguments containing wildcards before passing them on - 11 - ASH V0.70 to external programs. If you want an external program to do the expansion then you must quote ambiguous file specifications like '*.NEO' or 'BUFF?.TMP'. SET VARIABLES: The number of set variables is limited to 32 and the size of a single 'variable=value' string is limited to 255 characters. Set variables can be used in command lines by putting a dollar sign in front of them. Some set variables have special meanings to ASH. The ECHO set variable is used to turn command echoing on in scripts. If ECHO is set to 'ON' or 'on' commands will be echoed before they're executed. If ECHO isn't set, or is set to any other value, scripts run silently. Scripts are silent by default. The set variable OPRINIT can be defined with a printer initialization sequence that will be sent to the printer before any other output when the opr command is executed. The expansion of backslash ASCII character sequences, like those explained in the description of the echo command, is done on the OPRINIT value before sending it to the printer. This allows escape sequences and other control characters to be used. For example, I have an Epson FX80 and I frequently set OPRINIT like this: set OPRINIT=\033M This backslash sequence is converted to ESC-M and sets the printer to elite or 12 character per inch mode. The set variables F1, F2, ... F9 and F10 can be used to program the corresponding function keys. For example, if the F2 set variable were set to 'ls -l' then that string would be added to the command line when you hit function key F2. Since there's no CR or LF in that string you would have to hit a CR after hitting F2 in order to execute the 'ls -l'. To terminate a function key set variable with a CR or LF use the backslash sequence for it. For example, if F2 were set to 'ls -l\012' then hitting function key F2 would execute the 'ls -l'. The backslash sequence for CR is \015 and the backslash sequence for LF is \012. The PATH set variable is used to decide where ASH looks for commands that aren't built-in, for the ASH initialization file and for the ASH help file. The same syntax is used as in the MS-D*S PATH, where semi-colons (;) separate the various drives and directories in a PATH. When setting PATH semi-colons must be quoted so they're not interpreted as command separators. - 12 - ASH V0.70 ASH INITIALIZATION: When ASH is first invoked interactively PATH is set to the base of all the installed drives on the system. This setting is then used to look for the ASH initialization file. The ASH initialization file is named 'ash.ini' and must be in the current directory or on one of the drives in the initial PATH. Since GEMDOS considers both the A and B floppies to be installed, even if there's only one floppy drive physically attached to the computer, it's a good idea to have your 'ash.ini' file on the floppy from which you invoke ASH. If you invoke ASH from a folder on a hard disk you should have your 'ash.ini' file in that folder. The ASH initialization file can contain any valid ASH commands. It's handy for redefining the PATH value or adding to the initial PATH. For example, you can avoid having to keep a floppy in your floppy drive by defining the floppy drives out of PATH. The following 'ash.ini' file will modify PATH, display it, define some function keys and turn on echoing in scripts: set PATH="c:\bin;$PATH" echo "PATH=$PATH" set F1='ls -l\012' # F1 executes a 'ls -l' set F2='df -t\012' # F2 executes a 'df -t' set F3='set ECHO=off\012' # F3 turns off echoing set F4='set ECHO=on\012' # F4 turns on echoing set ECHO=on Notice the quotes used with PATH to override the interpretation of semi- colons as command separators. COMMAND SELECTION: ASH initially checks each command it parses to see if it's built-in. If it's built-in ASH executes it. If a command isn't built-in ASH checks for a file suffix. If there's no suffix it will try each of the four standard command suffixes (.prg, .ttp, .tos and .ash) in that order. It first checks for a command in the current directory. If it's not found in the current directory it then looks in the directories specified with the PATH set variable as explained above. As an example, say the command 'FORMAT' was parsed by ASH. It would first check to see if there was a built-in command 'FORMAT'. Since there isn't it would then search for the command 'FORMAT.PRG' in the current directory. If that failed it would look for a command 'FORMAT.TTP' in the current directory. If that failed it would look for 'FORMAT.TOS' and 'FORMAT.ASH' in that order in the current directory. If all these failed it would then look for the same commands in the same order in the first directory specified in PATH. If all the directories in PATH were exhausted and a command that fit this name had still not been found ASH would give up and state that the command wasn't found. - 13 - ASH V0.70 ASH SCRIPTS: Commands with the .ash suffix are ASH scripts. They're invoked by executing ASH on the script recursively. Scripts can also be used with ASH by invoking it with the name of a script as the first argument. Up to 9 arguments can be included on a script command line. They're parsed inside the script the way positional arguments are parsed in UN*X; $0 through $9. Since that's 10 arguments I should explain that $0 is set to the name of the script that's executing. Scripts that call other scripts cause ASH to recurse and use up memory in the process stack. I've tested V0.70 to 9 levels deep with no problems. After that the results are undetermined but probably not what you want. Because of the recursive nature of scripts, the set variables from the calling invocation of ASH are available to scripts. Scripts can make changes to the set variables or change the current drive and directory but those changes are only in effect during the life of the script. If you want a script to make lasting changes you must invoke it with the dot command. For example to run the script 'clean.ash' you have two options. If you want the current set variables and the current drive and directory to be unchanged when it exits invoke it like this: clean If you want any changes to the set variables or the current drive and directory to stick around after 'clean.ash' exits, invoke it like this: . clean LIMITATIONS: Some of the limits in ASH are listed below. If your normal use of ASH exceeds them please let me know. The program can allocate more memory for some of these values while others are fixed by the underlying Atari ST operating system. 23 - commands in the history buffer 127 - characters per external (Pexec) command tail 255 - characters per built-in command 255 - characters per command line 64 - arguments per command line including the command name 127 - characters per argument 32 - possible set variables 255 - characters per set variable - 14 - ASH V0.70 MISCELLANEOUS: Any time you're confronted with the '[more...]' prompt at the bottom of the screen you can type a 'q' to avoid seeing whatever there's more of. In some instances after switching floppy disks you may have to execute a df or ls on the drive to make the system recognize the change. You should also be careful about changing floppies when the current working directory on the floppy being removed isn't the base directory. The mouse cursor is normally hidden while ASH is running. If you jiggle the mouse a block of background color and a busy bee will show up but they will scroll off the screen with normal use. The mouse is kept alive for any GEM programs that need it and don't turn it on themselves. The ASH help file is called 'ash.hlp'. When help is requested ASH first looks for the help file in the current directory and then in each of the directories in PATH. If you want to save disk space ASH will run without the help file. V0.70 NOTES: Version 0.70 of ASH was compiled with the Megamax C Language Development System. It now has dynamic memory allocation and several other improvements that weren't in V0.52. Some of the more noticeable changes are: - I/O redirection is supported for built-in commands. - The . and .. files are ignored in rm commands whether they're explicitly specified on the command line or generated through wildcard expansion. They can't be removed so there isn't much point in trying. They're also ignored at appropriate times in cp and mv commands. - The intelligent keyboard clock is now set by the date command. - The mv command doesn't change a file's time stamp. - The arrow keys and the INSERT key are now active for history editing. - The 'ash.ini' initialization file handling has improved since any valid ASH commands are now allowed. - Script speed and memory usage has improved since ASH recurses now. - Scripts inherit the calling ASH's set variables and can modify them if called with the dot command. - The cp command works much faster now. It's comparable to desktop drags. - 15 - ASH V0.70 - The ls command now has a -h option for hidden/system files. - The opr command now has a -oN option to offset the left margin. - The opr command now has a way to initialize the printer with the OPRINIT set variable. - The mkdir and rmdir commands now take multiple directory arguments. - If you ever wondered what to do with those slanty function keys ASH now gives you the ability to program them using set variables. See the SET VARIABLES section above. - There is a new attr command which allows you to change the read and write attributes of a file to read only and back again. This implements file protection as requested by several people. - There is a new unset command which allows you delete variables from the defined list of set variables. - You now have the ability to repeat (^R) a range of command lines from the command history buffer. I plan to add several more features to ASH in the future. Aliasing of command names and some type of flow control commands like IF/FOR/WHILE are on my list. I'm willing to consider suggestions for other improvements. Please mail your suggestions to the address in the beginning of this document. Thanks. - 16 -  .