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 kernel_start(void){ /* Initialisation de l'écran et du curseur */ efface_ecran(); place_curseur(0,0); /* Initialisation des interruptions */ masque_IRQ(0, false); init_traitant_IT(32, traitant_IT_32); /* Initialisation de l'horloge */ set_clock(); /* Initialisation des processus */ cree_processus("idle", NULL, ELU); cree_processus("proc_proc1", proc1, ACTIVABLE); cree_processus("proc_proc2", proc2, ACTIVABLE); cree_processus("proc_proc3", proc3, ACTIVABLE); processus_elu = tab_processus[0]; /* Démarrage du processus par defaut */ idle(); while(1) { hlt(); } }
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; }