156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File:
456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_main.c
556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose:
756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * The entry point and high-level functions for the EAS Synthesizer test
856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * harness.
956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
1056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2004
117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License.
147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at
157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and
227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License.
2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control:
2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *   $Revision: 775 $
2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *   $Date: 2007-07-20 10:11:11 -0700 (Fri, 20 Jul 2007) $
2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _lint
3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "lint_stdlib.h"
3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdio.h>
3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <string.h>
3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdlib.h>
3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <time.h>
3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas.h"
4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_wave.h"
4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_report.h"
4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* determines how many EAS buffers to fill a host buffer */
4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_BUFFERS         8
4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* default file to play if no filename is specified on the command line */
4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic const char defaultTestFile[] = "test.mid";
4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 polyphony;
5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* prototypes for helper functions */
5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic void StrCopy(char *dest, const char *src, EAS_I32 size);
5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_BOOL ChangeFileExt(char *str, const char *ext, EAS_I32 size);
5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT PlayFile (EAS_DATA_HANDLE easData, const char* filename, const char* outputFile, const S_EAS_LIB_CONFIG *pLibConfig, void *buffer, EAS_I32 bufferSize);
5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_BOOL EASLibraryCheck (const S_EAS_LIB_CONFIG *pLibConfig);
5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* main is defined after playfile to avoid the need for two passes through lint */
5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * PlayFile()
6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This function plays the file requested by filename
6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT PlayFile (EAS_DATA_HANDLE easData, const char* filename, const char* outputFile, const S_EAS_LIB_CONFIG *pLibConfig, void *buffer, EAS_I32 bufferSize)
7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HANDLE handle;
7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result, reportResult;
7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 count;
7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_STATE state;
7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 playTime;
8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    char waveFilename[256];
8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    WAVE_FILE *wFile;
8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT i;
8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_PCM *p;
8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* determine the name of the output file */
8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    wFile = NULL;
8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (outputFile == NULL)
8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        StrCopy(waveFilename, filename, sizeof(waveFilename));
9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (!ChangeFileExt(waveFilename, "wav", sizeof(waveFilename)))
9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error in output filename %s\n", waveFilename); */ }
9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_FAILURE;
9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        outputFile = waveFilename;
9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* call EAS library to open file */
9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((reportResult = EAS_OpenFile(easData, filename, &handle)) != EAS_SUCCESS)
10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_OpenFile returned %ld\n", reportResult); */ }
10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return reportResult;
10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* prepare to play the file */
10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_Prepare(easData, handle)) != EAS_SUCCESS)
10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Prepare returned %ld\n", result); */ }
10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        reportResult = result;
11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* get play length */
11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_ParseMetaData(easData, handle, &playTime)) != EAS_SUCCESS)
11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_ParseMetaData returned %ld\n", result); */ }
11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0xe624f4d9, 0x00000005 , playTime / 1000, playTime % 1000);
11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (reportResult == EAS_SUCCESS)
12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* create the output file */
12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        wFile = WaveFileCreate(outputFile, pLibConfig->numChannels, pLibConfig->sampleRate, sizeof(EAS_PCM) * 8);
12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (!wFile)
12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Unable to create output file %s\n", waveFilename); */ }
12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            reportResult = EAS_FAILURE;
12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* rendering loop */
13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    while (reportResult == EAS_SUCCESS)
13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* we may render several buffers here to fill one host buffer */
13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        for (i = 0, p = buffer; i < NUM_BUFFERS; i++, p+= pLibConfig->mixBufferSize * pLibConfig->numChannels)
13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* get the current time */
14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((result = EAS_GetLocation(easData, handle, &playTime)) != EAS_SUCCESS)
14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_GetLocation returned %d\n",result); */ }
14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if (reportResult == EAS_SUCCESS)
14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    reportResult = result;
14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "Parser time: %d.%03d\n", playTime / 1000, playTime % 1000); */ }
14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* render a buffer of audio */
15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((result = EAS_Render(easData, p, pLibConfig->mixBufferSize, &count)) != EAS_SUCCESS)
15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Render returned %d\n",result); */ }
15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if (reportResult == EAS_SUCCESS)
15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    reportResult = result;
15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result == EAS_SUCCESS)
15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* write it to the wave file */
16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (WaveFileWrite(wFile, buffer, bufferSize) != bufferSize)
16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "WaveFileWrite failed\n"); */ }
16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                reportResult = EAS_FAILURE;
16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (reportResult == EAS_SUCCESS)
16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* check stream state */
17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((result = EAS_State(easData, handle, &state)) != EAS_SUCCESS)
17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_State returned %d\n", result); */ }
17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                reportResult = result;
17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* is playback complete */
17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((state == EAS_STATE_STOPPED) || (state == EAS_STATE_ERROR))
17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close the output file */
18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (wFile)
18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (!WaveFileClose(wFile))
18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error closing wave file %s\n", waveFilename); */ }
18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (reportResult == EAS_SUCCESS)
19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                result = EAS_FAILURE;
19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close the input file */
19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_CloseFile(easData,handle)) != EAS_SUCCESS)
19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Close returned %ld\n", result); */ }
19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (reportResult == EAS_SUCCESS)
19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = EAS_FAILURE;
20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return reportResult;
20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end PlayFile */
20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * main()
20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: The entry point for the EAS sample application
20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksint main( int argc, char **argv )
21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_DATA_HANDLE easData;
21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    const S_EAS_LIB_CONFIG *pLibConfig;
22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    void *buffer;
22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result, playResult;
22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 bufferSize;
22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int i;
22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int temp;
22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    FILE *debugFile;
22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    char *outputFile = NULL;
22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* set the error reporting level */
22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_SetDebugLevel(_EAS_SEVERITY_INFO);
23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    debugFile = NULL;
23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* process command-line arguments */
23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (i = 1; i < argc; i++)
23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* check for switch */
23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (argv[i][0] == '-')
23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            switch (argv[i][1])
23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case 'd':
24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                temp = argv[i][2];
24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if ((temp >= '0') || (temp <= '9'))
24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    EAS_SetDebugLevel(temp);
24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                else
24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Invalid debug level %d\n", temp); */ }
24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case 'f':
24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if ((debugFile = fopen(&argv[i][2],"w")) == NULL)
24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Unable to create debug file %s\n", &argv[i][2]); */ }
25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                else
25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    EAS_SetDebugFile(debugFile, EAS_TRUE);
25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case 'o':
25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                outputFile = &argv[i][2];
25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case 'p':
25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                polyphony = atoi(&argv[i][2]);
25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if (polyphony < 1)
25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    polyphony = 1;
26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Polyphony set to %d\n", polyphony); */ }
26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            default:
26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            continue;
26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* assume success */
27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    playResult = EAS_SUCCESS;
27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* get the library configuration */
27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pLibConfig = EAS_Config();
27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (!EASLibraryCheck(pLibConfig))
27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return -1;
27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (polyphony > pLibConfig->maxVoices)
27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        polyphony = pLibConfig->maxVoices;
27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* calculate buffer size */
28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    bufferSize = pLibConfig->mixBufferSize * pLibConfig->numChannels * (EAS_I32)sizeof(EAS_PCM) * NUM_BUFFERS;
28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* allocate output buffer memory */
28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    buffer = malloc((EAS_U32)bufferSize);
28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (!buffer)
28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Error allocating memory for audio buffer\n"); */ }
28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* initialize the EAS library */
29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    polyphony = pLibConfig->maxVoices;
29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_Init(&easData)) != EAS_SUCCESS)
29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "EAS_Init returned %ld - aborting!\n", result); */ }
29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        free(buffer);
29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /*
30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks     * Some debugging environments don't allow for passed parameters.
30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks     * In this case, just play the default MIDI file "test.mid"
30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks     */
30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (argc < 2)
30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Playing '%s'\n", defaultTestFile); */ }
30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((playResult = PlayFile(easData, defaultTestFile, NULL, pLibConfig, buffer, bufferSize)) != EAS_SUCCESS)
30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %d playing file %s\n", playResult, defaultTestFile); */ }
30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* iterate through the list of files to be played */
31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    else
31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        for (i = 1; i < argc; i++)
31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* check for switch */
31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (argv[i][0] != '-')
31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Playing '%s'\n", argv[i]); */ }
32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if ((playResult = PlayFile(easData, argv[i], outputFile, pLibConfig, buffer, bufferSize)) != EAS_SUCCESS)
32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                {
32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %d playing file %s\n", playResult, argv[i]); */ }
32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    break;
32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                }
32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* shutdown the EAS library */
33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_Shutdown(easData)) != EAS_SUCCESS)
33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "EAS_Shutdown returned %ld\n", result); */ }
33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* free the output buffer */
33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    free(buffer);
33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close the debug file */
34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (debugFile)
34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        fclose(debugFile);
34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* play errors take precedence over shutdown errors */
34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (playResult != EAS_SUCCESS)
34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return playResult;
34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end main */
34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * StrCopy()
35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Safe string copy
35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic void StrCopy(char *dest, const char *src, EAS_I32 size)
36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int len;
36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    strncpy(dest, src, (size_t) size-1);
36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    len = (int) strlen(src);
36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (len < size)
36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        dest[len] = 0;
36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end StrCopy */
37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * ChangeFileExt()
37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Changes the file extension of a filename
37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_BOOL ChangeFileExt(char *str, const char *ext, EAS_I32 size)
38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    char *p;
38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* find the extension, if any */
38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p = strrchr(str,'.');
38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (!p)
39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((EAS_I32)(strlen(str) + 5) > size)
39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_FALSE;
39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        strcat(str,".");
39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        strcat(str,ext);
39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_TRUE;
39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure there's room for the extension */
39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p++;
40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *p = 0;
40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((EAS_I32)(strlen(str) + 4) > size)
40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FALSE;
40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    strcat(str,ext);
40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_TRUE;
40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end ChangeFileExt */
40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EASLibraryCheck()
40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Displays the library version and checks it against the header
41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * file used to build this code.
41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pLibConfig       - library configuration retrieved from the library
41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * returns EAS_TRUE if matched
41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_BOOL EASLibraryCheck (const S_EAS_LIB_CONFIG *pLibConfig)
42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* display the library version */
42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "EAS Library Version %d.%d.%d.%d\n",
42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pLibConfig->libVersion >> 24,
43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        (pLibConfig->libVersion >> 16) & 0x0f,
43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        (pLibConfig->libVersion >> 8) & 0x0f,
43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pLibConfig->libVersion & 0x0f); */ }
43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* display some info about the library build */
43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pLibConfig->checkedVersion)
43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tChecked library\n"); */ }
43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tMaximum polyphony: %d\n", pLibConfig->maxVoices); */ }
43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tNumber of channels: %d\n", pLibConfig->numChannels); */ }
43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tSample rate: %d\n", pLibConfig->sampleRate); */ }
44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tMix buffer size: %d\n", pLibConfig->mixBufferSize); */ }
44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pLibConfig->filterEnabled)
44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tFilter enabled\n"); */ }
44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _WIN32_WCE
44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tLibrary Build Timestamp: %s", ctime((time_t*)&pLibConfig->buildTimeStamp)); */ }
44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tLibrary Build ID: %s\n", pLibConfig->buildGUID); */ }
44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check it against the header file used to build this code */
44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /*lint -e{778} constant expression used for display purposes may evaluate to zero */
45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (LIB_VERSION != pLibConfig->libVersion)
45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Library version does not match header files. EAS Header Version %d.%d.%d.%d\n",
45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            LIB_VERSION >> 24,
45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            (LIB_VERSION >> 16) & 0x0f,
45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            (LIB_VERSION >> 8) & 0x0f,
45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            LIB_VERSION & 0x0f); */ }
45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FALSE;
45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_TRUE;
46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EASLibraryCheck */
46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
462