#include <signal.h>
#include <string.h>

#include "locale_impl.h"

#if (SIGHUP == 1) && (SIGINT == 2) && (SIGQUIT == 3) && (SIGILL == 4) && (SIGTRAP == 5) &&         \
    (SIGABRT == 6) && (SIGBUS == 7) && (SIGFPE == 8) && (SIGKILL == 9) && (SIGUSR1 == 10) &&       \
    (SIGSEGV == 11) && (SIGUSR2 == 12) && (SIGPIPE == 13) && (SIGALRM == 14) && (SIGTERM == 15) && \
    (SIGSTKFLT == 16) && (SIGCHLD == 17) && (SIGCONT == 18) && (SIGSTOP == 19) &&                  \
    (SIGTSTP == 20) && (SIGTTIN == 21) && (SIGTTOU == 22) && (SIGURG == 23) && (SIGXCPU == 24) &&  \
    (SIGXFSZ == 25) && (SIGVTALRM == 26) && (SIGPROF == 27) && (SIGWINCH == 28) &&                 \
    (SIGPOLL == 29) && (SIGPWR == 30) && (SIGSYS == 31)

#define sigmap(x) x

#else

static const char map[] = {
    [SIGHUP] = 1,     [SIGINT] = 2,   [SIGQUIT] = 3,   [SIGILL] = 4,   [SIGTRAP] = 5,
    [SIGABRT] = 6,    [SIGBUS] = 7,   [SIGFPE] = 8,    [SIGKILL] = 9,  [SIGUSR1] = 10,
    [SIGSEGV] = 11,   [SIGUSR2] = 12, [SIGPIPE] = 13,  [SIGALRM] = 14, [SIGTERM] = 15,
    [SIGSTKFLT] = 16, [SIGCHLD] = 17, [SIGCONT] = 18,  [SIGSTOP] = 19, [SIGTSTP] = 20,
    [SIGTTIN] = 21,   [SIGTTOU] = 22, [SIGURG] = 23,   [SIGXCPU] = 24, [SIGXFSZ] = 25,
    [SIGVTALRM] = 26, [SIGPROF] = 27, [SIGWINCH] = 28, [SIGPOLL] = 29, [SIGPWR] = 30,
    [SIGSYS] = 31};

#define sigmap(x) ((x) >= sizeof map ? (x) : map[(x)])

#endif

static const char strings[] =
    "Unknown signal\0"
    "Hangup\0"
    "Interrupt\0"
    "Quit\0"
    "Illegal instruction\0"
    "Trace/breakpoint trap\0"
    "Aborted\0"
    "Bus error\0"
    "Arithmetic exception\0"
    "Killed\0"
    "User defined signal 1\0"
    "Segmentation fault\0"
    "User defined signal 2\0"
    "Broken pipe\0"
    "Alarm clock\0"
    "Terminated\0"
    "Stack fault\0"
    "Child process status\0"
    "Continued\0"
    "Stopped (signal)\0"
    "Stopped\0"
    "Stopped (tty input)\0"
    "Stopped (tty output)\0"
    "Urgent I/O condition\0"
    "CPU time limit exceeded\0"
    "File size limit exceeded\0"
    "Virtual timer expired\0"
    "Profiling timer expired\0"
    "Window changed\0"
    "I/O possible\0"
    "Power failure\0"
    "Bad system call\0"
    "RT32"
    "\0RT33\0RT34\0RT35\0RT36\0RT37\0RT38\0RT39\0RT40"
    "\0RT41\0RT42\0RT43\0RT44\0RT45\0RT46\0RT47\0RT48"
    "\0RT49\0RT50\0RT51\0RT52\0RT53\0RT54\0RT55\0RT56"
    "\0RT57\0RT58\0RT59\0RT60\0RT61\0RT62\0RT63\0RT64"
#if _NSIG > 65
    "\0RT65\0RT66\0RT67\0RT68\0RT69\0RT70\0RT71\0RT72"
    "\0RT73\0RT74\0RT75\0RT76\0RT77\0RT78\0RT79\0RT80"
    "\0RT81\0RT82\0RT83\0RT84\0RT85\0RT86\0RT87\0RT88"
    "\0RT89\0RT90\0RT91\0RT92\0RT93\0RT94\0RT95\0RT96"
    "\0RT97\0RT98\0RT99\0RT100\0RT101\0RT102\0RT103\0RT104"
    "\0RT105\0RT106\0RT107\0RT108\0RT109\0RT110\0RT111\0RT112"
    "\0RT113\0RT114\0RT115\0RT116\0RT117\0RT118\0RT119\0RT120"
    "\0RT121\0RT122\0RT123\0RT124\0RT125\0RT126\0RT127\0RT128"
#endif
    "";

char* strsignal(int signum) {
  const char* s = strings;

  signum = sigmap(signum);
  if (signum - 1U >= _NSIG - 1)
    signum = 0;

  for (; signum--; s++)
    for (; *s; s++)
      ;

  return (char*)LCTRANS_CUR(s);
}
