156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_xmf.c 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 5 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose: 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF File Parser 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2005 107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License. 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License. 2256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control: 2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Revision: 501 $ 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Date: 2006-12-11 17:53:36 -0800 (Mon, 11 Dec 2006) $ 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_data.h" 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_miditypes.h" 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_parser.h" 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_report.h" 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_host.h" 3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_midi.h" 3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_xmf.h" 3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_xmfdata.h" 3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_config.h" 3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_vm_protos.h" 4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_mdls.h" 4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_smf.h" 4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* XMF header file type */ 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define XMF_IDENTIFIER 0x584d465f 4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define XMF_VERSION_2_00 0x322e3030 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define XMF_FILE_TYPE 0x00000002 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define XMF_SPEC_LEVEL 0x00000001 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define XMF_RIFF_CHUNK 0x52494646 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define XMF_RIFF_DLS 0x444c5320 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define XMF_SMF_CHUNK 0x4d546864 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* local prototypes */ 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_CheckFileType (S_EAS_DATA *pEASData, EAS_FILE_HANDLE fileHandle, EAS_VOID_PTR *ppHandle, EAS_I32 offset); 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Prepare (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData); 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Time (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_U32 *pTime); 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Event (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_INT parserMode); 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_State (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_STATE *pState); 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Close (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData); 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Reset (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData); 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Pause (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData); 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Resume (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData); 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_SetData (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_I32 param, EAS_I32 value); 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_GetData (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_I32 param, EAS_I32 *pValue); 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_FindFileContents (EAS_HW_DATA_HANDLE hwInstData, S_XMF_DATA *pXMFData); 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_ReadNode (EAS_HW_DATA_HANDLE hwInstData, S_XMF_DATA *pXMFData, EAS_I32 nodeOffset, EAS_I32 *pLength); 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_ReadVLQ (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE fileHandle, EAS_I32 *value); 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_Parser 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This structure contains the functional interface for the XMF parser 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksconst S_FILE_PARSER_INTERFACE EAS_XMF_Parser = 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_CheckFileType, 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_Prepare, 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_Time, 8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_Event, 8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_State, 8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_Close, 8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_Reset, 8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_Pause, 8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_Resume, 8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks NULL, 8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_SetData, 9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks XMF_GetData, 9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks NULL 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}; 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_CheckFileType() 9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Check the file type to see if we can parse it 9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_CheckFileType (S_EAS_DATA *pEASData, EAS_FILE_HANDLE fileHandle, EAS_VOID_PTR *ppHandle, EAS_I32 offset) 11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_XMF_DATA *pXMFData; 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume we don't recognize it initially */ 11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppHandle = NULL; 11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the file identifier */ 12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE)) != EAS_SUCCESS) 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp != XMF_IDENTIFIER) 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the version */ 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE)) != EAS_SUCCESS) 12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp != XMF_VERSION_2_00) 13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "XMF file version was 0x%08x, expected 0x%08x\n", temp, XMF_VERSION_2_00); */ } 13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the file type */ 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE)) != EAS_SUCCESS) 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp != XMF_FILE_TYPE) 13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "XMF file type was 0x%08x, expected 0x%08x\n", temp, XMF_FILE_TYPE); */ } 14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the spec level */ 14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE)) != EAS_SUCCESS) 14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp != XMF_SPEC_LEVEL) 14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "XMF file spec was 0x%08x, expected 0x%08x\n", temp, XMF_SPEC_LEVEL); */ } 15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for static memory allocation */ 15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->staticMemoryModel) 15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData = EAS_CMEnumData(EAS_CM_XMF_DATA); 15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData = EAS_HWMalloc(pEASData->hwInstData, sizeof(S_XMF_DATA)); 15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pXMFData) 15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* zero the memory to insure complete initialization */ 16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet((void *)pXMFData,0, sizeof(S_XMF_DATA)); 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData->fileHandle = fileHandle; 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData->fileOffset = offset; 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppHandle = pXMFData; 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* locate the SMF and DLS contents */ 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_FindFileContents(pEASData->hwInstData, pXMFData)) != EAS_SUCCESS) 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "No SMF data found in XMF file\n"); */ } 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* let the SMF parser take over */ 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, pXMFData->midiOffset)) != EAS_SUCCESS) 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SMF_CheckFileType(pEASData, fileHandle, &pXMFData->pSMFData, pXMFData->midiOffset); 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_Prepare() 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Prepare to parse the file. Allocates instance data (or uses static allocation for 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * static memory model). 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Prepare (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData) 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_XMF_DATA* pXMFData; 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse DLS collection */ 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData = (S_XMF_DATA*) pInstData; 20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pXMFData->dlsOffset != 0) 20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = DLSParser(pEASData->hwInstData, pXMFData->fileHandle, pXMFData->dlsOffset, &pXMFData->pDLS)) != EAS_SUCCESS) 20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Error converting XMF DLS data\n"); */ } 21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* Prepare the SMF parser */ 21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = SMF_Prepare(pEASData, pXMFData->pSMFData)) != EAS_SUCCESS) 21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if no DLS file, skip this step */ 22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pXMFData->pDLS == NULL) 22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* tell the synth to use the DLS collection */ 22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = VMSetDLSLib(((S_SMF_DATA*) pXMFData->pSMFData)->pSynth, pXMFData->pDLS); 22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks DLSAddRef(pXMFData->pDLS); 22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitializeAllChannels(pEASData->pVoiceMgr, ((S_SMF_DATA*) pXMFData->pSMFData)->pSynth); 22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_Time() 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the time of the next event in msecs 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pTime - pointer to variable to hold time of next event (in msecs) 24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Time (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_U32 *pTime) 25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SMF_Time(pEASData, ((S_XMF_DATA*) pInstData)->pSMFData, pTime); 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_Event() 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Parse the next event in the file 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Event (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_INT parserMode) 27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SMF_Event(pEASData, ((S_XMF_DATA*) pInstData)->pSMFData, parserMode); 27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_State() 28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current state of the stream 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pState - pointer to variable to store state 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_State (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_I32 *pState) 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SMF_State(pEASData, ((S_XMF_DATA*) pInstData)->pSMFData, pState); 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_Close() 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Close the file and clean up 30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Close (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData) 31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_XMF_DATA* pXMFData; 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData = (S_XMF_DATA *)pInstData; 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the SMF stream, it will close the file handle */ 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = SMF_Close(pEASData, pXMFData->pSMFData)) != EAS_SUCCESS) 32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pXMFData->pDLS) 33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks DLSCleanup(pEASData->hwInstData, pXMFData->pDLS); 33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if using dynamic memory, free it */ 33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->staticMemoryModel) 33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* free the instance data */ 33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(pEASData->hwInstData, pXMFData); 33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_Reset() 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Reset the sequencer. Used for locating backwards in the file. 34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Reset (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData) 36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SMF_Reset(pEASData, ((S_XMF_DATA*) pInstData)->pSMFData); 36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_Pause() 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Pauses the sequencer. Mutes all voices and sets state to pause. 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Pause (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData) 38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SMF_Pause(pEASData, ((S_XMF_DATA*) pInstData)->pSMFData); 38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_Resume() 38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Resume playing after a pause, sets state back to playing. 39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_Resume (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData) 40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SMF_Resume(pEASData, ((S_XMF_DATA*) pInstData)->pSMFData); 40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_SetData() 41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the playback rate of the underlying SMF file 41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * rate - rate (28-bit fraction) 41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_SetData (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_I32 param, EAS_I32 value) 42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SMF_SetData(pEASData, ((S_XMF_DATA*) pInstData)->pSMFData, param, value); 42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_GetData() 43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Gets the file type 43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * rate - rate (28-bit fraction) 44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_GetData (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData, EAS_I32 param, EAS_I32 *pValue) 45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call SMF parser to get value */ 45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = SMF_GetData(pEASData, ((S_XMF_DATA*) pInstData)->pSMFData, param, pValue)) != EAS_SUCCESS) 45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* special case for file type */ 45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (param == PARSER_DATA_FILE_TYPE) 45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (*pValue == EAS_FILE_SMF0) 46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = EAS_FILE_XMF0; 46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else if (*pValue == EAS_FILE_SMF1) 46356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = EAS_FILE_XMF1; 46456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 46556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 46656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 46756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_FindFileContents() 47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Finds SMF data and DLS data in XMF file, and remembers offset for each. 47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If more than one is found, uses the first one found of each. 47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Makes assumptions about the format of a mobile XMF file 47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pXMFData - pointer to XMF parser instance data 48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_FindFileContents (EAS_HW_DATA_HANDLE hwInstData, S_XMF_DATA *pXMFData) 49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 value; 49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 length; 49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize offsets */ 49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData->dlsOffset = pXMFData->midiOffset = 0; 49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read file length, ignore it for now */ 49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, &value)) != EAS_SUCCESS) 50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read MetaDataTypesTable length and skip over it */ 50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, &value)) != EAS_SUCCESS) 50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeekOfs(hwInstData, pXMFData->fileHandle, value)) != EAS_SUCCESS) 50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get TreeStart offset and jump to it */ 50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, &value)) != EAS_SUCCESS) 51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadNode(hwInstData, pXMFData, value, &length)) != EAS_SUCCESS) 51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for SMF data */ 51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pXMFData->midiOffset == 0) 51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "No SMF data found in XMF file\n"); */ } 51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for SFM in wrong order */ 52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pXMFData->dlsOffset > 0) && (pXMFData->midiOffset < pXMFData->dlsOffset)) 52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS data must precede SMF data in Mobile XMF file\n"); */ } 52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_ReadNode() 53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_ReadNode (EAS_HW_DATA_HANDLE hwInstData, S_XMF_DATA *pXMFData, EAS_I32 nodeOffset, EAS_I32 *pLength) 54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 refType; 54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 numItems; 54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 offset; 54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 length; 54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 headerLength; 55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 chunkType; 55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of node */ 55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(hwInstData, pXMFData->fileHandle, nodeOffset)) != EAS_SUCCESS) 55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 55556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get node length */ 55756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, pLength)) != EAS_SUCCESS) 55856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 55956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 56056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get number of contained items */ 56156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, &numItems)) != EAS_SUCCESS) 56256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 56356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 56456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get node header length */ 56556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, &headerLength)) != EAS_SUCCESS) 56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get metadata length */ 56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, &length)) != EAS_SUCCESS) 57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the current location */ 57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFilePos(hwInstData, pXMFData->fileHandle, &offset)) != EAS_SUCCESS) 57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* skip to node contents */ 57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(hwInstData, pXMFData->fileHandle, nodeOffset + headerLength)) != EAS_SUCCESS) 57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get reference type */ 58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, &refType)) != EAS_SUCCESS) 58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the current location */ 58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFilePos(hwInstData, pXMFData->fileHandle, &offset)) != EAS_SUCCESS) 58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* process file node */ 58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (numItems == 0) 59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if in-file resource, find out where it is and jump to it */ 59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (refType == 2) 59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(hwInstData, pXMFData->fileHandle, &offset)) != EAS_SUCCESS) 59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks offset += pXMFData->fileOffset; 59856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(hwInstData, pXMFData->fileHandle, offset)) != EAS_SUCCESS) 59956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 60056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 60156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 60256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* or else it must be an inline resource */ 60356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else if (refType != 1) 60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 60556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Unexpected reference type %d\n", refType); */ } 60656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 60756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the chunk type */ 61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(hwInstData, pXMFData->fileHandle, &chunkType, EAS_TRUE)) != EAS_SUCCESS) 61156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 61356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* found a RIFF chunk, check for DLS type */ 61456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (chunkType == XMF_RIFF_CHUNK) 61556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 61656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* skip length */ 61756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeekOfs(hwInstData, pXMFData->fileHandle, sizeof(EAS_I32))) != EAS_SUCCESS) 61856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 61956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get RIFF file type */ 62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(hwInstData, pXMFData->fileHandle, &chunkType, EAS_TRUE)) != EAS_SUCCESS) 62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (chunkType == XMF_RIFF_DLS) 62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData->dlsOffset = offset; 62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* found an SMF chunk */ 62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else if (chunkType == XMF_SMF_CHUNK) 62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData->midiOffset = offset; 63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* folder node, process the items in the list */ 63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for ( ; numItems > 0; numItems--) 63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* process this item */ 63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadNode(hwInstData, pXMFData, offset, &length)) != EAS_SUCCESS) 63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of next item */ 64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks offset += length; 64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(hwInstData, pXMFData->fileHandle, offset)) != EAS_SUCCESS) 64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if 0 65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_FindFileContents() 65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Finds SMF data and DLS data in XMF file, and remembers offset for each. 65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If more than one is found, uses the first one found of each. 65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Makes assumptions about the format of a mobile XMF file 65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pXMFData - pointer to XMF parser instance data 66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - pointer to file handle 66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 67156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 67256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_FindFileContents(S_EAS_DATA *pEASData, S_XMF_DATA *pXMFData, EAS_FILE_HANDLE fileHandle) 67356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 67556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 offset; 67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 value; 67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 numItems; 67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 length; 67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_CHAR id[4]; 68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 location; 68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* init dls offset, so that we know we haven't found a dls chunk yet */ 68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData->dlsOffset = 0; 68456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read file length, ignore it for now */ 68656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &value)) != EAS_SUCCESS) 68756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read MetaDataTypesTable length and skip over it */ 69056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &value)) != EAS_SUCCESS) 69156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeekOfs(pEASData, fileHandle, value)) != EAS_SUCCESS) 69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get TreeStart offset and jump to it */ 69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &offset)) != EAS_SUCCESS) 69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 69856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, offset)) != EAS_SUCCESS) 69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read node length, ignore it for now */ 70256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &value)) != EAS_SUCCESS) 70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read number of contained items */ 70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &numItems)) != EAS_SUCCESS) 70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*read node header length */ 71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &value)) != EAS_SUCCESS) 71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*go to the node offset */ 71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, offset + value)) != EAS_SUCCESS) 71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read Reference Type */ 71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &value)) != EAS_SUCCESS) 71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure it is an in-line resource, for now */ 72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (value != 1) 72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Problem parsing XMF file tree\n"); */ } 72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse through the list of items */ 72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (numItems > 0) 73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*get current offset */ 73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFilePos(pEASData->hwInstData, fileHandle, &offset)) != EAS_SUCCESS) 73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*read node length */ 73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &length)) != EAS_SUCCESS) 73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 73856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 73956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read number of items */ 74056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &value)) != EAS_SUCCESS) 74156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 74256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure not a folder */ 74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (value != 0) 74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Problem parsing XMF file node\n"); */ } 74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 74856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 74956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 75056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read offset to resource and jump to it */ 75156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &value)) != EAS_SUCCESS) 75256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, offset + value)) != EAS_SUCCESS) 75456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 75556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read Reference Type */ 75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = XMF_ReadVLQ(pEASData, fileHandle, &value)) != EAS_SUCCESS) 75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 75956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 76056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure it is an in-line resource */ 76156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (value != 1) 76256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Problem parsing XMF file node\n"); */ } 76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 76556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get current offset as a possible location for SMF file or DLS file */ 76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFilePos(pEASData->hwInstData, fileHandle, &location)) != EAS_SUCCESS) 76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 77056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 77156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read four bytes */ 77256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWReadFile(pEASData->hwInstData, fileHandle, id, sizeof(id), &value)) != EAS_SUCCESS) 77356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check if DLS */ 77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pXMFData->dlsOffset == 0 && id[0] == 'R' && id[1] == 'I' && id[2] == 'F' && id[3] == 'F') 77756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks //remember offset 77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData->dlsOffset = location; 78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 78156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* else check if SMF */ 78356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else if (id[0] == 'M' && id[1] == 'T' && id[2] == 'h' && id[3] == 'd') 78456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks //remember offset 78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pXMFData->midiOffset = location; 78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 78856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks //we are done 78956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 79056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 79156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 79256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks //one less item 79356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks numItems--; 79456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 79556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks //if more data, go to the next item 79656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (numItems >0) 79756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 79856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, offset + length)) != EAS_SUCCESS) 79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 80156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 80256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 80356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 80456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 80556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 80656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 80756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 80856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 80956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * XMF_ReadVLQ() 81056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 81156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Reads a VLQ encoded value from the file referenced by fileHandle 81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 81656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * fileHandle - pointer to file handle 81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * value - pointer to the value decoded from the VLQ data 82056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 82456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT XMF_ReadVLQ (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE fileHandle, EAS_I32 *value) 82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 82856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 82956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c; 83056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *value = 0; 83256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetByte(hwInstData, fileHandle, &c)) != EAS_SUCCESS) 83456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 83556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (c > 0x7F) 83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{703} shift for performance */ 83956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *value = (*value << 7) | (c & 0x7F); 84056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 84156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetByte(hwInstData, fileHandle, &c)) != EAS_SUCCESS) 84256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 84356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 84456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 84556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{703} shift for performance */ 84656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *value = (*value << 7) | c; 84756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 851