first try at POSIX tty
[unix-history] / usr / src / usr.bin / window / wwrint.c
CommitLineData
60de5df9 1/*
46e9ea25
KB
2 * Copyright (c) 1983 Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
5e8b0e60
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
60de5df9
EW
16 */
17
46e9ea25 18#ifndef lint
f8bd9384 19static char sccsid[] = "@(#)wwrint.c 3.8 (Berkeley) %G%";
46e9ea25
KB
20#endif /* not lint */
21
78b88f48
EW
22#include "ww.h"
23#include <fcntl.h>
78b88f48
EW
24
25/*
26 * Tty input interrupt handler.
27 * (1) Read input into buffer (wwib*).
16078900 28 * (2) Set the interrupt flag if anything is read.
78b88f48
EW
29 * Currently, the last is used to get out of the blocking
30 * select() in wwiomux().
31 * To avoid race conditions, we only modify wwibq in here, except
32 * when the buffer is empty; and everywhere else, we only change wwibp.
33 * It should be completely safe.
34 */
35wwrint()
36{
37 register n;
38
39 if (wwibp == wwibq)
40 wwibp = wwibq = wwib;
41 wwnread++;
42 (void) fcntl(0, F_SETFL, FNDELAY|wwnewtty.ww_fflags);
43 n = read(0, wwibq, wwibe - wwibq);
44 (void) fcntl(0, F_SETFL, wwnewtty.ww_fflags);
45 if (n > 0) {
46 wwibq += n;
47 wwnreadc += n;
16078900 48 wwsetintr();
78b88f48
EW
49 } else if (n == 0)
50 wwnreadz++;
51 else
52 wwnreade++;
78b88f48 53}