www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

console.c (5907B)


      1 #include <types.h>
      2 #include <module.h>
      3 #include <interfaceUtilisateur/console/console.h>
      4 
      5 MODULE(Console);
      6 
      7 /* Cette variable risque d'être utilisée avant l'apel de initConsole(),
      8  * donc on la déclare à l'extérieur de etatConsole, dont la valeur est
      9  * indéfinie tant que initConsole n'a pas été apellée. */
     10 static bool _consolePrete;
     11 
     12 
     13 Console* definirConsoleActive(Console* console) {
     14 	Console* ancienneConsole = etatConsole->consoleActive;
     15 	
     16 	ancienneConsole->x = etatConsole->x;
     17 	ancienneConsole->y = etatConsole->y;
     18 	
     19 	etatConsole->x = console->x;
     20 	etatConsole->y = console->y;
     21 	
     22 	etatConsole->consoleActive = console;
     23 		
     24 	_consolePrete = TRUE;
     25 	return ancienneConsole;
     26 }
     27 
     28 
     29 CouleurAvAr getConsoleCouleur() {
     30 	CouleurAvAr couleurs;
     31 	couleurs.av = etatConsole->couleurAv;
     32 	couleurs.ar = etatConsole->couleurAr;
     33 	return couleurs;	
     34 }
     35 
     36 CouleurAvAr consoleCouleur(Couleur couleurAv, Couleur couleurAr) {
     37 	CouleurAvAr couleurs = getConsoleCouleur();
     38 	
     39 	etatConsole->couleurAv = couleurAv;
     40 	etatConsole->couleurAr = couleurAr;
     41 	
     42 	return couleurs;
     43 }
     44 
     45 
     46 Position getConsolePosition() {
     47 	Position pos;
     48 	pos.x = etatConsole->x;
     49 	pos.y = etatConsole->y;
     50 	return pos;
     51 }
     52 
     53 Position consolePosition(uint32 x, uint32 y) {
     54 	Position pos = getConsolePosition();
     55 	
     56 	if (x >= etatConsole->consoleActive->largeur) {
     57 		x %= etatConsole->consoleActive->largeur;
     58 		y++;
     59 	}
     60 	
     61 	if (y >= etatConsole->consoleActive->hauteur) {
     62 		y %= etatConsole->consoleActive->hauteur;
     63 	}
     64 	
     65 	etatConsole->x = x;
     66 	etatConsole->y = y;
     67 	
     68 	return pos;
     69 }
     70 
     71 void consolePositionAvancerX() {
     72 	consolePosition(etatConsole->x + 1, etatConsole->y);
     73 }
     74 
     75 void consolePositionAvancerY() {
     76 	consolePosition(etatConsole->x, etatConsole->y + 1);
     77 }
     78 
     79 
     80 void afficherCaractereCouleurPositionBrut(char caractere, uint32 couleurAv, uint32 couleurAr, uint32 x, uint32 y) {
     81 	etatConsole->consoleActive->fonctionAffichage(caractere, couleurAv, couleurAr, x, y);
     82 	
     83 	consolePositionAvancerX();
     84 	
     85 	consoleCouleur(couleurAv, couleurAr);
     86 }
     87 
     88 void afficherCaractereCouleurPosition(char caractere, uint32 couleurAv, uint32 couleurAr, uint32 x, uint32 y) {
     89 	if (caractere == '\n')
     90 		consolePosition(0, etatConsole->y + 1);
     91 	else
     92 		afficherCaractereCouleurPositionBrut(caractere, couleurAv, couleurAr, x, y);
     93 }
     94 
     95 
     96 void afficherCaractere(char caractere) {
     97 	afficherCaractereCouleurPosition(caractere, etatConsole->couleurAv, etatConsole->couleurAr, etatConsole->x, etatConsole->y);
     98 }
     99 
    100 void afficherCaractereBrut(char caractere) {
    101 	afficherCaractereCouleurPositionBrut(caractere, etatConsole->couleurAv, etatConsole->couleurAr, etatConsole->x, etatConsole->y);
    102 }
    103 
    104 
    105 void afficherCaractereCouleur(char caractere, uint32 couleurAv, uint32 couleurAr) {
    106 	afficherCaractereCouleurPosition(caractere, couleurAv, couleurAr, etatConsole->x, etatConsole->y);
    107 }
    108 
    109 void afficherCaractereCouleurBrut(char caractere, uint32 couleurAv, uint32 couleurAr) {
    110 	afficherCaractereCouleurPositionBrut(caractere, couleurAv, couleurAr, etatConsole->x, etatConsole->y);
    111 }
    112 
    113 
    114 void afficherCaracterePosition(char caractere, uint32 x, uint32 y) {
    115 	afficherCaractereCouleurPosition(caractere, etatConsole->couleurAv, etatConsole->couleurAr, x, y);
    116 }
    117 
    118 void afficherCaracterePositionBrut(char caractere, uint32 x, uint32 y) {
    119 	afficherCaractereCouleurPositionBrut(caractere, etatConsole->couleurAv, etatConsole->couleurAr, x, y);
    120 }
    121 
    122 
    123 void effacerConsole() {
    124 	uint32 x, y;
    125 	consoleCouleur(0xffffffff, 0);
    126 	for (x=0; x < etatConsole->consoleActive->largeur; x++)
    127 		for (y=0; y < etatConsole->consoleActive->hauteur; y++)
    128 			afficherCaracterePosition(' ', x, y);
    129 	consolePosition(0, 0);
    130 }
    131 
    132 void afficherChaineZ(char* chaine) {
    133 	while (*chaine)
    134 		afficherCaractere(*(chaine++));
    135 }
    136 
    137 void afficherChaine(char* chaine, int longueur) {
    138 	while (longueur-- > 0)
    139 		afficherCaractere(*(chaine++));
    140 }
    141 
    142 void afficherEntierVirguleEnDecimal(uint32 entier, int32 nbDecimales) {
    143 	int pos, nbChar = sizeof(int)*4 + 1;
    144 	char chiffres[nbChar];
    145 	
    146 	for (pos = 0; (pos < nbChar) && ((nbDecimales >= 0) || (entier != 0)); nbDecimales--, pos++) {
    147 		if (nbDecimales == 0)
    148 			chiffres[pos++]='.';
    149 		chiffres[pos] = 48 + (entier % 10);
    150 		entier /= 10;
    151 	}
    152 	
    153 	if (pos == 0)
    154 		afficherCaractere('0');
    155 	else
    156 		for (pos--; pos >= 0; pos--)
    157 			afficherCaractere(chiffres[pos]);
    158 }
    159 
    160 void afficherEntierEnDecimal(uint32 entier) {
    161 	int pos, nbChar = sizeof(int)*4;
    162 	char chiffres[nbChar];
    163 	
    164 	for (pos = 0; (pos < nbChar) && (entier != 0); pos++) {
    165 		chiffres[pos] = 48 + (entier % 10);
    166 		entier /= 10;
    167 	}
    168 	
    169 	if (pos == 0)
    170 		afficherCaractere('0');
    171 	else
    172 		for (pos--; pos >= 0; pos--)
    173 			afficherCaractere(chiffres[pos]);
    174 }
    175 
    176 void afficherEntierEnHexa(uint32 entier) {
    177 	afficherCaractere('0');
    178 	afficherCaractere('x');
    179 	
    180 	int pos, nbChar = sizeof(entier)*2;
    181 	char hexa[nbChar];
    182 	
    183 	for (pos = 0; pos < nbChar; pos++) {
    184 		if ((entier % 16) < 10)
    185 			hexa[pos] = 48 + (entier % 16);
    186 		else
    187 			hexa[pos] = 87 + (entier % 16);
    188 		entier /= 16;
    189 	}
    190 	
    191 	for (pos--; pos >= 0; pos--)
    192 		afficherCaractere(hexa[pos]);
    193 }
    194 
    195 void afficherEntierEnBinaire(uint32 entier) {
    196 	int pos = 0;
    197 	for (pos = 0; pos < 32; pos++) {
    198 		if (entier & 0x80000000)
    199 			afficherChaineZ("1");
    200 		else
    201 			afficherChaineZ("0");
    202 		entier = entier << 1;
    203 	}
    204 }
    205 
    206 
    207 void afficherTableCaracteres() {
    208 	int i;
    209 	for (i = 0; i < 256; i++)
    210 		afficherCaractereBrut(i);
    211 }
    212 
    213 
    214 void fonctionAffichageVide (char caractere, uint32 couleurAv, uint32 couleurAr, uint32 x, uint32 y) {
    215 	caractere = caractere;
    216 	couleurAv = couleurAv;
    217 	couleurAr = couleurAr;
    218 	x = x;
    219 	y = y;
    220 }
    221 
    222 Console consoleVide = {
    223 	.largeur = 80,
    224 	.hauteur = 25,
    225 	.fonctionAffichage = fonctionAffichageVide
    226 };
    227 
    228 bool consolePrete() {
    229 	return _consolePrete;
    230 }
    231 
    232 void initConsole(void** etat) {
    233 	*etat = etatConsole;
    234 	
    235 	etatConsole->x = 0;
    236 	etatConsole->y = 0;
    237 	etatConsole->couleurAv = 0xffffffff;
    238 	etatConsole->couleurAr = 0x00000000;
    239 	definirConsoleActive(&consoleVide);
    240 	_consolePrete = FALSE;
    241 }
    242 
    243 void deinitConsole(void** etat) {
    244 	*etat = NULL;
    245 }