


                          Ymodem-G (Batch)
                          Copyright  1990
                          Zipline Software

Section 1 -- Protocol Limitations

   Ymodem-G is one of the FASTEST protocols to date.  It will out
transfer Xmodem, Ymodem, Ymodem Batch, Kermit, Sliding Windows Xmodem,
and even Zmodem.  This alone makes it very useful.  This protocol uses
a 16-bit CRC to make sure that your data gets transferred correctly,
but if an error should occur, the transfer ABORTS.  Realistically,
this protocol should only be used with modems that have error correction
built-in (or used with a null modem).


Section 2 -- Program Limitations

   Although the description of Ymodem-G does not force these limitations,
my program does.  Most of them you will never encounter, but for sake of
completeness, I will try and discuss all the limitations.

  -  Do not attempt to transfer more than 2,147,483,647 bytes at a time.
     (It is possible it can transfer double that, but I haven't tested
     it, and I'm planning on it.  Anyone that wants to try it, let me
     know what the results are! At 19,200 baud, that will take a little
     more than 12.9 days!)

  -  Ymodem-G automatically OVERWRITES any file that has the same name
     of the file you are receiving.

  -  There is no check on the path that you give YMG, if it's really bad,
     it MIGHT bomb the computer.  (Don't try for example, d/ling to the
     cartridge port!)

  -  YMG requires approximately another 17K above the program size for
     its own use.  Most of this space (16K) is used for the modem and
     disk buffers.  Floppy drives systems need these big of buffers,
     and they aren't too terribly big, so I did not allow them to be
     changed.  

  -  This program is copyrighted and shareware.  You may copy it, give
     it away, put it up for download on BBS's, etc.  You may not sell it.
     AND, if you use this program for more than 3 weeks, send the
     author (ME), a small fee to keep producing quality software like
     this.  My address is:

        Robert McKee
        395 S. Duane #301
        Glen Ellyn, IL  60137

Section 3 -- Running ymodem-g

     You may run YMG from inside any terminal that supports running
external programs.  It may also be run from the desktop, if your terminal
does not support this function.  When running YMG from the desktop, a box
will appear asking you to input the parameters for YMG.

Section 4 -- YMG Options

     YMG now requires that all options be preceded by a -.  Also, most
options should be followed by either a - or a +.  Following an option
a minus (-) sign will disable or turn off that option.  Following an
option with a plus (+) sign will enable or turn on that option.  These
are the options that YMG will accept:

  B  -  Will enable/disable a beep at the end of a transfer.

  H  -  Instead of +/-, this option requires you to have following it
        one of these 4 letters: N, S, H, or B.  This option is for
        setting flow control.  N - None; S - Software; H - Hardware; or
        B - Both.  If this option is left out, flow control will not be
        changed.  (It will use whatever you have set currently).

  K  -  Keep aborted files.  If for some reason a transfer gets canceled,
        (like user aborting) you may still want as much as the file as
        you have received.  This allows you to finish the download with
        any protocol that has a resume function (like Z-modem).

EX:
YMG -B+ -HH -K+ C:\     This will tell YMG to use hardware flow control,
                        keep any aborted files, beep at the end of the
                        transfer, and download all the files to C:\.
YMG -B+ C:\             This will tell YMG to beep at the end of the
                        transfer, and download to C:\.  It will use the
                        flow control that was being used before YMG
                        started.
YMG                     This wll use all the default options, and will
                        download to the current directory.
  
Section 5 -- Modification Log (AKA what I changed in this version)

Version .25 -- 05/??/90
  -  First release -- Written in 100% assembler to be small and fast
  -  No outputs really, just simple got block messages

Version .50 -- 06/07/90
  -  Added disk buffering (4K)
  -  Added new user interface
       -  Batch Status
            -  Total Files    -- # of files sent
            -  Total Bytes    -- # of bytes sent
            -  Avg Throughput -- CPS on whole transfer
            -  Elapsed Time   -- Elapsed time on whole transfer
       -  File Status
            -  File Name      -- Name of file in transit
            -  Total Bytes    -- The total number of bytes in the file
            -  Avg Throughput -- CPS on current file
            -  Current Byte   -- Total bytes in file received
            -  Elapsed Time   -- Elapsed time on current file only
            -  Last Message   -- Messages about transfer
       -  Last Block
            -  Size in Bytes  -- The size of the last block sent
            -  Block Type     -- What was contained in the last block
            -  Sent CRC's     -- The CRC the sender gave us
            -  Calculated CRC -- The CRC we calculated it should be

