MADErr PPIdentifyFile(MADLibrary *inMADDriver, char *type, char *AlienFile) { UNFILE refNum; int i; MADInfoRec InfoRec; MADErr iErr = MADNoErr; strcpy(type, "!!!!"); // Check if we have access to this file refNum = iFileOpenRead(AlienFile); if (!refNum) return MADReadingErr; else { if (iGetEOF(refNum) < 100) iErr = MADIncompatibleFile; iClose(refNum); if (iErr) return iErr; } // Is it a MAD file? iErr = CheckMADFile(AlienFile); if (iErr == MADNoErr) { strcpy(type, "MADK"); return MADNoErr; } for (i = 0; i < inMADDriver->TotalPlug; i++) { if (CallImportPlug(inMADDriver, i, MADPlugTest, AlienFile, NULL, &InfoRec) == MADNoErr) { strcpy(type, inMADDriver->ThePlug[i].type); return MADNoErr; } } strcpy(type, "!!!!"); return MADCannotFindPlug; }
MADErr PPMADInfoFile(const char *AlienFile, MADInfoRec *InfoRec) { MADSpec *theMAD; long fileSize; UNFILE fileID; MADErr MADCheck; if ((MADCheck = CheckMADFile(AlienFile)) != MADNoErr) { return MADCheck; } theMAD = (MADSpec*)malloc(sizeof(MADSpec) + 200); fileID = iFileOpenRead(AlienFile); if (!fileID) { free(theMAD); return MADReadingErr; } fileSize = iGetEOF(fileID); iRead(sizeof(MADSpec), theMAD, fileID); iClose(fileID); strcpy(InfoRec->internalFileName, theMAD->name); InfoRec->totalPatterns = theMAD->numPat; InfoRec->partitionLength = theMAD->numPointers; InfoRec->totalTracks = theMAD->numChn; InfoRec->signature = 'MADK'; strcpy(InfoRec->formatDescription, "MADK"); InfoRec->totalInstruments = theMAD->numInstru; InfoRec->fileSize = fileSize; free(theMAD); theMAD = NULL; return MADNoErr; }
MADErr CheckMADFile(const char* name) { UNFILE refNum; char charl[CharlMADcheckLength]; MADErr err; refNum = iFileOpenRead(name); if (!refNum) return MADReadingErr; else { iRead(CharlMADcheckLength, charl, refNum); if (charl[0] == 'M' && // MADK charl[1] == 'A' && charl[2] == 'D' && charl[3] == 'K') err = MADNoErr; else err = MADFileNotSupportedByThisPlug; iClose(refNum); } return err; }
extern MADErr PPImpExpMain(MADFourChar order, char* AlienFileName, MADMusic *MadFile, MADInfoRec *info, MADDriverSettings *init) #endif { MADErr myErr = MADNoErr; void* AlienFile; UNFILE iFileRefI; long sndSize; switch (order) { case MADPlugImport: iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { sndSize = iGetEOF(iFileRefI); // ** MEMORY Test AlienFile = malloc(sndSize); if (AlienFile == NULL) { myErr = MADNeedMemory; } else { myErr = iRead(sndSize, AlienFile, iFileRefI); if (myErr == MADNoErr) { myErr = TestoldMADFile(AlienFile); if (myErr == MADNoErr) { myErr = MADFG2Mad(AlienFile, sndSize, MadFile, init); } } free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } else myErr = MADReadingErr; break; case MADPlugTest: iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { sndSize = 5000; // Read only 5000 first bytes for optimisation AlienFile = malloc(sndSize); if (AlienFile == NULL) { myErr = MADNeedMemory; } else { myErr = iRead(sndSize, AlienFile, iFileRefI); if(myErr == MADNoErr) myErr = TestoldMADFile(AlienFile); free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } else myErr = MADReadingErr; break; case MADPlugInfo: iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { info->fileSize = iGetEOF(iFileRefI); sndSize = 5000; // Read only 5000 first bytes for optimisation AlienFile = malloc(sndSize); if (AlienFile == NULL) { myErr = MADNeedMemory; } else { myErr = iRead(sndSize, AlienFile, iFileRefI); if (myErr == MADNoErr) { myErr = ExtractoldMADInfo(info, AlienFile); } free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } else myErr = MADReadingErr; break; default: myErr = MADOrderNotImplemented; break; } return myErr; }
extern MADErr PPImpExpMain(MADFourChar order, char *AlienFileName, MADMusic *MadFile, PPInfoRec *info, MADDriverSettings *init) { OSErr myErr = noErr; Ptr AlienFile; UNFILE iFileRefI; long sndSize; switch(order) { case MADPlugImport: iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { sndSize =iGetEOF(iFileRefI); // ** MEMORY Test Start AlienFile = malloc(sndSize * 2L); if (AlienFile == NULL) myErr = MADNeedMemory; // ** MEMORY Test End else { free(AlienFile); AlienFile = malloc(sndSize); myErr = iRead(sndSize, AlienFile, iFileRefI); if (myErr == noErr) { myErr = TestMIDIFile(AlienFile); if (myErr == noErr) ConvertMidiFile(AlienFile, MadFile, init); free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } } else myErr = MADReadingErr; break; case MADPlugTest: iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { sndSize = 1024L; AlienFile = malloc(sndSize); if (AlienFile == NULL) myErr = MADNeedMemory; else { myErr = iRead(sndSize, AlienFile, iFileRefI); if(myErr == noErr) myErr = TestMIDIFile(AlienFile); free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } else myErr = MADReadingErr; break; case 'INFO': iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { info->fileSize = iGetEOF(iFileRefI); sndSize = 5000L; // Read only 5000 first bytes for optimisation AlienFile = malloc(sndSize); if (AlienFile == NULL) myErr = MADNeedMemory; else { myErr = iRead(sndSize, AlienFile, iFileRefI); if(myErr == noErr) myErr = ExtractMIDIInfo(info, AlienFile); free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } else myErr = MADReadingErr; break; default: myErr = MADOrderNotImplemented; break; } return myErr; }
extern MADErr PPImpExpMain(MADFourChar order, char* AlienFileName, MADMusic *MadFile, MADInfoRec *info, MADDriverSettings *init) #endif { MADErr myErr = MADNoErr; void* AlienFile; long sndSize; UNFILE iFileRefI; switch (order) { case MADPlugImport: iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { sndSize = iGetEOF(iFileRefI); AlienFile = malloc(sndSize); if (AlienFile == NULL) { myErr = MADNeedMemory; } else { myErr = iRead(sndSize, AlienFile, iFileRefI); if (myErr == MADNoErr) { myErr = TestOKTAFile(AlienFile); if (myErr == MADNoErr) { myErr = ConvertOKTA2Mad(AlienFile, sndSize, MadFile, init); } } free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } else myErr = MADReadingErr; break; case MADPlugTest: iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { sndSize = 1024; AlienFile = malloc(sndSize); if (AlienFile == NULL) myErr = MADNeedMemory; else { myErr = iRead(sndSize, AlienFile, iFileRefI); if(myErr == MADNoErr) myErr = TestOKTAFile(AlienFile); free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } else myErr = MADReadingErr; break; case MADPlugInfo: iFileRefI = iFileOpenRead(AlienFileName); if (iFileRefI) { info->fileSize = iGetEOF(iFileRefI); sndSize = info->fileSize; AlienFile = malloc(sndSize); if (AlienFile == NULL) myErr = MADNeedMemory; else { myErr = iRead(sndSize, AlienFile, iFileRefI); if (myErr == MADNoErr) { myErr = ExtractOKTAInfo(info, AlienFile, sndSize); } free(AlienFile); AlienFile = NULL; } iClose(iFileRefI); } else myErr = MADReadingErr; break; default: myErr = MADOrderNotImplemented; break; } return myErr; }
FILE* iFileOpen(const char *name) { return iFileOpenRead(name); }