#include <stdio.h>

int TABSIZE = 8;

int main(int argc, char ** argv) {
    FILE * in, * out;
    int p, ts, i;
    
    if ((argc < 3) || (argc > 4)) {
	fprintf(stderr, "Not enough arguments.\n");
	return -1;
    }
    
    if (!(in = fopen(argv[1], "rb"))) {
	fprintf(stderr, "Can't open input file %s.\n", argv[1]);
	return -1;
    }

    if (!(out = fopen(argv[2], "wb"))) {
	fprintf(stderr, "Can't open output file %s.\n", argv[2]);
	return -1;
    }
    
    if (argc == 4)
	TABSIZE = strtol(argv[3], NULL, 10);
    
    ts = TABSIZE;
    while ((p = fgetc(in)) != EOF) {
	switch (p) {
	case '\n':
	case '\r':
	    ts = TABSIZE;
	    fputc(p, out);
	    break;
	case '\t':
	    for (i = 0; i < ts; i++) {
		fputc(' ', out);
	    }
	    ts = TABSIZE;
	    break;
	default:
	    fputc(p, out);
	    ts--;
	    if (ts == 0)
		ts = TABSIZE;
	}
    }
    
    fclose(out);
    fclose(in);
}

