/********************************************
*
* Media Control Tool Set
*
* Copyright Apple Computer, Inc.1986-90
* All Rights Reserved
*
* Copyright 1992, Byte Works, Inc.
*
********************************************/

#ifndef __TYPES__
#include <TYPES.h>
#endif

#ifndef __MEDIACONTROL__
#define __MEDIACONTROL__

/* Position unit types for MCGetPosition and other calls: */
#define mcInChapters 1                  /* Position is measured in chapters */
#define mcInFrames 2                    /* Position is measured in frames */
#define mcInTimes 3                     /* Position is measured in hours,minutes,seconds,blocks */

/* Control values for MCControl: */
#define mcCInit 0x0001                  /* Initialize player */
#define mcCEject 0x0002                 /* Eject disc */
#define mcCVideoOn 0x0003               /* Turn video on */
#define mcCVideoOff 0x0004              /* Turn video off */
#define mcCDisplayOn 0x0005             /* Turn video position display on */
#define mcCDisplayOff 0x0006            /* Turn video position display off */
#define mcCBlankVideo 0x0007            /* Blank video for next MCSearchTo */
#define mcCDefaultCom 0x0008            /* Set default communications */
#define mcCLockDev 0x0009               /* Set the device to locked */
#define mcCUnLockDev 0x000A             /* Unlock the device */

#define mcC8Data1Stop 0x0028            /* Set 8 - data  1 - stop bit */
#define mcC7Data1Stop 0x0029            /* Set 7 - data  1 - stop bit */
#define mcC6Data1Stop 0x002A            /* Set 6 - data  1 - stop bit */
#define mcC5Data1Stop 0x002B            /* Set 5 - data  1 - stop bit */
#define mcC8Data2Stop 0x002C            /* Set 8 - data  2 - stop bit */
#define mcC7Data2Stop 0x002D            /* Set 7 - data  2 - stop bit */
#define mcC6Data2Stop 0x002E            /* Set 6 - data  2 - stop bit */
#define mcC5Data2Stop 0x002F            /* Set 5 - data  2 - stop bit */

#define mcCBaudDflt 0x0032              /* Set baud rate to control panel setting */
#define mcCBaud50 0x0033                /* Set 50 baud */
#define mcCBaud75 0x0034                /* Set 75 baud */
#define mcCBaud110 0x0035               /* Set 110 baud */
#define mcCBaud134 0x0036               /* Set 134 baud */
#define mcCBaud150 0x0037               /* Set 150 baud */
#define mcCBaud300 0x0038               /* Set 300 baud */
#define mcCBaud600 0x0039               /* Set 600 baud */
#define mcCBaud1200 0x003A              /* Set 1200 baud */
#define mcCBaud1800 0x003B              /* Set 1800 baud */
#define mcCBaud2400 0x003C              /* Set 2400 baud */
#define mcCBaud3600 0x003D              /* Set 3600 baud */
#define mcCBaud4800 0x003E              /* Set 4800 baud */
#define mcCBaud7200 0x003F              /* Set 7200 baud */
#define mcCBaud9600 0x0040              /* Set 9600 baud */
#define mcCBaud19200 0x0041             /* Set 19200 baud */

#define mcCModem 0x0064                 /* Set to modem port */
#define mcCPrinter 0x0065               /* Set to printer port */

#define mcCIgnoreDS 0x00C8              /* Ignore "disk switched" GSOS errors */
#define mcCReportDS 0x00C9              /* Report "disk switched" GSOS errors */

/* Values for MCGetFeatures: */
#define mcFTypes 0                      /* How the disc is organized (frames, chapters, etc.) */
#define mcFStep 1                       /* Maximum fps speed value (normal is 255) */
#define mcFRecord 2                     /* Device supports MCRecord */
#define mcFVideo 3                      /* Device supports toggling video */
#define mcFEject 4                      /* Device supports ejecting medium */
#define mcFLock 5                       /* Device supports user lock (locking user from physically operating the device) */
#define mcFVDisplay 6                   /* Device supports video display of location */
#define mcFVOverlay 7                   /* No. of lines of overlay characters device supports */
#define mcFVOChars 8                    /* No. of chars/line supported by overlay */
#define mcFVolume 9                     /* Does volume control? */


/* Status values for MCGetStatus: */
#define mcSUnknown 0x0000               /* Player unable to determine this status */

