/* skoro to vypada, ze je to komplet =) */ /*===========================================================================* * Terminal Task * *===========================================================================* * Written by : Vit Condak =P * * Last update: 27-05-1997 * *===========================================================================*/ /*===========================================================================* * do_write * *===========================================================================*/ /* A process wants to write on a terminal. */ /* funkce do_write() slouzi ke spusteni vypisu na obrazovku zachyti a zpracuje doslou zpravu (nastavi promenne terminalu), a pak zavola funkci tty_devstart() (u nas to je pointer na console()), ktera by se mela postarat o provedeni vypisu */ PRIVATE void do_write(struct tty_struct *tp, message *m_ptr) { char khar; //pracovni promenna pro kopirovani z pameti do bufferu /*Poznamenej parametry ze zpravy do tty_struct[]*/ /*nastav tty_waiting=WAITING; (proces ceka na odpoved), tty_cum=0*/ tp->tty_waiting = TRUE; tp->tty_outcum = 0; /* Vypocti fyzickou adresu, kde jsou data pro vypis v uzivatelskem prostoru, predej je tty_struct[].tty_devstart() VC: takze ze zpravy bych mel asi pochopit (a nastavit) kdo ji poslal tty_outcaller kdo chce zapisovat tty_outproc ??? he? co to jako je? kde jsou data tty_outphys kolik toho bude tty_outleft */ tp->tty_outcaller = m_ptr->m_source; tp->tty_outproc = m_ptr->m_proc_nr; tp->tty_outleft = m_ptr->m_count; tp->tty_out_vir = m_ptr->m_address; // prekopirovano z console.inc // Dokud tty_outleft>0 and tty_inhibited=RUNNING while (tp->tty_outleft>0 && tp->tty_inhibited==FALSE) { // vezmi bajt z adresy tty_struct[].tty_outphys (tty_outphys++) //do_copy!!! neco jako: khar=*(tp->tty_out_vir); sys_copy(tp->tty_outproc, D, tp->tty_out_vir, TTY, D, (vir_bytes) &khar, 1); tp->tty_out_vir++; // posle to dal do vystupni fronty out_char(tp,khar); tp->tty_outleft--; tp->tty_outcum++; }; //protoze se tty_dev prubezne vola, nemelo by se pri zakazu vypisu // uz nic dalsiho delat (proste to odtud vypadne ven) if (tp->tty_inhibited) return; // tom // tp->tty_devstart(tp); }