home *** CD-ROM | disk | FTP | other *** search
- /* Subs.c - Basic network handler support routines */
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- /* |_o_o|\\ Copyright (c) 1987 The Software Distillery. All Rights Reserved */
- /* |. o.| || This program may not be distributed without the permission of */
- /* | . | || the author. BBS: */
- /* | o | || John Toebes (919)-471-6436 */
- /* | . |// */
- /* ====== */
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- #define NETCOMMON
- #include "netcomm.h"
- #include "proto.h"
- /* misc.c - support routines - Phillip Lindsay (C) Commodore 1986
- * You may freely distribute this source and use it for Amiga Development -
- * as long as the Copyright notice is left intact.
- *
- * 30-SEP-86
- */
-
- /* returnpkt() - packet support routine
- * here is the guy who sends the packet back to the sender...
- */
-
- void retpkt(global, packet)
- NGLOBAL global;
- struct DosPacket *packet;
- {
- struct Message *mess;
- struct MsgPort *replyport;
-
- replyport = packet->dp_Port;
- mess = packet->dp_Link;
- packet->dp_Port = global->n.port;
-
- PutMsg(replyport,mess);
- }
-
- /*
- * taskwait() ... Waits for a message to arrive at your port and
- * extracts the packet address which is returned to you.
- */
-
- struct DosPacket *taskwait(global)
- NGLOBAL global;
- {
- struct Message *mymess;
-
- WaitPort(global->n.port); /* wait for packet */
- mymess = (struct Message *) GetMsg(global->n.port);
-
- global->pkt = (struct DosPacket *) mymess->mn_Node.ln_Name;
-
- return(global->pkt);
- }
-
- char *DosAllocMem(global, len)
- NGLOBAL global;
- long len;
- {
- long *p;
-
- if (( p = (long *)AllocMem(len+4, MEMF_PUBLIC | MEMF_CLEAR)) == NULL)
- {
- if (global->pkt != NULL)
- {
- global->pkt->dp_Res1 = DOS_FALSE;
- global->pkt->dp_Res2 = ERROR_NO_FREE_STORE;
- }
- else
- {
- /* Gee. Out of memory AND there is nobody to tell about it ... */
- /* Only choice is to GURU. Maybe we could do something clever */
- /* but I doubt it... */
- BUG(("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"));
- BUG(("!!!!!!!!!!!! !!!!!!!!\n"));
- BUG(("!!!!!!!!!!!! OUT OF MEMORY !!!!!!!!\n"));
- BUG(("!!!!!!!!!!!! !!!!!!!!\n"));
- BUG(("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"));
- }
- }
- else
- *p++ = len;
-
- return((char *)p);
- }
-
- void DosFreeMem(p)
- char *p;
- {
- long *lp;
- long len;
-
- lp = (long *)p;
- len = *--lp;
- FreeMem((char *)lp, len);
- }
-
- LONG checksum(c, len)
- char *c;
- int len;
- {
- int i, l;
- LONG sum, *lptr;
- unsigned char *uc;
-
- l = len/sizeof(LONG);
- lptr = (LONG *)c;
- for(i=0, sum=0; i<l; i++, lptr++) sum += *lptr;
-
- l = len % sizeof(LONG);
- uc = (unsigned char *)lptr;
- for(i=0; i<l; i++, uc++) sum += *uc;
-
- return(sum);
- }
-
- void CheckRP(r)
- struct RPacket *r;
- {
- #ifndef SMALLPACKET
- /* Get checksum for RP */
- if(r->DLen)
- r->DCheck = checksum(r->Data, r->DLen);
- else
- r->DCheck = 0L;
-
- r->checksum = 0L;
- r->checksum = checksum((char *)r, RPSIZE);
- #endif
- }
-
-