/* ---------------------------------------------------------- */
/* | Nombre: stermp.h ( Simple Terminal Play)               | */
/* | Autor:  Gaspar Fernández (blakeyes@totaki.com)         | */
/* | Fecha:  05 Enero 2009                                  | */
/* | Web:    http://www.totaki.com/poesiabinaria/           | */
/* ---------------------------------------------------------- */
/* | Descripción:                                           | */
/* |   Manejo de colores y posicionamiento de texto en un   | */
/* |  terminal para nostálgicos de conio.h                  | */
/* ---------------------------------------------------------- */

/*   Este código se distribuye libremente, tal cual, sin garantías. */
/*   Pero si utilizas este código, y lo distribuyes, me gustaría que */
/*   citaras la fuente, y ya de paso, un enlace al blog no vendría mal :) */

#include <termios.h>
#include <string.h>

/* Colores */
#define BLACK        0
#define BLUE         1
#define GREEN        2
#define CYAN         3
#define RED          4
#define MAGENTA      5
#define BROWN        6
#define LIGHTGRAY    7
#define DARKGRAY     8
#define LIGHTBLUE    9
#define LIGHTGREEN   10
#define LIGHTCYAN    11
#define LIGHTRED     12
#define LIGHTMAGENTA 13
#define YELLOW       14
#define WHITE        15
/* Atributos especiales */
#define UNDERLINE    64
#define BLINK        128

/* Posibles atributos para las letras */
#define UNDERLINE_ATTR 4
#define BLINK_ATTR     5
#define BRILLO_ATTR    1

/* El brillo empieza en el noveno color */
#define BRILLO_MIN     9
/* El color marrón se corresponde con el amarillo sin brillo. */
/* Lightgray se corresponde con el blanco sin brillo */
/* Darkgray corresponde con el color por defecto del terminal */

/* Código de salida */
#define EXIT_CODE 1

typedef struct
{
  int x, y;
} coord_t;

void clrscr();			/* Borrar la pantalla */

void gotoxy(int x, int y);	/* Nos movemos en el terminal */

void restore_color();		/* Restaura los colores */
void restore_terminal();	/* Restaura el terminal */

int screenheight();		/* Alto de la pantalla */
int screenwidth();		/* Ancho de la pantalla */

void termnoecho(int canon);	/* Elimina el echo de teclado */
void textbackground(int color);	/* Especifica el color de fondo */
void textcolor(int color);	/* Especifica el color de primer plano */

coord_t wherexy(int abs);	/* Devuelve la posición actual en pantalla. */
                                /* si abs==1 devolverá el ancho y alto de la pantalla */

int wherex();			/* Devuelve la posición X del cursor */
int wherey();			/* Devuelve la posición Y del cursor */

int getch();			/* Simula getch() - Pide un carácter (sin INTRO) y sin echo */
int getche();			/* Simula getche()- Pide un carácter (sin INTRO) y con echo */
int kbhit();			/* Devuelve si se ha pulsado una tecla o no (no detiene ejecución) */
int kbhit2();			/* Si se ha pulsado una tecla, devuelve su código (no detiene ejecución) */ 
int __kbhit();		        /* Igual que kbhit2() pero sin alterar la terminal (Para hacer kbhit_pre() 
				   y ejecutar muchas vecer. */

void kbhit_pre();		/* Prepara el sistema para kbhit */

void save_term_info();		/* Salva información de terminal en variables temporales */
void term_defaults();		/* Restaura valores por defecto de la terminal */
void restore_term(struct termios *tty, int *stdinflags); /* Restaura valores en flags de terminal */

void error(char *err);		/* Pasa error por stderr y cierra el programa */
