This is smsToML.c in view mode; [Download] [Up]
#include "../sms.h"
#define USAGE "Usage: smsToML <smsFile> <outputFile>"
main (int argc, char *argv[])
{
SMSHeader *pSmsHeader;
char *pData, *namedata;
SMS_DATA smsData;
int iError, i, j;
float *amps, *freqs, *phs;
FILE *fp;
if (argc != 3)
quit(USAGE);
if((iError = readSmsFile(argv[1], &pSmsHeader)) < 0)
{
if(iError == SMS_NOPEN)
quit("cannot open file");
if(iError == SMS_RDERR)
quit("read error");
if(iError == SMS_NSMS)
quit("not an SMS file");
if(iError == SMS_MALLOC)
quit("cannot allocate memory");
quit("error");
}
fp = fopen(argv[2],"w");
namedata = (char *)strtok (argv[2],".");
fprintf(fp,"%% This matlab file was generated by smsToML.\n");
fprintf(fp,"%% The principal variables defined below are \n");
fprintf(fp,"%% %s_amps, %s_freqs, ", namedata, namedata);
fprintf(fp, "(if applicable) %s_phases and %s_coeffs.\n", namedata, namedata);
fprintf(fp,"%% Also defined are header variables and an args string.\n");
fprintf(fp,"%% All variable names are prefixed by '%s_'.\n", namedata);
fprintf(fp,"\n%% HEADER INFORMATION:\n");
fprintf(fp,"%s_nrec = %d;\n", namedata, pSmsHeader->nRecords);
fprintf(fp,"%s_framerate = %d;\n", namedata, pSmsHeader->iFrameRate);
fprintf(fp,"%s_ntraj = %d;\n", namedata, pSmsHeader->nTrajectories);
fprintf(fp,"%s_nstoccoeffs = %d;\n", namedata, pSmsHeader->nStochasticCoeff);
fprintf(fp,"%s_format = %d;\n", namedata, pSmsHeader->iFormat);
fprintf(fp,"%s_stoctype = %d;\n", namedata, pSmsHeader->iStochasticType);
fprintf(fp,"%s_origsrate = %f;\n", namedata, pSmsHeader->fOriginalSRate);
fprintf(fp,"\n%s_amps = zeros(%s_nrec,%s_ntraj);\n", namedata, namedata,
namedata);
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
for(i = 0; i < pSmsHeader->nRecords; i++)
{
setSmsRecord(pSmsHeader, pData, &smsData);
fprintf(fp,"%s_amps(%d,:) = [", namedata, i+1);
for(j = 0; j < smsData.nTraj; j++)
fprintf(fp," %.2f", smsData.pFMagTraj[j]);
fprintf(fp," ];\n");
pData += pSmsHeader->iRecordBSize;
}
fprintf(fp,"\n%s_freqs = zeros(%s_nrec, %s_ntraj);\n", namedata, namedata,
namedata);
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
for(i = 0; i < pSmsHeader->nRecords; i++)
{
setSmsRecord(pSmsHeader, pData, &smsData);
fprintf(fp,"%s_freqs(%d,:) = [", namedata, i+1);
for(j = 0; j < smsData.nTraj; j++)
fprintf(fp," %.2f", smsData.pFFreqTraj[j]);
fprintf(fp,"];\n");
pData += pSmsHeader->iRecordBSize;
}
if (!(pSmsHeader->iFormat == FORMAT_HARMONIC ||
pSmsHeader->iFormat == FORMAT_INHARMONIC))
{
fprintf(fp,"\n%s_phases = zeros(%s_nrec,%s_ntraj);\n", namedata, namedata,
namedata);
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
for(i = 0; i < pSmsHeader->nRecords; i++)
{
setSmsRecord(pSmsHeader, pData, &smsData);
fprintf(fp,"%s_phases(%d,:) = [", namedata, i+1);
for(j = 0; j < smsData.nTraj; j++)
fprintf(fp," %.2f", smsData.pFPhaTraj[j]);
fprintf(fp," ];\n");
pData += pSmsHeader->iRecordBSize;
}
}
if (pSmsHeader->iStochasticType != STOC_NONE)
{
fprintf(fp,"\n%s_stoccoeffs = zeros(%s_nrec, %s_nstoccoeffs);\n", namedata,
namedata, namedata);
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
for(i = 0; i < pSmsHeader->nRecords; i++)
{
setSmsRecord(pSmsHeader, pData, &smsData);
fprintf(fp,"%s_stoccoeffs(%d,:) = [", namedata, i+1);
for(j = 0; j < smsData.nCoeff; j++)
fprintf(fp," %.4f", smsData.pFStocCoeff[j]);
fprintf(fp," ];\n");
pData += pSmsHeader->iRecordBSize;
}
fprintf(fp,"\n%s_stocgain = zeros(1, %s_nrec);\n", namedata,
namedata);
pData = (char *) pSmsHeader + pSmsHeader->iHeadBSize;
for(i = 0; i < pSmsHeader->nRecords; i++)
{
setSmsRecord(pSmsHeader, pData, &smsData);
fprintf(fp,"%s_stocgain (%d) = %.4f ;\n", namedata, i+1,
*(smsData.pFStocGain));
pData += pSmsHeader->iRecordBSize;
}
}
fprintf(fp,"\ndisp('Defined variables %s_*. Say whos for details.');\n",
namedata);
exit(0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.