Example #1
0
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;
			}
		}
	}
}
Example #2
0
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);
}