#ifdef MIPS_C
static char * message[] = {
#define ERRDAT(name, mes) mes,
};
#else
#ifdef WIN32
#define ERRDAT(name, mes) static char S##name[] = mes;
#else
#define ERRDAT(name, mes) static char _based(_segname("_CODE")) S##name[] = mes;
#endif
#include "errors.h"
#undef ERRDAT

#ifdef WIN32
static char * message[] = {
#else
static char _based(_segname("_CODE")) *_based(_segname("_CODE")) message[] = {
#endif
#define ERRDAT(name, mes) S##name,
#include "errors.h"
#undef ERRDAT
};
#endif

ushort PASCAL GetErrorText (PHTM phTM, EESTATUS Status, PEEHSTR phError)
{
    UINT        len;
    ushort      err_num;
    ushort      buflen;
    char FAR   *pBuf;
    char        Tempbuf[4];
    int         cnt;

    if ((*phTM == 0) || (Status != EEGENERAL)) {
        *phError = 0;
        return (EECATASTROPHIC);
    }
    if ((*phError = MHMemAllocate (ERRSTRMAX)) == 0) {
        return (EENOMEMORY);
    }
    else {
        buflen = ERRSTRMAX - 1;
        pBuf = MHMemLock (*phError);
        _fmemset (pBuf, 0, buflen);
        DASSERT( pExState == NULL );
        pExState = MHMemLock (*phTM);
        if ((err_num = pExState->err_num) != 0) {
            if (err_num >= ERR_MAX) {
                DASSERT (FALSE);
            }
            else {
                //DASSERT (message[err_num].num == err_num);
                len = _fstrlen (message[err_num]);
                len = (UINT) min (len, (UINT)buflen);
                _itoa (err_num, Tempbuf, 10);
                cnt = 7 - (short)_fstrlen (Tempbuf);
#if defined(C_ONLY)
                _fmemcpy (pBuf, "CAN000", cnt);
#else
                _fmemcpy (pBuf, "CXX000", cnt);
#endif
                pBuf += cnt;
                _fmemcpy (pBuf, Tempbuf, _fstrlen (Tempbuf));
                pBuf +=_fstrlen(Tempbuf);
                _fmemcpy (pBuf, ": Error:  ", 10);
                pBuf += 9;
                _fstrncpy (pBuf, message[err_num], len);
                *(pBuf + len) = 0;
            }
        } else {
#if defined(C_ONLY)
            _fstrcpy (pBuf, "CAN000");
#else
            _fstrcpy (pBuf, "CXX000");
#endif
            _fstrcat (pBuf, " Error:  Unknown error");
        }
        MHMemUnLock (*phError);
        MHMemUnLock (*phTM);
        pExState = NULL;
        return (EENOERROR);
    }
}