Beispiel #1
0
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();
    }
}
Beispiel #2
0
/**
 * 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;
	}
}
Beispiel #3
0
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);
}
Beispiel #4
0
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);
}
Beispiel #5
0
// 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);
}
Beispiel #6
0
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);
}
Beispiel #7
0
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;
}