                   STalker 3.00 to 3.01 Patch Program

            This program will upgrade STalker version 3.00 to
            version 3.01.  It will ONLY upgrade version 3.00.

  This program is copyright  1991 by Gribnif Software.  All rights are
  reserved.  This program may be freely distributed to all legitimate
  registered users of STalker 3.

  Any questions or comments, please contact us at:

      Gribnif Software, P.O. Box 350, Hadley, MA 01035, USA
      Tel: (413) 584-7887, Fax: (413) 584-2565
      GEnie: GRIBNIF


What is needed to upgrade
=========================

  1.  An un-modified, registered, STalker 3 Master Disk, version 3.00.

  2.  A hard disk or a blank formatted floppy disk (to place the
      PATCH301.PRG and PATCH301.DAT on).


How to upgrade your STalker version 3.00 to version 3.01
=========================================================

  1.  Make sure you have made a backup copy of the STalker 3 Master Disk.

  2.  Place the PATCH301.PRG and PATCH301.DAT on your hard disk or on the
      blank floppy disk (it may need the extra disk space to write some
      temporary files, depending on free memory.)

  3.  Run the PATCH302.PRG and follow the on-screen prompts.

  4.  Once you have finished upgrading your master disk to version 3.01,
      make a backup copy of this newer version.

  ** VERY IMPORTANT STEP, READ CAREFULLY **

  5.  To install the newer version on your system, you MUST replace the
      following STalker 3.00 files in your system with the 3.01 version
      files from the newly upgraded disk:
      
      \STALKER.ACC
      \STALKER.PRG
      \STALKER.RSC
      \BACKTALK\SCRIPTS\PREFIX.BTS
      \BACKTALK\SCRIPTS\BUF_SIZ.BTS
      \BACKTALK\SCRIPTS\BUF_SIZ.BTK
      \BACKTALK\BACKTALK.PRG
      \BACKTALK\BUF_SIZ.BTK         -- Same as the one in SCRIPTS folder
      \EXTRAS\AUXINIT.PRG

      You will also find these two files with this upgrade, and they should
      be copied to your scripts directory:
     
      WRITESCR.BTS
      WRITESCR.BTK
      
      Additionally, since the first few copies of STalker sold had a
      faulty version of INF_CONV.PRG, a corrected one has also been
      included with the patch program.
      

If you get an error message
===========================

  If your STalker 3 Master Disk has been modified in any way (including
  moving files around), the patch program will not be able to perform
  the upgrade.  You will get an error message indicating that this has
  happened.  In this case. you should mail us the disk so that we can
  upgrade it.

  To have your disk upgraded by us, you need to:

  1.  Send in your original, registered, STalker 3.00 Master Disk.
  2.  Enclose a U.S. check for $5 + $2 shipping & handling ($7 total).
  3.  Enclose a note with your name, address, and daytime phone number.

  In return you will receive the upgraded 3.01 Master Disk.


Changes for STalker 3.01 - Jan. 15th 1992
=========================================

This version contains the following enhancements:

+ The efficiency of the transfer protocols (ZModem mainly) was improved by
  speeding up some of the most common low-level routines.

  The "Favour concurrency" option was also made a bit more black & white.
  At 9600 baud or greater with Favor Concurrency off, you won't be able to
  do much else on the machine since STalker will be aiming for maximum
  throughput.  If you need to abort a high-speed file transfer, use the
  UNDO key rather than attempting to click on the Abort button.  On faster
  machines, either will probably work, but on a stock 8MHz machine STalker
  may not process the mouse button.

+ If the file transfer window is currently on the screen, the INSERT key
  will allow you to alternate between the STalker window and the transfer
  window.

+ STalker will now automatically expand the serial input buffer of a port
  if it is less than 2K.  The output buffer is not changed since it is not
  as important to proper operation of STalker.

  In program mode STalker checks the buffer size each time you change
  ports, so if you use several port in a session, you'll end up giving each
  a 2K buffer.

  In accessory mode, it will only expand the port's buffer during initial
  startup since that is the only time that STalker can safely allocate
  extra memory from TOS.  If your configuration indicates use of port X and
  you switch to port Y during the session, port Y's buffer will not be
  expanded.

+ New versions of AUXINIT and the BUF_SIZE BackTALK script have been
  included.  The new AUXINIT handles TT and Mega STe ports in addition to
  the ST serial port.  You'll need to run a separate copy for each port
  whose buffer you wish to expand.  Simply create as many copies as you
  need in your AUTO folder and then use the BUF_SIZE BackTALK script to set
  them up. Please note that if you have TOS 1.4 or newer, you can probably
  use a buffer size of more than 31k (up to 63k) without a problem.

