home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / xprzedza.lzh / README.RWM < prev    next >
Text File  |  1992-11-30  |  10KB  |  219 lines

  1.  
  2.   This is the only partly documented version of xprzedzap for use with
  3. the new beta's of Welmat.  When Welmat itself is close to an official
  4. release, I will be separately releasing all the XPR's that are written 
  5. as part of the project as well.  At this moment there is xprzedzap 
  6. (For ZedZip/ZedZap fidonet sessions), xprfts.library (For FTS-1, DietIFNA
  7. and soon SeaLink  transfers) and xprclock.library (For calling an atom 
  8. clock time base to set your Amiga's clock).  Work on a few different
  9. bi-directional transfer ideas has started, but no finished library yet
  10. exists.
  11.  
  12.   This archive is a derivative of the work that Yves did to produce the
  13. origional xprzedzap.library that he sent me.  I have fixed a few fidonet
  14. transfer related issues that would not affect the library in a BBS/Term
  15. environment.  I have also started to add some of the possible extensions
  16. that might be added to the XPR interface (Those interested should check
  17. out the function updstatus() in utils.c).  It should be noted that
  18. the method described by Yves relating to the numbers in the 
  19. xpru_msg field are not (and will not) be used in Welmat.  These
  20. fields will likely be reverted back to normal text at some later
  21. date.
  22.  
  23.   I will be attempting to keep the latest versions of the various XPR
  24. libraries up for fidonet file request on  1:163/109 at 2400bps, and 
  25. on 1:163/139 at 14400bps.  If you wish to help work on these libraries, please
  26. let me know ahead of time so that I can make the latest available for
  27. request.  If you do any changes, please send me a diff of your
  28. changes so that I can make these available to everyone.  I am very
  29. easy to get ahold of.
  30.  
  31. Thanks to Skip Watson (ciaran@aldhfn.akron.oh.us) who has offered to
  32. host a mailing list to further the development of the XPR specification,
  33. we have now started discussions on the future directions that XPR can
  34. take.  I strongly encourage any authors interested in writing
  35. hosts or protocols, whether freely available, shareware or commercial
  36. to please join us.
  37.  
  38.  
  39. For joining the list:    
  40.  
  41. xpr-request@aldhfn.akron.oh.us    with "subscribe user@site" as the body
  42.  
  43. For posts to the list:
  44.  
  45. xpr@aldhfn.akron.oh.us
  46.  
  47. ************************************************************************
  48.  
  49. From: jbickers@templar.actrix.gen.nz (John Bickers)
  50. Date: Mon, 23 Nov 92 08:17:38 PST
  51. To: xpr@aldhfn.akron.oh.us
  52. Subject: A FAQ.
  53.  
  54.     Here's the text of the FAQ as it stands now. If you have something
  55.     to say about it, please do so. It would also be nice to see more
  56.     people on the list say whether they support, disagree with, or are
  57.     indifferent to, the various issues.
  58.  
  59.     ------------------------------ 8< ------------------------------
  60.  
  61.  
  62.     XPR Science Monitor                                       22.11.92
  63.  
  64.  
  65.     Note that "host" refers to the application using an XPR library,
  66.     2.0 is the current version of the XPR specification, and 3.0 is
  67.     the future version the XPR mailing list was created to discuss.
  68.  
  69.  
  70. **> UNSRESOLVED ISSUES
  71.  
  72.     1.  How to pass host data (eg, a4 or an XPR_IO pointer) to a
  73.         callback routine.
  74.  
  75.     There are basically two ideas, referred to below as A and B. A is
  76.     to have each top level XPR library routine accept an extra 32-bit
  77.     parameter, which it passes on to each callback routine. B is to
  78.     add a field to the XPR_IO structure specifically for host data,
  79.     then have the library pass a pointer to the XPR_IO structure as an
  80.     extra parameter to each callback routine.
  81.  
  82.     2.  How to extend the specification to allow for the passing of
  83.         these extra values.
  84.  
  85.     WRT A, the top level XPR library routines can easily be expanded
  86.     to take an extra parameter. Older hosts that call the new routines
  87.     will simply pass a random value through. Because their older
  88.     callbacks won't make use of this value anyway, it doesn't matter.
  89.  
  90.     WRT B, the XPR_IO structure can be extended by placing a magic
  91.     cookie value in a new field so a 3.0 library can tell that it has
  92.     been passed a 3.0 XPR_IO structure. Then the host field can be
  93.     added somewhere after the cookie. An older library will simply
  94.     ignore the extra fields, and an older host will not create the
  95.     cookie.
  96.  
  97.     3.  How should the callback extension work, to cater for new
  98.         callbacks that know about the extra parameter?
  99.  
  100.     The proposed solution is to use the callback extensions mechanism
  101.     in the 2.0 spec. to add a new callback called xpr_updateio(),
  102.     which must be called by a 3.0 XPR library during XPRSetup(). The
  103.     existence of this field tells the library that the host is 3.0
  104.     aware. If XPRSetup() completes and this callback routine was
  105.     called, then the host knows the library is 3.0 aware.
  106.  
  107.     The proposed function for this routine is to change the callback
  108.     slots in the XPR_IO routine to point to routines that expect the
  109.     extra parameter passed by the 3.0 spec. The host would first set
  110.     the XPR_IO up to point to 2.0 routines, then xpr_updateio() would
  111.     change the callback slots to point to 3.0 routines.
  112.  
  113.     4.  How can a transfer involving multiple files indicate a success
  114.         or failure status for each file in the batch?
  115.  
  116.     The proposed solution is that xpr_update() be used for each file
  117.     with an xpru_updatemask of XPRU_FILENAME|XPRU_STATUS, and the
  118.     success or failure status (XPRU_SUCCESS or XPRU_FAILURE) in
  119.     xpru_status.
  120.  
  121.     5.  Should the XPR structures contain cookies, so pointers to them
  122.         can be identified or verified?
  123.  
  124.     Current thinking is that if cookies are used, it should not be
  125.     necessary to check them.
  126.  
  127.     6.  Is there a problem writing a bi-directional transfer protocol
  128.         as an XPR library?
  129.  
  130.     Currently xpr_update() is designed to show the progress of one
  131.     file being transferred.
  132.  
  133.     7.  Should XPR libraries be requested not to fracture the stack
  134.         before calling a callback routine?
  135.  
  136.     The reason for this is that it means the stack trick in 1d below
  137.     can be used with less risk. Arguments against are that it should
  138.     not be necessary for a host to implement solution 1d anyway, that
  139.     it may not be reliable, and that the stack is just a push/pop
  140.     mechanism that should not be relied upon across function calls.
  141.     Arguments for are that it can be necessary under the 2.0 spec. to
  142.     do this sort of thing, and that the host should be able to expect
  143.     the stack to conform to that allocated by the OS for the host's
  144.     task.
  145.  
  146.  
  147. **> POSSIBLE SOLUTIONS TO SOME PROBLEMS
  148.  
  149.     1.  How to get a handle on host information within a callback
  150.         routine, under the 2.0 spec.
  151.  
  152.     1a  If only one handle is required per task, maintain a list of
  153.         handles paired with task addresses. The callback routine can
  154.         then use FindTask() and scan this list for a matching entry.
  155.         You need access to your data segment (a4) to be able to get at
  156.         this list.
  157.  
  158.     1b  If only one handle is required per task, use tc_Userdata, a
  159.         field in the Exec task structure. The callback routine can
  160.         then use FindTask(NULL)->tc_Userdata. This is very useful when
  161.         the data segment (a4) is not available, for example when
  162.         writing residentable programs.
  163.  
  164.     1c  If only one handle is required per data segment (a4), and this
  165.         data segment is available, simply use a global variable.
  166.  
  167.     1d  A somewhat risky solution, if a4 and tc_Userdata are not
  168.         available, is to push a magic cookie and the handle onto the
  169.         stack before calling an XPR library routine. Then the callback
  170.         routine can search back up the stack for the cookie, and thus
  171.         locate the handle. This won't work if the XPR library
  172.         fractures the stack before calling the callback routine, a
  173.         feature that some compilers support.
  174.  
  175.     2.  How can an a host tell whether individual files in a batch
  176.         file transfer were transmitted successfully, under the 2.0
  177.         spec?
  178.  
  179.     2a  Assumptions can be made in the xpr_open() callback routine
  180.         that the previous file was successful etc. Information from
  181.         other callback routines can be combined with this to add
  182.         more depth to the result. For example, if xpr_open() is
  183.         called and the last xpr_update() on the previous file did not
  184.         show xpru_filesize and xpru_bytes as being equal, then one
  185.         could assume that the previous file failed. All this is very
  186.         dubious.
  187.  
  188.  
  189. **> AGREED SOLUTIONS
  190.  
  191.     The more people add their support to the issues in "UNRESOLVED
  192.     ISSUES", the quicker they'll be resolved and be listed here.
  193.  
  194.  
  195. **> AGREED MODIFICATIONS TO DOCUMENTATION
  196.  
  197.     1.  XPR libraries must not modify tc_Userdata. That should be left
  198.         to the host level. Amongst other considerations, using this
  199.         field would break VLT.
  200.     ------------------------------ 8< ------------------------------
  201.  
  202. --
  203. *** John Bickers, TAP.                   jbickers@templar.actrix.gen.nz ***
  204. ***    "Radioactivity - It's in the air, for you and me" - Kraftwerk    ***
  205.  
  206. ************************************************************************
  207.  
  208.   As well as the above, talk of asynchronous I/O, speed optimizations,
  209. methods to set and read file timestamps, etc are being
  210. discussed.  A log of the messages is being kept, so old messages
  211. can be received if the desire exists.
  212.  
  213.  
  214.  Russell McOrmond, Ottawa Ontario, Canada    
  215.  Freenet: aa302@freenet.carleton.ca (Faster) 
  216.  Home: rwm@Atronx.OCUnix.On.Ca               
  217.  FidoNet 1:163/109        Current WELMAT     
  218.  Welmat Help 1:1/139    'keeper of sources'.
  219.