#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
	size_t ofs;
	FILE *n;
	char name[512];
	size_t ret;
	FILE *i;
	size_t ind;
	size_t towrite;

	const int bufsize = 65536;
	char *buf;

	if (argc != 3) {
		fprintf(stderr, "Usage: %s offset file\n", argv[0]);
		return 0;
	}

	buf = malloc(bufsize);
	if (buf == NULL) {
		fprintf(stderr, "not enough memory.\n");
		return 1;
	}

	ofs = atoi(argv[1]);
	strcpy(name, argv[2]);
	strcat(name, ".rest");

	i = fopen(argv[2], "rb");
	if (i == NULL) {
		fprintf(stderr, "error reading %s\n", argv[2]);
		return 1;
	}
	if (fseek(i, ofs, SEEK_SET)) {
		fprintf(stderr, "could not seek %d bytes in file %s\n", ofs, argv[2]);
		return 1;
	}

	n = fopen(name, "wb");
	if (n == 0) {
		fprintf(stderr, "error creating %s\n", name);
		return 1;
	}
	fprintf(stderr, "Creating file %s from offset %d\n", name, ofs);

	while (1) {
		ret = fread(buf, 1, bufsize, i);
		if (ret == 0)
			break;
		ind = 0;
		towrite = ret;
		while (towrite > 0) {
			ret = fwrite(&buf[ind], 1, towrite, n);
			if (ret == 0)
				break;
			ind += ret;
			towrite -= ret;
		}
	}			

	free(buf);
	return 0;
}

