Back to index

courier  0.68.2
Functions
addcr.c File Reference
#include <sys/types.h>
#include <sys/time.h>
#include <errno.h>
#include <stdio.h>

Go to the source code of this file.

Functions

int main ()

Function Documentation

int main ( )

Definition at line 17 of file addcr.c.

{
char   inbuf[BUFSIZ], outbuf[BUFSIZ*2];
int    i,j,k;
int    skip=0;
 fd_set fds;

       for (;;)
       {
              FD_ZERO(&fds);
              FD_SET(0, &fds);

              if (select(1, &fds, NULL, NULL, NULL) < 0)
              {
                     if (errno == EINTR)
                            continue;
                     perror("select");
                     break;
              }

              if (!FD_ISSET(0, &fds))
                     continue;

              if ((i=read(0, inbuf, sizeof(inbuf))) <= 0)
                     break;

              for (j=k=0; j<i; j++)
              {
                     if (inbuf[j] == '\n' && !skip)
                            outbuf[k++]='\r';
                     skip=(outbuf[k++]=inbuf[j]) == '\r';
              }
              for (i=0; i<k; )
              {
                     FD_ZERO(&fds);
                     FD_SET(1, &fds);

                     if (select(2, NULL, &fds, NULL, NULL) < 0)
                     {
                            if (errno == EINTR)
                                   continue;
                            perror("select");
                            break;
                     }
                     
                     if (!FD_ISSET(1, &fds))
                            continue;

                     j=write(1, outbuf+i, k-i);
                     if (j <= 0)
                            return (-1);
                     i += j;
              }
       }
       return (0);
}