/* $Header: pd:zvmrcs/debug.c,v 1.1 1993/04/07 18:47:36 rvillari Exp $ */
#include <stdio.h>
#include <clib/exec_protos.h>
#include <ctype.h>
#include <exec/memory.h>
#include "debug_proto.h"
#include "ui_support_proto.h"

#include "logger.h"

struct MsgPort* getPort(char* port) {
  struct MsgPort* retVal;
  Forbid();
  retVal = FindPort(port);
  Permit();
  return retVal;
}

void mainError(char* error) {
  struct MsgPort* loggerPort = getPort("LOGGERMP");

  struct DLMsg* loggerMsg = (struct DLMsg*)AllocMem(sizeof(struct DLMsg), MEMF_PUBLIC | MEMF_CLEAR);

  if (loggerPort && loggerMsg) {
    loggerMsg->message.mn_ReplyPort = 0;
    loggerMsg->message.mn_Length = sizeof(struct DLMsg);
    strncpy(loggerMsg->error, error, sizeof(loggerMsg->error) - 5);
    loggerMsg->error[sizeof(loggerMsg->error) - 1] = '\0';
    PutMsg(loggerPort, (struct Message*)loggerMsg);

    loggerMsg = 0; /* assume that the logger takes care of deleting this msg */
  }

  if (loggerMsg) FreeMem(loggerMsg, sizeof(struct DLMsg));
}

void debugString(char* s, char* description) {
  if (s) mainError(s);
  if (description) mainError(description);
}

void debugInt(int i, char* description) {
  char temp[100];
  sprintf(temp, "%d", i);
  if (description)
    mainError(description);
  mainError(temp);
}

void debugChar(char c, char* description) {
  char temp[100];
  if (description) {
    if (isprint(c))
      sprintf(temp, "%s: %c", description, c);
    else
      sprintf(temp, "%s: [%d]", description, c);
  } else {
    if (isprint(c))
      sprintf(temp, "%c", c);
    else
      sprintf(temp, "[%d]", description, c);
  }
  mainError(temp);
}

void printStatus(enum ReturnStatus status) {
  switch (status) {
  case Normal :
    mainError("Normal return");
    break;
  case KeyDetected :
    mainError("Key Detected");
    break;
  case QuietDetected :
    mainError("Quiet Detected");
    break;
  case SilenceDetected :
    mainError("Silence Detected");
    break;
  case BusyDetected :
    mainError("Busy Detected");
    break;
  case FaxDetected :
    mainError("Fax Detected");
    break;
  case TimedOut :
    mainError("Timed Out");
    break;
  case Overflow :
    mainError("Overflow");
    break;
  case Error :
    mainError("Error");
    break;
  }
}

