text: #include <stdio.h>
  #include <stdlib.h>
  #include <stdarg.h>
  #include <string.h>
  #include <ncurses.h>
  
  void eprintf(const char *fmt, ...) {
  	va_list ap;
  
  	endwin();
  	va_start(ap, fmt);
  	vfprintf(stderr, fmt, ap);
  	va_end(ap);
  	exit(EXIT_FAILURE);
  }
  
  void *emalloc(size_t size) {
  	void *p;
  
  	p = malloc(size);
  	if (!p)
  		eprintf("Out of memory\n");
  	return p;
  }
  
  void *ecalloc(size_t nmemb, size_t size) {
  	void *p;
  
  	p = calloc(nmemb, size);
  	if (!p)
  		eprintf("Out of memory\n");
  	return p;
  }
  
  double estrtod(const char *str) {
  	char *ep;
  	double d;
  
  	d = strtod(str, &ep);
  	if (!d || *ep != '\0' || ep == str)
  		eprintf("Invalid number: %s\n", str);
  	return d;
  }
  
  size_t strlcpy(char *dest, const char *src, size_t size) {
  	size_t len;
  
  	len = strlen(src);
  
  	if (size) {
  		if (len >= size)
  			size -= 1;
  		else
  			size = len;
  		strncpy(dest, src, size);
  		dest[size] = '\0';
  	}
  
  	return size;
  }
  