Uso de Termcap y Terminfo a bajo nivel En los sistemas Unix/Linux, existen unos ficheros de descripciones de las capacidades de un terminal. Esos ficheros, son Termcap, y TemInfo. Con uno de ellos basta para el acceso a las funciones de el terminal. Salvo en los casos en los que sea estrictamente necesario, se recomienda el uso de las funciones de las curses. Estos ficheros contienen la descripción detallada de los terminales, y las secuencias de escape necesarias para accder a sus funciones. Actualmente el fichero termcap se mantiene para permitir la compatibilidad con versiones antiguas. Se recomienda que TODAS las aplicaciones nuevas vayan con Terminfo, por ser más rápida y más moderna. Uso de TermInfo Para utilizar terminfo en un proyecto, se deben incluir las cabeceras curses.h y term.h Necesitaremos una variable char * para almacenar el nombre del terminal desde el que se estan conectando. Para obtener dicho nombre utilizaremos la función getenv (Para obtener valores del sistema): if ((term=(char *) getenv("TERM"))==NULL) Luego, inicializaremos las variables del sistema, segun el terminal que estemos usando, con la función setupterm: setupterm (term, 1, &status); NOTA: La variable term es la misma que se empleo antes con la función getenv A continuación, no resta mas que comprobar si el terminal soporta la función que queremos emplear: if ( bell = = NULL ) fatal("La cadena bell (Pitido) No existe"); y mandarla al terminal cuando sea necesario: putp(bell);
Uso de TermCap Para el empleo de Termcap, solo es necesario la utilización
de la librería curses.h if ((term=(char *) getenv("TERM"))==NULL) { return 0; } A continuación deberemos gardar las especificaciones del terminal en una variable del programa: tgetent(TBuffer,term); NOTA: TBuffer es una variable char *, con tamaño
ya reservado (En las terminales actuales yo lo crearía como
char TBuffer [4096]; ), puesto que si no cabe la información,
el programa fallará. Ahora simplemente, obtendremos la función que nos interese del interior de este terminal: cadena=(char*)tgetstr("po",&TBuffer); Y luego lo mandaremos a imprimir: fputs(cadena,stdout); OTRAS NOTAS para conocer las capacidades de termcap y terminfo, estab bien documentadas en los documentos man. Si alguien encuentra una traducción al castellano, por favor,
mandarme un mail a |