#define mcSDeviceType 0x0000            /* "Device type" selector */
#define mcSLaserDisc 0x0001             /* Video laser disc player */
#define mcSCDAudio 0x0002               /* Audio CD player */
#define mcSCDLaserCD 0x0003             /* Combination laser/CD player */
#define mcSVCR 0x0004                   /* VCR */
#define mcSCamCorder 0x0005             /* Video camera */

#define mcSPlayStatus 0x0001            /* "Play status" selector */
#define mcSPlaying 0x0001               /* The device is playing */
#define mcSStill 0x0002                 /* The device is not playing (paused) */
#define mcSParked 0x0003                /* The device is shut down */

#define mcSDoorStatus 0x0002            /* "Player door" status */
#define mcSDoorOpen 0x0001
#define mcSDoorClosed 0x0002

#define mcSDiscType 0x0003              /* "Disc type" selector */
#define mcS_CLV 0x0001
#define mcS_CAV 0x0002
#define mcS_CDV 0x0003
#define mcS_CD 0x0004

#define mcSDiscSize 0x0004              /* "Disc size" selector */
#define mcSDisc3inch 0x0003
#define mcSDisc5inch 0x0005
#define mcSDisc8inch 0x0008
#define mcSDisc12inch 0x000C

#define mcSDiscSide 0x0005              /* "Disc side" selector */
#define mcSSideOne 0x0001
#define mcSSideTwo 0x0002

#define mcSVolumeL 0x0006               /* Current left volume selector */
#define mcSVolumeR 0x0007               /* Current right volume selector */

/* Time parameter values for MCGetTimes: */
#define mcElapsedTrack 0x0000           /* Elapsed time on current track/chapter */
#define mcRemainTrack 0x0001            /* Remaining time on current track/chapter */
#define mcElapsedDisc 0x0002            /* Elapsed time on disc */
#define mcRemainDisc 0x0003             /* Remaining time on disc */
#define mcTotalDisc 0x0004              /* Total run time on disc */
#define mcTotalFrames 0x0005            /* Total number of frames on disc */
#define mcTracks 0x0006                 /* Binary start and ending track numbers (bits 31-16 = ending, bits 15-0 = starting track number.) */
#define mcDiscID 0x0007                 /* returns a disc identifier */

/* Audio values: */
#define mcAudioOff 0x0000               /* Audio off */
#define mcAudioRight 0x0001             /* Audio thru right channel only */
#define mcAudioLinR 0x0002              /* Audio left in right only */
#define mcAudioMinR 0x0003              /* Audio mixed in right only */
#define mcAudioRinL 0x0004              /* Audio right in left only */
#define mcAudioRinLR 0x0005             /* Audio right in left and right */
#define mcAudioReverse 0x0006           /* Audio right in left, left in right */
#define mcAudioRinLMR 0x0007            /* Audio right in left, mixed in right */
#define mcAudioLeft 0x0008              /* Audio left channel only */
#define mcAudioStereo 0x0009            /* Audio both channels (in stereo) */
#define mcAudioLinLR 0x000A             /* Audio left in left and right */
#define mcAudioLinLMR 0x000B            /* Audio left in left, mixed in right */
#define mcAudioMinL 0x000C              /* Audio mixed in left only */
#define mcAudioMinLRinR 0x000D          /* Audio mixed in left, right in right */
#define mcAudioMinLLinR 0x000E          /* Audio mixed in left, left in right */
#define mcAudioMonaural 0x000F          /* Audio mixed in left and right (monaural) */

/* Error codes: */
#define mcUnImp 0x2601                  /* Unimplemented for this device */
#define mcNotApplic 0x2601              /* <see UnImp> */
#define mcBadSpeed 0x2602               /* Invalid speed specified */
#define mcBadUnitType 0x2603            /* Invalid unit type specified */
#define mcTimeOutErr 0x2604             /* Timed out during device read */
#define mcNotLoaded 0x2605              /* No driver is currently loaded */
#define mcBadAudio 0x2606               /* Invalid audio value */
#define mcDevRtnError 0x2607            /* Device returned error (unable to perform) */
#define mcUnRecStatus 0x2608            /* Unrecognizable status from device */
#define mcBadSelector 0x2609            /* Invalid selector value specified */
#define mcFunnyData 0x260A              /* Funny data received (try again) */
#define mcInvalidPort 0x260B            /* Invalid port specified */
#define mcOnlyOnce 0x260C               /* Scans only once */
#define mcNoResMgr 0x260D               /* Resource manager not active */
#define mcItemNotThere 0x260E           /* Item not found in database */
#define mcWasShutDown 0x260F            /* Media Control Toolset was already shut down */
#define mcWasStarted 0x2610             /* Media Control Toolset was already started */
#define mcBadChannel 0x2611             /* Invalid channel number */
#define mcInvalidParam 0x2612           /* Invalid parameter */
#define mcCallNotSupported 0x2613       /* Call is not supported */

