void affiche_haut_gauche(char * s) { uint32_t len = strlen(s); for(uint32_t i = 0; i < len; i++) { ecrit_car(0, i, s[i]); } }
void traite_car(char c) { if(c < 32) { switch(c) { case 8: if(cursor_col!=0){ place_curseur(cursor_lig, cursor_col-1); } break; case 9: place_curseur(cursor_lig, (cursor_col!=NB_COL-1)?((cursor_col/8)*8+8):NB_COL-1 ); break; case 10: if(cursor_lig+1==NB_LINE){ defilement(); place_curseur(NB_LINE-1, 0); } else place_curseur(cursor_lig+1, 0); break; case 12: efface_ecran(); break; case 13: place_curseur(cursor_lig, 0); break; default: break; } } else { ecrit_car(cursor_lig, cursor_col, c); step_cursor(); } }
void efface_ecran() { for(uint8_t i = 0; i < NB_LINE; i++) { for(uint8_t j = 0; j < NB_COL; j++) { ecrit_car(i, j, ' '); } } place_curseur(0,0); }
// effacer l'ecran void efface_ecran(void) { //écrit ' ' dans toutes les coordonnées possibles uint8_t i, j; for(i = 0; i < 25; i++) { for(j = 0; j < 80; j++) { ecrit_car(i, j, ' ', VERT); } } return; }
// remonter d'une ligne l'affichage à l'écran (il pourra être judicieux d'utiliser memmove définie dans string.h pour cela) void defilement(void) { uint8_t i; uint8_t j; // defilement: chaque ligne monte par 1 for(i = 0; i < 24; i++) { memmove(ptr_mem(i, 0), ptr_mem(i + 1, 0), 160); } // nouvelle ligne vide en bas for(j = 0; j < 80; j++) { ecrit_car(24, j, ' ', VERT); } }
void afficher_heure(char *chaine) { int length = strlen(chaine); int ancre = LARGEUR_ECRAN - length - 1 ; for(int i = 0; i < length; i++) { ecrit_car(HAUTEUR_ECRAN-1, ancre + i, chaine[i], ROUGE, NOIR, 0); } }
void efface_ligne(uint32_t lig) { for(uint8_t j = 0; j < NB_COL; j++) { ecrit_car(lig, j, ' '); } }
void traite_car(char c) { if((int)c < 127) { int tab_suivante; switch((int)c) { case 8 : if( col_ != 0) { col_ = col_ - 1 ; place_curseur(lig_, col_); } break ; case 9 : tab_suivante = (int) (col_ / LARGEUR_TAB) + 1 ; col_=tab_suivante*LARGEUR_TAB; if (col_ >= 80){ col_=0; lig_++; if (lig_>=HAUTEUR_ECRAN-1){ lig_--; defilement(); } } place_curseur(lig_, col_); break ; case 10 : col_ = 0 ; lig_ = lig_ + 1 ; if(lig_ >= HAUTEUR_ECRAN-1) { lig_--; defilement(); } place_curseur(lig_, col_); break ; case 12 : efface_ecran(); place_curseur(lig_, col_); break ; case 13 : col_ = 0 ; place_curseur(lig_, col_); break ; default : ecrit_car(lig_, col_, c, _color, NOIR, 0); col_ ++; if(col_ >= 80) { col_ = 0; lig_ ++; if(lig_ >= HAUTEUR_ECRAN - 1) { lig_ -- ; defilement(); } } place_curseur(lig_, col_); } } }
// traiter un caractère donné (c'est à dire qui l'affiche si c'est un caractère normal ou qui implante l'effet voulu si c'est un caractère de contrôle) void traite_car(char c) { // c doit être positif; on ignore tous les caractères >127; on ignore le caractère 127 c = (int)c; if(c < 0 || c > 126) { return; } // get les coordonnées (ligne -> ligne, colonne -> colonne) // selon les commandes on change la position du curseur if(c < 32) { switch(c) { case 8: // '\b' if(colonne) { place_curseur(ligne, --colonne); } break; case 9: // '\t' if(colonne < 72) { //avance à la prochaine valeur de la chaine 8 colonne = colonne + (8 - (colonne % 8)); } else { colonne = 79; } place_curseur(ligne, colonne); break; case 10: // '\n' colonne = 0; if(ligne + 1 < 25) { place_curseur(++ligne, colonne); } else { defilement(); place_curseur(ligne, colonne); } break; case 12: // '\f' efface_ecran(); ligne = 0; colonne = 0; place_curseur(ligne, colonne); break; case 13: // '\r' colonne = 0; place_curseur(ligne, colonne); break; default: // ignore tous les autres caractères break; } } else { // cas standard: ecrit normal d'un caractere (en faisant attention aux contraintes) ecrit_car(ligne, colonne, c, VERT); if(colonne + 1 < 80) { place_curseur(ligne, ++colonne); } else { colonne = 0; if(ligne + 1 < 25) { place_curseur(++ligne, colonne); } else { defilement(); place_curseur(ligne, colonne); } } } return; }