You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bh...@apache.org on 2012/01/31 16:50:58 UTC

svn commit: r1238673 [1/2] - in /uima/uimacpp/trunk/src/framework: exceptions.cpp uima/exceptions.hpp

Author: bhavani
Date: Tue Jan 31 15:50:57 2012
New Revision: 1238673

URL: http://svn.apache.org/viewvc?rev=1238673&view=rev
Log:
UIMA-2361 implemented uima exception addParam() as a template function.

Modified:
    uima/uimacpp/trunk/src/framework/exceptions.cpp   (contents, props changed)
    uima/uimacpp/trunk/src/framework/uima/exceptions.hpp   (contents, props changed)

Modified: uima/uimacpp/trunk/src/framework/exceptions.cpp
URL: http://svn.apache.org/viewvc/uima/uimacpp/trunk/src/framework/exceptions.cpp?rev=1238673&r1=1238672&r2=1238673&view=diff
==============================================================================
--- uima/uimacpp/trunk/src/framework/exceptions.cpp (original)
+++ uima/uimacpp/trunk/src/framework/exceptions.cpp Tue Jan 31 15:50:57 2012
@@ -1,744 +1,678 @@
-/*
--------------------------------------------------------------------------------
-
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
-
--------------------------------------------------------------------------------
-
-
--------------------------------------------------------------------------------
-*/
-
-#if defined(_MSC_VER)
-#include <stdio.h>
-#include <eh.h>
-#include <windows.h>
-#include <winbase.h>
-#endif
-
-#include "uima/pragmas.hpp" //must be included first to disable warnings
-#include "uima/msg.h"
-#include <string>
-#include <sstream>
-
-#include "uima/macros.h"
-#include "uima/trace.hpp"
-
-#include "uima/strconvert.hpp"
-#include "uima/unistrref.hpp"
-#include "uima/comp_ids.h"
-#include "uima/exceptions.hpp"
-#include "uima/msgstrtab.h"
-
-using namespace std;
-
-namespace uima {
-
-///Constructor with just the message id
-  ErrorMessage::ErrorMessage(
-    TyMessageId                          utMsgId
-  ) :
-      iv_utMsgId(utMsgId) {
-    if ( iv_utMsgId == 0) {
-      iv_utMsgId = UIMA_MSG_ID_NO_MESSAGE_AVAILABLE;
-    }
-  }
-///Constructor with a single char * parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId                          utMsgId,
-    const char *                            cpszParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    iv_vecParams.push_back((string)cpszParam1);
-  }
-
-///Constructor with a single string parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId           utMsgId,
-    const string &           crstrParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    iv_vecParams.push_back(crstrParam1);
-  }
-
-///Constructor with a single UChar * parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId                         utMsgId,
-    const UChar *                          cpuszParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    string s;
-    UnicodeStringRef(cpuszParam1).extract(s);         // Convert to default encoding for platform
-    iv_vecParams.push_back(s);
-  }
-
-///Constructor with a single UnicodeString parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId                         utMsgId,
-    const icu::UnicodeString &             crustrParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    string s;
-    UnicodeStringRef(crustrParam1).extract(s);         // Convert to default encoding for platform
-    iv_vecParams.push_back(s);
-  }
-
-///Constructor with a single int parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId           utMsgId,
-    int                      iParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    string s;
-    iv_vecParams.push_back(long2String(iParam1, s));
-  }
-
-///Constructor with a single unsigned int parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId           utMsgId,
-    unsigned int             uiParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    string s;
-    iv_vecParams.push_back(long2String((int) uiParam1, s));
-  }
-
-
-///Constructor with a single long parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId           utMsgId,
-    long                     lParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    string s;
-    iv_vecParams.push_back(long2String(lParam1, s));
-  }
-
-///Constructor with a single unsigned long parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId           utMsgId,
-    unsigned long            ulParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    string s;
-    iv_vecParams.push_back(long2String((long) ulParam1, s));
-  }
-
-///Constructor with a single double parameter
-  ErrorMessage::ErrorMessage(
-    TyMessageId           utMsgId,
-    const double             dParam1
-  ) :
-      iv_utMsgId(utMsgId) {
-    assert( iv_utMsgId != 0 );
-    string s;
-    iv_vecParams.push_back(double2String(dParam1, s));
-  }
-
-///Constructor with a full parameter vector
-  ErrorMessage::ErrorMessage(
-    TyMessageId           utMsgId,
-    const vector<string> &   crvecParams
-  ) :
-      iv_utMsgId(utMsgId),
-      iv_vecParams(crvecParams) {
-    assert( iv_utMsgId != 0 );
-  }
-
-
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(const char * cpsz) {
-    iv_vecParams.push_back(cpsz);
-  }
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(const string & str) {
-    iv_vecParams.push_back(str);
-  }
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(const UChar * cpuszParam) {
-    string s;
-    UnicodeStringRef(cpuszParam).extract(s);         // Convert to default encoding for platform
-    iv_vecParams.push_back(s);
-  }
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(const icu::UnicodeString & crustrParam) {
-    string s;
-    UnicodeStringRef(crustrParam).extract(s);         // Convert to default encoding for platform
-    iv_vecParams.push_back(s);
-  }
-
-  void ErrorMessage::addParam(uima::UnicodeStringRef const & crParam) {
-    icu::UnicodeString str(crParam.getBuffer(), crParam.length() );
-    addParam(str);
-  }
-
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(long l) {
-    string str;
-    convertToString(l, str);
-    iv_vecParams.push_back(str);
-  }
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(unsigned long ul) {
-    string str;
-    convertToString(ul, str);
-    iv_vecParams.push_back(str);
-  }
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(int i) {
-    string str;
-    convertToString(i, str);
-    iv_vecParams.push_back(str);
-  }
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(unsigned int ui) {
-    string str;
-    convertToString(ui, str);
-    iv_vecParams.push_back(str);
-  }
-  ///add parameter to message id
-  void
-  ErrorMessage::addParam(double d) {
-    string str;
-    convertToString(d, str);
-    iv_vecParams.push_back(str);
-  }
-
-  /*------------------------------- Constructors -------------------------------*/
-
-  ErrorContext::ErrorContext(
-    const ErrorMessage &     crclMessage,
-    const char*                   pszFilename,
-    const char*                   pszFunction,
-    unsigned long                 ulLineNumber
-  ):
-      iv_clMessage(crclMessage),
-      iv_pszFilename(pszFilename),
-      iv_pszFunction(pszFunction),
-      iv_ulLineNo(ulLineNumber) {}
-
-#ifdef OS_STL
-  Exception::~Exception()
-#else
-  Exception::~Exception() UIMA_THROW0()
-#endif
-  {}
-
-  /*------------------------------ Output Support ------------------------------*/
-
-  string
-  ErrorMessage::asString() const {
-
-    size_t numparams = getMessageParams().size();
-
-    // Check for unknown message id
-    if (iv_utMsgId < 0 || iv_utMsgId > UIMA_MSG_ID_SIGNATURE_END) {
-      return string("Unknown message id " + iv_utMsgId);
-    }
-
-    //parameter substitution
-
-    //locate message in message table
-    const TCHAR ** messages = gs_aszMessageStringTable;
-    const TCHAR * msg = messages[iv_utMsgId];
-
-    TCHAR * buf = new TCHAR[UIMA_MSG_MAX_STR_LEN];
-    memset(buf,'\0',UIMA_MSG_MAX_STR_LEN);
-
-    int numwritten=0;
-
-    TCHAR * trg = buf;
-    while (*msg) {
-      if (numwritten > UIMA_MSG_MAX_STR_LEN) {
-        break;
-      }
-      if (*msg == UIMA_MSG_REPLACE_CHAR) {
-        msg = msg+1;
-        if (*msg == UIMA_MSG_REPLACE_CHAR) {
-          *trg = *msg;
-          trg = trg +1;
-          ;
-          msg = msg+1;
-          numwritten++;
-        } else {  //replace %n with the corresponding param
-          unsigned long index;
-          int len;
-          string arg;
-          // determine the number of the specified argument ...
-          index = (unsigned long) atol(msg);
-          if (index > numparams)       // param not defined
-          {
-            arg = "???";      // replace it by "dont-know"
-          } else {
-            // ... the indexed argument ...
-            arg = iv_vecParams[index - 1]; // zero-based array!
-            //assert(arg.length() > 0);
-          }
-          len = arg.length();
-          // ... and then copy the argument
-          if (UIMA_MSG_MAX_STR_LEN-numwritten < len) {
-            len = UIMA_MSG_MAX_STR_LEN - numwritten;
-          }
-          if (len > 0) {
-            strncpy(trg, arg.c_str(), len);
-            trg = trg+len;
-          }
-          msg = msg+1;
-          while ( isdigit(*msg) ) { //handle arg number 10 or more
-            msg = msg+1;
-          }
-        }
-      } else {
-        *trg = *msg;
-        trg = trg+1;
-        msg = msg+1;
-      }
-    }
-    //cout << buf << endl;
-   string target(buf);
-   delete[] buf ;
-   return target;
-	 //string target;
-	 //target.assign(buf, UIMA_MSG_MAX_STR_LEN);                   // Copy the result to the string
-   //delete buf;
-	 //return target;
-  }
-
-  ostream &
-  operator << (
-    ostream &            os,
-    const ErrorMessage & errorMsg
-  ) {
-    os << errorMsg.asString();
-    return(os);
-  }
-
-  string
-  ErrorContext::asString() const {
-    string s;
-    s += getMessage().asString();
-    if (getFileName() != NULL) {
-      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "     File     : " + getFileName();
-    }
-    if (getFunctionName() != NULL) {
-      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "     Function : " + getFunctionName();
-    }
-    if (getLineNumber() != 0) {
-      string sNum;
-      long2String(getLineNumber(), sNum);
-      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "     Line     : " + sNum;
-    }
-
-    return(s);
-  }
-
-  ostream &
-  operator << (
-    ostream            & os,
-    const ErrorContext & errContext
-  ) {
-    os << errContext.asString();
-    return (os);
-  }
-
-  void ErrorMessage::reset(void) {
-    iv_utMsgId = UIMA_MSG_ID_NO_MESSAGE_AVAILABLE;
-    iv_vecParams.clear();
-  }
-
-  /* ----------------------------------------------------------------------- */
-  /*   ErrorInfo                                                        */
-  /* ----------------------------------------------------------------------- */
-
-  /*------------------------------- Statics  -----------------------------------*/
-//initialize static member var to an initial value
-
-  const char * ErrorInfo::cv_cpszContextPrefix   = "   While      : ";
-  const char * ErrorInfo::cv_cpszIndent          = "";
-
-
-  /*------------------------------- Constructors -------------------------------*/
-
-  ErrorInfo::ErrorInfo(
-    const ErrorMessage     & rclMessage,
-    TyErrorId                ulErrorId,
-    ErrorInfo::EnSeverity    enSeverity
-  ) :
-      iv_clErrorMsg(rclMessage),
-      iv_ulErrorId(ulErrorId),
-      iv_enSeverity(enSeverity),
-      iv_vecContexts() {}
-
-  ErrorInfo::ErrorInfo( void ) :
-      iv_clErrorMsg(),
-      iv_ulErrorId(UIMA_ERR_NONE),
-      iv_enSeverity(recoverable),
-      iv_vecContexts() {}
-
-  ErrorInfo::~ErrorInfo() {}
-
-//constructor (copy)
-//? Exception::Exception(
-//?   const Exception&            rclException
-//? )
-//? {
-//? }
-
-  /*---------------------------- Exception Context ----------------------------*/
-  void
-  ErrorInfo::addContext( const ErrorContext & crclContext ) {
-    iv_vecContexts.push_back(crclContext);
-  }
-
-  const ErrorContext *
-  ErrorInfo::contextPtrAtIndex( size_t uiContextIndex ) const {
-    if (uiContextIndex >= iv_vecContexts.size()) {
-      return(NULL);
-    }
-    return(&iv_vecContexts[uiContextIndex]);
-  }
-
-  /*------------------------------ Output Support ------------------------------*/
-  string
-  ErrorInfo::asString() const {
-    string s;
-    if (getErrorId() == UIMA_ERR_NONE) {
-      s += string("No Error\n");
-      return (s);
-    }
-    if (getErrorId() != UIMA_ERR_NONE) {
-      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "Error number  : ";
-      string sErr;
-      long2String( getErrorId(), sErr);
-      s += sErr;
-    }
-    s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "Recoverable   : " + (isRecoverable() ? "Yes" : "No");
-    s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "Error         : " + getMessage().asString();
-    for (size_t i = 0; i < contextCount(); ++i) {
-      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + ErrorInfo::getGlobalErrorInfoContextPrefix();
-      assert(EXISTS(contextPtrAtIndex(i)));   //lint !e666: Expression with side effects passed to repeated parameter 1 in macro EXISTS
-      s += contextPtrAtIndex(i)->asString();
-    }
-    s += string("\n");
-
-    return (s);
-  }
-
-///output support for streams
-  ostream &
-  operator << (
-    ostream         & os,
-    const ErrorInfo & errInfo
-  ) {
-    os << errInfo.asString();
-    return(os);
-  }
-
-  void ErrorInfo::reset(void) {
-    iv_clErrorMsg.reset();
-    iv_ulErrorId = UIMA_ERR_NONE;
-    iv_enSeverity = recoverable;
-    iv_vecContexts.clear();
-  }
-
-  /* ----------------------------------------------------------------------- */
-  /*   Exception                                                        */
-  /* ----------------------------------------------------------------------- */
-
-  Exception::Exception(
-    const ErrorMessage    & rclMessage,
-    TyErrorId                 ulErrorId,
-    ErrorInfo::EnSeverity   enSeverity
-  ) :
-      EXCEPTION_BASE_CLASS(),
-      iv_clErrorInfo(rclMessage, ulErrorId, enSeverity) {}
-
-  Exception::Exception(
-    const ErrorInfo & crclErrorInfo
-  ) :
-      EXCEPTION_BASE_CLASS(),
-      iv_clErrorInfo(crclErrorInfo) {}
-
-  /*------------------------------ Exception Type ------------------------------*/
-
-  const char * Exception::getName() const {
-    return(_TEXT("unspecified exception"));
-  }
-
-  /*------------------------- Application Termination --------------------------*/
-  void Exception::terminate() {
-    exit(iv_clErrorInfo.getErrorId());  //lint !e713: Loss of precision (arg. no. 1) (unsigned long to int)
-  }
-
-  /*------------------------------ Throw Support -------------------------------*/
-  void Exception::assertParameter(
-    const char*       /*exceptionText*/,
-    ErrorContext   /*context*/ ) {
-    assert(false);
-    //not tested yet (and not used anywhere!)
-  }
-
-  /*------------------------- Logging Support ----------------------------------*/
-
-  void Exception::logExceptionData() {
-    util::Trace clTrace(util::enTraceDetailLow, UIMA_TRACE_ORIGIN, UIMA_TRACE_COMPID_EXCEPTIONS);
-
-    clTrace.dump(_TEXT("Exception occured"), asString().c_str());
-    //not implemented yet
-  }
-
-  /*------------------------------ Output Support ------------------------------*/
-  string
-  Exception::asString() const {
-    //output the (class) name of the exception and its error info after it.
-    return string("\n") +
-           ErrorInfo::getGlobalErrorInfoIndent() +
-           "Exception     : " +
-           getName() +
-           "\n" +
-           getErrorInfo().asString() +
-           "\n";
-  }
-
-
-
-  ostream &
-  operator << (
-    ostream            & os,
-    const Exception & exception
-  ) {
-    //output the (class) name of the exception and its error info after it.
-    os << exception.asString();
-    return(os);
-  }
-
-  /*------------------------------ Static Method -------------------------------*/
-
-  // Release contents of string container allocated by asString method
-
-  void
-  Exception::release(std::string & msg) {
-    msg.clear();               // Empty string
-    msg.reserve(1);            // Reduce capacity so will use internal buffer & free external one
-  }
-
-//private:
-  /*----------------------------- Hidden Functions -----------------------------*/
-  Exception& Exception::operator=( const Exception&   /*exc*/ ) {
-    assert(false);
-    return(*this);                                     //lint !e527  unreachable
-  }  //lint !e1745: member not assigned by private assignment operator
-
-  /* ----------------------------------------------------------------------- */
-  /*   Implementations of predefined exceptions                              */
-  /* ----------------------------------------------------------------------- */
-
-
-  /*
-    The following classes reimplement the ANSI standard exception hierarchy from
-    stdexcept.h as UIMACPP exceptions with context and message id support
-  */
-  UIMA_EXC_CLASSIMPLEMENT(Uima_logic_error        ,Exception);
-  UIMA_EXC_CLASSIMPLEMENT(Uima_runtime_error      ,Exception);
-
-  UIMA_EXC_CLASSIMPLEMENT(Uima_domain_error       ,Uima_logic_error);
-  UIMA_EXC_CLASSIMPLEMENT(Uima_invalid_argument   ,Uima_logic_error);
-  UIMA_EXC_CLASSIMPLEMENT(Uima_length_error       ,Uima_logic_error);
-  UIMA_EXC_CLASSIMPLEMENT(Uima_out_of_range       ,Uima_logic_error);
-
-  UIMA_EXC_CLASSIMPLEMENT(Uima_range_error        ,Uima_runtime_error);
-  UIMA_EXC_CLASSIMPLEMENT(Uima_overflow_error     ,Uima_runtime_error);
-  UIMA_EXC_CLASSIMPLEMENT(Uima_underflow_error    ,Uima_runtime_error);
-
-
-  /**
-    The following exceptions are used by helper test classes that are no longer in the UIMACPP library:
-          CommandLineDriver DocBuffer ParseHandlers
-  */
-  UIMA_EXC_CLASSIMPLEMENT(ConsoleAbortExc        ,Exception);
-  UIMA_EXC_CLASSIMPLEMENT(ParseHandlerExc        ,Exception);
-  UIMA_EXC_CLASSIMPLEMENT(ExcDocBuffer           ,Uima_out_of_range);
-
-  /** code page conversion errors */
-  UIMA_EXC_CLASSIMPLEMENT(CodePageConversionException, uima::Exception);
-  /**
-    The following exception is used to report failures from APR functions
-  */
-  UIMA_EXC_CLASSIMPLEMENT(AprFailureException, Exception);
-
-  /*
-    The following classes provide a starting point for an exception hierarchy
-  */
-//? UIMA_EXC_CLASSIMPLEMENT(ExcAssertionFailure, Exception);
-  UIMA_EXC_CLASSIMPLEMENT(ExcIllFormedInputError , Uima_runtime_error);
-  UIMA_EXC_CLASSIMPLEMENT(ExcInvalidParameter    , Uima_invalid_argument);
-  UIMA_EXC_CLASSIMPLEMENT(ExcIndexOutOfRange     , Uima_out_of_range);
-//? UIMA_EXC_CLASSIMPLEMENT(ExcDeviceError      ,Uima_runtime_error);
-  UIMA_EXC_CLASSIMPLEMENT(ExcInvalidRequest      , Uima_runtime_error);
-  UIMA_EXC_CLASSIMPLEMENT(ExcResourceExhausted   , Uima_runtime_error);
-  UIMA_EXC_CLASSIMPLEMENT(ExcOutOfMemory         , ExcResourceExhausted);
-//? UIMA_EXC_CLASSIMPLEMENT(ExcOutOfSystemResource, ResourceExhausted);
-//? UIMA_EXC_CLASSIMPLEMENT(ExcOutOfWindowResource, ResourceExhausted);
-  UIMA_EXC_CLASSIMPLEMENT(ExcFileNotFoundError   , Uima_runtime_error);
-
-// Windows specific CException
-  ExcWinCException::ExcWinCException(
-    ErrorMessage             clMessage,
-    TyErrorId                  ulErrorId,
-    ErrorInfo::EnSeverity    enSeverity
-  )
-      : Uima_runtime_error (clMessage, ulErrorId, enSeverity) {
-    ;
-  }
-
-  const char*
-  ExcWinCException :: getName() const {
-    return( "ExcWinCException" );
-  }
-
-  ExcWinCException::~ExcWinCException () CHILD_DESTRUCT_THROW0() {
-    ;
-  }
-
-  ExcWinCException::ExcWinCException (const ExcWinCException & a) : Uima_runtime_error (a) {
-    ;
-  }
-
-
-  // Windows exceptions can be mapped only when compiled with MS VC++
-#if defined(_MSC_VER)
-
-  void translation_func( unsigned int u, _EXCEPTION_POINTERS* pExp ) {
-    const char * cpszMsg = NULL;
-    switch (u) {
-    case EXCEPTION_ACCESS_VIOLATION:
-      cpszMsg ="\"ACCESS VIOLATION\"";
-      break;
-    case EXCEPTION_DATATYPE_MISALIGNMENT:
-      cpszMsg ="\"DATATYPE MISALIGNMENT\"";
-      break;
-    case EXCEPTION_BREAKPOINT:
-      cpszMsg ="\"BREAKPOINT\"";
-      break;
-    case EXCEPTION_SINGLE_STEP:
-      cpszMsg ="\"SINGLE STEP\"";
-      break;
-    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
-      cpszMsg ="\"ARRAY BOUNDS EXCEEDED\"";
-      break;
-    case EXCEPTION_FLT_DENORMAL_OPERAND:
-      cpszMsg ="\"FLT DENORMAL OPERAND\"";
-      break;
-    case EXCEPTION_FLT_DIVIDE_BY_ZERO:
-      cpszMsg ="\"FLT DIVIDE_BY ZERO\"";
-      break;
-    case EXCEPTION_FLT_INEXACT_RESULT:
-      cpszMsg ="\"FLT INEXACT_RESULT\"";
-      break;
-    case EXCEPTION_FLT_INVALID_OPERATION:
-      cpszMsg ="\"FLT INVALID OPERATION\"";
-      break;
-    case EXCEPTION_FLT_OVERFLOW:
-      cpszMsg ="\"FLT OVERFLOW\"";
-      break;
-    case EXCEPTION_FLT_STACK_CHECK:
-      cpszMsg ="\"FLT STACK_CHECK\"";
-      break;
-    case EXCEPTION_FLT_UNDERFLOW:
-      cpszMsg ="\"FLT UNDERFLOW\"";
-      break;
-    case EXCEPTION_INT_DIVIDE_BY_ZERO:
-      cpszMsg ="\"INT DIVIDE BY ZERO\"";
-      break;
-    case EXCEPTION_INT_OVERFLOW:
-      cpszMsg ="\"INT OVERFLOW\"";
-      break;
-    case EXCEPTION_PRIV_INSTRUCTION:
-      cpszMsg ="\"PRIV INSTRUCTION\"";
-      break;
-    case EXCEPTION_IN_PAGE_ERROR:
-      cpszMsg ="\"IN PAGE_ERROR\"";
-      break;
-    case EXCEPTION_ILLEGAL_INSTRUCTION:
-      cpszMsg ="\"ILLEGAL INSTRUCTION\"";
-      break;
-    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
-      cpszMsg ="\"NONCONTINUABLE EXCEPTION\"";
-      break;
-    case EXCEPTION_STACK_OVERFLOW:
-      cpszMsg ="\"STACK OVERFLOW\"";
-      break;
-    case EXCEPTION_INVALID_DISPOSITION:
-      cpszMsg ="\"INVALID DISPOSITION\"";
-      break;
-    case EXCEPTION_GUARD_PAGE:
-      cpszMsg ="\"GUARD PAGE\"";
-      break;
-    case EXCEPTION_INVALID_HANDLE:
-      cpszMsg ="\"INVALID HANDLE\"";
-      break;
-    case CONTROL_C_EXIT:
-      cpszMsg ="\"CONTROL C EXIT\"";
-      break;
-    default:
-      cpszMsg = "Unknows Windows C Exception";
-      break;
-    }
-    // throw our own type of exception so we know at least what was going on
-    // instead of just getting an unknown ... C++ excepition
-    throw ExcWinCException( ErrorMessage(UIMA_MSG_ID_EXC_WINDOWS_EXCEPTION, cpszMsg),
-                            (TyErrorId)UIMA_ERR_ENGINE_WINDOWS_EXCEPTION,
-                            ErrorInfo::unrecoverable);
-  }
-
-#define UIMA_ENVVAR_DONT_MAP_WINDOWS_EXCEPTIONS     "UIMA_DONT_MAP_WINDOWS_EXCEPTIONS"
-
-  // _set_se_translator should be called at the beginning of main
-  // since we have no access to main here, we declare a static var of a dummy
-  // type which does the _set_se_translator call in it's constructor
-  // Note: this only works if the compiler properly executes the ctors of
-  // such static vars in DLLs
-  class Dummy {
-  public:
-    Dummy( void ) {
-      if ( getenv(UIMA_ENVVAR_DONT_MAP_WINDOWS_EXCEPTIONS) == NULL) {
-        _set_se_translator( translation_func );
-      }
-    }
-  };
-  // static var of our dummy type
-  Dummy clDummy;
-#endif
-
-}
+/*
+-------------------------------------------------------------------------------
+
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+
+-------------------------------------------------------------------------------
+
+
+-------------------------------------------------------------------------------
+*/
+
+#if defined(_MSC_VER)
+#include <stdio.h>
+#include <eh.h>
+#include <windows.h>
+#include <winbase.h>
+#endif
+
+#include "uima/pragmas.hpp" //must be included first to disable warnings
+#include "uima/msg.h"
+#include <string>
+#include <sstream>
+
+#include "uima/macros.h"
+#include "uima/trace.hpp"
+
+#include "uima/strconvert.hpp"
+#include "uima/unistrref.hpp"
+#include "uima/comp_ids.h"
+#include "uima/exceptions.hpp"
+#include "uima/msgstrtab.h"
+
+using namespace std;
+
+namespace uima {
+
+///Constructor with just the message id
+  ErrorMessage::ErrorMessage(
+    TyMessageId                          utMsgId
+  ) :
+      iv_utMsgId(utMsgId) {
+    if ( iv_utMsgId == 0) {
+      iv_utMsgId = UIMA_MSG_ID_NO_MESSAGE_AVAILABLE;
+    }
+  }
+///Constructor with a single char * parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId                          utMsgId,
+    const char *                            cpszParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    iv_vecParams.push_back((string)cpszParam1);
+  }
+
+///Constructor with a single string parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId           utMsgId,
+    const string &           crstrParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    iv_vecParams.push_back(crstrParam1);
+  }
+
+///Constructor with a single UChar * parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId                         utMsgId,
+    const UChar *                          cpuszParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    string s;
+    UnicodeStringRef(cpuszParam1).extract(s);         // Convert to default encoding for platform
+    iv_vecParams.push_back(s);
+  }
+
+///Constructor with a single UnicodeString parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId                         utMsgId,
+    const icu::UnicodeString &             crustrParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    string s;
+    UnicodeStringRef(crustrParam1).extract(s);         // Convert to default encoding for platform
+    iv_vecParams.push_back(s);
+  }
+
+///Constructor with a single int parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId           utMsgId,
+    int                      iParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    string s;
+    iv_vecParams.push_back(long2String(iParam1, s));
+  }
+
+///Constructor with a single unsigned int parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId           utMsgId,
+    unsigned int             uiParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    string s;
+    iv_vecParams.push_back(long2String((int) uiParam1, s));
+  }
+
+
+///Constructor with a single long parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId           utMsgId,
+    long                     lParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    string s;
+    iv_vecParams.push_back(long2String(lParam1, s));
+  }
+
+///Constructor with a single unsigned long parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId           utMsgId,
+    unsigned long            ulParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    string s;
+    iv_vecParams.push_back(long2String((long) ulParam1, s));
+  }
+
+///Constructor with a single double parameter
+  ErrorMessage::ErrorMessage(
+    TyMessageId           utMsgId,
+    const double             dParam1
+  ) :
+      iv_utMsgId(utMsgId) {
+    assert( iv_utMsgId != 0 );
+    string s;
+    iv_vecParams.push_back(double2String(dParam1, s));
+  }
+
+///Constructor with a full parameter vector
+  ErrorMessage::ErrorMessage(
+    TyMessageId           utMsgId,
+    const vector<string> &   crvecParams
+  ) :
+      iv_utMsgId(utMsgId),
+      iv_vecParams(crvecParams) {
+    assert( iv_utMsgId != 0 );
+  }
+
+  
+  /*------------------------------- Constructors -------------------------------*/
+
+  ErrorContext::ErrorContext(
+    const ErrorMessage &     crclMessage,
+    const char*                   pszFilename,
+    const char*                   pszFunction,
+    unsigned long                 ulLineNumber
+  ):
+      iv_clMessage(crclMessage),
+      iv_pszFilename(pszFilename),
+      iv_pszFunction(pszFunction),
+      iv_ulLineNo(ulLineNumber) {}
+
+#ifdef OS_STL
+  Exception::~Exception()
+#else
+  Exception::~Exception() UIMA_THROW0()
+#endif
+  {}
+
+  /*------------------------------ Output Support ------------------------------*/
+
+  string
+  ErrorMessage::asString() const {
+
+    size_t numparams = getMessageParams().size();
+
+    // Check for unknown message id
+    if (iv_utMsgId < 0 || iv_utMsgId > UIMA_MSG_ID_SIGNATURE_END) {
+      return string("Unknown message id " + iv_utMsgId);
+    }
+
+    //parameter substitution
+
+    //locate message in message table
+    const TCHAR ** messages = gs_aszMessageStringTable;
+    const TCHAR * msg = messages[iv_utMsgId];
+
+    TCHAR * buf = new TCHAR[UIMA_MSG_MAX_STR_LEN];
+    memset(buf,'\0',UIMA_MSG_MAX_STR_LEN);
+
+    int numwritten=0;
+
+    TCHAR * trg = buf;
+    while (*msg) {
+      if (numwritten > UIMA_MSG_MAX_STR_LEN) {
+        break;
+      }
+      if (*msg == UIMA_MSG_REPLACE_CHAR) {
+        msg = msg+1;
+        if (*msg == UIMA_MSG_REPLACE_CHAR) {
+          *trg = *msg;
+          trg = trg +1;
+          ;
+          msg = msg+1;
+          numwritten++;
+        } else {  //replace %n with the corresponding param
+          unsigned long index;
+          int len;
+          string arg;
+          // determine the number of the specified argument ...
+          index = (unsigned long) atol(msg);
+          if (index > numparams)       // param not defined
+          {
+            arg = "???";      // replace it by "dont-know"
+          } else {
+            // ... the indexed argument ...
+            arg = iv_vecParams[index - 1]; // zero-based array!
+            //assert(arg.length() > 0);
+          }
+          len = arg.length();
+          // ... and then copy the argument
+          if (UIMA_MSG_MAX_STR_LEN-numwritten < len) {
+            len = UIMA_MSG_MAX_STR_LEN - numwritten;
+          }
+          if (len > 0) {
+            strncpy(trg, arg.c_str(), len);
+            trg = trg+len;
+          }
+          msg = msg+1;
+          while ( isdigit(*msg) ) { //handle arg number 10 or more
+            msg = msg+1;
+          }
+        }
+      } else {
+        *trg = *msg;
+        trg = trg+1;
+        msg = msg+1;
+      }
+    }
+    //cout << buf << endl;
+   string target(buf);
+   delete[] buf ;
+   return target;
+	 //string target;
+	 //target.assign(buf, UIMA_MSG_MAX_STR_LEN);                   // Copy the result to the string
+   //delete buf;
+	 //return target;
+  }
+
+  ostream &
+  operator << (
+    ostream &            os,
+    const ErrorMessage & errorMsg
+  ) {
+    os << errorMsg.asString();
+    return(os);
+  }
+
+  string
+  ErrorContext::asString() const {
+    string s;
+    s += getMessage().asString();
+    if (getFileName() != NULL) {
+      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "     File     : " + getFileName();
+    }
+    if (getFunctionName() != NULL) {
+      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "     Function : " + getFunctionName();
+    }
+    if (getLineNumber() != 0) {
+      string sNum;
+      long2String(getLineNumber(), sNum);
+      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "     Line     : " + sNum;
+    }
+
+    return(s);
+  }
+
+  ostream &
+  operator << (
+    ostream            & os,
+    const ErrorContext & errContext
+  ) {
+    os << errContext.asString();
+    return (os);
+  }
+
+  void ErrorMessage::reset(void) {
+    iv_utMsgId = UIMA_MSG_ID_NO_MESSAGE_AVAILABLE;
+    iv_vecParams.clear();
+  }
+
+  /* ----------------------------------------------------------------------- */
+  /*   ErrorInfo                                                        */
+  /* ----------------------------------------------------------------------- */
+
+  /*------------------------------- Statics  -----------------------------------*/
+//initialize static member var to an initial value
+
+  const char * ErrorInfo::cv_cpszContextPrefix   = "   While      : ";
+  const char * ErrorInfo::cv_cpszIndent          = "";
+
+
+  /*------------------------------- Constructors -------------------------------*/
+
+  ErrorInfo::ErrorInfo(
+    const ErrorMessage     & rclMessage,
+    TyErrorId                ulErrorId,
+    ErrorInfo::EnSeverity    enSeverity
+  ) :
+      iv_clErrorMsg(rclMessage),
+      iv_ulErrorId(ulErrorId),
+      iv_enSeverity(enSeverity),
+      iv_vecContexts() {}
+
+  ErrorInfo::ErrorInfo( void ) :
+      iv_clErrorMsg(),
+      iv_ulErrorId(UIMA_ERR_NONE),
+      iv_enSeverity(recoverable),
+      iv_vecContexts() {}
+
+  ErrorInfo::~ErrorInfo() {}
+
+//constructor (copy)
+//? Exception::Exception(
+//?   const Exception&            rclException
+//? )
+//? {
+//? }
+
+  /*---------------------------- Exception Context ----------------------------*/
+  void
+  ErrorInfo::addContext( const ErrorContext & crclContext ) {
+    iv_vecContexts.push_back(crclContext);
+  }
+
+  const ErrorContext *
+  ErrorInfo::contextPtrAtIndex( size_t uiContextIndex ) const {
+    if (uiContextIndex >= iv_vecContexts.size()) {
+      return(NULL);
+    }
+    return(&iv_vecContexts[uiContextIndex]);
+  }
+
+  /*------------------------------ Output Support ------------------------------*/
+  string
+  ErrorInfo::asString() const {
+    string s;
+    if (getErrorId() == UIMA_ERR_NONE) {
+      s += string("No Error\n");
+      return (s);
+    }
+    if (getErrorId() != UIMA_ERR_NONE) {
+      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "Error number  : ";
+      string sErr;
+      long2String( getErrorId(), sErr);
+      s += sErr;
+    }
+    s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "Recoverable   : " + (isRecoverable() ? "Yes" : "No");
+    s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + "Error         : " + getMessage().asString();
+    for (size_t i = 0; i < contextCount(); ++i) {
+      s += string("\n") + ErrorInfo::getGlobalErrorInfoIndent() + ErrorInfo::getGlobalErrorInfoContextPrefix();
+      assert(EXISTS(contextPtrAtIndex(i)));   //lint !e666: Expression with side effects passed to repeated parameter 1 in macro EXISTS
+      s += contextPtrAtIndex(i)->asString();
+    }
+    s += string("\n");
+
+    return (s);
+  }
+
+///output support for streams
+  ostream &
+  operator << (
+    ostream         & os,
+    const ErrorInfo & errInfo
+  ) {
+    os << errInfo.asString();
+    return(os);
+  }
+
+  void ErrorInfo::reset(void) {
+    iv_clErrorMsg.reset();
+    iv_ulErrorId = UIMA_ERR_NONE;
+    iv_enSeverity = recoverable;
+    iv_vecContexts.clear();
+  }
+
+  /* ----------------------------------------------------------------------- */
+  /*   Exception                                                        */
+  /* ----------------------------------------------------------------------- */
+
+  Exception::Exception(
+    const ErrorMessage    & rclMessage,
+    TyErrorId                 ulErrorId,
+    ErrorInfo::EnSeverity   enSeverity
+  ) :
+      EXCEPTION_BASE_CLASS(),
+      iv_clErrorInfo(rclMessage, ulErrorId, enSeverity) {}
+
+  Exception::Exception(
+    const ErrorInfo & crclErrorInfo
+  ) :
+      EXCEPTION_BASE_CLASS(),
+      iv_clErrorInfo(crclErrorInfo) {}
+
+  /*------------------------------ Exception Type ------------------------------*/
+
+  const char * Exception::getName() const {
+    return(_TEXT("unspecified exception"));
+  }
+
+  /*------------------------- Application Termination --------------------------*/
+  void Exception::terminate() {
+    exit(iv_clErrorInfo.getErrorId());  //lint !e713: Loss of precision (arg. no. 1) (unsigned long to int)
+  }
+
+  /*------------------------------ Throw Support -------------------------------*/
+  void Exception::assertParameter(
+    const char*       /*exceptionText*/,
+    ErrorContext   /*context*/ ) {
+    assert(false);
+    //not tested yet (and not used anywhere!)
+  }
+
+  /*------------------------- Logging Support ----------------------------------*/
+
+  void Exception::logExceptionData() {
+    util::Trace clTrace(util::enTraceDetailLow, UIMA_TRACE_ORIGIN, UIMA_TRACE_COMPID_EXCEPTIONS);
+
+    clTrace.dump(_TEXT("Exception occured"), asString().c_str());
+    //not implemented yet
+  }
+
+  /*------------------------------ Output Support ------------------------------*/
+  string
+  Exception::asString() const {
+    //output the (class) name of the exception and its error info after it.
+    return string("\n") +
+           ErrorInfo::getGlobalErrorInfoIndent() +
+           "Exception     : " +
+           getName() +
+           "\n" +
+           getErrorInfo().asString() +
+           "\n";
+  }
+
+
+
+  ostream &
+  operator << (
+    ostream            & os,
+    const Exception & exception
+  ) {
+    //output the (class) name of the exception and its error info after it.
+    os << exception.asString();
+    return(os);
+  }
+
+  /*------------------------------ Static Method -------------------------------*/
+
+  // Release contents of string container allocated by asString method
+
+  void
+  Exception::release(std::string & msg) {
+    msg.clear();               // Empty string
+    msg.reserve(1);            // Reduce capacity so will use internal buffer & free external one
+  }
+
+//private:
+  /*----------------------------- Hidden Functions -----------------------------*/
+  Exception& Exception::operator=( const Exception&   /*exc*/ ) {
+    assert(false);
+    return(*this);                                     //lint !e527  unreachable
+  }  //lint !e1745: member not assigned by private assignment operator
+
+  /* ----------------------------------------------------------------------- */
+  /*   Implementations of predefined exceptions                              */
+  /* ----------------------------------------------------------------------- */
+
+
+  /*
+    The following classes reimplement the ANSI standard exception hierarchy from
+    stdexcept.h as UIMACPP exceptions with context and message id support
+  */
+  UIMA_EXC_CLASSIMPLEMENT(Uima_logic_error        ,Exception);
+  UIMA_EXC_CLASSIMPLEMENT(Uima_runtime_error      ,Exception);
+
+  UIMA_EXC_CLASSIMPLEMENT(Uima_domain_error       ,Uima_logic_error);
+  UIMA_EXC_CLASSIMPLEMENT(Uima_invalid_argument   ,Uima_logic_error);
+  UIMA_EXC_CLASSIMPLEMENT(Uima_length_error       ,Uima_logic_error);
+  UIMA_EXC_CLASSIMPLEMENT(Uima_out_of_range       ,Uima_logic_error);
+
+  UIMA_EXC_CLASSIMPLEMENT(Uima_range_error        ,Uima_runtime_error);
+  UIMA_EXC_CLASSIMPLEMENT(Uima_overflow_error     ,Uima_runtime_error);
+  UIMA_EXC_CLASSIMPLEMENT(Uima_underflow_error    ,Uima_runtime_error);
+
+
+  /**
+    The following exceptions are used by helper test classes that are no longer in the UIMACPP library:
+          CommandLineDriver DocBuffer ParseHandlers
+  */
+  UIMA_EXC_CLASSIMPLEMENT(ConsoleAbortExc        ,Exception);
+  UIMA_EXC_CLASSIMPLEMENT(ParseHandlerExc        ,Exception);
+  UIMA_EXC_CLASSIMPLEMENT(ExcDocBuffer           ,Uima_out_of_range);
+
+  /** code page conversion errors */
+  UIMA_EXC_CLASSIMPLEMENT(CodePageConversionException, uima::Exception);
+  /**
+    The following exception is used to report failures from APR functions
+  */
+  UIMA_EXC_CLASSIMPLEMENT(AprFailureException, Exception);
+
+  /*
+    The following classes provide a starting point for an exception hierarchy
+  */
+//? UIMA_EXC_CLASSIMPLEMENT(ExcAssertionFailure, Exception);
+  UIMA_EXC_CLASSIMPLEMENT(ExcIllFormedInputError , Uima_runtime_error);
+  UIMA_EXC_CLASSIMPLEMENT(ExcInvalidParameter    , Uima_invalid_argument);
+  UIMA_EXC_CLASSIMPLEMENT(ExcIndexOutOfRange     , Uima_out_of_range);
+//? UIMA_EXC_CLASSIMPLEMENT(ExcDeviceError      ,Uima_runtime_error);
+  UIMA_EXC_CLASSIMPLEMENT(ExcInvalidRequest      , Uima_runtime_error);
+  UIMA_EXC_CLASSIMPLEMENT(ExcResourceExhausted   , Uima_runtime_error);
+  UIMA_EXC_CLASSIMPLEMENT(ExcOutOfMemory         , ExcResourceExhausted);
+//? UIMA_EXC_CLASSIMPLEMENT(ExcOutOfSystemResource, ResourceExhausted);
+//? UIMA_EXC_CLASSIMPLEMENT(ExcOutOfWindowResource, ResourceExhausted);
+  UIMA_EXC_CLASSIMPLEMENT(ExcFileNotFoundError   , Uima_runtime_error);
+
+// Windows specific CException
+  ExcWinCException::ExcWinCException(
+    ErrorMessage             clMessage,
+    TyErrorId                  ulErrorId,
+    ErrorInfo::EnSeverity    enSeverity
+  )
+      : Uima_runtime_error (clMessage, ulErrorId, enSeverity) {
+    ;
+  }
+
+  const char*
+  ExcWinCException :: getName() const {
+    return( "ExcWinCException" );
+  }
+
+  ExcWinCException::~ExcWinCException () CHILD_DESTRUCT_THROW0() {
+    ;
+  }
+
+  ExcWinCException::ExcWinCException (const ExcWinCException & a) : Uima_runtime_error (a) {
+    ;
+  }
+
+
+  // Windows exceptions can be mapped only when compiled with MS VC++
+#if defined(_MSC_VER)
+
+  void translation_func( unsigned int u, _EXCEPTION_POINTERS* pExp ) {
+    const char * cpszMsg = NULL;
+    switch (u) {
+    case EXCEPTION_ACCESS_VIOLATION:
+      cpszMsg ="\"ACCESS VIOLATION\"";
+      break;
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+      cpszMsg ="\"DATATYPE MISALIGNMENT\"";
+      break;
+    case EXCEPTION_BREAKPOINT:
+      cpszMsg ="\"BREAKPOINT\"";
+      break;
+    case EXCEPTION_SINGLE_STEP:
+      cpszMsg ="\"SINGLE STEP\"";
+      break;
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+      cpszMsg ="\"ARRAY BOUNDS EXCEEDED\"";
+      break;
+    case EXCEPTION_FLT_DENORMAL_OPERAND:
+      cpszMsg ="\"FLT DENORMAL OPERAND\"";
+      break;
+    case EXCEPTION_FLT_DIVIDE_BY_ZERO:
+      cpszMsg ="\"FLT DIVIDE_BY ZERO\"";
+      break;
+    case EXCEPTION_FLT_INEXACT_RESULT:
+      cpszMsg ="\"FLT INEXACT_RESULT\"";
+      break;
+    case EXCEPTION_FLT_INVALID_OPERATION:
+      cpszMsg ="\"FLT INVALID OPERATION\"";
+      break;
+    case EXCEPTION_FLT_OVERFLOW:
+      cpszMsg ="\"FLT OVERFLOW\"";
+      break;
+    case EXCEPTION_FLT_STACK_CHECK:
+      cpszMsg ="\"FLT STACK_CHECK\"";
+      break;
+    case EXCEPTION_FLT_UNDERFLOW:
+      cpszMsg ="\"FLT UNDERFLOW\"";
+      break;
+    case EXCEPTION_INT_DIVIDE_BY_ZERO:
+      cpszMsg ="\"INT DIVIDE BY ZERO\"";
+      break;
+    case EXCEPTION_INT_OVERFLOW:
+      cpszMsg ="\"INT OVERFLOW\"";
+      break;
+    case EXCEPTION_PRIV_INSTRUCTION:
+      cpszMsg ="\"PRIV INSTRUCTION\"";
+      break;
+    case EXCEPTION_IN_PAGE_ERROR:
+      cpszMsg ="\"IN PAGE_ERROR\"";
+      break;
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+      cpszMsg ="\"ILLEGAL INSTRUCTION\"";
+      break;
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      cpszMsg ="\"NONCONTINUABLE EXCEPTION\"";
+      break;
+    case EXCEPTION_STACK_OVERFLOW:
+      cpszMsg ="\"STACK OVERFLOW\"";
+      break;
+    case EXCEPTION_INVALID_DISPOSITION:
+      cpszMsg ="\"INVALID DISPOSITION\"";
+      break;
+    case EXCEPTION_GUARD_PAGE:
+      cpszMsg ="\"GUARD PAGE\"";
+      break;
+    case EXCEPTION_INVALID_HANDLE:
+      cpszMsg ="\"INVALID HANDLE\"";
+      break;
+    case CONTROL_C_EXIT:
+      cpszMsg ="\"CONTROL C EXIT\"";
+      break;
+    default:
+      cpszMsg = "Unknows Windows C Exception";
+      break;
+    }
+    // throw our own type of exception so we know at least what was going on
+    // instead of just getting an unknown ... C++ excepition
+    throw ExcWinCException( ErrorMessage(UIMA_MSG_ID_EXC_WINDOWS_EXCEPTION, cpszMsg),
+                            (TyErrorId)UIMA_ERR_ENGINE_WINDOWS_EXCEPTION,
+                            ErrorInfo::unrecoverable);
+  }
+
+#define UIMA_ENVVAR_DONT_MAP_WINDOWS_EXCEPTIONS     "UIMA_DONT_MAP_WINDOWS_EXCEPTIONS"
+
+  // _set_se_translator should be called at the beginning of main
+  // since we have no access to main here, we declare a static var of a dummy
+  // type which does the _set_se_translator call in it's constructor
+  // Note: this only works if the compiler properly executes the ctors of
+  // such static vars in DLLs
+  class Dummy {
+  public:
+    Dummy( void ) {
+      if ( getenv(UIMA_ENVVAR_DONT_MAP_WINDOWS_EXCEPTIONS) == NULL) {
+        _set_se_translator( translation_func );
+      }
+    }
+  };
+  // static var of our dummy type
+  Dummy clDummy;
+#endif
+
+}

Propchange: uima/uimacpp/trunk/src/framework/exceptions.cpp
            ('svn:eol-style' removed)