remove gcc34
[dragonfly.git] / crypto / heimdal-0.6.3 / appl / telnet / telnetd / termstat.c
1 /*
2  * Copyright (c) 1989, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by the University of
16  *      California, Berkeley and its contributors.
17  * 4. Neither the name of the University nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  */
33
34 #include "telnetd.h"
35
36 RCSID("$Id: termstat.c,v 1.12 2001/08/29 00:45:23 assar Exp $");
37
38 /*
39  * local variables
40  */
41 int def_tspeed = -1, def_rspeed = -1;
42 #ifdef  TIOCSWINSZ
43 int def_row = 0, def_col = 0;
44 #endif
45
46 /*
47  * flowstat
48  *
49  * Check for changes to flow control
50  */
51 void
52 flowstat(void)
53 {
54     if (his_state_is_will(TELOPT_LFLOW)) {
55         if (tty_flowmode() != flowmode) {
56             flowmode = tty_flowmode();
57             output_data("%c%c%c%c%c%c",
58                         IAC, SB, TELOPT_LFLOW,
59                         flowmode ? LFLOW_ON : LFLOW_OFF,
60                         IAC, SE);
61         }
62         if (tty_restartany() != restartany) {
63             restartany = tty_restartany();
64             output_data("%c%c%c%c%c%c",
65                         IAC, SB, TELOPT_LFLOW,
66                         restartany ? LFLOW_RESTART_ANY
67                         : LFLOW_RESTART_XON,
68                         IAC, SE);
69         }
70     }
71 }
72
73 /*
74  * clientstat
75  *
76  * Process linemode related requests from the client.
77  * Client can request a change to only one of linemode, editmode or slc's
78  * at a time, and if using kludge linemode, then only linemode may be
79  * affected.
80  */
81 void
82 clientstat(int code, int parm1, int parm2)
83 {
84     /*
85      * Get a copy of terminal characteristics.
86      */
87     init_termbuf();
88
89     /*
90      * Process request from client. code tells what it is.
91      */
92     switch (code) {
93     case TELOPT_NAWS:
94 #ifdef  TIOCSWINSZ
95         {
96             struct winsize ws;
97
98             def_col = parm1;
99             def_row = parm2;
100
101             /*
102              * Change window size as requested by client.
103              */
104
105             ws.ws_col = parm1;
106             ws.ws_row = parm2;
107             ioctl(ourpty, TIOCSWINSZ, (char *)&ws);
108         }
109 #endif  /* TIOCSWINSZ */
110
111     break;
112
113     case TELOPT_TSPEED:
114         {
115             def_tspeed = parm1;
116             def_rspeed = parm2;
117             /*
118              * Change terminal speed as requested by client.
119              * We set the receive speed first, so that if we can't
120              * store seperate receive and transmit speeds, the transmit
121              * speed will take precedence.
122              */
123             tty_rspeed(parm2);
124             tty_tspeed(parm1);
125             set_termbuf();
126
127             break;
128
129         }  /* end of case TELOPT_TSPEED */
130
131     default:
132         /* What? */
133         break;
134     }  /* end of switch */
135
136     netflush();
137
138 }