MusicKit
0.0.0
|
00001 /* 00002 $Id$ 00003 Defined In: The MusicKit 00004 Description: 00005 Functions for writing and reading text and binary score files. 00006 00007 Original Author: David A. Jaffe 00008 00009 Copyright (c) 1988-1992, NeXT Computer, Inc. 00010 Portions Copyright (c) 1994 NeXT Computer, Inc. and reproduced under license from NeXT 00011 Portions Copyright (c) 1994 Stanford University 00012 Portions Copyright (c) 1999-2005, The MusicKit Project. 00013 */ 00014 00015 #ifndef __MK__scorefile_H___ 00016 #define __MK__scorefile_H___ 00017 00018 #import <Foundation/Foundation.h> 00019 00020 #import "_MKNameTable.h" 00021 00022 typedef struct __MKScoreInStruct { 00023 double timeTag; /* Time of most recently read note. */ 00024 id part; /* part to which current note goes.*/ 00025 BOOL isInBody; /* YES if we've already parsed the header 00026 */ 00027 NSMutableData *printStream; /* Stream used for scorefile print output */ 00028 BOOL _freeStream; /* YES if stream was auto-created to 00029 go to stderr */ 00030 void *_parsePtr; /* Private pointer to parse state. */ 00031 _MKNameTable *_symbolTable; /* Private symbol table used for parse. */ 00032 NSMutableDictionary *_noteTagTable; /* Private map to unique set of noteTags.*/ 00033 int _fileHighTag,_fileLowTag; /* Private. Tag range. */ 00034 int _newLowTag; /* Private. Tag base for noteTag map. */ 00035 id _aNote; /* Private. parser 'owns' note. */ 00036 char *_ranState; /* Private. So each file has its own random 00037 sequence. */ 00038 id _owner; /* Private. Where to put part decls. */ 00039 int _errCount; /* Error count. */ 00040 NSMutableArray *_binaryIndexedObjects; /* List of indexed objects. */ 00041 BOOL _binary; 00042 void *_repeatStack; 00043 } _MKScoreInStruct; 00044 00045 typedef struct __MKScoreOutStruct { 00046 double timeTag; /* Time of most recently written note, 00047 including timeShift. */ 00048 BOOL isInBody; /* YES if first note has been written. */ 00049 NSMutableData *_stream; /* The output file. */ 00050 id _owner; /* Private */ 00051 _MKNameTable *_nameTable; /* Private */ 00052 BOOL _ownerIsNoteRecorder; /* Private. */ 00053 double _timeShift; /* Added to time tags before writing. */ 00054 long _tagRangePos; 00055 NSMapTable *_binaryIndecies; /* For encoding objects in binary files. (mapping from object to index) */ 00056 int _highBinaryIndex; /* Currently highest index. */ 00057 BOOL _binary; 00058 } _MKScoreOutStruct; 00059 00060 /* Functions for writing score files: */ 00061 extern _MKScoreOutStruct * 00062 _MKInitScoreOut(NSMutableData *fileStream, id owner, MKNote *anInfoNote, 00063 double timeShift, BOOL isNoteRecorder, BOOL binary); 00064 extern _MKScoreOutStruct * 00065 _MKWritePartDecl(MKPart *part, _MKScoreOutStruct *p, MKNote *aPartInfo); 00066 extern _MKScoreOutStruct * 00067 _MKWriteNote(MKNote *aNote, MKPart *aPart, _MKScoreOutStruct *scoreWPtr); 00068 extern _MKScoreOutStruct * 00069 _MKFinishScoreOut(_MKScoreOutStruct *scoreWPtr, BOOL writeEnd); 00070 00071 /* Functions for reading score files: */ 00072 extern void _MKParseScoreHeader(_MKScoreInStruct *scorefileRPtr); 00073 extern _MKScoreInStruct *_MKNewScoreInStruct(NSData *aStream,id owner, 00074 NSMutableData *printStream, 00075 BOOL mergeParts,NSString *name,unsigned int *pointer); 00076 extern BOOL _MKParseScoreHeaderStmt(_MKScoreInStruct *scorefileRPtr); 00077 extern id _MKParseScoreNote(_MKScoreInStruct * scorefileRPtr); 00078 extern _MKScoreInStruct *_MKFinishScoreIn(_MKScoreInStruct *scorefileRPtr); 00079 00080 extern const char *_MKTranstab(); /* defined in parseScore.m */ 00081 00082 /* functions for writing binary scorefiles */ 00083 extern void _MKWriteIntPar(NSMutableData *aStream,int anInt); 00084 extern void _MKWriteDoublePar(NSMutableData *aStream,double aDouble); 00085 extern void _MKWriteStringPar(NSMutableData *aStream,NSString *aString); 00086 extern void _MKWriteVarPar(NSMutableData *aStream,NSString *aString); 00087 extern void _MKWriteInt(NSMutableData *aStream,int anInt); 00088 extern void _MKWriteShort(NSMutableData *aStream,short anShort); 00089 extern void _MKWriteDouble(NSMutableData *aStream,double aDouble); 00090 extern void _MKWriteChar(NSMutableData *aStream,char aChar); 00091 extern void _MKWriteString(NSMutableData *aStream,char *aString); 00092 extern void _MKWriteNSString(NSMutableData *aStream,NSString *aString); 00093 extern void _MKWriteFloat(NSMutableData *aStream,float aFloat); 00094 00095 #define _MK_BINARYSCOREFILEEXT @"playscore" 00096 #define _MK_SCOREFILEEXT @"score" 00097 00098 #endif