mac-rom/Interfaces/CIncludes/MIDI.h
Elliot Nunn 4325cdcc78 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 09:52:23 +08:00

290 lines
10 KiB
C

/************************************************************
Created: Saturday, July 27, 1991 at 4:36 PM
MIDI.h
C Interface to the Macintosh Libraries
Copyright Apple Computer, Inc. 1988-1991
All rights reserved
This file is used in these builds: Mac32 BigBang Sys606
Change History (most recent first):
<8> 7/30/91 JL Updated Copyright.
<7> 1/29/91 JL C++ requires midiToolNum to be a #define if it's going to be
used in the Inlines.
<6> 1/27/91 LN Checked in Database generate file from DSG.
<4> 11/28/90 JL Put formal parameter names back.
<3> 11/7/90 JL Changed all #defines to anonymous enums
<2> 11/4/90 dba used constStr255Parameter; got rid of erroneous const on some
Str255 parameters that were output strings; got rid of some
extraneous parameter names
************************************************************/
#ifndef __MIDI__
#define __MIDI__
#ifndef __TYPES__
#include <Types.h>
#endif
enum {
#define midiToolNum 4 /*tool number of MIDI Manager for SndDispVersion call*/
midiMaxNameLen = 31, /*maximum number of characters in port and client names*/
/* Time formats */
midiFormatMSec = 0, /*milliseconds*/
midiFormatBeats = 1, /*beats*/
midiFormat24fpsBit = 2, /*24 frames/sec.*/
midiFormat25fpsBit = 3, /*25 frames/sec.*/
midiFormat30fpsDBit = 4, /*30 frames/sec. drop-frame*/
midiFormat30fpsBit = 5, /*30 frames/sec.*/
midiFormat24fpsQF = 6, /*24 frames/sec. longInt format */
midiFormat25fpsQF = 7, /*25 frames/sec. longInt format */
midiFormat30fpsDQF = 8, /*30 frames/sec. drop-frame longInt format */
midiFormat30fpsQF = 9, /*30 frames/sec. longInt format */
midiInternalSync = 0, /*internal sync*/
midiExternalSync = 1, /*external sync*/
/* Port types*/
midiPortTypeTime = 0, /*time port*/
midiPortTypeInput = 1, /*input port*/
midiPortTypeOutput = 2, /*output port*/
midiPortTypeTimeInv = 3, /*invisible time port*/
/* OffsetTimes */
midiGetEverything = 0x7FFFFFFF, /*get all packets, regardless of time stamps*/
midiGetNothing = 0x80000000, /*get no packets, regardless of time stamps*/
midiGetCurrent = 0x00000000 /*get current packets only*/
};
enum {
/* MIDI data and messages are passed in MIDIPacket records (see below).
The first byte of every MIDIPacket contains a set of flags
bits 0-1 00 = new MIDIPacket, not continued
01 = begining of continued MIDIPacket
10 = end of continued MIDIPacket
11 = continuation
bits 2-3 reserved
bits 4-6 000 = packet contains MIDI data
001 = packet contains MIDI Manager message
bit 7 0 = MIDIPacket has valid stamp
1 = stamp with current clock */
midiContMask = 0x03,
midiNoCont = 0x00,
midiStartCont = 0x01,
midiMidCont = 0x03,
midiEndCont = 0x02,
midiTypeMask = 0x70,
midiMsgType = 0x00,
midiMgrType = 0x10,
midiTimeStampMask = 0x80,
midiTimeStampCurrent = 0x80,
midiTimeStampValid = 0x00,
/* MIDI Manager MIDIPacket command words (the first word in the data field
for midiMgrType messages) */
midiOverflowErr = 0x0001,
midiSCCErr = 0x0002,
midiPacketErr = 0x0003,
midiMaxErr = 0x00FF, /*all command words less than this value are error indicators*/
/* Valid results to be returned by readHooks */
midiKeepPacket = 0,
midiMorePacket = 1,
midiNoMorePacket = 2,
/* Errors: */
midiNoClientErr = -250, /*no client with that ID found*/
midiNoPortErr = -251 /*no port with that ID found*/
};
enum {
midiTooManyPortsErr = -252, /*too many ports already installed in the system*/
midiTooManyConsErr = -253, /*too many connections made*/
midiVConnectErr = -254, /*pending virtual connection created*/
midiVConnectMade = -255, /*pending virtual connection resolved*/
midiVConnectRmvd = -256, /*pending virtual connection removed*/
midiNoConErr = -257, /*no connection exists between specified ports*/
midiWriteErr = -258, /*MIDIWritePacket couldn't write to all connected ports*/
midiNameLenErr = -259, /*name supplied is longer than 31 characters*/
midiDupIDErr = -260, /*duplicate client ID*/
midiInvalidCmdErr = -261, /*command not supported for port type*/
/* Driver calls: */
midiOpenDriver = 1,
midiCloseDriver = 2
};
struct MIDIPacket {
unsigned char flags;
unsigned char len;
long tStamp;
unsigned char data[249];
};
typedef struct MIDIPacket MIDIPacket;
typedef MIDIPacket *MIDIPacketPtr;
struct MIDIClkInfo {
short sync; /*synchronization external/internal*/
long curTime; /*current value of port's clock*/
short format; /*time code format*/
};
typedef struct MIDIClkInfo MIDIClkInfo;
struct MIDIIDRec {
OSType clientID;
OSType portID;
};
typedef struct MIDIIDRec MIDIIDRec;
struct MIDIPortInfo {
short portType; /*type of port*/
MIDIIDRec timeBase; /*MIDIIDRec for time base*/
short numConnects; /*number of connections*/
MIDIIDRec cList[1]; /*ARRAY [1..numConnects] of MIDIIDRec*/
};
typedef struct MIDIPortInfo MIDIPortInfo;
typedef MIDIPortInfo *MIDIPortInfoPtr, **MIDIPortInfoHdl;
struct MIDIPortParams {
OSType portID; /*ID of port, unique within client*/
short portType; /*Type of port - input, output, time, etc.*/
short timeBase; /*refnum of time base, 0 if none*/
long offsetTime; /*offset for current time stamps*/
Ptr readHook; /*routine to call when input data is valid*/
long refCon; /*refcon for port (for client use)*/
MIDIClkInfo initClock; /*initial settings for a time base*/
Str255 name; /*name of the port, This is a real live string, not a ptr.*/
};
typedef struct MIDIPortParams MIDIPortParams;
typedef MIDIPortParams *MIDIPortParamsPtr;
struct MIDIIDList {
short numIDs;
OSType list[1];
};
typedef struct MIDIIDList MIDIIDList;
typedef MIDIIDList *MIDIIDListPtr, **MIDIIDListHdl;
#ifdef __cplusplus
extern "C" {
#endif
/*
Prototype Declarations for readHook and timeProc
extern pascal short myReadHook(MIDIPacketPtr myPacket, long myRefCon);
extern pascal void myTimeProc(long curTime, long myRefCon);
MIDI Manager Routines
*/
pascal long SndDispVersion(short toolnum);
pascal OSErr MIDISignIn(OSType clientID,long refCon,Handle icon,ConstStr255Param name)
= {0x203C,0x0004,midiToolNum,0xA800};
pascal void MIDISignOut(OSType clientID)
= {0x203C,0x0008,midiToolNum,0xA800};
pascal MIDIIDListHdl MIDIGetClients(void)
= {0x203C,0x000C,midiToolNum,0xA800};
pascal void MIDIGetClientName(OSType clientID,Str255 name)
= {0x203C,0x0010,midiToolNum,0xA800};
pascal void MIDISetClientName(OSType clientID,ConstStr255Param name)
= {0x203C,0x0014,midiToolNum,0xA800};
pascal MIDIIDListHdl MIDIGetPorts(OSType clientID)
= {0x203C,0x0018,midiToolNum,0xA800};
pascal OSErr MIDIAddPort(OSType clientID,short BufSize,short *refnum,MIDIPortParamsPtr init)
= {0x203C,0x001C,midiToolNum,0xA800};
pascal MIDIPortInfoHdl MIDIGetPortInfo(OSType clientID,OSType portID)
= {0x203C,0x0020,midiToolNum,0xA800};
pascal OSErr MIDIConnectData(OSType srcClID,OSType srcPortID,OSType dstClID,
OSType dstPortID)
= {0x203C,0x0024,midiToolNum,0xA800};
pascal OSErr MIDIUnConnectData(OSType srcClID,OSType srcPortID,OSType dstClID,
OSType dstPortID)
= {0x203C,0x0028,midiToolNum,0xA800};
pascal OSErr MIDIConnectTime(OSType srcClID,OSType srcPortID,OSType dstClID,
OSType dstPortID)
= {0x203C,0x002C,midiToolNum,0xA800};
pascal OSErr MIDIUnConnectTime(OSType srcClID,OSType srcPortID,OSType dstClID,
OSType dstPortID)
= {0x203C,0x0030,midiToolNum,0xA800};
pascal void MIDIFlush(short refnum)
= {0x203C,0x0034,midiToolNum,0xA800};
pascal ProcPtr MIDIGetReadHook(short refnum)
= {0x203C,0x0038,midiToolNum,0xA800};
pascal void MIDISetReadHook(short refnum,ProcPtr hook)
= {0x203C,0x003C,midiToolNum,0xA800};
pascal void MIDIGetPortName(OSType clientID,OSType portID,Str255 name)
= {0x203C,0x0040,midiToolNum,0xA800};
pascal void MIDISetPortName(OSType clientID,OSType portID,ConstStr255Param name)
= {0x203C,0x0044,midiToolNum,0xA800};
pascal void MIDIWakeUp(short refnum,long time,long period,ProcPtr timeProc)
= {0x203C,0x0048,midiToolNum,0xA800};
pascal void MIDIRemovePort(short refnum)
= {0x203C,0x004C,midiToolNum,0xA800};
pascal short MIDIGetSync(short refnum)
= {0x203C,0x0050,midiToolNum,0xA800};
pascal void MIDISetSync(short refnum,short sync)
= {0x203C,0x0054,midiToolNum,0xA800};
pascal long MIDIGetCurTime(short refnum)
= {0x203C,0x0058,midiToolNum,0xA800};
pascal void MIDISetCurTime(short refnum,long time)
= {0x203C,0x005C,midiToolNum,0xA800};
pascal void MIDIStartTime(short refnum)
= {0x203C,0x0060,midiToolNum,0xA800};
pascal void MIDIStopTime(short refnum)
= {0x203C,0x0064,midiToolNum,0xA800};
pascal void MIDIPoll(short refnum,long offsetTime)
= {0x203C,0x0068,midiToolNum,0xA800};
pascal OSErr MIDIWritePacket(short refnum,MIDIPacketPtr packet)
= {0x203C,0x006C,midiToolNum,0xA800};
pascal Boolean MIDIWorldChanged(OSType clientID)
= {0x203C,0x0070,midiToolNum,0xA800};
pascal long MIDIGetOffsetTime(short refnum)
= {0x203C,0x0074,midiToolNum,0xA800};
pascal void MIDISetOffsetTime(short refnum,long offsetTime)
= {0x203C,0x0078,midiToolNum,0xA800};
pascal long MIDIConvertTime(short srcFormat,short dstFormat,long time)
= {0x203C,0x007C,midiToolNum,0xA800};
pascal long MIDIGetRefCon(short refnum)
= {0x203C,0x0080,midiToolNum,0xA800};
pascal void MIDISetRefCon(short refnum,long refCon)
= {0x203C,0x0084,midiToolNum,0xA800};
pascal long MIDIGetClRefCon(OSType clientID)
= {0x203C,0x0088,midiToolNum,0xA800};
pascal void MIDISetClRefCon(OSType clientID,long refCon)
= {0x203C,0x008C,midiToolNum,0xA800};
pascal short MIDIGetTCFormat(short refnum)
= {0x203C,0x0090,midiToolNum,0xA800};
pascal void MIDISetTCFormat(short refnum,short format)
= {0x203C,0x0094,midiToolNum,0xA800};
pascal void MIDISetRunRate(short refnum,short rate,long time)
= {0x203C,0x0098,midiToolNum,0xA800};
pascal Handle MIDIGetClientIcon(OSType clientID)
= {0x203C,0x009C,midiToolNum,0xA800};
#ifdef __cplusplus
}
#endif
#endif