Newsgroup: it.comp.lang.c
Titolo: Aiutino facile

Esiste una istruzione per posizionare il cursore in un punto dello schermo
in C?
Come ad esempio le gotoxy del Pascal?
Lavoro con Visual C++ 6.0 in windows.
Qualcuno mi puo' aiutare?
Grazie.
Acrosstheuniverse

Il lavoro che sto facendo io usa proprio questa feature....
Negli ambienti terminale esistono una serie di funz per giocare con i colori
e i cursori....
sono solo dei codici ansi che metti dentro ai printf....
that's my libbrary....
#include <termios.h>
#include <unistd.h>
#include <sys/ioctl.h>
/* efface l'ecran */
#define TERM_CLEAR printf ("%c[H%c[J",27,27)
/* place le curseur en haut a gauche */
#define TERM_CURSOR_HOME printf ("%c[H",27)
/* place le curseur a la position x,y (en ht/gche = 1,1)*/
#define TERM_CURSOR_GOTO(x,y) printf ("%c[%d;%dH",27,(y+1),(x+1))
/* passe en vidéo inverse */
#define TERM_FONT_REVERSE printf("%c[5m",27)
/* passe en bold ou surbrillance suivant le terminal */
#define TERM_FONT_BOLD printf("%c[1m",27)
#define TERM_FONT_NORMAL printf("%c[m",27)
#define TERM_FONT_WHITEBG printf("%c[47m%c[34m",27,27)
#define TERM_FONT_BLACKBG printf("%c[40m%c[37m",27,27)
#define TERM_FONT_CYAN printf("%c[36m",27)
struct termios termOriginalCfg;
struct termios termNewCfg;
struct winsize size;
void TermChgCfg()
{
  if (tcgetattr(STDIN_FILENO,&termOriginalCfg)<0)
    {
      printf("Erreur de type tcgetattr()!!\n");
      exit(0);
    }
  termNewCfg=termOriginalCfg;
  /* Je copie la configuration
   * et je change les carateristiques
   *
   * 1:Pas de mode canonique
   * 2:Pas d'echo
   * 3 et 4: chaque characthère peut être lu separement
   */
  termNewCfg.c_lflag &= ~(ICANON);
  termNewCfg.c_lflag &= ~(ECHO);
  termNewCfg.c_cc[VMIN] = 1;
  termNewCfg.c_cc[VTIME]= 0;
  /*
   * Je rend actives les nouvelles impostations
   */
  if(tcsetattr(STDIN_FILENO,TCSAFLUSH,&termNewCfg)<0)
    {
      printf("Erreur de type tcgetattr()!!\n");
      exit(0);
    }
}
void TermOrigCfg()
{
  if(tcsetattr(STDIN_FILENO,TCSAFLUSH,&termOriginalCfg)<0)
    {
      printf("Erreur de type tcgetattr()!!\n");
      exit(0);
    }
}
void isTermActive()
{
  if (isatty(STDIN_FILENO)==0)
    {printf ("pas dans un terminal !\n");}
}
void TermGetSize()
{
  if (ioctl(STDIN_FILENO,TIOCGWINSZ, (char*) &size)<0)
      printf ("Erreur TIOCGEWINSZ\n");
      exit(0);
    }
  }

#include <sys/ioctl.h>
A me questa pare tanto una libreria di Unix
Non standard per non standard, io consiglierei di appoggiarsi alla
conio (originaria del Borland, mi pare sia stata adottata da tutti i
porting del GCC per win)?
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

A parte che non e' standard, ma funziona sotto Dos?
Devi inserire ansi.sys nel config.sys.
-- 
Cordiali saluti
  Artemio

 ha scritto nel messaggio
news:81n3cus0fi14kcnfo...@4ax.com...

Quindi un utente dovrebbe fare questo per installarla(e non funziona sotto
WinME); inoltre, perché scrivi( o chi per te, dato che non sei francese):
#define TERM_CLEAR printf ("%c[H%c[J",27,27)
anziché
#define TERM_CLEAR printf("\x1B[H\x1B[J")
?
Ti posto il codice di gotoxy nella libreria di Mingw32(a rigore sarebbe GPL
e il tuo programma lo diventerebbe, ma non penso si secchino tanto, del
resto non è codice originale). Ciao!
void gotoxy(int x, int y) {
  COORD c;
  c.X = x - 1;
  c.Y = y - 1;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
Penso che windows.h contenga tutto, dato che qua non include nient'altro a
parte <unistd.h> (che se non sbaglio è di Unix).
E questo funziona sotto windows senza librerie nel config.sys né niente. Se
vuoi ti posto tutto il conio.h della mia versione di mingw32, quella di
Dev-C++ 4.
Ciao!
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.