156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*
256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *  EASLib.c
356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *  EASLIb
456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright (C) 2008 The Android Open Source Project
656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Licensed under the Apache License, Version 2.0 (the "License");
856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * you may not use this file except in compliance with the License.
956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * You may obtain a copy of the License at
1056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
1156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *      http://www.apache.org/licenses/LICENSE-2.0
1256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
1356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Unless required by applicable law or agreed to in writing, software
1456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * distributed under the License is distributed on an "AS IS" BASIS,
1556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * See the License for the specific language governing permissions and
1756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * limitations under the License.
1856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
1956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
2056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */
2156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
2256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdlib.h>
2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdio.h>
2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdarg.h>
2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <string.h>
2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas.h"
2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_report.h"
2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_host.h"
3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef JET_INTERFACE
3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "jet.h"
3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_EXPORT __attribute__((visibility("default")))
3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// #define DEBUG_FILE_IO
3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* include debug interface */
4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_host_debug.h"
4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef AUX_MIXER
4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_auxmix.h"
4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* this module requires dynamic memory support */
4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _STATIC_MEMORY
4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#error "eas_hostmm.c requires the dynamic memory model!\n"
5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef EAS_MAX_FILE_HANDLES
5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_MAX_FILE_HANDLES    32
5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef EAS_FILE_BUFFER_SIZE
5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_FILE_BUFFER_SIZE    32
5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*
6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * this structure and the related function are here
6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to support the ability to create duplicate handles
6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and buffering it in memory. If your system uses
6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * in-memory resources, you can eliminate the calls
6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to malloc and free, the dup flag, and simply track
6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the file size and read position.
6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */
6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks #ifdef BUFFERED_FILE_ACCESS
6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct eas_hw_file_tag
7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    FILE *pFile;
7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 bytesInBuffer;
7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 readIndex;
7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 filePos;
7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 fileSize;
7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_BOOL dup;
7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8 buffer[EAS_FILE_BUFFER_SIZE];
7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} EAS_HW_FILE;
7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct eas_hw_file_tag
8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32         fileSize;
8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32         filePos;
8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_BOOL        dup;
8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8          *buffer;
8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} EAS_HW_FILE;
8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef struct eas_hw_inst_data_tag
9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HW_FILE     files[EAS_MAX_FILE_HANDLES];
9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} EAS_HW_INST_DATA;
9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL errorConditions[eNumErrorConditions];
9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL ledState;
9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL vibState;
9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL backlightState;
9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_DEBUG_MSG_LEN 1024
10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparkstypedef void (*EAS_LOG_FUNC)(EAS_INT severity, char *msg);
10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_LOG_FUNC logCallback = NULL;
10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic char messageBuffer[MAX_DEBUG_MSG_LEN];
10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* error counts */
10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_INT eas_fatalErrors;
10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_INT eas_errors;
10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_INT eas_warnings;
11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic int severityLevel = 9999;
11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* wave out device */
11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef MAX_WAVE_OUT_BUFFERS
11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_WAVE_OUT_BUFFERS            8
11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef EAS_BUFFERS_PER_WAVE_BUFFER
11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define EAS_BUFFERS_PER_WAVE_BUFFER     8
11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * ResetErrorCounters()
12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_EXPORT void ResetErrorCounters()
12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eas_fatalErrors = 0;
12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eas_errors = 0;
12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    eas_warnings = 0;
13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * SetLogCallback()
13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_EXPORT void SetLogCallback (EAS_LOG_FUNC callback)
13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    logCallback = callback;
13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _NO_DEBUG_PREPROCESSOR
14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic S_DEBUG_MESSAGES debugMessages[] =
14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef UNIFIED_DEBUG_MESSAGES
14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_debugmsgs.h"
14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { 0,0,0 }
14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks};
14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_ReportEx()
15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_ReportEx (int severity, unsigned long hashCode, int serialNum, ...)
15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    va_list vargs;
15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int i;
15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    switch (severity)
16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_FATAL:
16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_fatalErrors++;
16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_ERROR:
16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_errors++;
16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_WARNING:
17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_warnings++;
17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        default:
17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check severity level */
17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (severity > severityLevel)
17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for callback */
18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (logCallback == NULL)
18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* find the error message and output to stdout */
18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (i = 0; debugMessages[i].m_pDebugMsg; i++)
18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((debugMessages[i].m_nHashCode == hashCode) &&
18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        (debugMessages[i].m_nSerialNum == serialNum))
19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            va_start(vargs, serialNum);
19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef WIN32
19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            vsprintf_s(messageBuffer, sizeof(messageBuffer), fmt, vargs);
19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            vsprintf(messageBuffer, debugMessages[i].m_pDebugMsg, vargs);
19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            logCallback(severity, messageBuffer);
19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            va_end(vargs);
19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return;
20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    printf("Unrecognized error: Severity=%d; HashCode=%lu; SerialNum=%d\n", severity, hashCode, serialNum);
20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EAS_ReportEx */
20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Report()
20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_Report (int severity, const char *fmt, ...)
21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    va_list vargs;
21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    switch (severity)
21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_FATAL:
21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_fatalErrors++;
21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_ERROR:
22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_errors++;
22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_WARNING:
22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_warnings++;
22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        default:
22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check severity level */
23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (severity > severityLevel)
23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for callback */
23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (logCallback == NULL)
23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    va_start(vargs, fmt);
24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _WIN32
24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    vsprintf_s(messageBuffer, sizeof(messageBuffer), fmt, vargs);
24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    vsprintf(messageBuffer, fmt, vargs);
24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    logCallback(severity, messageBuffer);
24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    va_end(vargs);
24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EAS_Report */
24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_ReportX()
25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_ReportX (int severity, const char *fmt, ...)
25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    va_list vargs;
25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    switch (severity)
25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_FATAL:
26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_fatalErrors++;
26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_ERROR:
26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_errors++;
26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        case _EAS_SEVERITY_WARNING:
26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            eas_warnings++;
27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        default:
27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check severity level */
27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (severity > severityLevel)
27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for callback */
28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (logCallback == NULL)
28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    va_start(vargs, fmt);
28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _WIN32
28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    vsprintf_s(messageBuffer, sizeof(messageBuffer), fmt, vargs);
28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    vsprintf(messageBuffer, fmt, vargs);
28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    logCallback(severity, messageBuffer);
29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    va_end(vargs);
29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_DLLSetDebugLevel()
29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_EXPORT void EAS_DLLSetDebugLevel (int severity)
30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    severityLevel = severity;
30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_ExSetDebugLevel()
30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_SetDebugLevel (int severity)
30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    severityLevel = severity;
31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SelectLibrary()
31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_EXPORT EAS_RESULT EAS_SelectLib (EAS_DATA_HANDLE pEASData, EAS_HANDLE streamHandle, EAS_BOOL testLib)
31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    extern EAS_SNDLIB_HANDLE VMGetLibHandle(EAS_INT libNum);
32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SetSoundLibrary(pEASData, streamHandle, VMGetLibHandle(testLib ? 1 : 0));
32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(_DEBUG) && !defined(MSC)
32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <crtdbg.h>
32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EnableHeapDebug()
32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic void EnableHeapDebug (void)
33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int temp;
33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    temp = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    temp |= _CRTDBG_ALLOC_MEM_DF;
33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    temp |= _CRTDBG_CHECK_ALWAYS_DF;
33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    temp |= _CRTDBG_LEAK_CHECK_DF;
33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks//  temp |= _CRTDBG_DELAY_FREE_MEM_DF;
33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    _CrtSetDbgFlag(temp);
33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * HeapCheck()
34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Check heap status
34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid HeapCheck (void)
34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int heapStatus;
35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* Check heap status */
35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    heapStatus = _heapchk();
35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((heapStatus == _HEAPOK) || (heapStatus == _HEAPEMPTY))
35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_FATAL, "Heap corrupt\n" );
35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWInit
36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Initialize host wrapper interface
36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWInit (EAS_HW_DATA_HANDLE *pHWInstData)
36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(_DEBUG) && !defined(MSC)
37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EnableHeapDebug();
37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks #ifdef BUFFERED_FILE_ACCESS
37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_INFO, "EAS_HWInit: Buffered file access\n");
37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks #else
37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_INFO, "EAS_HWInit: Memory mapped file access\n");
37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks #endif
38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eInitError])
38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* need to track file opens for duplicate handles */
38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pHWInstData = malloc(sizeof(EAS_HW_INST_DATA));
38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (!(*pHWInstData))
38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_MALLOC_FAILED;
38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HWMemSet(*pHWInstData, 0, sizeof(EAS_HW_INST_DATA));
39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWShutdown
39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Shut down host wrapper interface
39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWShutdown (EAS_HW_DATA_HANDLE hwInstData)
40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eShutdownError])
40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    free(hwInstData);
40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if defined(_DEBUG) && !defined(MSC)
41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    HeapCheck();
41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMalloc
42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Allocates dynamic memory
42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMalloc (EAS_HW_DATA_HANDLE hwInstData, EAS_I32 size)
42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eMallocError])
43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return NULL;
43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return malloc((size_t) size);
43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFree
43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Frees dynamic memory
44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid EAS_HWFree (EAS_HW_DATA_HANDLE hwInstData, void *p)
44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    free(p);
44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemCpy
45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copy memory wrapper
45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMemCpy (void *dest, const void *src, EAS_I32 amount)
45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return memcpy(dest, src, (size_t) amount);
46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
46356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
46456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemSet
46556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
46656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set memory wrapper
46756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid *EAS_HWMemSet (void *dest, int val, EAS_I32 amount)
47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return memset(dest, val, (size_t) amount);
47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWMemCmp
47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Compare memory wrapper
48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 EAS_HWMemCmp (const void *s1, const void *s2, EAS_I32 amount)
48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return (EAS_I32) memcmp(s1, s2, (size_t) amount);
48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef BUFFERED_FILE_ACCESS
48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWOpenFile
49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Open a file for read or write
49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWOpenFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_LOCATOR locator, EAS_FILE_HANDLE *pFile, EAS_FILE_MODE mode)
49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HW_FILE *file;
50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int i;
50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* set return value to NULL */
50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pFile = NULL;
50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* only support read mode at this time */
50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (mode != EAS_FILE_READ)
50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_FILE_MODE;
50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* find an empty entry in the file table */
51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file = hwInstData->files;
51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* is this slot being used? */
51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (file->pFile == NULL)
51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            EAS_RESULT result;
51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* open the file */
51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file->pFile = fopen((const char*) locator, "rb");
52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (file->pFile == NULL)
52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return EAS_ERROR_FILE_OPEN_FAILED;
52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* get file length */
52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((result = EAS_HWFileLength(hwInstData, file, &file->fileSize)) != EAS_SUCCESS)
52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                EAS_HWCloseFile(hwInstData, file);
52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return result;
52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO
53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWOpenFile: Open file %d\n", i);
53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* initialize some values */
53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file->bytesInBuffer = 0;
53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file->readIndex = 0;
53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file->filePos = 0;
53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file->dup = EAS_FALSE;
53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            *pFile = file;
54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_SUCCESS;
54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file++;
54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* too many open files */
54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_ERROR_MAX_FILES_OPEN;
54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFillBuffer
55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Fill buffer from file
55556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
55656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
55756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */
55856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFillBuffer (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file)
55956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
56056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* reposition the file pointer */
56156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (fseek(file->pFile, file->filePos, SEEK_SET) != 0)
56256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_SEEK;
56356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
56456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* read some data from the file */
56556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->bytesInBuffer = (EAS_I32) fread(file->buffer, 1, EAS_FILE_BUFFER_SIZE, file->pFile);
56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->readIndex = 0;
56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->bytesInBuffer == 0)
56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_EOF;
56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWReadFile
57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read data from a file
57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */
58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWReadFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *pBuffer, EAS_I32 n, EAS_I32 *pBytesRead)
58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 temp;
58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8 *p = pBuffer;
58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 bytesLeft = n;
58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pBytesRead = 0;
58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check handle integrity */
59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->pFile == NULL)
59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO
59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWReadFile: Reading %d bytes from position %d\n", n, file->filePos);
59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* try to fulfill request from buffer */
59856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (;bytesLeft > 0;)
59956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
60056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* how many bytes can we get from buffer? */
60156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        temp = file->bytesInBuffer - file->readIndex;
60256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (temp > bytesLeft)
60356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            temp = bytesLeft;
60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
60556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* copy data from buffer */
60656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        EAS_HWMemCpy(p, &file->buffer[file->readIndex], temp);
60756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *pBytesRead += temp;
60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->readIndex += temp;
60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->filePos += temp;
61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        p += temp;
61156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        bytesLeft -= temp;
61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
61356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* don't refill buffer if request is bigger than buffer */
61456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((bytesLeft == 0) || (bytesLeft >= EAS_FILE_BUFFER_SIZE))
61556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
61656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
61756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* refill buffer */
61856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((result = EAS_HWFillBuffer(hwInstData, file)) != EAS_SUCCESS)
61956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return result;
62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* more to read? do unbuffered read directly to target memory */
62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (bytesLeft)
62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* position the file pointer */
62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (fseek(file->pFile, file->filePos, SEEK_SET) != 0)
62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_ERROR_FILE_SEEK;
62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* read data in the buffer */
63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        temp = (EAS_I32) fread(p, 1, (size_t) bytesLeft, file->pFile);
63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *pBytesRead += temp;
63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->filePos += temp;
63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* reset buffer info */
63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->bytesInBuffer = 0;
63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->readIndex = 0;
63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO
64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define BYTES_PER_LINE 16
64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        char str[BYTES_PER_LINE * 3 + 1];
64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        EAS_INT i;
64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        for (i = 0; i < (n > BYTES_PER_LINE ? BYTES_PER_LINE : n) ; i ++)
64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            sprintf(&str[i*3], "%02x ", ((EAS_U8*)pBuffer)[i]);
64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (i)
64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            EAS_ReportX(_EAS_SEVERITY_NOFILTER, "%s\n", str);
64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* were n bytes read? */
65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (*pBytesRead != n)
65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_EOF;
65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetByte
66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a byte from a file
66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */
66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetByte (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p)
66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
67156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check handle integrity */
67256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->pFile == NULL)
67356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
67556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* use local buffer - do we have any data? */
67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->readIndex >= file->bytesInBuffer)
67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((result = EAS_HWFillBuffer(hwInstData, file)) != EAS_SUCCESS)
67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return result;
68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* if nothing to read, return EOF */
68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (file->bytesInBuffer == 0)
68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_EOF;
68456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
68656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* get a character from the buffer */
68756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *((EAS_U8*) p) = file->buffer[file->readIndex++];
68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
68956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO
69056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetByte: Reading from position %d, byte = 0x%02x\n", file->filePos, *(EAS_U8*)p);
69156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->filePos++;
69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
69856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetWord
70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a 16-bit value from the file
70256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 count;
70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8 c[2];
70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO
71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetWord: Reading 2 bytes from position %d\n", file->filePos);
71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* read 2 bytes from the file */
71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_HWReadFile(hwInstData, file, c, 2, &count)) != EAS_SUCCESS)
71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* order them as requested */
71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (msbFirst)
72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U16*) p) = ((EAS_U16) c[0] << 8) | c[1];
72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    else
72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U16*) p) = ((EAS_U16) c[1] << 8) | c[0];
72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetDWord
73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a 16-bit value from the file
73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetDWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 count;
73856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8 c[4];
73956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
74056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO
74156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWGetDWord: Reading 4 bytes from position %d\n", file->filePos);
74256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* read 4 bytes from the file */
74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_HWReadFile(hwInstData, file, c, 4, &count)) != EAS_SUCCESS)
74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
74856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* order them as requested */
74956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (msbFirst)
75056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U32*) p) = ((EAS_U32) c[0] << 24) | ((EAS_U32) c[1] << 16) | ((EAS_U32) c[2] << 8) | c[3];
75156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    else
75256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U32*) p) = ((EAS_U32) c[3] << 24) | ((EAS_U32) c[2] << 16) | ((EAS_U32) c[1] << 8) | c[0];
75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
75456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
75556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
75956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFilePos
76056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
76156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file
76256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
76556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */
76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFilePos (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pPosition)
76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check handle integrity */
77056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->pFile == NULL)
77156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
77256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
77356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pPosition = file->filePos;
77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
77756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeek
78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
78156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek to a specific location in the file
78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
78356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
78456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */
78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeek (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
78856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 newIndex;
78956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
79056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check handle integrity */
79156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->pFile == NULL)
79256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
79356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
79456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for seek past end */
79556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((position < 0) || (position > file->fileSize))
79656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_SEEK;
79756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
79856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO
79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWFileSeek: Seeking to new position %d\n", file->filePos);
80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
80156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
80256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* is new position in current buffer? */
80356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    newIndex = position - file->filePos + file->readIndex;
80456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((newIndex >= 0) && (newIndex < file->bytesInBuffer))
80556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
80656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->readIndex = newIndex;
80756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->filePos = position;
80856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_SUCCESS;
80956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
81056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
81156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* save new position and reset buffer info so EAS_HWGetByte doesn't fail */
81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->filePos = position;
81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->bytesInBuffer = 0;
81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->readIndex = 0;
81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
81656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
82056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeekOfs
82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek forward or back relative to the current position
82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
82456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */
82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeekOfs (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
82856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
82956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 temp;
83056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
83156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_FILE_IO
83256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_ReportX(_EAS_SEVERITY_NOFILTER, "EAS_HWFileSeekOfs: Seeking to new position %d\n", file->filePos + position);
83356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
83456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
83556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check handle integrity */
83656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->pFile == NULL)
83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
83956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for seek past end */
84056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    temp = file->filePos + position;
84156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((temp < 0) || (temp > file->fileSize))
84256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_SEEK;
84356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
84456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* is new position in current buffer? */
84556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    temp = position + file->readIndex;
84656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((temp >= 0) && (temp < file->bytesInBuffer))
84756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->readIndex = temp;
84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file->filePos += position;
85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_SUCCESS;
85156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
85256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
85356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* save new position and reset buffer info so EAS_HWGetByte doesn't fail */
85456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->filePos += position;
85556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->bytesInBuffer = 0;
85656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->readIndex = 0;
85756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
85856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
85956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
86056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
86156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
86256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileLength
86356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
86456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Return the file length
86556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
86656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
86756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
86856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) hwInstData available for customer use */
86956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileLength (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pLength)
87056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
87156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    long pos;
87256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
87356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check handle integrity */
87456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->pFile == NULL)
87556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
87656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
87756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((pos = ftell(file->pFile)) == -1L)
87856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_LENGTH;
87956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (fseek(file->pFile, 0L, SEEK_END) != 0)
88056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_LENGTH;
88156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((*pLength = ftell(file->pFile)) == -1L)
88256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_LENGTH;
88356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (fseek(file->pFile, pos, SEEK_SET) != 0)
88456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_LENGTH;
88556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
88656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
88756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
88856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
88956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
89056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWDupHandle
89156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
89256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Duplicate a file handle
89356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
89456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
89556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
89656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWDupHandle (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_FILE_HANDLE* pDupFile)
89756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
89856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HW_FILE *dupfile;
89956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int i;
90056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
90156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check handle integrity */
90256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pDupFile = NULL;
90356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->pFile == NULL)
90456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
90556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
90656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* find an empty entry in the file table */
90756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    dupfile = hwInstData->files;
90856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
90956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
91056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* is this slot being used? */
91156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (dupfile->pFile == NULL)
91256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
91356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
91456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* copy info from the handle to be duplicated */
91556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupfile->filePos = file->filePos;
91656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupfile->pFile = file->pFile;
91756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupfile->fileSize = file->fileSize;
91856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
91956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* set the duplicate handle flag */
92056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupfile->dup = file->dup = EAS_TRUE;
92156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
92256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* initialize some values */
92356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupfile->bytesInBuffer = 0;
92456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupfile->readIndex = 0;
92556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
92656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            *pDupFile = dupfile;
92756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_SUCCESS;
92856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
92956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        dupfile++;
93056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
93156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
93256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* too many open files */
93356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_ERROR_MAX_FILES_OPEN;
93456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
93556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
93656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
93756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
93856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWClose
93956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
94056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Wrapper for fclose function
94156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
94256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
94356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
94456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1)
94556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
94656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HW_FILE *file2,*dupFile;
94756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int i;
94856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
94956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check handle integrity */
95056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file1->pFile == NULL)
95156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
95256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
95356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for duplicate handle */
95456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file1->dup)
95556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
95656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        dupFile = NULL;
95756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file2 = hwInstData->files;
95856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
95956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
96056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* check for duplicate */
96156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((file1 != file2) && (file2->pFile == file1->pFile))
96256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
96356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* is there more than one duplicate? */
96456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if (dupFile != NULL)
96556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                {
96656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    /* clear this entry and return */
96756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    file1->pFile = NULL;
96856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    return EAS_SUCCESS;
96956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                }
97056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
97156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* this is the first duplicate found */
97256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                dupFile = file2;
97356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
97456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file2++;
97556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
97656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
97756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* there is only one duplicate, clear the dup flag */
97856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (dupFile)
97956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupFile->dup = EAS_FALSE;
98056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        else
98156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* if we get here, there's a serious problem */
98256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_ERROR_HANDLE_INTEGRITY;
98356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
98456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* clear this entry and return */
98556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file1->pFile = NULL;
98656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_SUCCESS;
98756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
98856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
98956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* no duplicates - close the file */
99056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (fclose(file1->pFile) != 0)
99156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_CLOSE_FAILED;
99256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
99356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* clear this entry and return */
99456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file1->pFile = NULL;
99556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
99656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
99756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else
99856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
99956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
100056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWOpenFile
100156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
100256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Open a file for read or write
100356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
100456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
100556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
100656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWOpenFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_LOCATOR locator, EAS_FILE_HANDLE *pFile, EAS_FILE_MODE mode)
100756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
100856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HW_FILE *file;
100956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    FILE *ioFile;
101056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int i, temp;
101156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
101256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* set return value to NULL */
101356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pFile = NULL;
101456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
101556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
101656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eOpenError])
101756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
101856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
101956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* only support read mode at this time */
102056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (mode != EAS_FILE_READ)
102156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_FILE_MODE;
102256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
102356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* find an empty entry in the file table */
102456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file = hwInstData->files;
102556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
102656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
102756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* is this slot being used? */
102856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (file->buffer == NULL)
102956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
103056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* open the file */
103156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((ioFile = fopen(locator,"rb")) == NULL)
103256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return EAS_ERROR_FILE_OPEN_FAILED;
103356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
103456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* determine the file size */
103556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (fseek(ioFile, 0L, SEEK_END) != 0)
103656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return EAS_ERROR_FILE_LENGTH;
103756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((file->fileSize = ftell(ioFile)) == -1L)
103856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return EAS_ERROR_FILE_LENGTH;
103956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (fseek(ioFile, 0L, SEEK_SET) != 0)
104056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return EAS_ERROR_FILE_LENGTH;
104156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
104256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* allocate a buffer */
104356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file->buffer = EAS_HWMalloc(hwInstData, file->fileSize);
104456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (file->buffer == NULL)
104556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
104656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                fclose(ioFile);
104756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return EAS_ERROR_MALLOC_FAILED;
104856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
104956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
105056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* read the file into memory */
105156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            temp = (int) fread(file->buffer, (size_t) file->fileSize, 1, ioFile);
105256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
105356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* close the file - don't need it any more */
105456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            fclose(ioFile);
105556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
105656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* check for error reading file */
105756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (temp != 1)
105856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return EAS_ERROR_FILE_READ_FAILED;
105956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
106056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* initialize some values */
106156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file->filePos = 0;
106256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file->dup = EAS_FALSE;
106356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
106456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            *pFile = file;
106556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_SUCCESS;
106656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
106756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file++;
106856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
106956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
107056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* too many open files */
107156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_ERROR_MAX_FILES_OPEN;
107256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
107356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
107456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
107556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
107656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWReadFile
107756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
107856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read data from a file
107956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
108056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
108156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
108256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
108356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWReadFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *pBuffer, EAS_I32 n, EAS_I32 *pBytesRead)
108456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
108556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 count;
108656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
108756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
108856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eReadError])
108956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
109056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
109156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure we have a valid handle */
109256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->buffer == NULL)
109356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
109456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
109556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* calculate the bytes to read */
109656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    count = file->fileSize - file->filePos;
109756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (n < count)
109856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        count = n;
109956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
110056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* copy the data to the requested location, and advance the pointer */
110156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (count)
110256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        EAS_HWMemCpy(pBuffer, &file->buffer[file->filePos], count);
110356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->filePos += count;
110456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pBytesRead = count;
110556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
110656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* were n bytes read? */
110756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (count!= n)
110856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_EOF;
110956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
111056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
111156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
111256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
111356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
111456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetByte
111556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
111656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read a byte from a file
111756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
111856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
111956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
112056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -e{715} hwInstData available for customer use */
112156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetByte (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p)
112256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
112356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
112456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
112556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eReadError])
112656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
112756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
112856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure we have a valid handle */
112956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->buffer == NULL)
113056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
113156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
113256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for end of file */
113356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->filePos >= file->fileSize)
113456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
113556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U8*) p) = 0;
113656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_EOF;
113756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
113856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
113956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* get a character from the buffer */
114056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *((EAS_U8*) p) = file->buffer[file->filePos++];
114156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
114256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
114356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
114456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
114556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
114656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetWord
114756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
114856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file
114956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
115056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
115156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
115256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
115356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
115456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
115556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
115656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8 c1, c2;
115756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
115856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* read 2 bytes from the file */
115956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_HWGetByte(hwInstData, file, &c1)) != EAS_SUCCESS)
116056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
116156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_HWGetByte(hwInstData, file, &c2)) != EAS_SUCCESS)
116256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
116356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
116456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* order them as requested */
116556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (msbFirst)
116656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U16*) p) = ((EAS_U16) c1 << 8) | c2;
116756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    else
116856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U16*) p) = ((EAS_U16) c2 << 8) | c1;
116956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
117056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
117156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
117256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
117356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
117456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
117556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWGetDWord
117656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
117756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file
117856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
117956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
118056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
118156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
118256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWGetDWord (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, void *p, EAS_BOOL msbFirst)
118356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
118456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
118556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8 c1, c2,c3,c4;
118656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
118756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* read 4 bytes from the file */
118856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_HWGetByte(hwInstData, file, &c1)) != EAS_SUCCESS)
118956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
119056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_HWGetByte(hwInstData, file, &c2)) != EAS_SUCCESS)
119156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
119256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_HWGetByte(hwInstData, file, &c3)) != EAS_SUCCESS)
119356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
119456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result = EAS_HWGetByte(hwInstData, file, &c4)) != EAS_SUCCESS)
119556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
119656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
119756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* order them as requested */
119856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (msbFirst)
119956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U32*) p) = ((EAS_U32) c1 << 24) | ((EAS_U32) c2 << 16) | ((EAS_U32) c3 << 8) | c4;
120056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    else
120156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *((EAS_U32*) p)= ((EAS_U32) c4 << 24) | ((EAS_U32) c3 << 16) | ((EAS_U32) c2 << 8) | c1;
120256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
120356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
120456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
120556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
120656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
120756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
120856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFilePos
120956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
121056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current location in the file
121156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
121256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
121356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
121456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
121556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFilePos (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pPosition)
121656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
121756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
121856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
121956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[ePosError])
122056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
122156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
122256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure we have a valid handle */
122356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->buffer == NULL)
122456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
122556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
122656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pPosition = file->filePos;
122756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
122856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EAS_HWFilePos */
122956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
123056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
123156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
123256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeek
123356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
123456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek to a specific location in the file
123556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
123656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
123756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
123856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
123956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeek (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
124056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
124156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
124256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
124356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eSeekError])
124456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
124556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
124656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure we have a valid handle */
124756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->buffer == NULL)
124856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
124956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
125056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* validate new position */
125156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((position < 0) || (position > file->fileSize))
125256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_SEEK;
125356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
125456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* save new position */
125556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->filePos = position;
125656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
125756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
125856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
125956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
126056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
126156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileSeekOfs
126256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
126356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Seek forward or back relative to the current position
126456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
126556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
126656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
126756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
126856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileSeekOfs (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 position)
126956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
127056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
127156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
127256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eSeekError])
127356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
127456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
127556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure we have a valid handle */
127656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->buffer == NULL)
127756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
127856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
127956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* determine the file position */
128056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    position += file->filePos;
128156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((position < 0) || (position > file->fileSize))
128256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_SEEK;
128356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
128456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* save new position */
128556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file->filePos = position;
128656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
128756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
128856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
128956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
129056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
129156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWFileLength
129256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
129356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Return the file length
129456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
129556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
129656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
129756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
129856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWFileLength (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_I32 *pLength)
129956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
130056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
130156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
130256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eLengthError])
130356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
130456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
130556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure we have a valid handle */
130656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->buffer == NULL)
130756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
130856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
130956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pLength = file->fileSize;
131056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
131156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
131256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
131356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
131456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
131556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWDupHandle
131656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
131756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Duplicate a file handle
131856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
131956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
132056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
132156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWDupHandle (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file, EAS_FILE_HANDLE *pDupFile)
132256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
132356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HW_FILE *dupFile;
132456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int i;
132556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
132656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
132756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eDupError])
132856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
132956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
133056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure we have a valid handle */
133156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file->buffer == NULL)
133256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
133356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
133456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* find an empty entry in the file table */
133556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    dupFile = hwInstData->files;
133656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
133756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
133856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* is this slot being used? */
133956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (dupFile->buffer == NULL)
134056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
134156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
134256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* copy info from the handle to be duplicated */
134356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupFile->filePos = file->filePos;
134456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupFile->fileSize = file->fileSize;
134556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupFile->buffer = file->buffer;
134656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
134756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* set the duplicate handle flag */
134856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupFile->dup = file->dup = EAS_TRUE;
134956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
135056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            *pDupFile = dupFile;
135156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_SUCCESS;
135256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
135356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        dupFile++;
135456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
135556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
135656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* too many open files */
135756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_ERROR_MAX_FILES_OPEN;
135856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
135956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
136056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
136156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
136256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWClose
136356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
136456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Wrapper for fclose function
136556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
136656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
136756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
136856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWCloseFile (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE file1)
136956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
137056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HW_FILE *file2,*dupFile;
137156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    int i;
137256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
137356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* simulate failure */
137456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (errorConditions[eCloseError])
137556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
137656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
137756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure we have a valid handle */
137856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file1->buffer == NULL)
137956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_INVALID_HANDLE;
138056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
138156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for duplicate handle */
138256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (file1->dup)
138356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
138456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        dupFile = NULL;
138556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file2 = hwInstData->files;
138656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        for (i = 0; i < EAS_MAX_FILE_HANDLES; i++)
138756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
138856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* check for duplicate */
138956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((file1 != file2) && (file2->buffer == file1->buffer))
139056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
139156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* is there more than one duplicate? */
139256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if (dupFile != NULL)
139356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                {
139456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    /* clear this entry and return */
139556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    file1->buffer = NULL;
139656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    return EAS_SUCCESS;
139756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                }
139856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
139956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* this is the first duplicate found */
140056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                else
140156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    dupFile = file2;
140256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
140356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            file2++;
140456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
140556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
140656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* there is only one duplicate, clear the dup flag */
140756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (dupFile)
140856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            dupFile->dup = EAS_FALSE;
140956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        else
141056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* if we get here, there's a serious problem */
141156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_ERROR_HANDLE_INTEGRITY;
141256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
141356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* clear this entry and return */
141456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        file1->buffer = NULL;
141556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_SUCCESS;
141656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
141756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
141856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* no duplicates -free the buffer */
141956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HWFree(hwInstData, file1->buffer);
142056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
142156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* clear this entry and return */
142256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    file1->buffer = NULL;
142356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
142456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
142556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
142656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
142756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
142856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
142956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWVibrate
143056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
143156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off vibrate function
143256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
143356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
143456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
143556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
143656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWVibrate (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
143756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
143856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    vibState = state;
143956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks//  EAS_ReportX(_EAS_SEVERITY_NOFILTER, "Vibrate state: %d\n", state);
144056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
144156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EAS_HWVibrate */
144256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
144356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
144456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
144556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWLED
144656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
144756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off LED
144856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
144956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
145056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
145156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
145256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWLED (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
145356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
145456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    ledState = state;
145556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks//  EAS_ReportX(_EAS_SEVERITY_NOFILTER, "LED state: %d\n", state);
145656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
145756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
145856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
145956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
146056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
146156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWBackLight
146256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
146356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Turn on/off backlight
146456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
146556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
146656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
146756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
146856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_HWBackLight (EAS_HW_DATA_HANDLE hwInstData, EAS_BOOL state)
146956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
147056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    backlightState = state;
147156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks//  EAS_ReportX(_EAS_SEVERITY_NOFILTER, "Backlight state: %d\n", state);
147256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
147356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
147456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
147556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
147656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
147756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_HWYield
147856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
147956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This function is called periodically by the EAS library to give the
148056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * host an opportunity to allow other tasks to run. There are two ways to
148156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * use this call:
148256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
148356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If you have a multi-tasking OS, you can call the yield function in the
148456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * OS to allow other tasks to run. In this case, return EAS_FALSE to tell
148556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the EAS library to continue processing when control returns from this
148656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * function.
148756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
148856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If tasks run in a single thread by sequential function calls (sometimes
148956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * call a "commutator loop"), return EAS_TRUE to cause the EAS Library to
149056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * return to the caller. Be sure to check the number of bytes rendered
149156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * before passing the audio buffer to the codec - it may not be filled.
149256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * The next call to EAS_Render will continue processing until the buffer
149356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * has been filled.
149456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
149556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
149656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
149756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, hwInstData) available for customer use */
149856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL EAS_HWYield (EAS_HW_DATA_HANDLE hwInstData)
149956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
150056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* put your code here */
150156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_FALSE;
150256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
150356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
150456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
1505