rb-scrpt 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGES +497 -0
- data/README.md +8 -0
- data/Rakefile +32 -0
- data/doc/aem-manual/01_introduction.html +60 -0
- data/doc/aem-manual/02_apioverview.html +107 -0
- data/doc/aem-manual/03_packingandunpackingdata.html +135 -0
- data/doc/aem-manual/04_references.html +409 -0
- data/doc/aem-manual/05_targetingapplications.html +164 -0
- data/doc/aem-manual/06_buildingandsendingevents.html +229 -0
- data/doc/aem-manual/07_findapp.html +63 -0
- data/doc/aem-manual/08_examples.html +94 -0
- data/doc/aem-manual/aemreferenceinheritance.gif +0 -0
- data/doc/aem-manual/index.html +56 -0
- data/doc/appscript-manual/01_introduction.html +94 -0
- data/doc/appscript-manual/02_aboutappscripting.html +247 -0
- data/doc/appscript-manual/03_quicktutorial.html +167 -0
- data/doc/appscript-manual/04_gettinghelp.html +188 -0
- data/doc/appscript-manual/05_keywordconversion.html +106 -0
- data/doc/appscript-manual/06_classesandenums.html +192 -0
- data/doc/appscript-manual/07_applicationobjects.html +211 -0
- data/doc/appscript-manual/08_realvsgenericreferences.html +96 -0
- data/doc/appscript-manual/09_referenceforms.html +241 -0
- data/doc/appscript-manual/10_referenceexamples.html +154 -0
- data/doc/appscript-manual/11_applicationcommands.html +245 -0
- data/doc/appscript-manual/12_commandexamples.html +138 -0
- data/doc/appscript-manual/13_performanceissues.html +142 -0
- data/doc/appscript-manual/14_notes.html +80 -0
- data/doc/appscript-manual/application_architecture.gif +0 -0
- data/doc/appscript-manual/application_architecture2.gif +0 -0
- data/doc/appscript-manual/finder_to_textedit_event.gif +0 -0
- data/doc/appscript-manual/index.html +62 -0
- data/doc/appscript-manual/relationships_example.gif +0 -0
- data/doc/appscript-manual/ruby_to_itunes_event.gif +0 -0
- data/doc/full.css +106 -0
- data/doc/index.html +45 -0
- data/doc/mactypes-manual/01_introduction.html +54 -0
- data/doc/mactypes-manual/02_aliasclass.html +124 -0
- data/doc/mactypes-manual/03_fileurlclass.html +126 -0
- data/doc/mactypes-manual/04_unitsclass.html +100 -0
- data/doc/mactypes-manual/index.html +53 -0
- data/doc/osax-manual/01_introduction.html +67 -0
- data/doc/osax-manual/02_interface.html +147 -0
- data/doc/osax-manual/03_examples.html +73 -0
- data/doc/osax-manual/04_notes.html +61 -0
- data/doc/osax-manual/index.html +53 -0
- data/doc/rb-appscript-logo.png +0 -0
- data/extconf.rb +63 -0
- data/rb-scrpt.gemspec +16 -0
- data/sample/AB_export_vcard.rb +31 -0
- data/sample/AB_list_people_with_emails.rb +13 -0
- data/sample/Add_iCal_event.rb +21 -0
- data/sample/Create_daily_iCal_todos.rb +75 -0
- data/sample/Export_Address_Book_phone_numbers.rb +59 -0
- data/sample/Hello_world.rb +21 -0
- data/sample/List_iTunes_playlist_names.rb +11 -0
- data/sample/Make_Mail_message.rb +33 -0
- data/sample/Open_file_in_TextEdit.rb +13 -0
- data/sample/Organize_Mail_messages.rb +61 -0
- data/sample/Print_folder_tree.rb +16 -0
- data/sample/Select_all_HTML_files.rb +14 -0
- data/sample/Set_iChat_status.rb +24 -0
- data/sample/Simple_Finder_GUI_Scripting.rb +18 -0
- data/sample/Stagger_Finder_windows.rb +25 -0
- data/sample/TextEdit_demo.rb +130 -0
- data/sample/iTunes_top40_to_html.rb +69 -0
- data/src/SendThreadSafe.c +380 -0
- data/src/SendThreadSafe.h +139 -0
- data/src/lib/_aem/aemreference.rb +1021 -0
- data/src/lib/_aem/codecs.rb +661 -0
- data/src/lib/_aem/connect.rb +205 -0
- data/src/lib/_aem/encodingsupport.rb +74 -0
- data/src/lib/_aem/findapp.rb +85 -0
- data/src/lib/_aem/mactypes.rb +250 -0
- data/src/lib/_aem/send.rb +279 -0
- data/src/lib/_aem/typewrappers.rb +59 -0
- data/src/lib/_appscript/defaultterminology.rb +277 -0
- data/src/lib/_appscript/referencerenderer.rb +242 -0
- data/src/lib/_appscript/reservedkeywords.rb +116 -0
- data/src/lib/_appscript/safeobject.rb +250 -0
- data/src/lib/_appscript/terminology.rb +470 -0
- data/src/lib/aem.rb +253 -0
- data/src/lib/kae.rb +1489 -0
- data/src/lib/osax.rb +659 -0
- data/src/lib/rb-scrpt.rb +1073 -0
- data/src/lib/version.rb +3 -0
- data/src/rbae.c +979 -0
- data/test/README +3 -0
- data/test/test_aemreference.rb +115 -0
- data/test/test_appscriptcommands.rb +149 -0
- data/test/test_appscriptreference.rb +103 -0
- data/test/test_codecs.rb +181 -0
- data/test/test_findapp.rb +23 -0
- data/test/test_mactypes.rb +77 -0
- data/test/test_osax.rb +52 -0
- metadata +146 -0
@@ -0,0 +1,139 @@
|
|
1
|
+
/*
|
2
|
+
File: AESendThreadSafe.h
|
3
|
+
|
4
|
+
Contains: Code to send Apple events in a thread-safe manner.
|
5
|
+
|
6
|
+
Written by: DTS
|
7
|
+
|
8
|
+
Copyright: Copyright (c) 2007 Apple Inc. All Rights Reserved.
|
9
|
+
|
10
|
+
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc.
|
11
|
+
("Apple") in consideration of your agreement to the following
|
12
|
+
terms, and your use, installation, modification or
|
13
|
+
redistribution of this Apple software constitutes acceptance of
|
14
|
+
these terms. If you do not agree with these terms, please do
|
15
|
+
not use, install, modify or redistribute this Apple software.
|
16
|
+
|
17
|
+
In consideration of your agreement to abide by the following
|
18
|
+
terms, and subject to these terms, Apple grants you a personal,
|
19
|
+
non-exclusive license, under Apple's copyrights in this
|
20
|
+
original Apple software (the "Apple Software"), to use,
|
21
|
+
reproduce, modify and redistribute the Apple Software, with or
|
22
|
+
without modifications, in source and/or binary forms; provided
|
23
|
+
that if you redistribute the Apple Software in its entirety and
|
24
|
+
without modifications, you must retain this notice and the
|
25
|
+
following text and disclaimers in all such redistributions of
|
26
|
+
the Apple Software. Neither the name, trademarks, service marks
|
27
|
+
or logos of Apple Inc. may be used to endorse or promote
|
28
|
+
products derived from the Apple Software without specific prior
|
29
|
+
written permission from Apple. Except as expressly stated in
|
30
|
+
this notice, no other rights or licenses, express or implied,
|
31
|
+
are granted by Apple herein, including but not limited to any
|
32
|
+
patent rights that may be infringed by your derivative works or
|
33
|
+
by other works in which the Apple Software may be incorporated.
|
34
|
+
|
35
|
+
The Apple Software is provided by Apple on an "AS IS" basis.
|
36
|
+
APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
37
|
+
WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
|
38
|
+
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING
|
39
|
+
THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
|
40
|
+
COMBINATION WITH YOUR PRODUCTS.
|
41
|
+
|
42
|
+
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT,
|
43
|
+
INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
44
|
+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
45
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY
|
46
|
+
OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
|
47
|
+
OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY
|
48
|
+
OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
|
49
|
+
OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF
|
50
|
+
SUCH DAMAGE.
|
51
|
+
|
52
|
+
Change History (most recent first):
|
53
|
+
|
54
|
+
$Log: AESendThreadSafe.h,v $
|
55
|
+
Revision 1.2 2007/02/12 11:58:43
|
56
|
+
Corrected grammo in comment.
|
57
|
+
|
58
|
+
Revision 1.1 2007/02/09 10:55:27
|
59
|
+
First checked in.
|
60
|
+
|
61
|
+
|
62
|
+
*/
|
63
|
+
|
64
|
+
/*
|
65
|
+
|
66
|
+
2007/06/24 -- Modified by HAS to make AESendMessageThreadSafeSynchronous API-compatible with AESendMessage.
|
67
|
+
|
68
|
+
*/
|
69
|
+
|
70
|
+
#ifndef _SENDTHREADSAFE_H
|
71
|
+
#define _SENDTHREADSAFE_H
|
72
|
+
|
73
|
+
#include <ApplicationServices/ApplicationServices.h>
|
74
|
+
|
75
|
+
/////////////////////////////////////////////////////////////////
|
76
|
+
|
77
|
+
/*
|
78
|
+
Introduction
|
79
|
+
------------
|
80
|
+
Since Mac OS X 10.2 it has been possible to synchronously send an Apple event
|
81
|
+
from a thread other than the main thread. The technique for doing this is
|
82
|
+
documented in Technote 2053 "Mac OS X 10.2".
|
83
|
+
|
84
|
+
<http://developer.apple.com/technotes/tn2002/tn2053.html>
|
85
|
+
|
86
|
+
Unfortunately, this technique isn't quite right. Specifically, due to a bug
|
87
|
+
in Apple Event Manager <rdar://problem/4976113>, it is not safe to dispose of
|
88
|
+
the Mach port (using mach_port_destroy, as documented in the technote, or, more
|
89
|
+
correctly, using mach_port_mod_refs) that you created to use as the reply port.
|
90
|
+
Doing this triggers a race condition that, very rarely, can cause the system
|
91
|
+
to destroy some other, completely unrelated, Mach port within your process.
|
92
|
+
This could cause all sorts of problems. One common symptom is that, after
|
93
|
+
accidentally destroying the Mach port associated with a thread, your program
|
94
|
+
dies with the following message:
|
95
|
+
|
96
|
+
/SourceCache/Libc/Libc-320.1.3/pthreads/pthread.c:897: failed assertion `ret == MACH_MSG_SUCCESS'
|
97
|
+
|
98
|
+
The best workaround to this problem is to not dispose of the Mach port that
|
99
|
+
you use as the Apple event reply port. If you have a limited number of
|
100
|
+
secondary threads from which you need to send Apple events, it's relatively
|
101
|
+
easy to allocate an Apple event reply port for each thread and then never
|
102
|
+
dispose it. However, if you have general case code, it might be tricky
|
103
|
+
to track down all of the threads that send Apple events and make sure they
|
104
|
+
have reply ports. This module was designed as a general case solution to
|
105
|
+
the problem.
|
106
|
+
|
107
|
+
The module exports a single function, AESendMessageThreadSafeSynchronous, which,
|
108
|
+
as its name suggests, sends an Apple event and waits for the reply (that is,
|
109
|
+
a synchronous IPC) and is safe to call from an arbitrary thread. It's basically
|
110
|
+
a wrapper around the system function AESendMessage, with added smarts to manage
|
111
|
+
a per-thread Apple event reply port.
|
112
|
+
|
113
|
+
When <rdar://problem/4976113> is fixed, this module should be unnecessary but
|
114
|
+
benign.
|
115
|
+
|
116
|
+
For information about how this works, see the comments in the implementation.
|
117
|
+
*/
|
118
|
+
|
119
|
+
/////////////////////////////////////////////////////////////////
|
120
|
+
|
121
|
+
#ifdef __cplusplus
|
122
|
+
extern "C" {
|
123
|
+
#endif
|
124
|
+
|
125
|
+
OSStatus SendMessageThreadSafe(
|
126
|
+
AppleEvent * eventPtr,
|
127
|
+
AppleEvent * replyPtr,
|
128
|
+
AESendMode sendMode,
|
129
|
+
long timeOutInTicks
|
130
|
+
);
|
131
|
+
// A thread-safe replacement for AESend. This is very much like AESendMessage,
|
132
|
+
// except that it takes care of setting up the reply port when you use it
|
133
|
+
// from a thread other than the main thread.
|
134
|
+
|
135
|
+
#ifdef __cplusplus
|
136
|
+
}
|
137
|
+
#endif
|
138
|
+
|
139
|
+
#endif
|