home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 56 / af056sub.adf / parnfs.lha / netio2.c < prev    next >
C/C++ Source or Header  |  1993-12-02  |  2KB  |  89 lines

  1. /*
  2.  * $Id: netio2.c,v 1.1 1993/12/02 20:45:46 Rhialto Exp $
  3.  * $Log: netio2.c,v $
  4.  * Revision 1.1  1993/12/02  20:45:46  Rhialto
  5.  * Initial revision
  6.  *
  7.  *
  8.  * Network file system: network I/O for the server only.
  9.  * This version for PARNET.DEVICE.
  10.  */
  11.  
  12. #include "netfs.h"
  13. #include "devices/parnet.h"
  14.  
  15. #ifdef DEBUG
  16. #   include "syslog.h"
  17. #else
  18. #   define    debug(x)
  19. #endif
  20.  
  21. Prototype LONG DoReply(struct IOParReq *io, Packet *pkt, ULONG size);
  22.  
  23. LONG
  24. DoReply(struct IOParReq *io, Packet *pkt, ULONG size)
  25. {
  26.     int         dest = pkt->p_Origin;
  27. #ifdef DEBUG
  28.     int         try = 0;
  29. #endif
  30.     for(;;) {
  31. #ifdef DEBUG
  32.     if (++try > 1)
  33.         debug(("*** DoReply try %d error %d len %d actual %d ->%d\n",
  34.              try, io->io_Error, size, io->io_Actual, dest));
  35. #endif
  36.     io->io_Command = CMD_WRITE;
  37.     io->io_Addr    = dest;
  38.     io->io_Data    = pkt;
  39.     io->io_Length  = size;
  40.     io->io_Data2   = NULL;
  41.     io->io_Length2 = 0;
  42.  
  43.     pkt->p_Type    = pt_Reply;
  44.     pkt->p_Origin  = MyAddr;
  45.  
  46.     if (DoIO((struct IORequest *)io) == 0)
  47.         break;
  48.     /* Be friendly - delay a bit */
  49.     Delay(2L);
  50.     if (SetSignal(0L, 0L) & SIGBREAKF_CTRL_C)
  51.         return io->io_Error;
  52.     }
  53.  
  54.     return 0;
  55. }
  56.  
  57. Prototype LONG DoReplyAsync(struct IOParReq *io, Packet *pkt, ULONG size);
  58.  
  59. LONG
  60. DoReplyAsync(struct IOParReq *io, Packet *pkt, ULONG size)
  61. {
  62.     int         dest = pkt->p_Origin;
  63. #ifdef DEBUG
  64.     int         try = 0;
  65. #endif
  66.     for(;;) {
  67. #ifdef DEBUG
  68.     if (++try > 1)
  69.         debug(("*** DoReply try %d error %d len %d actual %d\n",
  70.              try, io->io_Error, size, io->io_Actual));
  71. #endif
  72.     io->io_Command = CMD_WRITE;
  73.     io->io_Addr    = dest;
  74.     io->io_Data    = pkt;
  75.     io->io_Length  = size;
  76.     io->io_Data2   = NULL;
  77.     io->io_Length2 = 0;
  78.  
  79.     pkt->p_Type    = pt_AsyncReply;
  80.     pkt->p_Origin  = MyAddr;
  81.  
  82.     debug(("DoIO pt_AsyncReply to %d\n", io->io_Addr));
  83.     if (DoIO((struct IORequest *)io) == 0)
  84.         break;
  85.     if (SetSignal(0L, 0L) & SIGBREAKF_CTRL_C)
  86.         return io->io_Error;
  87.     }
  88. }
  89.