Minix1.1/usr/src/commands/shar.c

Compare this file to the similar file:
Show the results in this format:

/* shar - make a shell archive		Author: Michiel Husijes */


#include "blocksize.h"

#define IO_SIZE		(10 * BLOCK_SIZE)

char input[IO_SIZE];
char output[IO_SIZE];
int index = 0;

main(argc, argv)
int argc;
register char *argv[];
{
  register int i;
  int fd;

  for (i = 1; i < argc; i++) {
  	if ((fd = open(argv[i], 0)) < 0) {
  		write(2, "Cannot open ", 12);
  		write(2, argv[i], strlen(argv[i]));
  		write(2, ".\n", 2);
  	}
  	else {
  		print("echo x - ");
  		print(argv[i]);
  		print("\ngres '^X' '' > ");
  		print(argv[i]);
  		print(" << '/'\n");
  		cat(fd);
  	}
  }
  if (index) write(1, output, index);
  exit(0);
}

cat(fd)
int fd;
{
  static char *current, *last;
  register int r = 0;
  register char *cur_pos = current;

  putchar('X');
  for (; ;) {
  	if (cur_pos == last) {
  		if ((r = read(fd, input, IO_SIZE)) <= 0)
  			break;
  		last = &input[r];
  		cur_pos = input;
  	}
  	putchar(*cur_pos);
  	if (*cur_pos++ == '\n' && cur_pos != last)
  		putchar('X');
  }
  print("/\n");
  (void) close(fd);
  current = cur_pos;
}

print(str)
register char *str;
{
  while (*str)
  	putchar(*str++);
}

putchar(c)
register char c;
{
  output[index++] = c;
  if (index == IO_SIZE) {
  	write(1, output, index);
  	index = 0;
  }
}