This is iodev.c in view mode; [Download] [Up]
/*********************************************************************/
/* */
/* Programmer: */
/* Olaf Mueller <olaf@orest.escape.de> */
/* */
/* Purpose: */
/* Answering Machine */
/* some IO on a device */
/* */
/* History: */
/* 29-08-96 Initial Release Olaf Mueller */
/* */
/* Notes: */
/* */
/*********************************************************************/
#include <libc.h>
#include "timer.h"
#include "iodev.h"
long readUntil (int line,long msec,char *until)
{
int untillength = strlen (until) ;
char buffer [untillength] ;
int untilpos = 0 , buflen = 0 , ii ;
setTimer (ITIMER_REAL,msec) ;
while (untilpos < untillength)
{
if ((buflen = read(line,buffer,untillength-untilpos)) > 0)
{
for (ii = 0 ; ii < buflen ; ii++)
{
//printf ("readUntil: %c (%02x)\n",buffer[ii]<32?' ':buffer[ii],buffer[ii]) ;
if (*(until+untilpos) == buffer[ii])
untilpos++ ;
else if (*until == buffer[ii])
untilpos = 1 ;
else
untilpos = 0 ;
}
}
else
break ;
}
return (buflen > 0) ? msec - setTimer(ITIMER_REAL,0L) : -1L ;
}
long readAnswerUntil (int line,long msec,char *answer,int answerlength,char *until)
{
int untillength = strlen (until) ;
char buffer [untillength] ;
int answerpos = 0 , untilpos = 0 , buflen = 0 , ii ;
setTimer (ITIMER_REAL,msec) ;
while (untilpos < untillength)
{
if ((buflen = read(line,buffer,untillength-untilpos)) > 0)
{
for (ii = 0 ; ii < buflen ; ii++)
{
//printf ("readAnswerUntil: %c (%02x)\n",buffer[ii]<32?' ':buffer[ii],buffer[ii]) ;
if (answerpos < answerlength)
*(answer+answerpos++) = buffer[ii] ;
if (*(until+untilpos) == buffer[ii])
untilpos++ ;
else if (*until == buffer[ii])
untilpos = 1 ;
else
untilpos = 0 ;
}
}
else
break ;
}
if (buflen > 0)
{
*(answer+answerpos-untillength) = '\0' ;
return msec - setTimer(ITIMER_REAL,0L) ;
}
else
return -1L ;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.