



		   [43m  ZSHELL V1.30a (C) 1990,91 PAUL HAYTER [0m


[3m    Ed: This is the shell for the floppy bootdisk user, who wants to
[3m  squeeze yet more onto his boot disk. Paul is a master of squeezing the
[3m  most out of every byte of a program. See full docs on it below, along
[3m  with sample startup script files at the bottom.


[32m    ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ##


[42mOVERVIEW
[42m========

      ZShell is a small CLI shell. I needed a shell which had my
      favourite features of CSH yet was a lot smaller, so it would load
      faster and use much less memory.


[42mFEATURES
[42m========

      *  about 13K.
      *  Supports the standard housekeeping commands
	      dir , cd , rename , mkdir , delete , copy , path , info ,
	      type.
      *  Function key aliasing.
      *  Command aliasing.
      *  Reverse Polish Calculator.
      *  Script file execution.
      *  1024 byte command line history.
      *  Command line editing.
      *  Can examine the KickTagPtr,CoolCapture etc.
      *  Has a cold reset command.
      *  Wild Card file descriptions.
      *  Special programmers status mode.
      *  Simple 'More' type text viewer.
      *  Has a resident command.
      *  IF ... ELSE ... ENDIF constructs.

[42mSPECIAL CHARACTERS
[42m==================

      The following characters have special meanings to ZShell.

       "  "   Double quotes. Used to enclose strings with spaces.
	      eg "hello world".
       ^n     Hat character. Prefixes a control character letter (n).
	      Used in ASK, ECHO, & SET commands. eg ^L   <-clear screen
       %n     Percent prefixes a number (0-7) to specify an optional
	      parameter for command aliases. Used in SET command.
	      Can also be used to specify prompt arguments. See PROMPT
	      command.
       $n     Dollar prefixes a number (0-7) and corresponds to an
	      optional parameter specified with %n (above).
       *?~[]  Wildcard characters. * matches 0 to n characters. ? matches
	      one character, ~ negates the following wild card, and [ ]
	      surround a class of characters to match. See WILD CARDS.
       \n     Backslash prefixes a special character, whose meaning you
	      want ignored. eg echo "hello \"fred\""  (hello "fred")
       ;      Semi-colon seperates multiple commands on one line.
	      eg. cd df1:;dir
       >      redirect output.
       <      redirect input.
       >>     redirect append output.


[42mZSHELL INBUILT COMMANDS
[42m=======================

      Most commands can be aborted by depressing Control-C.

      A textual error message will be displayed if an AmigaDOS error
      occurs.
[32m  ------------------------------------------------------------------------
  ADDBUFFERS drive number_of_buffers

      * ADDBUFFERS increases disk access speed on the specified drive by
	adding a number of sector cache buffers. Each additional buffer
	reduces memory by about 500 bytes. Generally, 25-30 buffers is
	optimal.

      eg.     addbuffers df0: 25
	      addbuffers df1: 10
[32m  ------------------------------------------------------------------------
  ASK [question]

      * ASK prompts the user with a question requiring a Yes or No
	answer. If the first letter of the users response is 'Y', ASK
	returns code WARN. Any other letter will result in return code OK.
	The question can include ASCII characters as well as control
	codes as per the ECHO command.

      eg.     ask "Do you want commands copied to ram? "
	      if warn
		      copy c: ram:
	      endif
[32m  ------------------------------------------------------------------------
  ASSIGN [logical name:] [directory]

      * ASSIGN will assign a logical device name to a disk directory.

      eg.     assign z: df1:zshell_source

      Now if you do a DIR Z: you will get a directory of df1:zshell_source.
      Similarly, the default device names can be reassigned.

      eg.     assign libs: df1:libs

      * Typing ASSIGN with no parameters, will list the current device
	assignments.
      eg.     assign

      * NOTE: the logical name you give to the command MUST end in a
	      colon (:)
	      Assign is compatible with the amigados assign command.
[32m  ------------------------------------------------------------------------
  CD [destination]

      * Changes the current directory to 'destination'. If no parameter
	is given, the current directory's name is shown.

      eg.   cd ram:
[32m  ------------------------------------------------------------------------
  COPY [-r] source1 [sourcefile2] [sourcefile3]... destination

      * There are 6 derivatives of the copy command.

       1. copy file to file.

	      eg.     COPY C:LIST RAM:LS

       2. copy file to a directory.

	      eg.     COPY C:MOUNT DF1:C

       3. copy multiple files to a directory.

	      eg.     COPY L:PORT-HANDLER L:DISK-VALIDATOR DF1:L

       5. copy files in a directory to another directory.

	      eg.     COPY C: DF2:C

       4. copy multiple directories to a single directory.

	      eg.     COPY L: DEVS: C: RAM:

       6. Recursively copy all files and subdirectories within the source
	  directory to the destination directory.

	      eg.     COPY -R DF0: DF1:

      Other examples:

      eg.     copy fred wilma
      eg.     copy c:dir df1:c
      eg.     copy dir list type cd df1:c
      eg.     copy df0:devs df1:devs
      eg.     copy *.s ram:
	      copy df0: df1:          {only copy the files in df0: to df1:}
[32m  ------------------------------------------------------------------------
  DELETE [-r] source1 [source2] [source3] [source4]... [source11]

      * Deletes up to 11 files or directorys ('source1'...'source11').
      * If you specify the -r option when deleting a directory, then all
	subdirectories are recursively deleted also. Otherwise (if the -r
	option is not given) only the files in the specified directory are
	deleted.

      eg.     delete fred wilma barney betty dino
	      delete df0:devs df1:c df1:data ram:
	      delete menu
	      delete -r devs:
	      delete -r df1:
[32m  ------------------------------------------------------------------------
  DIR [source]

      * Lists the directory of the 'source' to the screen. Hitting space
	will pause the listing and backspace will continue it. Files are
	shown with their size in bytes. DIR lists the current directory
	if no parameter is given. If 'source' is a filename, then only
	that file is listed.

      eg.   dir df0:
[32m  ------------------------------------------------------------------------
  DIW [source]

      * This is identical to the above DIR command ,except that the
	directory is printed in two vertical columns. DIW is a pseudonym
	for Directory Wide.

      eg.   diw devs:
[32m  ------------------------------------------------------------------------
  ECHO [string]

      * Prints the 'string' to the screen. If you want spaces in the
	string, make sure the whole string is enclosed in quotes. If you
	want to print special control characters (eg. ctrl-L clear screen)
	then prefix the control letter with a ^ character. If you want to
	print double quotes, then use the \ character before the qoutes.

      eg.     echo hello
	      echo "hello world"
	      echo "^Lthe screen was just cleared"
	      echo "^Lline 1^Jline 2^Jline 3"
	      echo "these are double quotes ->\""

      * Some common control codes are:

	      ^J      linefeed.
	      ^L      clear screen.
	      ^M      carriage return.
	      ^X      clear line.
	      ^[      escape.

[32m  ------------------------------------------------------------------------
  ELSE

      * ELSE marks the middle of an IF statement. All statements
	following it, and before the ENDIF statement will be executed
	only if the IF condition is FALSE. See IF for usage.

[32m  ------------------------------------------------------------------------
  ENDIF

      * ENDIF marks the end of an IF statement. See IF for usage.

[32m  ------------------------------------------------------------------------
  EXEC source

      * Executes the ZShell script file of name 'source'. All ZShell
	commands, as well as commands from disk are valid within a
	script file.

      eg.   exec install_hard_disk
[32m  ------------------------------------------------------------------------
  EXIT

      * Exits you from the shell back to the AmigaDOS CLI prompt.

      eg.   exit
[32m  ------------------------------------------------------------------------
  FAILAT [failat level]

      * FAILAT sets the error code level at which scripts (and multiple
	commands on one line) will be aborted. The default level is 10.
	Most commands return 10 as a serious error, while compilers
	returning Warning type errors will return 5. Hence, the default
	of 10 will allow Warnings to occur without the script (or line)
	being aborted.

      eg.     failat 20       {sets failat level to 20}

      * If you do not specify a failat level, the current setting is
	shown.

      eg.     failat
[32m  ------------------------------------------------------------------------
  GOTO label

      * GOTO searches for the label within the current script file. If it
	finds it, execution continues from that point onwards. Labels
	are specified using the LABEL command.

      eg.     label myloop
	      diw ram:
	      ask "list ram again? "
	      if warn
		      goto myloop
	      endif
[32m  ------------------------------------------------------------------------
  HELP

      * Lists to the screen the names of all available ZShell commands.
	HELP can also be invoked by hitting the HELP key.

      eg.   help
[32m  ------------------------------------------------------------------------
  HTYPE source

      * HTYPE outputs a hex listing of the file specified. Output is the
	same as the M command. <SPACE> pauses the listing, <BACKSPACE>
	gets it going again, and <CTRL C> will abort the listing.

      eg.     htype c:list
[32m  ------------------------------------------------------------------------
  IF [NOT][WARN][ERROR][FAIL][EXISTS file]

      * The IF command allows conditional execution of statements
	following it.
      * If the condition specified is true, then execution continues
	after the IF statement until either an ENDIF or ELSE statement
	is encountered. If it is an ELSE statement, then all statements
	between the ELSE and the closing ENDIF are skipped.
      * If the condition is false, then all statements after the IF and
	before either an ENDIF or ELSE statement are skipped. If an ELSE
	is encountered, then execution continues for all statements after
	the ELSE and before the closing ENDIF.
      * IF can examine the state of the return code from the last command
	execute with WARN, ERROR, and FAIL tests. You can test for the
	non existence of such a state by including the optional NOT
	parameter.

      eg.     IF WARN
		      echo "last command returned warnings"
	      ELSE
		      echo "last command did not return warnings"
	      ENDIF

	      IF not fail
		      echo "last command did not fail"
	      ENDIF

      * IF can also test for the existence of a file or directory.

      eg.     IF EXISTS system/format
		      echo "this disk has a format command"
		      echo "you can look yourself. I'm not joking"
	      ENDIF

	      IF not exists ram:ed
		      copy c:ed ram:
	      ENDIF

[32m  ------------------------------------------------------------------------
  INFO [disk]

      * Shows the number of bytes free on the disk specified ,or the
	current disk if you don't specify one.

      eg.   info df0:
[32m  ------------------------------------------------------------------------
  JOIN [sourcefile1] [sourcefile2] ... [sourcefile11] destfile

      * JOIN concatenates up to 11 files to form a new file (destfile).

      eg.     join fred.doc roy.doc dog.doc mydocs.doc
[32m  ------------------------------------------------------------------------
  LABEL label

      * LABEL specifies a destination for the GOTO command. See GOTO.
[32m  ------------------------------------------------------------------------
  M [start_address] [end_address]

      * M is a memory contents dumping command.

      * Typing M with a start and end address will display the hex and
	ASCII contents of those bytes in the memory locations specified.
      * Typing M with only a start address will display 320 bytes
	starting at the location specified.
      * Typing M with no parameters will display 320 bytes starting
	from the current memory location.
      * The current memory location is always one location higher than
	the last location shown by a prior M command.

      eg.   m $70000 $77fff
	    m $fc0000
	    m 0
	    m
[32m  ------------------------------------------------------------------------
  MEM

      * Shows the available memory as ,1.Total chip memory free,
				       2.Total fast memory free,
				  and  3.Total memory free.
      eg.     mem
[32m  ------------------------------------------------------------------------
  MKDIR [directory1] [directory2] ... [directory11]

      * Creates one or more directorys of the names specified.

      eg.     mkdir shells
	      mkdir c l s libs devs fonts
	      mkdir devs/printers ram:c
[32m  ------------------------------------------------------------------------
  MORE source [line count]

      * MORE acts as a simple text file viewer. By default, it will show
	23 lines of a text file, then wait for some user input.
	Commands within MORE are:-
	      <SPACE>         - advance you 20 lines forward.
	      <BACKSPACE>     - display text from 20 lines back.
	      <RETURN>        - advance 1 line.
	      <B>             - goto end(Bottom) of text file.
	      <T>             - goto top of text file.

	Typing anything else will abort you back to the shell.

      eg.     more readme

      * Specifying the optional line count will allow you to show more
	than the default 23 lines. {Very useful for large borderless PAL
	screens}

      eg.     more contents 30
	      more readme 25
[32m  ------------------------------------------------------------------------
  PATH [-a] [path1] [path2] [path3] [path4] ... [path11]

      * PATH defines the search path used by ZShell when searching
	for disk based commands.
      * By omitting the -a option, you can specify ZShell's entire command
	search path. It will be defined as resident_commands,
	current_directory, then path1, then path2, then path3, then path4,
	upto path 11

      eg.     path c: ram:c df0: df1:

	This example will make it so that if you type a command which is
	not internal to Zshell, the resident list will be searched for it,
	then the current directory, then the c: directory, then the ram:c
	directory, then df0:, and finally df1:

      eg.     path ram: df0: df0:c df1: df1:c c:

	Zshell will try to find the command you type in the resident list,
	then current directory, then ram:, then df0:, then df0:c, then
	df1:, then df1:c, then c:

      * By including the -a option, you can add a number of paths onto the
	existing command search path.

      eg.     path -a df2:c

	Adds the directory df2:c onto the existing command search path.

      eg.     path -a df1:bin df1:myprogs

	Adds the two directories df1:bin and df1:myprogs onto the existing
	command search path.

      * If, however, you type path with no parameters, the current search
	path (excluding resident list and current) will be displayed.

[32m  ------------------------------------------------------------------------
  PROMPT [string]

      * If no parameter is typed ,then the current prompt setting is
	shown.

      eg.     prompt

      * If a prompt string is specified, then the current prompt setting
	is changed to that string. The character '%' specifies a special
	prompt option.

	      %p      Insert current directory name.
	      %n      Insert CLI number.

      eg.   prompt "%p> "     {default prompt. Show current directory + '>'}
	    prompt "Hello ."  {shows 'Hello .' at the start of every line}
	    prompt "%n.%p> "  {show CLI number, then current dir, then '>'}
[32m  ------------------------------------------------------------------------
  RELABEL drive newname

      * RELABEL renames the disk specified with the newname given.

      eg.     relabel Empty: MY_DISK
	      relabel df0: FISHMONGER
[32m  ------------------------------------------------------------------------
  RENAME source destination

      * Renames the file or directory of name 'source' to that of
	'destination'. You can use this to move files on a disk.

      eg.     rename df0:c/list df0:ls        (moves and renames)
	      rename avail mem
[32m  ------------------------------------------------------------------------
  RESET

      * Performs a COLD reset of your Amiga. i.e. RAD will go, and you
	will get back fast memory that may have been disabled. And viruses
	should disappear.

      eg.     reset
[32m  ------------------------------------------------------------------------
  RESIDENT [command1] [command2] ... [command11]

      * RESIDENT allows you load commands into memory, such that they
	will execute immediately, rather than be loaded from disk all the
	time. The benefit of RESIDENT over saving commands on the RAM:
	disk is that only one copy of the command is in memory all the
	time. RAM: based commands will use up twice as much memory when
	the command is being executed.

      * The limitation of RESIDENT is that only certain commands will
	work. Generally, all commands which have their PURE bit (see
	SETPROT command) set can be made RESIDENTABLE. However, RESIDENT
	does not check whether the PURE bit is set before loading, and
	hence you can try out commands to see if they work. They'll
	always work the first time. Its only when executing the 2nd
	time that the Amiga will likely crash.
      NB: Crunched programs will most likely not work.

      * Typing RESIDENT with no parameters will show the current list
	of resident commands.

      * Typing up to 11 command names after RESIDENT will make those
	commands resident. ZShell will search the command search path
	to try and find them.

      eg.     resident c/list c/cd c/date c/avail
	      resident ed

[32m  ------------------------------------------------------------------------
  RETURN [error_code]

      * RETURN forces a script file to end, and return to the shell.
	An optional error code can be passed back (ie. 5=WARN 10=ERROR
	etc).

      eg.     return 5
	      return
[32m  ------------------------------------------------------------------------
  RPN expression

      * RPN evaluates the 'expression' as a reverse polish expression,
	and displays the answer in decimal and hex notation. Reverse
	Polish Notation is used in Forth and in Hewlett Packard
	calculators(the best calculators in the world). It is based on
	how arithmetic is actually done at the lowest possible level.

      eg.     rpn 4 5 +

	This gives the answer 9. When a number is typed, it is 'pushed'
	onto the arithmetic stack. The + always adds the last two numbers
	on the stack.

      eg.     rpn 7 2 3 + -

	This gives the answer 2. It is the same as {7 - (2 + 3)}. See,
	7 is first pushed onto the stack, followed by 2, then 3. The +
	adds together the 2 and 3 and leaves the result 5 on the stack.
	Which means that the number 7 followed by 5 are left on the
	stack. The - subtracts the last entry (5) on the stack from the
	one before it (7), leaving the result 2

      eg.
	      12 * (3 + 9)      	      > rpn 12 3 9 + *
	      (15 - 4) * (6 + 18)             > rpn 15 4 - 6 18 + *
	      (6 * ((87 + 13) / (2 * 25)))    > rpn 6 87 13 + 2 25 * / *

      * RPN only performs 32 bit integer arithmetic.

      * The operators + - * / & | @ ! are supported.
	The & allows logical AND'ing. And | allows logical OR'ing.
	The @ is similar to PEEK in BASIC.

      eg.     rpn $c00000 @

	This prints out the long word in memory locations $c00000 -
	$c00003.

	Conversely, ! is similar to POKE in BASIC

      eg.     rpn $aa55aa55aa $40000 !

	This pokes the long word $aa55aa55aa into locations $40000
	thru $40003.

      * RPN also supports hexadecimal and binary  numbers.
	If you prefix the number with $, the number is hex
	If you prefix the number with %, it is binary.

      eg.     rpn $c00000 $a0 16 * +
	      rpn $aa $f0 &
	      rpn $80 $20 $08 $01 | | |
	      rpn $67 %11001011 &

      * RPN can also be used to perform base conversions (to dec or hex)

      eg.     rpn $ca
	      rpn %10110001
	      rpn 45
[32m  ------------------------------------------------------------------------
  SET [variable] [definition]

      * SET assigns a variable name to a definition. The variable name
	can be up to 15 characters long, and the definition can be up to
	about 240 characters long.

[42mFunction Keys
[42m-------------
      eg.   set f1 "ed df0:s/startup-sequence^M"

	This example assigns the unshifted F1 key to the text enclosed in
	quotes. Note that the ^M characters puts an auto carriage return
	in the definition.

      eg.   set F10 "cd df0:^M"

	This sets shifted F10 to 'cd df0:<CR>'.

       Other egs      set f2 "cd df1:^M"
		      set f4 "genim2 "
		      set F9 "scribble df0:text/"
		      set f1 "a68k z.a;blink z.o to z^M"

[42mCommand Aliases
[42m---------------
      * The secondary use of set is to assign command aliases.

      eg.     set mv rename

	This allows an alternate name for rename. i.e. mv.
	So you could type

	      mv oldname newname      {to rename oldname to newname}
  Or
      eg.     set as a68k
	      set pp powerpacker
	      set du dirutil
	      set go "a68k zsh.s;blink zsh.o to zsh"
	      set cped "copy df0:c/ed"

	You would use this last alias, if you need to copy a particular
	file a lot. So, to copy c/ed to ram: use:-

	      cped ram:

      * You can also pass external parameters to an alias.

      eg.     set al  "%1 a68k $1.s;blink $1.o to $1"

      Typing
		      al test

      will assemble test.s using a68k, then blink test.o to become test.

      You can specify upto eight parameters to pass to a command alias.
      At the start of the set definition, specify the parameters to pass
      with the variables %0 thru %7. These need not be in sequence. The
      first %n will be assigned to the first parameter, the 2nd %n to
      the 2nd parameter etc.

      Insert the corresponding variables $0 thru $7 at the points in the
      set definition where that parameter is to appear.

      eg.     set disp "%1 %2 %3 echo \"$3 $2 $1\""
	      set cram "%0 %1 %2 %3 copy $0 $1 $2 $3 ram:"
	      set go "%5 %1 %6 %2 echo \"1st-$5 2nd-$1 3rd-$6 4th-$2\""

      * Command aliases can be nested to 1 level.

      eg.     set cls "echo ^L";set cdir "%1 cls;cd $1;diw"

      * An important point about aliases, is that you can redefine the
	existing internal command names.

      eg.     set help "type help_screen"

	This would make it so that pressing HELP or typing H E L P would
	not generate the standard help command list, but would type the
	file called  help_screen to the screen. Similarly

      eg.     set copy c:copy
	      set info c:dfree
	      set mem c:avail

      * Typing set with no parameters at all, will generate a list of all
	current definitions.

      eg.     set
[32m  ------------------------------------------------------------------------
  SETPROT [filename] [h|s|p|a|r|w|e|d]

      * Allows you to alter/see the protection bits associated with a file.

      * SETPROT filename
	Shows the protection bits for the file specified.

      eg.   setprot editor

      * SETPROT filename [h|s|p|a|r|w|e|d]
	Toggles the specified protection bits on the file.

      eg.   setprot editor pd
	If 'editor' was already pure, then the pure bit would be reset.
	If 'editor' was not pure, then the pure bit would be set.
	If 'editor' was deletable, then the delete bit would be reset.
	If 'editor' was not deletable, then the delete bit would be set.

      eg.   setprot game hprwd
      eg.   setprot monitor hsparwed

      Bits:   'h'     hidden  V1.3
	      's'     script  V1.3
	      'p'     pure    V1.3
	      'a'     archive V1.3
	      'r'     readable
	      'w'     writable
	      'e'     executable
	      'd'     deletable       <- V1.2 only understands this bit
[32m  ------------------------------------------------------------------------
  SLEEP timeout

      * SLEEP halts processing for the time given. Timeout is in seconds.

      eg.     echo "I'll wait a minute"
	      sleep 60

[32m  ------------------------------------------------------------------------
  STACK [size]

      * Allows you to view or alter the current stack size.

      eg.    stack            [shows the current stack size]
	     stack 30000      [sets current stack = 30000 bytes]
	     stack 10000      [sets current stack = 10000 bytes]

[32m  ------------------------------------------------------------------------
  STATUS [-y|-n]

      * Activates or deactivates the programmers status line.

      eg.     status -y       [activates status line]
	      status -n       [deactivates status line]

	The status line (if activated) will only appear once a disk based
      or resident program has been executed. The line appears as follows:

      RETURN: 0  time = 00:00:23.66  changes-> chip: 0  fast: 0  total: 0

      Return shows the return code that the program returned in D0 (usually
      = 0). Time shows how long the program took to execute in hours,
      minutes, seconds, hundredths (This time does NOT include the time
      it takes to load the program from disk). Changes show if the program
      has left any memory still allocated. i.e. if 200 bytes of chip
      memory were left allocated by the program, then 'chip: -200'

[32m  ------------------------------------------------------------------------
  STRINGS sourcefile [count]

      * STRINGS displays all valid ASCII strings in a file which have a
	length greater than or equal to the count. If no count is given,
	a default of 10 characters is used.
      * This command is very useful for finding out which libraries a
	program uses.

      eg.     strings c:zshell 12

[32m  ------------------------------------------------------------------------
  TIME

      * Displays the current time in hours:minutes:seconds.hundredths

[32m  ------------------------------------------------------------------------
  TYPE source

      * Prints to the screen the ASCII text file specified as 'source'.
	Hitting any key will pause the listing. Backspace will restart it.
	CTRL <C> will abort the listing.

      eg.   type readme
[32m  ------------------------------------------------------------------------
  UNSET [set1] [set2] [set3] [set4] ... [set11]

      * Removes one or more set definitions from the set list.

      eg.     set f1 "cd df0:;diw^M"
	      set f2 "cd df1:;diw^M"
	      ...

	      set f10 "ed df1:s/startup-sequence^M"
	      ...

	      unset f1 f2 f3 f4 f5 f6 f7 f8 f9
	      ...

	      unset f10
[32m  ------------------------------------------------------------------------
  VEC

      * Displays some important execbase pointers, which give a good
	indication of whether a virus is present in your system.
	WarmCapture, CoolCapture, ColdCapture, KickTagPtr, KickMemPtr,
	and KickCheckSum are displayed. If any of these are are NOT
	zero, then either a virus, RAD, or virus protector or some
	other program that takes control of your machine when you
	reset, is present. If you suspect a virus, you may want to eject
	the disk from DF0: and type the RESET command, which should
	clear the virus. Now you should boot up on a clean disk.

      eg.    vec
[32m  ------------------------------------------------------------------------
  VERSION

      * Tells you ZShell's version number.

      eg.   version
[32m  ------------------------------------------------------------------------
  ; blah blah blah blah
  * etc etc etc
  # hello ma

      * Placing a semi-colon, an asterisk or a hash character as the 1st
	character in the line of a script file allows you to place comments
	in it.

      eg.   ; This is a comment line
[32m  ------------------------------------------------------------------------


[42mHISTORY & COMMAND LINE EDITING
[42m==============================

	ZShell has a 1024 byte circular history buffer. It works similar
      to most other shells and the NEWCON: handler in Workbench V1.3.

      UP ARROW        - go back one line in the history buffer.
      DOWN ARROW      - go forward one line in the history buffer.
      SHIFT UP ARROW  - go to the 1st line in the history buffer.
      SHIFT DOWN ARROW- go to the last line in the history buffer, which
			should be blank.
      LEFT ARROW      - move cursor left.
      RIGHT ARROW     - move cursor right.
      SHIFT LEFT ARROW- move cursor one word left.
      SHIFT RIGHT ARROW move cursor one word right.

      CTRL X          - deletes whole line.
      CTRL E          - move cursor to end of line.
      CTRL Z          - move cursor to start of line.

	Again, command line editing is similar to most shells. Backspace
      and delete do what they're supposed to do.

[42mWILD CARDS
[42m==========

	As at V1.09, ZShell supports wild card file descriptions on some
      commands (DIR, DIW, DELETE & COPY). Wild cards are like those
      supported on MS-DOS systems, and not the same as the ones on
      AMIGA DOS. NOTE: You can only effectively put one * character in a
      wild card.

      Character       Meaning
      ---------       -------
	 *            Match zero or more characters.
	 ?            Match one character.
	 ~            Negates the following wildcard.
       [  ]           Specifies a class of characters to match.

      eg.    diw *.info       {lists all .info files}
	     dir z*.s         {lists all files starting z, ending in .s}
	     delete *.info    {deletes all .info files}
	     copy *.s ram:    {copies all .s files to ram:}
	     copy 1? df1:     {copies all two char files beginning with 1}
	     dir ~*.s         {lists all files NOT ending in .s}
	     dir ~*.info      {lists all files except for .info files}
	     dir *.[co]       {lists files ending in .c or .o}
	     dir [abcd]*      {lists files beginning with a,b,c or d}

[42mINPUT/OUTPUT REDIRECTION
[42m========================

	The standard redirection operators are supported for all internal
      commands, as well as disk based programs. Redirection only affects
      those programs which use the dos.library's Input() and Output()
      functions.

	  >  redirect std output.
	  <  redirect std input.
	  >> append redirect output. (tacks output onto the end of file)

      eg.    diw df1:c >ram:directory
	     type zshell.doc <raw:0/0/100/100/input >raw:0/0/640/100/output
	     sortfile things >>df0:things.log


[42mEXECUTING COMMANDS FROM DISK
[42m============================

	Just type the program's name, the same as you would at the
      1> prompt. Note that you do NOT need the RUN command in the C:
      directory.


[42mHOW TO RUN IT BIT
[42m=================

	ZShell must be started from the CLI.

      eg.   1> ZShell

	When ZShell is loaded, it trys to load the DEFAULT SCRIPT FILE
      called LOGIN.Z. First the S: directory is checked for it, followed
      by the current directory. Once loaded, the script is executed.

	You can automatically execute a ZShell script file when starting
      up ZShell by including the script file's name on the CLI line.

      eg.   1> ZShell script.z

	You can call ZShell script files anything you like (they don't
      have to end in .z)


[42mEXAMPLE STARTUP SCRIPTS
[42m=======================

      eg.     You want to set up one of those utilities disks where
	      everything operates by pressing function keys.

; UTILITY DISK STARTUP SCRIPT
set f1 Amigamon^M
set f2 PaulCopy^M
set f3 Fixdisk^M
set f4 FastDisk^M
set f5 trackdos^M
set f6 zerovirus^M
set f7 novirus^M
set f8 WayneCopy^M
set f9 powerpacker^M
set f10 dirwork^M
set F1 dirutil^M
set F2 diskspin^M
set F3 pprefs^M
set F4 "mount msh:^M"
set F5 sound_ripper1^M
set F6 sound_ripper2^M
set F7 VirusExpert^M
set F8 reset^M
set F9 "cd df0:;diw^M"
set F10 "ed df0:s/startup-sequence^M"
set help "type sys:menu"
help
; END OF SCRIPT

      * Obviously you'd call this file something like zstart.z, and shove
	it in your s: directory. Then put in your startup-sequence ;

	      ZShell s:zstart.z

	And make sure the text file 'menu' has the proper menu of function
      keys.(NB. You could also call it LOGIN.Z, and shove it in the S:
      directory. And just put the following in the startup-sequence ;

	      ZShell

[32m  -----------------------------------------------------------------------
      eg.     You want to set up a CLI work disk.

; CLI DISK STARTUP SCRIPT
echo "**** MY CLI DISK ****"
copy c:ed ram:
set f1 "cd df0:^M"
set F1 "cd df1:^M"
set f2 diw^M
set F2 "diw c^M"
set f3 "cd df0:;diw^M"
set F3 "cd df1:;diw^M"
set f4 WayneCopy^M
set F4 PaulCopy^M
set f5 "ed "
set F5 "zap^M"
set f6 "type df1:contents^M"
set f10 "ed df0:s/startup-sequence^M"
set F10 "ed df1:s/startup-sequence^M"
set cl "%1 cd $1;diw"
set cls "echo ^L"
set mm "%1 more $1 30"
; NOW AS A STINGY MENU, SHOW THE CURRENT SETTINGS
set


[42mFUTURE
[42m======

      * Needs to be extra stuff to make the script language flexible.
      * Probably should have date stuff (I don't have a clock)

[42mCREDITS
[42m=======

	Many thanks to Wayne for his invaluable help in doing the history
      and command line editing parts of ZShell. Also, thanks to
      Tim Strachan of Megadisc who asked for the history stuff.

	ZShell was entirely written using Wayned by Wayne Hayter (various
      versions). And was assembled with A68K V2.61 by Charlie Gibbs. And
      linked with Blink V6.7 by the Software Distillery.

[42mDISTRIBUTION
[42m============

    ZSHELL IS FREELY DISTRIBUTABLE. YOU CAN DISTRIBUTE THIS AS LONG AS
  THIS DOC FILE REMAINS WITH THE EXECUTABLE, AND THAT NO CHARGE IS MADE
  FOR THEM (APART FROM A NOMINAL COPYING CHARGE). IF YOU FEEL LIKE
  SENDING ME SOMETHING FOR THIS PROGRAM, SEND ME A POSTCARD!, A P.D.
  DISK, A PROGRAM YOU'VE BEEN WORKING ON ,BUT DON'T SEND ME ANY MONEY
  (WELL, IF YOU REALLY, REALLY WANT TO, I GUESS I COULD PUT UP WITH IT).


[42mCORRESPONDENCE & BUG REPORTS
[42m============================

	  Please send any correspondence and/or bug reports to me at the
	address below:-

		Paul Hayter
		PO Box 331
		Ballina
		2478
		Australia.


[32m    ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ## 24 ##


