Article View: es.comp.os.linux.programacion
Article #14058RE: Limpiar pantalla
From: Lokutus
Date: Sun, 17 Dec 2000 06:29
Date: Sun, 17 Dec 2000 06:29
139 lines
5270 bytes
5270 bytes
"xter" <xxxx@ninguna.es> escribi� en el mensaje news:KtgZ5.392$YZ4.12993@m2newsread.uni2.es...
> Hola.
>
> Tengo un peque�o problema y necesito ayuda urgente. Estoy haciendo una
> pr�ctica en C (con el gcc de RedHat 6.1) para la universidad y necesito
> saber varias cosas.
>
> - �C�mo puedo limpiar la pantalla?. Necesito saber cual es la funcion que
> limpia la pantalla porque la que v� en un libro (_clearscreen) no me tira,
> no encuentra la librer�a "graph.h" en la que se supone que est�.
>
Puedes usar secuencias de escape ansi, o usar ncurses, o usar la versi�n para linux de conio.h, (que est� basada en ncurses), o
puedes imprimir 50 retornos de carro.
usando la secuencia de escape ansi es:
#define ESCAPE 27
void borrar()
{
printf("%c[2J", ESCAPE);
}
funci�n no chequeada
> - Tambi�n me interesar�a saber c�mo puedo hacer que el programa se pare
> unos segundo mostrando una presentaci�n o similar. En Pascal usaba "delay",
> pero en C no tengo ni puta. �Alguien sabe c�mo?
>
man -a sleep
man usleep
Hay un sleep que es del shell, y otro que es una llamada al sistema.
> - Relacionado con lo anterior: �c�mo puedo hacer que el programa pare
> hasta que el usuario pulse una tecla, sin mostrarla por pantalla?. En Pascal
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <termio.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
char esperaPulsacion(void)
{
struct termio tManip;
struct termio tGuarda;
int hstdin;
char cChar;
int iTest;
/* Esto es por si lo compilas en modo ansi, en ansi fileno no existe
#ifdef fileno
hStdIN = fileno(stdin);
#else
hStdIN = 0;
#endif
ioctl(hstdin, TCGETA, &tGuarda);
tManip = tGuarda;
tManip.c_cc[VMIN] = 0;
tManip.c_cc[VTIME] = 0;
tManip.c_lflag = 0;
while (!iTest) {
ioctl(hstdin, TCSETA, &tManip);
iTest = read(hStdIN, &cTest, 1);
ioctl(hstdin, TCSETA, &tGuarda);
}
return(cTecla);
}
Aqu� lo tienes, es una modificaci�n de otra funci�n no bloqueante que devolv�a un caracter del buffer de teclado, es un polling,
si ves que consume mucha CPU le pones un usleep() dentro del bucle. No he chequeado si funciona.
(jejeje, pooling + NT + prioridad de tiempo real = rearrancar el sistema, eso si lo he probado :))))
>
> - Tengo montones de preguntas m�s, por ejemplo, c�mo escribir un texto en
> pantalla en la posici�n que yo quiero (columna y fila), etc, etc, pero voy a
> resumirlas todas en una: �d�nde se puede conseguir una documentaci�n fiable
> de C para Linux?, �d�nde puedo encontrar una lista de las funciones de C y
> de las librerias en las que est�n?, �es que en ning�n libro se habla de
> estas t�cnicas de control del programa (muy �tiles en men�s y similares)?.
> Es que no tengo ni idea de qu� funciones usar... y lo que es peor, no tengo
> ni idea de d�nde encontrar documentaci�n.
>
La librer�a ncurses.h o de una forma menos portable, con secuencias de escape ansi,
Con ANSI es:
void gotoxy(int x, int y)
{
printf("%c[%d;%dF", ESCAPE, y, x);
}
void videoInverso()
{
printf(%c[?5h", ESCAPE);
}
void videoNormal()
{
printf(%c[?5l", ESCAPE);
}
/* Funciones no probadas */
Si haces tu programa con estas funciones y a tu profe se le ocurre probarlo en un UNIX con
un terminal ModeloNoCompatibleAnsi, en lugar de tu programa ver� un churro de car�cteres y s�mbolos raros.
Enlaces :
http://nacho.cps.unizar.es/docencia/LabProg/cursor.html
http://mipagina.euskaltel.es/iosus/linux/Bash-Prompt-HOWTO-5.html
http://usuarios.arnet.com.ar/lucas_correa/textos.htm
http://lucas.hispalinux.es/COMO-INSFLUG/COMOs/Bash-Prompt-Como/Bash-Prompt-Como-5.html
http://www.granavenida.com/perl/tutoperl11.html
http://personal.redestb.es/mgtalles/fortran/ansi.htm
Lokutus, asimilando la red
Technical Details
Message-ID:
<3a3c5eb9@news>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!isdnet!newsgate.cistron.nl!news.tele.dk!134.222.94.5!npeer.kpnqwest.net!news!212.73.36.195References:
<KtgZ5.392$YZ4.12993@m2newsread.uni2.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,372ab882cac9bd02 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2000-12-16 22:35:39 PST Reply-To: "Lokutus" <Lokutus@galactica.com> From: "Lokutus" <Lokutus@galactica.com> Newsgroups: es.comp.os.linux.programacion References: <KtgZ5.392$YZ4.12993@m2newsread.uni2.es> Subject: RE: Limpiar pantalla Date: Sun, 17 Dec 2000 07:29:03 +0100 Lines: 142 Organization: email=6C6F6B757475733230303040626967666F6F742E636F6D X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 NNTP-Posting-Host: 212.73.36.195 X-Original-NNTP-Posting-Host: 212.73.36.195 Message-ID: <3a3c5eb9@news> X-Trace: 17 Dec 2000 07:35:37 +0100, 212.73.36.195 Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!isdnet!newsgate.cistron.nl!news.tele.dk!134.222.94.5!npeer.kpnqwest.net!news!212.73.36.195