extern pascal void MCBootInit(void) inline(0x0126,dispatcher);
extern pascal void MCStartUp(Word) inline(0x0226,dispatcher);
extern pascal void MCShutDown(void) inline(0x0326,dispatcher);
extern pascal Word MCVersion(void) inline(0x0426,dispatcher);
extern pascal void MCReset(void) inline(0x0526,dispatcher);
extern pascal Boolean MCStatus(void) inline(0x0626,dispatcher);
extern pascal Long MCBinToTime(Long) inline(0x0D26,dispatcher);
extern pascal void MCControl(Word, Word) inline(0x1B26,dispatcher);
extern pascal void MCDShutDown(Word) inline(0x1526,dispatcher);
extern pascal void MCDStartUp(Word, Ptr, Word) inline(0x1426,dispatcher);
extern pascal Long MCGetDiscID(Word) inline(0x2826,dispatcher);
extern pascal void MCGetDiscTitle(Long, Ptr) inline(0x1226,dispatcher);
extern pascal Long MCGetDiscTOC(Word, Word) inline(0x2726,dispatcher);
extern pascal void MCGetErrorMsg(Word, Ptr) inline(0x0926,dispatcher);
extern pascal Long MCGetFeatures(Word, Word) inline(0x1626,dispatcher);
extern pascal void MCGetName(Word, Ptr) inline(0x2D26,dispatcher);
extern pascal Word MCGetNoTracks(Word) inline(0x2926,dispatcher);
extern pascal Long MCGetPosition(Word, Word) inline(0x2426,dispatcher);
extern pascal void MCGetProgram(Long, Ptr) inline(0x1026,dispatcher);
extern pascal void MCGetSpeeds(Word, Ptr) inline(0x1D26,dispatcher);
extern pascal Word MCGetStatus(Word, Word) inline(0x1A26,dispatcher);
extern pascal Long MCGetTimes(Word, Word) inline(0x2626,dispatcher);
extern pascal void MCGetTrackTitle(Long, Word, Ptr) inline(0x0E26,dispatcher);
extern pascal void MCJog(Word, Long, Word) inline(0x2026,dispatcher);
extern pascal void MCLoadDriver(Word) inline(0x0A26,dispatcher);
extern pascal void MCPause(Word) inline(0x1826,dispatcher);
extern pascal void MCPlay(Word) inline(0x1726,dispatcher);
extern pascal void MCRecord(Word) inline(0x2A26,dispatcher);
extern pascal void MCScan(Word, Word) inline(0x1C26,dispatcher);
extern pascal Boolean MCSearchDone(Word) inline(0x2226,dispatcher);
extern pascal void MCSearchTo(Word, Word, Long) inline(0x2126,dispatcher);
extern pascal void MCSearchWait(Word) inline(0x2326,dispatcher);
extern pascal void MCSendRawData(Word, Long) inline(0x1926,dispatcher);
extern pascal void MCSetAudio(Word, Word) inline(0x2526,dispatcher);
extern pascal void MCSetDiscTitle(Long, Long) inline(0x1326,dispatcher);
extern pascal void MCSetProgram(Long, Long) inline(0x1126,dispatcher);
extern pascal void MCSetTrackTitle(Long, Word, Ptr) inline(0x0F26,dispatcher);
extern pascal void MCSetVolume(Word, Word, Word) inline(0x2E26,dispatcher);
extern pascal void MCSpeed(Word, Word) inline(0x1E26,dispatcher);
extern pascal void MCStop(Word) inline(0x2B26,dispatcher);
extern pascal void MCStopAt(Word, Word, Long) inline(0x1F26,dispatcher);
extern pascal Long MCTimeToBin(Long) inline(0x0C26,dispatcher);
extern pascal void MCUnLoadDriver(Word) inline(0x0B26,dispatcher);
extern pascal void MCWaitRawData(Word, Ptr, Word, Word) inline(0x2C26,dispatcher);

#endif