/*---------------------------------------------------------------------------- * RTTTL_Prepare() *---------------------------------------------------------------------------- * Purpose: * Prepare to parse the file. Allocates instance data (or uses static allocation for * static memory model). * * Inputs: * pEASData - pointer to overall EAS data structure * handle - pointer to file handle * * Outputs: * * * Side Effects: * *---------------------------------------------------------------------------- */ static EAS_RESULT RTTTL_Prepare (S_EAS_DATA *pEASData, EAS_VOID_PTR pInstData) { S_RTTTL_DATA* pData; EAS_RESULT result; /* check for valid state */ pData = (S_RTTTL_DATA*) pInstData; if (pData->state != EAS_STATE_OPEN) return EAS_ERROR_NOT_VALID_IN_THIS_STATE; /* instantiate a synthesizer */ if ((result = VMInitMIDI(pEASData, &pData->pSynth)) != EAS_SUCCESS) { { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "VMInitMIDI returned %d\n", result); */ } return result; } pData->state = EAS_STATE_ERROR; if ((result = RTTTL_ParseHeader (pEASData, pData, (EAS_BOOL) (pData->metadata.callback != NULL))) != EAS_SUCCESS) { /* if using dynamic memory, free it */ if (!pEASData->staticMemoryModel) EAS_HWFree(pEASData->hwInstData, pData); return result; } pData->state = EAS_STATE_READY; return EAS_SUCCESS; }
/*---------------------------------------------------------------------------- * * EAS_HWClose * * Wrapper for fclose function * *---------------------------------------------------------------------------- */ EAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1) { EAS_HW_FILE *file2,*dupFile; int i; /* simulate failure */ if (errorConditions[eCloseError]) return EAS_FAILURE; /* make sure we have a valid handle */ if (file1->buffer == NULL) return EAS_ERROR_INVALID_HANDLE; /* check for duplicate handle */ if (file1->dup) { dupFile = NULL; file2 = hwInstData->files; for (i = 0; i < EAS_MAX_FILE_HANDLES; i++) { /* check for duplicate */ if ((file1 != file2) && (file2->buffer == file1->buffer)) { /* is there more than one duplicate? */ if (dupFile != NULL) { /* clear this entry and return */ file1->buffer = NULL; return EAS_SUCCESS; } /* this is the first duplicate found */ else dupFile = file2; } file2++; } /* there is only one duplicate, clear the dup flag */ if (dupFile) dupFile->dup = EAS_FALSE; else /* if we get here, there's a serious problem */ return EAS_ERROR_HANDLE_INTEGRITY; /* clear this entry and return */ file1->buffer = NULL; return EAS_SUCCESS; } /* no duplicates -free the buffer */ EAS_HWFree(hwInstData, file1->buffer); /* clear this entry and return */ file1->buffer = NULL; return EAS_SUCCESS; }