home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 142.lha / DNet / dnet / dnet.h < prev    next >
C/C++ Source or Header  |  1986-11-21  |  5KB  |  173 lines

  1.  
  2. /*
  3.  *  DNET.H
  4.  *
  5.  *  DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
  6.  *
  7.  */
  8.  
  9. #define DNET_H
  10.  
  11. typedef unsigned char    ubyte;
  12. typedef unsigned short    uword;
  13. typedef unsigned long    ulong;
  14.  
  15. typedef struct MsgPort        PORT;
  16. typedef struct timerequest  IOT;
  17. typedef struct IOStdReq     IOR;
  18. typedef struct List        LIST;
  19. typedef struct Node        NODE;
  20. typedef struct Process        PROC;
  21. typedef struct Message        MSG;
  22.  
  23. #include "/dnet/channel.h"
  24.  
  25. #ifndef MAX(a,b)
  26. #define MAX(a,b) (((a)>(b))?(a):(b))
  27. #endif
  28.  
  29. #define PKT struct _PKT
  30. #define PNODE    struct _PNODE
  31.  
  32. #define BTOC(yow)           ((ubyte *)((long)(yow) << 2))
  33. #define DNETPORTNAME        "DNET.UNIT."
  34. #define OFFSET(ptr,elem)    ((long)((char *)&(ptr)->elem - (char *)(ptr)))
  35.  
  36. #define EMPTY    0    /*  empty (sent)                    */
  37. #define READY    1    /*  data ready (not sent yet)       */
  38.  
  39. #define MAXCHAN 128    /*  Max # of channels supported     */
  40. #define SYNC    0xFF    /*  SYNC character            */
  41. #define MAXPKT    200    /*  maximum packet size         */
  42. #define MINPKT    32    /*  minimum maximum packet size
  43.                 (for priority scheme)           */
  44.  
  45. #define OVERHEAD    7    /*  for packets with data        */
  46.  
  47. PNODE {
  48.     NODE    node;
  49.     char    name[32];
  50.     ulong   seg;
  51. };
  52.  
  53. PKT {
  54.     uword   iolength;    /*  send: length of packet, recv: length of data    */
  55.     ubyte   state;    /*  EMPTY, READY                    */
  56.  
  57.     ubyte   sync;    /*  THE PACKET        */
  58.     ubyte   ctl;
  59.     ubyte   cchk;
  60.     ubyte   lenh;
  61.     ubyte   lenl;
  62.     ubyte   data[MAXPKT+2];
  63. };
  64.  
  65.             /*  RECEIVER STATES            */
  66. #define RS_SYNC 0        /*    Waiting for sync        */
  67. #define RS_CTL    1        /*    Waiting for command        */
  68. #define RS_CCHK 2        /*    Waiting for check byte        */
  69. #define RS_LEN1 3        /*    Waiting for MSB length byte    */
  70. #define RS_LEN2 4        /*    Waiting for LSB length byte    */
  71. #define RS_DATA 5        /*    Waiting for data & checksum    */
  72.  
  73. #define DNCMD_OPEN    32  /*    Application open        */
  74. #define DNCMD_SOPEN    33  /*    Server open            */
  75. #define DNCMD_CLOSE    34  /*    Close a channel         */
  76. #define DNCMD_EOF    35  /*    Will no longer write to channel */
  77.  
  78. #define DNCMD_WRITE    36  /*    Write data to a channel     */
  79. #define DNCMD_QUIT    37  /*    Kill the DNET server        */
  80. #define DNCMD_IOCTL    38
  81.  
  82.                 /*  REQUEST TYPES        */
  83. #define RTO_REQ     1   /*    Network read timeout        */
  84. #define WTO_REQ     2   /*    Network write-ack timeout    */
  85. #define RNET_REQ    3   /*    Network read data        */
  86. #define WNET_REQ    4   /*    Network write data sent     */
  87. #define PKT_REQ     5   /*    Returned packets from servers    */
  88. #define OPEN_REQ    6
  89. #define IGWNET_REQ    7
  90.  
  91.                     /*    PACKET CONTROL BYTE */
  92. #define PKF_SEQUENCE    0xE0    /*  Sequence #            */
  93. #define PKF_DATA    0x10    /*  1-65535 bytes        */
  94. #define PKF_RESERVED    0x08    /*  reserved bit        */
  95. #define PKF_MASK    0x07    /*  command mask        */
  96.  
  97. #define PKCMD_WRITE    1    /*  A DATA packet        */
  98. #define PKCMD_CHECK    2    /*  Request ACK or NAK for win    */
  99. #define PKCMD_ACK    3    /*  ACK a window        */
  100. #define PKCMD_NAK    4    /*  NAK a window        */
  101. #define PKCMD_RESTART    5    /*  Restart            */
  102. #define PKCMD_ACKRSTART 6    /*  Restart Acknowledge     */
  103. #define PKCMD_RESERVE3    7
  104.                     /*    CHANNEL COMMANDS    */
  105. #define SCMD_SWITCH    0x00    /*  switch active channel #    */
  106. #define SCMD_OPEN    0x01    /*  open a channel        */
  107. #define SCMD_CLOSE    0x02    /*  close a channel        */
  108. #define SCMD_ACKCMD    0x03    /*  ack an open/close request    */
  109. #define SCMD_EOFCMD    0x04    /*  Reof or Weof        */
  110. #define SCMD_QUIT    0x05    /*  crash dnet            */
  111. #define SCMD_IOCTL    0x06    /*  ioctl            */
  112.  
  113. #define SCMD_DATA    0x08    /*  stream command, DATA    */
  114.  
  115. #define CHAN_FREE    0x01    /*  free channel        */
  116. #define CHAN_ROPEN    0x02    /*  remote open, wait port msg    */
  117. #define CHAN_LOPEN    0x03    /*  local open, wait reply    */
  118. #define CHAN_OPEN    0x04
  119. #define CHAN_CLOSE    0x05    /*  see flags            */
  120. #define CHANF_ROK    0x01    /*  NOT read eof        */
  121. #define CHANF_WOK    0x02    /*  remote will accept data    */
  122. #define CHANF_LCLOSE    0x04
  123. #define CHANF_RCLOSE    0x08
  124.  
  125. extern void  *CreatePort();
  126. extern void  *GetMsg();
  127. extern void  *RemHead();
  128. extern void  *AllocMem();
  129. extern void  *FindPort();
  130. extern void  *FindTask();
  131. extern void  *ArbitrateNext();
  132. extern void  *CreateProc();
  133.  
  134. #ifndef NOEXT
  135. extern IOT Rto;            /*  Read-Timeout/reset           */
  136. extern IOT Wto;            /*  Write-Timeout/retry           */
  137. extern IOR *RNet;           /*  read-request            */
  138. extern IOR *WNet;           /*  write-request           */
  139. extern PKT Pkts[9];
  140. extern PKT *Raux;           /*  next packet in           */
  141. extern PKT *RPak[4];
  142. extern PKT *WPak[4];
  143. extern PORT *DNetPort;           /*  Remote Command/Control in       */
  144. extern PORT *IOSink;           /*  Return port for ALL IO       */
  145. extern CHAN Chan[MAXCHAN];
  146. extern LIST TxList;           /*  For pending DNCMD_WRITE reqs.   */
  147. extern LIST SvList;
  148. extern ubyte Rto_act;
  149. extern ubyte Wto_act;
  150. extern uword RChan;
  151. extern uword WChan;
  152. extern uword RPStart;
  153. extern uword WPStart;
  154. extern uword WPUsed;
  155. extern uword RState;
  156. extern ubyte DDebug;
  157. extern ubyte Restart;
  158. extern ubyte DeldQuit;
  159. extern ubyte AutoHangup;
  160. extern ulong NumCon;
  161. extern ulong WTimeoutVal;
  162. extern ulong RTimeoutVal;
  163. extern long Baud;
  164. extern char *HostName;        /*    The Amiga's HostName    */
  165.  
  166. extern ubyte RestartPkt[3];
  167. extern ubyte AckPkt[8][3];
  168. extern ubyte NakPkt[8][3];
  169. extern ubyte CheckPkt[8][3];
  170.  
  171. #endif
  172.  
  173.