¿Cómo determino si un terminal tiene capacidad de color?

Me gustaría cambiar un programa para detectar automáticamente si un terminal tiene capacidad de color o no, así que cuando ejecuto dicho programa desde un terminal que no tiene capacidad de color (digamos Mx shell en (X) Emacs), el color se apaga automáticamente .

No quiero codificar el programa para detectar TERM = {emacs, tonto}.

Estoy pensando que termcap / terminfo debería poder ayudar con esto, pero hasta ahora solo he logrado improvisar este (n) fragmento de código que usa maldiciones, que falla gravemente cuando no puede encontrar el terminal:

#include <stdlib.h>
#include <curses.h>

int main(void) {
 int colors=0;

 initscr();
 start_color();
 colors=has_colors() ? 1 : 0;
 endwin();

 printf(colors ? "YES\n" : "NO\n");

 exit(0);
}

Es decir. Entiendo esto:

$ gcc -Wall -lncurses -o hep hep.c
$ echo $TERM
xterm
$ ./hep
YES
$ export TERM=dumb
$ ./hep           
NO
$ export TERM=emacs
$ ./hep            
Error opening terminal: emacs.
$ 

que es ... subóptimo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta