/**
 * @file include/errcode.h
 * @brief Define error codes
 */

#pragma once
#include <stdlib.h>

typedef enum {
  ERR_SUCCESS,
  ERR_UNKNOWN_CHAR,
  ERR_UNKNOWN_FN,
  ERR_DIMENTION_MISMATCH,
  ERR_IRREGULAR_MATRIX,
  ERR_NON_SQUARE_MATRIX,
  ERR_TYPE_MISMATCH,
  ERR_FILE_NOT_FOUND,
  ERR_BUFFER_DEPLETION,
  ERR_CURSOR_OUT_OF_RANGE,
  ERR_CHAR_NOT_FOUND,
  ERR_ALLOCATION_FAILURE,
  ERR_UNKNOWN_COMMAND,
  ERR_REACHED_UNREACHABLE,
  ERR_UNKNOWN_OPTION,
} errcode_t;

#define panic(e, ...) \
  do { \
    printf("Panicked at " HERE " " __VA_ARGS__); \
    puts(codetomsg(e)); \
    abort(); \
  } while (0)

char const *codetomsg(errcode_t);