/* * DNET.H * * DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved. * */ #define DNET_H typedef unsigned char ubyte; typedef unsigned short uword; typedef unsigned long ulong; typedef struct MsgPort PORT; typedef struct timerequest IOT; typedef struct IOStdReq IOR; typedef struct List LIST; typedef struct Node NODE; typedef struct Process PROC; typedef struct Message MSG; #include "/dnet/channel.h" #ifndef MAX(a,b) #define MAX(a,b) (((a)>(b))?(a):(b)) #endif #define PKT struct _PKT #define PNODE struct _PNODE #define BTOC(yow) ((ubyte *)((long)(yow) << 2)) #define DNETPORTNAME "DNET.UNIT." #define OFFSET(ptr,elem) ((long)((char *)&(ptr)->elem - (char *)(ptr))) #define EMPTY 0 /* empty (sent) */ #define READY 1 /* data ready (not sent yet) */ #define MAXCHAN 128 /* Max # of channels supported */ #define SYNC 0xFF /* SYNC character */ #define MAXPKT 200 /* maximum packet size */ #define MINPKT 32 /* minimum maximum packet size (for priority scheme) */ #define OVERHEAD 7 /* for packets with data */ PNODE { NODE node; char name[32]; ulong seg; }; PKT { uword iolength; /* send: length of packet, recv: length of data */ ubyte state; /* EMPTY, READY */ ubyte sync; /* THE PACKET */ ubyte ctl; ubyte cchk; ubyte lenh; ubyte lenl; ubyte data[MAXPKT+2]; }; /* RECEIVER STATES */ #define RS_SYNC 0 /* Waiting for sync */ #define RS_CTL 1 /* Waiting for command */ #define RS_CCHK 2 /* Waiting for check byte */ #define RS_LEN1 3 /* Waiting for MSB length byte */ #define RS_LEN2 4 /* Waiting for LSB length byte */ #define RS_DATA 5 /* Waiting for data & checksum */ #define DNCMD_OPEN 32 /* Application open */ #define DNCMD_SOPEN 33 /* Server open */ #define DNCMD_CLOSE 34 /* Close a channel */ #define DNCMD_EOF 35 /* Will no longer write to channel */ #define DNCMD_WRITE 36 /* Write data to a channel */ #define DNCMD_QUIT 37 /* Kill the DNET server */ #define DNCMD_IOCTL 38 /* REQUEST TYPES */ #define RTO_REQ 1 /* Network read timeout */ #define WTO_REQ 2 /* Network write-ack timeout */ #define RNET_REQ 3 /* Network read data */ #define WNET_REQ 4 /* Network write data sent */ #define PKT_REQ 5 /* Returned packets from servers */ #define OPEN_REQ 6 #define IGWNET_REQ 7 /* PACKET CONTROL BYTE */ #define PKF_SEQUENCE 0xE0 /* Sequence # */ #define PKF_DATA 0x10 /* 1-65535 bytes */ #define PKF_RESERVED 0x08 /* reserved bit */ #define PKF_MASK 0x07 /* command mask */ #define PKCMD_WRITE 1 /* A DATA packet */ #define PKCMD_CHECK 2 /* Request ACK or NAK for win */ #define PKCMD_ACK 3 /* ACK a window */ #define PKCMD_NAK 4 /* NAK a window */ #define PKCMD_RESTART 5 /* Restart */ #define PKCMD_ACKRSTART 6 /* Restart Acknowledge */ #define PKCMD_RESERVE3 7 /* CHANNEL COMMANDS */ #define SCMD_SWITCH 0x00 /* switch active channel # */ #define SCMD_OPEN 0x01 /* open a channel */ #define SCMD_CLOSE 0x02 /* close a channel */ #define SCMD_ACKCMD 0x03 /* ack an open/close request */ #define SCMD_EOFCMD 0x04 /* Reof or Weof */ #define SCMD_QUIT 0x05 /* crash dnet */ #define SCMD_IOCTL 0x06 /* ioctl */ #define SCMD_DATA 0x08 /* stream command, DATA */ #define CHAN_FREE 0x01 /* free channel */ #define CHAN_ROPEN 0x02 /* remote open, wait port msg */ #define CHAN_LOPEN 0x03 /* local open, wait reply */ #define CHAN_OPEN 0x04 #define CHAN_CLOSE 0x05 /* see flags */ #define CHANF_ROK 0x01 /* NOT read eof */ #define CHANF_WOK 0x02 /* remote will accept data */ #define CHANF_LCLOSE 0x04 #define CHANF_RCLOSE 0x08 extern void *CreatePort(); extern void *GetMsg(); extern void *RemHead(); extern void *AllocMem(); extern void *FindPort(); extern void *FindTask(); extern void *ArbitrateNext(); extern void *CreateProc(); #ifndef NOEXT extern IOT Rto; /* Read-Timeout/reset */ extern IOT Wto; /* Write-Timeout/retry */ extern IOR *RNet; /* read-request */ extern IOR *WNet; /* write-request */ extern PKT Pkts[9]; extern PKT *Raux; /* next packet in */ extern PKT *RPak[4]; extern PKT *WPak[4]; extern PORT *DNetPort; /* Remote Command/Control in */ extern PORT *IOSink; /* Return port for ALL IO */ extern CHAN Chan[MAXCHAN]; extern LIST TxList; /* For pending DNCMD_WRITE reqs. */ extern LIST SvList; extern ubyte Rto_act; extern ubyte Wto_act; extern uword RChan; extern uword WChan; extern uword RPStart; extern uword WPStart; extern uword WPUsed; extern uword RState; extern ubyte DDebug; extern ubyte Restart; extern ubyte DeldQuit; extern ubyte AutoHangup; extern ulong NumCon; extern ulong WTimeoutVal; extern ulong RTimeoutVal; extern long Baud; extern char *HostName; /* The Amiga's HostName */ extern ubyte RestartPkt[3]; extern ubyte AckPkt[8][3]; extern ubyte NakPkt[8][3]; extern ubyte CheckPkt[8][3]; #endif