|
|
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.