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 }