Universidad Mayor de San Andrs
Ingeniera Electrnica
SISTEMAS DE COMPUTACIN, ETN903
Tema:
Laboratorio N 6
Presentado por:
Grupo: G03
Said Yasser ALE SALINAS
Erick Rubn GUARANI TARIFA
Miguel Eduardo SILVA POMA
Docente:
Javier SANABRIA GARCIA
Fecha de entrega: 11- 05 - 2017
Objetivos:
Disear un sistema de computacin en Linux que tenga un men y pueda
manejarse un contador con el teclado.
Anlisis:
NCURSES
Ncurses es una librera de funciones para el manejo de interfaces basadas en
texto. Es decir, se trata de un conjunto de funciones, ya programadas, que
podemos utilizar en nuestros programas para mejorar su presentacin.
Como Ncurses no es una librera estndar de C, es necesario ordenar al compilador
que la enlace con nuestro programa. Esto se hace aadiendo la opcin lncurses al
comando gcc. As pues, esta lnea de comando compila el programa
holamundo.c sin enlazarlo con la librera Ncurses:
$ gcc holamundo.c
En cambio, esta otra lnea fuerza el enlace del programa con la librera Ncurses:
$ gcc lncurses holamundo.c
No hace falta decir que la librera debe estar instalada en nuestro sistema, a que
no?. Adems, debemos hacer un #include <ncurses.h> en el programa que vaya a
utilizar estas funciones.
Ncurses tiene muchsimas funciones, pero nosotros slo nos referiremos a las que
necesitamos para empezar a funcionar con ella.
Inicializacin de Ncurses
Para utilizar las funciones de Ncurses en nuestro programa, basta con que
incluyamos la siguiente llamada:
initscr();
Esta funcin crea una ventana de texto. La ventana se llama stdscr (que significa
standard screen, es decir, pantalla estndar). A partir de aqu podremos utilizar
cualquier funcin de Ncurses, pues todas actan sobre esa ventana . Por ejemplo,
una funcin que suele ir justo despus es:
initscr(): Inicializa Ncurses y crea la pantalla estndar. Debe ser invocada antes
que cualquier otra funcin de la librera.
keypad(stdscr, activar): Activa / desactiva la recepcin de teclas especiales,
como F1, ESC, Intro, etc. Si activar = 1, se activa la recepcin. Si activar = 0, se
desactiva.
echo() / noecho(): Activa / desactiva el eco de caracteres. Si el eco est activo, lo
que se escriba en el teclado aparece en la pantalla. Si est inactivo, no.
cbreak() / nocbreak(): Activa / desactiva el envo inmediato de teclas.
Normalmente, cuando se teclea algo no es enviado al programa hasta que no se
pulsa intro. La funcin cbreak() hace que todo cuanto se teclee sea enviado al
programa sin necesidad de intro. La funcin nocbreak() desactiva este
comportamiento
nodelay(stdscr, activar): Activa / desactiva la espera para lectura de teclado. Las
funciones para leer un solo carcter, como getch(), detienen la ejecucin del
programa hasta que se pulsa alguna tecla. Llamando a esta funcin con el
parmetro activar = 1, conseguiremos que el programa no se detenga en getch()
aunque no se pulse tecla alguna. Para desactivarlo, llamaremos a la funcin con
activar = 0.
endwin(): Finaliza Ncurses. Hay que llamar a esta funcin antes de terminar el
programa para liberar la memoria ocupada y restaurar la consola al estado inicial.
Escribir y leer
Cuando utilicemos Ncurses debemos olvidarnos de las funciones de entrada/salida
estndar, como scanf(), printf(), gets() o puts(). En su lugar usaremos estas otras
funciones:
printw() y putstr(): Para escribir usaremos la funcin printw(), que funciona igual
que printf() pero sobre una ventana de Ncurses. Tambin podemos usar putstr(),
que es como puts(), es decir, sirve para imprimir cadenas
getstr() y getch(): Para leer disponemos de getstr(), que es como gets(), es decir,
sirve para leer cadenas por teclado. De modo que, si queremos leer un nmero,
debemos leerlo como cadena y luego convertirlo a nmero (con las funciones
estndar atoi(), atof(), etc). Tambin podemos usar getch(), que lee un nico
carcter.
move(): Para colocar el cursor usaremos move(y,x). Esto ubica el cursor en la
columna x y la fila y de la pantalla. Funciona como la funcin gotoxy() de
Borland, pero, cuidado!, porque en move() se indica primero la fila y luego la
columna, es decir, justo al revs que en la funcin de Borland.
refresh(): Actualiza la pantalla. Es el nico modo de asegurarnos de que los
cambios realizados se muestren instantneamente