Version .75 -- 06/19/90
  -  Fixed a minor bug when communicating with IBM systems that send
     the extra info in the header block.
  -  Added File Progress added in both % and visual bar
  -  Added File Time Estimate which give an approximate amount of time
     that the current file will take.
  -  Now gives error messages in English instead of result codes.
  -  Now allows a path to d/l to on the command line, and shows that path
     in the Batch File Path line.
  -  More accurate CPS rates.  Also, not quite as jumpy as before.
     (The former routine was only accurate when alot of bytes had been
      transfered).
  -  Can now timeout if the sender stops sending too long.  Previously
     would wait forever (or until UNDO was hit).
  -  Optimized my code greatly...Should hopefully be fast enough for any 
     baud rate.
  -  All times are now in tenths of a second instead of seconds.
  -  Now updates the screen every block *AND* during the block IF there
     is no data to get.
  -  Now supports both color and monochrome monitors.

Version 1.0 -- 06/20/90
  -  Added a modem buffer (8K)
  -  Increased disk buffer to 8K
  -  Disabled flow control completely by using my own buffer and raising
     the high water mark above the buffer length.  So, now instead of a
     lock-up when the buffer overflows, you only get an error message of
     some sort.
  -  Added Files Window to show the last few files you've already got
     including the one you've started to get as well.

Version 1.01 -- 06/22/90
  -  Fixed minor bugs with reseting the modem buffer to the defaults when
     leaving YMG.
  -  Renamed YMG.PRG to YMG.TTP so a command line can be entered from the
     desktop.

Version 1.02 -- 06/28/90
  -  Increased the amount of time needed for a timeout from 1 second to
     5 seconds.  This should be long enough for any reason.

Version 1.17 -- 07/18/90
  -  Added flow control options so YMG can use flow even if the terminal
     program that calls it doesn't.
  -  Now reserves and protects its memory while running (It also releases
     it when it terminates).
  -  Now uses BIOS calls for modem input.  This should increase some
     compatibility.  (This also slows down YMG, so floppy drives may/
     may not work again!)
  -  Optimized both speed and size alot.  It's about as fast and small
     as it's going to get.  (About 250 bytes smaller now!)

Version 1.18 -- 07/30/90
  -  Changed the CRC routine.  Instead of a pure calculation of the
     16-bit CRC which was used prior to version 1.18, now YMG uses a
     simple table look-up (with a small formula).  The CRC routine now
     takes approximately 70 cycles instead of 272.  (about 4 times as
     fast).  Unfortunately, this requires the 512-byte table to be added
     to the length of YMG.  (Oh well!)
  -  Fixed problem with YMG exitting with the character color being
     green if there was an error.
  -  Fixed the screen wrap problem.  YMG was assuming that the screen
     wrap was off, and if a program turned it on previous to calling
     YMG, the screen would appear completely messed up.

Version 1.19 -- 07/31/90
  -  Minor changes made, basically just more speed and size optimization.
     About 200 bytes smaller in size, and just a few cycles taken out here
     and there.  Changed all compares to zero to test, a few moves to
     quick moves, a few adds to quick adds, a few subs to quick subs, etc.
     Also combined a few multiple moves of word sized immediates to a few
     move of long sized immediates.  Instead of logical shifting a data
     register to the left one, substitutions of adding the data reg. to
     itself.

Version 1.25 -- 08/09/90
  -  Major overhaul of quite a few sections of YMG.  I have completely
     redone how to pass options to YMG (this was done so that I can now
     implement more options on the command line, but still remain pretty
     much constant between revisions, also it looks alot better).  New
     options added now are -B+, and -K-.  Also, usage screen comes up if
     the parameters are not passed correctly.  This should help people
     get used to the new way that YMG takes it's parameters.  Quite a few
     more options are going to be added, of which a few are already in
     the help screen, so don't be alarmed if the options there do not
     work yet.  

I wantted to say thank you to these fine BBS's that have put up with me
downloading 100+ files in testing this program:
Software Syndicate             (708)307-9915  14400HST   ///Turbo BBS
Graveyard BBS                  (708)250-0968  2400       FoReM ST
Dragon's Egg II                (708)695-8617  9600 HST   ///Turbo BBS
Code One                       (708)789-3610  2400       FoReM ST
