Mac-Carbon

 view release on metacpan or  search on metacpan

AppleEvents/AppleEvents.xs  view on Meta::CPAN

			AEFail((OSErr) RETVAL);
#endif
	}
	OUTPUT:
	RETVAL	

=item AEGetNthSubDesc SUBDESC,INDEX

B<Mac OS only.>

Returns the item INDEX of the subdescriptor and its type if the subdescriptor
represented a record and not a list.

=cut
void
AEGetNthSubDesc(subdesc,index)
	AESubDesc	&subdesc
	long			index
	PPCODE:
	{
#ifndef MACOS_TRADITIONAL
	croak("Usage: Mac::AppleEvents::AEGetNthSubDesc unsupported in Carbon");
#else
		OSType		kw;
		AESubDesc	sub;
		
		AEFail(AEGetNthSubDesc(&subdesc, index, &kw, &sub));
		XS_XPUSH(AESubDesc, sub);
		if (GIMME == G_ARRAY && kw != typeWildCard) {
			XS_XPUSH(OSType, kw);
		}
#endif
	}

=item AEGetKeySubDesc SUBDESC,KW

B<Mac OS only.>

Returns the keyword indexed item from the subdescriptor.

=back

=cut
AESubDesc
AEGetKeySubDesc(subdesc,kw)
	AESubDesc	&subdesc
	OSType		kw
	CODE:
#ifndef MACOS_TRADITIONAL
	croak("Usage: Mac::AppleEvents::AEGetKeySubDesc unsupported in Carbon");
#else
	AEFail(AEGetKeySubDesc(&subdesc, kw, &RETVAL));
#endif
	OUTPUT:
	RETVAL

MODULE = Mac::AppleEvents	PACKAGE = AEStream 

=head2 AEStream

The Apple Event Gizmos streams approach uses a streaming model for building 
a sequence of descriptors.

=over 4

=item new AEStream

=item AEStream::Open 

Return a new AEStream.

=cut
AEStream
Open()
	CODE:
#ifdef MACOS_TRADITIONAL
	AEFail(AEStream_Open(&RETVAL));
#else
	RETVAL = AEStream_Open();
#endif
	OUTPUT:
	RETVAL

=item new AEStream(CLASS, ID, ADDRESSTYPE, ADDRESS [, RETURNID [, TRANSACTIONID ] ])

=item AEStream::CreateEvent CLASS, ID, ADDRESSTYPE, ADDRESS, RETURNID, TRANSACTIONID

Create an AEStream attached to a new AppleEvent.

=cut
AEStream
CreateEvent(theClass, theID, addressType, address, returnID=kAutoGenerateReturnID, transactionID=0)
	OSType	theClass
	OSType	theID
	OSType	addressType
	SV *		address
	short		returnID
	long		transactionID
	CODE:
	{
		char *		addressPtr;
		STRLEN		addressLen;
		AEDesc		targetDesc;
		AppleEvent	event;
		OSErr			error;

		addressPtr = SvPV(address, addressLen);
		ConvertFourCharCode(addressType, addressPtr);

		error = AECreateDesc(addressType, addressPtr, addressLen, &targetDesc);
		ConvertFourCharCode(addressType, addressPtr);
		AEFail(error);

		if (gPAECreate)
			AEFail(
				CallOSACreateAppleEventProc(gPAECreate,
					theClass, theID, 
					&targetDesc, returnID, transactionID, &event, 
					gPAECreateRefCon));
		else
			AEFail(
				AECreateAppleEvent(
					theClass, theID, 
					&targetDesc, returnID, transactionID, &event));
		AEDisposeDesc(&targetDesc);
#ifdef MACOS_TRADITIONAL
		AEFail(AEStream_OpenEvent(&RETVAL, &event));
#else
		RETVAL = AEStream_OpenEvent(&event);
#endif
	}
	OUTPUT:
	RETVAL

=item new AEStream(EVENT)

=item AEStream::OpenEvent EVENT

Opens the stream on the $EVENT.
Return C<undef> if an error was detected.

=cut
AEStream
OpenEvent(theEvent)
	AEDesc	&theEvent
	CODE:
#ifdef MACOS_TRADITIONAL
	AEFail(AEStream_OpenEvent(&RETVAL, &theEvent));
#else
	RETVAL = AEStream_OpenEvent(&theEvent);
#endif
	OUTPUT:
	RETVAL

=item Close

Return the descriptor corresponding to the stream, and close it out.

	$stream->Close;

=cut
AEDesc
Close(stream)
	AEStream		&stream
	CODE:
	AEFail(AEStream_Close(&stream, &RETVAL));
	OUTPUT:
	stream
	RETVAL

=item Abort STREAM

Abort the streaming process, and close it out.

	$stream->Abort;

=cut
MacOSRet
Abort(stream)
	AEStream		&stream
	CODE:
	RETVAL = AEStream_Close(&stream, nil);
	OUTPUT:
	stream
	RETVAL

=item OpenDesc TYPE

Start building a descriptor of the given type.
Return zero if an error was detected.

	if ( $stream->OpenDesc($type) ) {
		# Long messy calculation that demonstrates the usefullness of this code
		if ( $stream->WriteData($calculatedData) 
		 &&  $stream->CloseDesc()
		){
			# then, my work here is done
		}
	}

=cut
MacOSRet
OpenDesc(stream, type)
	AEStream	&stream
	OSType	type
	CODE:
	RETVAL = AEStream_OpenDesc(&stream, type);
	OUTPUT:
	stream

=item WriteData DATA

Add data to the descriptor.

=cut
MacOSRet
WriteData(stream, data)
	AEStream	&stream
	SV *		data
	CODE:
	{
		void *	ptr;
		STRLEN	length;
		
		ptr = SvPV(data, length);
		RETVAL = AEStream_WriteData(&stream, ptr, length);
	}
	OUTPUT:
	stream
	RETVAL

=item CloseDesc



( run in 1.672 second using v1.01-cache-2.11-cpan-6aa56a78535 )