|
|
1.1 ! root 1: /* $Header: init_disp.c 1.2 83/06/23 02:01:11 moore Exp $ */ ! 2: ! 3: /* ! 4: * init_disp contains the initialization code for the display package, ! 5: * as well as the signal handling routines ! 6: */ ! 7: ! 8: #include "talk.h" ! 9: #include <signal.h> ! 10: ! 11: /* ! 12: * set up curses, catch the appropriate signals, and build the ! 13: * various windows ! 14: */ ! 15: ! 16: init_display() ! 17: { ! 18: void sig_sent(); ! 19: ! 20: initscr(); ! 21: curses_initialized = 1; ! 22: ! 23: clear(); ! 24: refresh(); ! 25: ! 26: noecho(); ! 27: crmode(); ! 28: ! 29: signal(SIGINT, sig_sent); ! 30: signal(SIGPIPE, sig_sent); ! 31: ! 32: /* curses takes care of ^Z */ ! 33: ! 34: my_win.x_nlines = LINES / 2; ! 35: my_win.x_ncols = COLS; ! 36: my_win.x_win = newwin(my_win.x_nlines, my_win.x_ncols, 0, 0); ! 37: scrollok(my_win.x_win, FALSE); ! 38: wclear(my_win.x_win); ! 39: ! 40: his_win.x_nlines = LINES / 2 - 1; ! 41: his_win.x_ncols = COLS; ! 42: his_win.x_win = newwin(his_win.x_nlines, his_win.x_ncols, ! 43: my_win.x_nlines+1, 0); ! 44: scrollok(his_win.x_win, FALSE); ! 45: wclear(his_win.x_win); ! 46: ! 47: line_win = newwin(1, COLS, my_win.x_nlines, 0); ! 48: box(line_win, '-', '-'); ! 49: wrefresh(line_win); ! 50: ! 51: /* let them know we are working on it */ ! 52: ! 53: current_state = "No connection yet"; ! 54: } ! 55: ! 56: /* trade edit characters with the other talk. By agreement ! 57: * the first three characters each talk transmits after ! 58: * connection are the three edit characters ! 59: */ ! 60: ! 61: set_edit_chars() ! 62: { ! 63: char buf[3]; ! 64: int cc; ! 65: struct sgttyb tty; ! 66: struct ltchars ltc; ! 67: ! 68: gtty(0, &tty); ! 69: ! 70: ioctl(0, TIOCGLTC, (struct sgttyb *) <c); ! 71: ! 72: my_win.cerase = tty.sg_erase; ! 73: my_win.kill = tty.sg_kill; ! 74: ! 75: if (ltc.t_werasc == (char) -1) { ! 76: my_win.werase = '\027'; /* control W */ ! 77: } else { ! 78: my_win.werase = ltc.t_werasc; ! 79: } ! 80: ! 81: buf[0] = my_win.cerase; ! 82: buf[1] = my_win.kill; ! 83: buf[2] = my_win.werase; ! 84: ! 85: cc = write(sockt, buf, sizeof(buf)); ! 86: ! 87: if (cc != sizeof(buf) ) { ! 88: p_error("Lost the connection"); ! 89: } ! 90: ! 91: cc = read(sockt, buf, sizeof(buf)); ! 92: ! 93: if (cc != sizeof(buf) ) { ! 94: p_error("Lost the connection"); ! 95: } ! 96: ! 97: his_win.cerase = buf[0]; ! 98: his_win.kill = buf[1]; ! 99: his_win.werase = buf[2]; ! 100: } ! 101: ! 102: void sig_sent() ! 103: { ! 104: message("Connection closing. Exiting"); ! 105: quit(); ! 106: } ! 107: ! 108: /* ! 109: * All done talking...hang up the phone and reset terminal thingy's ! 110: */ ! 111: ! 112: quit() ! 113: { ! 114: if (curses_initialized) { ! 115: wmove(his_win.x_win, his_win.x_nlines-1, 0); ! 116: wclrtoeol(his_win.x_win); ! 117: wrefresh(his_win.x_win); ! 118: endwin(); ! 119: } ! 120: ! 121: if (invitation_waiting) { ! 122: send_delete(); ! 123: } ! 124: ! 125: exit(0); ! 126: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.