void tty_init_nhwindows() { int wid, hgt; /* * Remember tty modes, to be restored on exit. * * gettty() must be called before tty_startup() * due to ordering of LI/CO settings * tty_startup() must be called before initoptions() * due to ordering of graphics settings */ #if defined(UNIX) || defined(VMS) setbuf(stdout,obuf); #endif gettty(); /* to port dependant tty setup */ tty_startup(&wid, &hgt); setftty(); /* calls start_screen */ /* set up tty descriptor */ ttyDisplay = (struct DisplayDesc*) alloc(sizeof(struct DisplayDesc)); ttyDisplay->toplin = 0; ttyDisplay->rows = hgt; ttyDisplay->cols = wid; ttyDisplay->curx = ttyDisplay->cury = 0; ttyDisplay->inmore = ttyDisplay->inread = ttyDisplay->intr = 0; #ifdef TEXTCOLOR ttyDisplay->color = NO_COLOR; #endif ttyDisplay->attrs = 0; /* set up the default windows */ BASE_WINDOW = tty_create_nhwindow(NHW_BASE); wins[BASE_WINDOW]->active = 1; ttyDisplay->lastwin = WIN_ERR; #if defined(SIGWINCH) && defined(CLIPPING) (void) signal(SIGWINCH, winch); #endif tty_clear_nhwindow(BASE_WINDOW); tty_putstr(BASE_WINDOW, 0, ""); tty_putstr(BASE_WINDOW, 0, "NetHack, Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993"); tty_putstr(BASE_WINDOW, 0, " By Stichting Mathematisch Centrum and M. Stephenson."); tty_putstr(BASE_WINDOW, 0, " See license for details."); tty_putstr(BASE_WINDOW, 0, ""); tty_display_nhwindow(BASE_WINDOW, FALSE); }
/*===========================================================================* * tty_task * *===========================================================================*/ int main(int argc, char **argv) { /* Main routine of the terminal task. */ message tty_mess; /* buffer for all incoming messages */ int ipc_status; int line; int r; register tty_t *tp; env_setargs(argc, argv); tty_startup(); while (TRUE) { /* Check for and handle any events on any of the ttys. */ for (tp = FIRST_TTY; tp < END_TTY; tp++) { if (tp->tty_events) handle_events(tp); } /* Get a request message. */ r= driver_receive(ANY, &tty_mess, &ipc_status); if (r != 0) panic("driver_receive failed with: %d", r); if (is_ipc_notify(ipc_status)) { switch (_ENDPOINT_P(tty_mess.m_source)) { case CLOCK: /* run watchdogs of expired timers */ expire_timers(tty_mess.m_notify.timestamp); break; default: /* do nothing */ break; } /* done, get new message */ continue; } if (!IS_CDEV_RQ(tty_mess.m_type)) { chardriver_process(&tty_tab, &tty_mess, ipc_status); continue; } /* Only device requests should get to this point. * All requests have a minor device number. */ if (OK != chardriver_get_minor(&tty_mess, &line)) continue; if (is_pty(line)) { /* Terminals and pseudo terminals belong together. We can only * make a distinction between the two based on minor number and * not on position in the tty_table. Hence this special case. */ do_pty(&tty_mess, ipc_status); continue; } /* Execute the requested device driver function. */ chardriver_process(&tty_tab, &tty_mess, ipc_status); } return 0; }