This is SmsObject.m in view mode; [Download] [Up]
#import "SmsObject.h" @implementation SmsObject - initFromFile:(char*)fileName { [super init]; if([self readFile:fileName] != SMS_OK) { [self free]; return nil; } iCurrentFrame = -1; initSms(&smsRecord); return self; } - (int)readFile:(char*)fileName { int iError; iError = readSmsFile(fileName, &pSmsHeader); return iError; } - (int)getNRecords { return(pSmsHeader->nRecords); } - (int)getNTrajectories { return(pSmsHeader->nTrajectories); } - (int)getNStochasticCoeff { return(pSmsHeader->nStochasticCoeff); } - (int)getFormat { return(pSmsHeader->iFormat); } - (int)getFrameRate { return(pSmsHeader->iFrameRate); } - (int)getStochasticType { return(pSmsHeader->iStochasticType); } - (float)getOriginalSRate { return(pSmsHeader->fOriginalSRate); } - (SMS_DATA *)getRecord:(int)iFrame { if(iFrame >= 0 && iFrame < pSmsHeader->nRecords) { char *pData; pData = (char *) pSmsHeader->pChDataRecords + iFrame * pSmsHeader->iRecordBSize; setSmsRecord(pSmsHeader, pData, &smsRecord); iCurrentFrame = iFrame; } else ClearSms (&smsRecord, pSmsHeader->iFormat); return &smsRecord; } - setSmsRecord:(int)iFrame record:(SMS_DATA *)pRecord { if(iFrame >= 0 && iFrame < pSmsHeader->nRecords) { char *pData; pData = (char *) pSmsHeader->pChDataRecords + iFrame * pSmsHeader->iRecordBSize; setSmsRecord(pSmsHeader, pData, pRecord); iCurrentFrame = iFrame; } else ClearSms (pRecord, pSmsHeader->iFormat); return self; } - (float)getDeterministicFreq:(int)iFrame iTraj:(int)iTraj { if(iFrame >= 0 && iFrame < pSmsHeader->nRecords && iTraj >=0 && iTraj < pSmsHeader->nTrajectories) { if(iFrame == iCurrentFrame) return(smsRecord.pFFreqTraj[iTraj]); else { float *pFData; pFData = (float *) ((char*)pSmsHeader->pChDataRecords + iFrame * pSmsHeader->iRecordBSize + iTraj * sizeof(float)); return(*pFData); } } else return(-1); } - (float)getDeterministicMag:(int)iFrame iTraj:(int)iTraj { if(iFrame >= 0 && iFrame < pSmsHeader->nRecords && iTraj >=0 && iTraj < pSmsHeader->nTrajectories) { if(iFrame == iCurrentFrame) return(smsRecord.pFMagTraj[iTraj]); else { float *pFData; pFData = (float *) ((char*)pSmsHeader->pChDataRecords + iFrame * pSmsHeader->iRecordBSize + sizeof(float) * pSmsHeader->nTrajectories + iTraj * sizeof(float)); return(*pFData); } } else return(-1); } - (float)getStochasticGain:(int)iFrame { if(iFrame >= 0 && iFrame < pSmsHeader->nRecords) { if(iFrame == iCurrentFrame) return(*smsRecord.pFStocGain); else { float *pFData; int nComponents = 2; if (pSmsHeader->iFormat == FORMAT_HARMONIC_WITH_PHASE || pSmsHeader->iFormat == FORMAT_INHARMONIC_WITH_PHASE) nComponents = 3; pFData = (float *) ((char*)pSmsHeader->pChDataRecords + iFrame * pSmsHeader->iRecordBSize + sizeof(float) * nComponents * pSmsHeader->nTrajectories + sizeof(float) * pSmsHeader->nStochasticCoeff); return(*pFData); } } else return(-1); } - (float)getStochasticCoefficient:(int)iFrame iCoeff:(int)iCoeff { if(iFrame >= 0 && iFrame < pSmsHeader->nRecords && iCoeff >=0 && iCoeff < pSmsHeader->nStochasticCoeff) { if(iFrame == iCurrentFrame) return(smsRecord.pFStocCoeff[iCoeff]); else { float *pFData; int nComponents = 2; if (pSmsHeader->iFormat == FORMAT_HARMONIC_WITH_PHASE || pSmsHeader->iFormat == FORMAT_INHARMONIC_WITH_PHASE) nComponents = 3; pFData = (float *) ((char*)pSmsHeader->pChDataRecords + iFrame * pSmsHeader->iRecordBSize + sizeof(float) * nComponents * pSmsHeader->nTrajectories + sizeof(float) * iCoeff); return(*pFData); } } else return(-1); } -(char *)getTextCharacters { return (pSmsHeader->pChTextCharacters); } - free { free (pSmsHeader); return [super free]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.