/* Hey EMACS -*- linux-c -*- */
/* $Id: error.c 669 2004-05-06 07:32:12Z roms $ */

/*  libticalcs - Ti Calculator library, a part of the TiLP project
 *  Copyright (C) 1999-2004  Romain Lievin
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#include <stdio.h>
#include <string.h>

#include "gettext.h"


#include "calc_err.h"
#include "headers.h"
#include "update.h"

extern TicableLinkCable *cable;

/* 
   This function put in err_msg the error message corresponding to the
   error code.
   If the error code has been handled, the function returns 0 else it
   propagates the error code by returning it.

   The error message has the following format:
   - 1: the error message
   - 2: the cause(s), explanations on how to fix it
*/
TIEXPORT int TICALL ticalc_get_error(int err_num, char *error_msg)
{
  switch (err_num) {
  case ERR_ABORT:
    strcpy(error_msg, _("Msg: Transfer aborted"));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: the user !"));
    break;

  case ERR_CHECKSUM:
    strcpy(error_msg, _("Msg: Checksum error."));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: a transmission error. Try again."));
    break;

  case ERR_NOT_READY:
    strcpy(error_msg, _("Msg: Calculator is not ready."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: the calculator is off, your link cable is not plugged correctly, your calculator is busy, ..."));
    break;

  case ERR_VOID_FUNCTION:
    strcpy(error_msg,
	   _("Msg: This function does not exist for this calculator."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: the operation you attempted is not supported by your calculator model."));
    break;

  case ERR_OUT_OF_MEMORY:
    strcpy(error_msg, _("Msg: Calculator out of memory."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: the calculator does not have memory enough for doing the operation."));
    break;

  case ERR_OPEN_FILE:
    strcpy(error_msg, _("Msg: Unable to open (reading) the file."));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: disk space or permissions."));
    break;

  case ERR_SAVE_FILE:
    strcpy(error_msg, _("Msg: Unable to open (writing) the file."));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: disk space or permissions."));
    break;

  case ERR_INVALID_HOST:
    strcpy(error_msg, _("Msg: Invalid host ID."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: TiLP received an unexpected Machine ID, probably due to a transmission error."));
    break;

  case ERR_INVALID_TARGET:
    strcpy(error_msg, _("Msg: Invalid target ID."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: TiLP received an unexpected Target ID, probably due to a transmission error."));
    break;

  case ERR_INVALID_CMD:
    strcpy(error_msg, _("Msg: Invalid command ID."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: TiLP received an unexpected Command ID, probably due to a transmission error."));
    break;

  case ERR_EOT:
    strcpy(error_msg, _("Msg: Not really an error, should not appear !"));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: a bug. Drop us an email !"));
    break;

  case ERR_VAR_REJECTED:
    strcpy(error_msg,
	   _("Msg: The variable or FLASH application has been refused."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: you attempted to send a variable which is locked/archived on the target calculator. The calculator may be out of memory, too."));
    break;

  case ERR_CTS_ERROR:
    strcpy(error_msg, _("Invalid CTS packet."));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: a transmission error."));
    break;

  case ERR_NACK:
    strcpy(error_msg, _("NACK received."));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: the command has been refused.\n"));
    break;

  case ERR_INVALID_PACKET:
    strcpy(error_msg, _("Invalid packet."));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: a transmission error.\n"));
    break;

  case ERR_MISSING_VAR:
    strcpy(error_msg, _("The requested var does not exist."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: you attempted to download a variable which does not exist on the calculaotr any longer. Maybe you have manually deleted it ?"));
    break;

  case ERR_PENDING_TRANSFER:
    strcpy(error_msg,
	   _("A transfer is in progress. You can not start a new one."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _
	   ("Cause: this should not happen. Probably a bug: drop us an email !"));
    break;

  case ERR_NO_VARS:
    strcpy(error_msg, _("There is nothing to backup."));
    strcat(error_msg, "\n");
    strcat(error_msg,
	   _("Cause: 0 variables stored onto your calculator.\n"));
    break;

  default:
    strcpy(error_msg,
	   _("Error code not found. This is a bug. Please report it.\n"));
    strcat(error_msg, "\n");
    strcat(error_msg, _("Cause: a bug. Drop us an email !"));
    UNLOCK_TRANSFER()
	return err_num;
    break;
  }

  TRYF(cable->close());
  UNLOCK_TRANSFER();

  return 0;
}


syntax highlighted by Code2HTML, v. 0.9.1