Pararena2/Sources/AppleTalkDDP.c

1 line
17 KiB
C
Raw Normal View History

//============================================================ //============================================================ //== == //== AppleTalkDDP Unit == //== == //============================================================ //============================================================ //======================================================== Includes #include "Globals.h" #include "UnivUtilities.h" #include "AppleTalkDDP.h" #include "AnimCursor.h" //======================================================== Local Variables ATDDPRecHandle inABRecordDDP, outABRecordDDP; EntityName thisEntity; EntityName theLookupEntity; MPPParamBlock theLookUpBlock, theNameBlock; NamesTableEntry theNameTable; AddrBlock opponentsAddress; netUserArray knownNetUserArray; Str255 thisName, opponentsName; Ptr sendBuffer, receiveBuffer; OSErr netErr; short thisSocket, knownNetUsers, netUserNowSelected, lastByteCount; short firstPackageShort; char theLookupBuffer[kLookupBufferSize]; Boolean newAppleTalkCalls, nameIsRegistered, imTheMaster, requestNoted; //======================================================== Functions //======================================================== InitializeAppleTalk short InitializeAppleTalk (void) { #define kNCVersion 48 SysEnvRec thisWorld; Boolean callWorked; thisSocket = 0; nameIsRegistered = FALSE; requestNoted = FALSE; netErr = SysEnvirons(2, &thisWorld); // get machine environment if (netErr != noErr) return(kNetErrBadHardware); if (thisWorld.machineType < env512KE) // abort on less than Mac 512KE return(kNetErrBadHardware); // do we have the new calls? newAppleTalkCalls = (thisWorld.atDrvrVersNum >= kNCVersion); netErr = OpenAppleTalkDriver(); if (netErr != noErr) return (kNetErrDriverFailed); sendBuffer = NewPtr(kBufferSize); if (sendBuffer == kNilPointer) return (kNetErrBuffersFailed); receiveBuffer = NewPtr(kBufferSize); if (receiveBuffer == kNilPointer) return (kNetErrBuffersFailed); inABRecordDDP = (ATDDPRecHandle)NewHandle(ddpSize); if (inABRecordDDP == kNilPointer) return (kNetErrBuffersFailed); MoveHHi((Handle)inABRecordDDP); HLock((Handle)inABRecordDDP); outABRecordDDP = (ATDDPRecHandle)NewHandle(ddpSize); if (outABRecordDDP == kNilPointer) return (kNetErrBuffersFailed); MoveHHi((Handle)outABRecordDDP); HLock((Handle)outABRecordDDP); GetDefaultName(); if (thisName[0] == 0) GetIndString(thisName, rNetStringID, 2); netErr = OpenSocketDDP(); // open an ATP socket if (netErr != noErr) return(kNetErrSocketFailed); return (kNetErrNoErr); } //======================================================== RegisterNameOnNet OSErr RegisterNameOnNet (void) { #define kDoVerify 0xFF MPPParamBlock theNameBlock; OSErr theErr; Boolean itWorked; theErr = noErr; if (nameIsRegistered) return (theErr); PasStringCopy((StringPtr)theNames[whichHumanNumber - 1], (StringPtr)thisName); NBPSetEntity((Ptr)&thisEntity, (Ptr)thisName, (Ptr)kThisType, (Ptr)kAnyZone); NBPSetNTE((Ptr)&theNameTable, (Ptr)thisName, (Ptr)kThisType, (Ptr)kAnyZone, thisSocket); theNameBlock.MPPioCompletion = kNilPointer; theNameBlock.NBPinterval = 3; theNameBlock.NBPcount = 3; theNameBlock.NBPentityPtr = (Ptr)&theNameTable; theNameBlock.NBPverifyFlag = kDoVerify; theErr = PRegisterName(&theNameBlock, kSynch); if (theErr == noErr) nameIsRegistered = TRUE; return (theErr); } //======================================================== NamesFilter pascal Boolean NamesFilter (DialogPtr theDialog, EventRecord *theEvent, short *itemHit) { switch (theEvent->what) { case keyDown: switch ((theEvent->message) & charCodeMask) { case kEnterKeyASCII: case kReturnKeyASCII: if (netUserNowSelected != 0) { FlashDialogButton(theDialog, kButtNetOkay); *itemHit = kButtNetOkay; return(TRUE); } break; default: return(FALSE); break; } break; default: while (IsThereAnotherNa