Introducción
Siempre he sido un poco melancólico y me ha llamado la atención el desarrollo de aplicaciones en modo texto, sobre todo cuando recuerdo mis primeros programas hechos en Turbo Basic 1.0.
He ido a algunos establecimientos y en pleno 2014 he visto que usan programas TUI ( Text User Interface) , y no es que estén anticuados.
Por ejemplo, conozco un establecimiento que tiene un servidor Linux y los puntos de venta se conectan por terminal usando ssh , teniendo tan solo un equipo sin X y sin nada más para aprobechar recursos.
Por ese motivo fue que me puse a investigar sobre qué librería usarían esos programas.
Buscando di con la libreria NCurses , habrán muchas más , pero esta lleva muchos años, es un proyecto GNU, tiene libros oficiales que explican como funciona y mucha documentación.
Al grano
Recordando cuando empecé a programar en Turbo Basic 1.0 para MSDOS , me acuerdo que una vez necesité tener un input con limitación de texto , es decir , la propiedad maxLength que tienen los controles TextBox en .net o JTextField de Swing.
Pues recuerdo que me puse a hacerlo y lo hice en su momento para Turbo Basic y ahora trasteando con la libreria NCurses pues quise reproducir el mismo programa pero en C. Yo y mis frikadas.
Te diré que echaba de menos programar en modo texto, porque tanto .net, swing y todos estos componentes ya hechos, te van "desentrenando" el cerebro y no te hacen pensar , ya que tienes muchas cosas hechas, a mi por lo menos me pasa. No viene mal trastear con este tipo de interfaces en la que algunas cosas ya no vienen desarrolladas por defecto.
¿Cómo funciona?
Descarga aquí la función: https://github.com/tsw1985/Gscanf
La función tampoco es algo del otro mundo, pero está más o menos currada y puedes usar los cursores, las teclas de inicio y fin , insertar y suprimir. Si abres una terminal en modo texto tty1 el cursor lo verás mejor, pero con la terminal usando las X el cursor tendrá este aspecto.
Para que funcione simplemente copia y pega la función en un objeto , o donde quieras en tu código. Crea un buffer que tenga el mismo tamaño + 1 de la longitud de la cadena que quieres y con la función strcpy pasa el puntero de donde está la variable resultado a el buffer.
Definición de la función:
gscanf(coordenada Y , coordenada X , longitud );
char final[11];
char* wordResult = gscanf(10,15, length + 1 );
strcpy(final , wordResult);
move(1,1);
printw("THE RESULT IS %s ", final);
Quizás esto nunca lo necesites nunca, pero bueno, quería compartirlo ;).
Saludos !!