EXCEPTMSG exceptmsg_table[] = {
  {E_Success,                0, "Success"},
  {E_Failure,                0, "Failure"},
  {E_UserAbort,              0, "User aborted operation"},

  {E_AspiInit,              0, "Unable to initialize the ASPI manager"},
  {E_AspiAbort,              0, "ASPI request aborted (%02lXh %02lXh %02lXh)"},
  {E_AspiAbortFail,          0, "ASPI abort request failed"},
  {E_AspiInvalidRequest,    0, "Invalid ASPI request"},
  {E_AspiInvalidAdapter,    0, "Invalid host adapter number"},
  {E_AspiNoDevice,          0, "Device does not exist"},
  {E_AspiInvalidSRB,        0, "Invalid SCSI request block"},
  {E_AspiBufferAlign,        0, "Invalid buffer alignment"},
  {E_AspiIllegalMode,        0, "Illegal mode (Win32S operation not allowed)"},
  {E_AspiNoHelperDriver,    0, "ASPI helper driver was not found"},
  {E_AspiFailedInit,        0, "ASPI initialization failure"},
  {E_AspiBusy,              0, "ASPI manager is busy"},
  {E_AspiBufferTooBig,      0, "ASPI buffer is too big"},
  {E_AspiMismatchedComp,    0, "Mismatched ASPI components"},
  {E_AspiNoAdapters,        0, "No ASPI host adapters on system"},
  {E_AspiNoResources,        0, "Insufficient resources to initialize ASPI manager"},
  {E_AspiUnknown,            0, "Unexpected ASPI error (%02lXh %02lXh %02lXh)"},
  {E_AspiTimeout,           0, "ASPI request timed out"},
  {E_AspiRequestFailed,     0, "ASPI request failed to complete normally"},

  {E_AdapterTimeout,        0, "Transaction timed out"},
  {E_AdapterExpired,        0, "SCSI request expired"},
  {E_AdapterMessageReject,  0, "Message reject received"},
  {E_AdapterBusReset,        0, "Bus reset detected"},
  {E_AdapterParityError,    0, "Parity error detected"},
  {E_AdapterSenseFailed,    0, "SENSE request failed"},
  {E_AdapterSelectTimeout,  0, "Device selection timed out"},
  {E_AdapterDataOverrun,    0, "Data overrun/underrun detected"},
  {E_AdapterBusFree,        0, "Bus free detected"},
  {E_AdapterBusFailure,      0, "Bus failure detected"},
  {E_AdapterUnknown,        0, "Unexpected ADAPTER error (%02lXh %02lXh %02lXh)"},

  {E_TargetBusy,            0, "Target is busy"},
  {E_TargetConflict,        0, "Target reservation conflict"},
  {E_TargetUnknown,          0, "Unexpected TARGET error (%02lXh %02lXh %02lXh)"},

  {E_Recovered,              0, "I/O completed with recovery"},
  {E_DeviceNotReady,        0, "Device is not ready (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_BadMedium,              0, "Read/Write error detected (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_Hardware,              0, "Unrecoverable hardware error (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_IllegalRequest,        0, "Illegal command request (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_UnitAttention,          0, "Unit attention (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_BlankCheck,            0, "Blank medium detected (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_DeviceBusy,            0, "Device is busy (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_TargetAbort,            0, "Device aborted command (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_VolumeOverflow,        0, "Volume overflow (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_EndOfMedium,            0, "End of medium detected (%02lXh %02lXh %02lXh %02lXh %02lXh %02lXh)"},
  {E_SenseUnknown,          0, "Unexpected SENSE error"},

  {E_Generic,                1, "%s"},
  {E_BugCheck,              0, "Internal bugcheck detected"},
  {E_NoMemory,              0, "Memory allocation request failed"},
  {E_NotImplemented,        0, "Feature is not implemented yet"},
  {E_CommandFailed,          4, "'%s' command failed on device %lu:%lu:%lu"},
  {E_ReadAudio,              5, "Unable to read AUDIO sectors %lu to %lu on device %lu:%lu:%lu"},
  {E_ReadData,              5, "Unable to read DATA sectors %lu to %lu on device %lu:%lu:%lu"},
  {E_OpenFile,              1, "Unable to open file \"%s\""},
  {E_CreateFile,            1, "Unable to create file \"%s\""},
  {E_ReadFile,              0, "Unexpected failure reading file (bad disk or end-of-file?)"},
  {E_WriteFile,             0, "Unexpected failure writing file (disk full?)"},
  {E_EndOfFile,             1, "Unexpected end-of-file reading \"%s\""},
  {E_FindLastSector,        0, "Unable to find last readable sector"},
  {E_ParseCueSheet,         1, "Invalid CUE SHEET command at line %lu"},
  {E_BadWaveFile,           1, "WAV file is invalid or not CDROM compatible"},
  {E_BadAiffFile,           1, "AIFF file is invalid or not CDROM compatible"},
  {E_JitterFailure,          0, "Unexpected jitter correction failure"},
  {E_AnalyzeDisc,            0, "Unable to analyze disc layout"},
  {E_NoMultisession,        0, "Disc contains more than one session"},
  {E_DataAfterAudio,        0, "Disc contains a DATA track after the AUDIO tracks"},
  {E_BothModes,              0, "Disc contains both MODE1 and MODE2 data tracks"},
  {E_BadTrackType,          0, "Illegal track type encountered"},
  {E_DirTooDeep,            0, "Directory depth exceeds 8 levels"},
  {E_TooManyFiles,          0, "Too many files in directory"},
  {E_TooManyDirs,            0, "Too many directories to process"},
  {E_BadPathname,            1, "Invalid directory name specified"},
  {E_NoFilesInPath,          1, "Directory does not exist or no files match selection"},
  {E_MaxFileSort,            0, "Too many files/directories to sort"},
  {E_IsoTooLong,            0, "ISO9660 image is too large to fit on disc"},
  {E_BadFileLength,          0, "File length is not a multiple of the CDROM sector size"},
  {E_BadBootFile,            0, "Boot image file length is not compatible with emulation type"},
  {E_NoSpaces,              0, "Spaces are not allowed in image directory/file name!"},
  {E_NoCacheMemory,          0, "Not enough memory available for cache"},
  {E_CreateFileCache,        0, "Unexpected failure creating file cache"},
  {E_CreateDiscCache,        0, "Unexpected failure creating disc cache"},
  {E_ReadFileCache,          0, "Unexpected failure reading file cache"},
  {E_ReadDiscCache,          0, "Unexpected failure reading disc cache"},
  {E_CacheTimeout,          0, "Request timeout encountered (cache is empty)"},
  {E_CacheReadError,        0, "File/Disc read error encountered"},
  {E_CacheEndOfData,        0, "End-of-data encountered (not enough data in cache)"},
  {E_VerifyData,            0, "Data verification failure at sectors %lu to %lu"},
  {E_ProgramAbort,          0, "Program aborted - Internal error detected"},
  {E_BadBlockLength,        0, "Bugcheck - Invalid block length specified"},
  {E_BadDataType,            0, "Bugcheck - Invalid datatype specified"},

  {E_BadKeyMatch,            0, "Unlock keys have been entered incorrectly"},
  {E_BadUnlockInfo,          0, "Unlock information has been entered incorrectly"},
  {E_BadAuthData,            0, "Authorization file data is corrupt/invalid"},
  {E_ExpiredKey,            0, "Your unlock keys have expired (more than one year old)"},
  {E_InitControlFile,        0, "Unable to initialize authorization file"},
  {E_UpdateControlFile,      0, "Unable to update authorization file"},
  {E_SoftwareLocked,        0, "Software is locked and has no demo mode!"},
  {E_NoDiscAtOnce,          0, "Recorder does not support disc-at-once recording"},
  {E_NoTransporter,          0, "Unable to find a known Disc-Transporter device on the SCSI bus"},

  {E_DiscNotWritable,        0, "Disc is not writable"},
  {E_SetBlockLength,        0, "Unable to set block length"},
  {E_ReadDiscInfo,          0, "Unable to read disc information"},
  {E_ReadTrackInfo,          0, "Unable to read track information"},
  {E_NextWritableAddress,    0, "Unable to determine next writable address"},
  {E_SetWriteMode,          0, "Unable to set writing mode"},
  {E_SetTrackParameters,    0, "Unable to set track parameters"},
  {E_SetDiscParameters,      0, "Unable to set disc parameters"},
  {E_SetRecordSpeed,        0, "Unable to set recording speed"},
  {E_FlushCache,            0, "Unable to flush cache to disc"},
  {E_SetCatalogNumber,      0, "Unable to set media catalog number"},
  {E_LaserCalibration,      0, "Unable to calibrate recording laser"},
  {E_CueSheetRejected,      0, "Cuesheet was rejected by the CDROM recorder"},
  {E_BadBlockLength,        0, "Cuesheet contains an illegal block length"}
  };
