home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * DNET.H
- *
- * DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
- *
- */
-
- #include <exec/types.h>
- #include <exec/tasks.h>
- #include <exec/memory.h>
- #include <devices/serial.h>
- #include <devices/timer.h>
- #include <libraries/dos.h>
- #include <libraries/dosextens.h>
- #include <intuition/intuition.h>
- #include <proto/all.h>
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "/version.h"
-
- #define DNET_H
-
- #define DMNWOFF 4 /* Deemu offset to NewWindow structure */
-
- #define ARGS(foo) foo
-
- typedef struct IORequest IOR;
- typedef struct IOStdReq IOSTD;
- typedef struct IOExtSer IOSER;
- typedef struct IOStdReq IOCON;
- typedef struct timerequest IOT;
- typedef struct Window WIN;
- typedef struct NewWindow NW;
- typedef struct RastPort RP;
- typedef struct Task TASK;
- typedef struct Process PROC;
- typedef struct MsgPort PORT;
- typedef struct Node NODE;
- typedef struct MinNode MNODE;
- typedef struct List LIST;
- typedef struct MinList MLIST;
- typedef struct Message MSG;
-
- typedef unsigned char ubyte;
- typedef unsigned short uword;
- typedef unsigned long ulong;
-
- #include "/dnet/channel.h"
-
- #ifndef MAX(a,b)
- #define MAX(a,b) (((a)>(b))?(a):(b))
- #endif
-
- #define CFGFILE "s:dnet.config"
-
- #define PKT struct _PKT
- #define CTLPKT struct _CTLPKT
- #define PNODE struct _PNODE
- #define IOMSG struct _IOMSG
-
- #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 0x5B /* SYNC character */
- #define MAXPKT 200 /* maximum packet size */
- #define MINPKT 32 /* minimum maximum packet size
- (for priority scheme) */
-
- #define MAXPACKET ((MAXPKT * 8 + 5) / 6 + 64)
-
- #define OVERHEAD 7 /* for packets with data */
-
- PNODE {
- NODE node;
- char name[32];
- ulong seg;
- };
-
- CTLPKT {
- uword buflen; /* send: length of packet, recv: length of data */
- ubyte state; /* EMPTY, READY */
-
- ubyte sync; /* THE PACKET */
- ubyte ctl;
- ubyte cchk;
- };
-
- PKT {
- uword buflen; /* 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 dchkh;
- ubyte dchkl;
- ubyte data[MAXPACKET];
- };
-
- /*
- * Used by the IoCtl() support routines.
- */
-
- IOMSG {
- MSG Msg;
- TASK *ReplyTask;
- ulong Cmd;
- ulong Arg1;
- ulong Arg2;
- ulong Res;
- };
-
- #ifdef NOTDEF
- /* 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 */
-
- #endif
-
- #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
- #define DNCMD_EXEC 39 /* server asks driver to Execute() something */
-
- #define DNCMD_INFO 64 /* Ascii status message */
-
- /* 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
- #define CTO_REQ 8
- #define CNET_REQ 9
-
- /* PACKET CONTROL BYTE */
- #define PKF_SEQUENCE 0x07 /* Sequence # */
- #define PKF_MASK 0x78 /* command mask */
-
- #define PKCMD_RESTART 0x20 /* Restart */
- #define PKCMD_ACKRSTART 0x28 /* Restart Acknowledge */
- #define PKCMD_WRITE6 0x30 /* A DATA packet 6 bit enc */
- #define PKCMD_WRITE 0x38 /* A DATA packet */
- #define PKCMD_CHECK 0x40 /* Request ACK or NAK for win */
- #define PKCMD_ACK 0x48 /* ACK a window */
- #define PKCMD_NAK 0x50 /* NAK a window */
- #define PKCMD_WRITE7 0x58 /* compressed 7 bit in 8 bit pkt */
- /* 0x60-0x7F reserved */
-
- /* 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 *ArbitrateNext();
- extern long IoHandler();
-
- #ifndef NOEXT
- extern IOT Rto; /* Read-Timeout/reset */
- extern IOT Wto; /* Write-Timeout/retry */
- extern IOT Cto;
- 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 */
- #ifdef NOTDEF
- extern PORT *IPCPort; /* IPC comm port */
- #endif
- extern CHAN Chan[MAXCHAN];
- extern LIST TxList; /* For pending DNCMD_WRITE reqs. */
- extern ubyte Rto_act;
- extern ubyte Wto_act;
- extern ubyte Cto_act;
- extern ubyte Cd;
- extern uword RChan;
- extern uword WChan;
- extern uword RPStart;
- extern uword WPStart;
- extern uword WPUsed;
- extern uword RState;
- extern uword Protocol;
- extern short DDebug;
- extern short PDebug;
- extern ubyte Restart;
- extern ubyte OnLine;
- extern ubyte Quit;
- extern ubyte Mode7; /* 7 bit line */
- extern short AutoHangup;
- extern short DialOut;
- extern short AutoAnswer;
- extern short Master8;
- extern short NetworkNum;
- extern short Getty;
- extern ulong NumCon;
- extern ulong WTimeoutVal;
- extern ulong RTimeoutVal;
- extern long Baud;
- extern long TOBaud;
- extern char *HostName; /* The Amiga's HostName */
- extern long DResBase;
- extern char PortName[];
-
- extern short Deemu[];
-
- extern long BytesOut, PacketsOut, PacketsResent;
- extern long BytesIn , PacketsIn , PacketsNakd;
- extern long GarbageIn;
-
- extern long Packets6In, Packets7In, Packets8In;
- extern long Packets6Out, Packets7Out, Packets8Out;
-
-
- #ifdef NOTDEF
-
- extern void do_rto ARGS((IOT *));
- extern void do_wto ARGS((IOT *));
- extern void do_rnet ARGS((ubyte *, long));
- extern void do_wnet ARGS((void));
- extern void do_wupdate ARGS((void));
- extern void dumpcheck ARGS((ubyte *));
- extern void do_cmd ARGS((uword, ubyte *, int));
- extern void do_rupdate ARGS((void));
- extern void do_reccmd ARGS((int, ubyte *, int));
- extern void replywindow ARGS((int));
-
- /* Prototypes for functions defined in sernet.c */
-
- extern void NetOpen ARGS((PORT *, char *, int, int *));
- extern void NetClose ARGS((void));
- extern void NetClWrite ARGS((IOSER *));
- extern void NetWrite ARGS((void *, int, int));
- extern void NetBreak ARGS((void));
- extern int NetReady ARGS((void));
- extern int SetBaudRate ARGS((int));
- extern void DropDTR ARGS((void));
- extern void NetStartRead ARGS((long));
- extern IOSER *NetAbortRead ARGS((void));
- extern struct IOExtSer *NetReadReady ARGS((void));
- extern int NetReadReturned ARGS((int, ubyte **));
- extern void NetWaitWrite ARGS((void));
- extern void SaveState ARGS((void));
- extern void RestoreState ARGS((void));
- extern void NetRecvOff ARGS((void));
- extern void NetRecvOn ARGS((void));
- extern void NetSerialOff ARGS((void));
- extern void NetSerialOn ARGS((void));
-
-
- /* Prototypes for functions defined in time.c */
-
- extern void do_cto ARGS((IOT *));
- extern void ResetIdle ARGS((void));
- extern void ResetConnect ARGS((void));
- extern void LessConnect ARGS((int));
- extern void SetConnectAlert ARGS((int, char *));
- extern void SetIdleAlert ARGS((int, char *));
- extern int GetIdle ARGS((void));
- extern int GetConnect ARGS((void));
- /*
- extern int doipcmsg ARGS((char *, char *, short));
- */
-
- /* Prototypes for functions defined in dnet.c */
-
- void do_netreset ARGS((void));
-
- /* Prototypes for functions defined in ipc.c */
-
- /*
- extern int handle_ipc ARGS((void));
- extern void do_online ARGS((void));
- extern void do_offline ARGS((void));
- extern void do_disconnect ARGS((void));
- extern void do_quit ARGS((void));
- extern void do_stat ARGS((int, char **, int *));
- extern void do_state ARGS((void));
- extern int AllocAppend ARGS((char **, int *, char *, int));
- extern void do_recvon ARGS((void));
- extern void do_recvoff ARGS((void));
- extern void do_serialon ARGS((void));
- extern void do_serialoff ARGS((void));
- extern void do_baud ARGS((char **));
- extern void do_getidle ARGS((char **, char **, int *));
- extern void do_getconnect ARGS((char **, char **, int *));
- */
-
- /* Prototypes for functions defined in subs.c */
-
- extern void WriteStream ARGS((int, void *, int, uword));
- extern void WritePort ARGS((PORT *, int, void *, int, int, int));
- extern int alloc_channel ARGS((void));
- extern int GetNext ARGS((struct Node *));
- extern int chkbuf ARGS((ubyte *, uword));
- extern void TimerOpen ARGS((struct timerequest *, struct MsgPort *));
- extern void TimerClose ARGS((struct timerequest *));
- extern void InitServers ARGS((void));
- extern void RunServer ARGS((uword));
- extern void DeleteServers ARGS((void));
- extern void dneterror ARGS((char *));
- extern void fixsignal ARGS((PORT *));
- extern void SetTimeouts ARGS((int));
-
- /* Prototypes for functions defined in window.c */
-
- extern void do_dnetwindow ARGS((int));
- extern void setparity ARGS((int,int,int));
- extern void addparity ARGS((ubyte *, int));
- extern void OpenConsole ARGS((WIN *, IOCON **, IOCON **));
- extern void CloseConsole ARGS((IOCON *, IOCON *));
- extern void InitDeemuNW ARGS((short *, NW *));
- extern void LoadConnectList ARGS((void));
- extern void UnLoadConnectList ARGS((void));
- extern int CheckConnect ARGS((int, char *, int));
-
- #endif
- #endif
-