home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK2.toast / Development Kits (Disc 2) / QuickTime / Programming Stuff / QuickTime 2.1 for Developers / Interfaces / CIncludes / QuickTimeComponents.h < prev   
Encoding:
C/C++ Source or Header  |  1995-08-07  |  153.2 KB  |  3,355 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QuickTimeComponents.h
  3.  
  4.      Contains:    QuickTime interfaces
  5.  
  6.      Version:    
  7.  
  8.      DRI:        Jim Batson
  9.  
  10.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Warning:    *** APPLE INTERNAL USE ONLY ***
  14.                  This file may contain unreleased API's
  15.  
  16.      BuildInfo:    Built by:            QuickTime
  17.                  With Interfacer:    1.1d11  
  18.                  From:                QuickTimeComponents.i
  19.                      Revision:        0
  20.                      Dated:            08/07/95
  21.                      Last change by:    JB
  22.                      Last comment:    This is a fake header used so interfacer is happy.
  23.  
  24.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  25.                  List the version information (from above) in the Problem Description.
  26.  
  27. */
  28.  
  29. #ifndef __QUICKTIMECOMPONENTS__
  30. #define __QUICKTIMECOMPONENTS__
  31.  
  32.  
  33. #ifndef __COMPONENTS__
  34. #include <Components.h>
  35. #endif
  36. /*    #include <Types.h>                                            */
  37. /*        #include <ConditionalMacros.h>                            */
  38. /*    #include <MixedMode.h>                                        */
  39.  
  40. #ifndef __IMAGECOMPRESSION__
  41. #include <ImageCompression.h>
  42. #endif
  43. /*    #include <Quickdraw.h>                                        */
  44. /*        #include <QuickdrawText.h>                                */
  45. /*    #include <QDOffscreen.h>                                    */
  46. /*        #include <Errors.h>                                        */
  47. /*    #include <Windows.h>                                        */
  48. /*        #include <Memory.h>                                        */
  49. /*        #include <Events.h>                                        */
  50. /*            #include <OSUtils.h>                                */
  51. /*        #include <Controls.h>                                    */
  52. /*            #include <Menus.h>                                    */
  53. /*    #include <StandardFile.h>                                    */
  54. /*        #include <Dialogs.h>                                    */
  55. /*            #include <TextEdit.h>                                */
  56. /*        #include <Files.h>                                        */
  57.  
  58. #ifndef __MOVIES__
  59. #include <Movies.h>
  60. #endif
  61. /*    #include <Aliases.h>                                        */
  62. /*        #include <AppleTalk.h>                                    */
  63.  
  64. #ifndef __VIDEO__
  65. #include <Video.h>
  66. #endif
  67.  
  68. #ifndef __SOUND__
  69. #include <Sound.h>
  70. #endif
  71.  
  72. #ifdef __cplusplus
  73. extern "C" {
  74. #endif
  75.  
  76. #if GENERATINGPOWERPC
  77. #pragma options align=mac68k
  78. #endif
  79.  
  80. #ifdef __CFM68K__
  81. #pragma import on
  82. #endif
  83.  
  84.  
  85. enum {
  86.     clockComponentType            = 'clok',
  87.     systemTickClock                = 'tick',                        /* subtype: 60ths since boot        */
  88.     systemSecondClock            = 'seco',                        /* subtype: seconds since 1904        */
  89.     systemMillisecondClock        = 'mill',                        /* subtype: 1000ths since boot        */
  90.     systemMicrosecondClock        = 'micr'
  91. };
  92.  
  93. enum {
  94.     kClockRateIsLinear            = 1,
  95.     kClockImplementsCallBacks    = 2
  96. };
  97.  
  98. #if OLDROUTINENAMES
  99. #define GetClockTime(aClock, out) ClockGetTime(aClock, out)
  100. #endif
  101. extern pascal ComponentResult ClockGetTime(ComponentInstance aClock, TimeRecord *out)
  102.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1, 0x7000, 0xA82A);
  103. extern pascal QTCallBack ClockNewCallBack(ComponentInstance aClock, TimeBase tb, short callBackType)
  104.  FIVEWORDINLINE(0x2F3C, 0x6, 0x2, 0x7000, 0xA82A);
  105. extern pascal ComponentResult ClockDisposeCallBack(ComponentInstance aClock, QTCallBack cb)
  106.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3, 0x7000, 0xA82A);
  107. extern pascal ComponentResult ClockCallMeWhen(ComponentInstance aClock, QTCallBack cb, long param1, long param2, long param3)
  108.  FIVEWORDINLINE(0x2F3C, 0x10, 0x4, 0x7000, 0xA82A);
  109. extern pascal ComponentResult ClockCancelCallBack(ComponentInstance aClock, QTCallBack cb)
  110.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  111. extern pascal ComponentResult ClockRateChanged(ComponentInstance aClock, QTCallBack cb)
  112.  FIVEWORDINLINE(0x2F3C, 0x4, 0x6, 0x7000, 0xA82A);
  113. extern pascal ComponentResult ClockTimeChanged(ComponentInstance aClock, QTCallBack cb)
  114.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  115. extern pascal ComponentResult ClockSetTimeBase(ComponentInstance aClock, TimeBase tb)
  116.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8, 0x7000, 0xA82A);
  117. extern pascal ComponentResult ClockStartStopChanged(ComponentInstance aClock, QTCallBack cb, Boolean startChanged, Boolean stopChanged)
  118.  FIVEWORDINLINE(0x2F3C, 0x8, 0x9, 0x7000, 0xA82A);
  119. extern pascal ComponentResult ClockGetRate(ComponentInstance aClock, Fixed *rate)
  120.  FIVEWORDINLINE(0x2F3C, 0x4, 0xA, 0x7000, 0xA82A);
  121.  
  122. enum {
  123.     kClockGetTimeSelect            = 0x1,
  124.     kClockNewCallBackSelect        = 0x2,
  125.     kClockDisposeCallBackSelect    = 0x3,
  126.     kClockCallMeWhenSelect        = 0x4,
  127.     kClockCancelCallBackSelect    = 0x5,
  128.     kClockRateChangedSelect        = 0x6,
  129.     kClockTimeChangedSelect        = 0x7,
  130.     kClockSetTimeBaseSelect        = 0x8,
  131.     kClockStartStopChangedSelect = 0x9,
  132.     kClockGetRateSelect            = 0xA
  133. };
  134.  
  135. /*
  136.     General Sequence Grab stuff
  137. */
  138. typedef ComponentInstance SeqGrabComponent;
  139.  
  140. typedef ComponentInstance SGChannel;
  141.  
  142.  
  143. enum {
  144.     SeqGrabComponentType        = 'barg',
  145.     SeqGrabChannelType            = 'sgch',
  146.     SeqGrabPanelType            = 'sgpn',
  147.     SeqGrabCompressionPanelType    = 'cmpr',
  148.     SeqGrabSourcePanelType        = 'sour'
  149. };
  150.  
  151. enum {
  152.     seqGrabToDisk                = 1,
  153.     seqGrabToMemory                = 2,
  154.     seqGrabDontUseTempMemory    = 4,
  155.     seqGrabAppendToFile            = 8,
  156.     seqGrabDontAddMovieResource    = 16,
  157.     seqGrabDontMakeMovie        = 32,
  158.     seqGrabPreExtendFile        = 64,
  159.     seqGrabDataProcIsInterruptSafe = 128,
  160.     seqGrabDataProcDoesOverlappingReads = 256
  161. };
  162.  
  163. typedef unsigned long SeqGrabDataOutputEnum;
  164.  
  165.  
  166. enum {
  167.     seqGrabRecord                = 1,
  168.     seqGrabPreview                = 2,
  169.     seqGrabPlayDuringRecord        = 4
  170. };
  171.  
  172. typedef unsigned long SeqGrabUsageEnum;
  173.  
  174.  
  175. enum {
  176.     seqGrabHasBounds            = 1,
  177.     seqGrabHasVolume            = 2,
  178.     seqGrabHasDiscreteSamples    = 4
  179. };
  180.  
  181. typedef unsigned long SeqGrabChannelInfoEnum;
  182.  
  183. struct SeqGrabFrameInfo {
  184.     long                            frameOffset;
  185.     long                            frameTime;
  186.     long                            frameSize;
  187.     SGChannel                        frameChannel;
  188.     long                            frameRefCon;
  189. };
  190. typedef struct SeqGrabFrameInfo SeqGrabFrameInfo, *SeqGrabFrameInfoPtr;
  191.  
  192.  
  193. enum {
  194.     grabPictOffScreen            = 1,
  195.     grabPictIgnoreClip            = 2,
  196.     grabPictCurrentImage        = 4
  197. };
  198.  
  199. enum {
  200.     sgFlagControlledGrab        = (1 << 0)
  201. };
  202.  
  203. typedef pascal OSErr (*SGDataProcPtr)(SGChannel c, Ptr p, long len, long *offset, long chRefCon, TimeValue time, short writeType, long refCon);
  204.  
  205. #if GENERATINGCFM
  206. typedef UniversalProcPtr SGDataUPP;
  207. #else
  208. typedef SGDataProcPtr SGDataUPP;
  209. #endif
  210.  
  211. struct SGDeviceName {
  212.     Str63                            name;
  213.     Handle                            icon;
  214.     long                            flags;
  215.     long                            refCon;
  216.     long                            reserved;                    /* zero*/
  217. };
  218. typedef struct SGDeviceName SGDeviceName;
  219.  
  220.  
  221. enum {
  222.     sgDeviceNameFlagDeviceUnavailable = (1 << 0)
  223. };
  224.  
  225. struct SGDeviceListRecord {
  226.     short                            count;
  227.     short                            selectedIndex;
  228.     long                            reserved;                    /* zero*/
  229.     SGDeviceName                    entry[1];
  230. };
  231. typedef struct SGDeviceListRecord SGDeviceListRecord, *SGDeviceListPtr, **SGDeviceList;
  232.  
  233.  
  234. enum {
  235.     sgDeviceListWithIcons        = (1 << 0),
  236.     sgDeviceListDontCheckAvailability = (1 << 1)
  237. };
  238.  
  239. enum {
  240.     seqGrabWriteAppend,
  241.     seqGrabWriteReserve,
  242.     seqGrabWriteFill
  243. };
  244.  
  245. enum {
  246.     seqGrabUnpause                = 0,
  247.     seqGrabPause                = 1,
  248.     seqGrabPauseForMenu            = 3
  249. };
  250.  
  251. enum {
  252.     channelFlagDontOpenResFile    = 2,
  253.     channelFlagHasDependency    = 4
  254. };
  255.  
  256. typedef pascal Boolean (*SGModalFilterProcPtr)(DialogPtr theDialog, EventRecord *theEvent, short *itemHit, long refCon);
  257.  
  258. #if GENERATINGCFM
  259. typedef UniversalProcPtr SGModalFilterUPP;
  260. #else
  261. typedef SGModalFilterProcPtr SGModalFilterUPP;
  262. #endif
  263.  
  264. enum {
  265.     sgPanelFlagForPanel            = 1
  266. };
  267.  
  268. enum {
  269.     seqGrabSettingsPreviewOnly    = 1
  270. };
  271.  
  272. struct SGOutputRecord {
  273.     long                            data[1];
  274. };
  275. typedef struct SGOutputRecord SGOutputRecord, *SGOutput;
  276.  
  277.  
  278. enum {
  279.     channelPlayNormal            = 0,
  280.     channelPlayFast                = 1,
  281.     channelPlayHighQuality        = 2,
  282.     channelPlayAllData            = 4
  283. };
  284.  
  285. extern pascal ComponentResult SGInitialize(SeqGrabComponent s)
  286.  FIVEWORDINLINE(0x2F3C, 0, 0x1, 0x7000, 0xA82A);
  287. extern pascal ComponentResult SGSetDataOutput(SeqGrabComponent s, const FSSpec *movieFile, long whereFlags)
  288.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2, 0x7000, 0xA82A);
  289. extern pascal ComponentResult SGGetDataOutput(SeqGrabComponent s, FSSpec *movieFile, long *whereFlags)
  290.  FIVEWORDINLINE(0x2F3C, 0x8, 0x3, 0x7000, 0xA82A);
  291. extern pascal ComponentResult SGSetGWorld(SeqGrabComponent s, CGrafPtr gp, GDHandle gd)
  292.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  293. extern pascal ComponentResult SGGetGWorld(SeqGrabComponent s, CGrafPtr *gp, GDHandle *gd)
  294.  FIVEWORDINLINE(0x2F3C, 0x8, 0x5, 0x7000, 0xA82A);
  295. extern pascal ComponentResult SGNewChannel(SeqGrabComponent s, OSType channelType, SGChannel *ref)
  296.  FIVEWORDINLINE(0x2F3C, 0x8, 0x6, 0x7000, 0xA82A);
  297. extern pascal ComponentResult SGDisposeChannel(SeqGrabComponent s, SGChannel c)
  298.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  299. extern pascal ComponentResult SGStartPreview(SeqGrabComponent s)
  300.  FIVEWORDINLINE(0x2F3C, 0, 0x10, 0x7000, 0xA82A);
  301. extern pascal ComponentResult SGStartRecord(SeqGrabComponent s)
  302.  FIVEWORDINLINE(0x2F3C, 0, 0x11, 0x7000, 0xA82A);
  303. extern pascal ComponentResult SGIdle(SeqGrabComponent s)
  304.  FIVEWORDINLINE(0x2F3C, 0, 0x12, 0x7000, 0xA82A);
  305. extern pascal ComponentResult SGStop(SeqGrabComponent s)
  306.  FIVEWORDINLINE(0x2F3C, 0, 0x13, 0x7000, 0xA82A);
  307. extern pascal ComponentResult SGPause(SeqGrabComponent s, Byte pause)
  308.  FIVEWORDINLINE(0x2F3C, 0x2, 0x14, 0x7000, 0xA82A);
  309. extern pascal ComponentResult SGPrepare(SeqGrabComponent s, Boolean prepareForPreview, Boolean prepareForRecord)
  310.  FIVEWORDINLINE(0x2F3C, 0x4, 0x15, 0x7000, 0xA82A);
  311. extern pascal ComponentResult SGRelease(SeqGrabComponent s)
  312.  FIVEWORDINLINE(0x2F3C, 0, 0x16, 0x7000, 0xA82A);
  313. extern pascal Movie SGGetMovie(SeqGrabComponent s)
  314.  FIVEWORDINLINE(0x2F3C, 0, 0x17, 0x7000, 0xA82A);
  315. extern pascal ComponentResult SGSetMaximumRecordTime(SeqGrabComponent s, unsigned long ticks)
  316.  FIVEWORDINLINE(0x2F3C, 0x4, 0x18, 0x7000, 0xA82A);
  317. extern pascal ComponentResult SGGetMaximumRecordTime(SeqGrabComponent s, unsigned long *ticks)
  318.  FIVEWORDINLINE(0x2F3C, 0x4, 0x19, 0x7000, 0xA82A);
  319. extern pascal ComponentResult SGGetStorageSpaceRemaining(SeqGrabComponent s, unsigned long *bytes)
  320.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1A, 0x7000, 0xA82A);
  321. extern pascal ComponentResult SGGetTimeRemaining(SeqGrabComponent s, long *ticksLeft)
  322.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1B, 0x7000, 0xA82A);
  323. extern pascal ComponentResult SGGrabPict(SeqGrabComponent s, PicHandle *p, const Rect *bounds, short offscreenDepth, long grabPictFlags)
  324.  FIVEWORDINLINE(0x2F3C, 0xE, 0x1C, 0x7000, 0xA82A);
  325. extern pascal ComponentResult SGGetLastMovieResID(SeqGrabComponent s, short *resID)
  326.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1D, 0x7000, 0xA82A);
  327. extern pascal ComponentResult SGSetFlags(SeqGrabComponent s, long sgFlags)
  328.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1E, 0x7000, 0xA82A);
  329. extern pascal ComponentResult SGGetFlags(SeqGrabComponent s, long *sgFlags)
  330.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1F, 0x7000, 0xA82A);
  331. extern pascal ComponentResult SGSetDataProc(SeqGrabComponent s, SGDataUPP proc, long refCon)
  332.  FIVEWORDINLINE(0x2F3C, 0x8, 0x20, 0x7000, 0xA82A);
  333. extern pascal ComponentResult SGNewChannelFromComponent(SeqGrabComponent s, SGChannel *newChannel, Component sgChannelComponent)
  334.  FIVEWORDINLINE(0x2F3C, 0x8, 0x21, 0x7000, 0xA82A);
  335. extern pascal ComponentResult SGDisposeDeviceList(SeqGrabComponent s, SGDeviceList list)
  336.  FIVEWORDINLINE(0x2F3C, 0x4, 0x22, 0x7000, 0xA82A);
  337. extern pascal ComponentResult SGAppendDeviceListToMenu(SeqGrabComponent s, SGDeviceList list, MenuHandle mh)
  338.  FIVEWORDINLINE(0x2F3C, 0x8, 0x23, 0x7000, 0xA82A);
  339. extern pascal ComponentResult SGSetSettings(SeqGrabComponent s, UserData ud, long flags)
  340.  FIVEWORDINLINE(0x2F3C, 0x8, 0x24, 0x7000, 0xA82A);
  341. extern pascal ComponentResult SGGetSettings(SeqGrabComponent s, UserData *ud, long flags)
  342.  FIVEWORDINLINE(0x2F3C, 0x8, 0x25, 0x7000, 0xA82A);
  343. extern pascal ComponentResult SGGetIndChannel(SeqGrabComponent s, short index, SGChannel *ref, OSType *chanType)
  344.  FIVEWORDINLINE(0x2F3C, 0xA, 0x26, 0x7000, 0xA82A);
  345. extern pascal ComponentResult SGUpdate(SeqGrabComponent s, RgnHandle updateRgn)
  346.  FIVEWORDINLINE(0x2F3C, 0x4, 0x27, 0x7000, 0xA82A);
  347. extern pascal ComponentResult SGGetPause(SeqGrabComponent s, Byte *paused)
  348.  FIVEWORDINLINE(0x2F3C, 0x4, 0x28, 0x7000, 0xA82A);
  349. extern pascal ComponentResult SGSettingsDialog(SeqGrabComponent s, SGChannel c, short numPanels, Component *panelList, long flags, SGModalFilterUPP proc, long procRefNum)
  350.  FIVEWORDINLINE(0x2F3C, 0x16, 0x29, 0x7000, 0xA82A);
  351. extern pascal ComponentResult SGGetAlignmentProc(SeqGrabComponent s, ICMAlignmentProcRecordPtr alignmentProc)
  352.  FIVEWORDINLINE(0x2F3C, 0x4, 0x2A, 0x7000, 0xA82A);
  353. extern pascal ComponentResult SGSetChannelSettings(SeqGrabComponent s, SGChannel c, UserData ud, long flags)
  354.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2B, 0x7000, 0xA82A);
  355. extern pascal ComponentResult SGGetChannelSettings(SeqGrabComponent s, SGChannel c, UserData *ud, long flags)
  356.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2C, 0x7000, 0xA82A);
  357. extern pascal ComponentResult SGGetMode(SeqGrabComponent s, Boolean *previewMode, Boolean *recordMode)
  358.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2D, 0x7000, 0xA82A);
  359. extern pascal ComponentResult SGSetDataRef(SeqGrabComponent s, Handle dataRef, OSType dataRefType, long whereFlags)
  360.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2E, 0x7000, 0xA82A);
  361. extern pascal ComponentResult SGGetDataRef(SeqGrabComponent s, Handle *dataRef, OSType *dataRefType, long *whereFlags)
  362.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2F, 0x7000, 0xA82A);
  363. extern pascal ComponentResult SGNewOutput(SeqGrabComponent s, Handle dataRef, OSType dataRefType, long whereFlags, SGOutput *output)
  364.  FIVEWORDINLINE(0x2F3C, 0x10, 0x30, 0x7000, 0xA82A);
  365. extern pascal ComponentResult SGDisposeOutput(SeqGrabComponent s, SGOutput output)
  366.  FIVEWORDINLINE(0x2F3C, 0x4, 0x31, 0x7000, 0xA82A);
  367. extern pascal ComponentResult SGSetOutputFlags(SeqGrabComponent s, SGOutput output, long whereFlags)
  368.  FIVEWORDINLINE(0x2F3C, 0x8, 0x32, 0x7000, 0xA82A);
  369. extern pascal ComponentResult SGSetChannelOutput(SeqGrabComponent s, SGChannel c, SGOutput output)
  370.  FIVEWORDINLINE(0x2F3C, 0x8, 0x33, 0x7000, 0xA82A);
  371. extern pascal ComponentResult SGGetDataOutputStorageSpaceRemaining(SeqGrabComponent s, SGOutput output, unsigned long *space)
  372.  FIVEWORDINLINE(0x2F3C, 0x8, 0x34, 0x7000, 0xA82A);
  373. /*
  374.     calls from Channel to seqGrab
  375. */
  376. extern pascal ComponentResult SGWriteMovieData(SeqGrabComponent s, SGChannel c, Ptr p, long len, long *offset)
  377.  FIVEWORDINLINE(0x2F3C, 0x10, 0x100, 0x7000, 0xA82A);
  378. extern pascal ComponentResult SGAddFrameReference(SeqGrabComponent s, SeqGrabFrameInfoPtr frameInfo)
  379.  FIVEWORDINLINE(0x2F3C, 0x4, 0x101, 0x7000, 0xA82A);
  380. extern pascal ComponentResult SGGetNextFrameReference(SeqGrabComponent s, SeqGrabFrameInfoPtr frameInfo, TimeValue *frameDuration, long *frameNumber)
  381.  FIVEWORDINLINE(0x2F3C, 0xC, 0x102, 0x7000, 0xA82A);
  382. extern pascal ComponentResult SGGetTimeBase(SeqGrabComponent s, TimeBase *tb)
  383.  FIVEWORDINLINE(0x2F3C, 0x4, 0x103, 0x7000, 0xA82A);
  384. extern pascal ComponentResult SGSortDeviceList(SeqGrabComponent s, SGDeviceList list)
  385.  FIVEWORDINLINE(0x2F3C, 0x4, 0x104, 0x7000, 0xA82A);
  386. extern pascal ComponentResult SGAddMovieData(SeqGrabComponent s, SGChannel c, Ptr p, long len, long *offset, long chRefCon, TimeValue time, short writeType)
  387.  FIVEWORDINLINE(0x2F3C, 0x1A, 0x105, 0x7000, 0xA82A);
  388. extern pascal ComponentResult SGChangedSource(SeqGrabComponent s, SGChannel c)
  389.  FIVEWORDINLINE(0x2F3C, 0x4, 0x106, 0x7000, 0xA82A);
  390. /*** Sequence Grab CHANNEL Component Stuff ***/
  391. extern pascal ComponentResult SGSetChannelUsage(SGChannel c, long usage)
  392.  FIVEWORDINLINE(0x2F3C, 0x4, 0x80, 0x7000, 0xA82A);
  393. extern pascal ComponentResult SGGetChannelUsage(SGChannel c, long *usage)
  394.  FIVEWORDINLINE(0x2F3C, 0x4, 0x81, 0x7000, 0xA82A);
  395. extern pascal ComponentResult SGSetChannelBounds(SGChannel c, const Rect *bounds)
  396.  FIVEWORDINLINE(0x2F3C, 0x4, 0x82, 0x7000, 0xA82A);
  397. extern pascal ComponentResult SGGetChannelBounds(SGChannel c, Rect *bounds)
  398.  FIVEWORDINLINE(0x2F3C, 0x4, 0x83, 0x7000, 0xA82A);
  399. extern pascal ComponentResult SGSetChannelVolume(SGChannel c, short volume)
  400.  FIVEWORDINLINE(0x2F3C, 0x2, 0x84, 0x7000, 0xA82A);
  401. extern pascal ComponentResult SGGetChannelVolume(SGChannel c, short *volume)
  402.  FIVEWORDINLINE(0x2F3C, 0x4, 0x85, 0x7000, 0xA82A);
  403. extern pascal ComponentResult SGGetChannelInfo(SGChannel c, long *channelInfo)
  404.  FIVEWORDINLINE(0x2F3C, 0x4, 0x86, 0x7000, 0xA82A);
  405. extern pascal ComponentResult SGSetChannelPlayFlags(SGChannel c, long playFlags)
  406.  FIVEWORDINLINE(0x2F3C, 0x4, 0x87, 0x7000, 0xA82A);
  407. extern pascal ComponentResult SGGetChannelPlayFlags(SGChannel c, long *playFlags)
  408.  FIVEWORDINLINE(0x2F3C, 0x4, 0x88, 0x7000, 0xA82A);
  409. extern pascal ComponentResult SGSetChannelMaxFrames(SGChannel c, long frameCount)
  410.  FIVEWORDINLINE(0x2F3C, 0x4, 0x89, 0x7000, 0xA82A);
  411. extern pascal ComponentResult SGGetChannelMaxFrames(SGChannel c, long *frameCount)
  412.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8A, 0x7000, 0xA82A);
  413. extern pascal ComponentResult SGSetChannelRefCon(SGChannel c, long refCon)
  414.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8B, 0x7000, 0xA82A);
  415. extern pascal ComponentResult SGSetChannelClip(SGChannel c, RgnHandle theClip)
  416.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8C, 0x7000, 0xA82A);
  417. extern pascal ComponentResult SGGetChannelClip(SGChannel c, RgnHandle *theClip)
  418.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8D, 0x7000, 0xA82A);
  419. extern pascal ComponentResult SGGetChannelSampleDescription(SGChannel c, Handle sampleDesc)
  420.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8E, 0x7000, 0xA82A);
  421. extern pascal ComponentResult SGGetChannelDeviceList(SGChannel c, long selectionFlags, SGDeviceList *list)
  422.  FIVEWORDINLINE(0x2F3C, 0x8, 0x8F, 0x7000, 0xA82A);
  423. extern pascal ComponentResult SGSetChannelDevice(SGChannel c, StringPtr name)
  424.  FIVEWORDINLINE(0x2F3C, 0x4, 0x90, 0x7000, 0xA82A);
  425. extern pascal ComponentResult SGSetChannelMatrix(SGChannel c, const MatrixRecord *m)
  426.  FIVEWORDINLINE(0x2F3C, 0x4, 0x91, 0x7000, 0xA82A);
  427. extern pascal ComponentResult SGGetChannelMatrix(SGChannel c, MatrixRecord *m)
  428.  FIVEWORDINLINE(0x2F3C, 0x4, 0x92, 0x7000, 0xA82A);
  429. extern pascal ComponentResult SGGetChannelTimeScale(SGChannel c, TimeScale *scale)
  430.  FIVEWORDINLINE(0x2F3C, 0x4, 0x93, 0x7000, 0xA82A);
  431. extern pascal ComponentResult SGChannelPutPicture(SGChannel c)
  432.  FIVEWORDINLINE(0x2F3C, 0, 0x94, 0x7000, 0xA82A);
  433. extern pascal ComponentResult SGChannelSetRequestedDataRate(SGChannel c, long bytesPerSecond)
  434.  FIVEWORDINLINE(0x2F3C, 0x4, 0x95, 0x7000, 0xA82A);
  435. extern pascal ComponentResult SGChannelGetRequestedDataRate(SGChannel c, long *bytesPerSecond)
  436.  FIVEWORDINLINE(0x2F3C, 0x4, 0x96, 0x7000, 0xA82A);
  437. extern pascal ComponentResult SGChannelSetDataSourceName(SGChannel c, ConstStr255Param name, ScriptCode scriptTag)
  438.  FIVEWORDINLINE(0x2F3C, 0x6, 0x97, 0x7000, 0xA82A);
  439. extern pascal ComponentResult SGChannelGetDataSourceName(SGChannel c, Str255 name, ScriptCode *scriptTag)
  440.  FIVEWORDINLINE(0x2F3C, 0x8, 0x98, 0x7000, 0xA82A);
  441. /*
  442.     calls from seqGrab to Channel
  443. */
  444. extern pascal ComponentResult SGInitChannel(SGChannel c, SeqGrabComponent owner)
  445.  FIVEWORDINLINE(0x2F3C, 0x4, 0x180, 0x7000, 0xA82A);
  446. extern pascal ComponentResult SGWriteSamples(SGChannel c, Movie m, AliasHandle theFile)
  447.  FIVEWORDINLINE(0x2F3C, 0x8, 0x181, 0x7000, 0xA82A);
  448. extern pascal ComponentResult SGGetDataRate(SGChannel c, long *bytesPerSecond)
  449.  FIVEWORDINLINE(0x2F3C, 0x4, 0x182, 0x7000, 0xA82A);
  450. extern pascal ComponentResult SGAlignChannelRect(SGChannel c, Rect *r)
  451.  FIVEWORDINLINE(0x2F3C, 0x4, 0x183, 0x7000, 0xA82A);
  452. /*
  453.     Dorky dialog panel calls
  454. */
  455. extern pascal ComponentResult SGPanelGetDitl(SeqGrabComponent s, Handle *ditl)
  456.  FIVEWORDINLINE(0x2F3C, 0x4, 0x200, 0x7000, 0xA82A);
  457. extern pascal ComponentResult SGPanelGetTitle(SeqGrabComponent s, Str255 title)
  458.  FIVEWORDINLINE(0x2F3C, 0x4, 0x201, 0x7000, 0xA82A);
  459. extern pascal ComponentResult SGPanelCanRun(SeqGrabComponent s, SGChannel c)
  460.  FIVEWORDINLINE(0x2F3C, 0x4, 0x202, 0x7000, 0xA82A);
  461. extern pascal ComponentResult SGPanelInstall(SeqGrabComponent s, SGChannel c, DialogPtr d, short itemOffset)
  462.  FIVEWORDINLINE(0x2F3C, 0xA, 0x203, 0x7000, 0xA82A);
  463. extern pascal ComponentResult SGPanelEvent(SeqGrabComponent s, SGChannel c, DialogPtr d, short itemOffset, EventRecord *theEvent, short *itemHit, Boolean *handled)
  464.  FIVEWORDINLINE(0x2F3C, 0x16, 0x204, 0x7000, 0xA82A);
  465. extern pascal ComponentResult SGPanelItem(SeqGrabComponent s, SGChannel c, DialogPtr d, short itemOffset, short itemNum)
  466.  FIVEWORDINLINE(0x2F3C, 0xC, 0x205, 0x7000, 0xA82A);
  467. extern pascal ComponentResult SGPanelRemove(SeqGrabComponent s, SGChannel c, DialogPtr d, short itemOffset)
  468.  FIVEWORDINLINE(0x2F3C, 0xA, 0x206, 0x7000, 0xA82A);
  469. extern pascal ComponentResult SGPanelSetGrabber(SeqGrabComponent s, SeqGrabComponent sg)
  470.  FIVEWORDINLINE(0x2F3C, 0x4, 0x207, 0x7000, 0xA82A);
  471. extern pascal ComponentResult SGPanelSetResFile(SeqGrabComponent s, short resRef)
  472.  FIVEWORDINLINE(0x2F3C, 0x2, 0x208, 0x7000, 0xA82A);
  473. extern pascal ComponentResult SGPanelGetSettings(SeqGrabComponent s, SGChannel c, UserData *ud, long flags)
  474.  FIVEWORDINLINE(0x2F3C, 0xC, 0x209, 0x7000, 0xA82A);
  475. extern pascal ComponentResult SGPanelSetSettings(SeqGrabComponent s, SGChannel c, UserData ud, long flags)
  476.  FIVEWORDINLINE(0x2F3C, 0xC, 0x20A, 0x7000, 0xA82A);
  477. extern pascal ComponentResult SGPanelValidateInput(SeqGrabComponent s, Boolean *ok)
  478.  FIVEWORDINLINE(0x2F3C, 0x4, 0x20B, 0x7000, 0xA82A);
  479. extern pascal ComponentResult SGPanelSetEventFilter(SeqGrabComponent s, SGModalFilterUPP proc, long refCon)
  480.  FIVEWORDINLINE(0x2F3C, 0x8, 0x20C, 0x7000, 0xA82A);
  481. /*** Sequence Grab VIDEO CHANNEL Component Stuff ***/
  482. /*
  483.     Video stuff
  484. */
  485. struct SGCompressInfo {
  486.     Ptr                                buffer;
  487.     unsigned long                    bufferSize;
  488.     UInt8                            similarity;
  489.     UInt8                            reserved;
  490. };
  491. typedef struct SGCompressInfo SGCompressInfo;
  492.  
  493. typedef pascal ComponentResult (*SGGrabProcPtr)(SGChannel c, short bufferNum, long refCon);
  494. typedef pascal ComponentResult (*SGGrabCompleteProcPtr)(SGChannel c, short bufferNum, Boolean *done, long refCon);
  495. typedef pascal ComponentResult (*SGDisplayProcPtr)(SGChannel c, short bufferNum, MatrixRecord *mp, RgnHandle clipRgn, long refCon);
  496. typedef pascal ComponentResult (*SGCompressProcPtr)(SGChannel c, short bufferNum, long refCon);
  497. typedef pascal ComponentResult (*SGCompressCompleteProcPtr)(SGChannel c, short bufferNum, Boolean *done, SGCompressInfo *ci, long refCon);
  498. typedef pascal ComponentResult (*SGAddFrameProcPtr)(SGChannel c, short bufferNum, TimeValue atTime, TimeScale scale, const SGCompressInfo *ci, long refCon);
  499. typedef pascal ComponentResult (*SGTransferFrameProcPtr)(SGChannel c, short bufferNum, MatrixRecord *mp, RgnHandle clipRgn, long refCon);
  500. typedef pascal ComponentResult (*SGGrabCompressCompleteProcPtr)(SGChannel c, Boolean *done, SGCompressInfo *ci, TimeRecord *t, long refCon);
  501. typedef pascal ComponentResult (*SGDisplayCompressProcPtr)(SGChannel c, Ptr dataPtr, ImageDescriptionHandle desc, MatrixRecord *mp, RgnHandle clipRgn, long refCon);
  502.  
  503. #if GENERATINGCFM
  504. typedef UniversalProcPtr SGGrabUPP;
  505. typedef UniversalProcPtr SGGrabCompleteUPP;
  506. typedef UniversalProcPtr SGDisplayUPP;
  507. typedef UniversalProcPtr SGCompressUPP;
  508. typedef UniversalProcPtr SGCompressCompleteUPP;
  509. typedef UniversalProcPtr SGAddFrameUPP;
  510. typedef UniversalProcPtr SGTransferFrameUPP;
  511. typedef UniversalProcPtr SGGrabCompressCompleteUPP;
  512. typedef UniversalProcPtr SGDisplayCompressUPP;
  513. #else
  514. typedef SGGrabProcPtr SGGrabUPP;
  515. typedef SGGrabCompleteProcPtr SGGrabCompleteUPP;
  516. typedef SGDisplayProcPtr SGDisplayUPP;
  517. typedef SGCompressProcPtr SGCompressUPP;
  518. typedef SGCompressCompleteProcPtr SGCompressCompleteUPP;
  519. typedef SGAddFrameProcPtr SGAddFrameUPP;
  520. typedef SGTransferFrameProcPtr SGTransferFrameUPP;
  521. typedef SGGrabCompressCompleteProcPtr SGGrabCompressCompleteUPP;
  522. typedef SGDisplayCompressProcPtr SGDisplayCompressUPP;
  523. #endif
  524.  
  525. struct VideoBottles {
  526.     short                            procCount;
  527.     SGGrabUPP                        grabProc;
  528.     SGGrabCompleteUPP                grabCompleteProc;
  529.     SGDisplayUPP                    displayProc;
  530.     SGCompressUPP                    compressProc;
  531.     SGCompressCompleteUPP            compressCompleteProc;
  532.     SGAddFrameUPP                    addFrameProc;
  533.     SGTransferFrameUPP                transferFrameProc;
  534.     SGGrabCompressCompleteUPP        grabCompressCompleteProc;
  535.     SGDisplayCompressUPP            displayCompressProc;
  536. };
  537. typedef struct VideoBottles VideoBottles;
  538.  
  539. extern pascal ComponentResult SGGetSrcVideoBounds(SGChannel c, Rect *r)
  540.  FIVEWORDINLINE(0x2F3C, 0x4, 0x100, 0x7000, 0xA82A);
  541. extern pascal ComponentResult SGSetVideoRect(SGChannel c, const Rect *r)
  542.  FIVEWORDINLINE(0x2F3C, 0x4, 0x101, 0x7000, 0xA82A);
  543. extern pascal ComponentResult SGGetVideoRect(SGChannel c, Rect *r)
  544.  FIVEWORDINLINE(0x2F3C, 0x4, 0x102, 0x7000, 0xA82A);
  545. extern pascal ComponentResult SGGetVideoCompressorType(SGChannel c, OSType *compressorType)
  546.  FIVEWORDINLINE(0x2F3C, 0x4, 0x103, 0x7000, 0xA82A);
  547. extern pascal ComponentResult SGSetVideoCompressorType(SGChannel c, OSType compressorType)
  548.  FIVEWORDINLINE(0x2F3C, 0x4, 0x104, 0x7000, 0xA82A);
  549. extern pascal ComponentResult SGSetVideoCompressor(SGChannel c, short depth, CompressorComponent compressor, CodecQ spatialQuality, CodecQ temporalQuality, long keyFrameRate)
  550.  FIVEWORDINLINE(0x2F3C, 0x12, 0x105, 0x7000, 0xA82A);
  551. extern pascal ComponentResult SGGetVideoCompressor(SGChannel c, short *depth, CompressorComponent *compressor, CodecQ *spatialQuality, CodecQ *temporalQuality, long *keyFrameRate)
  552.  FIVEWORDINLINE(0x2F3C, 0x14, 0x106, 0x7000, 0xA82A);
  553. extern pascal ComponentInstance SGGetVideoDigitizerComponent(SGChannel c)
  554.  FIVEWORDINLINE(0x2F3C, 0, 0x107, 0x7000, 0xA82A);
  555. extern pascal ComponentResult SGSetVideoDigitizerComponent(SGChannel c, ComponentInstance vdig)
  556.  FIVEWORDINLINE(0x2F3C, 0x4, 0x108, 0x7000, 0xA82A);
  557. extern pascal ComponentResult SGVideoDigitizerChanged(SGChannel c)
  558.  FIVEWORDINLINE(0x2F3C, 0, 0x109, 0x7000, 0xA82A);
  559. extern pascal ComponentResult SGSetVideoBottlenecks(SGChannel c, VideoBottles *vb)
  560.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10A, 0x7000, 0xA82A);
  561. extern pascal ComponentResult SGGetVideoBottlenecks(SGChannel c, VideoBottles *vb)
  562.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10B, 0x7000, 0xA82A);
  563. extern pascal ComponentResult SGGrabFrame(SGChannel c, short bufferNum)
  564.  FIVEWORDINLINE(0x2F3C, 0x2, 0x10C, 0x7000, 0xA82A);
  565. extern pascal ComponentResult SGGrabFrameComplete(SGChannel c, short bufferNum, Boolean *done)
  566.  FIVEWORDINLINE(0x2F3C, 0x6, 0x10D, 0x7000, 0xA82A);
  567. extern pascal ComponentResult SGDisplayFrame(SGChannel c, short bufferNum, const MatrixRecord *mp, RgnHandle clipRgn)
  568.  FIVEWORDINLINE(0x2F3C, 0xA, 0x10E, 0x7000, 0xA82A);
  569. extern pascal ComponentResult SGCompressFrame(SGChannel c, short bufferNum)
  570.  FIVEWORDINLINE(0x2F3C, 0x2, 0x10F, 0x7000, 0xA82A);
  571. extern pascal ComponentResult SGCompressFrameComplete(SGChannel c, short bufferNum, Boolean *done, SGCompressInfo *ci)
  572.  FIVEWORDINLINE(0x2F3C, 0xA, 0x110, 0x7000, 0xA82A);
  573. extern pascal ComponentResult SGAddFrame(SGChannel c, short bufferNum, TimeValue atTime, TimeScale scale, const SGCompressInfo *ci)
  574.  FIVEWORDINLINE(0x2F3C, 0xE, 0x111, 0x7000, 0xA82A);
  575. extern pascal ComponentResult SGTransferFrameForCompress(SGChannel c, short bufferNum, const MatrixRecord *mp, RgnHandle clipRgn)
  576.  FIVEWORDINLINE(0x2F3C, 0xA, 0x112, 0x7000, 0xA82A);
  577. extern pascal ComponentResult SGSetCompressBuffer(SGChannel c, short depth, const Rect *compressSize)
  578.  FIVEWORDINLINE(0x2F3C, 0x6, 0x113, 0x7000, 0xA82A);
  579. extern pascal ComponentResult SGGetCompressBuffer(SGChannel c, short *depth, Rect *compressSize)
  580.  FIVEWORDINLINE(0x2F3C, 0x8, 0x114, 0x7000, 0xA82A);
  581. extern pascal ComponentResult SGGetBufferInfo(SGChannel c, short bufferNum, PixMapHandle *bufferPM, Rect *bufferRect, GWorldPtr *compressBuffer, Rect *compressBufferRect)
  582.  FIVEWORDINLINE(0x2F3C, 0x12, 0x115, 0x7000, 0xA82A);
  583. extern pascal ComponentResult SGSetUseScreenBuffer(SGChannel c, Boolean useScreenBuffer)
  584.  FIVEWORDINLINE(0x2F3C, 0x2, 0x116, 0x7000, 0xA82A);
  585. extern pascal ComponentResult SGGetUseScreenBuffer(SGChannel c, Boolean *useScreenBuffer)
  586.  FIVEWORDINLINE(0x2F3C, 0x4, 0x117, 0x7000, 0xA82A);
  587. extern pascal ComponentResult SGGrabCompressComplete(SGChannel c, Boolean *done, SGCompressInfo *ci, TimeRecord *tr)
  588.  FIVEWORDINLINE(0x2F3C, 0xC, 0x118, 0x7000, 0xA82A);
  589. extern pascal ComponentResult SGDisplayCompress(SGChannel c, Ptr dataPtr, ImageDescriptionHandle desc, MatrixRecord *mp, RgnHandle clipRgn)
  590.  FIVEWORDINLINE(0x2F3C, 0x10, 0x119, 0x7000, 0xA82A);
  591. extern pascal ComponentResult SGSetFrameRate(SGChannel c, Fixed frameRate)
  592.  FIVEWORDINLINE(0x2F3C, 0x4, 0x11A, 0x7000, 0xA82A);
  593. extern pascal ComponentResult SGGetFrameRate(SGChannel c, Fixed *frameRate)
  594.  FIVEWORDINLINE(0x2F3C, 0x4, 0x11B, 0x7000, 0xA82A);
  595. /*** Sequence Grab SOUND CHANNEL Component Stuff ***/
  596. /*
  597.     Sound stuff
  598. */
  599. extern pascal ComponentResult SGSetSoundInputDriver(SGChannel c, ConstStr255Param driverName)
  600.  FIVEWORDINLINE(0x2F3C, 0x4, 0x100, 0x7000, 0xA82A);
  601. extern pascal long SGGetSoundInputDriver(SGChannel c)
  602.  FIVEWORDINLINE(0x2F3C, 0, 0x101, 0x7000, 0xA82A);
  603. extern pascal ComponentResult SGSoundInputDriverChanged(SGChannel c)
  604.  FIVEWORDINLINE(0x2F3C, 0, 0x102, 0x7000, 0xA82A);
  605. extern pascal ComponentResult SGSetSoundRecordChunkSize(SGChannel c, long seconds)
  606.  FIVEWORDINLINE(0x2F3C, 0x4, 0x103, 0x7000, 0xA82A);
  607. extern pascal long SGGetSoundRecordChunkSize(SGChannel c)
  608.  FIVEWORDINLINE(0x2F3C, 0, 0x104, 0x7000, 0xA82A);
  609. extern pascal ComponentResult SGSetSoundInputRate(SGChannel c, Fixed rate)
  610.  FIVEWORDINLINE(0x2F3C, 0x4, 0x105, 0x7000, 0xA82A);
  611. extern pascal Fixed SGGetSoundInputRate(SGChannel c)
  612.  FIVEWORDINLINE(0x2F3C, 0, 0x106, 0x7000, 0xA82A);
  613. extern pascal ComponentResult SGSetSoundInputParameters(SGChannel c, short sampleSize, short numChannels, OSType compressionType)
  614.  FIVEWORDINLINE(0x2F3C, 0x8, 0x107, 0x7000, 0xA82A);
  615. extern pascal ComponentResult SGGetSoundInputParameters(SGChannel c, short *sampleSize, short *numChannels, OSType *compressionType)
  616.  FIVEWORDINLINE(0x2F3C, 0xC, 0x108, 0x7000, 0xA82A);
  617.  
  618. enum {
  619.     sgChannelAtom                = 'chan',
  620.     sgChannelSettingsAtom        = 'ctom',
  621.     sgChannelDescription        = 'cdsc',
  622.     sgChannelSettings            = 'cset'
  623. };
  624.  
  625. enum {
  626.     sgDeviceNameType            = 'name',
  627.     sgUsageType                    = 'use ',
  628.     sgPlayFlagsType                = 'plyf',
  629.     sgClipType                    = 'clip',
  630.     sgMatrixType                = 'mtrx',
  631.     sgVolumeType                = 'volu'
  632. };
  633.  
  634. enum {
  635.     sgPanelSettingsAtom            = 'ptom',
  636.     sgPanelDescription            = 'pdsc',
  637.     sgPanelSettings                = 'pset'
  638. };
  639.  
  640. enum {
  641.     sgcSoundCompressionType        = 'scmp',
  642.     sgcSoundSampleRateType        = 'srat',
  643.     sgcSoundChannelCountType    = 'schn',
  644.     sgcSoundSampleSizeType        = 'ssiz',
  645.     sgcSoundInputType            = 'sinp',
  646.     sgcSoundGainType            = 'gain'
  647. };
  648.  
  649. enum {
  650.     sgcVideoHueType                = 'hue ',
  651.     sgcVideoSaturationType        = 'satr',
  652.     sgcVideoContrastType        = 'trst',
  653.     sgcVideoSharpnessType        = 'shrp',
  654.     sgcVideoBrigtnessType        = 'brit',
  655.     sgcVideoBlackLevelType        = 'blkl',
  656.     sgcVideoWhiteLevelType        = 'whtl',
  657.     sgcVideoInputType            = 'vinp',
  658.     sgcVideoFormatType            = 'vstd',
  659.     sgcVideoFilterType            = 'vflt',
  660.     sgcVideoRectType            = 'vrct',
  661.     sgVideoDigitizerType        = 'vdig'
  662. };
  663.  
  664. enum {
  665.     kSGInitializeSelect            = 0x1,
  666.     kSGSetDataOutputSelect        = 0x2,
  667.     kSGGetDataOutputSelect        = 0x3,
  668.     kSGSetGWorldSelect            = 0x4,
  669.     kSGGetGWorldSelect            = 0x5,
  670.     kSGNewChannelSelect            = 0x6,
  671.     kSGDisposeChannelSelect        = 0x7,
  672.     kSGStartPreviewSelect        = 0x10,
  673.     kSGStartRecordSelect        = 0x11,
  674.     kSGIdleSelect                = 0x12,
  675.     kSGStopSelect                = 0x13,
  676.     kSGPauseSelect                = 0x14,
  677.     kSGPrepareSelect            = 0x15,
  678.     kSGReleaseSelect            = 0x16,
  679.     kSGGetMovieSelect            = 0x17,
  680.     kSGSetMaximumRecordTimeSelect = 0x18,
  681.     kSGGetMaximumRecordTimeSelect = 0x19,
  682.     kSGGetStorageSpaceRemainingSelect = 0x1A,
  683.     kSGGetTimeRemainingSelect    = 0x1B,
  684.     kSGGrabPictSelect            = 0x1C,
  685.     kSGGetLastMovieResIDSelect    = 0x1D,
  686.     kSGSetFlagsSelect            = 0x1E,
  687.     kSGGetFlagsSelect            = 0x1F,
  688.     kSGSetDataProcSelect        = 0x20,
  689.     kSGNewChannelFromComponentSelect = 0x21,
  690.     kSGDisposeDeviceListSelect    = 0x22,
  691.     kSGAppendDeviceListToMenuSelect = 0x23,
  692.     kSGSetSettingsSelect        = 0x24,
  693.     kSGGetSettingsSelect        = 0x25,
  694.     kSGGetIndChannelSelect        = 0x26,
  695.     kSGUpdateSelect                = 0x27,
  696.     kSGGetPauseSelect            = 0x28,
  697.     kSGSettingsDialogSelect        = 0x29,
  698.     kSGGetAlignmentProcSelect    = 0x2A,
  699.     kSGSetChannelSettingsSelect    = 0x2B,
  700.     kSGGetChannelSettingsSelect    = 0x2C,
  701.     kSGGetModeSelect            = 0x2D,
  702.     kSGSetDataRefSelect            = 0x2E,
  703.     kSGGetDataRefSelect            = 0x2F,
  704.     kSGNewOutputSelect            = 0x30,
  705.     kSGDisposeOutputSelect        = 0x31,
  706.     kSGSetOutputFlagsSelect        = 0x32,
  707.     kSGSetChannelOutputSelect    = 0x33,
  708.     kSGGetDataOutputStorageSpaceRemainingSelect = 0x34,
  709.     kSGWriteMovieDataSelect        = 0x100,
  710.     kSGAddFrameReferenceSelect    = 0x101,
  711.     kSGGetNextFrameReferenceSelect = 0x102,
  712.     kSGGetTimeBaseSelect        = 0x103,
  713.     kSGSortDeviceListSelect        = 0x104,
  714.     kSGAddMovieDataSelect        = 0x105,
  715.     kSGChangedSourceSelect        = 0x106,
  716.     kSGCSetChannelUsageSelect    = 0x80,
  717.     kSGCGetChannelUsageSelect    = 0x81,
  718.     kSGCSetChannelBoundsSelect    = 0x82,
  719.     kSGCGetChannelBoundsSelect    = 0x83,
  720.     kSGCSetChannelVolumeSelect    = 0x84,
  721.     kSGCGetChannelVolumeSelect    = 0x85,
  722.     kSGCGetChannelInfoSelect    = 0x86,
  723.     kSGCSetChannelPlayFlagsSelect = 0x87,
  724.     kSGCGetChannelPlayFlagsSelect = 0x88,
  725.     kSGCSetChannelMaxFramesSelect = 0x89,
  726.     kSGCGetChannelMaxFramesSelect = 0x8A,
  727.     kSGCSetChannelRefConSelect    = 0x8B,
  728.     kSGCSetChannelClipSelect    = 0x8C,
  729.     kSGCGetChannelClipSelect    = 0x8D,
  730.     kSGCGetChannelSampleDescriptionSelect = 0x8E,
  731.     kSGCGetChannelDeviceListSelect = 0x8F,
  732.     kSGCSetChannelDeviceSelect    = 0x90,
  733.     kSGCSetChannelMatrixSelect    = 0x91,
  734.     kSGCGetChannelMatrixSelect    = 0x92,
  735.     kSGCGetChannelTimeScaleSelect = 0x93,
  736.     kSGCChannelPutPictureSelect    = 0x94,
  737.     kSGCChannelSetRequestedDataRateSelect = 0x95,
  738.     kSGCChannelGetRequestedDataRateSelect = 0x96,
  739.     kSGCChannelSetDataSourceNameSelect = 0x97,
  740.     kSGCChannelGetDataSourceNameSelect = 0x98,
  741.     kSGCInitChannelSelect        = 0x180,
  742.     kSGCWriteSamplesSelect        = 0x181,
  743.     kSGCGetDataRateSelect        = 0x182,
  744.     kSGCAlignChannelRectSelect    = 0x183,
  745.     kSGCPanelGetDitlSelect        = 0x200,
  746.     kSGCPanelGetTitleSelect        = 0x201,
  747.     kSGCPanelCanRunSelect        = 0x202,
  748.     kSGCPanelInstallSelect        = 0x203,
  749.     kSGCPanelEventSelect        = 0x204,
  750.     kSGCPanelItemSelect            = 0x205,
  751.     kSGCPanelRemoveSelect        = 0x206,
  752.     kSGCPanelSetGrabberSelect    = 0x207,
  753.     kSGCPanelSetResFileSelect    = 0x208,
  754.     kSGCPanelGetSettingsSelect    = 0x209,
  755.     kSGCPanelSetSettingsSelect    = 0x20A,
  756.     kSGCPanelValidateInputSelect = 0x20B,
  757.     kSGCPanelSetEventFilterSelect = 0x20C,
  758.     kSGCGetSrcVideoBoundsSelect    = 0x100,
  759.     kSGCSetVideoRectSelect        = 0x101,
  760.     kSGCGetVideoRectSelect        = 0x102,
  761.     kSGCGetVideoCompressorTypeSelect = 0x103,
  762.     kSGCSetVideoCompressorTypeSelect = 0x104,
  763.     kSGCSetVideoCompressorSelect = 0x105,
  764.     kSGCGetVideoCompressorSelect = 0x106,
  765.     kSGCGetVideoDigitizerComponentSelect = 0x107,
  766.     kSGCSetVideoDigitizerComponentSelect = 0x108,
  767.     kSGCVideoDigitizerChangedSelect = 0x109,
  768.     kSGCSetVideoBottlenecksSelect = 0x10A,
  769.     kSGCGetVideoBottlenecksSelect = 0x10B,
  770.     kSGCGrabFrameSelect            = 0x10C,
  771.     kSGCGrabFrameCompleteSelect    = 0x10D,
  772.     kSGCDisplayFrameSelect        = 0x10E,
  773.     kSGCCompressFrameSelect        = 0x10F,
  774.     kSGCCompressFrameCompleteSelect = 0x110,
  775.     kSGCAddFrameSelect            = 0x111,
  776.     kSGCTransferFrameForCompressSelect = 0x112,
  777.     kSGCSetCompressBufferSelect    = 0x113,
  778.     kSGCGetCompressBufferSelect    = 0x114,
  779.     kSGCGetBufferInfoSelect        = 0x115,
  780.     kSGCSetUseScreenBufferSelect = 0x116,
  781.     kSGCGetUseScreenBufferSelect = 0x117,
  782.     kSGCGrabCompressCompleteSelect = 0x118,
  783.     kSGCDisplayCompressSelect    = 0x119,
  784.     kSGCSetFrameRateSelect        = 0x11A,
  785.     kSGCGetFrameRateSelect        = 0x11B,
  786.     kSGCSetSoundInputDriverSelect = 0x100,
  787.     kSGCGetSoundInputDriverSelect = 0x101,
  788.     kSGCSoundInputDriverChangedSelect = 0x102,
  789.     kSGCSetSoundRecordChunkSizeSelect = 0x103,
  790.     kSGCGetSoundRecordChunkSizeSelect = 0x104,
  791.     kSGCSetSoundInputRateSelect    = 0x105,
  792.     kSGCGetSoundInputRateSelect    = 0x106,
  793.     kSGCSetSoundInputParametersSelect = 0x107,
  794.     kSGCGetSoundInputParametersSelect = 0x108
  795. };
  796.  
  797. /* Standard type for video digitizers */
  798. enum {
  799.     videoDigitizerComponentType    = 'vdig',
  800.     vdigInterfaceRev            = 2
  801. };
  802.  
  803. /* Input Format Standards */
  804. enum {
  805.     ntscIn                        = 0,                            /* current input format */
  806.     currentIn                    = 0,                            /* ntsc input format */
  807.     palIn                        = 1,                            /* pal input format */
  808.     secamIn                        = 2,                            /* secam input format */
  809.     ntscReallyIn                = 3                                /* ntsc input format */
  810. };
  811.  
  812. /* Input Formats */
  813. enum {
  814.     compositeIn                    = 0,                            /* input is composite format */
  815.     sVideoIn                    = 1,                            /* input is sVideo format */
  816.     rgbComponentIn                = 2,                            /* input is rgb component format */
  817.     rgbComponentSyncIn            = 3,                            /* input is rgb component format (sync on green?)*/
  818.     yuvComponentIn                = 4,                            /* input is yuv component format */
  819.     yuvComponentSyncIn            = 5,                            /* input is yuv component format (sync on green?) */
  820.     tvTunerIn                    = 6
  821. };
  822.  
  823. /* Video Digitizer PlayThru States */
  824. enum {
  825.     vdPlayThruOff                = 0,
  826.     vdPlayThruOn                = 1
  827. };
  828.  
  829. /* Input Color Space Modes */
  830. enum {
  831.     vdDigitizerBW                = 0,                            /* black and white */
  832.     vdDigitizerRGB                = 1                                /* rgb color */
  833. };
  834.  
  835. /* Phase Lock Loop Modes */
  836. enum {
  837.     vdBroadcastMode                = 0,                            /* Broadcast / Laser Disk video mode */
  838.     vdVTRMode                    = 1                                /* VCR / Magnetic media mode */
  839. };
  840.  
  841. /* Field Select Options */
  842. enum {
  843.     vdUseAnyField                = 0,                            /* Digitizers choice on field use */
  844.     vdUseOddField                = 1,                            /* Use odd field for half size vert and smaller */
  845.     vdUseEvenField                = 2                                /* Use even field for half size vert and smaller */
  846. };
  847.  
  848. /* vdig types */
  849. enum {
  850.     vdTypeBasic                    = 0,                            /* basic, no clipping */
  851.     vdTypeAlpha                    = 1,                            /* supports clipping with alpha channel */
  852.     vdTypeMask                    = 2,                            /* supports clipping with mask plane */
  853.     vdTypeKey                    = 3                                /* supports clipping with key color(s) */
  854. };
  855.  
  856. /* Digitizer Input Capability/Current Flags    */
  857. enum {
  858.     digiInDoesNTSC                = 1L << 0,                        /* digitizer supports NTSC input format */
  859.     digiInDoesPAL                = 1L << 1,                        /* digitizer supports PAL input format */
  860.     digiInDoesSECAM                = 1L << 2,                        /* digitizer supports SECAM input format */
  861.     digiInDoesGenLock            = 1L << 7,                        /* digitizer does genlock */
  862.     digiInDoesComposite            = 1L << 8,                        /* digitizer supports composite input type */
  863.     digiInDoesSVideo            = 1L << 9,                        /* digitizer supports S-Video input type */
  864.     digiInDoesComponent            = 1L << 10,                        /* digitizer supports component = rgb, input type */
  865.     digiInVTR_Broadcast            = 1L << 11,                        /* digitizer can differentiate between the two */
  866.     digiInDoesColor                = 1L << 12,                        /* digitizer supports color */
  867.     digiInDoesBW                = 1L << 13,                        /* digitizer supports black & white */
  868. /* Digitizer Input Current Flags = these are valid only during active operating conditions,    */
  869.     digiInSignalLock            = 1L << 31                        /* digitizer detects input signal is locked, this bit = horiz lock || vertical lock */
  870. };
  871.  
  872. /* Digitizer Output Capability/Current Flags */
  873. enum {
  874.     digiOutDoes1                = 1L << 0,                        /* digitizer supports 1 bit pixels */
  875.     digiOutDoes2                = 1L << 1,                        /* digitizer supports 2 bit pixels */
  876.     digiOutDoes4                = 1L << 2,                        /* digitizer supports 4 bit pixels */
  877.     digiOutDoes8                = 1L << 3,                        /* digitizer supports 8 bit pixels */
  878.     digiOutDoes16                = 1L << 4,                        /* digitizer supports 16 bit pixels */
  879.     digiOutDoes32                = 1L << 5,                        /* digitizer supports 32 bit pixels */
  880.     digiOutDoesDither            = 1L << 6,                        /* digitizer dithers in indexed modes */
  881.     digiOutDoesStretch            = 1L << 7,                        /* digitizer can arbitrarily stretch */
  882.     digiOutDoesShrink            = 1L << 8,                        /* digitizer can arbitrarily shrink */
  883.     digiOutDoesMask                = 1L << 9,                        /* digitizer can mask to clipping regions */
  884.     digiOutDoesDouble            = 1L << 11,                        /* digitizer can stretch to exactly double size */
  885.     digiOutDoesQuad                = 1L << 12,                        /* digitizer can stretch exactly quadruple size */
  886.     digiOutDoesQuarter            = 1L << 13,                        /* digitizer can shrink to exactly quarter size */
  887.     digiOutDoesSixteenth        = 1L << 14,                        /* digitizer can shrink to exactly sixteenth size */
  888.     digiOutDoesRotate            = 1L << 15,                        /* digitizer supports rotate transformations */
  889.     digiOutDoesHorizFlip        = 1L << 16,                        /* digitizer supports horizontal flips Sx < 0 */
  890.     digiOutDoesVertFlip            = 1L << 17,                        /* digitizer supports vertical flips Sy < 0 */
  891.     digiOutDoesSkew                = 1L << 18,                        /* digitizer supports skew = shear,twist, */
  892.     digiOutDoesBlend            = 1L << 19,
  893.     digiOutDoesWarp                = 1L << 20,
  894.     digiOutDoesHW_DMA            = 1L << 21,                        /* digitizer not constrained to local device */
  895.     digiOutDoesHWPlayThru        = 1L << 22,                        /* digitizer doesn't need time to play thru */
  896.     digiOutDoesILUT                = 1L << 23,                        /* digitizer does inverse LUT for index modes */
  897.     digiOutDoesKeyColor            = 1L << 24,                        /* digitizer does key color functions too */
  898.     digiOutDoesAsyncGrabs        = 1L << 25,                        /* digitizer supports async grabs */
  899.     digiOutDoesUnreadableScreenBits = 1L << 26,                    /* playthru doesn't generate readable bits on screen*/
  900.     digiOutDoesCompress            = 1L << 27,                        /* supports alternate output data types */
  901.     digiOutDoesCompressOnly        = 1L << 28,                        /* can't provide raw frames anywhere */
  902.     digiOutDoesPlayThruDuringCompress = 1L << 29                /* digi can do playthru while providing compressed data */
  903. };
  904.  
  905. /* Types */
  906. typedef ComponentInstance VideoDigitizerComponent;
  907.  
  908. typedef ComponentResult VideoDigitizerError;
  909.  
  910. struct DigitizerInfo {
  911.     short                            vdigType;
  912.     long                            inputCapabilityFlags;
  913.     long                            outputCapabilityFlags;
  914.     long                            inputCurrentFlags;
  915.     long                            outputCurrentFlags;
  916.     short                            slot;                        /* temporary for connection purposes */
  917.     GDHandle                        gdh;                        /* temporary for digitizers that have preferred screen */
  918.     GDHandle                        maskgdh;                    /* temporary for digitizers that have mask planes */
  919.     short                            minDestHeight;                /* Smallest resizable height */
  920.     short                            minDestWidth;                /* Smallest resizable width */
  921.     short                            maxDestHeight;                /* Largest resizable height */
  922.     short                            maxDestWidth;                /* Largest resizable height */
  923.     short                            blendLevels;                /* Number of blend levels supported (2 if 1 bit mask) */
  924.     long                            reserved;                    /* reserved */
  925. };
  926. typedef struct DigitizerInfo DigitizerInfo;
  927.  
  928. struct VdigType {
  929.     long                            digType;
  930.     long                            reserved;
  931. };
  932. typedef struct VdigType VdigType;
  933.  
  934. struct VdigTypeList {
  935.     short                            count;
  936.     VdigType                        list[1];
  937. };
  938. typedef struct VdigTypeList VdigTypeList;
  939.  
  940. struct VdigBufferRec {
  941.     PixMapHandle                    dest;
  942.     Point                            location;
  943.     long                            reserved;
  944. };
  945. typedef struct VdigBufferRec VdigBufferRec;
  946.  
  947. struct VdigBufferRecList {
  948.     short                            count;
  949.     MatrixRecordPtr                    matrix;
  950.     RgnHandle                        mask;
  951.     VdigBufferRec                    list[1];
  952. };
  953. typedef struct VdigBufferRecList VdigBufferRecList, *VdigBufferRecListPtr, **VdigBufferRecListHandle;
  954.  
  955. typedef pascal void (*VdigIntProcPtr)(long flags, long refcon);
  956.  
  957. #if GENERATINGCFM
  958. typedef UniversalProcPtr VdigIntUPP;
  959. #else
  960. typedef VdigIntProcPtr VdigIntUPP;
  961. #endif
  962.  
  963. struct VDCompressionList {
  964.     CodecComponent                    codec;
  965.     CodecType                        cType;
  966.     Str63                            typeName;
  967.     Str63                            name;
  968.     long                            formatFlags;
  969.     long                            compressFlags;
  970.     long                            reserved;
  971. };
  972. typedef struct VDCompressionList VDCompressionList, *VDCompressionListPtr, **VDCompressionListHandle;
  973.  
  974.  
  975. enum {
  976.     dmaDepth1                    = 1,
  977.     dmaDepth2                    = 2,
  978.     dmaDepth4                    = 4,
  979.     dmaDepth8                    = 8,
  980.     dmaDepth16                    = 16,
  981.     dmaDepth32                    = 32,
  982.     dmaDepth2Gray                = 64,
  983.     dmaDepth4Gray                = 128,
  984.     dmaDepth8Gray                = 256
  985. };
  986.  
  987. enum {
  988.     kVDIGControlledFrameRate    = -1
  989. };
  990.  
  991. /* number of vdig calls*/
  992. enum {
  993.     kvdigSelectors                = 86
  994. };
  995.  
  996. extern pascal VideoDigitizerError VDGetMaxSrcRect(VideoDigitizerComponent ci, short inputStd, Rect *maxSrcRect)
  997.  FIVEWORDINLINE(0x2F3C, 0x6, 0x1, 0x7000, 0xA82A);
  998. extern pascal VideoDigitizerError VDGetActiveSrcRect(VideoDigitizerComponent ci, short inputStd, Rect *activeSrcRect)
  999.  FIVEWORDINLINE(0x2F3C, 0x6, 0x2, 0x7000, 0xA82A);
  1000. extern pascal VideoDigitizerError VDSetDigitizerRect(VideoDigitizerComponent ci, Rect *digitizerRect)
  1001.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3, 0x7000, 0xA82A);
  1002. extern pascal VideoDigitizerError VDGetDigitizerRect(VideoDigitizerComponent ci, Rect *digitizerRect)
  1003.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4, 0x7000, 0xA82A);
  1004. extern pascal VideoDigitizerError VDGetVBlankRect(VideoDigitizerComponent ci, short inputStd, Rect *vBlankRect)
  1005.  FIVEWORDINLINE(0x2F3C, 0x6, 0x5, 0x7000, 0xA82A);
  1006. extern pascal VideoDigitizerError VDGetMaskPixMap(VideoDigitizerComponent ci, PixMapHandle maskPixMap)
  1007.  FIVEWORDINLINE(0x2F3C, 0x4, 0x6, 0x7000, 0xA82A);
  1008. extern pascal VideoDigitizerError VDGetPlayThruDestination(VideoDigitizerComponent ci, PixMapHandle *dest, Rect *destRect, MatrixRecord *m, RgnHandle *mask)
  1009.  FIVEWORDINLINE(0x2F3C, 0x10, 0x8, 0x7000, 0xA82A);
  1010. extern pascal VideoDigitizerError VDUseThisCLUT(VideoDigitizerComponent ci, CTabHandle colorTableHandle)
  1011.  FIVEWORDINLINE(0x2F3C, 0x4, 0x9, 0x7000, 0xA82A);
  1012. extern pascal VideoDigitizerError VDSetInputGammaValue(VideoDigitizerComponent ci, Fixed channel1, Fixed channel2, Fixed channel3)
  1013.  FIVEWORDINLINE(0x2F3C, 0xC, 0xA, 0x7000, 0xA82A);
  1014. extern pascal VideoDigitizerError VDGetInputGammaValue(VideoDigitizerComponent ci, Fixed *channel1, Fixed *channel2, Fixed *channel3)
  1015.  FIVEWORDINLINE(0x2F3C, 0xC, 0xB, 0x7000, 0xA82A);
  1016. extern pascal VideoDigitizerError VDSetBrightness(VideoDigitizerComponent ci, unsigned short *brightness)
  1017.  FIVEWORDINLINE(0x2F3C, 0x4, 0xC, 0x7000, 0xA82A);
  1018. extern pascal VideoDigitizerError VDGetBrightness(VideoDigitizerComponent ci, unsigned short *brightness)
  1019.  FIVEWORDINLINE(0x2F3C, 0x4, 0xD, 0x7000, 0xA82A);
  1020. extern pascal VideoDigitizerError VDSetContrast(VideoDigitizerComponent ci, unsigned short *contrast)
  1021.  FIVEWORDINLINE(0x2F3C, 0x4, 0xE, 0x7000, 0xA82A);
  1022. extern pascal VideoDigitizerError VDSetHue(VideoDigitizerComponent ci, unsigned short *hue)
  1023.  FIVEWORDINLINE(0x2F3C, 0x4, 0xF, 0x7000, 0xA82A);
  1024. extern pascal VideoDigitizerError VDSetSharpness(VideoDigitizerComponent ci, unsigned short *sharpness)
  1025.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10, 0x7000, 0xA82A);
  1026. extern pascal VideoDigitizerError VDSetSaturation(VideoDigitizerComponent ci, unsigned short *saturation)
  1027.  FIVEWORDINLINE(0x2F3C, 0x4, 0x11, 0x7000, 0xA82A);
  1028. extern pascal VideoDigitizerError VDGetContrast(VideoDigitizerComponent ci, unsigned short *contrast)
  1029.  FIVEWORDINLINE(0x2F3C, 0x4, 0x12, 0x7000, 0xA82A);
  1030. extern pascal VideoDigitizerError VDGetHue(VideoDigitizerComponent ci, unsigned short *hue)
  1031.  FIVEWORDINLINE(0x2F3C, 0x4, 0x13, 0x7000, 0xA82A);
  1032. extern pascal VideoDigitizerError VDGetSharpness(VideoDigitizerComponent ci, unsigned short *sharpness)
  1033.  FIVEWORDINLINE(0x2F3C, 0x4, 0x14, 0x7000, 0xA82A);
  1034. extern pascal VideoDigitizerError VDGetSaturation(VideoDigitizerComponent ci, unsigned short *saturation)
  1035.  FIVEWORDINLINE(0x2F3C, 0x4, 0x15, 0x7000, 0xA82A);
  1036. extern pascal VideoDigitizerError VDGrabOneFrame(VideoDigitizerComponent ci)
  1037.  FIVEWORDINLINE(0x2F3C, 0, 0x16, 0x7000, 0xA82A);
  1038. extern pascal VideoDigitizerError VDGetMaxAuxBuffer(VideoDigitizerComponent ci, PixMapHandle *pm, Rect *r)
  1039.  FIVEWORDINLINE(0x2F3C, 0x8, 0x17, 0x7000, 0xA82A);
  1040. extern pascal VideoDigitizerError VDGetDigitizerInfo(VideoDigitizerComponent ci, DigitizerInfo *info)
  1041.  FIVEWORDINLINE(0x2F3C, 0x4, 0x19, 0x7000, 0xA82A);
  1042. extern pascal VideoDigitizerError VDGetCurrentFlags(VideoDigitizerComponent ci, long *inputCurrentFlag, long *outputCurrentFlag)
  1043.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1A, 0x7000, 0xA82A);
  1044. extern pascal VideoDigitizerError VDSetKeyColor(VideoDigitizerComponent ci, long index)
  1045.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1B, 0x7000, 0xA82A);
  1046. extern pascal VideoDigitizerError VDGetKeyColor(VideoDigitizerComponent ci, long *index)
  1047.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1C, 0x7000, 0xA82A);
  1048. extern pascal VideoDigitizerError VDAddKeyColor(VideoDigitizerComponent ci, long *index)
  1049.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1D, 0x7000, 0xA82A);
  1050. extern pascal VideoDigitizerError VDGetNextKeyColor(VideoDigitizerComponent ci, long index)
  1051.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1E, 0x7000, 0xA82A);
  1052. extern pascal VideoDigitizerError VDSetKeyColorRange(VideoDigitizerComponent ci, RGBColor *minRGB, RGBColor *maxRGB)
  1053.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1F, 0x7000, 0xA82A);
  1054. extern pascal VideoDigitizerError VDGetKeyColorRange(VideoDigitizerComponent ci, RGBColor *minRGB, RGBColor *maxRGB)
  1055.  FIVEWORDINLINE(0x2F3C, 0x8, 0x20, 0x7000, 0xA82A);
  1056. extern pascal VideoDigitizerError VDSetDigitizerUserInterrupt(VideoDigitizerComponent ci, long flags, VdigIntUPP userInterruptProc, long refcon)
  1057.  FIVEWORDINLINE(0x2F3C, 0xC, 0x21, 0x7000, 0xA82A);
  1058. extern pascal VideoDigitizerError VDSetInputColorSpaceMode(VideoDigitizerComponent ci, short colorSpaceMode)
  1059.  FIVEWORDINLINE(0x2F3C, 0x2, 0x22, 0x7000, 0xA82A);
  1060. extern pascal VideoDigitizerError VDGetInputColorSpaceMode(VideoDigitizerComponent ci, short *colorSpaceMode)
  1061.  FIVEWORDINLINE(0x2F3C, 0x4, 0x23, 0x7000, 0xA82A);
  1062. extern pascal VideoDigitizerError VDSetClipState(VideoDigitizerComponent ci, short clipEnable)
  1063.  FIVEWORDINLINE(0x2F3C, 0x2, 0x24, 0x7000, 0xA82A);
  1064. extern pascal VideoDigitizerError VDGetClipState(VideoDigitizerComponent ci, short *clipEnable)
  1065.  FIVEWORDINLINE(0x2F3C, 0x4, 0x25, 0x7000, 0xA82A);
  1066. extern pascal VideoDigitizerError VDSetClipRgn(VideoDigitizerComponent ci, RgnHandle clipRegion)
  1067.  FIVEWORDINLINE(0x2F3C, 0x4, 0x26, 0x7000, 0xA82A);
  1068. extern pascal VideoDigitizerError VDClearClipRgn(VideoDigitizerComponent ci, RgnHandle clipRegion)
  1069.  FIVEWORDINLINE(0x2F3C, 0x4, 0x27, 0x7000, 0xA82A);
  1070. extern pascal VideoDigitizerError VDGetCLUTInUse(VideoDigitizerComponent ci, CTabHandle *colorTableHandle)
  1071.  FIVEWORDINLINE(0x2F3C, 0x4, 0x28, 0x7000, 0xA82A);
  1072. extern pascal VideoDigitizerError VDSetPLLFilterType(VideoDigitizerComponent ci, short pllType)
  1073.  FIVEWORDINLINE(0x2F3C, 0x2, 0x29, 0x7000, 0xA82A);
  1074. extern pascal VideoDigitizerError VDGetPLLFilterType(VideoDigitizerComponent ci, short *pllType)
  1075.  FIVEWORDINLINE(0x2F3C, 0x4, 0x2A, 0x7000, 0xA82A);
  1076. extern pascal VideoDigitizerError VDGetMaskandValue(VideoDigitizerComponent ci, unsigned short blendLevel, long *mask, long *value)
  1077.  FIVEWORDINLINE(0x2F3C, 0xA, 0x2B, 0x7000, 0xA82A);
  1078. extern pascal VideoDigitizerError VDSetMasterBlendLevel(VideoDigitizerComponent ci, unsigned short *blendLevel)
  1079.  FIVEWORDINLINE(0x2F3C, 0x4, 0x2C, 0x7000, 0xA82A);
  1080. extern pascal VideoDigitizerError VDSetPlayThruDestination(VideoDigitizerComponent ci, PixMapHandle dest, Rect *destRect, MatrixRecord *m, RgnHandle mask)
  1081.  FIVEWORDINLINE(0x2F3C, 0x10, 0x2D, 0x7000, 0xA82A);
  1082. extern pascal VideoDigitizerError VDSetPlayThruOnOff(VideoDigitizerComponent ci, short state)
  1083.  FIVEWORDINLINE(0x2F3C, 0x2, 0x2E, 0x7000, 0xA82A);
  1084. extern pascal VideoDigitizerError VDSetFieldPreference(VideoDigitizerComponent ci, short fieldFlag)
  1085.  FIVEWORDINLINE(0x2F3C, 0x2, 0x2F, 0x7000, 0xA82A);
  1086. extern pascal VideoDigitizerError VDGetFieldPreference(VideoDigitizerComponent ci, short *fieldFlag)
  1087.  FIVEWORDINLINE(0x2F3C, 0x4, 0x30, 0x7000, 0xA82A);
  1088. extern pascal VideoDigitizerError VDPreflightDestination(VideoDigitizerComponent ci, Rect *digitizerRect, PixMap **dest, Rect *destRect, MatrixRecord *m)
  1089.  FIVEWORDINLINE(0x2F3C, 0x10, 0x32, 0x7000, 0xA82A);
  1090. extern pascal VideoDigitizerError VDPreflightGlobalRect(VideoDigitizerComponent ci, GrafPtr theWindow, Rect *globalRect)
  1091.  FIVEWORDINLINE(0x2F3C, 0x8, 0x33, 0x7000, 0xA82A);
  1092. extern pascal VideoDigitizerError VDSetPlayThruGlobalRect(VideoDigitizerComponent ci, GrafPtr theWindow, Rect *globalRect)
  1093.  FIVEWORDINLINE(0x2F3C, 0x8, 0x34, 0x7000, 0xA82A);
  1094. extern pascal VideoDigitizerError VDSetInputGammaRecord(VideoDigitizerComponent ci, VDGamRecPtr inputGammaPtr)
  1095.  FIVEWORDINLINE(0x2F3C, 0x4, 0x35, 0x7000, 0xA82A);
  1096. extern pascal VideoDigitizerError VDGetInputGammaRecord(VideoDigitizerComponent ci, VDGamRecPtr *inputGammaPtr)
  1097.  FIVEWORDINLINE(0x2F3C, 0x4, 0x36, 0x7000, 0xA82A);
  1098. extern pascal VideoDigitizerError VDSetBlackLevelValue(VideoDigitizerComponent ci, unsigned short *blackLevel)
  1099.  FIVEWORDINLINE(0x2F3C, 0x4, 0x37, 0x7000, 0xA82A);
  1100. extern pascal VideoDigitizerError VDGetBlackLevelValue(VideoDigitizerComponent ci, unsigned short *blackLevel)
  1101.  FIVEWORDINLINE(0x2F3C, 0x4, 0x38, 0x7000, 0xA82A);
  1102. extern pascal VideoDigitizerError VDSetWhiteLevelValue(VideoDigitizerComponent ci, unsigned short *whiteLevel)
  1103.  FIVEWORDINLINE(0x2F3C, 0x4, 0x39, 0x7000, 0xA82A);
  1104. extern pascal VideoDigitizerError VDGetWhiteLevelValue(VideoDigitizerComponent ci, unsigned short *whiteLevel)
  1105.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3A, 0x7000, 0xA82A);
  1106. extern pascal VideoDigitizerError VDGetVideoDefaults(VideoDigitizerComponent ci, unsigned short *blackLevel, unsigned short *whiteLevel, unsigned short *brightness, unsigned short *hue, unsigned short *saturation, unsigned short *contrast, unsigned short *sharpness)
  1107.  FIVEWORDINLINE(0x2F3C, 0x1C, 0x3B, 0x7000, 0xA82A);
  1108. extern pascal VideoDigitizerError VDGetNumberOfInputs(VideoDigitizerComponent ci, short *inputs)
  1109.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3C, 0x7000, 0xA82A);
  1110. extern pascal VideoDigitizerError VDGetInputFormat(VideoDigitizerComponent ci, short input, short *format)
  1111.  FIVEWORDINLINE(0x2F3C, 0x6, 0x3D, 0x7000, 0xA82A);
  1112. extern pascal VideoDigitizerError VDSetInput(VideoDigitizerComponent ci, short input)
  1113.  FIVEWORDINLINE(0x2F3C, 0x2, 0x3E, 0x7000, 0xA82A);
  1114. extern pascal VideoDigitizerError VDGetInput(VideoDigitizerComponent ci, short *input)
  1115.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3F, 0x7000, 0xA82A);
  1116. extern pascal VideoDigitizerError VDSetInputStandard(VideoDigitizerComponent ci, short inputStandard)
  1117.  FIVEWORDINLINE(0x2F3C, 0x2, 0x40, 0x7000, 0xA82A);
  1118. extern pascal VideoDigitizerError VDSetupBuffers(VideoDigitizerComponent ci, VdigBufferRecListHandle bufferList)
  1119.  FIVEWORDINLINE(0x2F3C, 0x4, 0x41, 0x7000, 0xA82A);
  1120. extern pascal VideoDigitizerError VDGrabOneFrameAsync(VideoDigitizerComponent ci, short buffer)
  1121.  FIVEWORDINLINE(0x2F3C, 0x2, 0x42, 0x7000, 0xA82A);
  1122. extern pascal VideoDigitizerError VDDone(VideoDigitizerComponent ci, short buffer)
  1123.  FIVEWORDINLINE(0x2F3C, 0x2, 0x43, 0x7000, 0xA82A);
  1124. extern pascal VideoDigitizerError VDSetCompression(VideoDigitizerComponent ci, OSType compressType, short depth, Rect *bounds, CodecQ spatialQuality, CodecQ temporalQuality, long keyFrameRate)
  1125.  FIVEWORDINLINE(0x2F3C, 0x16, 0x44, 0x7000, 0xA82A);
  1126. extern pascal VideoDigitizerError VDCompressOneFrameAsync(VideoDigitizerComponent ci)
  1127.  FIVEWORDINLINE(0x2F3C, 0, 0x45, 0x7000, 0xA82A);
  1128. extern pascal VideoDigitizerError VDCompressDone(VideoDigitizerComponent ci, Boolean *done, Ptr *theData, long *dataSize, UInt8 *similarity, TimeRecord *t)
  1129.  FIVEWORDINLINE(0x2F3C, 0x14, 0x46, 0x7000, 0xA82A);
  1130. extern pascal VideoDigitizerError VDReleaseCompressBuffer(VideoDigitizerComponent ci, Ptr bufferAddr)
  1131.  FIVEWORDINLINE(0x2F3C, 0x4, 0x47, 0x7000, 0xA82A);
  1132. extern pascal VideoDigitizerError VDGetImageDescription(VideoDigitizerComponent ci, ImageDescriptionHandle desc)
  1133.  FIVEWORDINLINE(0x2F3C, 0x4, 0x48, 0x7000, 0xA82A);
  1134. extern pascal VideoDigitizerError VDResetCompressSequence(VideoDigitizerComponent ci)
  1135.  FIVEWORDINLINE(0x2F3C, 0, 0x49, 0x7000, 0xA82A);
  1136. extern pascal VideoDigitizerError VDSetCompressionOnOff(VideoDigitizerComponent ci, Boolean state)
  1137.  FIVEWORDINLINE(0x2F3C, 0x2, 0x4A, 0x7000, 0xA82A);
  1138. extern pascal VideoDigitizerError VDGetCompressionTypes(VideoDigitizerComponent ci, VDCompressionListHandle h)
  1139.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4B, 0x7000, 0xA82A);
  1140. extern pascal VideoDigitizerError VDSetTimeBase(VideoDigitizerComponent ci, TimeBase t)
  1141.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4C, 0x7000, 0xA82A);
  1142. extern pascal VideoDigitizerError VDSetFrameRate(VideoDigitizerComponent ci, Fixed framesPerSecond)
  1143.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4D, 0x7000, 0xA82A);
  1144. extern pascal VideoDigitizerError VDGetDataRate(VideoDigitizerComponent ci, long *milliSecPerFrame, Fixed *framesPerSecond, long *bytesPerSecond)
  1145.  FIVEWORDINLINE(0x2F3C, 0xC, 0x4E, 0x7000, 0xA82A);
  1146. extern pascal VideoDigitizerError VDGetSoundInputDriver(VideoDigitizerComponent ci, Str255 soundDriverName)
  1147.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4F, 0x7000, 0xA82A);
  1148. extern pascal VideoDigitizerError VDGetDMADepths(VideoDigitizerComponent ci, long *depthArray, long *preferredDepth)
  1149.  FIVEWORDINLINE(0x2F3C, 0x8, 0x50, 0x7000, 0xA82A);
  1150. extern pascal VideoDigitizerError VDGetPreferredTimeScale(VideoDigitizerComponent ci, TimeScale *preferred)
  1151.  FIVEWORDINLINE(0x2F3C, 0x4, 0x51, 0x7000, 0xA82A);
  1152. extern pascal VideoDigitizerError VDReleaseAsyncBuffers(VideoDigitizerComponent ci)
  1153.  FIVEWORDINLINE(0x2F3C, 0, 0x52, 0x7000, 0xA82A);
  1154. /* 83 is reserved for compatibility reasons */
  1155. extern pascal VideoDigitizerError VDSetDataRate(VideoDigitizerComponent ci, long bytesPerSecond)
  1156.  FIVEWORDINLINE(0x2F3C, 0x4, 0x54, 0x7000, 0xA82A);
  1157. extern pascal VideoDigitizerError VDGetTimeCode(VideoDigitizerComponent ci, TimeRecord *atTime, void *timeCodeFormat, void *timeCodeTime)
  1158.  FIVEWORDINLINE(0x2F3C, 0xC, 0x55, 0x7000, 0xA82A);
  1159. extern pascal VideoDigitizerError VDUseSafeBuffers(VideoDigitizerComponent ci, Boolean useSafeBuffers)
  1160.  FIVEWORDINLINE(0x2F3C, 0x2, 0x56, 0x7000, 0xA82A);
  1161. extern pascal VideoDigitizerError VDGetSoundInputSource(VideoDigitizerComponent ci, long videoInput, long *soundInput)
  1162.  FIVEWORDINLINE(0x2F3C, 0x8, 0x57, 0x7000, 0xA82A);
  1163. extern pascal VideoDigitizerError VDGetCompressionTime(VideoDigitizerComponent ci, OSType compressionType, short depth, Rect *srcRect, CodecQ *spatialQuality, CodecQ *temporalQuality, unsigned long *compressTime)
  1164.  FIVEWORDINLINE(0x2F3C, 0x16, 0x58, 0x7000, 0xA82A);
  1165.  
  1166. enum {
  1167.     kSelectVDGetMaxSrcRect        = 0x1,
  1168.     kSelectVDGetActiveSrcRect    = 0x2,
  1169.     kSelectVDSetDigitizerRect    = 0x3,
  1170.     kSelectVDGetDigitizerRect    = 0x4,
  1171.     kSelectVDGetVBlankRect        = 0x5,
  1172.     kSelectVDGetMaskPixMap        = 0x6,
  1173.     kSelectVDGetPlayThruDestination = 0x8,
  1174.     kSelectVDUseThisCLUT        = 0x9,
  1175.     kSelectVDSetInputGammaValue    = 0xA,
  1176.     kSelectVDGetInputGammaValue    = 0xB,
  1177.     kSelectVDSetBrightness        = 0xC,
  1178.     kSelectVDGetBrightness        = 0xD,
  1179.     kSelectVDSetContrast        = 0xE,
  1180.     kSelectVDSetHue                = 0xF,
  1181.     kSelectVDSetSharpness        = 0x10,
  1182.     kSelectVDSetSaturation        = 0x11,
  1183.     kSelectVDGetContrast        = 0x12,
  1184.     kSelectVDGetHue                = 0x13,
  1185.     kSelectVDGetSharpness        = 0x14,
  1186.     kSelectVDGetSaturation        = 0x15,
  1187.     kSelectVDGrabOneFrame        = 0x16,
  1188.     kSelectVDGetMaxAuxBuffer    = 0x17,
  1189.     kSelectVDGetDigitizerInfo    = 0x19,
  1190.     kSelectVDGetCurrentFlags    = 0x1A,
  1191.     kSelectVDSetKeyColor        = 0x1B,
  1192.     kSelectVDGetKeyColor        = 0x1C,
  1193.     kSelectVDAddKeyColor        = 0x1D,
  1194.     kSelectVDGetNextKeyColor    = 0x1E,
  1195.     kSelectVDSetKeyColorRange    = 0x1F,
  1196.     kSelectVDGetKeyColorRange    = 0x20,
  1197.     kSelectVDSetDigitizerUserInterrupt = 0x21,
  1198.     kSelectVDSetInputColorSpaceMode = 0x22,
  1199.     kSelectVDGetInputColorSpaceMode = 0x23,
  1200.     kSelectVDSetClipState        = 0x24,
  1201.     kSelectVDGetClipState        = 0x25,
  1202.     kSelectVDSetClipRgn            = 0x26,
  1203.     kSelectVDClearClipRgn        = 0x27,
  1204.     kSelectVDGetCLUTInUse        = 0x28,
  1205.     kSelectVDSetPLLFilterType    = 0x29,
  1206.     kSelectVDGetPLLFilterType    = 0x2A,
  1207.     kSelectVDGetMaskandValue    = 0x2B,
  1208.     kSelectVDSetMasterBlendLevel = 0x2C,
  1209.     kSelectVDSetPlayThruDestination = 0x2D,
  1210.     kSelectVDSetPlayThruOnOff    = 0x2E,
  1211.     kSelectVDSetFieldPreference    = 0x2F,
  1212.     kSelectVDGetFieldPreference    = 0x30,
  1213.     kSelectVDPreflightDestination = 0x32,
  1214.     kSelectVDPreflightGlobalRect = 0x33,
  1215.     kSelectVDSetPlayThruGlobalRect = 0x34,
  1216.     kSelectVDSetInputGammaRecord = 0x35,
  1217.     kSelectVDGetInputGammaRecord = 0x36,
  1218.     kSelectVDSetBlackLevelValue    = 0x37,
  1219.     kSelectVDGetBlackLevelValue    = 0x38,
  1220.     kSelectVDSetWhiteLevelValue    = 0x39,
  1221.     kSelectVDGetWhiteLevelValue    = 0x3A,
  1222.     kSelectVDGetVideoDefaults    = 0x3B,
  1223.     kSelectVDGetNumberOfInputs    = 0x3C,
  1224.     kSelectVDGetInputFormat        = 0x3D,
  1225.     kSelectVDSetInput            = 0x3E,
  1226.     kSelectVDGetInput            = 0x3F,
  1227.     kSelectVDSetInputStandard    = 0x40,
  1228.     kSelectVDSetupBuffers        = 0x41,
  1229.     kSelectVDGrabOneFrameAsync    = 0x42,
  1230.     kSelectVDDone                = 0x43,
  1231.     kSelectVDSetCompression        = 0x44,
  1232.     kSelectVDCompressOneFrameAsync = 0x45,
  1233.     kSelectVDCompressDone        = 0x46,
  1234.     kSelectVDReleaseCompressBuffer = 0x47,
  1235.     kSelectVDGetImageDescription = 0x48,
  1236.     kSelectVDResetCompressSequence = 0x49,
  1237.     kSelectVDSetCompressionOnOff = 0x4A,
  1238.     kSelectVDGetCompressionTypes = 0x4B,
  1239.     kSelectVDSetTimeBase        = 0x4C,
  1240.     kSelectVDSetFrameRate        = 0x4D,
  1241.     kSelectVDGetDataRate        = 0x4E,
  1242.     kSelectVDGetSoundInputDriver = 0x4F,
  1243.     kSelectVDGetDMADepths        = 0x50,
  1244.     kSelectVDGetPreferredTimeScale = 0x51,
  1245.     kSelectVDReleaseAsyncBuffers = 0x52,
  1246.     kSelectVDSetDataRate        = 0x54,
  1247.     kSelectVDGetTimeCode        = 0x55,
  1248.     kSelectVDUseSafeBuffers        = 0x56,
  1249.     kSelectVDGetSoundInputSource = 0x57,
  1250.     kSelectVDGetCompressionTime    = 0x58
  1251. };
  1252.  
  1253. enum {
  1254.     StandardCompressionType        = 'scdi',
  1255.     StandardCompressionSubType    = 'imag'
  1256. };
  1257.  
  1258. typedef pascal Boolean (*SCModalFilterProcPtr)(DialogPtr theDialog, EventRecord *theEvent, short *itemHit, long refcon);
  1259. typedef pascal short (*SCModalHookProcPtr)(DialogPtr theDialog, short itemHit, void *params, long refcon);
  1260.  
  1261. #if GENERATINGCFM
  1262. typedef UniversalProcPtr SCModalFilterUPP;
  1263. typedef UniversalProcPtr SCModalHookUPP;
  1264. #else
  1265. typedef SCModalFilterProcPtr SCModalFilterUPP;
  1266. typedef SCModalHookProcPtr SCModalHookUPP;
  1267. #endif
  1268.  
  1269. enum {
  1270.     scListEveryCodec            = 1L << 1,
  1271.     scAllowZeroFrameRate        = 1L << 2,
  1272.     scAllowZeroKeyFrameRate        = 1L << 3,
  1273.     scShowBestDepth                = 1L << 4,
  1274.     scUseMovableModal            = 1L << 5
  1275. };
  1276.  
  1277. /*    Possible test flags for setting test image.*/
  1278. enum {
  1279.     scPreferCropping            = 1 << 0,
  1280.     scPreferScaling                = 1 << 1,
  1281.     scPreferScalingAndCropping    = scPreferScaling | scPreferCropping
  1282. };
  1283.  
  1284. /*    Dimensions of the image preview box.*/
  1285. enum {
  1286.     scTestImageWidth            = 80,
  1287.     scTestImageHeight            = 80
  1288. };
  1289.  
  1290. /*    Possible items returned by hookProc.*/
  1291. enum {
  1292.     scOKItem                    = 1,
  1293.     scCancelItem                = 2,
  1294.     scCustomItem                = 3
  1295. };
  1296.  
  1297. /*    Result returned when user cancelled.*/
  1298. enum {
  1299.     scUserCancelled                = 1
  1300. };
  1301.  
  1302. enum {
  1303.     scPositionRect                = 2,
  1304.     scPositionDialog            = 3,
  1305.     scSetTestImagePictHandle    = 4,
  1306.     scSetTestImagePictFile        = 5,
  1307.     scSetTestImagePixMap        = 6,
  1308.     scGetBestDeviceRect            = 7,
  1309.     scRequestImageSettings        = 10,
  1310.     scCompressImage                = 11,
  1311.     scCompressPicture            = 12,
  1312.     scCompressPictureFile        = 13,
  1313.     scRequestSequenceSettings    = 14,
  1314.     scCompressSequenceBegin        = 15,
  1315.     scCompressSequenceFrame        = 16,
  1316.     scCompressSequenceEnd        = 17,
  1317.     scDefaultPictHandleSettings    = 18,
  1318.     scDefaultPictFileSettings    = 19,
  1319.     scDefaultPixMapSettings        = 20,
  1320.     scGetInfo                    = 21,
  1321.     scSetInfo                    = 22,
  1322.     scNewGWorld                    = 23
  1323. };
  1324.  
  1325. struct SCSpatialSettings {
  1326.     CodecType                        codecType;
  1327.     CodecComponent                    codec;
  1328.     short                            depth;
  1329.     CodecQ                            spatialQuality;
  1330. };
  1331. typedef struct SCSpatialSettings SCSpatialSettings;
  1332.  
  1333. struct SCTemporalSettings {
  1334.     CodecQ                            temporalQuality;
  1335.     Fixed                            frameRate;
  1336.     long                            keyFrameRate;
  1337. };
  1338. typedef struct SCTemporalSettings SCTemporalSettings;
  1339.  
  1340. struct SCDataRateSettings {
  1341.     long                            dataRate;
  1342.     long                            frameDuration;
  1343.     CodecQ                            minSpatialQuality;
  1344.     CodecQ                            minTemporalQuality;
  1345. };
  1346. typedef struct SCDataRateSettings SCDataRateSettings;
  1347.  
  1348. struct SCExtendedProcs {
  1349.     SCModalFilterUPP                filterProc;
  1350.     SCModalHookUPP                    hookProc;
  1351.     long                            refcon;
  1352.     Str31                            customName;
  1353. };
  1354. typedef struct SCExtendedProcs SCExtendedProcs;
  1355.  
  1356. /*    Get/SetInfo selectors*/
  1357.  
  1358. enum {
  1359.     scSpatialSettingsType        = 'sptl',                        /* pointer to SCSpatialSettings struct*/
  1360.     scTemporalSettingsType        = 'tprl',                        /* pointer to SCTemporalSettings struct*/
  1361.     scDataRateSettingsType        = 'drat',                        /* pointer to SCDataRateSettings struct*/
  1362.     scColorTableType            = 'clut',                        /* pointer to CTabHandle*/
  1363.     scProgressProcType            = 'prog',                        /* pointer to ProgressRecord struct*/
  1364.     scExtendedProcsType            = 'xprc',                        /* pointer to SCExtendedProcs struct*/
  1365.     scPreferenceFlagsType        = 'pref',                        /* pointer to long*/
  1366.     scSettingsStateType            = 'ssta',                        /* pointer to Handle*/
  1367.     scSequenceIDType            = 'sequ',                        /* pointer to ImageSequence*/
  1368.     scWindowPositionType        = 'wndw',                        /* pointer to Point*/
  1369.     scCodecFlagsType            = 'cflg',                        /* pointer to CodecFlags*/
  1370.     scCodecSettingsType            = 'cdec',                        /* pointer to Handle*/
  1371.     scForceKeyValueType            = 'ksim'
  1372. };
  1373.  
  1374. /*    scTypeNotFoundErr returned by Get/SetInfo when type cannot be found.*/
  1375. /** These are Progress procedures **/
  1376. extern pascal ComponentResult SCPositionRect(ComponentInstance ci, Rect *rp, Point *where)
  1377.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2, 0x7000, 0xA82A);
  1378. extern pascal ComponentResult SCPositionDialog(ComponentInstance ci, short id, Point *where)
  1379.  FIVEWORDINLINE(0x2F3C, 0x6, 0x3, 0x7000, 0xA82A);
  1380. extern pascal ComponentResult SCSetTestImagePictHandle(ComponentInstance ci, PicHandle testPict, Rect *testRect, short testFlags)
  1381.  FIVEWORDINLINE(0x2F3C, 0xA, 0x4, 0x7000, 0xA82A);
  1382. extern pascal ComponentResult SCSetTestImagePictFile(ComponentInstance ci, short testFileRef, Rect *testRect, short testFlags)
  1383.  FIVEWORDINLINE(0x2F3C, 0x8, 0x5, 0x7000, 0xA82A);
  1384. extern pascal ComponentResult SCSetTestImagePixMap(ComponentInstance ci, PixMapHandle testPixMap, Rect *testRect, short testFlags)
  1385.  FIVEWORDINLINE(0x2F3C, 0xA, 0x6, 0x7000, 0xA82A);
  1386. extern pascal ComponentResult SCGetBestDeviceRect(ComponentInstance ci, Rect *r)
  1387.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  1388. extern pascal ComponentResult SCRequestImageSettings(ComponentInstance ci)
  1389.  FIVEWORDINLINE(0x2F3C, 0, 0xA, 0x7000, 0xA82A);
  1390. extern pascal ComponentResult SCCompressImage(ComponentInstance ci, PixMapHandle src, const Rect *srcRect, ImageDescriptionHandle *desc, Handle *data)
  1391.  FIVEWORDINLINE(0x2F3C, 0x10, 0xB, 0x7000, 0xA82A);
  1392. extern pascal ComponentResult SCCompressPicture(ComponentInstance ci, PicHandle srcPicture, PicHandle dstPicture)
  1393.  FIVEWORDINLINE(0x2F3C, 0x8, 0xC, 0x7000, 0xA82A);
  1394. extern pascal ComponentResult SCCompressPictureFile(ComponentInstance ci, short srcRefNum, short dstRefNum)
  1395.  FIVEWORDINLINE(0x2F3C, 0x4, 0xD, 0x7000, 0xA82A);
  1396. extern pascal ComponentResult SCRequestSequenceSettings(ComponentInstance ci)
  1397.  FIVEWORDINLINE(0x2F3C, 0, 0xE, 0x7000, 0xA82A);
  1398. extern pascal ComponentResult SCCompressSequenceBegin(ComponentInstance ci, PixMapHandle src, const Rect *srcRect, ImageDescriptionHandle *desc)
  1399.  FIVEWORDINLINE(0x2F3C, 0xC, 0xF, 0x7000, 0xA82A);
  1400. extern pascal ComponentResult SCCompressSequenceFrame(ComponentInstance ci, PixMapHandle src, const Rect *srcRect, Handle *data, long *dataSize, short *notSyncFlag)
  1401.  FIVEWORDINLINE(0x2F3C, 0x14, 0x10, 0x7000, 0xA82A);
  1402. extern pascal ComponentResult SCCompressSequenceEnd(ComponentInstance ci)
  1403.  FIVEWORDINLINE(0x2F3C, 0, 0x11, 0x7000, 0xA82A);
  1404. extern pascal ComponentResult SCDefaultPictHandleSettings(ComponentInstance ci, PicHandle srcPicture, short motion)
  1405.  FIVEWORDINLINE(0x2F3C, 0x6, 0x12, 0x7000, 0xA82A);
  1406. extern pascal ComponentResult SCDefaultPictFileSettings(ComponentInstance ci, short srcRef, short motion)
  1407.  FIVEWORDINLINE(0x2F3C, 0x4, 0x13, 0x7000, 0xA82A);
  1408. extern pascal ComponentResult SCDefaultPixMapSettings(ComponentInstance ci, PixMapHandle src, short motion)
  1409.  FIVEWORDINLINE(0x2F3C, 0x6, 0x14, 0x7000, 0xA82A);
  1410. extern pascal ComponentResult SCGetInfo(ComponentInstance ci, OSType infoType, void *info)
  1411.  FIVEWORDINLINE(0x2F3C, 0x8, 0x15, 0x7000, 0xA82A);
  1412. extern pascal ComponentResult SCSetInfo(ComponentInstance ci, OSType infoType, void *info)
  1413.  FIVEWORDINLINE(0x2F3C, 0x8, 0x16, 0x7000, 0xA82A);
  1414. extern pascal ComponentResult SCNewGWorld(ComponentInstance ci, GWorldPtr *gwp, Rect *rp, GWorldFlags flags)
  1415.  FIVEWORDINLINE(0x2F3C, 0xC, 0x17, 0x7000, 0xA82A);
  1416. extern pascal ComponentResult SCSetCompressFlags(ComponentInstance ci, long flags)
  1417.  FIVEWORDINLINE(0x2F3C, 0x4, 0x18, 0x7000, 0xA82A);
  1418. extern pascal ComponentResult SCGetCompressFlags(ComponentInstance ci, long *flags)
  1419.  FIVEWORDINLINE(0x2F3C, 0x4, 0x19, 0x7000, 0xA82A);
  1420. struct SCParams {
  1421.     long                            flags;
  1422.     CodecType                        theCodecType;
  1423.     CodecComponent                    theCodec;
  1424.     CodecQ                            spatialQuality;
  1425.     CodecQ                            temporalQuality;
  1426.     short                            depth;
  1427.     Fixed                            frameRate;
  1428.     long                            keyFrameRate;
  1429.     long                            reserved1;
  1430.     long                            reserved2;
  1431. };
  1432. typedef struct SCParams SCParams;
  1433.  
  1434.  
  1435. enum {
  1436.     scGetCompression            = 1,
  1437.     scShowMotionSettings        = 1L << 0,
  1438.     scSettingsChangedItem        = -1
  1439. };
  1440.  
  1441. enum {
  1442.     scCompressFlagIgnoreIdenticalFrames = 1
  1443. };
  1444.  
  1445. extern pascal ComponentResult SCGetCompressionExtended(ComponentInstance ci, SCParams *params, Point where, SCModalFilterUPP filterProc, SCModalHookUPP hookProc, long refcon, StringPtr customName)
  1446.  FIVEWORDINLINE(0x2F3C, 0x18, 0x1, 0x7000, 0xA82A);
  1447. #define SCGetCompression(ci, params, where) SCGetCompressionExtended(ci,params,where,0,0,0,0)
  1448.  
  1449. enum {
  1450.     kSCPositionRectSelect        = 0x2,
  1451.     kSCPositionDialogSelect        = 0x3,
  1452.     kSCSetTestImagePictHandleSelect = 0x4,
  1453.     kSCSetTestImagePictFileSelect = 0x5,
  1454.     kSCSetTestImagePixMapSelect    = 0x6,
  1455.     kSCGetBestDeviceRectSelect    = 0x7,
  1456.     kSCRequestImageSettingsSelect = 0xA,
  1457.     kSCCompressImageSelect        = 0xB,
  1458.     kSCCompressPictureSelect    = 0xC,
  1459.     kSCCompressPictureFileSelect = 0xD,
  1460.     kSCRequestSequenceSettingsSelect = 0xE,
  1461.     kSCCompressSequenceBeginSelect = 0xF,
  1462.     kSCCompressSequenceFrameSelect = 0x10,
  1463.     kSCCompressSequenceEndSelect = 0x11,
  1464.     kSCDefaultPictHandleSettingsSelect = 0x12,
  1465.     kSCDefaultPictFileSettingsSelect = 0x13,
  1466.     kSCDefaultPixMapSettingsSelect = 0x14,
  1467.     kSCGetInfoSelect            = 0x15,
  1468.     kSCSetInfoSelect            = 0x16,
  1469.     kSCNewGWorldSelect            = 0x17,
  1470.     kSCSetCompressFlagsSelect    = 0x18,
  1471.     kSCGetCompressFlagsSelect    = 0x19,
  1472.     kSCGetCompressionExtendedSelect = 0x1
  1473. };
  1474.  
  1475. typedef ComponentInstance MovieImportComponent, MovieExportComponent;
  1476.  
  1477.  
  1478. enum {
  1479.     MovieImportType                = 'eat ',
  1480.     MovieExportType                = 'spit'
  1481. };
  1482.  
  1483. enum {
  1484.     canMovieImportHandles        = 1 << 0,
  1485.     canMovieImportFiles            = 1 << 1,
  1486.     hasMovieImportUserInterface    = 1 << 2,
  1487.     canMovieExportHandles        = 1 << 3,
  1488.     canMovieExportFiles            = 1 << 4,
  1489.     hasMovieExportUserInterface    = 1 << 5,
  1490.     dontAutoFileMovieImport        = 1 << 6,
  1491.     canMovieExportAuxDataHandle    = 1 << 7,
  1492.     canMovieImportValidateHandles = 1 << 8,
  1493.     canMovieImportValidateFile    = 1 << 9,
  1494.     dontRegisterWithEasyOpen    = 1 << 10,
  1495.     canMovieImportInPlace        = 1 << 11,
  1496.     movieImportSubTypeIsFileExtension = 1 << 12
  1497. };
  1498.  
  1499. enum {
  1500.     kMovieImportExportOpenSelect = kComponentOpenSelect,
  1501.     kMovieImportExportCloseSelect = kComponentCloseSelect,
  1502.     kMovieImportExportCanDoSelect = kComponentCanDoSelect,
  1503.     kMovieImportExportVersionSelect = kComponentVersionSelect,
  1504.     kMovieImportExportTargetSelect = kComponentTargetSelect,
  1505.     kMovieImportHandleSelect    = 1,
  1506.     kMovieImportFileSelect        = 2,
  1507.     kMovieImportSetSampleDurationSelect = 3,
  1508.     kMovieImportSetSampleDescriptionSelect = 4,
  1509.     kMovieImportSetMediaFileSelect = 5,
  1510.     kMovieImportSetDimensionsSelect = 6,
  1511.     kMovieImportSetChunkSizeSelect = 7,
  1512.     kMovieImportSetProgressProcSelect = 8,
  1513.     kMovieImportSetAuxiliaryDataSelect = 9,
  1514.     kMovieImportSetFromScrapSelect = 10,
  1515.     kMovieImportDoUserDialogSelect = 11,
  1516.     kMovieImportSetDurationSelect = 12,
  1517.     kMovieImportGetAuxiliaryDataTypeSelect = 13,
  1518.     kMovieImportValidateSelect    = 14,
  1519.     kMovieImportGetFileTypeSelect = 15,
  1520.     kMovieExportToHandleSelect    = 128,
  1521.     kMovieExportToFileSelect    = 129,
  1522.     kMovieExportDoUserDialogSelectOBSOLETE = 130,
  1523.     kMovieExportGetAuxiliaryDataSelect = 131,
  1524.     kMovieExportSetProgressProcSelect = 132,
  1525.     kMovieExportSetSampleDescriptionSelect = 133,
  1526.     kMovieExportDoUserDialogSelect = 134,
  1527.     kMovieExportGetCreatorTypeSelect = 135
  1528. };
  1529.  
  1530. enum {
  1531.     movieImportCreateTrack        = 1,
  1532.     movieImportInParallel        = 2,
  1533.     movieImportMustUseTrack        = 4
  1534. };
  1535.  
  1536. enum {
  1537.     movieImportResultUsedMultipleTracks = 8
  1538. };
  1539.  
  1540. enum {
  1541.     kMovieExportTextOnly        = 0,
  1542.     kMovieExportAbsoluteTime,
  1543.     kMovieExportRelativeTime
  1544. };
  1545.  
  1546. extern pascal ComponentResult MovieImportHandle(MovieImportComponent ci, Handle dataH, Movie theMovie, Track targetTrack, Track *usedTrack, TimeValue atTime, TimeValue *addedDuration, long inFlags, long *outFlags)
  1547.  FIVEWORDINLINE(0x2F3C, 0x20, 0x1, 0x7000, 0xA82A);
  1548. extern pascal ComponentResult MovieImportFile(MovieImportComponent ci, const FSSpec *theFile, Movie theMovie, Track targetTrack, Track *usedTrack, TimeValue atTime, TimeValue *addedDuration, long inFlags, long *outFlags)
  1549.  FIVEWORDINLINE(0x2F3C, 0x20, 0x2, 0x7000, 0xA82A);
  1550. extern pascal ComponentResult MovieImportSetSampleDuration(MovieImportComponent ci, TimeValue duration, TimeScale scale)
  1551.  FIVEWORDINLINE(0x2F3C, 0x8, 0x3, 0x7000, 0xA82A);
  1552. extern pascal ComponentResult MovieImportSetSampleDescription(MovieImportComponent ci, SampleDescriptionHandle desc, OSType mediaType)
  1553.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  1554. extern pascal ComponentResult MovieImportSetMediaFile(MovieImportComponent ci, AliasHandle alias)
  1555.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  1556. extern pascal ComponentResult MovieImportSetDimensions(MovieImportComponent ci, Fixed width, Fixed height)
  1557.  FIVEWORDINLINE(0x2F3C, 0x8, 0x6, 0x7000, 0xA82A);
  1558. extern pascal ComponentResult MovieImportSetChunkSize(MovieImportComponent ci, long chunkSize)
  1559.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  1560. extern pascal ComponentResult MovieImportSetProgressProc(MovieImportComponent ci, MovieProgressUPP proc, long refcon)
  1561.  FIVEWORDINLINE(0x2F3C, 0x8, 0x8, 0x7000, 0xA82A);
  1562. extern pascal ComponentResult MovieImportSetAuxiliaryData(MovieImportComponent ci, Handle data, OSType handleType)
  1563.  FIVEWORDINLINE(0x2F3C, 0x8, 0x9, 0x7000, 0xA82A);
  1564. extern pascal ComponentResult MovieImportSetFromScrap(MovieImportComponent ci, Boolean fromScrap)
  1565.  FIVEWORDINLINE(0x2F3C, 0x2, 0xA, 0x7000, 0xA82A);
  1566. extern pascal ComponentResult MovieImportDoUserDialog(MovieImportComponent ci, const FSSpec *theFile, Handle theData, Boolean *canceled)
  1567.  FIVEWORDINLINE(0x2F3C, 0xC, 0xB, 0x7000, 0xA82A);
  1568. extern pascal ComponentResult MovieImportSetDuration(MovieImportComponent ci, TimeValue duration)
  1569.  FIVEWORDINLINE(0x2F3C, 0x4, 0xC, 0x7000, 0xA82A);
  1570. extern pascal ComponentResult MovieImportGetAuxiliaryDataType(MovieImportComponent ci, OSType *auxType)
  1571.  FIVEWORDINLINE(0x2F3C, 0x4, 0xD, 0x7000, 0xA82A);
  1572. extern pascal ComponentResult MovieImportValidate(MovieImportComponent ci, const FSSpec *theFile, Handle theData, Boolean *valid)
  1573.  FIVEWORDINLINE(0x2F3C, 0xC, 0xE, 0x7000, 0xA82A);
  1574. extern pascal ComponentResult MovieImportGetFileType(MovieImportComponent ci, OSType *fileType)
  1575.  FIVEWORDINLINE(0x2F3C, 0x4, 0xF, 0x7000, 0xA82A);
  1576. extern pascal ComponentResult MovieExportToHandle(MovieExportComponent ci, Handle dataH, Movie theMovie, Track onlyThisTrack, TimeValue startTime, TimeValue duration)
  1577.  FIVEWORDINLINE(0x2F3C, 0x14, 0x80, 0x7000, 0xA82A);
  1578. extern pascal ComponentResult MovieExportToFile(MovieExportComponent ci, const FSSpec *theFile, Movie theMovie, Track onlyThisTrack, TimeValue startTime, TimeValue duration)
  1579.  FIVEWORDINLINE(0x2F3C, 0x14, 0x81, 0x7000, 0xA82A);
  1580. extern pascal ComponentResult MovieExportGetAuxiliaryData(MovieExportComponent ci, Handle dataH, OSType *handleType)
  1581.  FIVEWORDINLINE(0x2F3C, 0x8, 0x83, 0x7000, 0xA82A);
  1582. extern pascal ComponentResult MovieExportSetProgressProc(MovieExportComponent ci, MovieProgressUPP proc, long refcon)
  1583.  FIVEWORDINLINE(0x2F3C, 0x8, 0x84, 0x7000, 0xA82A);
  1584. extern pascal ComponentResult MovieExportSetSampleDescription(MovieExportComponent ci, SampleDescriptionHandle desc, OSType mediaType)
  1585.  FIVEWORDINLINE(0x2F3C, 0x8, 0x85, 0x7000, 0xA82A);
  1586. extern pascal ComponentResult MovieExportDoUserDialog(MovieExportComponent ci, Movie theMovie, Track onlyThisTrack, TimeValue startTime, TimeValue duration, Boolean *canceled)
  1587.  FIVEWORDINLINE(0x2F3C, 0x14, 0x86, 0x7000, 0xA82A);
  1588. extern pascal ComponentResult MovieExportGetCreatorType(MovieExportComponent ci, OSType *creator)
  1589.  FIVEWORDINLINE(0x2F3C, 0x4, 0x87, 0x7000, 0xA82A);
  1590. /* Text Export Display Info data structure*/
  1591. struct TextDisplayData {
  1592.     long                            displayFlags;
  1593.     long                            textJustification;
  1594.     RGBColor                        bgColor;
  1595.     Rect                            textBox;
  1596.     short                            beginHilite;
  1597.     short                            endHilite;
  1598.     RGBColor                        hiliteColor;
  1599.     Boolean                            doHiliteColor;
  1600.     SInt8                            filler;
  1601.     TimeValue                        scrollDelayDur;
  1602.     Point                            dropShadowOffset;
  1603.     short                            dropShadowTransparency;
  1604. };
  1605. typedef struct TextDisplayData TextDisplayData;
  1606.  
  1607. typedef ComponentInstance TextExportComponent;
  1608.  
  1609. extern pascal ComponentResult TextExportGetDisplayData(TextExportComponent ci, TextDisplayData *textDisplay)
  1610.  FIVEWORDINLINE(0x2F3C, 0x4, 0x100, 0x7000, 0xA82A);
  1611. extern pascal ComponentResult TextExportGetTimeFraction(TextExportComponent ci, long *movieTimeFraction)
  1612.  FIVEWORDINLINE(0x2F3C, 0x4, 0x101, 0x7000, 0xA82A);
  1613. extern pascal ComponentResult TextExportSetTimeFraction(TextExportComponent ci, long movieTimeFraction)
  1614.  FIVEWORDINLINE(0x2F3C, 0x4, 0x102, 0x7000, 0xA82A);
  1615. extern pascal ComponentResult TextExportGetSettings(TextExportComponent ci, long *setting)
  1616.  FIVEWORDINLINE(0x2F3C, 0x4, 0x103, 0x7000, 0xA82A);
  1617. extern pascal ComponentResult TextExportSetSettings(TextExportComponent ci, long setting)
  1618.  FIVEWORDINLINE(0x2F3C, 0x4, 0x104, 0x7000, 0xA82A);
  1619. /***************
  1620.  
  1621.     File Preview Components
  1622.  
  1623. ***************/
  1624. typedef ComponentInstance pnotComponent;
  1625.  
  1626.  
  1627. enum {
  1628.     pnotComponentWantsEvents    = 1,
  1629.     pnotComponentNeedsNoCache    = 2
  1630. };
  1631.  
  1632. enum {
  1633.     kPreviewOpenSelector        = 0,
  1634.     kPreviewCloseSelector        = -1,
  1635.     kPreviewCanDoSelector        = -2,
  1636.     kPreviewVersionSelector        = -3,
  1637.     kPreviewShowDataSelector    = 1,
  1638.     kPreviewMakePreviewSelector    = 2,
  1639.     kPreviewMakePreviewReferenceSelector = 3,
  1640.     kPreviewEventSelector        = 4
  1641. };
  1642.  
  1643. enum {
  1644.     ShowFilePreviewComponentType = 'pnot',
  1645.     CreateFilePreviewComponentType = 'pmak'
  1646. };
  1647.  
  1648. extern pascal ComponentResult PreviewShowData(pnotComponent p, OSType dataType, Handle data, const Rect *inHere)
  1649.  FIVEWORDINLINE(0x2F3C, 0xC, 0x1, 0x7000, 0xA82A);
  1650. extern pascal ComponentResult PreviewMakePreview(pnotComponent p, OSType *previewType, Handle *previewResult, const FSSpec *sourceFile, ICMProgressProcRecordPtr progress)
  1651.  FIVEWORDINLINE(0x2F3C, 0x10, 0x2, 0x7000, 0xA82A);
  1652. extern pascal ComponentResult PreviewMakePreviewReference(pnotComponent p, OSType *previewType, short *resID, const FSSpec *sourceFile)
  1653.  FIVEWORDINLINE(0x2F3C, 0xC, 0x3, 0x7000, 0xA82A);
  1654. extern pascal ComponentResult PreviewEvent(pnotComponent p, EventRecord *e, Boolean *handledEvent)
  1655.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  1656. typedef pascal void (*DataHCompletionProcPtr)(Ptr request, long refcon, OSErr err);
  1657.  
  1658. #if GENERATINGCFM
  1659. typedef UniversalProcPtr DataHCompletionUPP;
  1660. #else
  1661. typedef DataHCompletionProcPtr DataHCompletionUPP;
  1662. #endif
  1663.  
  1664.  
  1665. enum {
  1666.     kDataHCanRead                = 1L << 0,
  1667.     kDataHSpecialRead            = 1L << 1,
  1668.     kDataHSpecialReadFile        = 1L << 2,
  1669.     kDataHCanWrite                = 1L << 3,
  1670.     kDataHSpecialWrite            = 1 << 4,
  1671.     kDataHSpecialWriteFile        = 1 << 5,
  1672.     kDataHCanStreamingWrite        = 1 << 6,
  1673.     kDataHMustCheckDataRef        = 1 << 7
  1674. };
  1675.  
  1676. struct DataHVolumeListRecord {
  1677.     short                            vRefNum;
  1678.     long                            flags;
  1679. };
  1680. typedef struct DataHVolumeListRecord DataHVolumeListRecord;
  1681.  
  1682. typedef DataHVolumeListRecord *DataHVolumeListPtr;
  1683.  
  1684. typedef DataHVolumeListPtr *DataHVolumeList;
  1685.  
  1686.  
  1687. enum {
  1688.     kDataHExtendedSchedule        = 'xtnd'
  1689. };
  1690.  
  1691. struct DataHScheduleRecord {
  1692.     TimeRecord                        timeNeededBy;
  1693.     long                            extendedID;                    /* always is kDataHExtendedSchedule*/
  1694.     long                            extendedVers;                /* always set to 0*/
  1695.     Fixed                            priority;                    /* 100.0 or more means must have. lower numbers…*/
  1696. };
  1697. typedef struct DataHScheduleRecord DataHScheduleRecord;
  1698.  
  1699. typedef DataHScheduleRecord *DataHSchedulePtr;
  1700.  
  1701. extern pascal ComponentResult DataHGetData(DataHandler dh, Handle h, long hOffset, long offset, long size)
  1702.  FIVEWORDINLINE(0x2F3C, 0x10, 0x2, 0x7000, 0xA82A);
  1703. extern pascal ComponentResult DataHPutData(DataHandler dh, Handle h, long hOffset, long *offset, long size)
  1704.  FIVEWORDINLINE(0x2F3C, 0x10, 0x3, 0x7000, 0xA82A);
  1705. extern pascal ComponentResult DataHFlushData(DataHandler dh)
  1706.  FIVEWORDINLINE(0x2F3C, 0, 0x4, 0x7000, 0xA82A);
  1707. extern pascal ComponentResult DataHOpenForWrite(DataHandler dh)
  1708.  FIVEWORDINLINE(0x2F3C, 0, 0x5, 0x7000, 0xA82A);
  1709. extern pascal ComponentResult DataHCloseForWrite(DataHandler dh)
  1710.  FIVEWORDINLINE(0x2F3C, 0, 0x6, 0x7000, 0xA82A);
  1711. extern pascal ComponentResult DataHOpenForRead(DataHandler dh)
  1712.  FIVEWORDINLINE(0x2F3C, 0, 0x8, 0x7000, 0xA82A);
  1713. extern pascal ComponentResult DataHCloseForRead(DataHandler dh)
  1714.  FIVEWORDINLINE(0x2F3C, 0, 0x9, 0x7000, 0xA82A);
  1715. extern pascal ComponentResult DataHSetDataRef(DataHandler dh, Handle dataRef)
  1716.  FIVEWORDINLINE(0x2F3C, 0x4, 0xA, 0x7000, 0xA82A);
  1717. extern pascal ComponentResult DataHGetDataRef(DataHandler dh, Handle *dataRef)
  1718.  FIVEWORDINLINE(0x2F3C, 0x4, 0xB, 0x7000, 0xA82A);
  1719. extern pascal ComponentResult DataHCompareDataRef(DataHandler dh, Handle dataRef, Boolean *equal)
  1720.  FIVEWORDINLINE(0x2F3C, 0x8, 0xC, 0x7000, 0xA82A);
  1721. extern pascal ComponentResult DataHTask(DataHandler dh)
  1722.  FIVEWORDINLINE(0x2F3C, 0, 0xD, 0x7000, 0xA82A);
  1723. extern pascal ComponentResult DataHScheduleData(DataHandler dh, Ptr PlaceToPutDataPtr, long FileOffset, long DataSize, long RefCon, DataHSchedulePtr scheduleRec, DataHCompletionUPP CompletionRtn)
  1724.  FIVEWORDINLINE(0x2F3C, 0x18, 0xE, 0x7000, 0xA82A);
  1725. extern pascal ComponentResult DataHFinishData(DataHandler dh, Ptr PlaceToPutDataPtr, Boolean Cancel)
  1726.  FIVEWORDINLINE(0x2F3C, 0x6, 0xF, 0x7000, 0xA82A);
  1727. extern pascal ComponentResult DataHFlushCache(DataHandler dh)
  1728.  FIVEWORDINLINE(0x2F3C, 0, 0x10, 0x7000, 0xA82A);
  1729. extern pascal ComponentResult DataHResolveDataRef(DataHandler dh, Handle theDataRef, Boolean *wasChanged, Boolean userInterfaceAllowed)
  1730.  FIVEWORDINLINE(0x2F3C, 0xA, 0x11, 0x7000, 0xA82A);
  1731. extern pascal ComponentResult DataHGetFileSize(DataHandler dh, long *fileSize)
  1732.  FIVEWORDINLINE(0x2F3C, 0x4, 0x12, 0x7000, 0xA82A);
  1733. extern pascal ComponentResult DataHCanUseDataRef(DataHandler dh, Handle dataRef, long *useFlags)
  1734.  FIVEWORDINLINE(0x2F3C, 0x8, 0x13, 0x7000, 0xA82A);
  1735. extern pascal ComponentResult DataHGetVolumeList(DataHandler dh, DataHVolumeList *volumeList)
  1736.  FIVEWORDINLINE(0x2F3C, 0x4, 0x14, 0x7000, 0xA82A);
  1737. extern pascal ComponentResult DataHWrite(DataHandler dh, Ptr data, long offset, long size, DataHCompletionUPP completion, long refCon)
  1738.  FIVEWORDINLINE(0x2F3C, 0x14, 0x15, 0x7000, 0xA82A);
  1739. extern pascal ComponentResult DataHPreextend(DataHandler dh, long maxToAdd, long *spaceAdded)
  1740.  FIVEWORDINLINE(0x2F3C, 0x8, 0x16, 0x7000, 0xA82A);
  1741. extern pascal ComponentResult DataHSetFileSize(DataHandler dh, long fileSize)
  1742.  FIVEWORDINLINE(0x2F3C, 0x4, 0x17, 0x7000, 0xA82A);
  1743. extern pascal ComponentResult DataHGetFreeSpace(DataHandler dh, unsigned long *freeSize)
  1744.  FIVEWORDINLINE(0x2F3C, 0x4, 0x18, 0x7000, 0xA82A);
  1745. extern pascal ComponentResult DataHCreateFile(DataHandler dh, OSType creator, Boolean deleteExisting)
  1746.  FIVEWORDINLINE(0x2F3C, 0x6, 0x19, 0x7000, 0xA82A);
  1747. extern pascal ComponentResult DataHGetPreferredBlockSize(DataHandler dh, long *blockSize)
  1748.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1A, 0x7000, 0xA82A);
  1749. extern pascal ComponentResult DataHGetDeviceIndex(DataHandler dh, long *deviceIndex)
  1750.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1B, 0x7000, 0xA82A);
  1751. extern pascal ComponentResult DataHIsStreamingDataHandler(DataHandler dh, Boolean *yes)
  1752.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1C, 0x7000, 0xA82A);
  1753. extern pascal ComponentResult DataHGetDataInBuffer(DataHandler dh, long startOffset, long *size)
  1754.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1D, 0x7000, 0xA82A);
  1755. extern pascal ComponentResult DataHGetScheduleAheadTime(DataHandler dh, long *millisecs)
  1756.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1E, 0x7000, 0xA82A);
  1757. extern pascal ComponentResult DataHSetCacheSizeLimit(DataHandler dh, Size cacheSizeLimit)
  1758.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1F, 0x7000, 0xA82A);
  1759. extern pascal ComponentResult DataHGetCacheSizeLimit(DataHandler dh, Size *cacheSizeLimit)
  1760.  FIVEWORDINLINE(0x2F3C, 0x4, 0x20, 0x7000, 0xA82A);
  1761. extern pascal ComponentResult DataHGetMovie(DataHandler dh, Movie *theMovie, short *id)
  1762.  FIVEWORDINLINE(0x2F3C, 0x8, 0x21, 0x7000, 0xA82A);
  1763. extern pascal ComponentResult DataHAddMovie(DataHandler dh, Movie theMovie, short *id)
  1764.  FIVEWORDINLINE(0x2F3C, 0x8, 0x22, 0x7000, 0xA82A);
  1765. extern pascal ComponentResult DataHUpdateMovie(DataHandler dh, Movie theMovie, short id)
  1766.  FIVEWORDINLINE(0x2F3C, 0x6, 0x23, 0x7000, 0xA82A);
  1767. extern pascal ComponentResult DataHDoesBuffer(DataHandler dh, Boolean *buffersReads, Boolean *buffersWrites)
  1768.  FIVEWORDINLINE(0x2F3C, 0x8, 0x24, 0x7000, 0xA82A);
  1769. extern pascal ComponentResult DataHPlaybackHints(DataHandler dh, long flags, unsigned long minFileOffset, unsigned long maxFileOffset, long bytesPerSecond)
  1770.  FIVEWORDINLINE(0x2F3C, 0x10, 0x103, 0x7000, 0xA82A);
  1771.  
  1772. enum {
  1773.     kDataHGetDataSelect            = 0x2,
  1774.     kDataHPutDataSelect            = 0x3,
  1775.     kDataHFlushDataSelect        = 0x4,
  1776.     kDataHOpenForWriteSelect    = 0x5,
  1777.     kDataHCloseForWriteSelect    = 0x6,
  1778.     kDataHOpenForReadSelect        = 0x8,
  1779.     kDataHCloseForReadSelect    = 0x9,
  1780.     kDataHSetDataRefSelect        = 0xA,
  1781.     kDataHGetDataRefSelect        = 0xB,
  1782.     kDataHCompareDataRefSelect    = 0xC,
  1783.     kDataHTaskSelect            = 0xD,
  1784.     kDataHScheduleDataSelect    = 0xE,
  1785.     kDataHFinishDataSelect        = 0xF,
  1786.     kDataHFlushCacheSelect        = 0x10,
  1787.     kDataHResolveDataRefSelect    = 0x11,
  1788.     kDataHGetFileSizeSelect        = 0x12,
  1789.     kDataHCanUseDataRefSelect    = 0x13,
  1790.     kDataHGetVolumeListSelect    = 0x14,
  1791.     kDataHWriteSelect            = 0x15,
  1792.     kDataHPreextendSelect        = 0x16,
  1793.     kDataHSetFileSizeSelect        = 0x17,
  1794.     kDataHGetFreeSpaceSelect    = 0x18,
  1795.     kDataHCreateFileSelect        = 0x19,
  1796.     kDataHGetPreferredBlockSizeSelect = 0x1A,
  1797.     kDataHGetDeviceIndexSelect    = 0x1B,
  1798.     kDataHIsStreamingDataHandlerSelect = 0x1C,
  1799.     kDataHGetDataInBufferSelect    = 0x1D,
  1800.     kDataHGetScheduleAheadTimeSelect = 0x1E,
  1801.     kDataHSetCacheSizeLimitSelect = 0x1F,
  1802.     kDataHGetCacheSizeLimitSelect = 0x20,
  1803.     kDataHGetMovieSelect        = 0x21,
  1804.     kDataHAddMovieSelect        = 0x22,
  1805.     kDataHUpdateMovieSelect        = 0x23,
  1806.     kDataHDoesBufferSelect        = 0x24,
  1807.     kDataHPlaybackHintsSelect    = 0x103
  1808. };
  1809.  
  1810. /*
  1811.     AtomicInstrument
  1812.          ToneDescription
  1813.         [NoteRequestInfo]
  1814.         [KnobList]
  1815.         [SampleInfo [1..m]] 
  1816.              SampeDescription (identifies corresponding SampleData)
  1817.             [KnobList]
  1818.         [SampleData [1..n]]
  1819.         [InstrumentInfo]
  1820.             [Pict]
  1821.             [Author]
  1822.             [Copyright]
  1823.             [Other]
  1824. */
  1825. enum {
  1826.     kaiToneDescType                = 'tone',
  1827.     kaiKnobListType                = 'knbl',
  1828.     kaiSampleInfoType            = 'sinf',
  1829.     kaiSampleDescType            = 'sdsc',
  1830.     kaiInstInfoType                = 'iinf',
  1831.     kaiPictType                    = 'pict',
  1832.     kaiWriterType                = '©wrt',
  1833.     kaiCopyrightType            = '©cpy',
  1834.     kaiOtherStrType                = 'str ',
  1835.     kaiSampleDataType            = 'sdat',
  1836.     kaiNoteRequestInfoType        = 'ntrq'
  1837. };
  1838.  
  1839. struct InstKnobRec {
  1840.     long                            number;
  1841.     long                            value;
  1842. };
  1843. typedef struct InstKnobRec InstKnobRec;
  1844.  
  1845.  
  1846. enum {
  1847.     kInstKnobMissingUnknown        = 0,
  1848.     kInstKnobMissingDefault        = 1 << 0
  1849. };
  1850.  
  1851. struct InstKnobList {
  1852.     long                            knobCount;
  1853.     long                            knobFlags;
  1854.     InstKnobRec                        knob[1];
  1855. };
  1856. typedef struct InstKnobList InstKnobList;
  1857.  
  1858.  
  1859. enum {
  1860.     loopTypeNormal                = 0,
  1861.     loopTypeAlternating            = 1                                /* back & forth*/
  1862. };
  1863.  
  1864. enum {
  1865.     instSamplePreProcessFlag    = 1 << 0
  1866. };
  1867.  
  1868. struct InstSampleDescRec {
  1869.     OSType                            dataFormat;
  1870.     short                            numChannels;
  1871.     short                            sampleSize;
  1872.     UnsignedFixed                    sampleRate;
  1873.     short                            sampleDataID;
  1874.     long                            offset;                        /* offset within SampleData - this could be just for internal use*/
  1875.     long                            numSamples;                    /* this could also just be for internal use, we'll see*/
  1876.     long                            loopType;
  1877.     long                            loopStart;
  1878.     long                            loopEnd;
  1879.     long                            pitchNormal;
  1880.     long                            pitchLow;
  1881.     long                            pitchHigh;
  1882. };
  1883. typedef struct InstSampleDescRec InstSampleDescRec;
  1884.  
  1885. typedef Handle AtomicInstrument;
  1886.  
  1887. typedef Ptr AtomicInstrumentPtr;
  1888.  
  1889.  
  1890. enum {
  1891.     kMusicComponentType            = 'musi'
  1892. };
  1893.  
  1894. enum {
  1895.     kSoftSynthType                = 'ss  ',
  1896.     kGMSynthType                = 'gm  '
  1897. };
  1898.  
  1899. typedef ComponentInstance MusicComponent;
  1900.  
  1901. /* MusicSynthesizerFlags*/
  1902.  
  1903. enum {
  1904.     kSynthesizerDynamicVoice    = 1,                            /* can assign voices on the fly (else, polyphony is very important */
  1905.     kSynthesizerUsesMIDIPort    = 2,                            /* must be patched through MIDI Manager */
  1906.     kSynthesizerMicrotone        = 4,                            /* can play microtonal scales */
  1907.     kSynthesizerLimitedMicrotone = 8,                            /* can play microtones, but only on 1-voice parts */
  1908.     kSynthesizerMixedDrums        = 16,                            /* any part can play drum parts, total = instrument parts */
  1909.     kSynthesizerSoftware        = 32,                            /* implemented in main CPU software == uses cpu cycles */
  1910.     kSynthesizerHardware        = 64,                            /* is a hardware device (such as nubus, or maybe DSP?) */
  1911.     kSynthesizerDynamicChannel    = 128,                            /* can move any part to any channel or disable each part. (else we assume it lives on all channels in masks) */
  1912.     kSynthesizerHogsSystemChannel = 256,                        /* can be channelwise dynamic, but always responds on its system channel */
  1913.     kSynthesizerEditsMainChannel = 512,                            /* can only twiddle knobs on the main system channel */
  1914.     kSynthesizerSlowSetPart        = 1024,                            /* SetPart() and SetPartInstrumentNumber() calls do not have rapid response, may glitch notes */
  1915.     kSynthesizerNeedsSystemChannel = 2048,                        /* The user need not be queried for system channel, example: GM synth */
  1916.     kSynthesizerCanBeMono        = 4096,                            /* Synthesizer can be configured either mono or poly */
  1917.     kSynthesizerGMSuperset        = 8192,                            /* synth is a GM device, with some voices beyond the GM set. (if set, kSynthesizerGM must also be set */
  1918.     kSynthesizerGM                = 16384                            /* synth is a GM device */
  1919. };
  1920.  
  1921. /*
  1922.  * Note that these controller numbers
  1923.  * are _not_ identical to the MIDI controller numbers.
  1924.  * These are _signed_ 8.8 values, and the LSB's are
  1925.  * always sent to a MIDI device. Controllers 32-63 are
  1926.  * reserved (for MIDI, they are LSB's for 0-31, but we
  1927.  * always send both).
  1928.  *
  1929.  * The full range, therefore, is -128.00 to 127.7f.
  1930.  *
  1931.  * _Excepting_ _volume_, all controls default to zero.
  1932.  *
  1933.  * Pitch bend is specified in fractional semitones! No
  1934.  * more "pitch bend range" nonsense. You can bend as far
  1935.  * as you want, any time you want.
  1936.  */
  1937. enum MusicControllers {
  1938.     kControllerModulationWheel    = 1,
  1939.     kControllerBreath            = 2,
  1940.     kControllerFoot                = 4,
  1941.     kControllerPortamentoTime    = 5,                            /* portamento on/off is omitted, 0 time = 'off' */
  1942.     kControllerVolume            = 7,
  1943.     kControllerBalance            = 8,
  1944.     kControllerPan                = 10,                            /* 0 - "default", 1 - n: positioned in output 1-n (incl fractions) */
  1945.     kControllerExpression        = 11,
  1946.     kControllerLever1            = 16,                            /* general purpose controllers */
  1947.     kControllerLever2            = 17,                            /* general purpose controllers */
  1948.     kControllerLever3            = 18,                            /* general purpose controllers */
  1949.     kControllerLever4            = 19,                            /* general purpose controllers */
  1950.     kControllerLever5            = 80,                            /* general purpose controllers */
  1951.     kControllerLever6            = 81,                            /* general purpose controllers */
  1952.     kControllerLever7            = 82,                            /* general purpose controllers */
  1953.     kControllerLever8            = 83,                            /* general purpose controllers */
  1954.     kControllerPitchBend        = 32,                            /* positive & negative semitones, with 7 bits fraction */
  1955.     kControllerAfterTouch        = 33,                            /* aka channel pressure */
  1956.     kControllerSustain            = 64,                            /* boolean - positive for on, 0 or negative off */
  1957.     kControllerSostenuto        = 66,                            /* boolean */
  1958.     kControllerSoftPedal        = 67,                            /* boolean */
  1959.     kControllerReverb            = 91,
  1960.     kControllerTremolo            = 92,
  1961.     kControllerChorus            = 93,
  1962.     kControllerCeleste            = 94,
  1963.     kControllerPhaser            = 95
  1964. };
  1965.  
  1966. enum {
  1967.     kControllerMaximum            = 0x7FFF,                        /* +01111111.11111111 */
  1968.     kControllerMinimum            = 0x8000                        /* -10000000.00000000 */
  1969. };
  1970.  
  1971. struct SynthesizerDescription {
  1972.     OSType                            synthesizerType;            /* synthesizer type (must be same as component subtype) */
  1973.     Str31                            name;                        /* text name of synthesizer type */
  1974.     unsigned long                    flags;                        /* from the above enum */
  1975.     unsigned long                    voiceCount;                    /* maximum polyphony */
  1976.     unsigned long                    partCount;                    /* maximum multi-timbrality (and midi channels) */
  1977.     unsigned long                    instrumentCount;            /* non gm, built in (rom) instruments only */
  1978.     unsigned long                    modifiableInstrumentCount;    /* plus n-more are user modifiable */
  1979.     unsigned long                    channelMask;                /* (midi device only) which channels device always uses */
  1980.     unsigned long                    drumPartCount;                /* maximum multi-timbrality of drum parts */
  1981.     unsigned long                    drumCount;                    /* non gm, built in (rom) drumkits only */
  1982.     unsigned long                    modifiableDrumCount;        /* plus n-more are user modifiable */
  1983.     unsigned long                    drumChannelMask;            /* (midi device only) which channels device always uses */
  1984.     unsigned long                    outputCount;                /* number of audio outputs (usually two) */
  1985.     unsigned long                    latency;                    /* response time in µSec */
  1986.     unsigned long                    controllers[4];                /* array of 128 bits */
  1987.     unsigned long                    gmInstruments[4];            /* array of 128 bits */
  1988.     unsigned long                    gmDrums[4];                    /* array of 128 bits */
  1989. };
  1990. typedef struct SynthesizerDescription SynthesizerDescription;
  1991.  
  1992.  
  1993. enum {
  1994.     kVoiceCountDynamic            = -1                            /* constant to use to specify dynamic voicing */
  1995. };
  1996.  
  1997. struct ToneDescription {
  1998.     OSType                            synthesizerType;            /* synthesizer type */
  1999.     Str31                            synthesizerName;            /* name of instantiation of synth */
  2000.     Str31                            instrumentName;                /* preferred name for human use */
  2001.     long                            instrumentNumber;            /* inst-number used if synth-name matches */
  2002.     long                            gmNumber;                    /* Best matching general MIDI number */
  2003. };
  2004. typedef struct ToneDescription ToneDescription;
  2005.  
  2006.  
  2007. enum {
  2008.     kFirstDrumkit                = 16384,                        /* (first value is "no drum". instrument numbers from 16384->16384+128 are drumkits, and for GM they are _defined_ drumkits! */
  2009.     kLastDrumkit                = (kFirstDrumkit + 128)
  2010. };
  2011.  
  2012. /* InstrumentMatch*/
  2013. enum {
  2014.     kInstrumentMatchSynthesizerType = 1,
  2015.     kInstrumentMatchSynthesizerName = 2,
  2016.     kInstrumentMatchName        = 4,
  2017.     kInstrumentMatchNumber        = 8,
  2018.     kInstrumentMatchGMNumber    = 16
  2019. };
  2020.  
  2021. /* KnobFlags*/
  2022. enum {
  2023.     kKnobRealtime                = 1,                            /* Knob can be changed interactively as part of a sequence (ie knob can be changed at interrupt time) */
  2024.     kKnobNextNote                = 2,                            /* Knob only takes effect on the next note played */
  2025.     kKnobAction                    = 4,                            /* setting the knob does something immediate */
  2026.     kKnobNotInstrument            = 8,                            /* indicates that the knob isn't in the instrument handle */
  2027.     kKnobAffectsOthers            = 16,                            /* other knobs will change value from this one */
  2028.     kKnobInterruptUnsafe        = 32,                            /* only alter this knob from foreground task time (may access toolbox) */
  2029.     kKnobMinorGroupStart        = 64,                            /* knob is first in some logical subgroup of knobs */
  2030.     kKnobGroupStart                = 128,                            /* knob is first in some logical group of knobs */
  2031.     kKnobFixedPoint8            = 1024,
  2032.     kKnobFixedPoint16            = 2048,
  2033. /* One of these may be used at a time. */
  2034.     kKnobTypeNumber                = 0 << 12,
  2035.     kKnobTypeGroupName            = 1 << 12,                        /* "knob" is really a group name for display purposes */
  2036.     kKnobTypeBoolean            = 2 << 12,                        /* if range is greater than 1, its a multi-checkbox field */
  2037.     kKnobTypeNote                = 3 << 12,                        /* knob range is equivalent to MIDI keys */
  2038.     kKnobTypePan                = 4 << 12,                        /* range goes left/right (lose this? ) */
  2039.     kKnobTypeInstrument            = 5 << 12,                        /* knob value = reference to another instrument number */
  2040.     kKnobTypeSetting            = 6 << 12,                        /* knob value is 1 of n different things (eg, fm algorithms) popup menu */
  2041.     kKnobTypeMilliseconds        = 7 << 12,                        /* knob is a millisecond time range */
  2042.     kKnobTypePercentage            = 8 << 12,                        /* knob range is displayed as a Percentage */
  2043.     kKnobTypeHertz                = 9 << 12                        /* knob represents frequency */
  2044. };
  2045.  
  2046. enum {
  2047.     kUnknownKnobValue            = 0x7FFFFFFF,                    /* a knob with this value means, we don't know it. */
  2048.     kDefaultKnobValue            = 0x7FFFFFFE                    /* used to SET a knob to its default value. */
  2049. };
  2050.  
  2051. struct KnobDescription {
  2052.     Str31                            name;
  2053.     long                            lowValue;
  2054.     long                            highValue;
  2055.     long                            defaultValue;                /* a default instrument is made of all default values */
  2056.     long                            flags;
  2057.     long                            knobID;
  2058. };
  2059. typedef struct KnobDescription KnobDescription;
  2060.  
  2061. struct InstrumentAboutInfo {
  2062.     PicHandle                        p;
  2063.     Str255                            author;
  2064.     Str255                            copyright;
  2065.     Str255                            other;
  2066. };
  2067. typedef struct InstrumentAboutInfo InstrumentAboutInfo;
  2068.  
  2069.  
  2070. enum {
  2071.     kMusicPacketPortLost        = 1,                            /* received when application loses the default input port */
  2072.     kMusicPacketPortFound,                                        /* received when application gets it back out from under someone else's claim */
  2073.     kMusicPacketTimeGap                                            /* data[0] = number of milliseconds to keep the MIDI line silent */
  2074. };
  2075.  
  2076. struct MusicMIDIPacket {
  2077.     unsigned short                    length;
  2078.     unsigned long                    reserved;                    /* if length zero, then reserved = above enum */
  2079.     UInt8                            data[249];
  2080. };
  2081. typedef struct MusicMIDIPacket MusicMIDIPacket;
  2082.  
  2083. typedef pascal ComponentResult (*MusicMIDISendProcPtr)(MusicComponent self, long refCon, MusicMIDIPacket *mmp);
  2084.  
  2085. #if GENERATINGCFM
  2086. typedef UniversalProcPtr MusicMIDISendUPP;
  2087. #else
  2088. typedef MusicMIDISendProcPtr MusicMIDISendUPP;
  2089. #endif
  2090.  
  2091. typedef pascal ComponentResult (*MusicMIDIReadHookProcPtr)(MusicMIDIPacket *mp, long myRefCon);
  2092.  
  2093. #if GENERATINGCFM
  2094. typedef UniversalProcPtr MusicMIDIReadHookUPP;
  2095. #else
  2096. typedef MusicMIDIReadHookProcPtr MusicMIDIReadHookUPP;
  2097. #endif
  2098.  
  2099.  
  2100. enum {
  2101.     kMusicFirstSelect            = 0,
  2102.     kMusicGetDescriptionSelect,
  2103.     kMusicGetPartSelect,
  2104.     kMusicSetPartSelect,
  2105.     kMusicSetPartInstrumentNumberSelect,
  2106.     kMusicGetPartInstrumentNumberSelect,
  2107.     kMusicStorePartInstrumentSelect,
  2108.     kMusicDummyOne,
  2109.     kMusicDummyTwo,
  2110.     kMusicGetPartAtomicInstrumentSelect,
  2111.     kMusicSetPartAtomicInstrumentSelect,
  2112.     kMusicDummyThree,
  2113.     kMusicDummyFour,
  2114.     kMusicGetInstrumentKnobDescriptionObsoleteSelect,
  2115.     kMusicGetDrumKnobDescriptionObsoleteSelect,
  2116.     kMusicGetKnobDescriptionObsoleteSelect,
  2117.     kMusicGetPartKnobSelect,
  2118.     kMusicSetPartKnobSelect,
  2119.     kMusicGetKnobSelect,
  2120.     kMusicSetKnobSelect,
  2121.     kMusicGetPartNameSelect,
  2122.     kMusicSetPartNameSelect,
  2123.     kMusicFindToneSelect,
  2124.     kMusicPlayNoteSelect,
  2125.     kMusicResetPartSelect,
  2126.     kMusicSetPartControllerSelect,
  2127.     kMusicGetPartControllerSelect,
  2128.     kMusicGetMIDIProcSelect,
  2129.     kMusicSetMIDIProcSelect,
  2130.     kMusicGetInstrumentNamesSelect,
  2131.     kMusicGetDrumNamesSelect,
  2132.     kMusicGetMasterTuneSelect,
  2133.     kMusicSetMasterTuneSelect,
  2134.     kMusicDummyFive,
  2135.     kMusicGetInstrumentAboutInfoSelect,
  2136.     kMusicGetDeviceConnectionSelect,
  2137.     kMusicUseDeviceConnectionSelect,
  2138.     kMusicGetInstrumentKnobSettingsSelect,
  2139.     kMusicGetMIDIPortsSelect,
  2140.     kMusicSendMIDISelect,
  2141.     kMusicReceiveMIDISelect,
  2142.     kMusicStartOfflineSelect,
  2143.     kMusicSetOfflineTimeToSelect,
  2144.     kMusicGetInstrumentKnobDescriptionSelect,
  2145.     kMusicGetDrumKnobDescriptionSelect,
  2146.     kMusicGetKnobDescriptionSelect
  2147. };
  2148.  
  2149. enum {
  2150.     notImplementedMusicErr        = (0x80000000 | ((unsigned)(-2100 - 1))),
  2151.     cantSendToSynthesizerErr    = (0x80000000 | ((unsigned)(-2100 - 2))),
  2152.     cantReceiveFromSynthesizerErr = (0x80000000 | ((unsigned)(-2100 - 3))),
  2153.     illegalVoiceAllocationErr    = (0x80000000 | ((unsigned)(-2100 - 4))),
  2154.     illegalPartErr                = (0x80000000 | ((unsigned)(-2100 - 5))),
  2155.     illegalChannelErr            = (0x80000000 | ((unsigned)(-2100 - 6))),
  2156.     illegalKnobErr                = (0x80000000 | ((unsigned)(-2100 - 7))),
  2157.     illegalKnobValueErr            = (0x80000000 | ((unsigned)(-2100 - 8))),
  2158.     illegalInstrumentErr        = (0x80000000 | ((unsigned)(-2100 - 9))),
  2159.     illegalControllerErr        = (0x80000000 | ((unsigned)(-2100 - 10))),
  2160.     midiManagerAbsentErr        = (0x80000000 | ((unsigned)(-2100 - 11))),
  2161.     synthesizerNotRespondingErr    = (0x80000000 | ((unsigned)(-2100 - 12))),
  2162.     synthesizerErr                = (0x80000000 | ((unsigned)(-2100 - 13))),
  2163.     illegalNoteChannelErr        = (0x80000000 | ((unsigned)(-2100 - 14))),
  2164.     noteChannelNotAllocatedErr    = (0x80000000 | ((unsigned)(-2100 - 15))),
  2165.     tunePlayerFullErr            = (0x80000000 | ((unsigned)(-2100 - 16))),
  2166.     tuneParseErr                = (0x80000000 | ((unsigned)(-2100 - 17)))
  2167. };
  2168.  
  2169. enum {
  2170.     kGMType                        = 'gm  '
  2171. };
  2172.  
  2173. /*-----------------------------------------
  2174.     Capabilities and Voice Allocation
  2175. -----------------------------------------*/
  2176. extern pascal ComponentResult MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony)
  2177.  FIVEWORDINLINE(0x2F3C, 0xC, 0x2, 0x7000, 0xA82A);
  2178. extern pascal ComponentResult MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony)
  2179.  FIVEWORDINLINE(0x2F3C, 0xC, 0x3, 0x7000, 0xA82A);
  2180. extern pascal ComponentResult MusicGetDescription(MusicComponent mc, SynthesizerDescription *sd)
  2181.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1, 0x7000, 0xA82A);
  2182. extern pascal ComponentResult MusicGetInstrumentAboutInfo(MusicComponent mc, long part, InstrumentAboutInfo *iai)
  2183.  FIVEWORDINLINE(0x2F3C, 0x8, 0x22, 0x7000, 0xA82A);
  2184. /*-----------------------------------------
  2185.     Instrument Loading and Storing
  2186. -----------------------------------------*/
  2187. extern pascal ComponentResult MusicSetPartInstrumentNumber(MusicComponent mc, long part, long instrumentNumber)
  2188.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  2189. extern pascal ComponentResult MusicGetPartInstrumentNumber(MusicComponent mc, long part)
  2190.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  2191. extern pascal ComponentResult MusicStorePartInstrument(MusicComponent mc, long part, long instrumentNumber)
  2192.  FIVEWORDINLINE(0x2F3C, 0x8, 0x6, 0x7000, 0xA82A);
  2193.  
  2194. enum {
  2195.     getAtomicInstGetOriginalSamples = 1 << 0,
  2196.     getAtomicInstGetExpandedSamples = 1 << 1
  2197. };
  2198.  
  2199. extern pascal ComponentResult MusicGetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai, long flags)
  2200.  FIVEWORDINLINE(0x2F3C, 0xC, 0x9, 0x7000, 0xA82A);
  2201.  
  2202. enum {
  2203.     setAtomicInstKeepOriginalSamples = 1 << 0,
  2204.     setAtomicInstNeverPurgeSamples = 1 << 1                        /* if set self-contained inst stays until app goes away */
  2205. };
  2206.  
  2207. extern pascal ComponentResult MusicSetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags)
  2208.  FIVEWORDINLINE(0x2F3C, 0xC, 0xA, 0x7000, 0xA82A);
  2209. /*-----------------------------------------
  2210.     Instrument Knobs
  2211. -----------------------------------------*/
  2212. extern pascal ComponentResult MusicGetInstrumentKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  2213.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2B, 0x7000, 0xA82A);
  2214. extern pascal ComponentResult MusicGetDrumKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  2215.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2C, 0x7000, 0xA82A);
  2216. extern pascal ComponentResult MusicGetInstrumentKnobSettings(MusicComponent mc, long knobIndex, Handle *settingsNames, Handle *settingsCategoryLasts, Handle *settingsCategoryNames)
  2217.  FIVEWORDINLINE(0x2F3C, 0x10, 0x25, 0x7000, 0xA82A);
  2218. extern pascal ComponentResult MusicGetPartKnob(MusicComponent mc, long part, long knobID)
  2219.  FIVEWORDINLINE(0x2F3C, 0x8, 0x10, 0x7000, 0xA82A);
  2220. extern pascal ComponentResult MusicSetPartKnob(MusicComponent mc, long part, long knobID, long knobValue)
  2221.  FIVEWORDINLINE(0x2F3C, 0xC, 0x11, 0x7000, 0xA82A);
  2222. /*-----------------------------------------
  2223.     Synthesizer Knobs
  2224. -----------------------------------------*/
  2225. extern pascal ComponentResult MusicGetKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  2226.  FIVEWORDINLINE(0x2F3C, 0x8, 0x2D, 0x7000, 0xA82A);
  2227. extern pascal ComponentResult MusicGetKnob(MusicComponent mc, long knobID)
  2228.  FIVEWORDINLINE(0x2F3C, 0x4, 0x12, 0x7000, 0xA82A);
  2229. extern pascal ComponentResult MusicSetKnob(MusicComponent mc, long knobID, long knobValue)
  2230.  FIVEWORDINLINE(0x2F3C, 0x8, 0x13, 0x7000, 0xA82A);
  2231. extern pascal ComponentResult MusicSetMasterTune(MusicComponent mc, long masterTune)
  2232.  FIVEWORDINLINE(0x2F3C, 0x4, 0x20, 0x7000, 0xA82A);
  2233. extern pascal ComponentResult MusicGetMasterTune(MusicComponent mc)
  2234.  FIVEWORDINLINE(0x2F3C, 0, 0x1F, 0x7000, 0xA82A);
  2235. /*-----------------------------------------
  2236.     Names of Instruments
  2237. -----------------------------------------*/
  2238. extern pascal ComponentResult MusicGetPartName(MusicComponent mc, long part, Str31 name)
  2239.  FIVEWORDINLINE(0x2F3C, 0x8, 0x14, 0x7000, 0xA82A);
  2240. extern pascal ComponentResult MusicSetPartName(MusicComponent mc, long part, Str31 name)
  2241.  FIVEWORDINLINE(0x2F3C, 0x8, 0x15, 0x7000, 0xA82A);
  2242. extern pascal ComponentResult MusicFindTone(MusicComponent mc, ToneDescription *td, long *instrumentNumber, unsigned long *fit)
  2243.  FIVEWORDINLINE(0x2F3C, 0xC, 0x16, 0x7000, 0xA82A);
  2244.  
  2245. enum {
  2246.     kInstrumentNamesModifiable    = 1,
  2247.     kInstrumentNamesBoth        = 2
  2248. };
  2249.  
  2250. extern pascal ComponentResult MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNames, Handle *instrumentCategoryLasts, Handle *instrumentCategoryNames)
  2251.  FIVEWORDINLINE(0x2F3C, 0x10, 0x1D, 0x7000, 0xA82A);
  2252. extern pascal ComponentResult MusicGetDrumNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNumbers, Handle *instrumentNames)
  2253.  FIVEWORDINLINE(0x2F3C, 0xC, 0x1E, 0x7000, 0xA82A);
  2254. /*-----------------------------------------
  2255.     Realtime Actions
  2256. -----------------------------------------*/
  2257. extern pascal ComponentResult MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
  2258.  FIVEWORDINLINE(0x2F3C, 0xC, 0x17, 0x7000, 0xA82A);
  2259. extern pascal ComponentResult MusicResetPart(MusicComponent mc, long part)
  2260.  FIVEWORDINLINE(0x2F3C, 0x4, 0x18, 0x7000, 0xA82A);
  2261. extern pascal ComponentResult MusicSetPartController(MusicComponent mc, long part, long controllerNumber, long controllerValue)
  2262.  FIVEWORDINLINE(0x2F3C, 0xC, 0x19, 0x7000, 0xA82A);
  2263. extern pascal ComponentResult MusicGetPartController(MusicComponent mc, long part, long controllerNumber)
  2264.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1A, 0x7000, 0xA82A);
  2265. /*-----------------------------------------
  2266.     Finding the Hardware
  2267. -----------------------------------------*/
  2268. extern pascal ComponentResult MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc, long *refCon)
  2269.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1B, 0x7000, 0xA82A);
  2270. extern pascal ComponentResult MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon)
  2271.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1C, 0x7000, 0xA82A);
  2272. extern pascal ComponentResult MusicGetDeviceConnection(MusicComponent mc, long index, long *id1, long *id2)
  2273.  FIVEWORDINLINE(0x2F3C, 0xC, 0x23, 0x7000, 0xA82A);
  2274. extern pascal ComponentResult MusicUseDeviceConnection(MusicComponent mc, long id1, long id2)
  2275.  FIVEWORDINLINE(0x2F3C, 0x8, 0x24, 0x7000, 0xA82A);
  2276. /*-----------------------------------------
  2277.     Component Based MIDIs
  2278.     (very optional calls)
  2279. -----------------------------------------*/
  2280. extern pascal ComponentResult MusicGetMIDIPorts(MusicComponent mc, long *inputPortCount, long *outputPortCount)
  2281.  FIVEWORDINLINE(0x2F3C, 0x8, 0x26, 0x7000, 0xA82A);
  2282. extern pascal ComponentResult MusicSendMIDI(MusicComponent mc, long portIndex, MusicMIDIPacket *mp)
  2283.  FIVEWORDINLINE(0x2F3C, 0x8, 0x27, 0x7000, 0xA82A);
  2284. extern pascal ComponentResult MusicReceiveMIDI(MusicComponent mc, MusicMIDIReadHookUPP readHook, long refCon)
  2285.  FIVEWORDINLINE(0x2F3C, 0x8, 0x28, 0x7000, 0xA82A);
  2286. /*-----------------------------------------
  2287.     Non-RealTime Support
  2288. -----------------------------------------*/
  2289. typedef pascal ComponentResult (*MusicOfflineDataProcPtr)(Ptr SoundData, long numBytes, long myRefCon);
  2290.  
  2291. #if GENERATINGCFM
  2292. typedef UniversalProcPtr MusicOfflineDataUPP;
  2293. #else
  2294. typedef MusicOfflineDataProcPtr MusicOfflineDataUPP;
  2295. #endif
  2296.  
  2297. struct OfflineSampleType {
  2298.     unsigned long                    numChannels;                /*number of channels,  ie mono = 1*/
  2299.     UnsignedFixed                    sampleRate;                    /*sample rate in Apples Fixed point representation*/
  2300.     unsigned short                    sampleSize;                    /*number of bits in sample*/
  2301. };
  2302. typedef struct OfflineSampleType OfflineSampleType;
  2303.  
  2304. extern pascal ComponentResult MusicStartOffline(MusicComponent mc, unsigned long *numChannels, UnsignedFixed *sampleRate, unsigned short *sampleSize, MusicOfflineDataUPP dataProc, long dataProcRefCon)
  2305.  FIVEWORDINLINE(0x2F3C, 0x14, 0x29, 0x7000, 0xA82A);
  2306. extern pascal ComponentResult MusicSetOfflineTimeTo(MusicComponent mc, long newTimeStamp)
  2307.  FIVEWORDINLINE(0x2F3C, 0x4, 0x2A, 0x7000, 0xA82A);
  2308. /*-----------------------------------------
  2309.     Obsolete calls
  2310. -----------------------------------------*/
  2311. extern pascal ComponentResult MusicGetInstrumentKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  2312.  FIVEWORDINLINE(0x2F3C, 0x8, 0xD, 0x7000, 0xA82A);
  2313. extern pascal ComponentResult MusicGetDrumKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  2314.  FIVEWORDINLINE(0x2F3C, 0x8, 0xE, 0x7000, 0xA82A);
  2315. extern pascal ComponentResult MusicGetKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  2316.  FIVEWORDINLINE(0x2F3C, 0x8, 0xF, 0x7000, 0xA82A);
  2317.  
  2318. enum {
  2319.     kInstrumentGetIndSelect        = 1,
  2320.     kInstrumentDisposeSelect,
  2321.     kInstrumentFindToneSelect,
  2322.     kInstrumentObsolete1,
  2323.     kInstrumentOpenResFileSelect,
  2324.     kInstrumentCloseResFileSelect,
  2325.     kInstrumentLast
  2326. };
  2327.  
  2328. extern pascal ComponentResult InstrumentGetInd(ComponentInstance inst, long index, AtomicInstrument *atomicInst)
  2329.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1, 0x7000, 0xA82A);
  2330. extern pascal ComponentResult InstrumentDispose(ComponentInstance inst, AtomicInstrument atomicInst)
  2331.  FIVEWORDINLINE(0x2F3C, 0x4, 0x2, 0x7000, 0xA82A);
  2332. extern pascal ComponentResult InstrumentFindTone(ComponentInstance inst, ToneDescription *td)
  2333.  FIVEWORDINLINE(0x2F3C, 0x4, 0x3, 0x7000, 0xA82A);
  2334. /* Mask bit for returned value by InstrumentFind.*/
  2335. #define kExactMatch 0x20000
  2336. #define kRecommendedSubstitute 0x10000
  2337. #define kQualityField 0xFF000000
  2338. #define kRoland8BitQuality 0x05000000
  2339. extern pascal ComponentResult InstrumentOpenResFile(ComponentInstance inst, long index, short *resRefNum, short *instResID)
  2340.  FIVEWORDINLINE(0x2F3C, 0xC, 0x5, 0x7000, 0xA82A);
  2341. extern pascal ComponentResult InstrumentCloseResFile(ComponentInstance inst, short resRefNum)
  2342.  FIVEWORDINLINE(0x2F3C, 0x2, 0x6, 0x7000, 0xA82A);
  2343. /*--------------------------
  2344.     Types
  2345. --------------------------*/
  2346. struct NoteChannelRecord {
  2347.     long                            data[1];
  2348. };
  2349. typedef struct NoteChannelRecord NoteChannelRecord, *NoteChannel;
  2350.  
  2351.  
  2352. enum {
  2353.     kSynthesizerConnectionMono    = 1,                            /* if set, and synth can be mono/poly, then the partCount channels from the system channel are hogged */
  2354.     kSynthesizerConnectionMMgr    = 2,                            /* this connection imported from the MIDI Mgr */
  2355.     kSynthesizerConnectionOMS    = 4,                            /* this connection imported from OMS */
  2356.     kSynthesizerConnectionQT    = 8                                /* this connection is a QuickTime-only port */
  2357. };
  2358.  
  2359. /* used for MIDI device only */
  2360. struct SynthesizerConnections {
  2361.     OSType                            clientID;
  2362.     OSType                            inputPortID;                /* terminology death: this port is used to SEND to the midi synth */
  2363.     OSType                            outputPortID;                /* terminology death: this port receives from a keyboard or other control device */
  2364.     long                            midiChannel;                /* The system channel; others are configurable (or the nubus slot number) */
  2365.     long                            flags;
  2366.     long                            unique;                        /* unique id may be used instead of index, to getinfo and unregister calls */
  2367.     long                            reserved1;                    /* should be zero */
  2368.     long                            reserved2;                    /* should be zero */
  2369. };
  2370. typedef struct SynthesizerConnections SynthesizerConnections;
  2371.  
  2372. struct QTMIDIPort {
  2373.     SynthesizerConnections            portConnections;
  2374.     Str63                            portName;
  2375. };
  2376. typedef struct QTMIDIPort QTMIDIPort;
  2377.  
  2378. #define kNoteRequestNoGM 1
  2379. #define kNoteRequestNoSynthType 2
  2380. struct NoteRequestInfo {
  2381.     UInt8                            flags;                        /* 1: dont accept GM match, 2: dont accept same-synth-type match */
  2382.     UInt8                            reserved;                    /* must be zero */
  2383.     short                            polyphony;                    /* Maximum number of voices */
  2384.     Fixed                            typicalPolyphony;            /* Hint for level mixing */
  2385. };
  2386. typedef struct NoteRequestInfo NoteRequestInfo;
  2387.  
  2388. struct NoteRequest {
  2389.     NoteRequestInfo                    info;
  2390.     ToneDescription                    tone;
  2391. };
  2392. typedef struct NoteRequest NoteRequest;
  2393.  
  2394.  
  2395. enum {
  2396.     kNAFirstSelector            = -7,
  2397.     kNATargetSelect,
  2398.     kNARegisterSelect,
  2399.     kNAVersionSelect,
  2400.     kNACanDoSelect,
  2401.     kNACloseSelect,
  2402.     kNAOpenSelect,
  2403.     kNARegisterMusicDeviceSelect,
  2404.     kNAUnregisterMusicDeviceSelect,
  2405.     kNAGetRegisteredMusicDeviceSelect,
  2406.     kNASaveMusicConfigurationSelect,
  2407.     kNANewNoteChannelSelect,
  2408.     kNADisposeNoteChannelSelect,
  2409.     kNAGetNoteChannelInfoSelect,
  2410.     kNAPrerollNoteChannelSelect,
  2411.     kNAUnrollNoteChannelSelect,
  2412.     kNAEngageNoteChannelSelect,
  2413.     kNADisengageNoteChannelSelect,
  2414.     kNASetNoteChannelVolumeSelect,
  2415.     kNAResetNoteChannelSelect,
  2416.     kNAPlayNoteSelect,
  2417.     kNASetControllerSelect,
  2418.     kNASetKnobSelect,
  2419.     kNAFindNoteChannelToneSelect,
  2420.     kNASetInstrumentNumberSelect,
  2421.     kNAPickInstrumentSelect,
  2422.     kNAPickArrangementSelect,
  2423.     kNAGetStatusBlockSelect,
  2424.     kNASetDefaultMIDIInputSelect,
  2425.     kNAGetDefaultMIDIInputSelect,
  2426.     kNAGetNoteChannelStateSelect,
  2427.     kNASetNoteChannelStateSelect,
  2428.     kNAUseDefaultMIDIInputSelect,
  2429.     kNALoseDefaultMIDIInputSelect,
  2430.     kNAStuffToneDescriptionSelect,
  2431.     kNACopyrightDialogSelect,
  2432.     kNADummyOneSelect,
  2433.     kNADummyTwoSelect,
  2434.     kNAGetIndNoteChannelSelect,
  2435.     kNAPlayNote2Select,
  2436.     kNAGetMIDIPortsSelect,
  2437.     kNAGetNoteRequestSelect,
  2438.     kNASendMIDISelect,
  2439.     kNAPickEditInstrumentSelect,
  2440.     kNANewNoteChannelFromInstrumentSelect,
  2441.     kNASetAtomicInstrumentSelect,
  2442.     kNALastSelector
  2443. };
  2444.  
  2445. typedef ComponentInstance NoteAllocator;
  2446.  
  2447.  
  2448. enum {
  2449.     kPickDontMix                = 1,                            /* dont mix instruments with drum sounds */
  2450.     kPickSameSynth                = 2,                            /* only allow the same device that went in, to come out */
  2451.     kPickUserInsts                = 4,                            /* show user insts in addition to ROM voices */
  2452.     kPickEditAllowEdit            = 8,                            /* lets user switch over to edit mode */
  2453.     kPickEditAllowPick            = 16,                            /* lets the user switch over to pick mode */
  2454.     kPickEditSynthGlobal        = 32,                            /* edit the global knobs of the synth */
  2455.     kPickEditControllers        = 64                            /* edit the controllers of the notechannel */
  2456. };
  2457.  
  2458. enum {
  2459.     kNoteAllocatorType            = 'nota'
  2460. };
  2461.  
  2462. /*--------------------------------
  2463.     Note Allocator Prototypes
  2464. --------------------------------*/
  2465. /*
  2466.  * System Configuration
  2467.  */
  2468. extern pascal ComponentResult NARegisterMusicDevice(NoteAllocator na, OSType synthType, Str31 name, SynthesizerConnections *connections)
  2469.  FIVEWORDINLINE(0x2F3C, 0xC, 0, 0x7000, 0xA82A);
  2470. extern pascal ComponentResult NAUnregisterMusicDevice(NoteAllocator na, long index)
  2471.  FIVEWORDINLINE(0x2F3C, 0x4, 0x1, 0x7000, 0xA82A);
  2472. extern pascal ComponentResult NAGetRegisteredMusicDevice(NoteAllocator na, long index, OSType *synthType, Str31 name, SynthesizerConnections *connections, MusicComponent *mc)
  2473.  FIVEWORDINLINE(0x2F3C, 0x14, 0x2, 0x7000, 0xA82A);
  2474. extern pascal ComponentResult NASetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  2475.  FIVEWORDINLINE(0x2F3C, 0x4, 0x15, 0x7000, 0xA82A);
  2476. extern pascal ComponentResult NAGetDefaultMIDIInput(NoteAllocator na, SynthesizerConnections *sc)
  2477.  FIVEWORDINLINE(0x2F3C, 0x4, 0x16, 0x7000, 0xA82A);
  2478. extern pascal ComponentResult NASaveMusicConfiguration(NoteAllocator na)
  2479.  FIVEWORDINLINE(0x2F3C, 0, 0x3, 0x7000, 0xA82A);
  2480. /*
  2481.  * Allocation
  2482.  */
  2483. extern pascal ComponentResult NANewNoteChannel(NoteAllocator na, NoteRequest *noteRequest, NoteChannel *outChannel)
  2484.  FIVEWORDINLINE(0x2F3C, 0x8, 0x4, 0x7000, 0xA82A);
  2485. extern pascal ComponentResult NANewNoteChannelFromInstrument(NoteAllocator na, AtomicInstrumentPtr instrument, NoteChannel *outChannel)
  2486.  FIVEWORDINLINE(0x2F3C, 0x8, 0x25, 0x7000, 0xA82A);
  2487. extern pascal ComponentResult NADisposeNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2488.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  2489. extern pascal ComponentResult NAGetNoteChannelInfo(NoteAllocator na, NoteChannel noteChannel, long *index, long *part)
  2490.  FIVEWORDINLINE(0x2F3C, 0xC, 0x6, 0x7000, 0xA82A);
  2491. extern pascal ComponentResult NAGetNoteRequest(NoteAllocator na, NoteChannel noteChannel, NoteRequest *nrOut)
  2492.  FIVEWORDINLINE(0x2F3C, 0x8, 0x22, 0x7000, 0xA82A);
  2493. extern pascal ComponentResult NAUseDefaultMIDIInput(NoteAllocator na, MusicMIDIReadHookUPP readHook, long refCon, unsigned long flags)
  2494.  FIVEWORDINLINE(0x2F3C, 0xC, 0x19, 0x7000, 0xA82A);
  2495. extern pascal ComponentResult NALoseDefaultMIDIInput(NoteAllocator na)
  2496.  FIVEWORDINLINE(0x2F3C, 0, 0x1A, 0x7000, 0xA82A);
  2497. extern pascal ComponentResult NAGetMIDIPorts(NoteAllocator na, Handle *inputPorts, Handle *outputPorts)
  2498.  FIVEWORDINLINE(0x2F3C, 0x8, 0x21, 0x7000, 0xA82A);
  2499. /*
  2500.  * Setup
  2501.  */
  2502. extern pascal ComponentResult NAPrerollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2503.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  2504. extern pascal ComponentResult NAUnrollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2505.  FIVEWORDINLINE(0x2F3C, 0x4, 0x8, 0x7000, 0xA82A);
  2506. extern pascal ComponentResult NAEngageNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2507.  FIVEWORDINLINE(0x2F3C, 0x4, 0x9, 0x7000, 0xA82A);
  2508. extern pascal ComponentResult NADisengageNoteChannel(NoteAllocator na, NoteChannel noteChannel, long silenceNotes)
  2509.  FIVEWORDINLINE(0x2F3C, 0x8, 0xA, 0x7000, 0xA82A);
  2510. extern pascal ComponentResult NAGetNoteChannelState(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber, TimeValue t, Handle *state)
  2511.  FIVEWORDINLINE(0x2F3C, 0x10, 0x17, 0x7000, 0xA82A);
  2512. extern pascal ComponentResult NASetNoteChannelState(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber, unsigned long *state)
  2513.  FIVEWORDINLINE(0x2F3C, 0xC, 0x18, 0x7000, 0xA82A);
  2514. extern pascal ComponentResult NAResetNoteChannel(NoteAllocator na, NoteChannel noteChannel)
  2515.  FIVEWORDINLINE(0x2F3C, 0x4, 0xC, 0x7000, 0xA82A);
  2516. extern pascal ComponentResult NASetNoteChannelVolume(NoteAllocator na, NoteChannel noteChannel, Fixed volume)
  2517.  FIVEWORDINLINE(0x2F3C, 0x8, 0xB, 0x7000, 0xA82A);
  2518. extern pascal ComponentResult NASetAtomicInstrument(NoteAllocator na, NoteChannel noteChannel, AtomicInstrumentPtr instrument, long flags)
  2519.  FIVEWORDINLINE(0x2F3C, 0xC, 0x26, 0x7000, 0xA82A);
  2520. /*
  2521.  * Control
  2522.  */
  2523. extern pascal ComponentResult NAPlayNote(NoteAllocator na, NoteChannel noteChannel, long pitch, long velocity)
  2524.  FIVEWORDINLINE(0x2F3C, 0xC, 0xD, 0x7000, 0xA82A);
  2525. extern pascal ComponentResult NAPlayNote2(NoteAllocator na, NoteChannel noteChannel, long pitch, long velocity, TimeValue offTime)
  2526.  FIVEWORDINLINE(0x2F3C, 0x10, 0x20, 0x7000, 0xA82A);
  2527. extern pascal ComponentResult NASetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long controllerValue)
  2528.  FIVEWORDINLINE(0x2F3C, 0xC, 0xE, 0x7000, 0xA82A);
  2529. extern pascal ComponentResult NASetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long knobValue)
  2530.  FIVEWORDINLINE(0x2F3C, 0xC, 0xF, 0x7000, 0xA82A);
  2531. extern pascal ComponentResult NAFindNoteChannelTone(NoteAllocator na, NoteChannel noteChannel, ToneDescription *td, long *instrumentNumber)
  2532.  FIVEWORDINLINE(0x2F3C, 0xC, 0x10, 0x7000, 0xA82A);
  2533. extern pascal ComponentResult NASetInstrumentNumber(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  2534.  FIVEWORDINLINE(0x2F3C, 0x8, 0x11, 0x7000, 0xA82A);
  2535. extern pascal ComponentResult NASetNoteChannelInstrument(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
  2536.  FIVEWORDINLINE(0x2F3C, 0x8, 0x11, 0x7000, 0xA82A);
  2537. extern pascal ComponentResult NASendMIDI(NoteAllocator na, NoteChannel noteChannel, MusicMIDIPacket *mp)
  2538.  FIVEWORDINLINE(0x2F3C, 0x8, 0x23, 0x7000, 0xA82A);
  2539. /*
  2540.  * User Interface
  2541.  */
  2542. extern pascal ComponentResult NAPickInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, ToneDescription *sd, unsigned long flags, long refCon, long reserved1, long reserved2)
  2543.  FIVEWORDINLINE(0x2F3C, 0x1C, 0x12, 0x7000, 0xA82A);
  2544. extern pascal ComponentResult NAStuffToneDescription(NoteAllocator na, long gmNumber, ToneDescription *td)
  2545.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1B, 0x7000, 0xA82A);
  2546. extern pascal ComponentResult NAPickArrangement(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long partCount, NoteRequest *noteRequestList, Track t, StringPtr songName)
  2547.  FIVEWORDINLINE(0x2F3C, 0x18, 0x13, 0x7000, 0xA82A);
  2548. extern pascal ComponentResult NACopyrightDialog(NoteAllocator na, PicHandle p, StringPtr author, StringPtr copyright, StringPtr other, StringPtr title, ModalFilterUPP filterProc, long refCon)
  2549.  FIVEWORDINLINE(0x2F3C, 0x1C, 0x1C, 0x7000, 0xA82A);
  2550. extern pascal ComponentResult NAPickEditInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long refCon, NoteChannel nc, AtomicInstrument ai, long flags)
  2551.  FIVEWORDINLINE(0x2F3C, 0x18, 0x24, 0x7000, 0xA82A);
  2552. /*
  2553.  * Note Allocator interior views
  2554.  */
  2555. struct NAStatPiece {
  2556.     Str31                            clientName;
  2557.     Str31                            synthesizerName;
  2558.     long                            part;
  2559.     long                            midiChannel;
  2560.     long                            polyphony;
  2561.     long                            valid;
  2562. };
  2563. typedef struct NAStatPiece NAStatPiece;
  2564.  
  2565. struct NAStat {
  2566.     long                            pieceCount;
  2567.     NAStatPiece                        piece[64];
  2568. };
  2569. typedef struct NAStat NAStat;
  2570.  
  2571. extern pascal ComponentResult NAGetStatusBlock(NoteAllocator na, NAStat *stat)
  2572.  FIVEWORDINLINE(0x2F3C, 0x4, 0x14, 0x7000, 0xA82A);
  2573. extern pascal ComponentResult NAGetIndNoteChannel(NoteAllocator na, long index, NoteChannel *nc)
  2574.  FIVEWORDINLINE(0x2F3C, 0x8, 0x1F, 0x7000, 0xA82A);
  2575. /*--------------------------
  2576.     Types
  2577. --------------------------*/
  2578.  
  2579. enum {
  2580.     kTuneQueueDepth                = 8                                /* Deepest you can queue tune segments */
  2581. };
  2582.  
  2583. struct TuneStatus {
  2584.     unsigned long                    *tune;                        /* currently playing tune */
  2585.     unsigned long                    *tunePtr;                    /* position within currently playing piece */
  2586.     TimeValue                        time;                        /* current tune time */
  2587.     short                            queueCount;                    /* how many pieces queued up? */
  2588.     short                            queueSpots;                    /* How many more tunepieces can be queued */
  2589.     TimeValue                        queueTime;                    /* How much time is queued up? (can be very inaccurate) */
  2590.     long                            reserved[3];
  2591. };
  2592. typedef struct TuneStatus TuneStatus;
  2593.  
  2594.  
  2595. enum {
  2596.     kStopTuneFade                = 1,                            /* do a quick, synchronous fadeout */
  2597.     kStopTuneSustain            = 2,                            /* don't silece notes */
  2598.     kStopTuneInstant            = 4,                            /* silence notes fast (else, decay them) */
  2599.     kStopTuneReleaseChannels    = 8                                /* afterwards, let the channels go */
  2600. };
  2601.  
  2602. enum {
  2603.     kTuneSelect                    = 3,
  2604.     kTuneSetHeaderSelect,
  2605.     kTuneGetTimeBaseSelect,
  2606.     kTuneSetTimeScaleSelect,
  2607.     kTuneGetTimeScaleSelect,
  2608.     kTuneGetIndexedNoteChannelSelect,
  2609.     kTuneDummy,
  2610.     kTuneQueueSelect,
  2611.     kTuneInstantSelect,
  2612.     kTuneGetStatusSelect,
  2613.     kTuneStopSelect,
  2614.     kTuneResumeSelect,
  2615.     kTuneFlushSelect,
  2616.     kTuneSetVolumeSelect,
  2617.     kTuneGetVolumeSelect,
  2618.     kTunePrerollSelect,
  2619.     kTuneUnrollSelect,
  2620.     kTuneSetNoteChannelsSelect,
  2621.     kTuneSetPartTransposeSelect,
  2622.     kTuneGetStateSelect,
  2623.     kTuneLastSelector
  2624. };
  2625.  
  2626. typedef pascal void (*TuneCallBackProcPtr)(const TuneStatus *status, long refCon);
  2627. typedef pascal void (*TunePlayCallBackProcPtr)(unsigned long *event, long seed, long refCon);
  2628.  
  2629. #if GENERATINGCFM
  2630. typedef UniversalProcPtr TuneCallBackUPP;
  2631. typedef UniversalProcPtr TunePlayCallBackUPP;
  2632. #else
  2633. typedef TuneCallBackProcPtr TuneCallBackUPP;
  2634. typedef TunePlayCallBackProcPtr TunePlayCallBackUPP;
  2635. #endif
  2636.  
  2637. typedef ComponentInstance TunePlayer;
  2638.  
  2639.  
  2640. enum {
  2641.     kMaxTunePlayerParts            = 32,
  2642.     kTunePlayerType                = 'tune'
  2643. };
  2644.  
  2645. /*--------------------------
  2646.     Prototypes
  2647. --------------------------*/
  2648. extern pascal ComponentResult TuneSetHeader(TunePlayer tp, unsigned long *header)
  2649.  FIVEWORDINLINE(0x2F3C, 0x4, 0x4, 0x7000, 0xA82A);
  2650. extern pascal ComponentResult TuneSetNoteChannels(TunePlayer tp, unsigned long count, NoteChannel *noteChannelList, TunePlayCallBackUPP playCallBackProc, long refCon)
  2651.  FIVEWORDINLINE(0x2F3C, 0x10, 0x14, 0x7000, 0xA82A);
  2652. extern pascal ComponentResult TuneSetPartTranspose(TunePlayer tp, unsigned long part, long transpose, long velocityShift)
  2653.  FIVEWORDINLINE(0x2F3C, 0xC, 0x15, 0x7000, 0xA82A);
  2654. extern pascal ComponentResult TuneGetTimeBase(TunePlayer tp, TimeBase *tb)
  2655.  FIVEWORDINLINE(0x2F3C, 0x4, 0x5, 0x7000, 0xA82A);
  2656. extern pascal ComponentResult TuneSetTimeScale(TunePlayer tp, TimeScale scale)
  2657.  FIVEWORDINLINE(0x2F3C, 0x4, 0x6, 0x7000, 0xA82A);
  2658. extern pascal ComponentResult TuneGetTimeScale(TunePlayer tp, TimeScale *scale)
  2659.  FIVEWORDINLINE(0x2F3C, 0x4, 0x7, 0x7000, 0xA82A);
  2660. extern pascal ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc)
  2661.  FIVEWORDINLINE(0x2F3C, 0x8, 0x8, 0x7000, 0xA82A);
  2662. /* Values for when to start. */
  2663.  
  2664. enum {
  2665.     kTuneStartNow                = 1,                            /* start after buffer is implied */
  2666.     kTuneDontClipNotes            = 2,                            /* allow notes to finish their durations outside sample */
  2667.     kTuneExcludeEdgeNotes        = 4,                            /* dont play notes that start at end of tune */
  2668.     kTuneQuickStart                = 8,                            /* Leave all the controllers where they are, ignore start time */
  2669.     kTuneLoopUntil                = 16,                            /* loop a queued tune if there's nothing else in the queue */
  2670.     kTuneStartNewMaster            = 16384
  2671. };
  2672.  
  2673. extern pascal ComponentResult TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate, unsigned long tuneStartPosition, unsigned long tuneStopPosition, unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon)
  2674.  FIVEWORDINLINE(0x2F3C, 0x1C, 0xA, 0x7000, 0xA82A);
  2675. extern pascal ComponentResult TuneInstant(TunePlayer tp, unsigned long *tune, long tunePosition)
  2676.  FIVEWORDINLINE(0x2F3C, 0x8, 0xB, 0x7000, 0xA82A);
  2677. extern pascal ComponentResult TuneGetStatus(TunePlayer tp, TuneStatus *status)
  2678.  FIVEWORDINLINE(0x2F3C, 0x4, 0xC, 0x7000, 0xA82A);
  2679. /* Values for when to start. */
  2680.  
  2681. enum {
  2682.     kStopSustain                = 1,                            /* Leaves notes playing, not silent */
  2683.     kStopFadeout                = 2                                /* Does a synchronous fade-out */
  2684. };
  2685.  
  2686. extern pascal ComponentResult TuneStop(TunePlayer tp, long stopFlags)
  2687.  FIVEWORDINLINE(0x2F3C, 0x4, 0xD, 0x7000, 0xA82A);
  2688. extern pascal ComponentResult TuneResume(TunePlayer tp)
  2689.  FIVEWORDINLINE(0x2F3C, 0, 0xE, 0x7000, 0xA82A);
  2690. extern pascal ComponentResult TuneFlush(TunePlayer tp)
  2691.  FIVEWORDINLINE(0x2F3C, 0, 0xF, 0x7000, 0xA82A);
  2692. extern pascal ComponentResult TuneSetVolume(TunePlayer tp, Fixed volume)
  2693.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10, 0x7000, 0xA82A);
  2694. extern pascal ComponentResult TuneGetVolume(TunePlayer tp)
  2695.  FIVEWORDINLINE(0x2F3C, 0, 0x11, 0x7000, 0xA82A);
  2696. extern pascal ComponentResult TunePreroll(TunePlayer tp)
  2697.  FIVEWORDINLINE(0x2F3C, 0, 0x12, 0x7000, 0xA82A);
  2698. extern pascal ComponentResult TuneUnroll(TunePlayer tp)
  2699.  FIVEWORDINLINE(0x2F3C, 0, 0x13, 0x7000, 0xA82A);
  2700. extern pascal ComponentResult TuneGetState(TunePlayer tp, TimeValue t, Handle *state)
  2701.  FIVEWORDINLINE(0x2F3C, 0x8, 0x16, 0x7000, 0xA82A);
  2702. typedef unsigned long MusicOpWord, *MusicOpWordPtr;
  2703.  
  2704. /*     QuickTime Music Track Event Formats:
  2705.  
  2706.     At this time, QuickTime music tracks support 5 different event types -- REST events,
  2707.     short NOTE events, short CONTROL events, short GENERAL events, Long NOTE events, 
  2708.     long CONTROL events, and variable GENERAL events.
  2709.  
  2710.         • REST Event (4 bytes/event):
  2711.     
  2712.             (0 0 0) (5-bit UNUSED) (24-bit Rest Duration)
  2713.         
  2714.         • Short NOTE Events (4 bytes/event):
  2715.     
  2716.             (0 0 1) (5-bit Part) (6-bit Pitch) (7-bit Volume) (11-bit Duration)
  2717.         
  2718.             where:    Pitch is offset by 32 (Actual pitch = pitch field + 32)
  2719.  
  2720.         • Short CONTROL Events (4 bytes/event):
  2721.     
  2722.             (0 1 0) (5-bit Part) (8-bit Controller) (1-bit UNUSED) (1-bit Sign) (7-bit MSB) (7-bit LSB)
  2723.                                                                          ( or 15-bit Signed Value)
  2724.         • Short GENERAL Event (4 bytes/event):
  2725.     
  2726.             (0 1 1) (1-bit UNUSED) (12-bit Sub-Type) (16-bit Value)
  2727.     
  2728.         • Long NOTE Events (8 bytes/event):
  2729.     
  2730.             (1 0 0 1) (12-bit Part) (1-bit UNUSED) (7-bit Pitch) (1-bit UNUSED) (7-bit Volume)
  2731.             (1 0) (8-bit UNUSED) (22-bit Duration)
  2732.         
  2733.         • Long CONTROL Event (8 bytes/event):
  2734.         
  2735.             (1 0 1 0) (12-bit Part) (16-bit Value MSB) 
  2736.             (1 0) (14-bit Controller) (16-bit Value LSB)
  2737.     
  2738.         • Long KNOB Event (8 bytes/event):
  2739.     
  2740.             (1 0 1 1) (12-bit Sub-Type) (16-bit Value MSB)
  2741.             (1 0) (14-bit KNOB) (16-bit Value LSB)
  2742.     
  2743.         • Variable GENERAL Length Events (N bytes/event):
  2744.     
  2745.             (1 1 1 1) (12-bit Sub-Type) (16-bit Length)
  2746.                 :
  2747.             (32-bit Data values)
  2748.                 :
  2749.             (1 1) (14-bit UNUSED) (16-bit Length)
  2750.     
  2751.             where:    Length field is the number of LONG words in the record.
  2752.                     Lengths include the first and last long words (Minimum length = 2)
  2753.                 
  2754.     The following event type values have not been used yet and are reserved for 
  2755.     future expansion:
  2756.         
  2757.         • (1 0 0 0)        (8 bytes/event)
  2758.         • (1 1 0 0)        (N bytes/event)
  2759.         • (1 1 0 1)        (N bytes/event)
  2760.         • (1 1 1 0)        (N bytes/event)
  2761.         
  2762.     For all events, the following generalizations apply:
  2763.     
  2764.         -    All duration values are specified in Millisecond units.
  2765.         -     Pitch values are intended to map directly to the MIDI key numbers.
  2766.         -    Controllers from 0 to 127 correspond to the standard MIDI controllers.
  2767.             Controllers greater than 127 correspond to other controls (i.e., Pitch Bend, 
  2768.             Key Pressure, and Channel Pressure).    
  2769. */
  2770. /* Defines for the implemented music event data fields*/
  2771.  
  2772. enum {
  2773.     kRestEventType                = 0x0L,                            /* lower 3-bits */
  2774.     kNoteEventType                = 0x1L,                            /* lower 3-bits */
  2775.     kControlEventType            = 0x2L,                            /* lower 3-bits */
  2776.     kMarkerEventType            = 0x3L,                            /* lower 3-bits */
  2777.     kUndefined1EventType        = 0x8L,                            /* 4-bits */
  2778.     kXNoteEventType                = 0x9L,                            /* 4-bits */
  2779.     kXControlEventType            = 0xAL,                            /* 4-bits */
  2780.     kKnobEventType                = 0xBL,                            /* 4-bits */
  2781.     kUndefined2EventType        = 0xCL,                            /* 4-bits */
  2782.     kUndefined3EventType        = 0xDL,                            /* 4-bits */
  2783.     kUndefined4EventType        = 0xEL,                            /* 4-bits */
  2784.     kGeneralEventType            = 0xFL,                            /* 4-bits */
  2785.     kXEventLengthBits            = 0x2L,                            /* 2 bits: indicates 8-byte event record */
  2786.     kGeneralEventLengthBits        = 0x3L,                            /* 2 bits: indicates variable length event record */
  2787.     kEventLen                    = 1L,                            /* length of events in long words */
  2788.     kXEventLen                    = 2L,
  2789.     kRestEventLen                = kEventLen,                    /* length of events in long words */
  2790.     kNoteEventLen                = kEventLen,
  2791.     kControlEventLen            = kEventLen,
  2792.     kMarkerEventLen                = kEventLen,
  2793.     kXNoteEventLen                = kXEventLen,
  2794.     kXControlEventLen            = kXEventLen,
  2795.     kGeneralEventLen            = kXEventLen,                    /* 2 or more, however */
  2796. /* Universal Event Defines*/
  2797.     kEventLengthFieldPos        = 30,                            /* by looking at these two bits of the 1st or last word              */
  2798.     kEventLengthFieldWidth        = 2,                            /* of an event you can determine the event length                      */
  2799. /* length field: 0 & 1 => 1 long; 2 => 2 longs; 3 => variable length */
  2800.     kEventTypeFieldPos            = 29,                            /* event type field for short events */
  2801.     kEventTypeFieldWidth        = 3,                            /* short type is 3 bits */
  2802.     kXEventTypeFieldPos            = 28,                            /* event type field for extended events */
  2803.     kXEventTypeFieldWidth        = 4,                            /* extended type is 4 bits */
  2804.     kEventPartFieldPos            = 24,
  2805.     kEventPartFieldWidth        = 5,
  2806.     kXEventPartFieldPos            = 16,                            /* in the 1st long word */
  2807.     kXEventPartFieldWidth        = 12,
  2808. /* Rest Events*/
  2809.     kRestEventDurationFieldPos    = 0,
  2810.     kRestEventDurationFieldWidth = 24,
  2811.     kRestEventDurationMax        = ((1L << kRestEventDurationFieldWidth) - 1),
  2812. /* Note Events*/
  2813.     kNoteEventPitchFieldPos        = 18,
  2814.     kNoteEventPitchFieldWidth    = 6,
  2815.     kNoteEventPitchOffset        = 32,                            /* add to value in pitch field to get actual pitch */
  2816.     kNoteEventVolumeFieldPos    = 11,
  2817.     kNoteEventVolumeFieldWidth    = 7,
  2818.     kNoteEventVolumeOffset        = 0,                            /* add to value in volume field to get actual volume */
  2819.     kNoteEventDurationFieldPos    = 0,
  2820.     kNoteEventDurationFieldWidth = 11,
  2821.     kNoteEventDurationMax        = ((1L << kNoteEventDurationFieldWidth) - 1),
  2822.     kXNoteEventPitchFieldPos    = 0,                            /* in the 1st long word */
  2823.     kXNoteEventPitchFieldWidth    = 16,
  2824.     kXNoteEventDurationFieldPos    = 0,                            /* in the 2nd long word */
  2825.     kXNoteEventDurationFieldWidth = 22,
  2826.     kXNoteEventDurationMax        = ((1L << kXNoteEventDurationFieldWidth) - 1),
  2827.     kXNoteEventVolumeFieldPos    = 22,                            /* in the 2nd long word */
  2828.     kXNoteEventVolumeFieldWidth    = 7,
  2829. /* Control Events*/
  2830.     kControlEventControllerFieldPos = 16,
  2831.     kControlEventControllerFieldWidth = 8,
  2832.     kControlEventValueFieldPos    = 0,
  2833.     kControlEventValueFieldWidth = 16,
  2834.     kXControlEventControllerFieldPos = 0,                        /* in the 2nd long word */
  2835.     kXControlEventControllerFieldWidth = 16,
  2836.     kXControlEventValueFieldPos    = 0,                            /* in the 1st long word */
  2837.     kXControlEventValueFieldWidth = 16,
  2838. /* Knob Events*/
  2839.     kKnobEventValueHighFieldPos    = 0,                            /* 1st long word */
  2840.     kKnobEventValueHighFieldWidth = 16,
  2841.     kKnobEventKnobFieldPos        = 16,                            /* 2nd long word */
  2842.     kKnobEventKnobFieldWidth    = 14,
  2843.     kKnobEventValueLowFieldPos    = 0,                            /* 2nd long word */
  2844.     kKnobEventValueLowFieldWidth = 16,
  2845. /* Marker Events*/
  2846.     kMarkerEventSubtypeFieldPos    = 16,
  2847.     kMarkerEventSubtypeFieldWidth = 8,
  2848.     kMarkerEventValueFieldPos    = 0,
  2849.     kMarkerEventValueFieldWidth    = 16,
  2850. /* General Events*/
  2851.     kGeneralEventSubtypeFieldPos = 16,                            /* in the last long word */
  2852.     kGeneralEventSubtypeFieldWidth = 14,
  2853.     kGeneralEventLengthFieldPos    = 0,                            /* in the 1st & last long words */
  2854.     kGeneralEventLengthFieldWidth = 16
  2855. };
  2856.  
  2857. #define MASK(bitWidth) ((1L << (bitWidth)) - 1)
  2858. #define EXT(val, pos, width) (((val) >> (pos)) & MASK(width))
  2859. #define _EventLength(x) ((EXT(x, kEventLengthFieldPos,  \
  2860.     kEventLengthFieldWidth) < 2) ? 1 :  \
  2861.     ((EXT(x, kEventLengthFieldPos, kEventLengthFieldWidth) == 2) ? 2 :  \
  2862.     EXT(x, kGeneralEventLengthFieldPos, kGeneralEventLengthFieldWidth)))
  2863. #define _EventType(x) ((EXT(x, kEventTypeFieldPos, kEventTypeFieldWidth) > 3) ? EXT(x, kXEventTypeFieldPos, kXEventTypeFieldWidth) : EXT(x, kEventTypeFieldPos, kEventTypeFieldWidth))
  2864. #define _RestDuration(x) (EXT(x, kRestEventDurationFieldPos, kRestEventDurationFieldWidth))
  2865. #define _Part(x) (EXT(x, kEventPartFieldPos, kEventPartFieldWidth))
  2866. #define _XPart(m, l) (EXT(m, kXEventPartFieldPos, kXEventPartFieldWidth))
  2867. #define _NotePitch(x) (EXT(x, kNoteEventPitchFieldPos, kNoteEventPitchFieldWidth) + kNoteEventPitchOffset)
  2868. #define _NoteVolume(x) (EXT(x, kNoteEventVolumeFieldPos, kNoteEventVolumeFieldWidth) + kNoteEventVolumeOffset)
  2869. #define _NoteDuration(x) (EXT(x, kNoteEventDurationFieldPos, kNoteEventDurationFieldWidth))
  2870. #define _NoteVelocity _NoteVolume
  2871. #define _XNotePitch(m, l) (EXT(m, kXNoteEventPitchFieldPos, kXNoteEventPitchFieldWidth))
  2872. #define _XNoteVolume(m, l) (EXT(l, kXNoteEventVolumeFieldPos, kXNoteEventVolumeFieldWidth))
  2873. #define _XNoteDuration(m, l) (EXT(l, kXNoteEventDurationFieldPos, kXNoteEventDurationFieldWidth))
  2874. #define _XNoteVelocity _XNoteVolume
  2875. #define _ControlController(x) (EXT(x, kControlEventControllerFieldPos, kControlEventControllerFieldWidth))
  2876. #define _ControlValue(x) (EXT(x, kControlEventValueFieldPos, kControlEventValueFieldWidth))
  2877. #define _XControlController(m, l) (EXT(l, kXControlEventControllerFieldPos, kXControlEventControllerFieldWidth))
  2878. #define _XControlValue(m, l) (EXT(m, kXControlEventValueFieldPos, kXControlEventValueFieldWidth))
  2879. #define _MarkerSubtype(x) (EXT(x,kMarkerEventSubtypeFieldPos,kMarkerEventSubtypeFieldWidth))
  2880. #define _MarkerValue(x) (EXT(x, kMarkerEventValueFieldPos, kMarkerEventValueFieldWidth))
  2881. #define _KnobValue(m, l) ((EXT(m,kKnobEventValueHighFieldPos,kKnobEventValueHighFieldWidth) << 16)     \
  2882.     | (EXT(l,kKnobEventValueLowFieldPos,kKnobEventValueLowFieldWidth)))
  2883. #define _KnobKnob(m, l) (EXT(l,kKnobEventKnobFieldPos,kKnobEventKnobFieldWidth))
  2884. #define _GeneralSubtype(m, l) (EXT(l,kGeneralEventSubtypeFieldPos,kGeneralEventSubtypeFieldWidth))
  2885. #define _GeneralLength(m, l) (EXT(m,kGeneralEventLengthFieldPos,kGeneralEventLengthFieldWidth))
  2886. #define _StuffRestEvent(x, duration)  \
  2887.     x = (kRestEventType << kEventTypeFieldPos)     \
  2888.     |    ((long)(duration) << kRestEventDurationFieldPos)
  2889. #define _StuffNoteEvent(x, part, pitch, volume, duration)  \
  2890.     x = (kNoteEventType << kEventTypeFieldPos)     \
  2891.     | ((long)(part) << kEventPartFieldPos)     \
  2892.     |    (((long)(pitch) - kNoteEventPitchOffset) << kNoteEventPitchFieldPos)     \
  2893.     |    (((long)(volume) - kNoteEventVolumeOffset) << kNoteEventVolumeFieldPos)     \
  2894.     |    ((long)(duration) << kNoteEventDurationFieldPos)
  2895. #define _StuffControlEvent(x, part, control, value)  \
  2896.     x = (kControlEventType << kEventTypeFieldPos)     \
  2897.     | ((long)(part) << kEventPartFieldPos)     \
  2898.     |    ((long)(control) << kControlEventControllerFieldPos)     \
  2899.     |    ((long)((value) & MASK(kControlEventValueFieldWidth)) << kControlEventValueFieldPos)
  2900. #define _StuffXNoteEvent(w1, w2, part, pitch, volume, duration)  \
  2901.     w1 = (kXNoteEventType << kXEventTypeFieldPos)     \
  2902.     |    ((long)(part) << kXEventPartFieldPos)     \
  2903.     |    ((long)(pitch) << kXNoteEventPitchFieldPos),     \
  2904.     w2 =    (kXEventLengthBits << kEventLengthFieldPos)     \
  2905.     |    ((long)(duration) << kXNoteEventDurationFieldPos)     \
  2906.     |    ((long)(volume) << kXNoteEventVolumeFieldPos)    
  2907. #define _StuffXControlEvent(w1, w2, part, control, value)  \
  2908.     w1 = (kXControlEventType << kXEventTypeFieldPos)     \
  2909.     |    ((long)(part) << kXEventPartFieldPos)     \
  2910.     |    ((long)((value) & MASK(kXControlEventValueFieldWidth)) << kXControlEventValueFieldPos),  \
  2911.     w2 =    (kXEventLengthBits << kEventLengthFieldPos)     \
  2912.     |    ((long)(control) << kXControlEventControllerFieldPos)
  2913. #define _StuffKnobEvent(w1, w2, part, knob, value)  \
  2914.     w1 =    (kKnobEventType << kXEventTypeFieldPos)     \
  2915.     |    ((long)(part) << kXEventPartFieldPos)     \
  2916.     |    ((long)(value >> 16) << kKnobEventValueLowFieldPos),     \
  2917.     w2 =    (kXEventLengthBits << kEventLengthFieldPos)     \
  2918.     |    ((long)(knob) << kKnobEventKnobFieldPos)     \
  2919.     |    ((long)(value & 0xFFFF) << kKnobEventValueLowFieldPos)
  2920. #define _StuffGeneralEvent(w1, w2, part, subType, length)  \
  2921.     w1 =    (kGeneralEventType << kXEventTypeFieldPos)     \
  2922.     |    ((long)(part) << kXEventPartFieldPos)     \
  2923.     |    ((long)(length) << kGeneralEventLengthFieldPos),     \
  2924.     w2 =    (kGeneralEventLengthBits << kEventLengthFieldPos)     \
  2925.     |    ((long)(subType) << kGeneralEventSubtypeFieldPos)     \
  2926.     |    ((long)(length) << kGeneralEventLengthFieldPos)
  2927. enum {
  2928.     kGeneralEventNoteRequest    = 1,                            /* Encapsulates NoteRequest data structure */
  2929.     kGeneralEventInstrument        = 2,                            /* Encapsulates poly, typical poly, followed by InstrumentData record */
  2930.     kGeneralEventFlatInstrument    = 3,                            /* Encapsulates poly, typical poly, followed by FlatInstrument record */
  2931.     kGeneralEventPartKey        = 4,
  2932.     kGeneralEventTuneDifference    = 5,                            /* Contains a standard sequence, with end marker, for the tune difference of a sequence piece */
  2933.     kGeneralEventAtomicInstrument = 6                            /* Encapsulates AtomicInstrument record */
  2934. };
  2935.  
  2936. enum {
  2937.     TCSourceRefNameType            = 'name'
  2938. };
  2939.  
  2940. enum {
  2941.     tcDropFrame                    = 1 << 0,
  2942.     tc24HourMax                    = 1 << 1,
  2943.     tcNegTimesOK                = 1 << 2,
  2944.     tcCounter                    = 1 << 3
  2945. };
  2946.  
  2947. struct TimeCodeDef {
  2948.     long                            flags;                        /* drop-frame, etc.*/
  2949.     TimeScale                        fTimeScale;                    /* time scale of frameDuration (eg. 2997)*/
  2950.     TimeValue                        frameDuration;                /* duration of each frame (eg. 100)*/
  2951.     UInt8                            numFrames;                    /* frames/sec for timecode (eg. 30) OR frames/tick for counter mode*/
  2952.     UInt8                            padding;                    /* unused padding byte*/
  2953. };
  2954. typedef struct TimeCodeDef TimeCodeDef;
  2955.  
  2956.  
  2957. enum {
  2958.     tctNegFlag                    = 0x80                            /* negative bit is in minutes*/
  2959. };
  2960.  
  2961. struct TimeCodeTime {
  2962.     UInt8                            hours;
  2963.     UInt8                            minutes;
  2964.     UInt8                            seconds;
  2965.     UInt8                            frames;
  2966. };
  2967. typedef struct TimeCodeTime TimeCodeTime;
  2968.  
  2969. struct TimeCodeCounter {
  2970.     long                            counter;
  2971. };
  2972. typedef struct TimeCodeCounter TimeCodeCounter;
  2973.  
  2974. union TimeCodeRecord {
  2975.     TimeCodeTime                    t;
  2976.     TimeCodeCounter                    c;
  2977. };
  2978. typedef union TimeCodeRecord TimeCodeRecord;
  2979.  
  2980. struct TimeCodeDescription {
  2981.     long                            descSize;                    /* standard sample description header*/
  2982.     long                            dataFormat;
  2983.     long                            resvd1;
  2984.     short                            resvd2;
  2985.     short                            dataRefIndex;
  2986.     long                            flags;                        /* timecode specific stuff*/
  2987.     TimeCodeDef                        timeCodeDef;
  2988.     long                            srcRef[1];
  2989. };
  2990. typedef struct TimeCodeDescription TimeCodeDescription;
  2991.  
  2992. typedef TimeCodeDescription *TimeCodeDescriptionPtr;
  2993.  
  2994. typedef TimeCodeDescriptionPtr *TimeCodeDescriptionHandle;
  2995.  
  2996.  
  2997. enum {
  2998.     tcdfShowTimeCode            = 1 << 0
  2999. };
  3000.  
  3001. enum {
  3002.     kTCGetCurrentTimeCodeSelect    = 257,
  3003.     kTCGetTimeCodeAtTimeSelect,
  3004.     kTCTimeCodeToStringSelect,
  3005.     kTCTimeCodeToFrameNumberSelect,
  3006.     kTCFrameNumberToTimeCodeSelect,
  3007.     kTCGetSourceRefSelect,
  3008.     kTCSetSourceRefSelect,
  3009.     kTCSetTimeCodeFlagsSelect,
  3010.     kTCGetTimeCodeFlagsSelect,
  3011.     kTCSetDisplayOptionsSelect,
  3012.     kTCGetDisplayOptionsSelect
  3013. };
  3014.  
  3015. struct TCTextOptions {
  3016.     short                            txFont;
  3017.     short                            txFace;
  3018.     short                            txSize;
  3019.     RGBColor                        foreColor;
  3020.     RGBColor                        backColor;
  3021. };
  3022. typedef struct TCTextOptions TCTextOptions;
  3023.  
  3024. typedef TCTextOptions *TCTextOptionsPtr;
  3025.  
  3026. extern pascal HandlerError TCGetCurrentTimeCode(MediaHandler mh, long *frameNum, TimeCodeDef *tcdef, TimeCodeRecord *tcrec, UserData *srcRefH)
  3027.  FIVEWORDINLINE(0x2F3C, 0x10, 0x101, 0x7000, 0xA82A);
  3028. extern pascal HandlerError TCGetTimeCodeAtTime(MediaHandler mh, TimeValue mediaTime, long *frameNum, TimeCodeDef *tcdef, TimeCodeRecord *tcdata, UserData *srcRefH)
  3029.  FIVEWORDINLINE(0x2F3C, 0x14, 0x102, 0x7000, 0xA82A);
  3030. extern pascal HandlerError TCTimeCodeToFrameNumber(MediaHandler mh, TimeCodeDef *tcdef, TimeCodeRecord *tcrec, long *frameNumber)
  3031.  FIVEWORDINLINE(0x2F3C, 0xC, 0x104, 0x7000, 0xA82A);
  3032. extern pascal HandlerError TCFrameNumberToTimeCode(MediaHandler mh, long frameNumber, TimeCodeDef *tcdef, TimeCodeRecord *tcrec)
  3033.  FIVEWORDINLINE(0x2F3C, 0xC, 0x105, 0x7000, 0xA82A);
  3034. extern pascal HandlerError TCTimeCodeToString(MediaHandler mh, TimeCodeDef *tcdef, TimeCodeRecord *tcrec, StringPtr tcStr)
  3035.  FIVEWORDINLINE(0x2F3C, 0xC, 0x103, 0x7000, 0xA82A);
  3036. extern pascal HandlerError TCGetSourceRef(MediaHandler mh, TimeCodeDescriptionHandle tcdH, UserData *srefH)
  3037.  FIVEWORDINLINE(0x2F3C, 0x8, 0x106, 0x7000, 0xA82A);
  3038. extern pascal HandlerError TCSetSourceRef(MediaHandler mh, TimeCodeDescriptionHandle tcdH, UserData srefH)
  3039.  FIVEWORDINLINE(0x2F3C, 0x8, 0x107, 0x7000, 0xA82A);
  3040. extern pascal HandlerError TCSetTimeCodeFlags(MediaHandler mh, long flags, long flagsMask)
  3041.  FIVEWORDINLINE(0x2F3C, 0x8, 0x108, 0x7000, 0xA82A);
  3042. extern pascal HandlerError TCGetTimeCodeFlags(MediaHandler mh, long *flags)
  3043.  FIVEWORDINLINE(0x2F3C, 0x4, 0x109, 0x7000, 0xA82A);
  3044. extern pascal HandlerError TCSetDisplayOptions(MediaHandler mh, TCTextOptionsPtr textOptions)
  3045.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10A, 0x7000, 0xA82A);
  3046. extern pascal HandlerError TCGetDisplayOptions(MediaHandler mh, TCTextOptionsPtr textOptions)
  3047.  FIVEWORDINLINE(0x2F3C, 0x4, 0x10B, 0x7000, 0xA82A);
  3048. /* UPP call backs */
  3049.  
  3050. #if GENERATINGCFM
  3051. #else
  3052. #endif
  3053.  
  3054. enum {
  3055.     uppSGDataProcInfo = kPascalStackBased
  3056.          | RESULT_SIZE(SIZE_CODE(sizeof(OSErr)))
  3057.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3058.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Ptr)))
  3059.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
  3060.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long*)))
  3061.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
  3062.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(TimeValue)))
  3063.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(short)))
  3064.          | STACK_ROUTINE_PARAMETER(8, SIZE_CODE(sizeof(long))),
  3065.     uppSGModalFilterProcInfo = kPascalStackBased
  3066.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  3067.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  3068.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(EventRecord*)))
  3069.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short*)))
  3070.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long))),
  3071.     uppSGGrabProcInfo = kPascalStackBased
  3072.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3073.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3074.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  3075.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))),
  3076.     uppSGGrabCompleteProcInfo = kPascalStackBased
  3077.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3078.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3079.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  3080.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean*)))
  3081.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long))),
  3082.     uppSGDisplayProcInfo = kPascalStackBased
  3083.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3084.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3085.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  3086.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(MatrixRecord*)))
  3087.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(RgnHandle)))
  3088.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))),
  3089.     uppSGCompressProcInfo = kPascalStackBased
  3090.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3091.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3092.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  3093.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))),
  3094.     uppSGCompressCompleteProcInfo = kPascalStackBased
  3095.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3096.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3097.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  3098.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean*)))
  3099.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(SGCompressInfo*)))
  3100.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))),
  3101.     uppSGAddFrameProcInfo = kPascalStackBased
  3102.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3103.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3104.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  3105.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(TimeValue)))
  3106.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TimeScale)))
  3107.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(SGCompressInfo*)))
  3108.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(long))),
  3109.     uppSGTransferFrameProcInfo = kPascalStackBased
  3110.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3111.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3112.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  3113.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(MatrixRecord*)))
  3114.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(RgnHandle)))
  3115.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))),
  3116.     uppSGGrabCompressCompleteProcInfo = kPascalStackBased
  3117.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3118.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3119.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean*)))
  3120.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(SGCompressInfo*)))
  3121.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(TimeRecord*)))
  3122.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))),
  3123.     uppSGDisplayCompressProcInfo = kPascalStackBased
  3124.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3125.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SGChannel)))
  3126.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Ptr)))
  3127.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ImageDescriptionHandle)))
  3128.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(MatrixRecord*)))
  3129.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(RgnHandle)))
  3130.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(long))),
  3131.     uppVdigIntProcInfo = kPascalStackBased
  3132.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))
  3133.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))),
  3134.     uppSCModalFilterProcInfo = kPascalStackBased
  3135.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  3136.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  3137.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(EventRecord*)))
  3138.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short*)))
  3139.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long))),
  3140.     uppSCModalHookProcInfo = kPascalStackBased
  3141.          | RESULT_SIZE(SIZE_CODE(sizeof(short)))
  3142.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  3143.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  3144.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void*)))
  3145.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long))),
  3146.     uppDataHCompletionProcInfo = kPascalStackBased
  3147.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Ptr)))
  3148.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  3149.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(OSErr))),
  3150.     uppMusicMIDISendProcInfo = kPascalStackBased
  3151.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3152.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MusicComponent)))
  3153.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  3154.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(MusicMIDIPacket*))),
  3155.     uppMusicMIDIReadHookProcInfo = kPascalStackBased
  3156.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3157.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(MusicMIDIPacket*)))
  3158.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))),
  3159.     uppMusicOfflineDataProcInfo = kPascalStackBased
  3160.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  3161.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Ptr)))
  3162.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  3163.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))),
  3164.     uppTuneCallBackProcInfo = kPascalStackBased
  3165.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(TuneStatus*)))
  3166.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))),
  3167.     uppTunePlayCallBackProcInfo = kPascalStackBased
  3168.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned long*)))
  3169.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  3170.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
  3171. };
  3172.  
  3173. #if GENERATINGCFM
  3174. #define NewSGDataProc(userRoutine)        \
  3175.         (SGDataUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGDataProcInfo, GetCurrentArchitecture())
  3176. #define NewSGModalFilterProc(userRoutine)        \
  3177.         (SGModalFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGModalFilterProcInfo, GetCurrentArchitecture())
  3178. #define NewSGGrabProc(userRoutine)        \
  3179.         (SGGrabUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGGrabProcInfo, GetCurrentArchitecture())
  3180. #define NewSGGrabCompleteProc(userRoutine)        \
  3181.         (SGGrabCompleteUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGGrabCompleteProcInfo, GetCurrentArchitecture())
  3182. #define NewSGDisplayProc(userRoutine)        \
  3183.         (SGDisplayUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGDisplayProcInfo, GetCurrentArchitecture())
  3184. #define NewSGCompressProc(userRoutine)        \
  3185.         (SGCompressUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGCompressProcInfo, GetCurrentArchitecture())
  3186. #define NewSGCompressCompleteProc(userRoutine)        \
  3187.         (SGCompressCompleteUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGCompressCompleteProcInfo, GetCurrentArchitecture())
  3188. #define NewSGAddFrameProc(userRoutine)        \
  3189.         (SGAddFrameUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGAddFrameProcInfo, GetCurrentArchitecture())
  3190. #define NewSGTransferFrameProc(userRoutine)        \
  3191.         (SGTransferFrameUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGTransferFrameProcInfo, GetCurrentArchitecture())
  3192. #define NewSGGrabCompressCompleteProc(userRoutine)        \
  3193.         (SGGrabCompressCompleteUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGGrabCompressCompleteProcInfo, GetCurrentArchitecture())
  3194. #define NewSGDisplayCompressProc(userRoutine)        \
  3195.         (SGDisplayCompressUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSGDisplayCompressProcInfo, GetCurrentArchitecture())
  3196. #define NewVdigIntProc(userRoutine)        \
  3197.         (VdigIntUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppVdigIntProcInfo, GetCurrentArchitecture())
  3198. #define NewSCModalFilterProc(userRoutine)        \
  3199.         (SCModalFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSCModalFilterProcInfo, GetCurrentArchitecture())
  3200. #define NewSCModalHookProc(userRoutine)        \
  3201.         (SCModalHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSCModalHookProcInfo, GetCurrentArchitecture())
  3202. #define NewDataHCompletionProc(userRoutine)        \
  3203.         (DataHCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDataHCompletionProcInfo, GetCurrentArchitecture())
  3204. #define NewMusicMIDISendProc(userRoutine)        \
  3205.         (MusicMIDISendUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMusicMIDISendProcInfo, GetCurrentArchitecture())
  3206. #define NewMusicMIDIReadHookProc(userRoutine)        \
  3207.         (MusicMIDIReadHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMusicMIDIReadHookProcInfo, GetCurrentArchitecture())
  3208. #define NewMusicOfflineDataProc(userRoutine)        \
  3209.         (MusicOfflineDataUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMusicOfflineDataProcInfo, GetCurrentArchitecture())
  3210. #define NewTuneCallBackProc(userRoutine)        \
  3211.         (TuneCallBackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTuneCallBackProcInfo, GetCurrentArchitecture())
  3212. #define NewTunePlayCallBackProc(userRoutine)        \
  3213.         (TunePlayCallBackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppTunePlayCallBackProcInfo, GetCurrentArchitecture())
  3214. #else
  3215. #define NewSGDataProc(userRoutine)        \
  3216.         ((SGDataUPP) (userRoutine))
  3217. #define NewSGModalFilterProc(userRoutine)        \
  3218.         ((SGModalFilterUPP) (userRoutine))
  3219. #define NewSGGrabProc(userRoutine)        \
  3220.         ((SGGrabUPP) (userRoutine))
  3221. #define NewSGGrabCompleteProc(userRoutine)        \
  3222.         ((SGGrabCompleteUPP) (userRoutine))
  3223. #define NewSGDisplayProc(userRoutine)        \
  3224.         ((SGDisplayUPP) (userRoutine))
  3225. #define NewSGCompressProc(userRoutine)        \
  3226.         ((SGCompressUPP) (userRoutine))
  3227. #define NewSGCompressCompleteProc(userRoutine)        \
  3228.         ((SGCompressCompleteUPP) (userRoutine))
  3229. #define NewSGAddFrameProc(userRoutine)        \
  3230.         ((SGAddFrameUPP) (userRoutine))
  3231. #define NewSGTransferFrameProc(userRoutine)        \
  3232.         ((SGTransferFrameUPP) (userRoutine))
  3233. #define NewSGGrabCompressCompleteProc(userRoutine)        \
  3234.         ((SGGrabCompressCompleteUPP) (userRoutine))
  3235. #define NewSGDisplayCompressProc(userRoutine)        \
  3236.         ((SGDisplayCompressUPP) (userRoutine))
  3237. #define NewVdigIntProc(userRoutine)        \
  3238.         ((VdigIntUPP) (userRoutine))
  3239. #define NewSCModalFilterProc(userRoutine)        \
  3240.         ((SCModalFilterUPP) (userRoutine))
  3241. #define NewSCModalHookProc(userRoutine)        \
  3242.         ((SCModalHookUPP) (userRoutine))
  3243. #define NewDataHCompletionProc(userRoutine)        \
  3244.         ((DataHCompletionUPP) (userRoutine))
  3245. #define NewMusicMIDISendProc(userRoutine)        \
  3246.         ((MusicMIDISendUPP) (userRoutine))
  3247. #define NewMusicMIDIReadHookProc(userRoutine)        \
  3248.         ((MusicMIDIReadHookUPP) (userRoutine))
  3249. #define NewMusicOfflineDataProc(userRoutine)        \
  3250.         ((MusicOfflineDataUPP) (userRoutine))
  3251. #define NewTuneCallBackProc(userRoutine)        \
  3252.         ((TuneCallBackUPP) (userRoutine))
  3253. #define NewTunePlayCallBackProc(userRoutine)        \
  3254.         ((TunePlayCallBackUPP) (userRoutine))
  3255. #endif
  3256.  
  3257. #if GENERATINGCFM
  3258. #define CallSGDataProc(userRoutine, c, p, len, offset, chRefCon, time, writeType, refCon)        \
  3259.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGDataProcInfo, (c), (p), (len), (offset), (chRefCon), (time), (writeType), (refCon))
  3260. #define CallSGModalFilterProc(userRoutine, theDialog, theEvent, itemHit, refCon)        \
  3261.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGModalFilterProcInfo, (theDialog), (theEvent), (itemHit), (refCon))
  3262. #define CallSGGrabProc(userRoutine, c, bufferNum, refCon)        \
  3263.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGGrabProcInfo, (c), (bufferNum), (refCon))
  3264. #define CallSGGrabCompleteProc(userRoutine, c, bufferNum, done, refCon)        \
  3265.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGGrabCompleteProcInfo, (c), (bufferNum), (done), (refCon))
  3266. #define CallSGDisplayProc(userRoutine, c, bufferNum, mp, clipRgn, refCon)        \
  3267.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGDisplayProcInfo, (c), (bufferNum), (mp), (clipRgn), (refCon))
  3268. #define CallSGCompressProc(userRoutine, c, bufferNum, refCon)        \
  3269.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGCompressProcInfo, (c), (bufferNum), (refCon))
  3270. #define CallSGCompressCompleteProc(userRoutine, c, bufferNum, done, ci, refCon)        \
  3271.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGCompressCompleteProcInfo, (c), (bufferNum), (done), (ci), (refCon))
  3272. #define CallSGAddFrameProc(userRoutine, c, bufferNum, atTime, scale, ci, refCon)        \
  3273.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGAddFrameProcInfo, (c), (bufferNum), (atTime), (scale), (ci), (refCon))
  3274. #define CallSGTransferFrameProc(userRoutine, c, bufferNum, mp, clipRgn, refCon)        \
  3275.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGTransferFrameProcInfo, (c), (bufferNum), (mp), (clipRgn), (refCon))
  3276. #define CallSGGrabCompressCompleteProc(userRoutine, c, done, ci, t, refCon)        \
  3277.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGGrabCompressCompleteProcInfo, (c), (done), (ci), (t), (refCon))
  3278. #define CallSGDisplayCompressProc(userRoutine, c, dataPtr, desc, mp, clipRgn, refCon)        \
  3279.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSGDisplayCompressProcInfo, (c), (dataPtr), (desc), (mp), (clipRgn), (refCon))
  3280. #define CallVdigIntProc(userRoutine, flags, refcon)        \
  3281.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppVdigIntProcInfo, (flags), (refcon))
  3282. #define CallSCModalFilterProc(userRoutine, theDialog, theEvent, itemHit, refcon)        \
  3283.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSCModalFilterProcInfo, (theDialog), (theEvent), (itemHit), (refcon))
  3284. #define CallSCModalHookProc(userRoutine, theDialog, itemHit, params, refcon)        \
  3285.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSCModalHookProcInfo, (theDialog), (itemHit), (params), (refcon))
  3286. #define CallDataHCompletionProc(userRoutine, request, refcon, err)        \
  3287.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDataHCompletionProcInfo, (request), (refcon), (err))
  3288. #define CallMusicMIDISendProc(userRoutine, self, refCon, mmp)        \
  3289.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMusicMIDISendProcInfo, (self), (refCon), (mmp))
  3290. #define CallMusicMIDIReadHookProc(userRoutine, mp, myRefCon)        \
  3291.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMusicMIDIReadHookProcInfo, (mp), (myRefCon))
  3292. #define CallMusicOfflineDataProc(userRoutine, SoundData, numBytes, myRefCon)        \
  3293.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMusicOfflineDataProcInfo, (SoundData), (numBytes), (myRefCon))
  3294. #define CallTuneCallBackProc(userRoutine, status, refCon)        \
  3295.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTuneCallBackProcInfo, (status), (refCon))
  3296. #define CallTunePlayCallBackProc(userRoutine, event, seed, refCon)        \
  3297.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppTunePlayCallBackProcInfo, (event), (seed), (refCon))
  3298. #else
  3299. #define CallSGDataProc(userRoutine, c, p, len, offset, chRefCon, time, writeType, refCon)        \
  3300.         (*(userRoutine))((c), (p), (len), (offset), (chRefCon), (time), (writeType), (refCon))
  3301. #define CallSGModalFilterProc(userRoutine, theDialog, theEvent, itemHit, refCon)        \
  3302.         (*(userRoutine))((theDialog), (theEvent), (itemHit), (refCon))
  3303. #define CallSGGrabProc(userRoutine, c, bufferNum, refCon)        \
  3304.         (*(userRoutine))((c), (bufferNum), (refCon))
  3305. #define CallSGGrabCompleteProc(userRoutine, c, bufferNum, done, refCon)        \
  3306.         (*(userRoutine))((c), (bufferNum), (done), (refCon))
  3307. #define CallSGDisplayProc(userRoutine, c, bufferNum, mp, clipRgn, refCon)        \
  3308.         (*(userRoutine))((c), (bufferNum), (mp), (clipRgn), (refCon))
  3309. #define CallSGCompressProc(userRoutine, c, bufferNum, refCon)        \
  3310.         (*(userRoutine))((c), (bufferNum), (refCon))
  3311. #define CallSGCompressCompleteProc(userRoutine, c, bufferNum, done, ci, refCon)        \
  3312.         (*(userRoutine))((c), (bufferNum), (done), (ci), (refCon))
  3313. #define CallSGAddFrameProc(userRoutine, c, bufferNum, atTime, scale, ci, refCon)        \
  3314.         (*(userRoutine))((c), (bufferNum), (atTime), (scale), (ci), (refCon))
  3315. #define CallSGTransferFrameProc(userRoutine, c, bufferNum, mp, clipRgn, refCon)        \
  3316.         (*(userRoutine))((c), (bufferNum), (mp), (clipRgn), (refCon))
  3317. #define CallSGGrabCompressCompleteProc(userRoutine, c, done, ci, t, refCon)        \
  3318.         (*(userRoutine))((c), (done), (ci), (t), (refCon))
  3319. #define CallSGDisplayCompressProc(userRoutine, c, dataPtr, desc, mp, clipRgn, refCon)        \
  3320.         (*(userRoutine))((c), (dataPtr), (desc), (mp), (clipRgn), (refCon))
  3321. #define CallVdigIntProc(userRoutine, flags, refcon)        \
  3322.         (*(userRoutine))((flags), (refcon))
  3323. #define CallSCModalFilterProc(userRoutine, theDialog, theEvent, itemHit, refcon)        \
  3324.         (*(userRoutine))((theDialog), (theEvent), (itemHit), (refcon))
  3325. #define CallSCModalHookProc(userRoutine, theDialog, itemHit, params, refcon)        \
  3326.         (*(userRoutine))((theDialog), (itemHit), (params), (refcon))
  3327. #define CallDataHCompletionProc(userRoutine, request, refcon, err)        \
  3328.         (*(userRoutine))((request), (refcon), (err))
  3329. #define CallMusicMIDISendProc(userRoutine, self, refCon, mmp)        \
  3330.         (*(userRoutine))((self), (refCon), (mmp))
  3331. #define CallMusicMIDIReadHookProc(userRoutine, mp, myRefCon)        \
  3332.         (*(userRoutine))((mp), (myRefCon))
  3333. #define CallMusicOfflineDataProc(userRoutine, SoundData, numBytes, myRefCon)        \
  3334.         (*(userRoutine))((SoundData), (numBytes), (myRefCon))
  3335. #define CallTuneCallBackProc(userRoutine, status, refCon)        \
  3336.         (*(userRoutine))((status), (refCon))
  3337. #define CallTunePlayCallBackProc(userRoutine, event, seed, refCon)        \
  3338.         (*(userRoutine))((event), (seed), (refCon))
  3339. #endif
  3340.  
  3341.  
  3342. #ifdef __CFM68K__
  3343. #pragma import off
  3344. #endif
  3345.  
  3346. #if GENERATINGPOWERPC
  3347. #pragma options align=reset
  3348. #endif
  3349.  
  3350. #ifdef __cplusplus
  3351. }
  3352. #endif
  3353.  
  3354. #endif /* __QUICKTIMECOMPONENTS__ */
  3355.