/* File: PPCToolbox.h Contains: Program-Program Communications Toolbox Interfaces. Version: Technology: System 7.5 Package: Universal Interfaces 2.1 in ÒMPW LatestÓ on ETO #18 Copyright: © 1984-1995 by Apple Computer, Inc. All rights reserved. Bugs?: If you find a problem with this file, use the Apple Bug Reporter stack. Include the file and version information (from above) in the problem description and send to: Internet: apple.bugs@applelink.apple.com AppleLink: APPLE.BUGS */ #ifndef __PPCTOOLBOX__ #define __PPCTOOLBOX__ #ifndef __APPLETALK__ #include #endif /* #include */ /* #include */ /* #include */ /* #include */ /* #include */ #ifndef __MEMORY__ #include #endif #ifndef __TYPES__ #include #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_ALIGN_SUPPORTED #pragma options align=mac68k #endif #if PRAGMA_IMPORT_SUPPORTED #pragma import on #endif typedef unsigned char PPCServiceType; enum { ppcServiceRealTime = 1 }; typedef short PPCLocationKind; enum { ppcNoLocation = 0, /* There is no PPCLocName */ ppcNBPLocation = 1, /* Use AppleTalk NBP */ ppcNBPTypeLocation = 2 /* Used for specifying a location name type during PPCOpen only */ }; typedef short PPCPortKinds; enum { ppcByCreatorAndType = 1, /* Port type is specified as colloquial Mac creator and type */ ppcByString = 2 /* Port type is in pascal string format */ }; /* Values returned for request field in PPCInform call */ typedef unsigned char PPCSessionOrigin; enum { /* Values returned for requestType field in PPCInform call */ ppcLocalOrigin = 1, /* session originated from this machine */ ppcRemoteOrigin = 2 /* session originated from remote machine */ }; typedef short PPCPortRefNum; typedef long PPCSessRefNum; struct PPCPortRec { ScriptCode nameScript; /* script of name */ Str32 name; /* name of port as seen in browser */ PPCPortKinds portKindSelector; /* which variant */ union { Str32 portTypeStr; /* pascal type string */ struct { OSType portCreator; OSType portType; } port; } u; }; typedef struct PPCPortRec PPCPortRec, *PPCPortPtr; struct LocationNameRec { PPCLocationKind locationKindSelector; /* which variant */ union { EntityName nbpEntity; /* NBP name entity */ Str32 nbpType; /* just the NBP type string, for PPCOpen */ } u; }; typedef struct LocationNameRec LocationNameRec, *LocationNamePtr; struct PortInfoRec { unsigned char filler1; Boolean authRequired; PPCPortRec name; }; typedef struct PortInfoRec PortInfoRec, *PortInfoPtr; typedef PortInfoRec *PortInfoArrayPtr; typedef union PPCParamBlockRec PPCParamBlockRec, *PPCParamBlockPtr; typedef pascal void (*PPCCompProcPtr)(PPCParamBlockPtr pb); #if USESROUTINEDESCRIPTORS typedef UniversalProcPtr PPCCompUPP; #else typedef PPCCompProcPtr PPCCompUPP; #endif #define PPCHeader \ Ptr qLink; \ unsigned short csCode; \ unsigned short intUse; \ Ptr intUsePtr; \ \ PPCCompUPP ioCompletion; \ \ OSErr ioResult; \ unsigned long Reserved[5]; struct PPCOpenPBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; PPCPortRefNum portRefNum; /* 38 <-- Port Reference */ long filler1; PPCServiceType serviceType; /* 44 --> Bit field describing the requested port service */ UInt8 resFlag; /* Must be set to 0 */ PPCPortPtr portName; /* 46 --> PortName for PPC */ LocationNamePtr locationName; /* 50 --> If NBP Registration is required */ Boolean networkVisible; /* 54 --> make this network visible on network */ Boolean nbpRegistered; /* 55 <-- The given location name was registered on the network */ }; typedef struct PPCOpenPBRec PPCOpenPBRec, *PPCOpenPBPtr; struct PPCInformPBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; PPCPortRefNum portRefNum; /* 38 --> Port Identifier */ PPCSessRefNum sessRefNum; /* 40 <-- Session Reference */ PPCServiceType serviceType; /* 44 <-- Status Flags for type of session, local, remote */ Boolean autoAccept; /* 45 --> if true session will be accepted automatically */ PPCPortPtr portName; /* 46 --> Buffer for Source PPCPortRec */ LocationNamePtr locationName; /* 50 --> Buffer for Source LocationNameRec */ StringPtr userName; /* 54 --> Buffer for Soure user's name trying to link. */ unsigned long userData; /* 58 <-- value included in PPCStart's userData */ PPCSessionOrigin requestType; /* 62 <-- Local or Network */ SInt8 filler; }; typedef struct PPCInformPBRec PPCInformPBRec, *PPCInformPBPtr; struct PPCStartPBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; PPCPortRefNum portRefNum; /* 38 --> Port Identifier */ PPCSessRefNum sessRefNum; /* 40 <-- Session Reference */ PPCServiceType serviceType; /* 44 <-- Actual service method (realTime) */ UInt8 resFlag; /* 45 --> Must be set to 0 */ PPCPortPtr portName; /* 46 --> Destination portName */ LocationNamePtr locationName; /* 50 --> NBP or NAS style service location name */ unsigned long rejectInfo; /* 54 <-- reason for rejecting the session request */ unsigned long userData; /* 58 --> Copied to destination PPCInform parameter block */ unsigned long userRefNum; /* 62 --> userRefNum (obtained during login process) */ }; typedef struct PPCStartPBRec PPCStartPBRec, *PPCStartPBPtr; struct PPCAcceptPBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; short filler1; PPCSessRefNum sessRefNum; /* 40 --> Session Reference */ }; typedef struct PPCAcceptPBRec PPCAcceptPBRec, *PPCAcceptPBPtr; struct PPCRejectPBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; short filler1; PPCSessRefNum sessRefNum; /* 40 --> Session Reference */ short filler2; long filler3; long filler4; unsigned long rejectInfo; /* 54 --> reason for rejecting the session request */ }; typedef struct PPCRejectPBRec PPCRejectPBRec, *PPCRejectPBPtr; struct PPCWritePBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; short filler1; PPCSessRefNum sessRefNum; /* 40 --> Session Reference */ Size bufferLength; /* 44 --> Length of the message buffer */ Size actualLength; /* 48 <-- Actual Length Written */ Ptr bufferPtr; /* 52 --> Pointer to message buffer */ Boolean more; /* 56 --> if more data in this block will be written */ unsigned char filler2; unsigned long userData; /* 58 --> Message block userData Uninterpreted by PPC */ OSType blockCreator; /* 62 --> Message block creator Uninterpreted by PPC */ OSType blockType; /* 66 --> Message block type Uninterpreted by PPC */ }; typedef struct PPCWritePBRec PPCWritePBRec, *PPCWritePBPtr; struct PPCReadPBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; short filler1; PPCSessRefNum sessRefNum; /* 40 --> Session Reference */ Size bufferLength; /* 44 --> Length of the message buffer */ Size actualLength; /* 48 <-- Actual length read */ Ptr bufferPtr; /* 52 --> Pointer to message buffer */ Boolean more; /* 56 <-- if true more data in this block to be read */ unsigned char filler2; unsigned long userData; /* 58 <-- Message block userData Uninterpreted by PPC */ OSType blockCreator; /* 62 <-- Message block creator Uninterpreted by PPC */ OSType blockType; /* 66 <-- Message block type Uninterpreted by PPC */ }; typedef struct PPCReadPBRec PPCReadPBRec, *PPCReadPBPtr; struct PPCEndPBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; short filler1; PPCSessRefNum sessRefNum; /* 40 --> Session Reference */ }; typedef struct PPCEndPBRec PPCEndPBRec, *PPCEndPBPtr; struct PPCClosePBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; PPCPortRefNum portRefNum; /* 38 --> Port Identifier */ }; typedef struct PPCClosePBRec PPCClosePBRec, *PPCClosePBPtr; struct IPCListPortsPBRec { Ptr qLink; unsigned short csCode; unsigned short intUse; Ptr intUsePtr; PPCCompUPP ioCompletion; OSErr ioResult; unsigned long Reserved[5]; short filler1; unsigned short startIndex; /* 40 --> Start Index */ unsigned short requestCount; /* 42 --> Number of entries to be returned */ unsigned short actualCount; /* 44 <-- Actual Number of entries to be returned */ PPCPortPtr portName; /* 46 --> PortName Match */ LocationNamePtr locationName; /* 50 --> NBP or NAS type name to locate the Port Location */ PortInfoArrayPtr bufferPtr; /* 54 --> Pointer to a buffer requestCount*sizeof(PortInfo) bytes big */ }; typedef struct IPCListPortsPBRec IPCListPortsPBRec, *IPCListPortsPBPtr; union PPCParamBlockRec { PPCOpenPBRec openParam; PPCInformPBRec informParam; PPCStartPBRec startParam; PPCAcceptPBRec acceptParam; PPCRejectPBRec rejectParam; PPCWritePBRec writeParam; PPCReadPBRec readParam; PPCEndPBRec endParam; PPCClosePBRec closeParam; IPCListPortsPBRec listPortsParam; }; #if !GENERATINGCFM #pragma parameter __D0 PPCInit #endif extern pascal OSErr PPCInit(void) TWOWORDINLINE(0x7000, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCOpenSync(__A0) #endif extern pascal OSErr PPCOpenSync(PPCOpenPBPtr pb) TWOWORDINLINE(0x7001, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCOpenAsync(__A0) #endif extern pascal OSErr PPCOpenAsync(PPCOpenPBPtr pb) TWOWORDINLINE(0x7001, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 PPCInformSync(__A0) #endif extern pascal OSErr PPCInformSync(PPCInformPBPtr pb) TWOWORDINLINE(0x7003, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCInformAsync(__A0) #endif extern pascal OSErr PPCInformAsync(PPCInformPBPtr pb) TWOWORDINLINE(0x7003, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 PPCStartSync(__A0) #endif extern pascal OSErr PPCStartSync(PPCStartPBPtr pb) TWOWORDINLINE(0x7002, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCStartAsync(__A0) #endif extern pascal OSErr PPCStartAsync(PPCStartPBPtr pb) TWOWORDINLINE(0x7002, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 PPCAcceptSync(__A0) #endif extern pascal OSErr PPCAcceptSync(PPCAcceptPBPtr pb) TWOWORDINLINE(0x7004, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCAcceptAsync(__A0) #endif extern pascal OSErr PPCAcceptAsync(PPCAcceptPBPtr pb) TWOWORDINLINE(0x7004, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 PPCRejectSync(__A0) #endif extern pascal OSErr PPCRejectSync(PPCRejectPBPtr pb) TWOWORDINLINE(0x7005, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCRejectAsync(__A0) #endif extern pascal OSErr PPCRejectAsync(PPCRejectPBPtr pb) TWOWORDINLINE(0x7005, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 PPCWriteSync(__A0) #endif extern pascal OSErr PPCWriteSync(PPCWritePBPtr pb) TWOWORDINLINE(0x7006, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCWriteAsync(__A0) #endif extern pascal OSErr PPCWriteAsync(PPCWritePBPtr pb) TWOWORDINLINE(0x7006, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 PPCReadSync(__A0) #endif extern pascal OSErr PPCReadSync(PPCReadPBPtr pb) TWOWORDINLINE(0x7007, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCReadAsync(__A0) #endif extern pascal OSErr PPCReadAsync(PPCReadPBPtr pb) TWOWORDINLINE(0x7007, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 PPCEndSync(__A0) #endif extern pascal OSErr PPCEndSync(PPCEndPBPtr pb) TWOWORDINLINE(0x7008, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCEndAsync(__A0) #endif extern pascal OSErr PPCEndAsync(PPCEndPBPtr pb) TWOWORDINLINE(0x7008, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 PPCCloseSync(__A0) #endif extern pascal OSErr PPCCloseSync(PPCClosePBPtr pb) TWOWORDINLINE(0x7009, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 PPCCloseAsync(__A0) #endif extern pascal OSErr PPCCloseAsync(PPCClosePBPtr pb) TWOWORDINLINE(0x7009, 0xA4DD); #if !GENERATINGCFM #pragma parameter __D0 IPCListPortsSync(__A0) #endif extern pascal OSErr IPCListPortsSync(IPCListPortsPBPtr pb) TWOWORDINLINE(0x700A, 0xA0DD); #if !GENERATINGCFM #pragma parameter __D0 IPCListPortsAsync(__A0) #endif extern pascal OSErr IPCListPortsAsync(IPCListPortsPBPtr pb) TWOWORDINLINE(0x700A, 0xA4DD); extern pascal OSErr DeleteUserIdentity(unsigned long userRef); extern pascal OSErr GetDefaultUser(unsigned long *userRef, Str32 userName); extern pascal OSErr StartSecureSession(PPCStartPBPtr pb, Str32 userName, Boolean useDefault, Boolean allowGuest, Boolean *guestSelected, ConstStr255Param prompt); typedef pascal Boolean (*PPCFilterProcPtr)(LocationNamePtr name, PortInfoPtr port); #if USESROUTINEDESCRIPTORS typedef UniversalProcPtr PPCFilterUPP; #else typedef PPCFilterProcPtr PPCFilterUPP; #endif enum { uppPPCCompProcInfo = kPascalStackBased | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(PPCParamBlockPtr))), uppPPCFilterProcInfo = kPascalStackBased | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(LocationNamePtr))) | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(PortInfoPtr))) }; #if USESROUTINEDESCRIPTORS #define NewPPCCompProc(userRoutine) \ (PPCCompUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppPPCCompProcInfo, GetCurrentArchitecture()) #define NewPPCFilterProc(userRoutine) \ (PPCFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppPPCFilterProcInfo, GetCurrentArchitecture()) #else #define NewPPCCompProc(userRoutine) \ ((PPCCompUPP) (userRoutine)) #define NewPPCFilterProc(userRoutine) \ ((PPCFilterUPP) (userRoutine)) #endif #if USESROUTINEDESCRIPTORS #define CallPPCCompProc(userRoutine, pb) \ CallUniversalProc((UniversalProcPtr)(userRoutine), uppPPCCompProcInfo, (pb)) #define CallPPCFilterProc(userRoutine, name, port) \ CallUniversalProc((UniversalProcPtr)(userRoutine), uppPPCFilterProcInfo, (name), (port)) #else #define CallPPCCompProc(userRoutine, pb) \ (*(userRoutine))((pb)) #define CallPPCFilterProc(userRoutine, name, port) \ (*(userRoutine))((name), (port)) #endif extern pascal OSErr PPCBrowser(ConstStr255Param prompt, ConstStr255Param applListLabel, Boolean defaultSpecified, LocationNameRec *theLocation, PortInfoRec *thePortInfo, PPCFilterUPP portFilter, ConstStr32Param theLocNBPType) THREEWORDINLINE(0x303C, 0x0D00, 0xA82B); #if OLDROUTINENAMES /* The ParamBlock calls with the "Sync" or "Async" suffix are being phased out. */ #define PPCOpen(pb, async) ((async) ? PPCOpenAsync(pb) : PPCOpenSync(pb)) #define PPCInform(pb, async) ((async) ? PPCInformAsync(pb) : PPCInformSync(pb)) #define PPCStart(pb, async) ((async) ? PPCStartAsync(pb) : PPCStartSync(pb)) #define PPCAccept(pb, async) ((async) ? PPCAcceptAsync(pb) : PPCAcceptSync(pb)) #define PPCReject(pb, async) ((async) ? PPCRejectAsync(pb) : PPCRejectSync(pb)) #define PPCWrite(pb, async) ((async) ? PPCWriteAsync(pb) : PPCWriteSync(pb)) #define PPCRead(pb, async) ((async) ? PPCReadAsync(pb) : PPCReadSync(pb)) #define PPCEnd(pb, async) ((async) ? PPCEndAsync(pb) : PPCEndSync(pb)) #define PPCClose(pb, async) ((async) ? PPCCloseAsync(pb) : PPCCloseSync(pb)) #define IPCListPorts(pb, async) ((async) ? IPCListPortsAsync(pb) : IPCListPortsSync(pb)) #endif #if PRAGMA_IMPORT_SUPPORTED #pragma import off #endif #if PRAGMA_ALIGN_SUPPORTED #pragma options align=reset #endif #ifdef __cplusplus } #endif #endif /* __PPCTOOLBOX__ */