void ttyd(void) { Message m; int i; lock(); for (i = 0; i < NR_TTY; i ++) { hal_register(ttynames[i], TTY, i); } unlock(); while (1) { receive(ANY, &m); if (m.src == MSG_HWINTR) { switch (m.type) { case MSG_TTY_GETKEY: readkey(); break; case MSG_TTY_UPDATE: update_banner(); break; } } else { DevMessage *msg; switch(m.type) { case MSG_DEVRD: read_request((DevMessage*)&m); break; case MSG_DEVWR: msg = (DevMessage*)&m; if (msg->dev_id >= 0 && msg->dev_id < NR_TTY) { int i; for (i = 0; i < msg->count; i ++) { consl_writec(&ttys[msg->dev_id], ((char*)msg->buf)[i]); } consl_sync(&ttys[msg->dev_id]); } m.type = msg->count; send(m.src, &m); break; } } } }
void update_banner(void) { banner[1] = ani[tsc]; tsc = (tsc + 1) % (sizeof(ani) - 1); char *p = banner + SCR_W - 20; Time tm; get_time(&tm); *p ++ = '2'; *p ++ = '0'; draw2(&p, tm.year % 100); *p ++ = '/'; draw2(&p, tm.month); *p ++ = '/'; draw2(&p, tm.day); *p ++ = ' '; draw2(&p, tm.hour); *p ++ = ':'; draw2(&p, tm.minute); *p ++ = ':'; draw2(&p, tm.second); banner[3] = 't'; banner[4] = 't'; banner[5] = 'y'; banner[6] = '1' + current_consl - ttys; consl_sync(current_consl); }