MusicKit  0.0.0
_MKParameter.h
00001 /*
00002   $Id$
00003   Defined In: The MusicKit
00004   
00005   Description:
00006     Defines structures and function prototypes for _MKParameter.
00007 
00008   Original Author: David A. Jaffe
00009 
00010   Copyright (c) 1988-1992, NeXT Computer, Inc.
00011   Portions Copyright (c) 1994 NeXT Computer, Inc. and reproduced under license from NeXT
00012   Portions Copyright (c) 1994 Stanford University.
00013   Portions Copyright (c) 1999-2000 The MusicKit Project.
00014 */
00015 /*
00016 Modification history:
00017 
00018   $Log$
00019   Revision 1.9  2006/02/05 17:57:10  leighsmith
00020   Cleaned up prototypes for Xcode 2.2 as it is much more strict about mixing id with a defined type
00021 
00022   Revision 1.8  2002/04/16 15:07:38  sbrandon
00023   removed a couple of defunct imports
00024 
00025   Revision 1.7  2000/10/11 02:55:13  leigh
00026   added import of MKNote.h to fix tokens.h import
00027 
00028   Revision 1.6  2000/10/01 07:00:29  leigh
00029   Added full prototypes of functions, moved _MKKeyNumPrintfunc to TuningSystemPrivate.h
00030 
00031   Revision 1.5  2000/06/09 14:59:57  leigh
00032   Removed objc.h
00033 
00034   Revision 1.4  2000/05/06 00:30:48  leigh
00035   Better typing of _MKParAsInt()
00036 
00037   Revision 1.3  2000/02/07 00:30:14  leigh
00038   removed _MKHighestPar()
00039 
00040   Revision 1.2  1999/07/29 01:25:59  leigh
00041   Added Win32 compatibility, CVS logs, SBs changes
00042 
00043   daj/04/23/90 - Created from _musickit.h 
00044   08/13/90/daj - Added _MKParNameStr().
00045 */
00046 #ifndef __MK__parameter_H___
00047 #define __MK__parameter_H___
00048 
00049 #import <Foundation/Foundation.h>
00050 #import "params.h"
00051 #import "MKNote.h"
00052 #import "tokens.h" // for _MKToken
00053 
00054 typedef union __MKParameterUnion {
00055     /* Used for Parameters and scoreFile parsing. */
00056     id symbol;        /* This type is needed for scorefile parsing.
00057                          Also used for storing envelopes and wavetables. */
00058     double rval;
00059     NSString *sval;
00060     int ival;
00061 } _MKParameterUnion;
00062 
00063 typedef struct __MKParameter 
00064 {
00065     _MKParameterUnion _uVal;    /* Value. */
00066     short _uType;               /* Type of union. */
00067     short parNum;               /* Number of this parameter. */
00068 }
00069 _MKParameter;
00070 
00071 #define _MK_FIRSTAPPPAR  (MK_MKPARBITVECTS * 32)
00072 
00073 /* _MKParameter and _MKParName object 'methods' */
00074 extern id _MKParNameObj(int aPar);
00075 extern NSString *_MKParNameStr(int aPar);
00076 extern BOOL _MKParInit(void);
00077 extern _MKParameter *_MKNewStringPar(NSString * value, int parNum);
00078 extern _MKParameter *_MKNewDoublePar(double value, int parNum);
00079 extern _MKParameter *_MKNewIntPar(int value, int parNum);
00080 extern _MKParameter *_MKNewObjPar(id value, int parNum, _MKToken type);
00081 extern _MKParameter *_MKSetDoublePar(_MKParameter * param, double value);
00082 extern double _MKParAsDouble(_MKParameter *param);
00083 extern _MKParameter *_MKSetIntPar(_MKParameter *param, int value);
00084 extern int _MKParAsInt(_MKParameter *param);
00085 extern _MKParameter *_MKSetStringPar(_MKParameter *param, NSString *value);
00086 extern NSString *_MKParAsString(_MKParameter *param);
00087 extern _MKParameter *_MKSetObjPar(_MKParameter *param, id value, _MKToken type);
00088 extern id _MKParAsObj(_MKParameter *param);
00089 // These should be statically typed
00090 extern id _MKParAsEnv(_MKParameter *param);
00091 extern id _MKParAsWave(_MKParameter *param);
00092 extern _MKParameterUnion *_MKParRaw(_MKParameter *param);
00093 extern NSString * _MKParAsStringNoCopy(_MKParameter *param);
00094 extern BOOL _MKIsParPublic(_MKParameter *param);
00095 extern _MKParameter * _MKCopyParameter(_MKParameter *aPar);
00096 
00097 #import "_scorefile.h"
00098 
00099 extern void _MKParWriteStdValueOn(_MKParameter *rcvr, NSMutableData *aStream, _MKScoreOutStruct *p);
00100 extern void _MKParWriteOn(_MKParameter *rcvr, NSMutableData *aStream, _MKScoreOutStruct *p);
00101 extern void _MKParWriteValueOn(_MKParameter *rcvr, NSMutableData *aStream, _MKScoreOutStruct *p);
00102 extern void _MKArchiveParOn(_MKParameter *param, NSCoder *aTypedStream); /*sb: NSCoder originally converted as NSArchiver */
00103 extern void _MKUnarchiveParOn(_MKParameter *param, NSCoder *aTypedStream); /*sb: originally converted as NSArchiver */
00104 extern id  _MKDummyParameter();
00105 extern BOOL _MKIsPar(unsigned aPar);
00106 extern BOOL _MKIsPrivatePar(unsigned aPar);
00107 
00108 typedef enum __MKPrivPar {
00109     _MK_dur = ((int)MK_privatePars + 1),
00110     _MK_maxPrivPar /* Must be <= MK_appPars */
00111 }
00112 _MKPrivPar;
00113 
00114 extern _MKParameter *_MKFreeParameter(_MKParameter *param);
00115 
00116 #endif