+ The Atari-standard clipboard format is now supported.  To enable the
  Atari-format clipboard, set the "Clipboard drive" in the Preferences
  dialog to "Z".  Any other drive will cause STalker to use the old method
  which is compatible with older STalker/STeno programs. STeno 2.00 uses
  the "old" format; later versions will use the new one.

  Note that the Atari method requires scanning of a directory in order to
  determine if a scrap is available, so to avoid a lot of extra physical
  disk I/O, use a program such as CACHEXXX.PRG that caches directory
  entries.

+ Support has been added for specifying scripts to invoke at startup via
  the command-line.  This allows you to "Install" STALKER.PRG as the
  application for files of type .BTK.  STalker will attempt to execute each
  file specified on the command line in turn, after it first executes the
  normal startup scripts.

  If a qualified filename is given, i.e., something like C:\GO.BTK, STalker
  will attempt to access the file exactly as specified.  If just a filename
  is given, ex. "GO.BTK", STalker will look in the default directory.

+ A new BackTALK command, "exit_program()" was added.  It returns nothing
  and takes no parameters.  If STalker is operating in program mode, it
  will cause STalker to terminate immediately.  In accessory mode the call
  does nothing and returns immediately; you can use this fact to take
  whatever actions are appropriate in accessory mode by placing statements
  after the exit_program() call.  For example:

    ...  exit_program();
                  // If the script gets here, we must be in ACC mode.
         exit(0); // (or whatever is appropriate)

+ There is now a "write_script()" BackTALK command.  This function watches
  data from the host and the user and builds a script containing a sequence
  of wait_for() / port_send() commands.  Included is the file WRITESCR.BTS,
  which is a small script that does the necessary stuff before calling
  write_script(). Pressing Control-Z will terminate WRITESCR.BTK.

  Please note that scripts which are generated by this command are fairly
  basic. Some tweaking may be necessary, and things such as file
  downloading are not recorded. Function keys are referenced by their
  number, which means that if a script relies on the F1 key and you change
  the assignment of F1, the script may cease to work as expected.

  For documentation on the actual format of write_script(), see the
  file WRITESCR.BTS.

+ A set_time() BackTALK function was added.  This is the converse of the
  get_time() call, and takes one parameter which should have the desired
  date and time packed into it in the same format returned by get_time().
  Internally, this function sets both the XBIOS and GEMDOS time and date.

+ NOTE:  SCRIPTS COMPILED WITH THIS VERSION MAY NOT WORK PROPERLY UNDER
  STALKER 3.00!!  This is due to the AND/OR enhancement described below.
  If your script does not use the keywords AND, OR, or their && and ||
  equivalents, and does not call write_script(), exit_program(), or
  set_time() you will be fine.  If you use AND/OR you'll get an "Illegal
  Instruction" error under 3.00.  Similarly, if you use write_script(),
  exit_program(), or set_time() you will get an "Unknown function number"
  error.

+ The IF/THEN/ELSE/ENDIF construct now recognizes an ELSEIF statement.  The
  syntax is now:

    IF expression THEN statements; [ELSEIF expression THEN statements;]
        [ELSE statements;] ENDIF

  You can use as many ELSEIF's as you like, i.e., you are not limited to
  just one. This makes situations like the following much easier to code
  and read:

    IF user_choice == 'A' THEN ; ELSEIF user_choice == 'B' THEN ; ELSEIF
        user_choice == 'C' THEN ; ELSE ; ENDIF

  Note that the code generated for handling ELSEIF is compatible with
  STalker 3.00.  Only AND, OR, write_script(), and exit_program() cause
  incompatibilities.

+ The "Save configuration as..." command is now allowed when STalker is
  "Disabled".  This makes it easier to create a .INF file that starts
  STalker in the disabled state.

+ The "Dial selected entries" command is now disabled if DCD is enabled and
  active, to prevent the effects of accidentally pressing Shift-Alt-A while
  online.

+ STalker now displays a message and exits if no VDI workstations are
  available at startup.

+ A problem with capture mode getting disabled at startup has been fixed.

+ Problems with Capture and Printing being turned off incorrectly should
  now be fixed.

+ ZModem comparison now works with the DOS DSZ program, and the statistics
  in the transfer status window are now correct even if the comparison
  isn't successful.

+ An incoming ZModem download request with the mode set to ZCRESUM (rare)
  used to skip the file if the lengths were the same.  Now it proceeds with
  the transfer.  This is mainly an issue in conjunction with ZModem
  comparison, since DSZ and Unix SZ sets the mode to ZCRESUM when doing a
  comparison.

