Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
e280ae
#ifdef _MSC_VER
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4996)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <stdio.h></stdio.h>
Toshihiro Shimizu 890ddd
#include <string.h></string.h>
Toshihiro Shimizu 890ddd
#include <assert.h></assert.h>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "ttwain_state.h"
Toshihiro Shimizu 890ddd
#include "ttwain_error.h"
Toshihiro Shimizu 890ddd
#include "ttwain_util.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef __cplusplus
Toshihiro Shimizu 890ddd
extern "C" {
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
static char Msg_out[1024];
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define HUMAN_MESSAGES
Toshihiro Shimizu 890ddd
#ifdef HUMAN_MESSAGES
Shinya Kitaoka 120a6e
const char *RC_msg[] = {"SUCCESS",
Shinya Kitaoka 120a6e
                        "FAILURE",
Shinya Kitaoka 120a6e
                        "CHECK STATUS ('tried hard')",
Shinya Kitaoka 120a6e
                        "CANCEL",
Shinya Kitaoka 120a6e
                        "DS EVENT",
Shinya Kitaoka 120a6e
                        "NOT DSEVENT",
Shinya Kitaoka 120a6e
                        "TRANSFER DONE",
Shinya Kitaoka 120a6e
                        "END OF LIST",
Shinya Kitaoka 120a6e
                        "INFO NOT SUPPORTED",
Shinya Kitaoka 120a6e
                        "DATA NOT AVAILABLE"};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
const char *CC_msg[] = {
Shinya Kitaoka 120a6e
    "SUCCESS",
Shinya Kitaoka 120a6e
    "FAILURE DUE TO UNKNOWN CAUSES",
Shinya Kitaoka 120a6e
    "LOW MEMORY",
Shinya Kitaoka 120a6e
    "NO DATA SOURCE",
Shinya Kitaoka 120a6e
    "DS IS CONNECTED TO MAX POSSIBLE APPS",
Shinya Kitaoka 120a6e
    "OPERATION ERROR, DS/DSM REPORTED ERROR",
Shinya Kitaoka 120a6e
    "UNKNOWN CAPABILITY",
Shinya Kitaoka 120a6e
    "undefined",
Shinya Kitaoka 120a6e
    "undefined",
Shinya Kitaoka 120a6e
    "UNRECOGNIZED TRIPLET",
Shinya Kitaoka 120a6e
    "DATA PARAMETER OUT OF RANGE",
Shinya Kitaoka 120a6e
    "TRIPLET OUT OF SEQUENCE",
Shinya Kitaoka 120a6e
    "UNKNOWN DESTINATION APP/SRC IN DSM_ESNTRY",
Shinya Kitaoka 120a6e
    "CAP NOT SUPPORTED BY SOURCE",
Shinya Kitaoka 120a6e
    "OPERATION NOT SUPPORTED BY CAP",
Shinya Kitaoka 120a6e
    "CAP HAS DEPENDANCY ON OTHER CAP",
Shinya Kitaoka 120a6e
    "FILE SYSTEM OPERATION IS DENIED (FILE IS PROTECTED)",
Shinya Kitaoka 120a6e
    "OPERATION FAILED BECAUSE FILE ALREADY EXISTS",
Shinya Kitaoka 120a6e
    "FILE NOT FOUND",
Shinya Kitaoka 120a6e
    "OPERATION FAILED BECAUSE DIRECTORY IS NOT EMPTY",
Shinya Kitaoka 120a6e
    "THE FEEDER IS JAMMED",
Shinya Kitaoka 120a6e
    "THE FEEDER DETECTED MULTIPLE PAGES",
Shinya Kitaoka 120a6e
    "ERROR WRITING THE FILE (MEANT FOR THINGS LIKE DISK FULL CONDITIONS)",
Shinya Kitaoka 120a6e
    "THE DEVICE WENT OFFLINE PRIOR TO OR DURING THIS OPERATION"};
Toshihiro Shimizu 890ddd
#else
Shinya Kitaoka 120a6e
const char *RC_msg[] = {
Shinya Kitaoka 120a6e
    "TWRC_SUCCESS",         "TWRC_FAILURE",   "TWRC_CHECKSTATUS ('tried hard')",
Shinya Kitaoka 120a6e
    "TWRC_CANCEL",          "TWRC_DSEVENT",   "TWRC_NOTDSEVENT",
Shinya Kitaoka 120a6e
    "TWRC_XFERDONE",        "TWRC_ENDOFLIST", "TWRC_INFONOTSUPPORTED",
Shinya Kitaoka 120a6e
    "TWRC_DATANOTAVAILABLE"};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
const char *CC_msg[] = {
Shinya Kitaoka 120a6e
    "TWCC_SUCCESS", "TWCC_BUMMER (Failure due to unknown causes)",
Shinya Kitaoka 120a6e
    "TWCC_LOWMEMORY", "TWCC_NODS (No Data Source)",
Shinya Kitaoka 120a6e
    "TWCC_MAXCONNECTIONS (DS is connected to max possible apps)",
Shinya Kitaoka 120a6e
    "TWCC_OPERATIONERROR (DS/DSM reported error, app shouldn't)",
Shinya Kitaoka 120a6e
    "TWCC_BADCAP (Unknown capability)", "7 (undefined)", "8 (undefined)",
Shinya Kitaoka 120a6e
    "TWCC_BADPROTOCOL (Unrecognized triplet)",
Shinya Kitaoka 120a6e
    "TWCC_BADVALUE (Data parameter out of range)",
Shinya Kitaoka 120a6e
    "TWCC_SEQERROR (Triplet out of sequence)",
Shinya Kitaoka 120a6e
    "TWCC_BADDEST (Unknown dest. App/Src in DSM_Esntry)",
Shinya Kitaoka 120a6e
    "TWCC_CAPUNSUPPORTED (Cap not supported by source)",
Shinya Kitaoka 120a6e
    "TWCC_CAPBADOPERATION (Operation not supported by cap)",
Shinya Kitaoka 120a6e
    "TWCC_CAPSEQERROR (Cap has dependancy on other cap)",
Shinya Kitaoka 120a6e
    "TWCC_DENIED      (File System operation is denied (file is protected))",
Shinya Kitaoka 120a6e
    "TWCC_FILEEXISTS (Operation failed because file already exists)",
Shinya Kitaoka 120a6e
    "TWCC_FILENOTFOUND (File not found)",
Shinya Kitaoka 120a6e
    "TWCC_NOTEMPTY (Operation failed because directory is not empty)",
Shinya Kitaoka 120a6e
    "TWCC_PAPERJAM (The feeder is jammed)",
Shinya Kitaoka 120a6e
    "TWCC_PAPERDOUBLEFEED (The feeder detected multiple pages)",
Shinya Kitaoka 120a6e
    "TWCC_FILEWRITEERROR (Error writing the file (meant for things like disk "
Shinya Kitaoka 120a6e
    "full conditions))",
Shinya Kitaoka 120a6e
    "TWCC_CHECKDEVICEONLINE (The device went offline prior to or during this "
Shinya Kitaoka 120a6e
    "operation)"};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e
void TTWAIN_RecordError(void) {
Shinya Kitaoka 120a6e
  char tmp[1024];
Shinya Kitaoka 120a6e
  TTwainData.ErrRC = TTWAIN_GetResultCode();
Shinya Kitaoka 120a6e
  if ((TTwainData.ErrRC == TWRC_FAILURE) ||
Shinya Kitaoka 120a6e
      (TTwainData.ErrRC == TWRC_CHECKSTATUS))
Shinya Kitaoka 120a6e
    TTwainData.ErrCC = TTWAIN_GetConditionCode();
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    TTwainData.ErrCC = -1;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (TTwainData.ErrRC < (sizeof(RC_msg) / sizeof(RC_msg[0]))) {
Rozhuk Ivan 823a31
    snprintf(Msg_out, sizeof(Msg_out), "RC: %s(%d)",
Rozhuk Ivan 823a31
             RC_msg[TTwainData.ErrRC], (int)TTwainData.ErrRC);
Shinya Kitaoka 120a6e
  } else {
Rozhuk Ivan 823a31
    snprintf(Msg_out, sizeof(Msg_out), "RC: %s(%d)", "unknown",
Rozhuk Ivan 823a31
             (int)TTwainData.ErrRC);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (TTwainData.ErrCC < (sizeof(CC_msg) / sizeof(CC_msg[0]))) {
Rozhuk Ivan 823a31
    snprintf(tmp, sizeof(tmp), "CC: %s(%d)", CC_msg[TTwainData.ErrCC],
Rozhuk Ivan 823a31
             (int)TTwainData.ErrCC);
Shinya Kitaoka 120a6e
    strcat(Msg_out, tmp);
Shinya Kitaoka 120a6e
  } else {
Rozhuk Ivan 823a31
    snprintf(tmp, sizeof(tmp), "CC: %s(%d)", "unknown",
Rozhuk Ivan 823a31
             (int)TTwainData.ErrCC);
Shinya Kitaoka 120a6e
    strcat(Msg_out, tmp);
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (TTwainData.ErrRC == TWRC_FAILURE &&
Shinya Kitaoka 120a6e
      TTwainData.ErrCC == TWCC_OPERATIONERROR) {
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Shinya Kitaoka 120a6e
    OutputDebugString(Msg_out);
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#ifdef TOONZDEBUG
Shinya Kitaoka 120a6e
    printf("%s\n", Msg_out);
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
#endif
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
  return;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Shinya Kitaoka 120a6e
char *TTWAIN_GetLastError(TUINT32 *rc, TUINT32 *cc) {
Shinya Kitaoka 120a6e
  assert(rc && cc);
Shinya Kitaoka 120a6e
  *rc = TTwainData.ErrRC;
Shinya Kitaoka 120a6e
  *cc = TTwainData.ErrCC;
Shinya Kitaoka 120a6e
  return Msg_out;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
/*---------------------------------------------------------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef __cplusplus
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
#endif