home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / alde_c / misc / comm / yam / yam.doc < prev    next >
Encoding:
Text File  |  1988-07-28  |  43.5 KB  |  1,183 lines

  1.                 YAM (Yet Another Modem program)
  2.                        by Chuck Forsberg
  3.  
  4.    Extensive additions  and  modifications  by  Bill Bolton
  5.                        and John Woolner
  6.  
  7.                          Version 3.13
  8.  
  9.                  ******** Highlights ********
  10.  
  11.     Conversational  mode with optional capture to file  and 
  12. multiple  page  review of past output.   File capture  of  long 
  13. files  works with any system which responds to XOFF within  400 
  14. characters.
  15.  
  16.     Flexible  uploading of suitable files to many types  of 
  17. remote  systems,  even Bulletin Boards without normal uploading 
  18. capibility.
  19.  
  20.     Error  checking file exchange with programs using  Ward 
  21. Christensen's  protocol with optional Cyclic Redundancy  Check. 
  22. Enhanced error recovery and transfer abort logic.
  23.  
  24.     Batch transmission of files with compatible programs.
  25.  
  26.     High  speed  operation;  9600 baud  file  transfer  and 
  27. conversational  terminal operation,  buffered printer operation 
  28. at  >>1200  baud.  Full printer buffering allows  use  of  slow 
  29. printers, or printers with burst transfers (line printer, MX80, 
  30. etc.).
  31.  
  32.     Disk  utility  functions including  directory  listing, 
  33. change  disk and/or user number,  erase files,  disk free space 
  34. calculation,  file transfer time calculation,  CRCK file check, 
  35. and  local listing of files.  Great flexibility in  specifiying 
  36. filenames.
  37.  
  38.     Matching  program (XYAM) for use by remote  systems  as 
  39. XMODEM replacement obtained from same source files.
  40.  
  41.     Written  in a modern high level systems language ( C  ) 
  42. for ease of portability and maintenance.
  43.  
  44.  
  45.                 ******** Rosetta Stone ********
  46.  
  47. FUNCTION
  48.  
  49.      An operation supported by YAM, such as DIR, TYPE, S, R, or 
  50.      T(term).  A command may set or reset a MODE,  or perform 0 
  51.      or more FUNCTIONS.
  52.  
  53. IFF
  54.  
  55.      If and only if.
  56.  
  57. MODE
  58.  
  59.      Many modes affect the way the term function handles data.
  60.  
  61. OPTION
  62.  
  63.      Option(s) apply to the S and R commands only.
  64.  
  65. {}
  66.  
  67.      Required argument.
  68.  
  69. []
  70.  
  71.      Optional argument.
  72.  
  73. pattern ...
  74.  
  75.      An  empty pattern represents all files on the default disk 
  76.      with  the current user number.  A disk identifier  without 
  77.      filename  represents  all  files on  that  disk  with  the 
  78.      current  user number.  Unambiguous and ambiguous filenames 
  79.      may be specified in any combination. 
  80.  
  81.      A pattern may contain any combination of the above.
  82.  
  83.  
  84.                   ******** Commands ********
  85.  
  86.  
  87. a:
  88.  
  89.      Change to a:  disk (or b,  etc.).  CP/M versions print the 
  90.      free disk space in kilobytes.
  91.  
  92. a1:
  93.  
  94.      Change  to a:  disk user 1.  WARNING:  Do NOT change  user 
  95.      number when file(s) are open; CP/M 2.2 gets confused. CP/M 
  96.      versions print the free disk space in kilobytes.
  97.  
  98. bm
  99.  
  100.      Set baud rate to m. Example: "b19200"
  101.  
  102. bye
  103.  
  104.      Drop  any  call  in progress and  prepare  to  make/answer 
  105.      another.
  106.  
  107. call name
  108.  
  109.      Enable Data Terminal Ready (DTR), and set baud rate to the 
  110.      value (if present) corresponding to name.  If autodial  is 
  111.      supported,  dial the telephone number.  If autodial is not 
  112.      supported,  the  telephone number is displayed.  It is not 
  113.      necessary  to  type the entire name as it appears  in  the 
  114.      file.
  115.  
  116.      Example: "call tcbbs" or "call tc"
  117.  
  118. chat
  119.  
  120.      Chat keyboard to keyboard.   Characters typed by either key
  121.      board are echoed to both ends,  and RETURNS echo as  RETURN
  122.      /LINEFEED.  Chat  will become hostile if the other end  also 
  123.      echoes characters.
  124.  
  125. close
  126.  
  127.      Dump  capture  buffer if a recrive  file  is  open,  close 
  128.      files.
  129.  
  130. crck [pattern ...]
  131.  
  132.      Perform  the "crck" function on the specified  files.  The 
  133.      "crck" alogrithim is stolen from version 4.3 of CRCK.ASM.
  134.  
  135. dir [pattern ...]
  136.  
  137.      Display pathnames matching pattern alphabetized across the 
  138.      page. The usual ambiguous filenames are allowed under CP/M 
  139.      provided a correct version of setfcb() is used.  Since dir 
  140.      or  any  other  commands which accept a  pattern  use  the 
  141.      circular  buffer for filename expansion,  be sure to write 
  142.      out any captured data first!
  143.  
  144.      Example: "DIR" "DIR *.C" "DIR YAM*.C" "DIR *.C *.H"
  145.  
  146. dirr [pattern ...]
  147.  
  148.      Displays the directory with the number of sectors in  each 
  149.      file.  The  number  of files matched,  number  of  blocks, 
  150.      number  of  kb  allocated to those  files,  and  estimated 
  151.      transmission  time at the current baud rate for all  files 
  152.      listed are displayed.  Transmission time estimate is based 
  153.      on batch transmission from a Z89 with 700kb Tandon  drives 
  154.      to a Cromenco 4mHz 4fdc system with Persci 277 drive. Time 
  155.      includes file i/o but not error correction.
  156.  
  157. d{mode}
  158.  
  159.      Disable  mode(s) affecting file transmission or  reception 
  160.      with  the term function.  (The "s" and"r" commands  always 
  161.      send data transparently.)
  162.  
  163. erase pattern ...
  164.  
  165.      Erase the named files. For each matched pathname, the user 
  166.      is prompted for Y,  N, or Q. Y erases the file, N skips to 
  167.      the next file,  and Q or anything else aborts the command. 
  168.      The   number  of  free  blocks  on  the  default  disk  is 
  169.      displayed.
  170.  
  171. exit
  172.  
  173.      Exits from YAM to the operating system,  closing all  open 
  174.      files and disconnecting modem from line. Saves the capture 
  175.      buffer if a filename was specified with the 't' function.
  176.  
  177. e{mode}
  178.  
  179.      Disable mode(s) affecting file transmission/reception with  
  180.      the  term function.  (The "s" and"r" commands always  send 
  181.      data transparently.)
  182.  
  183. f[mode] name
  184.  
  185.      Send  file 'name' in the term function.  The optional mode 
  186.      enables one or modes.  If squelch is enabled, preface with 
  187.      ^R and append with ^T. See also type/list command.
  188.  
  189. help
  190.  
  191.      Displays a command summary.  This command closes any  open 
  192.      send file.
  193.  
  194. initialize
  195.  
  196.      Initializes YAM to all its default values.  Does not reset 
  197.      the disk system (see "reset").
  198.  
  199. kill
  200.  
  201.      Kill all data in the capture buffer. Restores the pointers 
  202.      to their initial positions.
  203.  
  204. list pattern [...]
  205.  
  206.      List  the  file(s)  specified  by  one  or  more  possibly 
  207.      ambiguous  pattern(s).  This command closes any open  send 
  208.      file.   YAM   or  XYAM  compiled  with  USQ  defined  will 
  209.      automatically  detect  squeezed files and  print  them  in 
  210.      ASCII.  If  RESTRICTED  is defined (as in XYAM) List  will 
  211.      only display the first MAXLINES lines of a squeezed file.
  212.  
  213.      List  stops/resumes  printing  with  ^S.   Keyboarding  ^X 
  214.      cancels,  and  ^K skips to the next file (it might take  a 
  215.      few  whacks  of the keyboard to get YAM to hear it.)  XYAM 
  216.      prefaces  each file with ^R and suffixes it with  ^T.  The 
  217.      standard putchar() is used,  so tabs are expanded and  the 
  218.      printer  can  be  enabled  with ^P on  the  command  line. 
  219.      Because tabs are expanded,  files containing tabs will get 
  220.      larger if downloaded with the list command;  if you  can't 
  221.      use the s command, at least use type.
  222.  
  223. loop [n]
  224.  
  225.      Loopback   receive  channel to  transmit  channel  for  a 
  226.      count  of n characters (or timeouts).   Keyboard  bashing 
  227.      will  exit  prematurely.   All characters received   will 
  228.      echo  a  '.'  to  the  screen  (as   will  timeouts   the 
  229.      difference  is the rate).  See also 'test' to see what we 
  230.      do it for.
  231.  
  232. mn
  233.  
  234.      Change modem data port to (decimal) n.
  235.  
  236.      Example: "m224"
  237.  
  238. on
  239.  
  240.      Connects modem to the line by turning on DTR (CCITT 108).
  241.  
  242. off
  243.  
  244.      Disconnects  modem from the line by turning off DTR (CCITT 
  245.      108).
  246.  
  247. quit
  248.  
  249.      Exits from yam to operating system,  doesn't save anything 
  250.      or disconnect from line.
  251.  
  252. pxm
  253.  
  254.      Set Parameter x to value m.
  255.  
  256. reset [size]
  257.  
  258.      Dump  the capture buffer (if on),  close  all  files,  and 
  259.      reset  the  disk system (this allows swapping  diskettes). 
  260.      The  optional  argument  size  becomes  the  size  of  the 
  261.      circular capture buffer, useful for debugging.
  262.  
  263. replot [m]
  264.  
  265.      Redisplay the last m lines received from the modem.  If  m 
  266.      is 0 or absent, redisplay starting with the earliest data. 
  267.      A screenful is displayed at a time.  The commands accepted 
  268.      in replot mode are listed below.
  269.  
  270. rewind
  271.  
  272.      Rewind the buffer pointers for the display,  printer,  and 
  273.      file  dump  from  the term function.  The effect  of  this 
  274.      command  is the same as if the data had been sent  another 
  275.      time.
  276.  
  277. r[options] [file ...]
  278.  
  279.      Receive  with  options  1 or more  files  using  the  Ward 
  280.      Christensen protocol.  If no filename is given, batch mode 
  281.      is  assumed.   (Note:  batch mode is not compataible  with 
  282.      MODEM7). If more than one filename is given, a single file 
  283.      transfer will be made for each.
  284.  
  285. s
  286.  
  287.      Displays status information.
  288.  
  289. s[options] pattern ...
  290.  
  291.      If  batch mode is specified with the b option,  0 or  more 
  292.      files are sent according to the ambiguous pathname(s).  If 
  293.      batch mode is not specified, the named unambiguous file(s) 
  294.      are sent each in single file mode.
  295.  
  296. test  [n]
  297.  
  298.      Does  a loopback test of the communications channel for  n 
  299.      chararacters.  Successfully  received chars echo a '.'  to 
  300.      the console,  while errors echo an '*'. May be prematurely 
  301.      terminated by bashing the keyboard.  If n ommitted a count 
  302.      of  65535  is assumed.  Channel should be looped  back  to 
  303.      itself for the test i.e. either at the modem at either end 
  304.      or by putting YAM at foreign end into 'loop' mode.
  305.  
  306. type pattern [...]
  307.  
  308.      Type  the  file(s)  specified  by  one  or  more  possibly 
  309.      ambiguous  pattern(s).  This command closes any open  send 
  310.      file.  YAM  or  XYAM compiled with USQ defined will  auto-
  311.      matically  detect squeezed files and print them in  ASCII. 
  312.      Type  stops/resumes  printing  with  ^S.   Keyboarding  ^X 
  313.      cancels, and ^K skips to the next file. XYAM prefaces each 
  314.      file  with  ^R and suffixes it  with  ^T.  Direct  console 
  315.      output  (bios(4,  ...) is used.  If RESTRICTED is  defined 
  316.      Type  will  only  display the first MAXLINES  lines  of  a 
  317.      squeezed  file,  it  will  display other  files  in  their 
  318.      entirity.
  319.  
  320. t[c][mode] [file]
  321.  
  322.      The  term  function with optional capture to file.  The  c 
  323.      (close)  option  causes data in the capture buffer  to  be 
  324.      written  and closed immeadiately.  0 or more modes may  be 
  325.      enabled.  View  mode causes the term function  to  display 
  326.      control  characters  by prefixing ^ to  the  corresponding 
  327.      letter.  A receive file previously opened by 't file' will 
  328.      not be closed by 't'. While in the term function, the key-
  329.      boarded characters are transmitted except for
  330.  
  331.      ^E      Exits  from the term function back to main command 
  332.              level.  Rapidly typing ^E^E will instead cause one 
  333.              ^E to be transmitted.
  334.  
  335.      ^Q      Iff  a send file is open and its transmission  has 
  336.              been stopped by a XOFF,  transmission is  resumed. 
  337.              Otherwise no special treatment.
  338.  
  339.      ^S      Iff a send file is open and it is being transmitt-
  340.              ed,  transmission is stopped. Otherwise no special 
  341.              treatment.
  342.  
  343.      ^V      Replots  the  last  24  lines,  then  awaits  next 
  344.              command  in replot.  ^V^V typed quickly sends  one 
  345.              instead.
  346.  
  347.      The  following  received characters are recognized in  the 
  348.      term  function,  when they are fetched from  the  circular 
  349.      buffer for the display.
  350.  
  351.      XOFF Stops file transmission from YAM.
  352.  
  353.      XON  Resumes file transmission.
  354.  
  355.      TAB  Tab characters are expanded on the display.
  356.  
  357. u[mode]
  358.  
  359.      Upchucks the received data back to the other end.  I added 
  360.      this command to simplify returning Electronic Junk Mail to 
  361.      it's  sender.  If enough people use this command,  perhaps 
  362.      there won't be so much EJM to put up with. No character in 
  363.      the  defined string LOOPBACKNONO is transmitted by  the  U 
  364.      function.   For   use  with  The  Source  or   Compuserve, 
  365.      LOOPBACKNONO should include ESC,  SUB,  DLE, and any other 
  366.      nasty characters that would confuse an editor.
  367.  
  368. wrt
  369.  
  370.      Write  dumps the circular buffer to the receive  file,  if 
  371.      open.
  372.  
  373. ;
  374.  
  375.      Semicolon  is  an optional command delimiter which may  be 
  376.      used  in  place  or  RETURN in  order  to  place  multiple 
  377.      commands  on a line.  Since commands such as "t"  have  an 
  378.      indefinite number of operands,  the semicolon must be used 
  379.      to string commands together.
  380.  
  381.      Example:  "sb *.c;off" batch transmits all *.c files, then       
  382.      disconnects.
  383.  
  384.      Unfortunately,  CP/M's CCP clobbers ;  and everything past 
  385.      it in the command line, so use backslash instead.
  386.  
  387. \
  388.  
  389.      An alternate to ; for CP/M systems.
  390.  
  391. NATHAN
  392.  
  393.      The  NATHAN command sends the rest of the physical command 
  394.      line to the modem,  starting with the very next character. 
  395.      This  command  works with SUBMIT and  XSUB  (if  lowercase 
  396.      isn't needed). Normally a cr/lf is sent as the end of each 
  397.      line, but this may be changed by relevant mode(s).
  398.  
  399.  
  400.       ******** MODES used with D, E, F, T or U commands ********
  401.  
  402. a
  403.  
  404.      A return from the keyboard is sent as return, linefeed.
  405.      If half duplex, both are sent to the console.
  406.  
  407. b
  408.  
  409.      Binary  mode of TRANSMISSION with T function.  All 8  bits 
  410.      are  sent.  Handy for downloading binary files to adjacent 
  411.      machines  without any modem program.  Don't  confuse  this 
  412.      with  the S function which uses the Christensen  protocol. 
  413.      Also  don't  confuse  with  i  mode  which  affects  files 
  414.      received with the T function.
  415.  
  416. d
  417.  
  418.      Directly enables/disabled dumping of captured text.
  419.  
  420. e
  421.  
  422.      Echo characters received from the modem to the modem.  Use 
  423.      this only for keyboard to keyboard communication, and then 
  424.      only at one end.  Reset after each command. Does not imply 
  425.      "Half Duplex".
  426.  
  427. f
  428.  
  429.      Full duplex.
  430.  
  431. g
  432.  
  433.      Resumes  (GO)  sending  file once in  the  term  function, 
  434.      equivalent  to XON.  Disabling GO causes a file queued for 
  435.      transmission to wait for an XON character.
  436.  
  437. h
  438.  
  439.      Half  Duplex.  Displays keyboarded characters as they  are 
  440.      sent to the modem.
  441.  
  442. i
  443.  
  444.      Image  transparent data capture,  all 8 bits of all  char-
  445.      acters  received,  including NULLS.  This overrides the  t 
  446.      and/or z modes.
  447.  
  448. l
  449.  
  450.      List  unit (Printer) on.  Since the printer is  separately 
  451.      buffered,  it  needn't be as fast as the incoming data  as 
  452.      long as the difference doesn't exceed the buffer size. The 
  453.      rewind  command  may be used to get extra  copies  of  the 
  454.      received data.
  455.  
  456. n
  457.  
  458.      Send NEWLINE (lf) only when transmitting file (no CR).
  459.  
  460. o
  461.  
  462.      List unit Off.
  463.  
  464. p
  465.  
  466.      Send  CR only at end of line,  and then pause until echoes 
  467.      from  remote have stopped.   Useful for sending  files  to 
  468.      bulletin boards where the remote needs time to prepare for 
  469.      the next text line.
  470.  
  471. r
  472.  
  473.      Send CR only at the end of each transmitted line.
  474.  
  475. s
  476.  
  477.      Squelch captured data with ^T and unsquelch with ^R. These 
  478.      characters  are not copied to the file.  This mode must be 
  479.      set/reset as desired BEFORE opening the receive file.
  480.  
  481. t
  482.  
  483.      If Waitnum is more than 1,  wait for echoes to stop  after 
  484.      sendin  each  Waitnum  characters  for  period  Pause.  If 
  485.      Waitnum==1,  send at 1/Throttle,  measured in loops of the 
  486.      term()  function.   The  default  values  of  Waitnum  and 
  487.      Throttle provide transmission at about 50 words per minute 
  488.      regardless of baud rate. This is handy because many remote 
  489.      systems cannot accept input at full speed.
  490.  
  491. v
  492.  
  493.      View  control characters as ^C.  Useful in shutting up the 
  494.      bloody  bell.  In addition to the above,  vv  ditinguishes 
  495.      characters  with the parity bit set by prepending a  tilde 
  496.      (~).  Note:  View mode is distinct from view option.  This 
  497.      mode is reset after each command.
  498.  
  499. w
  500.  
  501.      Wait to receive GOchar after sending a CR at the end of  a 
  502.      line.  Default  for  GOchar is linefeed (see  g  parameter 
  503.      below).  If GOchar is not received,  the wait times out in 
  504.      the same manner as with p mode.
  505.  
  506. x
  507.  
  508.      Exit  from  the term function when EOF is  encountered  on 
  509.      transmitted file.
  510.  
  511. z
  512.  
  513.      Terminate data capture and close file when ^Z is received. 
  514.      Otherwise  ^Z  is  ignored.  It should be noted  that  The 
  515.      Source  coughs  up  an occasional ^Z  just  as  the  "UPI" 
  516.      program is just about to output something interesting.
  517.  
  518.          ******** Options used with S or R commands ********
  519.  
  520. All options are reset after each command.
  521.  
  522.  
  523. b
  524.  
  525.      Batch option.  Pathnames are provided by the sender.  Disk 
  526.      names  are excluded from the transmitted pathname(s),  and 
  527.      may  not be specified for batch option reception (use  the 
  528.      change directory command).
  529.  
  530. c
  531.  
  532.      Request  Cyclic Redundancy Check instead of simple  check-
  533.      sum.  This  option must be specified with the R  function. 
  534.      The  receiving program automatically signals  the  sending 
  535.      program  if CRC is to be used.  The probability of an  un-
  536.      detected transmission error is much less if CRC is used in 
  537.      place of arithmetic checksum.
  538.  
  539. q
  540.  
  541.      Quiet  option  inhibits  some of the  status  information. 
  542.      Quiet  option  is not necessary for proprer  operation  at 
  543.      higher baud rates.
  544.  
  545. t
  546.  
  547.      Execute the term function after file transfer(s).
  548.  
  549. v
  550.  
  551.      View the data being transmitted. Correct data is displayed 
  552.      once.  Viewing ascii files does not interfere with correct 
  553.      transmission  at extreme baud rates,  although  throughput 
  554.      will  be affected.  For each sector,  data is viewed  once 
  555.      before sending/after receiving.
  556.  
  557. y
  558.  
  559.      Yes it is OK to clobber a file already on disk. If absent, 
  560.      the operator is promped for a y or n decision.
  561.  
  562.  
  563.            ******** Parameters used with P command ********
  564.  
  565. gc
  566.  
  567.      Set GOchar to c. C may be a graphic character except ^, or 
  568.      a  control character represented by ^c.  Default is  line-
  569.      feed.  (See  w mode.) Some remote systems  accept  uploads 
  570.      with  a  ?  for each line.  Optimum operation with such  a 
  571.      system might call for pg?  pp10000 pt90 ftw filename.  The 
  572.      first  sets the goahead character to  question  mark,  the 
  573.      second  sets the timeout to a long delay,  the third  sets 
  574.      throttle to a speed which allows the remote to echo at 300 
  575.      baud  (assuming no tabs),  and finally the command to send 
  576.      the  file  with  throttle and wait at end  of  line  (also 
  577.      eliminating  the lf).  If this sounds too complex you  can 
  578.      always go back to longhand.
  579.  
  580. ln
  581.  
  582.      Set Low to n.  When receiving characters from remote to  a 
  583.      file  with the  t filename function,  YAM sends XOFF  when 
  584.      the free buffer space drops to Low. Then, when output from 
  585.      the remote ceases, the buffer is dumped to file. If a data 
  586.      overrun  is detected,  the error is printed and if Low  <= 
  587.      1000 YAM returns to command mode.
  588.  
  589. wn
  590.  
  591.      Set Waitnum to n. See "w" mode for details. Default is 1.
  592.  
  593. tm
  594.  
  595.      Set Throttle to m.  The default value corresponds to about 
  596.      80 words per minute sending speed.
  597.  
  598. pm
  599.  
  600.      Set  Pause to m.  When the free characters in the circular 
  601.      buffer reach 400, an XOFF is sent. Pause controls the time 
  602.      which  must then pass without characters  received  before 
  603.      believing  that  the other end really has obeyed the  XOFF 
  604.      character,  as opposed to the sometimes lengthy Compuserve 
  605.      hitches  in the getalong.  If Pause is too  short,  it  is 
  606.      possible  that  a lurch in output will be  interpreted  as 
  607.      acknowledgement of the XOFF,  only to have more characters 
  608.      arrive  whilst YAM is occupied dumping the buffer to disk. 
  609.      When  this happens,  unfortunate characters are routed  to 
  610.      the proverbial bit bucket,  and you can retry the download 
  611.      as the timesharing service increments the connect  charge. 
  612.      The  default  value seems suitable for Source over  Tymnet 
  613.      and BBS systems.  Pause is also the echo wait period  used 
  614.      with the p  mode,  as well as the timeout for w mode. Some 
  615.      bulletin  board  programs  require  a  longer  pause  when 
  616.      accepting files with the p or w mode.
  617.  
  618.                   ******** Replot Commands ********
  619.  
  620. Commands  within replot consist of a single  character.  Replot 
  621. maps uppercase,  lowercase,  and control characters together in 
  622. decoding commands.
  623.  
  624. b
  625.  
  626.      Beginning of buffer
  627.  
  628. v
  629.  
  630. backspace
  631.  
  632.      Previous page (some overlap provided)
  633.  
  634. space
  635.  
  636.      Next page
  637.  
  638. p
  639.  
  640.      Backup one line and redisplay
  641.  
  642. n
  643.  
  644. LF
  645.  
  646.      Advance one line
  647.  
  648. OTHERWISE
  649.  
  650.      Return to previous function
  651.  
  652.              ******** Sample YAM Session ********
  653.  
  654. A sample session might be:
  655.  
  656.  
  657. 0A>yam b19200 b:              Set 19kb, Change to b disk
  658. dirr yam?.? yamhlp.mss        List  files  and  calculate  xmsn 
  659.                               time
  660. sb yam?.? yamhlp.mss          Send them to local system
  661.  
  662. call softtool                 Can't remember the phone number!
  663. t                             Term Function
  664. minirbbs
  665. E                             Enter a message, answer topic, etc
  666.  
  667. ^E
  668.  
  669. ftp letter                    Open  'letter'  and send to  bbs, 
  670.                               using  prompt and throttle  modes 
  671.                               to prevent overloading the remote 
  672.                               system.
  673.  
  674. ^E
  675. rt secret.tqp                 Suck in a file, then back to term 
  676.                               function
  677.  
  678. ^V pause ^V^V                 Flip     back    three     pages,                   
  679.                               to first part of directory listed 
  680.                               previously
  681. CR                            Back to term function
  682.                               More  keyboarding  with   remote, 
  683.                               logoff
  684. (^E                           if CDO defined, term will exit by 
  685.                               itself)
  686. off                           Drop  DTR  so modem won't  answer 
  687.                               calls, Return to CPM
  688.  
  689.                     ******** Notes ********
  690.  
  691.      The  transmission of pathnames in batch mode differs  from 
  692. that  used  in  MODEM7.  YAM  sends  the  pathname  as  a  null 
  693. terminated  string  in a standard Ward Christensen type  packet 
  694. with a sector number of 0.  Disk specifiers (B:) are not  sent. 
  695. The  sender  waits  for  an  initial  NAK  before  sending  the 
  696. pathname.  An explicit NAK is sent by the receiver at intervals 
  697. when  is  ready  to  receive a  pathname.  Upon  receiving  and 
  698. acknowledging the pathname packet,  the receiver opens the file 
  699. and then sends the initial NAK for the data in the file. A null 
  700. pathname terminates batch transmission.
  701.  
  702.      The  remainder  of the pathname sector is  set  to  nulls. 
  703. Future  versions of YAM (running on 8086 MS-DOS,  for example), 
  704. may  add  optional  fields  after  the  first  null  for   file 
  705. information   such   as  modification  time  (should   not   be 
  706. transmission time!!), or exact length.
  707.  
  708.      Readiness  to receive sectors with Cyclic Redundancy Check 
  709. (2  bytes) instead of the usual additive checksum is  indicated 
  710. by a 0103 (ASCII "C") for initial "naks" instead of 025.
  711.  
  712.      File transmission is compatible with MODEM7 in single file 
  713. mode. File transmission may be aborted by sending a sequence of 
  714. CAN  (^X)characters.   Each  character  keyboarded  will  cause 
  715. readline() to return a TIMEOUT error,  thus regaining  keyboard 
  716. control relatively easily.
  717.  
  718.      I  routinely send files at 9600 baud between a Z89 (2 mHz) 
  719. and a Cromenco 4mHz system.  This still works at 9600 baud even 
  720. with CRC! Reception in the term function seems to works well at 
  721. 9600 baud on a Z89 provided the printer is off. If you use bios 
  722. calls  for terminal i/o (e.g.,  TRS-80  version),  the  maximum 
  723. speed may be less in the term function.
  724.  
  725.      Quiet  mode is not necessary for proper operation at 19kb, 
  726. although it does increase thruput slightly.  View option (S and 
  727. R  commands)  does not decrease  maximum  baud  rate,  although 
  728. throughput  is  obviously  affected according to the  ratio  of 
  729. terminal speed to communications rate.
  730.  
  731.      Printer   operation   with  bios  calls   or   view   mode 
  732. substantially  reduces the highest baud rate possible with  the 
  733. term  function without losing characters (independent of actual 
  734. printer  speed).  The term function will send XOFF  to  prevent 
  735. buffer  overflow if the printer is on,  or if a receive file is 
  736. in use.  Term function on the Cromenco with a 300 baud  printer 
  737. works fine at 4800 baud.
  738.  
  739.      Baud rate selection routines are provided for the Cromenco 
  740. TUART, Z89 serial board (8250's) and Godbout boards (2651's).
  741.  
  742.      If you want YAM to use the modem port's current baud rate, 
  743. provide  a  readbaud()  function (in yam5.c) and  don't  define 
  744. INITBAUD.  If you can't read the modem port's baudrate,  define 
  745. DEFBAUD  default_baudrate.  If you wish YAM to  initialize  the 
  746. modem port, define INITBAUD.
  747.  
  748.      In the term function,  use of the circular buffer provides 
  749. some advantages.
  750.  
  751.      Incoming  data may come in at a rate higher than the  dis-
  752.      play  and/or printer.  Tab expansion for the display  does 
  753.      not compromise this ability.
  754.  
  755.      The  user may decide to save a timesharing session on  the 
  756.      disk  AFTER it has started (or possibly even finished)  as 
  757.      long as the buffer pointers have not wrapped around.
  758.  
  759.      The same ability also applies to the printer.  The printer 
  760.      need  not be as fast as the modem as long as the  Tortoise 
  761.      is allowed to catch up.
  762.  
  763.      Received data may be redisplayed (rep command).
  764.  
  765.      At high speeds,  the display will fall behind the incoming 
  766. data,  as  storing  of  raw modem data into  the  buffer  takes 
  767. precedence  over  all  else.   As  a  result,  a  defective  or 
  768. incorrectly  programmed  modem port which sources data at  high 
  769. speed  can  lockout  the keyboard.  If  YAM  "goes  away"  when 
  770. entering the term function, this may be the cause.
  771.  
  772.      If  insufficient stack space is provided above the end  of 
  773. the circular buffer,  YAM may sulk when attempting to exit from 
  774. the term function.  The amount of stack space is determined  in 
  775. the init function (in yam1.c) where bufend is initialized.
  776.  
  777.      The  t and z modes affecting data capture take effect when 
  778. the circular buffer is written to the receive file,  not as the 
  779. characters are first received from the data port.
  780.  
  781.                ******** Installing YAM ********
  782.  
  783.      YAM   consists   of   YAM.H,   YAMSYS.H,   YAM8.ASM,   and 
  784. YAM[1235710].C.  YAM  currently  supports  the  Z89  (with  aux 
  785. board),  Cromenco TUART,  TRS-80 II, Apple (currently with 
  786. Z19  console),  and  Godbout System Support and  Interface  3/4 
  787. boards.
  788.  
  789.      Yamsys.h  is  not part of the  distribution;  one  of  the 
  790. configuration dependent header files is copied to yamsys.h.
  791.  
  792. SOME of these files are:
  793.  
  794.      Yamz89.h  is used for Z89 computers (check the port defin-
  795.      itions to be sure they agree with your usage.)
  796.  
  797.      Yamtuart.h is setup for a TUART board at 60H.
  798.  
  799.      XYAMRCPM.H describes an XMODEM configuration for CompuPro
  800.  
  801.      Yamkpr2.h  describes a Kaypro 2
  802.  
  803.      Yams3.h    describes a CompuPro System Support 1
  804.  
  805.      Yamint3    describes a CompuPro Interfacer 3/4
  806.  
  807.      Yamint     decribes a Compupro Interface 1/2
  808.  
  809.      One of these (Or one you write for your system) should  be 
  810. copied to yamsys.h before compiling the files.
  811.  
  812.      YAM  also  refrences some of the definitions in  BDSCIO.H. 
  813. When  cross-compiling a version of YAM for a different  system, 
  814. be  sure  to refrence a bdscio.h file suitable for  the  target 
  815. system.  Alternatively,  one  might #undef CDATA and any  other 
  816. definitions  which otherwise would speak with  forkked  tongue. 
  817. The Software Tools RCPM distributed versions of YAM assume that 
  818. your  BDSCIO.H  file has been modified to have an #include  for 
  819. HARDWARE.H in them. 
  820.  
  821.      Compilation  should  be with -e 6300 for all files and  -o 
  822. for YAM[2357] if operation at extreme baud rates is desired. If 
  823. the unsqueeze feature is enabled,  (or you have added some code 
  824. for autodial,  etc.) the externals need to start higher, try -e 
  825. 6800.  If the externals start below the end of code,  YAM  will 
  826. say  "urk"  and exit,  hopefully before doing  anything  REALLY 
  827. nasty. From Version 1.5 onward of the BDS C compiler, the CLINK 
  828. program will also complain to you at link time if the externals 
  829. overlap code.
  830.  
  831.      YAM can be made somewhat smaller if the -o is left out and 
  832. the  external  address is downsized accordingly.  To  make  the 
  833. smallest  YAM  possible,  define CDOS and RESTRICTED  and  then 
  834. leave off as many optional #defines as possible.
  835.  
  836.      A  UART select port scheme has been implemented for  those 
  837. with  multiple UARTs "bank selected" on the same port addresses 
  838. (i.e.  Godbout  Interfacer 3 or Morrow MultI/O users  etc.).  A 
  839. number of new defines have been added to the YAMuart.H  header. 
  840. Most  of the UART select code can be disabled by  appropriately 
  841. setting the MODEMUSER and CONUSER #defines,  this will generate 
  842. smaller  code.  Unfortunately  since   BDS 'C' does  not  allow 
  843. nested  #ifdefs some of this code is active all  the  time.  To 
  844. make  sure  this does not affect operation on  systems  without 
  845. UART "banking" simply set the UPORT #define to any port address 
  846. in your system which does nothing, i.e. any address where there 
  847. is no device.
  848.  
  849.      I  have  found  YAM  to be handy  for  transferring  files 
  850. between  adjacent  machines;  hence all the attention  to  high 
  851. speed operation.
  852.  
  853.      If your machine uses a different type of UART chip,  or  a 
  854. built-in  modem card,  then the yamsys.h and yam5.c files  will 
  855. need work.
  856.  
  857.      Proper  operation  of YAM cannot be guaranteed with BDS  C 
  858. versions prior to 1.50.   If you don't have that version,  send 
  859. 25  bucks  and  a copy of your software license (a   Xerox   of  
  860. your distribution disk showing it's label should do) to:
  861.  
  862.         BDS C Users Group
  863.         C/- Robert Ward
  864.         Dedicated Microsystems Inc
  865.         409 E Kansas ST
  866.         Yates Center, Kansas 66783
  867.  
  868. Versions before 1.46 are a definite no-no.
  869.  
  870.              *************************************
  871.              ********** PROPAGATING YAM **********
  872.              *************************************
  873.  
  874.      Often the question arises, "How do I get YAM (or whatever) 
  875. into this neat new machine with the *%!@$@ format disks?
  876.  
  877.      The b mode was put in just for you! First, cross-compile a 
  878. version  of YAM with a yamsys.h file appropriate for the target 
  879. machine.  Then,  connect the two machines RS232 ports together, 
  880. and  initialize  those  ports  so  they  talk  to  each  other. 
  881. Presumably,  YAM is running on the host machine.  Now run  ddt, 
  882. sid,  zsid,  dcon,  or  whatever and write a tiny program up in 
  883. fairly high memory (above the highest address used by YAM,  say 
  884. 7000h).
  885.  
  886. The program will:
  887.  
  888.  1.  Set HL to 100h
  889.  2.  Wait for UART for data available
  890.  3.  Input data from UART (Note: UART must be in 8 bit, no parity 
  891.      mode)
  892.  4.  Store data to memory (mov m,a)
  893.  5.  Increment HL
  894.  6.  Jump to 2 above.
  895.  
  896.      When the file is all sent,  interrupt the program, jump to 
  897. location 0.  Then you can save YAM.COM.  If you can't interrupt 
  898. this program without blowing it away,  you'll have to change it 
  899. to  detect the end of data (perhaps count the number  of  bytes 
  900. received  in the DE register) and make the program jump to loc-
  901. ation 0.
  902.  
  903.      Another possibility would be to unload the  YAM-target.COM 
  904. image  into a hex file (there are various programs around  that 
  905. are  the  reverse  of load.com).  Then run pip  in  the  target 
  906. machine  with  input from the serial port and output to a  file 
  907. using  pip's B parameter.  With the B  parameter,  pip  buffers 
  908. incoming data in memory untill an XOFF (Control-S) is received. 
  909. To get that,  send the file from the host with "YAM F file.hex" 
  910. and  from time to time hit two ^S's on the host  keyboard.  The 
  911. first  ^S stops the transfer,  the second will be passed to the 
  912. other machine where pip will see it.  When pip has written  out 
  913. the  buffer,  type ^Q on the host to resume.  (Be sure to  stop 
  914. often  enough so pip's buffer doesn't overflow.) (With pip,  go 
  915. slow  -300 baud is much better then typing it in by hand!)  (If 
  916. the target system seems to be echoing characters,  slowing down 
  917. the transfer with the t mode may help.) Finally,  load the file 
  918. with the target system's load command.
  919.  
  920.      Once you have a working YAM in the target  machine,  other 
  921. files  come  across effortlessly with the batch  file  transfer 
  922. option.
  923.  
  924. Happy propagation and may your machines trap fertile YAM's.
  925.      
  926.                      Interesting #define's
  927.  
  928. CDOS
  929.  
  930.      Makes  YAM work on CDOS operating system by deleting  CP/M 
  931.      2.2 operations such as user number, calculate file length, 
  932.      etc.  If  you have CP/M 1.4,  CDOS just might do the trick 
  933.      for you.
  934.  
  935. KBMASK
  936.  
  937.      This  is  normally 0177 to strip  parity  from  keyboarded 
  938.      characters,  but  may be 0377 if a full 8 bit keyboard  is 
  939.      used.
  940.  
  941. USERINIT
  942.  
  943.      Causes init() to call a user supplied function userinit().
  944.  
  945. TERMRESET
  946.  
  947.      A string enclosed in quotes which sets the terminal to the 
  948.      mode  desireable  for  the  term  function.  TERMRESET  as 
  949.      defined for the Z19 turns on wraparound.
  950.  
  951. RXNONO
  952.  
  953.      Define this as a string of characters,  any of which would 
  954.      cause  your terminal and/or cbios grief if not  suppressed 
  955.      by term function.
  956.  
  957. LOOPBACKNONO
  958.  
  959.      Define this as a string of characters,  none of which will 
  960.      be sent to the other end as a result of the U function.
  961.  
  962. STATLINE
  963.  
  964.      Define  this  if your terminal has an extra  (viz.,  25th) 
  965.      line  usable for status information which does not  scroll 
  966.      up  nor interfere with scrolling.  lpstat() writes to  the 
  967.      entire  status line,  clearing out any previous  contents. 
  968.      pstat()  writes  statrting  at  the  48th  position,   not 
  969.      disturbing any information written by lpstat().
  970.  
  971. MODEMSTUFF
  972.  
  973.      If you provide routines setbaud(),  readbaud(), bye(), and 
  974.      onhook(),  define MODEMSTUFF to exclude the default  dummy 
  975.      routines.
  976.  
  977. AUTODIAL
  978.  
  979.      If your modem supports autodial, write your own version of 
  980.      dial()   and  define  AUTODIAL  to  suppress  the  default 
  981.      routine.
  982.  
  983. MIERROR
  984.  
  985.      If  your uart has a separate register for error bits  (not 
  986.      the register that holds receive data  available),  mierror 
  987.      should  be an expression which returns non zero in case of 
  988.      overrun, framing, or other error, but not carrier dropout. 
  989.      This version of readline has not been tested.
  990.  
  991. MIREADYERROR
  992.  
  993.      Define  this if data available and the error bits  are  in 
  994.      the  same  register,  especially if reading that  register 
  995.      clears  some error bits,  or if the error bits  are  valid 
  996.      only if data available.
  997.  
  998. IOTYPE
  999.  
  1000.      This  defaults  to  char for i/o mapped systems  with  256 
  1001.      ports. This may be defined to unsigned or long for systems 
  1002.      with more ports (8086 or memory mapped i/o).
  1003.  
  1004. Z19
  1005.  
  1006.      Generates  output  for Z19  functions,  especially  status 
  1007.      (25th) line.
  1008.  
  1009. USQ
  1010.  
  1011.      Allows   the  type  command  to  automatically   recognize 
  1012.      squeezed files and display them in ASCII form.  Adds  1000 
  1013.      hex to program size.
  1014.  
  1015.                  ******** XYAM Differences ********
  1016.  
  1017.      XYAM   is   produced  by  defining  XMODEM  in  the   file 
  1018.      'yamsys.h'.  Consult  'yamz89xm.h' and 'yamx.sub'  for  an 
  1019.      example.  Ceratin  #defines  are especially applicable  to 
  1020.      XYAM:
  1021.  
  1022. LOGFILE
  1023.  
  1024.      All  files  sent  (includes  type  or  list  commands)  or 
  1025.      received  (r or t file) are stored with the  current  baud 
  1026.      rate in LOGFILE. Requires CP/M 2.2x.
  1027.  
  1028. RESTRICTED
  1029.  
  1030.      Certain commands and options are disabled.
  1031.      Filenames  with  '.BAD' extensions and files with $SYS  or 
  1032.      TAG2 bits set cannot be opened.  They will not appear with 
  1033.      DIR or DIRR commands.
  1034.  
  1035.      A  file with extension of '.COM' will be uploaded  with  a 
  1036.      '.OBJ' extension. Exisiting files cannot be overwritten.
  1037.  
  1038.      List  and Type will only display the first MAXLINES  lines 
  1039.      ina squeezed file.  Other files will be displayed in their 
  1040.      entirity.
  1041.  
  1042. CDO
  1043.  
  1044.      Define  a test for carrier drop out so that XYAM can  exit 
  1045.      when the connection is broken.
  1046.  
  1047. BYEPROG
  1048.  
  1049.      Bye, O and OFF commands chain to BYEPROG.COM if BYEPROG is 
  1050.      defined (as a string).
  1051.      For systems wishing to use a BYE.COM to request comments.
  1052.  
  1053. MAXLINES
  1054.  
  1055.      The  number of lines that List and Type will display of  a 
  1056.      squeezed file if RESTRICTED is defined. It is recommmended 
  1057.      that  MAXLINES  ususally  be defined as  80,  as  this  is 
  1058.      generally  enough to allow a user to decide if the  should 
  1059.      download a file with the S command.
  1060.  
  1061.                 Recent Revisions/Enhancements to YAM
  1062.  
  1063. 3.13 Added MAXLINES and ability to restrict display of squeezed 
  1064.      files to unsqueeze() in YAM7.  Replaced "magic" values for 
  1065.      Control  C and Control K with defines.  Tidied a bit  more 
  1066.      code. 04-March-1984. Bill Bolton
  1067.  
  1068. 3.12 The placement of newline characters in a lot of the  strings 
  1069.      has been re-arranged, so that they are more sane. i.e. every 
  1070.      command,  module, error message etc finishes with a newline,  
  1071.      rather than some issuing a newline at start,  others at end, 
  1072.      and others not at all.
  1073.  
  1074.      The receive (R) and send (S) commands dump and close buffers 
  1075.      first  before commencing any file transfers.  If capture was  
  1076.      on and buffer had 20000 characters,  they were lost when you 
  1077.      opened a receive file.
  1078.  
  1079.      Most  console  IO stuff is now in YAM11.C  which  is  styled 
  1080.      after  YAM5.C.  Direct console output goes to the  sendcon() 
  1081.      function  in  YAM11.C  which  is coded to do  what  ever  is 
  1082.      required on your system,  outp() to port,  bios(CONOUT) etc. 
  1083.      The  only  console IO not contained in YAM11 is one  or  two  
  1084.      bios(CONOUT) calls which should always be safe anyway  (your 
  1085.      BIOS  just HAS to work).  Note that sendcon functions  which  
  1086.      simply   vector console output to bios(conout) will probably 
  1087.      NOT support an XYAM version.
  1088.  
  1089.      The  moment()  function was re-coded so that it can  replace 
  1090.      keybrd(),  since  both of these were doing  essentially  the 
  1091.      same  job  with different time settings only.  If you  don't 
  1092.      seem  to  be  able to exit 'loop'  or  'test'  by   keyboard 
  1093.      bashing  (or  holding down repeat key) then increase  KTIME2 
  1094.      define (but only as much as needed, or  else  it reduces the 
  1095.      effectiveness of the test.)
  1096.  
  1097.      Sendline  has been altered slightly so it does not hang on a 
  1098.      locked out port.   e.g. if carrier is lost. All modem output 
  1099.      now  goes  via sendline(),  so that there  is  a  reasonable 
  1100.      certainty  that the characters get there,  and don't go to a 
  1101.      busy port.
  1102.  
  1103.      A  couple of single character printf()'s have been  replaced 
  1104.      by putch()'s. The status report has been shortened to fit on 
  1105.      a 64 character screen.
  1106.  
  1107.      A further step has been made towards a universal YAM without 
  1108.      the  need  for  a multiplicity of  source  files  for   each 
  1109.      "unusual"  machine.  (i.e.  SORYAM  APYAM  etc.).  The  only 
  1110.      machine  dependant bits should now be concentrated in YAM.H, 
  1111.      YAMSYS.H,  YAM5.C and YAM11.C  The files YAM.H,  YAM5.C  and 
  1112.      YAM11.C can be handled reasonably with "ifdef" conditionals.  
  1113.      YAMSYS.H    will   still  have  to  be  handled  with   file 
  1114.      substitutions.  For instance a  Sorcerer  user will need his 
  1115.      own   BDSCIO.H and YAMSYS.H (plus SORKEY.CRL)   but   should  
  1116.      be  able to use all  the  other  files without modification.
  1117.  
  1118.      To handle any special console initialisation,  two functions 
  1119.      are provided in YAM11.C.   A new FLAG called "Type" has been 
  1120.      added  to allow the TYPE function to work correctly in  XYAM 
  1121.      mode.  The  TYPE  function  now copies  all  console  output 
  1122.      through  "sendcon"  to "sendline" as  well,  when   compiled  
  1123.      with XYAM defined.
  1124.  
  1125.      To improve the security of RCPM systems the logging function 
  1126.      has been improved to include the time/date of the start of a 
  1127.      transfer  in  XYAM.LOG if a system clock is  available,  the 
  1128.      clock routine are enabled by a new ifdef called LOGCLOCK and 
  1129.      use  a new header file called CLOCK.H.   The clock  routines 
  1130.      are  in  YAM7.C and at present work with  a  Godbout  System 
  1131.      Support 1 clock.
  1132.   
  1133.      There  are numerous other small changes which are  generally 
  1134.      only  documented (if at all) in the comments at the start of 
  1135.      each module. 04/Jun/83. John Woolner and Bill Bolton
  1136. 3.11 Unreleased version. See 3.12 notes. May 1983. Bill Bolton 
  1137. 3.10 Changes  to  YAM1.C  & YAM5.C,  added 'loop'  &  'test'  for 
  1138.      loopback  testing  of communications channel.  Tidied  Bills 
  1139.      USART bank select code in YAM1.C,  YAM3.C and YAM5.C.  Added 
  1140.      SIO USART support (for Monroe computer) in YAM5.C. Fixed bug 
  1141.      in  receiving of pathnames,  (they MUST have a sector number 
  1142.      of  ZERO).   Directories  set for 3 or 4  columns by  define 
  1143.      DIRCOLS  in  YAMSYS.  Bug  in chat and "ta"  commands  which 
  1144.      prevented line feeds being sent to the remote system  fixed. 
  1145.      VERSION  define  moved to YAMSYS.H to make multiple  version 
  1146.      support easier. 06/Sep/82. John Woolner & Bill Bolton.
  1147. 3.09 Changes  to Yam1.c added 'exit','on' and 'quit' commands and 
  1148.      changed the 'off' command. Changes to Yam5.c added 2651 UART 
  1149.      routines and 'online' function. Commbyte external defined in 
  1150.      Yam.h. UART bank select code added in YAM1, Yam3, YAM5.
  1151.      17/Mar/82. Bill Bolton
  1152. 3.08 Added USERINIT option useful for some implementations. 
  1153.      11-14-81.
  1154. 3.07 Minor  change to yam1.c for benefit  of  memory-mapped 
  1155.      systems 11-11-81.
  1156. 3.06 IOTYPE added for memory mapped systems List command now 
  1157.      distinct from type.  Cosmetic changes to opentx(). 11-8-81.
  1158. 3.05 Added  automatic recognition and display  of  squeezed 
  1159.      files.  Inclusion of the unsqueeze feature (#define USQ) may 
  1160.      require clink -r 800 11-7-81.
  1161. 3.04 Added GOchar parameter, enhanced view mode 11-6-81.
  1162. 3.03 Number of sectors and xmsn time printed when  opening 
  1163.      files 11-5-81.
  1164. 3.02 Xyam resets user number when exec'ing BYEPROG. 
  1165.      11-01-81.
  1166. 3.01 Added INITBAUD.  Your YAM?????.h may need revision.
  1167.      10-31-81.
  1168. 3.00 Nomenclature changed to facilitate  differential  file 
  1169.      updates 10-25-81.
  1170. 2.34 Added era and NATHAN commands, O mode. 10-24-81.
  1171. 2.33 Changed Unixish "FILE" to struct _buf in YAM.H.
  1172.      10-21-81.
  1173. 2.32 Added BYEPROG define, deleted T, U, and W commands from 
  1174.      XYAM. 10-18-81.
  1175. 2.31 Corrected  tab expansion and kbd XON XOFF handling  in 
  1176.      yam3.c 10-17-81.
  1177. 2.30 Supports  CRC error checking  option  compatible  with 
  1178.      XMODEM45 10-15-81. Chat function now in both YAM/XYAM.
  1179. 2.24 Added  free  disk space report  on  a:  etc.  command, 
  1180.      Upchuck function.
  1181. 2.23 Added "crck" command.
  1182.   of  squeezed 
  1183.      files.  Inclusion of the unsqueeze featu