h52100
s 00015/00017/00027
d D 1.7 89/08/21 15:12:27 opcode 7 6
c linted
e
s 00003/00002/00041
d D 1.6 89/08/07 18:21:04 chrisb 6 5
c comments
e
s 00008/00007/00035
d D 1.5 89/08/02 14:00:52 chrisb 5 4
c fixed lseek blocking problem
e
s 00010/00004/00032
d D 1.4 89/03/13 11:41:56 chrisb 4 3
c chkpt from chrisb
e
s 00006/00004/00030
d D 1.3 89/01/26 14:53:01 chrisb 3 2
c added -i and brought up to 1.1 version
e
s 00004/00000/00030
d D 1.2 88/12/21 11:51:54 chrisb 2 1
c added sccs keyword ids
e
s 00030/00000/00000
d D 1.1 88/12/21 11:28:19 chrisb 1 0
c date and time created 88/12/21 11:28:19 by chrisb
e
u
U
f e 0
t
T
I 2
#ifndef	lint
D 7
static char sccsid[] = "@(#)helper_idle.c 1.7 88/12/21";
E 7
I 7
static char sccsid[] = "%Z% %M% %I% %E%";
E 7
#endif

E 2
I 1
#include "cbratp.h"
#include <sys/time.h>

I 5
extern fd_set	lseek_fds;
E 5
I 4
extern fd_set	stopped_fds;
I 6
extern int	rs232_fd;
E 6

E 4
static fd_set	outfds;
D 3
static int	lastfd = 7;
E 3
I 3
static int	lastfd;
D 7
static int	count;
E 7
E 3

idle_writer()
{
D 7
    char	buf[QBUFSIZE];
    int		fd;
    int 	i;
E 7
I 7
    u_char buf[QBUFSIZE];
    register int fd;
    register int i;
E 7

I 4
    if (rs232ready() > 0)
D 5
    {
	should_sync = 1;
	return;
    }
E 5
I 5
	return 0;
I 7

E 7
E 5
E 4
    outfds = read_fds;
D 6
    FD_SET(rs232.fd, &outfds);
E 6
I 6
    FD_SET(rs232_fd, &outfds);
E 6
D 7
    if (maximum_fd && select(maximum_fd, &outfds, NULL, NULL, NULL) > 0)
    {
	for (fd = lastfd; fd < maximum_fd; fd++)
	{
D 3
	    if (FD_ISSET(fd, &outfds))
E 3
I 3
D 4
	    if (FD_ISSET(fd, &outfds) && fd != rs232.fd)
E 4
I 4
D 5
	    if (FD_ISSET(fd, &outfds) && !FD_ISSET(fd, &stopped_fds) && fd != rs232.fd)
E 5
I 5
	    if (FD_ISSET(fd, &outfds) 
		&& !FD_ISSET(fd, &lseek_fds) 
		&& !FD_ISSET(fd, &stopped_fds) 
D 6
		&& fd != rs232.fd)
E 6
I 6
		&& fd != rs232_fd)
E 6
E 5
E 4
E 3
	    {
		if ((i = read(fd, buf, QBUFSIZE)) < 0)
E 7
I 7

    if (maximum_fd && select(maximum_fd, &outfds, (fd_set *)NULL,
				(fd_set *)NULL, (struct timeval *)NULL) > 0) {
	for (fd = lastfd; fd < maximum_fd; fd++) {
	    if (FD_ISSET(fd, &outfds) && !FD_ISSET(fd, &lseek_fds) &&
		    !FD_ISSET(fd, &stopped_fds) && fd != rs232_fd) {
		if ((i = read(fd, (char *) buf, QBUFSIZE)) < 0)
E 7
		    i = 0;
D 7
		send(rd_chan[fd], buf, i);
E 7
I 7
		enqueue(rd_chan[fd], buf, i);
E 7
D 4
		break;
E 4
I 4
D 5
		if (out_queue.size == MAXQSIZE)
		    break;
E 5
I 5
		break;
E 5
E 4
	    }
	}
D 3
	lastfd = fd < maximum_fd ? fd + 1: 7;
E 3
I 3
	lastfd = fd < maximum_fd ? fd + 1: 0;
E 3
    }
I 5
D 7
    return out_queue.size > 0;
E 7
I 7

    return(out_queue.size > 0);
E 7
E 5
D 3
    should_sync = 1;
E 3
I 3
D 4
    if (count++%100 == 0)
	should_sync = 1;
E 4
E 3
}
E 1
