🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #14058

RE: Limpiar pantalla

#14058
From: Lokutus
Date: Sun, 17 Dec 2000 06:29
139 lines
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.195
References: <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