summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_zipapp.py
blob: 69f2e55d5638400f41c83e574a4b1dd19e319592 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
"""Test harness for the zipapp module."""

import io
import pathlib
import stat
import sys
import tempfile
import unittest
import zipapp
import zipfile
from test.support import requires_zlib

from unittest.mock import patch

class ZipAppTest(unittest.TestCase):

    """Test zipapp module functionality."""

    def setUp(self):
        tmpdir = tempfile.TemporaryDirectory()
        self.addCleanup(tmpdir.cleanup)
        self.tmpdir = pathlib.Path(tmpdir.name)

    def test_create_archive(self):
        # Test packing a directory.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target))
        self.assertTrue(target.is_file())

    def test_create_archive_with_pathlib(self):
        # Test packing a directory using Path objects for source and target.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(source, target)
        self.assertTrue(target.is_file())

    def test_create_archive_with_subdirs(self):
        # Test packing a directory includes entries for subdirectories.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        (source / 'foo').mkdir()
        (source / 'bar').mkdir()
        (source / 'foo' / '__init__.py').touch()
        target = io.BytesIO()
        zipapp.create_archive(str(source), target)
        target.seek(0)
        with zipfile.ZipFile(target, 'r') as z:
            self.assertIn('foo/', z.namelist())
            self.assertIn('bar/', z.namelist())

    def test_create_archive_with_filter(self):
        # Test packing a directory and using filter to specify
        # which files to include.
        def skip_pyc_files(path):
            return path.suffix != '.pyc'
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        (source / 'test.py').touch()
        (source / 'test.pyc').touch()
        target = self.tmpdir / 'source.pyz'

        zipapp.create_archive(source, target, filter=skip_pyc_files)
        with zipfile.ZipFile(target, 'r') as z:
            self.assertIn('__main__.py', z.namelist())
            self.assertIn('test.py', z.namelist())
            self.assertNotIn('test.pyc', z.namelist())

    def test_create_archive_filter_exclude_dir(self):
        # Test packing a directory and using a filter to exclude a
        # subdirectory (ensures that the path supplied to include
        # is relative to the source location, as expected).
        def skip_dummy_dir(path):
            return path.parts[0] != 'dummy'
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        (source / 'test.py').touch()
        (source / 'dummy').mkdir()
        (source / 'dummy' / 'test2.py').touch()
        target = self.tmpdir / 'source.pyz'

        zipapp.create_archive(source, target, filter=skip_dummy_dir)
        with zipfile.ZipFile(target, 'r') as z:
            self.assertEqual(len(z.namelist()), 2)
            self.assertIn('__main__.py', z.namelist())
            self.assertIn('test.py', z.namelist())

    def test_create_archive_default_target(self):
        # Test packing a directory to the default name.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        zipapp.create_archive(str(source))
        expected_target = self.tmpdir / 'source.pyz'
        self.assertTrue(expected_target.is_file())

    @requires_zlib()
    def test_create_archive_with_compression(self):
        # Test packing a directory into a compressed archive.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        (source / 'test.py').touch()
        target = self.tmpdir / 'source.pyz'

        zipapp.create_archive(source, target, compressed=True)
        with zipfile.ZipFile(target, 'r') as z:
            for name in ('__main__.py', 'test.py'):
                self.assertEqual(z.getinfo(name).compress_type,
                                 zipfile.ZIP_DEFLATED)

    def test_no_main(self):
        # Test that packing a directory with no __main__.py fails.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / 'foo.py').touch()
        target = self.tmpdir / 'source.pyz'
        with self.assertRaises(zipapp.ZipAppError):
            zipapp.create_archive(str(source), str(target))

    def test_main_and_main_py(self):
        # Test that supplying a main argument with __main__.py fails.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        with self.assertRaises(zipapp.ZipAppError):
            zipapp.create_archive(str(source), str(target), main='pkg.mod:fn')

    def test_main_written(self):
        # Test that the __main__.py is written correctly.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / 'foo.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), main='pkg.mod:fn')
        with zipfile.ZipFile(str(target), 'r') as z:
            self.assertIn('__main__.py', z.namelist())
            self.assertIn(b'pkg.mod.fn()', z.read('__main__.py'))

    def test_main_only_written_once(self):
        # Test that we don't write multiple __main__.py files.
        # The initial implementation had this bug; zip files allow
        # multiple entries with the same name
        source = self.tmpdir / 'source'
        source.mkdir()
        # Write 2 files, as the original bug wrote __main__.py
        # once for each file written :-(
        # See http://bugs.python.org/review/23491/diff/13982/Lib/zipapp.py#newcode67Lib/zipapp.py:67
        # (line 67)
        (source / 'foo.py').touch()
        (source / 'bar.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), main='pkg.mod:fn')
        with zipfile.ZipFile(str(target), 'r') as z:
            self.assertEqual(1, z.namelist().count('__main__.py'))

    def test_main_validation(self):
        # Test that invalid values for main are rejected.
        source = self.tmpdir / 'source'
        source.mkdir()
        target = self.tmpdir / 'source.pyz'
        problems = [
            '', 'foo', 'foo:', ':bar', '12:bar', 'a.b.c.:d',
            '.a:b', 'a:b.', 'a:.b', 'a:silly name'
        ]
        for main in problems:
            with self.subTest(main=main):
                with self.assertRaises(zipapp.ZipAppError):
                    zipapp.create_archive(str(source), str(target), main=main)

    def test_default_no_shebang(self):
        # Test that no shebang line is written to the target by default.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target))
        with target.open('rb') as f:
            self.assertNotEqual(f.read(2), b'#!')

    def test_custom_interpreter(self):
        # Test that a shebang line with a custom interpreter is written
        # correctly.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), interpreter='python')
        with target.open('rb') as f:
            self.assertEqual(f.read(2), b'#!')
            self.assertEqual(b'python\n', f.readline())

    def test_pack_to_fileobj(self):
        # Test that we can pack to a file object.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = io.BytesIO()
        zipapp.create_archive(str(source), target, interpreter='python')
        self.assertTrue(target.getvalue().startswith(b'#!python\n'))

    def test_read_shebang(self):
        # Test that we can read the shebang line correctly.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), interpreter='python')
        self.assertEqual(zipapp.get_interpreter(str(target)), 'python')

    def test_read_missing_shebang(self):
        # Test that reading the shebang line of a file without one returns None.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target))
        self.assertEqual(zipapp.get_interpreter(str(target)), None)

    def test_modify_shebang(self):
        # Test that we can change the shebang of a file.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), interpreter='python')
        new_target = self.tmpdir / 'changed.pyz'
        zipapp.create_archive(str(target), str(new_target), interpreter='python2.7')
        self.assertEqual(zipapp.get_interpreter(str(new_target)), 'python2.7')

    def test_write_shebang_to_fileobj(self):
        # Test that we can change the shebang of a file, writing the result to a
        # file object.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), interpreter='python')
        new_target = io.BytesIO()
        zipapp.create_archive(str(target), new_target, interpreter='python2.7')
        self.assertTrue(new_target.getvalue().startswith(b'#!python2.7\n'))

    def test_read_from_pathobj(self):
        # Test that we can copy an archive using a pathlib.Path object
        # for the source.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target1 = self.tmpdir / 'target1.pyz'
        target2 = self.tmpdir / 'target2.pyz'
        zipapp.create_archive(source, target1, interpreter='python')
        zipapp.create_archive(target1, target2, interpreter='python2.7')
        self.assertEqual(zipapp.get_interpreter(target2), 'python2.7')

    def test_read_from_fileobj(self):
        # Test that we can copy an archive using an open file object.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        temp_archive = io.BytesIO()
        zipapp.create_archive(str(source), temp_archive, interpreter='python')
        new_target = io.BytesIO()
        temp_archive.seek(0)
        zipapp.create_archive(temp_archive, new_target, interpreter='python2.7')
        self.assertTrue(new_target.getvalue().startswith(b'#!python2.7\n'))

    def test_remove_shebang(self):
        # Test that we can remove the shebang from a file.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), interpreter='python')
        new_target = self.tmpdir / 'changed.pyz'
        zipapp.create_archive(str(target), str(new_target), interpreter=None)
        self.assertEqual(zipapp.get_interpreter(str(new_target)), None)

    def test_content_of_copied_archive(self):
        # Test that copying an archive doesn't corrupt it.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = io.BytesIO()
        zipapp.create_archive(str(source), target, interpreter='python')
        new_target = io.BytesIO()
        target.seek(0)
        zipapp.create_archive(target, new_target, interpreter=None)
        new_target.seek(0)
        with zipfile.ZipFile(new_target, 'r') as z:
            self.assertEqual(set(z.namelist()), {'__main__.py'})

    # (Unix only) tests that archives with shebang lines are made executable
    @unittest.skipIf(sys.platform == 'win32',
                     'Windows does not support an executable bit')
    def test_shebang_is_executable(self):
        # Test that an archive with a shebang line is made executable.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), interpreter='python')
        self.assertTrue(target.stat().st_mode & stat.S_IEXEC)

    @unittest.skipIf(sys.platform == 'win32',
                     'Windows does not support an executable bit')
    def test_no_shebang_is_not_executable(self):
        # Test that an archive with no shebang line is not made executable.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(str(source), str(target), interpreter=None)
        self.assertFalse(target.stat().st_mode & stat.S_IEXEC)


class ZipAppCmdlineTest(unittest.TestCase):

    """Test zipapp module command line API."""

    def setUp(self):
        tmpdir = tempfile.TemporaryDirectory()
        self.addCleanup(tmpdir.cleanup)
        self.tmpdir = pathlib.Path(tmpdir.name)

    def make_archive(self):
        # Test that an archive with no shebang line is not made executable.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        target = self.tmpdir / 'source.pyz'
        zipapp.create_archive(source, target)
        return target

    def test_cmdline_create(self):
        # Test the basic command line API.
        source = self.tmpdir / 'source'
        source.mkdir()
        (source / '__main__.py').touch()
        args = [str(source)]
        zipapp.main(args)
        target = source.with_suffix('.pyz')
        self.assertTrue(target.is_file())

    def test_cmdline_copy(self):
        # Test copying an archive.
        original = self.make_archive()
        target = self.tmpdir / 'target.pyz'
        args = [str(original), '-o', str(target)]
        zipapp.main(args)
        self.assertTrue(target.is_file())

    def test_cmdline_copy_inplace(self):
        # Test copying an archive in place fails.
        original = self.make_archive()
        target = self.tmpdir / 'target.pyz'
        args = [str(original), '-o', str(original)]
        with self.assertRaises(SystemExit) as cm:
            zipapp.main(args)
        # Program should exit with a non-zero return code.
        self.assertTrue(cm.exception.code)

    def test_cmdline_copy_change_main(self):
        # Test copying an archive doesn't allow changing __main__.py.
        original = self.make_archive()
        target = self.tmpdir / 'target.pyz'
        args = [str(original), '-o', str(target), '-m', 'foo:bar']
        with self.assertRaises(SystemExit) as cm:
            zipapp.main(args)
        # Program should exit with a non-zero return code.
        self.assertTrue(cm.exception.code)

    @patch('sys.stdout', new_callable=io.StringIO)
    def test_info_command(self, mock_stdout):
        # Test the output of the info command.
        target = self.make_archive()
        args = [str(target), '--info']
        with self.assertRaises(SystemExit) as cm:
            zipapp.main(args)
        # Program should exit with a zero return code.
        self.assertEqual(cm.exception.code, 0)
        self.assertEqual(mock_stdout.getvalue(), "Interpreter: <none>\n")

    def test_info_error(self):
        # Test the info command fails when the archive does not exist.
        target = self.tmpdir / 'dummy.pyz'
        args = [str(target), '--info']
        with self.assertRaises(SystemExit) as cm:
            zipapp.main(args)
        # Program should exit with a non-zero return code.
        self.assertTrue(cm.exception.code)


if __name__ == "__main__":
    unittest.main()
ct = 0x0100
+kTextExportGetTimeFractionSelect = 0x0101
+kTextExportSetTimeFractionSelect = 0x0102
+kTextExportGetSettingsSelect = 0x0103
+kTextExportSetSettingsSelect = 0x0104
+kMIDIImportGetSettingsSelect = 0x0100
+kMIDIImportSetSettingsSelect = 0x0101
+kMovieExportNewGetDataAndPropertiesProcsSelect = 0x0100
+kMovieExportDisposeGetDataAndPropertiesProcsSelect = 0x0101
+kGraphicsImageImportSetSequenceEnabledSelect = 0x0100
+kGraphicsImageImportGetSequenceEnabledSelect = 0x0101
+kPreviewShowDataSelect = 0x0001
+kPreviewMakePreviewSelect = 0x0002
+kPreviewMakePreviewReferenceSelect = 0x0003
+kPreviewEventSelect = 0x0004
+kDataCodecDecompressSelect = 0x0001
+kDataCodecGetCompressBufferSizeSelect = 0x0002
+kDataCodecCompressSelect = 0x0003
+kDataCodecBeginInterruptSafeSelect = 0x0004
+kDataCodecEndInterruptSafeSelect = 0x0005
+kDataCodecDecompressPartialSelect = 0x0006
+kDataCodecCompressPartialSelect = 0x0007
+kDataHGetDataSelect = 0x0002
+kDataHPutDataSelect = 0x0003
+kDataHFlushDataSelect = 0x0004
+kDataHOpenForWriteSelect = 0x0005
+kDataHCloseForWriteSelect = 0x0006
+kDataHOpenForReadSelect = 0x0008
+kDataHCloseForReadSelect = 0x0009
+kDataHSetDataRefSelect = 0x000A
+kDataHGetDataRefSelect = 0x000B
+kDataHCompareDataRefSelect = 0x000C
+kDataHTaskSelect = 0x000D
+kDataHScheduleDataSelect = 0x000E
+kDataHFinishDataSelect = 0x000F
+kDataHFlushCacheSelect = 0x0010
+kDataHResolveDataRefSelect = 0x0011
+kDataHGetFileSizeSelect = 0x0012
+kDataHCanUseDataRefSelect = 0x0013
+kDataHGetVolumeListSelect = 0x0014
+kDataHWriteSelect = 0x0015
+kDataHPreextendSelect = 0x0016
+kDataHSetFileSizeSelect = 0x0017
+kDataHGetFreeSpaceSelect = 0x0018
+kDataHCreateFileSelect = 0x0019
+kDataHGetPreferredBlockSizeSelect = 0x001A
+kDataHGetDeviceIndexSelect = 0x001B
+kDataHIsStreamingDataHandlerSelect = 0x001C
+kDataHGetDataInBufferSelect = 0x001D
+kDataHGetScheduleAheadTimeSelect = 0x001E
+kDataHSetCacheSizeLimitSelect = 0x001F
+kDataHGetCacheSizeLimitSelect = 0x0020
+kDataHGetMovieSelect = 0x0021
+kDataHAddMovieSelect = 0x0022
+kDataHUpdateMovieSelect = 0x0023
+kDataHDoesBufferSelect = 0x0024
+kDataHGetFileNameSelect = 0x0025
+kDataHGetAvailableFileSizeSelect = 0x0026
+kDataHGetMacOSFileTypeSelect = 0x0027
+kDataHGetMIMETypeSelect = 0x0028
+kDataHSetDataRefWithAnchorSelect = 0x0029
+kDataHGetDataRefWithAnchorSelect = 0x002A
+kDataHSetMacOSFileTypeSelect = 0x002B
+kDataHSetTimeBaseSelect = 0x002C
+kDataHGetInfoFlagsSelect = 0x002D
+kDataHScheduleData64Select = 0x002E
+kDataHWrite64Select = 0x002F
+kDataHGetFileSize64Select = 0x0030
+kDataHPreextend64Select = 0x0031
+kDataHSetFileSize64Select = 0x0032
+kDataHGetFreeSpace64Select = 0x0033
+kDataHAppend64Select = 0x0034
+kDataHReadAsyncSelect = 0x0035
+kDataHPollReadSelect = 0x0036
+kDataHGetDataAvailabilitySelect = 0x0037
+kDataHGetFileSizeAsyncSelect = 0x003A
+kDataHGetDataRefAsTypeSelect = 0x003B
+kDataHSetDataRefExtensionSelect = 0x003C
+kDataHGetDataRefExtensionSelect = 0x003D
+kDataHGetMovieWithFlagsSelect = 0x003E
+kDataHGetFileTypeOrderingSelect = 0x0040
+kDataHCreateFileWithFlagsSelect = 0x0041
+kDataHGetMIMETypeAsyncSelect = 0x0042
+kDataHGetInfoSelect = 0x0043
+kDataHSetIdleManagerSelect = 0x0044
+kDataHDeleteFileSelect = 0x0045
+kDataHSetMovieUsageFlagsSelect = 0x0046
+kDataHUseTemporaryDataRefSelect = 0x0047
+kDataHGetTemporaryDataRefCapabilitiesSelect = 0x0048
+kDataHRenameFileSelect = 0x0049
+kDataHPlaybackHintsSelect = 0x0103
+kDataHPlaybackHints64Select = 0x010E
+kDataHGetDataRateSelect = 0x0110
+kDataHSetTimeHintsSelect = 0x0111
+kVDGetMaxSrcRectSelect = 0x0001
+kVDGetActiveSrcRectSelect = 0x0002
+kVDSetDigitizerRectSelect = 0x0003
+kVDGetDigitizerRectSelect = 0x0004
+kVDGetVBlankRectSelect = 0x0005
+kVDGetMaskPixMapSelect = 0x0006
+kVDGetPlayThruDestinationSelect = 0x0008
+kVDUseThisCLUTSelect = 0x0009
+kVDSetInputGammaValueSelect = 0x000A
+kVDGetInputGammaValueSelect = 0x000B
+kVDSetBrightnessSelect = 0x000C
+kVDGetBrightnessSelect = 0x000D
+kVDSetContrastSelect = 0x000E
+kVDSetHueSelect = 0x000F
+kVDSetSharpnessSelect = 0x0010
+kVDSetSaturationSelect = 0x0011
+kVDGetContrastSelect = 0x0012
+kVDGetHueSelect = 0x0013
+kVDGetSharpnessSelect = 0x0014
+kVDGetSaturationSelect = 0x0015
+kVDGrabOneFrameSelect = 0x0016
+kVDGetMaxAuxBufferSelect = 0x0017
+kVDGetDigitizerInfoSelect = 0x0019
+kVDGetCurrentFlagsSelect = 0x001A
+kVDSetKeyColorSelect = 0x001B
+kVDGetKeyColorSelect = 0x001C
+kVDAddKeyColorSelect = 0x001D
+kVDGetNextKeyColorSelect = 0x001E
+kVDSetKeyColorRangeSelect = 0x001F
+kVDGetKeyColorRangeSelect = 0x0020
+kVDSetDigitizerUserInterruptSelect = 0x0021
+kVDSetInputColorSpaceModeSelect = 0x0022
+kVDGetInputColorSpaceModeSelect = 0x0023
+kVDSetClipStateSelect = 0x0024
+kVDGetClipStateSelect = 0x0025
+kVDSetClipRgnSelect = 0x0026
+kVDClearClipRgnSelect = 0x0027
+kVDGetCLUTInUseSelect = 0x0028
+kVDSetPLLFilterTypeSelect = 0x0029
+kVDGetPLLFilterTypeSelect = 0x002A
+kVDGetMaskandValueSelect = 0x002B
+kVDSetMasterBlendLevelSelect = 0x002C
+kVDSetPlayThruDestinationSelect = 0x002D
+kVDSetPlayThruOnOffSelect = 0x002E
+kVDSetFieldPreferenceSelect = 0x002F
+kVDGetFieldPreferenceSelect = 0x0030
+kVDPreflightDestinationSelect = 0x0032
+kVDPreflightGlobalRectSelect = 0x0033
+kVDSetPlayThruGlobalRectSelect = 0x0034
+kVDSetInputGammaRecordSelect = 0x0035
+kVDGetInputGammaRecordSelect = 0x0036
+kVDSetBlackLevelValueSelect = 0x0037
+kVDGetBlackLevelValueSelect = 0x0038
+kVDSetWhiteLevelValueSelect = 0x0039
+kVDGetWhiteLevelValueSelect = 0x003A
+kVDGetVideoDefaultsSelect = 0x003B
+kVDGetNumberOfInputsSelect = 0x003C
+kVDGetInputFormatSelect = 0x003D
+kVDSetInputSelect = 0x003E
+kVDGetInputSelect = 0x003F
+kVDSetInputStandardSelect = 0x0040
+kVDSetupBuffersSelect = 0x0041
+kVDGrabOneFrameAsyncSelect = 0x0042
+kVDDoneSelect = 0x0043
+kVDSetCompressionSelect = 0x0044
+kVDCompressOneFrameAsyncSelect = 0x0045
+kVDCompressDoneSelect = 0x0046
+kVDReleaseCompressBufferSelect = 0x0047
+kVDGetImageDescriptionSelect = 0x0048
+kVDResetCompressSequenceSelect = 0x0049
+kVDSetCompressionOnOffSelect = 0x004A
+kVDGetCompressionTypesSelect = 0x004B
+kVDSetTimeBaseSelect = 0x004C
+kVDSetFrameRateSelect = 0x004D
+kVDGetDataRateSelect = 0x004E
+kVDGetSoundInputDriverSelect = 0x004F
+kVDGetDMADepthsSelect = 0x0050
+kVDGetPreferredTimeScaleSelect = 0x0051
+kVDReleaseAsyncBuffersSelect = 0x0052
+kVDSetDataRateSelect = 0x0054
+kVDGetTimeCodeSelect = 0x0055
+kVDUseSafeBuffersSelect = 0x0056
+kVDGetSoundInputSourceSelect = 0x0057
+kVDGetCompressionTimeSelect = 0x0058
+kVDSetPreferredPacketSizeSelect = 0x0059
+kVDSetPreferredImageDimensionsSelect = 0x005A
+kVDGetPreferredImageDimensionsSelect = 0x005B
+kVDGetInputNameSelect = 0x005C
+kVDSetDestinationPortSelect = 0x005D
+kVDGetDeviceNameAndFlagsSelect = 0x005E
+kVDCaptureStateChangingSelect = 0x005F
+kVDGetUniqueIDsSelect = 0x0060
+kVDSelectUniqueIDsSelect = 0x0061
+kXMLParseDataRefSelect = 0x0001
+kXMLParseFileSelect = 0x0002
+kXMLParseDisposeXMLDocSelect = 0x0003
+kXMLParseGetDetailedParseErrorSelect = 0x0004
+kXMLParseAddElementSelect = 0x0005
+kXMLParseAddAttributeSelect = 0x0006
+kXMLParseAddMultipleAttributesSelect = 0x0007
+kXMLParseAddAttributeAndValueSelect = 0x0008
+kXMLParseAddMultipleAttributesAndValuesSelect = 0x0009
+kXMLParseAddAttributeValueKindSelect = 0x000A
+kXMLParseAddNameSpaceSelect = 0x000B
+kXMLParseSetOffsetAndLimitSelect = 0x000C
+kXMLParseSetEventParseRefConSelect = 0x000D
+kXMLParseSetStartDocumentHandlerSelect = 0x000E
+kXMLParseSetEndDocumentHandlerSelect = 0x000F
+kXMLParseSetStartElementHandlerSelect = 0x0010
+kXMLParseSetEndElementHandlerSelect = 0x0011
+kXMLParseSetCharDataHandlerSelect = 0x0012
+kXMLParseSetPreprocessInstructionHandlerSelect = 0x0013
+kXMLParseSetCommentHandlerSelect = 0x0014
+kXMLParseSetCDataHandlerSelect = 0x0015
+kSGInitializeSelect = 0x0001
+kSGSetDataOutputSelect = 0x0002
+kSGGetDataOutputSelect = 0x0003
+kSGSetGWorldSelect = 0x0004
+kSGGetGWorldSelect = 0x0005
+kSGNewChannelSelect = 0x0006
+kSGDisposeChannelSelect = 0x0007
+kSGStartPreviewSelect = 0x0010
+kSGStartRecordSelect = 0x0011
+kSGIdleSelect = 0x0012
+kSGStopSelect = 0x0013
+kSGPauseSelect = 0x0014
+kSGPrepareSelect = 0x0015
+kSGReleaseSelect = 0x0016
+kSGGetMovieSelect = 0x0017
+kSGSetMaximumRecordTimeSelect = 0x0018
+kSGGetMaximumRecordTimeSelect = 0x0019
+kSGGetStorageSpaceRemainingSelect = 0x001A
+kSGGetTimeRemainingSelect = 0x001B
+kSGGrabPictSelect = 0x001C
+kSGGetLastMovieResIDSelect = 0x001D
+kSGSetFlagsSelect = 0x001E
+kSGGetFlagsSelect = 0x001F
+kSGSetDataProcSelect = 0x0020
+kSGNewChannelFromComponentSelect = 0x0021
+kSGDisposeDeviceListSelect = 0x0022
+kSGAppendDeviceListToMenuSelect = 0x0023
+kSGSetSettingsSelect = 0x0024
+kSGGetSettingsSelect = 0x0025
+kSGGetIndChannelSelect = 0x0026
+kSGUpdateSelect = 0x0027
+kSGGetPauseSelect = 0x0028
+kSGSettingsDialogSelect = 0x0029
+kSGGetAlignmentProcSelect = 0x002A
+kSGSetChannelSettingsSelect = 0x002B
+kSGGetChannelSettingsSelect = 0x002C
+kSGGetModeSelect = 0x002D
+kSGSetDataRefSelect = 0x002E
+kSGGetDataRefSelect = 0x002F
+kSGNewOutputSelect = 0x0030
+kSGDisposeOutputSelect = 0x0031
+kSGSetOutputFlagsSelect = 0x0032
+kSGSetChannelOutputSelect = 0x0033
+kSGGetDataOutputStorageSpaceRemainingSelect = 0x0034
+kSGHandleUpdateEventSelect = 0x0035
+kSGSetOutputNextOutputSelect = 0x0036
+kSGGetOutputNextOutputSelect = 0x0037
+kSGSetOutputMaximumOffsetSelect = 0x0038
+kSGGetOutputMaximumOffsetSelect = 0x0039
+kSGGetOutputDataReferenceSelect = 0x003A
+kSGWriteExtendedMovieDataSelect = 0x003B
+kSGGetStorageSpaceRemaining64Select = 0x003C
+kSGGetDataOutputStorageSpaceRemaining64Select = 0x003D
+kSGWriteMovieDataSelect = 0x0100
+kSGAddFrameReferenceSelect = 0x0101
+kSGGetNextFrameReferenceSelect = 0x0102
+kSGGetTimeBaseSelect = 0x0103
+kSGSortDeviceListSelect = 0x0104
+kSGAddMovieDataSelect = 0x0105
+kSGChangedSourceSelect = 0x0106
+kSGAddExtendedFrameReferenceSelect = 0x0107
+kSGGetNextExtendedFrameReferenceSelect = 0x0108
+kSGAddExtendedMovieDataSelect = 0x0109
+kSGAddOutputDataRefToMediaSelect = 0x010A
+kSGSetSettingsSummarySelect = 0x010B
+kSGSetChannelUsageSelect = 0x0080
+kSGGetChannelUsageSelect = 0x0081
+kSGSetChannelBoundsSelect = 0x0082
+kSGGetChannelBoundsSelect = 0x0083
+kSGSetChannelVolumeSelect = 0x0084
+kSGGetChannelVolumeSelect = 0x0085
+kSGGetChannelInfoSelect = 0x0086
+kSGSetChannelPlayFlagsSelect = 0x0087
+kSGGetChannelPlayFlagsSelect = 0x0088
+kSGSetChannelMaxFramesSelect = 0x0089
+kSGGetChannelMaxFramesSelect = 0x008A
+kSGSetChannelRefConSelect = 0x008B
+kSGSetChannelClipSelect = 0x008C
+kSGGetChannelClipSelect = 0x008D
+kSGGetChannelSampleDescriptionSelect = 0x008E
+kSGGetChannelDeviceListSelect = 0x008F
+kSGSetChannelDeviceSelect = 0x0090
+kSGSetChannelMatrixSelect = 0x0091
+kSGGetChannelMatrixSelect = 0x0092
+kSGGetChannelTimeScaleSelect = 0x0093
+kSGChannelPutPictureSelect = 0x0094
+kSGChannelSetRequestedDataRateSelect = 0x0095
+kSGChannelGetRequestedDataRateSelect = 0x0096
+kSGChannelSetDataSourceNameSelect = 0x0097
+kSGChannelGetDataSourceNameSelect = 0x0098
+kSGChannelSetCodecSettingsSelect = 0x0099
+kSGChannelGetCodecSettingsSelect = 0x009A
+kSGGetChannelTimeBaseSelect = 0x009B
+kSGGetChannelRefConSelect = 0x009C
+kSGGetChannelDeviceAndInputNamesSelect = 0x009D
+kSGSetChannelDeviceInputSelect = 0x009E
+kSGSetChannelSettingsStateChangingSelect = 0x009F
+kSGInitChannelSelect = 0x0180
+kSGWriteSamplesSelect = 0x0181
+kSGGetDataRateSelect = 0x0182
+kSGAlignChannelRectSelect = 0x0183
+kSGPanelGetDitlSelect = 0x0200
+kSGPanelGetTitleSelect = 0x0201
+kSGPanelCanRunSelect = 0x0202
+kSGPanelInstallSelect = 0x0203
+kSGPanelEventSelect = 0x0204
+kSGPanelItemSelect = 0x0205
+kSGPanelRemoveSelect = 0x0206
+kSGPanelSetGrabberSelect = 0x0207
+kSGPanelSetResFileSelect = 0x0208
+kSGPanelGetSettingsSelect = 0x0209
+kSGPanelSetSettingsSelect = 0x020A
+kSGPanelValidateInputSelect = 0x020B
+kSGPanelSetEventFilterSelect = 0x020C
+kSGPanelGetDITLForSizeSelect = 0x020D
+kSGGetSrcVideoBoundsSelect = 0x0100
+kSGSetVideoRectSelect = 0x0101
+kSGGetVideoRectSelect = 0x0102
+kSGGetVideoCompressorTypeSelect = 0x0103
+kSGSetVideoCompressorTypeSelect = 0x0104
+kSGSetVideoCompressorSelect = 0x0105
+kSGGetVideoCompressorSelect = 0x0106
+kSGGetVideoDigitizerComponentSelect = 0x0107
+kSGSetVideoDigitizerComponentSelect = 0x0108
+kSGVideoDigitizerChangedSelect = 0x0109
+kSGSetVideoBottlenecksSelect = 0x010A
+kSGGetVideoBottlenecksSelect = 0x010B
+kSGGrabFrameSelect = 0x010C
+kSGGrabFrameCompleteSelect = 0x010D
+kSGDisplayFrameSelect = 0x010E
+kSGCompressFrameSelect = 0x010F
+kSGCompressFrameCompleteSelect = 0x0110
+kSGAddFrameSelect = 0x0111
+kSGTransferFrameForCompressSelect = 0x0112
+kSGSetCompressBufferSelect = 0x0113
+kSGGetCompressBufferSelect = 0x0114
+kSGGetBufferInfoSelect = 0x0115
+kSGSetUseScreenBufferSelect = 0x0116
+kSGGetUseScreenBufferSelect = 0x0117
+kSGGrabCompressCompleteSelect = 0x0118
+kSGDisplayCompressSelect = 0x0119
+kSGSetFrameRateSelect = 0x011A
+kSGGetFrameRateSelect = 0x011B
+kSGSetPreferredPacketSizeSelect = 0x0121
+kSGGetPreferredPacketSizeSelect = 0x0122
+kSGSetUserVideoCompressorListSelect = 0x0123
+kSGGetUserVideoCompressorListSelect = 0x0124
+kSGSetSoundInputDriverSelect = 0x0100
+kSGGetSoundInputDriverSelect = 0x0101
+kSGSoundInputDriverChangedSelect = 0x0102
+kSGSetSoundRecordChunkSizeSelect = 0x0103
+kSGGetSoundRecordChunkSizeSelect = 0x0104
+kSGSetSoundInputRateSelect = 0x0105
+kSGGetSoundInputRateSelect = 0x0106
+kSGSetSoundInputParametersSelect = 0x0107
+kSGGetSoundInputParametersSelect = 0x0108
+kSGSetAdditionalSoundRatesSelect = 0x0109
+kSGGetAdditionalSoundRatesSelect = 0x010A
+kSGSetFontNameSelect = 0x0100
+kSGSetFontSizeSelect = 0x0101
+kSGSetTextForeColorSelect = 0x0102
+kSGSetTextBackColorSelect = 0x0103
+kSGSetJustificationSelect = 0x0104
+kSGGetTextReturnToSpaceValueSelect = 0x0105
+kSGSetTextReturnToSpaceValueSelect = 0x0106
+kSGGetInstrumentSelect = 0x0100
+kSGSetInstrumentSelect = 0x0101
+kQTVideoOutputGetDisplayModeListSelect = 0x0001
+kQTVideoOutputGetCurrentClientNameSelect = 0x0002
+kQTVideoOutputSetClientNameSelect = 0x0003
+kQTVideoOutputGetClientNameSelect = 0x0004
+kQTVideoOutputBeginSelect = 0x0005
+kQTVideoOutputEndSelect = 0x0006
+kQTVideoOutputSetDisplayModeSelect = 0x0007
+kQTVideoOutputGetDisplayModeSelect = 0x0008
+kQTVideoOutputCustomConfigureDisplaySelect = 0x0009
+kQTVideoOutputSaveStateSelect = 0x000A
+kQTVideoOutputRestoreStateSelect = 0x000B
+kQTVideoOutputGetGWorldSelect = 0x000C
+kQTVideoOutputGetGWorldParametersSelect = 0x000D
+kQTVideoOutputGetIndSoundOutputSelect = 0x000E
+kQTVideoOutputGetClockSelect = 0x000F
+kQTVideoOutputSetEchoPortSelect = 0x0010
+kQTVideoOutputGetIndImageDecompressorSelect = 0x0011
+kQTVideoOutputBaseSetEchoPortSelect = 0x0012
+handlerHasSpatial = 1 << 0
+handlerCanClip = 1 << 1
+handlerCanMatte = 1 << 2
+handlerCanTransferMode = 1 << 3
+handlerNeedsBuffer = 1 << 4
+handlerNoIdle = 1 << 5
+handlerNoScheduler = 1 << 6
+handlerWantsTime = 1 << 7
+handlerCGrafPortOnly = 1 << 8
+handlerCanSend = 1 << 9
+handlerCanHandleComplexMatrix = 1 << 10
+handlerWantsDestinationPixels = 1 << 11
+handlerCanSendImageData = 1 << 12
+handlerCanPicSave = 1 << 13
+mMustDraw = 1 << 3
+mAtEnd = 1 << 4
+mPreflightDraw = 1 << 5
+mSyncDrawing = 1 << 6
+mPrecompositeOnly = 1 << 9
+mSoundOnly = 1 << 10
+mDoIdleActionsBeforeDraws = 1 << 11
+mDisableIdleActions = 1 << 12
+mDidDraw = 1 << 0
+mNeedsToDraw = 1 << 2
+mDrawAgain = 1 << 3
+mPartialDraw = 1 << 4
+mWantIdleActions = 1 << 5
+forceUpdateRedraw = 1 << 0
+forceUpdateNewBuffer = 1 << 1
+mHitTestBounds = 1L << 0
+mHitTestImage = 1L << 1
+mHitTestInvisible = 1L << 2
+mHitTestIsClick = 1L << 3
+mOpaque = 1L << 0
+mInvisible = 1L << 1
+kMediaQTIdleFrequencySelector = FOUR_CHAR_CODE('idfq')
+kMediaVideoParamBrightness = 1
+kMediaVideoParamContrast = 2
+kMediaVideoParamHue = 3
+kMediaVideoParamSharpness = 4
+kMediaVideoParamSaturation = 5
+kMediaVideoParamBlackLevel = 6
+kMediaVideoParamWhiteLevel = 7
+kMHInfoEncodedFrameRate = FOUR_CHAR_CODE('orat')
+kEmptyPurgableChunksOverAllowance = 1
+kCallComponentExecuteWiredActionSelect = -9
+kMediaSetChunkManagementFlagsSelect = 0x0415
+kMediaGetChunkManagementFlagsSelect = 0x0416
+kMediaSetPurgeableChunkMemoryAllowanceSelect = 0x0417
+kMediaGetPurgeableChunkMemoryAllowanceSelect = 0x0418
+kMediaEmptyAllPurgeableChunksSelect = 0x0419
+kMediaInitializeSelect = 0x0501
+kMediaSetHandlerCapabilitiesSelect = 0x0502
+kMediaIdleSelect = 0x0503
+kMediaGetMediaInfoSelect = 0x0504
+kMediaPutMediaInfoSelect = 0x0505
+kMediaSetActiveSelect = 0x0506
+kMediaSetRateSelect = 0x0507
+kMediaGGetStatusSelect = 0x0508
+kMediaTrackEditedSelect = 0x0509
+kMediaSetMediaTimeScaleSelect = 0x050A
+kMediaSetMovieTimeScaleSelect = 0x050B
+kMediaSetGWorldSelect = 0x050C
+kMediaSetDimensionsSelect = 0x050D
+kMediaSetClipSelect = 0x050E
+kMediaSetMatrixSelect = 0x050F
+kMediaGetTrackOpaqueSelect = 0x0510
+kMediaSetGraphicsModeSelect = 0x0511
+kMediaGetGraphicsModeSelect = 0x0512
+kMediaGSetVolumeSelect = 0x0513
+kMediaSetSoundBalanceSelect = 0x0514
+kMediaGetSoundBalanceSelect = 0x0515
+kMediaGetNextBoundsChangeSelect = 0x0516
+kMediaGetSrcRgnSelect = 0x0517
+kMediaPrerollSelect = 0x0518
+kMediaSampleDescriptionChangedSelect = 0x0519
+kMediaHasCharacteristicSelect = 0x051A
+kMediaGetOffscreenBufferSizeSelect = 0x051B
+kMediaSetHintsSelect = 0x051C
+kMediaGetNameSelect = 0x051D
+kMediaForceUpdateSelect = 0x051E
+kMediaGetDrawingRgnSelect = 0x051F
+kMediaGSetActiveSegmentSelect = 0x0520
+kMediaInvalidateRegionSelect = 0x0521
+kMediaGetNextStepTimeSelect = 0x0522
+kMediaSetNonPrimarySourceDataSelect = 0x0523
+kMediaChangedNonPrimarySourceSelect = 0x0524
+kMediaTrackReferencesChangedSelect = 0x0525
+kMediaGetSampleDataPointerSelect = 0x0526
+kMediaReleaseSampleDataPointerSelect = 0x0527
+kMediaTrackPropertyAtomChangedSelect = 0x0528
+kMediaSetTrackInputMapReferenceSelect = 0x0529
+kMediaSetVideoParamSelect = 0x052B
+kMediaGetVideoParamSelect = 0x052C
+kMediaCompareSelect = 0x052D
+kMediaGetClockSelect = 0x052E
+kMediaSetSoundOutputComponentSelect = 0x052F
+kMediaGetSoundOutputComponentSelect = 0x0530
+kMediaSetSoundLocalizationDataSelect = 0x0531
+kMediaGetInvalidRegionSelect = 0x053C
+kMediaSampleDescriptionB2NSelect = 0x053E
+kMediaSampleDescriptionN2BSelect = 0x053F
+kMediaQueueNonPrimarySourceDataSelect = 0x0540
+kMediaFlushNonPrimarySourceDataSelect = 0x0541
+kMediaGetURLLinkSelect = 0x0543
+kMediaMakeMediaTimeTableSelect = 0x0545
+kMediaHitTestForTargetRefConSelect = 0x0546
+kMediaHitTestTargetRefConSelect = 0x0547
+kMediaGetActionsForQTEventSelect = 0x0548
+kMediaDisposeTargetRefConSelect = 0x0549
+kMediaTargetRefConsEqualSelect = 0x054A
+kMediaSetActionsCallbackSelect = 0x054B
+kMediaPrePrerollBeginSelect = 0x054C
+kMediaPrePrerollCancelSelect = 0x054D
+kMediaEnterEmptyEditSelect = 0x054F
+kMediaCurrentMediaQueuedDataSelect = 0x0550
+kMediaGetEffectiveVolumeSelect = 0x0551
+kMediaResolveTargetRefConSelect = 0x0552
+kMediaGetSoundLevelMeteringEnabledSelect = 0x0553
+kMediaSetSoundLevelMeteringEnabledSelect = 0x0554
+kMediaGetSoundLevelMeterInfoSelect = 0x0555
+kMediaGetEffectiveSoundBalanceSelect = 0x0556
+kMediaSetScreenLockSelect = 0x0557
+kMediaSetDoMCActionCallbackSelect = 0x0558
+kMediaGetErrorStringSelect = 0x0559
+kMediaGetSoundEqualizerBandsSelect = 0x055A
+kMediaSetSoundEqualizerBandsSelect = 0x055B
+kMediaGetSoundEqualizerBandLevelsSelect = 0x055C
+kMediaDoIdleActionsSelect = 0x055D
+kMediaSetSoundBassAndTrebleSelect = 0x055E
+kMediaGetSoundBassAndTrebleSelect = 0x055F
+kMediaTimeBaseChangedSelect = 0x0560
+kMediaMCIsPlayerEventSelect = 0x0561
+kMediaGetMediaLoadStateSelect = 0x0562
+kMediaVideoOutputChangedSelect = 0x0563
+kMediaEmptySampleCacheSelect = 0x0564
+kMediaGetPublicInfoSelect = 0x0565
+kMediaSetPublicInfoSelect = 0x0566
+kMediaGetUserPreferredCodecsSelect = 0x0567
+kMediaSetUserPreferredCodecsSelect = 0x0568
+kMediaRefConSetPropertySelect = 0x0569
+kMediaRefConGetPropertySelect = 0x056A
+kMediaNavigateTargetRefConSelect = 0x056B
+kMediaGGetIdleManagerSelect = 0x056C
+kMediaGSetIdleManagerSelect = 0x056D
+kaiToneDescType = FOUR_CHAR_CODE('tone')
+kaiNoteRequestInfoType = FOUR_CHAR_CODE('ntrq')
+kaiKnobListType = FOUR_CHAR_CODE('knbl')
+kaiKeyRangeInfoType = FOUR_CHAR_CODE('sinf')
+kaiSampleDescType = FOUR_CHAR_CODE('sdsc')
+kaiSampleInfoType = FOUR_CHAR_CODE('smin')
+kaiSampleDataType = FOUR_CHAR_CODE('sdat')
+kaiSampleDataQUIDType = FOUR_CHAR_CODE('quid')
+kaiInstInfoType = FOUR_CHAR_CODE('iinf')
+kaiPictType = FOUR_CHAR_CODE('pict')
+kaiWriterType = FOUR_CHAR_CODE('\xa9wrt')
+kaiCopyrightType = FOUR_CHAR_CODE('\xa9cpy')
+kaiOtherStrType = FOUR_CHAR_CODE('str ')
+kaiInstrumentRefType = FOUR_CHAR_CODE('iref')
+kaiInstGMQualityType = FOUR_CHAR_CODE('qual')
+kaiLibraryInfoType = FOUR_CHAR_CODE('linf')
+kaiLibraryDescType = FOUR_CHAR_CODE('ldsc')
+kInstKnobMissingUnknown = 0
+kInstKnobMissingDefault = (1 << 0)
+kMusicLoopTypeNormal = 0
+kMusicLoopTypePalindrome = 1
+instSamplePreProcessFlag = 1 << 0
+kQTMIDIComponentType = FOUR_CHAR_CODE('midi')
+kOMSComponentSubType = FOUR_CHAR_CODE('OMS ')
+kFMSComponentSubType = FOUR_CHAR_CODE('FMS ')
+kMIDIManagerComponentSubType = FOUR_CHAR_CODE('mmgr')
+kOSXMIDIComponentSubType = FOUR_CHAR_CODE('osxm')
+kMusicPacketPortLost = 1
+kMusicPacketPortFound = 2
+kMusicPacketTimeGap = 3
+kAppleSysexID = 0x11
+kAppleSysexCmdSampleSize = 0x0001
+kAppleSysexCmdSampleBreak = 0x0002
+kAppleSysexCmdAtomicInstrument = 0x0010
+kAppleSysexCmdDeveloper = 0x7F00
+kSynthesizerConnectionFMS = 1
+kSynthesizerConnectionMMgr = 2
+kSynthesizerConnectionOMS = 4
+kSynthesizerConnectionQT = 8
+kSynthesizerConnectionOSXMIDI = 16
+kSynthesizerConnectionUnavailable = 256
+kMusicComponentType = FOUR_CHAR_CODE('musi')
+kInstrumentComponentType = FOUR_CHAR_CODE('inst')
+kSoftSynthComponentSubType = FOUR_CHAR_CODE('ss ')
+kGMSynthComponentSubType = FOUR_CHAR_CODE('gm ')
+kSynthesizerDynamicVoice = 1 << 0
+kSynthesizerUsesMIDIPort = 1 << 1
+kSynthesizerMicrotone = 1 << 2
+kSynthesizerHasSamples = 1 << 3
+kSynthesizerMixedDrums = 1 << 4
+kSynthesizerSoftware = 1 << 5
+kSynthesizerHardware = 1 << 6
+kSynthesizerDynamicChannel = 1 << 7
+kSynthesizerHogsSystemChannel = 1 << 8
+kSynthesizerHasSystemChannel = 1 << 9
+kSynthesizerSlowSetPart = 1 << 10
+kSynthesizerOffline = 1 << 12
+kSynthesizerGM = 1 << 14
+kSynthesizerDLS = 1 << 15
+kSynthesizerSoundLocalization = 1 << 16
+kControllerModulationWheel = 1
+kControllerBreath = 2
+kControllerFoot = 4
+kControllerPortamentoTime = 5
+kControllerVolume = 7
+kControllerBalance = 8
+kControllerPan = 10
+kControllerExpression = 11
+kControllerLever1 = 16
+kControllerLever2 = 17
+kControllerLever3 = 18
+kControllerLever4 = 19
+kControllerLever5 = 80
+kControllerLever6 = 81
+kControllerLever7 = 82
+kControllerLever8 = 83
+kControllerPitchBend = 32
+kControllerAfterTouch = 33
+kControllerPartTranspose = 40
+kControllerTuneTranspose = 41
+kControllerPartVolume = 42
+kControllerTuneVolume = 43
+kControllerSustain = 64
+kControllerPortamento = 65
+kControllerSostenuto = 66
+kControllerSoftPedal = 67
+kControllerReverb = 91
+kControllerTremolo = 92
+kControllerChorus = 93
+kControllerCeleste = 94
+kControllerPhaser = 95
+kControllerEditPart = 113
+kControllerMasterTune = 114
+kControllerMasterTranspose = 114
+kControllerMasterVolume = 115
+kControllerMasterCPULoad = 116
+kControllerMasterPolyphony = 117
+kControllerMasterFeatures = 118
+kQTMSKnobStartID = 0x02000000
+kQTMSKnobVolumeAttackTimeID = 0x02000001
+kQTMSKnobVolumeDecayTimeID = 0x02000002
+kQTMSKnobVolumeSustainLevelID = 0x02000003
+kQTMSKnobVolumeRelease1RateID = 0x02000004
+kQTMSKnobVolumeDecayKeyScalingID = 0x02000005
+kQTMSKnobVolumeReleaseTimeID = 0x02000006
+kQTMSKnobVolumeLFODelayID = 0x02000007
+kQTMSKnobVolumeLFORampTimeID = 0x02000008
+kQTMSKnobVolumeLFOPeriodID = 0x02000009
+kQTMSKnobVolumeLFOShapeID = 0x0200000A
+kQTMSKnobVolumeLFODepthID = 0x0200000B
+kQTMSKnobVolumeOverallID = 0x0200000C
+kQTMSKnobVolumeVelocity127ID = 0x0200000D
+kQTMSKnobVolumeVelocity96ID = 0x0200000E
+kQTMSKnobVolumeVelocity64ID = 0x0200000F
+kQTMSKnobVolumeVelocity32ID = 0x02000010
+kQTMSKnobVolumeVelocity16ID = 0x02000011
+kQTMSKnobPitchTransposeID = 0x02000012
+kQTMSKnobPitchLFODelayID = 0x02000013
+kQTMSKnobPitchLFORampTimeID = 0x02000014
+kQTMSKnobPitchLFOPeriodID = 0x02000015
+kQTMSKnobPitchLFOShapeID = 0x02000016
+kQTMSKnobPitchLFODepthID = 0x02000017
+kQTMSKnobPitchLFOQuantizeID = 0x02000018
+kQTMSKnobStereoDefaultPanID = 0x02000019
+kQTMSKnobStereoPositionKeyScalingID = 0x0200001A
+kQTMSKnobPitchLFOOffsetID = 0x0200001B
+kQTMSKnobExclusionGroupID = 0x0200001C
+kQTMSKnobSustainTimeID = 0x0200001D
+kQTMSKnobSustainInfiniteID = 0x0200001E
+kQTMSKnobVolumeLFOStereoID = 0x0200001F
+kQTMSKnobVelocityLowID = 0x02000020
+kQTMSKnobVelocityHighID = 0x02000021
+kQTMSKnobVelocitySensitivityID = 0x02000022
+kQTMSKnobPitchSensitivityID = 0x02000023
+kQTMSKnobVolumeLFODepthFromWheelID = 0x02000024
+kQTMSKnobPitchLFODepthFromWheelID = 0x02000025
+kQTMSKnobVolumeExpOptionsID = 0x02000026
+kQTMSKnobEnv1AttackTimeID = 0x02000027
+kQTMSKnobEnv1DecayTimeID = 0x02000028
+kQTMSKnobEnv1SustainLevelID = 0x02000029
+kQTMSKnobEnv1SustainTimeID = 0x0200002A
+kQTMSKnobEnv1SustainInfiniteID = 0x0200002B
+kQTMSKnobEnv1ReleaseTimeID = 0x0200002C
+kQTMSKnobEnv1ExpOptionsID = 0x0200002D
+kQTMSKnobEnv2AttackTimeID = 0x0200002E
+kQTMSKnobEnv2DecayTimeID = 0x0200002F
+kQTMSKnobEnv2SustainLevelID = 0x02000030
+kQTMSKnobEnv2SustainTimeID = 0x02000031
+kQTMSKnobEnv2SustainInfiniteID = 0x02000032
+kQTMSKnobEnv2ReleaseTimeID = 0x02000033
+kQTMSKnobEnv2ExpOptionsID = 0x02000034
+kQTMSKnobPitchEnvelopeID = 0x02000035
+kQTMSKnobPitchEnvelopeDepthID = 0x02000036
+kQTMSKnobFilterKeyFollowID = 0x02000037
+kQTMSKnobFilterTransposeID = 0x02000038
+kQTMSKnobFilterQID = 0x02000039
+kQTMSKnobFilterFrequencyEnvelopeID = 0x0200003A
+kQTMSKnobFilterFrequencyEnvelopeDepthID = 0x0200003B
+kQTMSKnobFilterQEnvelopeID = 0x0200003C
+kQTMSKnobFilterQEnvelopeDepthID = 0x0200003D
+kQTMSKnobReverbThresholdID = 0x0200003E
+kQTMSKnobVolumeAttackVelScalingID = 0x0200003F
+kQTMSKnobLastIDPlus1 = 0x02000040
+kControllerMaximum = 0x00007FFF
+# kControllerMinimum = (long)0xFFFF8000
+kVoiceCountDynamic = -1
+kFirstGMInstrument = 0x00000001
+kLastGMInstrument = 0x00000080
+kFirstGSInstrument = 0x00000081
+kLastGSInstrument = 0x00003FFF
+kFirstDrumkit = 0x00004000
+kLastDrumkit = 0x00004080
+kFirstROMInstrument = 0x00008000
+kLastROMInstrument = 0x0000FFFF
+kFirstUserInstrument = 0x00010000
+kLastUserInstrument = 0x0001FFFF
+kInstrumentMatchSynthesizerType = 1
+kInstrumentMatchSynthesizerName = 2
+kInstrumentMatchName = 4
+kInstrumentMatchNumber = 8
+kInstrumentMatchGMNumber = 16
+kInstrumentMatchGSNumber = 32
+kKnobBasic = 8
+kKnobReadOnly = 16
+kKnobInterruptUnsafe = 32
+kKnobKeyrangeOverride = 64
+kKnobGroupStart = 128
+kKnobFixedPoint8 = 1024
+kKnobFixedPoint16 = 2048
+kKnobTypeNumber = 0 << 12
+kKnobTypeGroupName = 1 << 12
+kKnobTypeBoolean = 2 << 12
+kKnobTypeNote = 3 << 12
+kKnobTypePan = 4 << 12
+kKnobTypeInstrument = 5 << 12
+kKnobTypeSetting = 6 << 12
+kKnobTypeMilliseconds = 7 << 12
+kKnobTypePercentage = 8 << 12
+kKnobTypeHertz = 9 << 12
+kKnobTypeButton = 10 << 12
+kUnknownKnobValue = 0x7FFFFFFF
+kDefaultKnobValue = 0x7FFFFFFE
+notImplementedMusicErr = (0x80000000 | (0xFFFF & (notImplementedMusicOSErr)))
+cantSendToSynthesizerErr = (0x80000000 | (0xFFFF & (cantSendToSynthesizerOSErr)))
+cantReceiveFromSynthesizerErr = (0x80000000 | (0xFFFF & (cantReceiveFromSynthesizerOSErr)))
+illegalVoiceAllocationErr = (0x80000000 | (0xFFFF & (illegalVoiceAllocationOSErr)))
+illegalPartErr = (0x80000000 | (0xFFFF & (illegalPartOSErr)))
+illegalChannelErr = (0x80000000 | (0xFFFF & (illegalChannelOSErr)))
+illegalKnobErr = (0x80000000 | (0xFFFF & (illegalKnobOSErr)))
+illegalKnobValueErr = (0x80000000 | (0xFFFF & (illegalKnobValueOSErr)))
+illegalInstrumentErr = (0x80000000 | (0xFFFF & (illegalInstrumentOSErr)))
+illegalControllerErr = (0x80000000 | (0xFFFF & (illegalControllerOSErr)))
+midiManagerAbsentErr = (0x80000000 | (0xFFFF & (midiManagerAbsentOSErr)))
+synthesizerNotRespondingErr = (0x80000000 | (0xFFFF & (synthesizerNotRespondingOSErr)))
+synthesizerErr = (0x80000000 | (0xFFFF & (synthesizerOSErr)))
+illegalNoteChannelErr = (0x80000000 | (0xFFFF & (illegalNoteChannelOSErr)))
+noteChannelNotAllocatedErr = (0x80000000 | (0xFFFF & (noteChannelNotAllocatedOSErr)))
+tunePlayerFullErr = (0x80000000 | (0xFFFF & (tunePlayerFullOSErr)))
+tuneParseErr = (0x80000000 | (0xFFFF & (tuneParseOSErr)))
+kGetAtomicInstNoExpandedSamples = 1 << 0
+kGetAtomicInstNoOriginalSamples = 1 << 1
+kGetAtomicInstNoSamples = kGetAtomicInstNoExpandedSamples | kGetAtomicInstNoOriginalSamples
+kGetAtomicInstNoKnobList = 1 << 2
+kGetAtomicInstNoInstrumentInfo = 1 << 3
+kGetAtomicInstOriginalKnobList = 1 << 4
+kGetAtomicInstAllKnobs = 1 << 5
+kSetAtomicInstKeepOriginalInstrument = 1 << 0
+kSetAtomicInstShareAcrossParts = 1 << 1
+kSetAtomicInstCallerTosses = 1 << 2
+kSetAtomicInstCallerGuarantees = 1 << 3
+kSetAtomicInstInterruptSafe = 1 << 4
+kSetAtomicInstDontPreprocess = 1 << 7
+kInstrumentNamesModifiable = 1
+kInstrumentNamesBoth = 2
+kGenericMusicComponentSubtype = FOUR_CHAR_CODE('gene')
+kGenericMusicKnob = 1
+kGenericMusicInstrumentKnob = 2
+kGenericMusicDrumKnob = 3
+kGenericMusicGlobalController = 4
+kGenericMusicResFirst = 0
+kGenericMusicResMiscStringList = 1
+kGenericMusicResMiscLongList = 2
+kGenericMusicResInstrumentList = 3
+kGenericMusicResDrumList = 4
+kGenericMusicResInstrumentKnobDescriptionList = 5
+kGenericMusicResDrumKnobDescriptionList = 6
+kGenericMusicResKnobDescriptionList = 7
+kGenericMusicResBitsLongList = 8
+kGenericMusicResModifiableInstrumentHW = 9
+kGenericMusicResGMTranslation = 10
+kGenericMusicResROMInstrumentData = 11
+kGenericMusicResAboutPICT = 12
+kGenericMusicResLast = 13
+kGenericMusicMiscLongFirst = 0
+kGenericMusicMiscLongVoiceCount = 1
+kGenericMusicMiscLongPartCount = 2
+kGenericMusicMiscLongModifiableInstrumentCount = 3
+kGenericMusicMiscLongChannelMask = 4
+kGenericMusicMiscLongDrumPartCount = 5
+kGenericMusicMiscLongModifiableDrumCount = 6
+kGenericMusicMiscLongDrumChannelMask = 7
+kGenericMusicMiscLongOutputCount = 8
+kGenericMusicMiscLongLatency = 9
+kGenericMusicMiscLongFlags = 10
+kGenericMusicMiscLongFirstGMHW = 11
+kGenericMusicMiscLongFirstGMDrumHW = 12
+kGenericMusicMiscLongFirstUserHW = 13
+kGenericMusicMiscLongLast = 14
+kMusicGenericRange = 0x0100
+kMusicDerivedRange = 0x0200
+kGenericMusicDoMIDI = 1 << 0
+kGenericMusicBank0 = 1 << 1
+kGenericMusicBank32 = 1 << 2
+kGenericMusicErsatzMIDI = 1 << 3
+kGenericMusicCallKnobs = 1 << 4
+kGenericMusicCallParts = 1 << 5
+kGenericMusicCallInstrument = 1 << 6
+kGenericMusicCallNumber = 1 << 7
+kGenericMusicCallROMInstrument = 1 << 8
+kGenericMusicAllDefaults = 1 << 9
+kGetInstrumentInfoNoBuiltIn = 1 << 0
+kGetInstrumentInfoMidiUserInst = 1 << 1
+kGetInstrumentInfoNoIText = 1 << 2
+kNoteRequestNoGM = 1
+kNoteRequestNoSynthType = 2
+kNoteRequestSynthMustMatch = 4
+kNoteRequestSpecifyMIDIChannel = 0x80
+kPickDontMix = 1
+kPickSameSynth = 2
+kPickUserInsts = 4
+kPickEditAllowEdit = 8
+kPickEditAllowPick = 16
+kPickEditSynthGlobal = 32
+kPickEditControllers = 64
+kNoteAllocatorComponentType = FOUR_CHAR_CODE('nota')
+kNADummyOneSelect = 29
+kNADummyTwoSelect = 30
+kTuneQueueDepth = 8
+kTunePlayerComponentType = FOUR_CHAR_CODE('tune')
+kTuneStartNow = 1
+kTuneDontClipNotes = 2
+kTuneExcludeEdgeNotes = 4
+kTuneQuickStart = 8
+kTuneLoopUntil = 16
+kTunePlayDifference = 32
+kTunePlayConcurrent = 64
+kTuneStartNewMaster = 16384
+kTuneStopFade = 1
+kTuneStopSustain = 2
+kTuneStopInstant = 4
+kTuneStopReleaseChannels = 8
+kTuneMixMute = 1
+kTuneMixSolo = 2
+kRestEventType = 0x00000000
+kNoteEventType = 0x00000001
+kControlEventType = 0x00000002
+kMarkerEventType = 0x00000003
+kUndefined1EventType = 0x00000008
+kXNoteEventType = 0x00000009
+kXControlEventType = 0x0000000A
+kKnobEventType = 0x0000000B
+kUndefined2EventType = 0x0000000C
+kUndefined3EventType = 0x0000000D
+kUndefined4EventType = 0x0000000E
+kGeneralEventType = 0x0000000F
+kXEventLengthBits = 0x00000002
+kGeneralEventLengthBits = 0x00000003
+kEventLen = 1L
+kXEventLen = 2L
+kRestEventLen = kEventLen
+kNoteEventLen = kEventLen
+kControlEventLen = kEventLen
+kMarkerEventLen = kEventLen
+kXNoteEventLen = kXEventLen
+kXControlEventLen = kXEventLen
+kGeneralEventLen = kXEventLen
+kEventLengthFieldPos = 30
+kEventLengthFieldWidth = 2
+kEventTypeFieldPos = 29
+kEventTypeFieldWidth = 3
+kXEventTypeFieldPos = 28
+kXEventTypeFieldWidth = 4
+kEventPartFieldPos = 24
+kEventPartFieldWidth = 5
+kXEventPartFieldPos = 16
+kXEventPartFieldWidth = 12
+kRestEventDurationFieldPos = 0
+kRestEventDurationFieldWidth = 24
+kRestEventDurationMax = ((1L << kRestEventDurationFieldWidth) - 1)
+kNoteEventPitchFieldPos = 18
+kNoteEventPitchFieldWidth = 6
+kNoteEventPitchOffset = 32
+kNoteEventVolumeFieldPos = 11
+kNoteEventVolumeFieldWidth = 7
+kNoteEventVolumeOffset = 0
+kNoteEventDurationFieldPos = 0
+kNoteEventDurationFieldWidth = 11
+kNoteEventDurationMax = ((1L << kNoteEventDurationFieldWidth) - 1)
+kXNoteEventPitchFieldPos = 0
+kXNoteEventPitchFieldWidth = 16
+kXNoteEventDurationFieldPos = 0
+kXNoteEventDurationFieldWidth = 22
+kXNoteEventDurationMax = ((1L << kXNoteEventDurationFieldWidth) - 1)
+kXNoteEventVolumeFieldPos = 22
+kXNoteEventVolumeFieldWidth = 7
+kControlEventControllerFieldPos = 16
+kControlEventControllerFieldWidth = 8
+kControlEventValueFieldPos = 0
+kControlEventValueFieldWidth = 16
+kXControlEventControllerFieldPos = 0
+kXControlEventControllerFieldWidth = 16
+kXControlEventValueFieldPos = 0
+kXControlEventValueFieldWidth = 16
+kKnobEventValueHighFieldPos = 0
+kKnobEventValueHighFieldWidth = 16
+kKnobEventKnobFieldPos = 16
+kKnobEventKnobFieldWidth = 14
+kKnobEventValueLowFieldPos = 0
+kKnobEventValueLowFieldWidth = 16
+kMarkerEventSubtypeFieldPos = 16
+kMarkerEventSubtypeFieldWidth = 8
+kMarkerEventValueFieldPos = 0
+kMarkerEventValueFieldWidth = 16
+kGeneralEventSubtypeFieldPos = 16
+kGeneralEventSubtypeFieldWidth = 14
+kGeneralEventLengthFieldPos = 0
+kGeneralEventLengthFieldWidth = 16
+kEndMarkerValue = 0x00000060
+kEndMarkerValue = 0x60000000
+# _ext = qtma_EXT(*lP
+# ulen = (_ext < 2) ? 1 : 2
+# ulen = (unsigned short)qtma_EXT(*lP
+# ulen = lP[1]
+# _ext = qtma_EXT(*lP
+# ulen = (_ext < 2) ? 1 : 2
+# ulen = (unsigned short)qtma_EXT(*lP
+# ulen = lP[-1]
+# x = (kRestEventType << kEventTypeFieldPos) \
+# x = EndianU32_NtoB(x) )
+# x = (kNoteEventType << kEventTypeFieldPos) \
+# x = EndianU32_NtoB(x) )
+# x = (kControlEventType << kEventTypeFieldPos) \
+# x = EndianU32_NtoB(x) )
+# x = (kMarkerEventType << kEventTypeFieldPos) \
+# x = EndianU32_NtoB(x) )
+# w1 = (kXNoteEventType << kXEventTypeFieldPos) \
+# w1 = EndianU32_NtoB(w1)
+# w2 = (kXEventLengthBits << kEventLengthFieldPos) \
+# w2 = EndianU32_NtoB(w2) )
+# w1 = (kXControlEventType << kXEventTypeFieldPos) \
+# w1 = EndianU32_NtoB(w1)
+# w2 = (kXEventLengthBits << kEventLengthFieldPos) \
+# w2 = EndianU32_NtoB(w2) )
+# w1 = (kKnobEventType << kXEventTypeFieldPos) \
+# w1 = EndianU32_NtoB(w1)
+# w2 = (kXEventLengthBits << kEventLengthFieldPos) \
+# w2 = EndianU32_NtoB(w2) )
+# w1 = (kGeneralEventType << kXEventTypeFieldPos) \
+# w1 = EndianU32_NtoB(w1)
+# w2 = (kGeneralEventLengthBits << kEventLengthFieldPos) \
+# w2 = EndianU32_NtoB(w2) )
+kGeneralEventNoteRequest = 1
+kGeneralEventPartKey = 4
+kGeneralEventTuneDifference = 5
+kGeneralEventAtomicInstrument = 6
+kGeneralEventKnob = 7
+kGeneralEventMIDIChannel = 8
+kGeneralEventPartChange = 9
+kGeneralEventNoOp = 10
+kGeneralEventUsedNotes = 11
+kGeneralEventPartMix = 12
+kMarkerEventEnd = 0
+kMarkerEventBeat = 1
+kMarkerEventTempo = 2
+kCurrentlyNativeEndian = 1
+kCurrentlyNotNativeEndian = 2
+kQTMIDIGetMIDIPortsSelect = 0x0001
+kQTMIDIUseSendPortSelect = 0x0002
+kQTMIDISendMIDISelect = 0x0003
+kMusicGetDescriptionSelect = 0x0001
+kMusicGetPartSelect = 0x0002
+kMusicSetPartSelect = 0x0003
+kMusicSetPartInstrumentNumberSelect = 0x0004
+kMusicGetPartInstrumentNumberSelect = 0x0005
+kMusicStorePartInstrumentSelect = 0x0006
+kMusicGetPartAtomicInstrumentSelect = 0x0009
+kMusicSetPartAtomicInstrumentSelect = 0x000A
+kMusicGetPartKnobSelect = 0x0010
+kMusicSetPartKnobSelect = 0x0011
+kMusicGetKnobSelect = 0x0012
+kMusicSetKnobSelect = 0x0013
+kMusicGetPartNameSelect = 0x0014
+kMusicSetPartNameSelect = 0x0015
+kMusicFindToneSelect = 0x0016
+kMusicPlayNoteSelect = 0x0017
+kMusicResetPartSelect = 0x0018
+kMusicSetPartControllerSelect = 0x0019
+kMusicGetPartControllerSelect = 0x001A
+kMusicGetMIDIProcSelect = 0x001B
+kMusicSetMIDIProcSelect = 0x001C
+kMusicGetInstrumentNamesSelect = 0x001D
+kMusicGetDrumNamesSelect = 0x001E
+kMusicGetMasterTuneSelect = 0x001F
+kMusicSetMasterTuneSelect = 0x0020
+kMusicGetInstrumentAboutInfoSelect = 0x0022
+kMusicGetDeviceConnectionSelect = 0x0023
+kMusicUseDeviceConnectionSelect = 0x0024
+kMusicGetKnobSettingStringsSelect = 0x0025
+kMusicGetMIDIPortsSelect = 0x0026
+kMusicSendMIDISelect = 0x0027
+kMusicStartOfflineSelect = 0x0029
+kMusicSetOfflineTimeToSelect = 0x002A
+kMusicGetInstrumentKnobDescriptionSelect = 0x002B
+kMusicGetDrumKnobDescriptionSelect = 0x002C
+kMusicGetKnobDescriptionSelect = 0x002D
+kMusicGetInfoTextSelect = 0x002E
+kMusicGetInstrumentInfoSelect = 0x002F
+kMusicTaskSelect = 0x0031
+kMusicSetPartInstrumentNumberInterruptSafeSelect = 0x0032
+kMusicSetPartSoundLocalizationSelect = 0x0033
+kMusicGenericConfigureSelect = 0x0100
+kMusicGenericGetPartSelect = 0x0101
+kMusicGenericGetKnobListSelect = 0x0102
+kMusicGenericSetResourceNumbersSelect = 0x0103
+kMusicDerivedMIDISendSelect = 0x0200
+kMusicDerivedSetKnobSelect = 0x0201
+kMusicDerivedSetPartSelect = 0x0202
+kMusicDerivedSetInstrumentSelect = 0x0203
+kMusicDerivedSetPartInstrumentNumberSelect = 0x0204
+kMusicDerivedSetMIDISelect = 0x0205
+kMusicDerivedStorePartInstrumentSelect = 0x0206
+kMusicDerivedOpenResFileSelect = 0x0207
+kMusicDerivedCloseResFileSelect = 0x0208
+kNARegisterMusicDeviceSelect = 0x0000
+kNAUnregisterMusicDeviceSelect = 0x0001
+kNAGetRegisteredMusicDeviceSelect = 0x0002
+kNASaveMusicConfigurationSelect = 0x0003
+kNANewNoteChannelSelect = 0x0004
+kNADisposeNoteChannelSelect = 0x0005
+kNAGetNoteChannelInfoSelect = 0x0006
+kNAPrerollNoteChannelSelect = 0x0007
+kNAUnrollNoteChannelSelect = 0x0008
+kNASetNoteChannelVolumeSelect = 0x000B
+kNAResetNoteChannelSelect = 0x000C
+kNAPlayNoteSelect = 0x000D
+kNASetControllerSelect = 0x000E
+kNASetKnobSelect = 0x000F
+kNAFindNoteChannelToneSelect = 0x0010
+kNASetInstrumentNumberSelect = 0x0011
+kNAPickInstrumentSelect = 0x0012
+kNAPickArrangementSelect = 0x0013
+kNAStuffToneDescriptionSelect = 0x001B
+kNACopyrightDialogSelect = 0x001C
+kNAGetIndNoteChannelSelect = 0x001F
+kNAGetMIDIPortsSelect = 0x0021
+kNAGetNoteRequestSelect = 0x0022
+kNASendMIDISelect = 0x0023
+kNAPickEditInstrumentSelect = 0x0024
+kNANewNoteChannelFromAtomicInstrumentSelect = 0x0025
+kNASetAtomicInstrumentSelect = 0x0026
+kNAGetKnobSelect = 0x0028
+kNATaskSelect = 0x0029
+kNASetNoteChannelBalanceSelect = 0x002A
+kNASetInstrumentNumberInterruptSafeSelect = 0x002B
+kNASetNoteChannelSoundLocalizationSelect = 0x002C
+kNAGetControllerSelect = 0x002D
+kTuneSetHeaderSelect = 0x0004
+kTuneGetTimeBaseSelect = 0x0005
+kTuneSetTimeScaleSelect = 0x0006
+kTuneGetTimeScaleSelect = 0x0007
+kTuneGetIndexedNoteChannelSelect = 0x0008
+kTuneQueueSelect = 0x000A
+kTuneInstantSelect = 0x000B
+kTuneGetStatusSelect = 0x000C
+kTuneStopSelect = 0x000D
+kTuneSetVolumeSelect = 0x0010
+kTuneGetVolumeSelect = 0x0011
+kTunePrerollSelect = 0x0012
+kTuneUnrollSelect = 0x0013
+kTuneSetNoteChannelsSelect = 0x0014
+kTuneSetPartTransposeSelect = 0x0015
+kTuneGetNoteAllocatorSelect = 0x0017
+kTuneSetSofterSelect = 0x0018
+kTuneTaskSelect = 0x0019
+kTuneSetBalanceSelect = 0x001A
+kTuneSetSoundLocalizationSelect = 0x001B
+kTuneSetHeaderWithSizeSelect = 0x001C
+kTuneSetPartMixSelect = 0x001D
+kTuneGetPartMixSelect = 0x001E
diff --git a/Lib/plat-mac/pimp.py b/Lib/plat-mac/pimp.py