home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / COMMS / ZMP15.ARC / ZMP.DOC < prev    next >
Text File  |  1990-09-20  |  25KB  |  461 lines

  1.                      ** ZMP Documentation **
  2.  
  3. 1. Introduction.
  4.  
  5.      ZMP is a communications/file transfer program for CP/M which 
  6. performs  Xmodem,  Xmodem-1k  (often erroneously called  Ymodem), 
  7. true Ymodem and Zmodem file transfer protocols.  Although  tested 
  8. with Z80DOS,  ZRDOS and CP/M 2.2, there seems to be no reason why 
  9. it shouldn't work with CP/M 3 as well.  The only requirements are 
  10. a  Z80 processor (sorry about that!),  a computer running CP/M in 
  11. one of its various guises, with at least 45k of TPA (but the more 
  12. the better!), and a modem.
  13.      When  you  try to pack this many features into one  program, 
  14. you end up with a pretty large file.  The big problem occurs when 
  15. file  transfers are attempted:  unless you have at least 4-8k  of 
  16. buffer size,  you might as well use xmodem protocol. The approach 
  17. taken in ZMP is to use overlays for various functions,  accepting 
  18. the  time  taken to load these from disk.  Thus performance  will 
  19. vary depending on your disk setup:  if you have a hard disk and a 
  20. fast processor you will likely not notice the difference.  If, on 
  21. the  other hand,  you are running a Commodore 128 with CP/M on  a 
  22. 1571 drive,  there is no physical reason why ZMP won't work,  but 
  23. you might consider investing in a book to read while the overlays 
  24. load. (A suitable book to read might be a computer catalogue!).
  25.      The curious amongst you may notice that the beginning of the 
  26. ZMPX.COM  file has the magic 'Z3ENV' string,  but don't let  this 
  27. fool  you  into  thinking that you don't  need  to  add  terminal 
  28. characteristics  into the overlay if you have a ZCPR3 system.  It 
  29. has  proved  possible to persuade this particular C  compiler  to 
  30. access  ZCPR3's environment descriptor,  but not  for  ZMP.  Yet. 
  31. Perhaps later. In the meantime, the startup code is there for it.
  32.      In  order  to produce a program which would work  with  most 
  33. CP/M  systems,  the  Zmodem protocol performed by ZMP  is  fairly 
  34. simple.  The  transmit section uses 'Full Streaming with  Reverse 
  35. Interrupt',  as Chuck Forsberg calls it in his description of the 
  36. Zmodem protocol.  The receive section uses 'Segmented Streaming'. 
  37. This means that, if your system can do serial I/O and disk I/O at 
  38. the same time, ZMP does not take advantage of the faster transfer 
  39. rate  which this capability provides.  Since,  however,  I  can't 
  40. write and listen at the same time,  and neither can my  computer, 
  41. and  neither can the vast majority of CP/M computers,  it  seemed 
  42. the  best  approach to take.  Segmented Streaming means that  the 
  43. receive program tells the transmit program how big its buffer is. 
  44. The transmit program then sends just that much data,  then  waits 
  45. for  an acknowledge from the receiver.  We have encountered  some 
  46. Zmodem  programs  which send too much data in this  case:  errors 
  47. will appear if this happens,  but the protocol should recover and 
  48. the file will be received intact (we hope!).
  49.      The  string  which  ZMP passes to the receiving  program  to 
  50. interrupt  in  case of errors is likewise  simple.  Basically  it 
  51. causes  the  receiving program to send a control-C character  and 
  52. then wait for one second.  The receiver will then send its  ZRPOS 
  53. string, by which time ZMP, as the transmitter, should be ready to 
  54. receive it.
  55.  
  56.  
  57. 2. Customisation.
  58.  
  59.      ZMP  must be customised to suit your system.  This  involves 
  60. overlaying  the  un-installed copy of ZMP.COM (contained in  this 
  61. library  as  ZMPX.COM) with a user-written installation  overlay. 
  62. Some  hints  on writing this are given below;  there is  a  blank 
  63. overlay  file in this library,  or you may be able to obtain  one 
  64. for  your  computer  from the same place you  got  this  library. 
  65. This value is set at 0145 hex, and should stay there permanently. 
  66. See  the notes in this document,  and also the ZMP-OVL.UPD  file, 
  67. for more details on how to set up your overlay.
  68.      Once the installation overlay is written,  assemble it  with 
  69. M80 (or SLR or whatever),  use RELHEX to create a .HEX file,  and 
  70. use  MLOAD  to overlay it over the ZMPX.COM file to produce  your 
  71. very own ZMP.COM.
  72.  
  73. 3. Operation.
  74.  
  75.      The following files must be on the same disk and user  area, 
  76. which must be specified in your customisation overlay: 
  77.  
  78.           ZMCONFIG.OVR -- the configuration overlay
  79.           ZMINIT.OVR   -- the initialisation overlay
  80.           ZMTERM.OVR   -- the terminal overlay
  81.           ZMXFER.OVR   -- the file transfer overlay
  82.           ZMP.HLP      -- the help file (recommended).
  83.  
  84.      Start the program with ZMP.  The screen should clear, then a 
  85. title message is printed,  then ZMP enters terminal mode. You may 
  86. type  escape-H  for help at this point.  When you first  run  the 
  87. program,  the  first  thing  you  need to  do  is  to  enter  the 
  88. configuration  overlay  (type escape-C) and set all the  defaults 
  89. and  others to suit your system as required.  If you  don't  know 
  90. whether to change something or not, it's probably better to leave 
  91. it alone.  When you exit the configuration program, answer 'Y' to 
  92. the  'Make changes permanent' question.  ZMP.FON and ZMP.CFG will 
  93. be  produced  on your disk,  in the same drive/user area  as  the 
  94. above files. 
  95.  
  96.      Operation  of the program is controlled by escape  sequences 
  97. entered  in terminal mode.  Escape-H gives you a list of options. 
  98. Most of these are self-explanatory,  but they will be  summarized 
  99. here.
  100.  
  101. B - Send Break to modem.
  102.           If your overlay has been set up to send a break command 
  103.      to your UART, this command will perform this function. (Some 
  104.      remote systems may require a break sent to them to interrupt 
  105.      Zmodem transfers).
  106.  
  107. C - Configure system.
  108.           This function is designed to set system defaults,  save 
  109.      phone numbers etc. Changing baud rates etc. for a particular 
  110.      call  are better handled with the escape-L  option.  If  you 
  111.      answer Y or y to the 'make changes permanent?' question, the 
  112.      new  configuration will be saved in a ZMP.CFG file,  and the 
  113.      phone numbers in a ZMP.FON file for later use. The .CFG file 
  114.      is read, if it exists, when ZMP is first started.
  115.  
  116. D - Get disk Directory.
  117.           Gets  a directory of the current drive and  user  area. 
  118.      Change  to  another  with the  escape-F  command,  described 
  119.      below.  The  directory  will  be  sorted  and  will  include 
  120.      filesizes  unless  you  have so many files  on  the  current 
  121.      drive/user area that there is insufficient memory  available 
  122.      to  sort them.  In this case an unsorted directory,  without 
  123.      file sizes, will be printed.
  124.  
  125. F - Disk/File operations.
  126.           This  command is used to change the current  drive/user 
  127.      area,  to  reset a disk in the current drive,  and to  view, 
  128.      erase, print or rename files. There are also options to give 
  129.      a directory of the current drive/user area,  and to supply a 
  130.      new filename for the capture file. This filename may specify 
  131.      a different drive/user area than the current one. If capture 
  132.      mode  is on,  the status line printed when terminal mode  is 
  133.      entered will state the capture file name.
  134.  
  135. H - Get Help.
  136.           Prints the ZMP.HLP file. You may then either type CR to 
  137.      return to terminal mode, or enter the required function key.
  138.  
  139. I - Initiate phone call.
  140.           Reads the ZMP.FON file, if any, and prints it. You have 
  141.      four seconds after typing ESC I,  during which you may enter 
  142.      the  letter corresponding to the required number,  in  which 
  143.      case ZMP will dial it without printing a list. Otherwise the 
  144.      full phone list will be printed, and you will be asked which 
  145.      number you want.  Enter the identifying letter of the number 
  146.      you  wish  to call.  You can also enter numbers not  in  the 
  147.      list. Multiple numbers can be called by entering them separ-
  148.      ated  with  commas.  Dialling will then commence,  and  will 
  149.      continue  until  one of the numbers answers,  or  until  you 
  150.      abort  the process with the escape key.  Note that the  baud 
  151.      rate  used  for the call is that in the .FON file  for  that 
  152.      number,  or the current one if a new number is entered. This 
  153.      function  works  best if the strings in the .CFG  file  have 
  154.      been  set up for your modem,  and the initialisation  string 
  155.      sent  to  the  modem sets it into verbose  mode  for  status 
  156.      messages (ATV1).
  157.  
  158. K - Display Keyboard macros.
  159.           The configuration option allows up to ten macro keys to 
  160.      be defined, and these are recalled by typing escape followed 
  161.      by  the  numbers 0 to 9.  This function prints  the  current 
  162.      assignments.
  163.  
  164. L - Change Line settings.
  165.           This  function allows temporary changes of  baud  rate, 
  166.      stop bits, and data bits. There is also an option to operate 
  167.      terminal  mode in full duplex (locally typed characters  are 
  168.      sent but not displayed on the screen),  half duplex (locally 
  169.      typed characters are sent and also displayed on the screen), 
  170.      or  echo mode (as for half duplex,  but received  characters 
  171.      are echoed to the remote system as well as being displayed). 
  172.      Don't have two computers talking to each other in echo  mode 
  173.      unless  you're bored.  There are also options to  allow/dis-
  174.      allow  control characters above CR to be displayed in  term-
  175.      inal mode,  to strip the parity bit in terminal mode, and to 
  176.      re-initialise  the currently selected UART and modem at  the 
  177.      current baud rate.
  178.           Like IMP,  ZMP uses location 003C hex to store a  value 
  179.      corresponding to the present baud rate.  Then,  if you leave 
  180.      ZMP  and  later re-enter,  it checks location  003C.  If  it 
  181.      contains a legal value,  then that baud rate is set for you, 
  182.      otherwise  it sets the default baud rate as selected in  the 
  183.      .CFG file. 
  184.           You  will  also find in this menu an option  to  enable 
  185.      word  wrap in terminal mode,  and provision to switch to  an 
  186.      alternate port. The word wrap function is rather simplistic, 
  187.      but it does work. It functions only with characters typed at 
  188.      the keyboard, and is designed to wrap on 80-character lines. 
  189.      If  you are talking to a BBS which also has automatic  word-
  190.      wrap, it's probably best to leave this turned off, otherwise 
  191.      you  could end up with double-spaced lines.  But if you  are 
  192.      talking  to a human operator,  or if you are using a  packet 
  193.      radio TNC, turn it on.
  194.           The alternate port switch allows use of two ports  with 
  195.      ZMP. The status line (printed when terminal mode is entered) 
  196.      will  display which port is in use.  The configuration  menu 
  197.      allows  you to define which of the two is the default  port, 
  198.      selected when ZMP is started up.
  199.  
  200. M - Toggle capture mode in Memory.
  201.           Received characters will be saved in a buffer and saved 
  202.      in a file named 'ZMP.LOG' when the buffer fills or when  the 
  203.      command is entered again.  A control-S/control-Q sequence is 
  204.      sent  to the remote computer while the buffer is being saved 
  205.      in an attempt to stop it sending more data.
  206.  
  207. P - Toggle Printer.
  208.           This  is similar to the 'M'  command,  except  incoming 
  209.      characters  are sent to the printer.  This functions best if 
  210.      your  system  performs  the  BIOS  'List  Status'   function 
  211.      correctly.
  212.  
  213. Q - Quit the program.
  214.           Obvious.  You  will be asked if this is really what you 
  215.      want.  Any  entry other than N or n will exit to CP/M.
  216.  
  217. R - Receive a file.
  218.           You  will be asked which protocol you wish to use.  The 
  219.      default  is  ZMODEM.  The <X>modem option will allow  either 
  220.      128-byte blocks (standard XMODEM) or 1k blocks  (XMODEM-1k), 
  221.      since this is decided by the transmit end.  If an attempt is 
  222.      made  to receive a file which has the same name as a file on 
  223.      the current drive/user area, the current one will be renamed 
  224.      to  .BAK  and the new one will then  be  received  normally. 
  225.      (However,  see  below for the transfer resumption feature in 
  226.      ZMP v1.5 and above).
  227.           Note that the byte count on the screen is not kept  up-
  228.      to-date on Zmodem receive.  This is because the data arrives 
  229.      non-stop  and  there is simply no time available  with  non-
  230.      interrupt  driven computers to update the screen.  An update 
  231.      is performed if errors occur,  and when the computer  pauses 
  232.      to write to the disk. 
  233.           Starting  with version 1.4,  Zmodem file  receive  will 
  234.      commence  automatically upon receipt of the sender's ZRQINIT 
  235.      string.  Thus all you need to do is have the sender initiate 
  236.      the  transfer,  select  the  drive and user  area  you  wish 
  237.      the file(s) to be received on, and wait..
  238.           ZMP  v1.5  adds the ability to  resume  an  interrupted 
  239.      Zmodem  transfer.  If a Zmodem receive attempt fails (either 
  240.      because of manual cancellation or massive errors),  you will 
  241.      be asked if you wish to save the portion of the file already 
  242.      received. If not, it will be erased. If so, and a subsequent 
  243.      Zmodem  receive attempt would result in a file of  the  same 
  244.      name,  you are asked if you wish to resume the transfer.  If 
  245.      you  do,  transfer  will  start  at the  end  of  the  file. 
  246.      Otherwise  the  old file will be renamed to .BAK as  before. 
  247.      Since this feature is a function of the receiver,  it should 
  248.      work   with   any  Zmodem  implementation   which   conforms 
  249.      reasonably closely to Chuck Forsberg's standard. It has been 
  250.      tested  with ZMP and RZMP,  and I would like to hear of  any 
  251.      programs  with which it doesn't work.  No attempt is made to 
  252.      determine  if the files are the same up to the  commencement 
  253.      point:  the Zmodem protocol provides two ways in which  this 
  254.      may  be determined (file date and CRC),  but neither has yet 
  255.      been implemented in ZMP.
  256.  
  257. S - Send a file.
  258.           Operation   is   similar  to  the   receive   function. 
  259.      Additional   options  available  are  ASCII  send  and   the 
  260.      capability  of  distinguishing  between  normal  Xmodem  and 
  261.      Xmodem-1k.  In  Ymodem and Zmodem modes,  wildcard filenames 
  262.      and  multiple  filenames  are  allowed.  Multiple  filenames 
  263.      should be entered separated by spaces.  In all cases,  files 
  264.      on different drives/user areas may be specified by supplying 
  265.      a zcpr3-style du: prefix (e.g. C7:NEATPROG.WOW).
  266.           Byte  count information is displayed in Zmodem mode  on 
  267.      transmit. This causes noticeable breaks between packets, but 
  268.      it is felt that this is outweighed by the usefulness of  the 
  269.      information.  ZMP's Zmodem mode is capable of CRC-32  opera-
  270.      tion, although CRC-16 mode is used if the receiver is incap-
  271.      able of CRC-32.  Some other terminal programs,  however,  do 
  272.      strange  things  when faced with a receiving  program  which 
  273.      claims  it  can do CRC-32 (we have encountered one  for  the 
  274.      Amiga  which exhibits this problem).  If this  happens,  the 
  275.      esc-L  menu and the configuration overlay have an option  to 
  276.      disable CRC-32.
  277.  
  278. U - Execute user-defined overlay.
  279.           This  feature  is designed to allow execution of  user-
  280.      produced overlays,  and other protocols which won't fit into 
  281.      the   normal  transfer  overlay.   These  must   be   called 
  282.      ZMxxxxxx.OVR,  and must be linked to be loaded at a specific 
  283.      address  which will probably vary with different versions of 
  284.      ZMP.  For v1.5, this address is 03ABAh. I may produce a list 
  285.      of  available functions in the main ZMP.COM file for use  by 
  286.      these overlays if there is enough interest.
  287.           After  typing  ESC  U,  you will be  prompted  for  the 
  288.      overlay name.  The overlay will then be executed as  normal. 
  289.      An  example  of  a  user overlay  is  ZMYAPP.OVR,  which  is 
  290.      described  further  below.  Other  possibilities  include  a 
  291.      Kermit overlay,  but as this would be a lengthy project, and 
  292.      as I have no use at this time for a Kermit overlay,  whether 
  293.      or not it gets done depends on the level of interest  shown. 
  294.      If you are interested in a ZMP Kermit overlay, or if you can 
  295.      think   of   any  other  overlays  which   could/should   be 
  296.      implemented, please let me know.
  297.  
  298. X - Hangup.
  299.           This  function causes the modem to disconnect from  the 
  300.      phone line, by momentarily dropping DTR.
  301.  
  302. Y - Print screen.
  303.           Allows the current screen to be dumped to printer. Note 
  304.      that  this must be supported in the overlay:  most terminals 
  305.      are incapable of this function.  The standard overlay prints 
  306.      'This function not supported.'.  If you can make it work  on 
  307.      your system, good luck!
  308.  
  309. Z - Clear screen.
  310.           Allows  the  screen to be cleared.  Useful if it  fills 
  311.      with rubbish.
  312.  
  313.  
  314. 4. Hints for overlay writers. 
  315.  
  316.      Most  of the code is quite straight forward and will present 
  317. no problem. The section most likely to cause trouble is that part 
  318. concerned  with setting the required baud rate  and  (especially) 
  319. the  code for setting the correct parity,  number of stop  bit(s) 
  320. and data bits. 
  321.  
  322.      We  suggest  that you first get the main part  of  the  code 
  323. going by putting a return in the init: section at the point where 
  324. it  says "put your code here" This will let you check the rest of 
  325. the  code.  If the opening screen looks 'neat and tidy' then  you 
  326. know that 1) the code is in the right place,  and 2) your  cursor 
  327. addressing is working. Check the I/O by talking to your modem and 
  328. then  by  exchanging a file with another zmodem user/board  after 
  329. you set the I/O chip up with another program such as IMP. 
  330.  
  331.      Now  get the baud-setting working and then finally the  bit-
  332. bashing required to set the parity, etc.
  333.  
  334. 5. Other information.
  335.  
  336. a) ZMP at higher baud rates.
  337.           When  I  first produced ZMP,  I was more interested  in 
  338.      producing  a  universal Zmodem program than  anything  else. 
  339.      Originally (several C compilers ago!) I had difficulty  get-
  340.      ting it to work even at 300 baud,  and so little thought was 
  341.      given to accommodate higher transmission speeds.  In partic-
  342.      ular, there is a "designed-in" bug/feature which would prob-
  343.      ably preclude ZMP working at much over 4800 baud.  The prob-
  344.      lem is in the user overlay,  in the mrd:  routine. The requ-
  345.      irement here is to have a routine which returns either  when 
  346.      a  character  is  available at the modem (in which  case  we 
  347.      return TRUE), or 100 mS has elapsed (in which case we return 
  348.      FALSE).  The catch is that I used 100 x 1 mS waits,  between 
  349.      which  we test for a character.  A little  calculation  will 
  350.      show that a 9600 baud character will take a little over 1 mS 
  351.      to transfer,  and 19200 baud characters take half this time. 
  352.      Thus  we  are practically guaranteed to miss  characters  at 
  353.      19200  baud,  and  even  9600 baud characters  leave  little 
  354.      processing timeto spare.  Two possible ways to overcome this 
  355.      are:
  356.  
  357.      i)   Make the wait time shorter.  Thus we could wait 1000  x 
  358.           100 uS periods instead. This, however, makes the actual 
  359.           wait   time   more  unpredictable,   since   subroutine 
  360.           call/return times are comparable to the wait  time.  It 
  361.           also just puts off the evil day.
  362.  
  363.      ii)  Use  a  hardware timer to determine whether 100 mS  has 
  364.           elapsed.  This is the preferred approach. Thus the mrd: 
  365.           routine  would loop continuously,  exiting when  either 
  366.           there was a character at the modem or when the hardware 
  367.           timer expired.  An embryo CP/M-68K version of ZMP using 
  368.           this approach has proved capable of reliable  transfers 
  369.           at  19,200  baud  (although one must admit that  it  IS 
  370.           running a 68010 at 10 MHz!).
  371.  
  372.           I  would  like  to hear from anyone  who  has  had  any 
  373.      success with either of these two approaches.
  374.  
  375. b) The ZMYAPP overlay.
  376.  
  377.           This  performs the amateur packet radio YAPP  protocol, 
  378.      and  is accessed by the ESC-U function.  Operation is pretty 
  379.      well  obvious,  but there are a couple of problems with  it, 
  380.      depending on the hardware capabilities of your computer. The 
  381.      main one is that, if the file to be received is greater than 
  382.      the buffer size in ZMP,  the ZMP computer MUST be capable of 
  383.      hardware handshaking (CTS/RTS). There appears to be no other 
  384.      way  of stopping a TNC (which must be in  transparent  mode) 
  385.      while we write the buffer to disk. The same thing will occur 
  386.      if  the  TNC buffer fills:  if the TNC cannot stop  the  ZMP 
  387.      program with CTS (DTR???) then its buffer will overrun.
  388.           The ZMYAPP overlay works fine with small files.  Again, 
  389.      I would like to hear from anyone who has success with larger 
  390.      files on different machines.
  391.  
  392. 6. Acknowledgements.
  393.  
  394.      ZMP was developed from Hal Maney's Heath-specific HMODEM II. 
  395. I  would like to thank Hal for writing HMODEM:  CP/M  users  have 
  396. been without ZMODEM capability for far too long.  As requested in 
  397. the  source  file,  acknowledgement  is  given  to  him  therein. 
  398. Appreciations  also go to the authors of the Hi-Tech C  compiler, 
  399. which proved to be capable of producing fast and compact code for 
  400. Z80 machines.
  401.      ZMP  in  its various incarnations is refined by  suggestions 
  402. from you,  the user.  In particular,  I would like to thank  Mike 
  403. Allen,  Richard  Kopplin  and  Fred Haines for  their  invaluable 
  404. suggestions.  I may sometimes be a little slow at implementation, 
  405. but I usually get there eventually!  Fred Haines has also  kindly 
  406. offered  to  be  the  U.S.  collection  point  for  bug  reports, 
  407. suggestions  etc.  His  address  appears at the  bottom  of  this 
  408. document,  and  he'll forward them to me via what he calls  'U.S. 
  409. Snail'.  I  will  try  and respond using what I  call  'Australia 
  410. Pest'.
  411.      I  would also like to thank Lindsay Allen,  sysop of  Z-Node 
  412. 62.  His name was removed from the original zmp11 title screen at 
  413. his  own request,  since I had done most of the work in modifying 
  414. Hmodem to work on other machines. Without Lindsay's encouragement 
  415. at   difficult  times,   suggestions  as  to  how  to  go   about 
  416. recalcitrant procedures,  and experience in file  transfers,  ZMP 
  417. would not have been produced. Thank you.
  418.  
  419.  
  420. 7. Finally...
  421.      The files contained in this library are placed in the public 
  422. domain.  Just don't sell it,  claim you wrote it,  or do anything 
  423. similar that might annoy me.  Above all,  don't bother trying  to 
  424. sue  me  if it doesn't work,  or you tripped over  the  disk,  or 
  425. anything  similar.  I haven't distributed the source files partly 
  426. due to the size of them,  partly due to the fact that compilation 
  427. is messy (several modifications were needed to "standard" library 
  428. functions!),  and partly due to the fact that there's still  work 
  429. to do on them. Besides, I feel a certain fatherly feeling towards 
  430. ZMP,  having spent most of my spare time for the last four months 
  431. working on it. So here's the deal: I will continue to support ZMP 
  432. (and  RZMP)  until I get sick of it.  This could take an  unknown 
  433. amount of time!  At that point,  I will release the sources  into 
  434. the RCP/M community, and you may make of them what you will.
  435.      ZMP has a remote system relative,  called RZMP.  This allows 
  436. Zmodem  transfers  to  and from  remote  systems.  It  should  be 
  437. available from the same place from which you obtained ZMP.
  438.      I  have also produced an extremely cut-down version  of  ZMP 
  439. which  runs  under CP/M-68K,  currently running quite well  as  a 
  440. single  .68K  file (no overlays!) on a system with 128k bytes  of 
  441. memory.  If  there  is enough interest from CP/M-68k  users  (are 
  442. there any??), I could be persuaded to upgrade this version to the 
  443. point where it could be released.
  444.      Comments and suggestions are welcome. Bug reports are not so 
  445. welcome, but we'd like them anyway! Send either to:
  446.  
  447.                             Z-Node 62
  448.                     Perth, Western Australia
  449.                        (061+) 09-450-0200
  450.                      (Soon to be on FidoNet)
  451.  
  452.      U.S. users may send reports/comments to:
  453.  
  454.                           Fred Haines,
  455.                  733 North King's Road, Apt. 356
  456.                   Los Angeles, California 90069
  457.  
  458.                -- Ron Murray
  459.                     26th March, 1989
  460. te  systems.  It  should  be 
  461. available from the same place fr