Escribí el siguiente programa para probar el modo Xterm Tektronix 4014:
#define _BSD_SOURCE #include <stdio.h> #include <assert.h> #include <unistd.h> #define GS ((char)0x1D) #define ESC ((char)0x1B) #define FF ((char)0x0C) static void xy (int x, int y, char* restrict xy) { xy[3] = (x % 32) + 64; // x low xy[2] = (x >> 5) + 32; // x high xy[1] = (y % 32) + 96; // y low xy[0] = (y >> 5) + 32; // y high assert (x == 32 * (xy[2] - 32) + xy[3] - 64); assert (y == 32 * (xy[0] - 32) + xy[1] - 96); } static void enter_graphic () { printf("%c", GS); } static void leave_graphic () { printf("\n"); } static char pt[] = { ESC, 0, 0, 0, 0, 0, 0 }; /* This function is NOT threadsafe! (but why should it be ...) */ static void line_to (int x, int y, char pattern) { pt[1] = pattern ? pattern : '`'; xy(x, y, pt + 2); printf("%s", pt); } static void clear () { printf("%c%c", ESC, FF); } static void randgrph (int dx, int dy) { int x, y; enter_graphic (); for (int i = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) { x = (x + 7) % 200; y = (y + 39) % 200; line_to(x + dx, y + dy, 'b'); } } leave_graphic(); } int main (void) { int i, j; for (i = 0; i < 200; ++i) { for (j = 0; j < 200; ++j) { clear(); randgrph(i, j); usleep(1000000/25); } } } Esto parece que funciona bien. xy crea un par de coordenadas y line_to dibuja una línea. Esto borrará la pantalla, dibujará algunas líneas de puntos, en un bucle. Al menos en Xterm, parece "animado" (supongo que un Tektronix real no sería lo suficientemente rápido, pero es solo para probar).
Sin embargo: siempre muestra el cursor de texto. ¿Cómo puedo evitar que lo haga? No pude encontrar una secuencia de control Tek para ocultar el cursor de texto, solo hay posibilidades de ocultar el cursor gráfico, que de todos modos no se muestra en xterm.
La solución fue que el terminal de control debe configurarse para que no haga eco de la entrada. Esto se puede hacer con noecho() de libncurses .
La secuencia VT100 ESC [ ? 2 5 l podría funcionar.
Los escapes VT100 no se aplican a la pantalla Tek4014. Tek4014 tiene solo dos modos de cursor:
GIN de gráficos (también conocido como cursor en forma de cruz). El cursor de gráficos se activa mediante una secuencia de escape escape control Z y se desactiva mediante un clic del mouse, por ejemplo, la acción gin-press utilizada en el recurso de translations .
Para referencia: