#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define UDP 0 #define TCP 6 #define RDFILE 1 #define WRFILE 2 #define READ_TIMEOUT 3 #define sendline(c) putchar(c) #define xsendline(c) putchar(c) int Verbose=0; int Lleft=0; /* number of characters in linbuf */ char linbuf[BUFSIZ]; int Readnum=BUFSIZ; int Baudrate = 0; flushmoc() { fflush(stdout); } flushmo() { fflush(stdout); } /* * This version of readline is reasoably well suited for * reading many characters. * * timeout is in tenths of seconds */ readline(timeout) int timeout; { register n; register char *p; static char *cdq; /* pointer for removing chars from linbuf */ int read_ret, sel_ret; fd_set rx_set; struct timeval tmout; if (--Lleft >= 0) { return (*cdq++ & 0377); } Lleft=0; cdq=linbuf; FD_ZERO(&rx_set); FD_SET(0, &rx_set); tmout.tv_sec = timeout/10; tmout.tv_usec = 0; do { sel_ret = select(0+1, &rx_set, NULL, NULL, &tmout); } while ( (sel_ret == -1) && (errno == EINTR) ); if(sel_ret == 0){ fprintf(stderr,"Socket read timeout \r\n"); return(TIMEOUT); } if(sel_ret < 0){ fprintf(stderr,"Socket read select error, error %d \r\n", sel_ret); return(ERROR); } if( (read_ret=read(0, linbuf, Readnum)) < 0) { fprintf(stderr,"Socket read error, errno %d, \r\n", errno); return(ERROR); } Lleft = read_ret; if (Verbose > 8) { for (p=cdq, n = Lleft; --n >= 0; ) { fprintf(stderr, "%02x ", *p++ &0377); } fprintf(stderr, "\n"); } --Lleft; return (*cdq++ & 0377); } /* * Purge the modem input queue of all characters */ purgeline() { Lleft = 0; } /* * Send a string to the modem */ zmputs2(s) char *s; { while (*s) sendline(*s++); flushmo(); } /* VARARGS */ vfile(f, a, b, c, d) /* VARARGS */ char *f; long a, b, c, d; { if (Verbose > 2) { fprintf(stderr, f, a, b, c, d); fprintf(stderr, "\n"); } } /* End of qrbsb.c */