#include <sys/param.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <stdio.h>
#include <strings.h>

main(argc, argv)
	char **argv;
{
	FILE *in;
	struct stat st;
	char cmd[80], *cp;
	u_char chksum, byte;
	int chin;

	if (argc != 3) {
		fprintf(stderr, "usage: %s file start\n", argv[0]);
		exit(1);
	}
	in = fopen(argv[1], "r");
	if (!in) {
		perror(argv[1]);
		exit(1);
	}
	if (fstat(fileno(in), &st)) {
		perror(argv[1]);
		exit(1);
	}
	if ((st.st_mode & S_IFMT) != S_IFREG) {
		fprintf(stderr, "%s: not a regular file\n", argv[1]);
		exit(1);
	}
	sprintf(cmd, "X %s %X", argv[2], st.st_size);
	write(1, cmd, strlen(cmd));
	byte = '\r';
	write(1, &byte, 1);
	chksum = 0;
	for (cp = cmd; *cp; cp++)
		chksum += *cp;
	byte = ~chksum + 1;
	write(1, &byte, 1);
	chksum = 0;
	for (;;) {
		chin = getc(in);
		if (chin == EOF)
			break;
		byte = chin;
		write(1, &byte, 1);
		chksum += byte;
	}
	byte = ~chksum + 1;
	write(1, &byte, 1);
	fclose(in);
	return(0);
}