+ ZModem sends used to cause unpredicatable results if you aborted them
  right at the beginning, before STalker finished the initial handshake
  with the remote system.  This has been fixed.

+ If the host system sent a timestamp along with a Y/Zmodem transfer, it
  would end up getting used on a subsequent XModem transfer.  This has been
  fixed.

+ The XModem upload code didn't used to treat a timeout as an error, so it
  would not abort if you got 10 timeouts in a row.

+ A bug was fixed which cropped up if a configuration file saved in ST
  medium resolution was used on a mono system - the file transfer status
  window would only be half of the required height, preventing the total
  errors, checksum, error messages, and abort button from being displayed.

+ A minor bug in the file transfer status code was fixed.  It caused the
  elapsed time display to be reset to zero when a zmodem upload error
  occurred.

+ VT52 "ESC b colour" and "ESC f" / "ESC e" sequences are fixed.

+ Some problems with the hide/show terminal cursor were fixed as part of
  the VT52 "ESC f" fix.  One symptom used to be that the cursor would
  disappear if a clear-screen request was recieved when STalker's window
  was not on top.

+ Handling of scrolling regions was changed slightly.  STalker used to work
  around a fault in the CBix code (CB simulator on Bix) where it issued the
  sequence "ESC [ 1 ; 24 r" to reset the scrolling region.  CBix's method
  only works for 24 line terminals, so STalker used to treat a request for
  lines 1-24 as a request to reset the region.  This messed up properly
  functioning programs such as Gnu Emacs which use the scrolling region
  properly (in particular when you tell the host you have, say, an 80x40
  terminal window).  The correct way to reset the scrolling region is to
  send "ESC [ r" or "ESC [ 0 ; 0 r".  An Alt-ESC keystroke will also reset
  the scrolling region.

+ If your clipboard was empty (ex. right after booting) and you copied text
  into it, the Paste command would stay disabled.  This has been fixed.

+ A few clipboard-related problems were fixed, in particular, the bug that
  prevented clipboard data from being recognized the first time you
  selected something.

+ STalker would keep track of the filename used in an "Open configuration
  file" command even if the file was invalid.  This could cause you to
  overwrite the wrong file on a subsequent "Save configuration" command.
  This has been fixed - STalker only remembers the name of the loaded file
  now if the operation is successful.

+ Redraws of the autodialer dialog when selecting the Load... and Save...
  buttons is now better.

+ The TT Serial 2 port really does support DTR.  STalker now realizes this
  and allows DTR to be used to hang up the modem.

+ The Communication Port and BackTALK Script Settings dialogs used to
  sometimes run off the end of a TT med-res screen, causing a crash.  This
  has been fixed.

+ It used to be possible to temporarily "lose" the mouse pointer.  If you
  typed something and hence caused STalker to turn off the pointer, then
  "topped" another window without using Alt-Tab or without moving the mouse
  (ex. type Alt-Insert to simulate a left button click), the pointer would
  remain invisible until STalker's window was topped.  This has been fixed.


Other Changes to BackTALK:
-------------------------

+ A bug with string constants that spanned lines was fixed.  The compiler
  used to miss a \ at the beginning of a continuation line.

+ Some error situations are now reported more accurately.

+ The compiler now does what is known as "short-circuit" evaluation of
  AND/OR expressions.  This is taken for granted in modern C compilers, and
  allows for more efficient code to be written.  For example, under the old
  compiler, code such as:

    IF expression_1 AND expression_2 AND expression_3 THEN ...  ENDIF

  would be compiled such that all three expressions were evaluated at
  runtime.  The new compiler generates code which only evaluates as much of
  the expression as necessary.  For example, if 'expression_1' were FALSE
  (0), the code would jump straight to the ENDIF.

  This allows you to write expressions like:

    IF string_pointer != NULL  AND  string_pointer[0] == 'A' THEN ...
        ENDIF

  Under the old compiler, the (string_pointer[0] == 'A') portion would be
  evaluated even if string_pointer was NULL, resulting in a run-time error.

  A minor side-effect of the new code generation is that an expression
  using AND / OR may not evaluate to either 1 or 0 as before.  For example,
  the code:

    a = 42 OR 13;

  would cause 1 (TRUE) to be stored in 'a' under the old compiler.  Now 'a'
  will end up containing 42.  This is only a problem if you subsequently
  use code such as:

    if a == TRUE then ...

  Instead, use:

    if a then ...

  which is faster and smaller anyway.  If you must have 1 or 0 in a boolean
  variable, use:

    a = (42 OR 13) != FALSE;

