begin process at 2008 08 21 20:53:30
1 229 631 membres
443 nouveaux aujourd'hui
14 264 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CCRT


Information sur la source

Catégorie :Graphique Classé sous : crt, unix, vt100, pascal, conio Niveau : Débutant Date de création : 11/09/2006 Date de mise à jour : 18/10/2006 23:07:28 Vu / téléchargé: 3 857 / 100

Note :
Aucune note

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

J'ai débuté la programmation en Pascal...
L'unité graphique crt m'a permis de développer plein d'application console interactive...

Ccrt fait la même chose pour C Unix :-)

elle peut simplifier plusieurs chose (readkey, delay...)

Source

  • #include <stdio.h>
  • #include <termios.h>
  • #include <unistd.h>
  • #include <stdlib.h>
  • #include <time.h>
  • typedef enum
  • {
  • BLACK,
  • RED,
  • GREEN,
  • YELLOW,
  • BLUE,
  • MAGENTA,
  • CYAN,
  • WHITE
  • } COLORS;
  • void mode_raw(int activer) {
  • static struct termios cooked;
  • static int raw_actif = 0;
  • if (raw_actif == activer) {return;}
  • if (activer) {
  • struct termios raw;
  • tcgetattr(STDIN_FILENO, &cooked);
  • raw = cooked;
  • cfmakeraw(&raw);
  • tcsetattr(STDIN_FILENO, TCSANOW, &raw);
  • }
  • else {tcsetattr(STDIN_FILENO, TCSANOW, &cooked);}
  • raw_actif = activer;
  • }
  • void ClrScr(void) {printf("\e[2J");}
  • void GotoXY(int y, int x) {printf("\e[%d;%dH", x, y);}
  • void Delay(int pause) {usleep(pause*1000);}
  • void Blink(int activer) {(activer)? printf("\e[5m") : printf("\e[0m");}
  • void Blod(int activer) {(activer)? printf("\e[1m") : printf("\e[0m");}
  • void Underline(int activer) {(activer)? printf("\e[4m") : printf("\e[0m");}
  • void TextColor(int fg)
  • {
  • int x=fg;
  • if((fg < 0) || (fg > 7)) x = 0;
  • printf("\e[3%dm", x);
  • }
  • void TextBackground(int bg)
  • {
  • int x=bg;
  • if((bg < 0) || (bg > 7)) x = 0;
  • printf("\e[4%dm", x);
  • }
  • char ReadKey(void)
  • {
  • char c;
  • mode_raw(1);
  • c = getchar();
  • mode_raw(0);
  • return c;
  • }
  • int KeyPressed(void)
  • {
  • struct timeval tv = { 0, 0 };
  • fd_set readfds;
  • FD_ZERO(&readfds);
  • FD_SET(STDIN_FILENO, &readfds);
  • return select(STDIN_FILENO + 1, &readfds, NULL, NULL, &tv) == 1;
  • }
  • void GetPass(char * prompt, char * pass)
  • {
  • int cpt=0;
  • printf("%s", prompt);
  • while((pass[cpt]=ReadKey())!=13 && cpt!=100)
  • {
  • putchar('*');
  • cpt++;
  • }
  • printf("\n");
  • pass[cpt]=0;
  • }
  • void line(int x, char c1, char c2)
  • {
  • int cpt;
  • putchar(c1);
  • for(cpt=1; cpt<=(x-2); cpt++) putchar(c2);
  • putchar(c1);
  • putchar('\n');
  • }
  • void box(int x, int y, char c1, char c2, char c3, char c4)
  • {
  • int cpt;
  • line(x, c1, c2);
  • for(cpt=1; cpt<=(y-2); cpt++) line(x, c3, c4);
  • line(x, c1, c2);
  • }
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>

typedef enum
{
  BLACK,
  RED,
  GREEN,
  YELLOW,
  BLUE,
  MAGENTA,
  CYAN,
  WHITE
} COLORS;

void mode_raw(int activer) {
  static struct termios cooked;
  static int raw_actif = 0;
  if (raw_actif == activer) {return;}
  if (activer) {
    struct termios raw;
    tcgetattr(STDIN_FILENO, &cooked);
    raw = cooked;
    cfmakeraw(&raw);
    tcsetattr(STDIN_FILENO, TCSANOW, &raw);
  }
  else {tcsetattr(STDIN_FILENO, TCSANOW, &cooked);}
  raw_actif = activer;
}

void ClrScr(void) {printf("\e[2J");}

void GotoXY(int y, int x) {printf("\e[%d;%dH", x, y);}

void Delay(int pause) {usleep(pause*1000);}

void Blink(int activer) {(activer)? printf("\e[5m") : printf("\e[0m");}

void Blod(int activer) {(activer)? printf("\e[1m") : printf("\e[0m");}

void Underline(int activer) {(activer)? printf("\e[4m") : printf("\e[0m");}

void TextColor(int fg)
{
  int x=fg;
  if((fg < 0) || (fg > 7)) x = 0;
  printf("\e[3%dm", x);
}

void TextBackground(int bg)
{
  int x=bg;
  if((bg < 0) || (bg > 7)) x = 0;
  printf("\e[4%dm", x);
}

char ReadKey(void)
{
  char c;
  mode_raw(1);
  c = getchar();
  mode_raw(0);
  return c;
}

int KeyPressed(void)
{
  struct timeval tv = { 0, 0 };
  fd_set readfds;
  
  FD_ZERO(&readfds);
  FD_SET(STDIN_FILENO, &readfds);
  
  return select(STDIN_FILENO + 1, &readfds, NULL, NULL, &tv) == 1;
}

void GetPass(char * prompt, char * pass)
{
  int cpt=0;
  printf("%s", prompt);
  while((pass[cpt]=ReadKey())!=13 && cpt!=100) 
    {
      putchar('*'); 
      cpt++; 
    }
  printf("\n");
  pass[cpt]=0;
}

void line(int x, char c1, char c2)
{
  int cpt;
  putchar(c1);
  for(cpt=1; cpt<=(x-2); cpt++) putchar(c2);
  putchar(c1);
  putchar('\n');
}

void box(int x, int y, char c1, char c2, char c3, char c4)
{
  int cpt;
  line(x, c1, c2);
  for(cpt=1; cpt<=(y-2); cpt++) line(x, c3, c4);
  line(x, c1, c2);
}

Conclusion

c = readkey(); /*pas attente de retour chariot*/

KeyPressed(); /*verifie la présence d'une touche pressée dans le buffer*/

TextColor (0..7) ou TextColor(Blue....

idem TextBackground

Clrscr(); /*efface l'écran*/

delay <=> pause
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

08 octobre 2006 18:04:43 :
ajout de la fonction "KeyPressed" équivalente a kbhit();
18 octobre 2006 23:07:28 :
ajout des fonctions usuelles >> Box, Line +++ évolution des connaissances >> typedef, enum +++ sécurité >> Getpass
  • signaler à un administrateur
    Commentaire de blackdead08 le 11/09/2006 00:11:00

    D'accord ce n'est pas ncurses ni gtk.....
    C'est quand même plus facile
    ;-)

    supprimez si cela n'intéresse personne  

  • signaler à un administrateur
    Commentaire de Funto66 le 03/08/2008 02:44:29

    Ah non, moi ça m'intéresse, je suis en train d'écrire un système de log pour mon moteur 3D, et pouvoir rajouter de la couleur, ça va bien être utile, merci :)

    Vais essayer de trouver de la doc sur les codes d'échappement des terminaux vt100 moi...A tout hasard, tu saurais pas comment faire pour récupérer la couleur actuelle du terminal ?

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS