package Mac::AppleEvents;require Exporter;require DynaLoader;@ISA = qw(Exporter DynaLoader);@EXPORT = qw(	AECreateDesc	AECoerce	AECoerceDesc	AEDisposeDesc	AEDuplicateDesc	AECreateList	AECountItems	AEPut	AEPutDesc	AEGetNthDesc	AEDeleteItem	AEPutParam	AEPutParamDesc	AEGetParamDesc	AEDeleteParam	AEGetAttributeDesc	AEPutAttribute	AEPutAttributeDesc	AECreateAppleEvent	AESend	AEResetTimer	AESuspendTheCurrentEvent	AEResumeTheCurrentEvent	AEGetTheCurrentEvent	AESetTheCurrentEvent	AEGetInteractionAllowed	AESetInteractionAllowed	AEInstallEventHandler	AERemoveEventHandler	AEGetEventHandler	AEManagerInfo	AEBuild	AEBuildParameters	AEBuildAppleEvent	AEPrint	AEDescToSubDesc	AEGetSubDescType	AEGetSubDescBasicType	AESubDescIsListOrRecord	AEGetSubDescData	AESubDescToDesc	AECountSubDescItems	AEGetNthSubDesc	AEGetKeySubDesc		%AppleEvent	%SysAppleEvent	typeBoolean	typeChar	typeSMInt	typeInteger	typeSMFloat	typeFloat	typeLongInteger	typeShortInteger	typeLongFloat	typeShortFloat	typeExtended	typeComp	typeMagnitude	typeAEList	typeAERecord	typeAppleEvent	typeTrue	typeFalse	typeAlias	typeEnumerated	typeType	typeAppParameters	typeProperty	typeFSS	typeKeyword	typeSectionH	typeWildCard	typeApplSignature	typeQDRectangle	typeFixed	typeSessionID	typeTargetID	typeProcessSerialNumber	typeNull	keyDirectObject	keyErrorNumber	keyErrorString	keyProcessSerialNumber	keyTransactionIDAttr	keyReturnIDAttr	keyEventClassAttr	keyEventIDAttr	keyAddressAttr	keyOptionalKeywordAttr	keyTimeoutAttr	keyInteractLevelAttr	keyEventSourceAttr	keyMissedKeywordAttr	keyOriginalAddressAttr	keyPreDispatch	keySelectProc	keyAERecorderCount	keyAEVersion	kCoreEventClass	kAEOpenApplication	kAEOpenDocuments	kAEPrintDocuments	kAEQuitApplication	kAEAnswer	kAEApplicationDied	kAENoReply	kAEQueueReply	kAEWaitReply	kAENeverInteract	kAECanInteract	kAEAlwaysInteract	kAECanSwitchLayer	kAEDontReconnect	kAEWantReceipt	kAEDontRecord	kAEDontExecute	kAENormalPriority	kAEHighPriority	kAEStartRecording	kAEStopRecording	kAENotifyStartRecording	kAENotifyStopRecording	kAENotifyRecording	kAutoGenerateReturnID	kAnyTransactionID	kAEDefaultTimeout	kNoTimeOut	kAENoDispatch	kAEUseStandardDispatch	kAEDoNotIgnoreHandler	kAEIgnoreAppPhacHandler	kAEIgnoreAppEventHandler	kAEIgnoreSysPhacHandler	kAEIgnoreSysEventHandler	kAEIngoreBuiltInEventHandler	kAEDontDisposeOnResume	kAEInteractWithSelf	kAEInteractWithLocal	kAEInteractWithAll	kAEUnknownSource	kAEDirectCall	kAESameProcess	kAELocalProcess	kAERemoteProcess	kAEDataArray	kAEPackedArray	kAEHandleArray	kAEDescArray	kAEKeyDescArray);bootstrap Mac::AppleEvents;package Mac::AppleEvents::EventHandler;import Mac::AppleEvents;use Carp;sub TIEHASH{	my ($package,$sys) = @_;    my ($me) = bless {SYS => $sys};		return $me;}sub ParseKey {	my($key) = @_;		return (substr($key, 0, 4), substr($key, -4));}sub FETCH {  	my($sys,$key)  = @_;    my(@keys) = ParseKey $key;	my ($handler, $refcon) = AEGetEventHandler(@keys, $sys->{SYS});		return wantarray ? ($handler,$refcon) : $handler;}sub STORE {    my($sys,$key,$handler,$refcon) = @_;    my(@keys) = ParseKey $key;		$refcon = $key unless defined $refcon;		AEInstallEventHandler(@keys, $handler, $refcon, $sys->{SYS}) || die;}sub DELETE {		my($sys,$key)  = @_;    my(@keys) = ParseKey $key;		AERemoveEventHandler(@keys, $sys->{SYS});}sub DESTROY {	my($sys)  = @_;		undef %{$sys};}sub FIRSTKEY { croak "Mac::AppleEvents::EventHandler::FIRSTKEY is not implemented" }sub NEXTKEY { croak "Mac::AppleEvents::EventHandler::NEXTKEY is not implemented" }sub EXISTS { croak "Mac::AppleEvents::EventHandler::EXISTS is not implemented" }sub CLEAR { croak "Mac::AppleEvents::EventHandler::CLEAR is not implemented" }package Mac::AppleEvents;tie %AppleEvent, 	Mac::AppleEvents::EventHandler, 0;tie %SysAppleEvent,	Mac::AppleEvents::EventHandler, 1;sub typeBoolean                    {     "bool"; }sub typeChar                       {     "TEXT"; }sub typeSMInt                      {     "shor"; }sub typeInteger                    {     "long"; }sub typeSMFloat                    {     "sing"; }sub typeFloat                      {     "doub"; }sub typeLongInteger                {     "long"; }sub typeShortInteger               {     "shor"; }sub typeLongFloat                  {     "doub"; }sub typeShortFloat                 {     "sing"; }sub typeExtended                   {     "exte"; }sub typeComp                       {     "comp"; }sub typeMagnitude                  {     "magn"; }sub typeAEList                     {     "list"; }sub typeAERecord                   {     "reco"; }sub typeAppleEvent                 {     "aevt"; }sub typeTrue                       {     "true"; }sub typeFalse                      {     "fals"; }sub typeAlias                      {     "alis"; }sub typeEnumerated                 {     "enum"; }sub typeType                       {     "type"; }sub typeAppParameters              {     "appa"; }sub typeProperty                   {     "prop"; }sub typeFSS                        {     "fss "; }sub typeKeyword                    {     "keyw"; }sub typeSectionH                   {     "sect"; }sub typeWildCard                   {     "****"; }sub typeApplSignature              {     "sign"; }sub typeQDRectangle                {     "qdrt"; }sub typeFixed                      {     "fixd"; }sub typeSessionID                  {     "ssid"; }sub typeTargetID                   {     "targ"; }sub typeProcessSerialNumber        {     "psn "; }sub typeNull                       {     "null"; }sub keyDirectObject                {     "----"; }sub keyErrorNumber                 {     "errn"; }sub keyErrorString                 {     "errs"; }sub keyProcessSerialNumber         {     "psn "; }sub keyTransactionIDAttr           {     "tran"; }sub keyReturnIDAttr                {     "rtid"; }sub keyEventClassAttr              {     "evcl"; }sub keyEventIDAttr                 {     "evid"; }sub keyAddressAttr                 {     "addr"; }sub keyOptionalKeywordAttr         {     "optk"; }sub keyTimeoutAttr                 {     "timo"; }sub keyInteractLevelAttr           {     "inte"; }sub keyEventSourceAttr             {     "esrc"; }sub keyMissedKeywordAttr           {     "miss"; }sub keyOriginalAddressAttr         {     "from"; }sub keyPreDispatch                 {     "phac"; }sub keySelectProc                  {     "selh"; }sub keyAERecorderCount             {     "recr"; }sub keyAEVersion                   {     "vers"; }sub kCoreEventClass                {     "aevt"; }sub kAEOpenApplication             {     "oapp"; }sub kAEOpenDocuments               {     "odoc"; }sub kAEPrintDocuments              {     "pdoc"; }sub kAEQuitApplication             {     "quit"; }sub kAEAnswer                      {     "ansr"; }sub kAEApplicationDied             {     "obit"; }sub kAENoReply                     { 0x00000001; }sub kAEQueueReply                  { 0x00000002; }sub kAEWaitReply                   { 0x00000003; }sub kAENeverInteract               { 0x00000010; }sub kAECanInteract                 { 0x00000020; }sub kAEAlwaysInteract              { 0x00000030; }sub kAECanSwitchLayer              { 0x00000040; }sub kAEDontReconnect               { 0x00000080; }sub kAEWantReceipt                 { 0x00000200; }sub kAEDontRecord                  { 0x00001000; }sub kAEDontExecute                 { 0x00002000; }sub kAENormalPriority              { 0x00000000; }sub kAEHighPriority                { 0x00000001; }sub kAEStartRecording              {     "reca"; }sub kAEStopRecording               {     "recc"; }sub kAENotifyStartRecording        {     "rec1"; }sub kAENotifyStopRecording         {     "rec0"; }sub kAENotifyRecording             {     "recr"; }sub kAutoGenerateReturnID          {         -1; }sub kAnyTransactionID              {          0; }sub kAEDefaultTimeout              {         -1; }sub kNoTimeOut                     {         -2; }sub kAENoDispatch                  {          0; }sub kAEUseStandardDispatch         { 0xFFFFFFFF; }sub kAEDoNotIgnoreHandler          { 0x00000000; }sub kAEIgnoreAppPhacHandler        { 0x00000001; }sub kAEIgnoreAppEventHandler       { 0x00000002; }sub kAEIgnoreSysPhacHandler        { 0x00000004; }sub kAEIgnoreSysEventHandler       { 0x00000008; }sub kAEIngoreBuiltInEventHandler   { 0x00000010; }sub kAEDontDisposeOnResume         { 0x80000000; }sub kAEInteractWithSelf            {          0; }sub kAEInteractWithLocal           {          1; }sub kAEInteractWithAll             {          2; }sub kAEUnknownSource               {          0; }sub kAEDirectCall                  {          1; }sub kAESameProcess                 {          2; }sub kAELocalProcess                {          3; }sub kAERemoteProcess               {          4; }sub kAEDataArray                   {          0; }sub kAEPackedArray                 {          1; }sub kAEHandleArray                 {          2; }sub kAEDescArray                   {          3; }sub kAEKeyDescArray                {          4; }package AEDesc;use Mac::Memory ();use Mac::Types;my(%constant) = (	"true" => 1,	"fals" => 0,	"null" => "",);sub get () {	my($desc) = @_;	my($type) = $desc->type;		if (exists($constant{$type})) {		return $constant{$type};	} elsif (exists($MacUnpack{$type})) {		return MacUnpack($type, $desc->data->get);	} else {		return &Mac::AppleEvents::AEPrint($desc);	}}package AESubDesc;use Mac::Memory ();use Mac::Types;import Mac::AppleEvents;my(%constant) = (	"true" => 1,	"fals" => 0,	"null" => "",);sub get () {	my($desc) = @_;	my($type) = AEGetSubDescType($desc);		if (exists($constant{$type})) {		return $constant{$type};	} elsif (exists($MacUnpack{$type})) {		return MacUnpack($type, AEGetSubDescData($desc));	} else {		my($aedesc,$res) = AESubDescToDesc($desc);		$res = AEPrint($aedesc);		AEDisposeDesc($aedesc);				return $res;	}}package AEKeyDesc;package AEStream;sub new {	Open;}1;__END__