[comp.sys.mac.programmer] AppleTalk NBP problem

audit038@spacm1.spac.spc.com (01/26/91)

Thanks to Michael Peirce, I was able to write this Think C  program that
 registers and unregisters a name.  The parameter block equates are slightly
different in Think C. (Don't know why) but here's the code. I tested it
using Interpol and it WORKS!  Thanks much.

_______________________________________________________
#include <MacTypes.h>
#include <MemoryMgr.h>
#include <AppleTalk.h>
#include <nAppleTalk.h>


#define kSYNC false
#define kNTEsize 109

static EntityName myEntity;
static EntityPtr NTEstorage;
#define REMOVE_ALL_EVENTS	0
#define NIL_POINTER			0L

/* prototypes  */
void 	RegisterName();
void 	UnRegisterIt();
void	debugstr( char *str );

main()

{

	int			errCode;
	

	InitGraf( &thePort );
	MaxApplZone();
	InitFonts();
	FlushEvents( everyEvent, REMOVE_ALL_EVENTS );
	InitWindows();
	InitMenus();
	TEInit();
	InitDialogs( NIL_POINTER );
	InitCursor();


	
	if ( MPPOpen() != noErr)
	{
		debugstr("MPPOpen didn't work");
	}
	RegisterName();
	UnRegisterIt();
	
}

void RegisterName()
{
	ATPParamBlock	myATPPB;
	MPPParamBlock	myMPPPB;
	
	/* Open an ATP socket */
	myATPPB.atpSocket = 0;	/* ask for any available */


	/* Clear the address */
	myATPPB.addrBlock.aNet		= 0;
	myATPPB.addrBlock.aNode		= 0;
	myATPPB.addrBlock.aSocket	= 0;
	
	/* Do the POpenATPSkt */
	if (POpenATPSkt(&myATPPB,kSYNC) != noErr) 
		debugstr("POpenATPSkt failed");
	
	/* allocate the NTE */
	NTEstorage = (EntityPtr)NewPtr(kNTEsize);
	if (NTEstorage == 0) 
		debugstr("NewPtr failed"); /* I never deallocate this :-( */
	
	/* Set the NTE */
	NBPSetNTE((Ptr)NTEstorage,"\pJohnny","\pHeyMac!","\p*",myATPPB.atpSocket);
	
	/* Save a "real" entity for removal */
	BlockMove("\pJohnny",&myEntity.objStr,7);
	BlockMove("\pHeyMac!",&myEntity.typeStr,8);
	BlockMove("\p*",&myEntity.zoneStr,2);
	
	/* Setup & Do the register call */
	myMPPPB.MPP.NBP.entityPtr	= (Ptr)NTEstorage;
	myMPPPB.MPP.NBP.interval			= 3;
	myMPPPB.MPP.NBP.count				= 3;	
	myMPPPB.MPP.NBP.NBP1.verifyFlag		= 255; 
	
	if (PRegisterName(&myMPPPB,kSYNC) != noErr) 
		debugstr("PRegisterName failed"); 
	
}

void UnRegisterIt()
{
	if (NBPRemove(&myEntity) != noErr)
		debugstr("NBPRemoveName failed"); 
		
}

void	debugstr( str )
char	*str;
{
	printf( str );
}

-- 
John Coffman