mirror of
https://github.com/softdorothy/Pararena2.git
synced 2024-06-02 00:41:46 +00:00
1 line
17 KiB
C
1 line
17 KiB
C
|
//============================================================
//============================================================
//== ==
//== 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
|