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(); } }
/** * affiche correctement le caractère selon son type * @param c le caractère à traiter */ void traite_char(char c) { switch(c) { case 8: // \b if (pos_curseur % COL != 0) pos_curseur--; put_cursor(pos_curseur/COL,pos_curseur%COL); break; case 9: // \t pos_curseur += 8-pos_curseur%8; put_cursor(pos_curseur/COL,pos_curseur%COL); break; case 10: // \n if (pos_curseur/COL == LIN-1) { defilement(); pos_curseur -= pos_curseur%COL; } else { pos_curseur += COL - pos_curseur%COL; } put_cursor(pos_curseur/COL, pos_curseur%COL); break; case 12: // \f clear_screen(); pos_curseur = 0; put_cursor(pos_curseur/COL, pos_curseur%COL); break; case 13: // \r pos_curseur -= pos_curseur%COL; put_cursor(pos_curseur/COL, pos_curseur%COL); break; default: putc_at(pos_curseur/COL, pos_curseur%COL, c, ct, cf); pos_curseur++; if (pos_curseur >= COL*LIN) { defilement(); pos_curseur = COL*(LIN-1); } put_cursor(pos_curseur/COL,pos_curseur%COL); break; } }
void step_cursor() { cursor_col ++; if(cursor_col == 80) { cursor_col = 0; cursor_lig ++; if (cursor_lig == 25) { defilement(); cursor_lig = 24; } } place_curseur(cursor_lig, cursor_col); }
void EcranV::sautDeLigne(){ int c = getColonne(); int l = getLigne(); c=0; l=l+1; if(l>=LIGNES){//hors de l'écran, trop bas defilement(1); l--; } setColonne(c); setLigne(l); }
// Recule la position courante void EcranV::reculerPositionCourante() { int c = getColonne(); int l = getLigne(); c=c-1; if(c < 0){//hors de l'écran, trop à gauche c = COLONNES-1; l--; if(l<0){//hors de l'écran, trop haut defilement(-1); l++; } } setColonne(c); setLigne(l); }
void EcranV::avancerPositionCourrante(){ int c = getColonne(); int l = getLigne(); c=c+1; if(c >=COLONNES){//hors de l'écran, trop à droite c = 0; l++; if(l>=LIGNES){//hors de l'écran, trop bas defilement(1); l--; } } setColonne(c); setLigne(l); }
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; }