[micro.unix] A slower and better download source

mbs@ecsvax.UUCP (03/05/84)

<>

For those of you who don't have protocol oriented file transder programs
and whose micro has trouble keeping up with a downloaded cat may want
to consider using the following program to download your sources. It
reads the file you wish to download 2 lines at a time, writes the 
output to STDOUT, and then sleeps for 1 second. For me, it has
prevented the loss of a lot of data, since my micro has difficulty
keeping up. For those on the ecsvax machine, a copy of the object
code is in the directory /ecs/pub/misc under the name "copy", and
the source file is in the same directory, but named "copy.c".

   --- Michael Smith
       {ittvax!ittral, akgua!mcnc, decvax!mcnc}!ecsvax!mbs

main(argc, argv)
int argc;
char **argv;
{
  char *p;
  short fin;
  extern char *get_line();

  if( argc != 2 )
    {
      printf("invalid number of arguments\n");
      exit(1);
    }
  if( (fin = open(argv[1], 0)) < 0 )
    {
      printf("cannot open: %s \n", argv[1]);
      exit(1);
    }
  while( 1 )
    {
      p = get_line(fin);
      write(1, p, strlen(p));
      p = get_line(fin);
      if( *p == '\0' )     
        {
           close(fin);   /* this condition signifies end-of-file */
           exit(0);
        }
      write(1, p, strlen(p));
      sleep(1);
    }
} 
char get_char(fyle)
short fyle;
{
   char c;

   if( read(fyle, &c, 1) != 1 ) return( -1 );
     else return( c );
}
char *get_line(fyle)
short fyle;
{
   char c;
   register char *pb;
   static char buf[512];

   pb = buf;
   while( (c = get_char(fyle)) > 0 )
     if( c == '\n' )
       {
          *pb++ = '\n';
          break;
       }
     else if ( c < 0 ) break;
          else *pb++ = c;
   *pb = '\0';
   if( c < 0 ) return( pb );
   else return( buf );
}