
/*
 *  GLOBALS.C
 *
 *  DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
 *
 *	-restart/packet protocol
 *	-dnet->amiga	    (DNET.READ)
 *	-amiga->dnet	    (DNET.WRITE)
 */

#include "dnet.h"

int Enable_Abort;

IOT Rto;		/*  Read-Timeout/reset		 */
IOT Wto;		/*  Write-Timeout/retry 	 */
IOT Cto;		/*  1 second CD check / idle line*/
PKT Pkts[9];		/*  data buffers for packets	 */
PKT *Raux = Pkts+8;	/*  next packet in		 */
PKT *RPak[4] = { Pkts+0,Pkts+1,Pkts+2,Pkts+3 };
PKT *WPak[4] = { Pkts+4,Pkts+5,Pkts+6,Pkts+7 };
PORT *DNetPort; 	/*  Remote Command/Control in	    */
PORT *IOSink;		/*  Return port for ALL IO	    */
PORT *IPCPort;		/*  IPC software control port	    */
CHAN Chan[MAXCHAN];	/*  Channels			    */
LIST TxList;		/*  For pending DNCMD_WRITE reqs.   */
LIST SvList;		/*  List of waiting servers	    */
ubyte Rto_act;
ubyte Wto_act;
ubyte Cto_act;
ubyte Cd;		/*  Carrier Detect Status	    */
uword WChan;		/*  Read and Write channels	    */
uword RChan;
uword RPStart;
uword WPStart;
uword WPUsed;
uword RState;
short DDebug;
short PDebug;
ubyte Restart;		/*  Network restart mode		*/
ubyte OnLine;		/*  Network online			*/
ubyte Quit;		/*  Quit immediately			*/
short AutoAnswer = 0;	/*  Security Enable			*/
short DialOut = 1;	/*  Security Enable for DialOut 	*/
short AutoHangup = 1;	/*  On carrier lost (-a opt)            */
short Master8;
short NetworkNum;
ulong NumCon;		/*  # of connections currently active	*/
			/*     in CHAN_ROPEN/LOPEN/OPEN/CLOSE	*/
ulong WTimeoutVal;
ulong RTimeoutVal;
long Baud;
long TOBaud;
char *HostName = "";

/*
 *  Status Info
 */

long	BytesOut, PacketsOut, PacketsResent;
long	BytesIn , PacketsIn , PacketsNakd;
long	GarbageIn;

#define ACK(win)    (PKCMD_ACK|(win<<5))
#define NAK(win)    (PKCMD_NAK|(win<<5))
#define CHECK(win)  (PKCMD_CHECK|(win<<5))
#define CHK(com) ((SYNC<<1)^(com))


ubyte	RestartPkt[3] = {   SYNC, PKCMD_RESTART, CHK(PKCMD_RESTART) };
ubyte	AckPkt[8][3]  = {   SYNC, ACK(0), CHK(ACK(0)),
			    SYNC, ACK(1), CHK(ACK(1)),
			    SYNC, ACK(2), CHK(ACK(2)),
			    SYNC, ACK(3), CHK(ACK(3)),
			    SYNC, ACK(4), CHK(ACK(4)),
			    SYNC, ACK(5), CHK(ACK(5)),
			    SYNC, ACK(6), CHK(ACK(6)),
			    SYNC, ACK(7), CHK(ACK(7))
			};

ubyte	NakPkt[8][3]  = {   SYNC, NAK(0), CHK(NAK(0)),
			    SYNC, NAK(1), CHK(NAK(1)),
			    SYNC, NAK(2), CHK(NAK(2)),
			    SYNC, NAK(3), CHK(NAK(3)),
			    SYNC, NAK(4), CHK(NAK(4)),
			    SYNC, NAK(5), CHK(NAK(5)),
			    SYNC, NAK(6), CHK(NAK(6)),
			    SYNC, NAK(7), CHK(NAK(7))
			};

ubyte	CheckPkt[8][3]= {   SYNC, CHECK(0), CHK(CHECK(0)),
			    SYNC, CHECK(1), CHK(CHECK(1)),
			    SYNC, CHECK(2), CHK(CHECK(2)),
			    SYNC, CHECK(3), CHK(CHECK(3)),
			    SYNC, CHECK(4), CHK(CHECK(4)),
			    SYNC, CHECK(5), CHK(CHECK(5)),
			    SYNC, CHECK(6), CHK(CHECK(6)),
			    SYNC, CHECK(7), CHK(CHECK(7))
			};

