home *** CD-ROM | disk | FTP | other *** search
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
- * |_o_o|\\ Copyright (c) 1988 The Software Distillery. All Rights Reserved *
- * |. o.| || Written by Doug Walker *
- * | . | || The Software Distillery *
- * | o | || 235 Trillingham Lane *
- * | . |// Cary, NC 27513 *
- * ====== BBS:(919)-471-6436 *
- \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- #include "netdnet.h"
- #include "handler.h"
-
- #ifdef CPR
- char *dbgwind = "CON:0/0/640/160/NETDNET-HANDLER/a";
- #endif
-
- #if 1
-
- int ReSync(global, ioptr)
- GLOBAL global;
- APTR ioptr;
- {
- TermRDevice(global, 1);
- return(InitRDevice(global));
- }
-
- #else
-
- int ReSync(global, ioptr)
- GLOBAL global;
- APTR ioptr;
- {
- return(1);
- }
-
- #endif
-
- int InitRDevice(global)
- GLOBAL global;
- {
- struct MsgPort *chan;
- struct NetNode *tmpnode;
- struct RPacket RP;
- static doinit = 1;
-
- if(!doinit)
- {
- BUG(("InitRDevice: Init loop, exiting\n"))
- return(1);
- }
-
- doinit = 0;
-
- BUG(("InitRDevice: Initializing for DNET operation on unit %d\n",
- global->unitnum));
-
- BUGP("InitRDevice: Entry")
-
- if(!(chan=DOpen(NULL, (uword)(PORT_FHANDLER), 20, 15)))
- {
- BUG(("********ERROR: Can't DOpen!!\n"));
- BUGR("Can't open channel!")
- }
- if(chan) DQueue((struct DChannel *)chan, 32);/* Is this really necessary? */
- BUG(("DNET Channel %lx open\n", chan));
-
- if(!global->netchain.next)
- {
- if(tmpnode=AddNode(global, "\3Foo", (APTR)chan))
- strcpy(tmpnode->devname, "ROOT:");
- }
- else if(chan)
- {
- /* Preserve state of global->RP */
- memcpy((char *)&RP, (char *)&global->RP, sizeof(struct RPacket));
-
- for(tmpnode=global->netchain.next; tmpnode; tmpnode=tmpnode->next)
- {
- BUG(("ReSync: Trying to resync '%s'\n", tmpnode->devname))
-
- global->RP.Type = ACTION_NETWORK_KLUDGE;
- strcpy(global->RP.Data, tmpnode->devname);
- global->RP.DLen = strlen(global->RP.Data);
- tmpnode->RootLock.RDevice = (RPTR)1L;
- tmpnode->ioptr = (APTR)chan;
- tmpnode->status = NODE_UP;
- if(RemotePacket(global, &tmpnode->RootLock))
- {
- tmpnode->status = NODE_CRASHED;
- BUG(("ReSync: Failed\n"))
- }
- }
- memcpy((char *)&global->RP, (char *)&RP, sizeof(struct RPacket));
- }
-
-
- doinit = 1;
-
- BUGP("InitRDevice: Exit")
-
- return(chan != NULL);
- }
-
- int TermRDevice(global, status)
- GLOBAL global;
- int status;
- {
- struct NetNode *netnode;
-
- for(netnode=global->netchain.next; netnode; netnode=netnode->next)
- {
- if(netnode->ioptr)
- {
- netnode->status = NODE_DEAD;
- if(!status) DClose((struct DChannel *)netnode->ioptr);
- netnode->ioptr = NULL;
- }
- }
-
- return(0);
- }
-
- void ActNetHello(global, pkt)
- GLOBAL global;
- struct DosPacket *pkt;
- {
- }
-