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

#define MAXRUN 10

int MAXINS;
int M;
int N;
int F_LO;
int F_HI;
int C_LO;
int C_HI;

int main(int argc, char** argv)
{
int i, j, run;
int *F, **C;
FILE *fp;
char filename[12];
char run_no[3];
int instance;

	if (argc == 1)
	{
		printf("Usage: bkgen  <M> <N> <F_LO> <F_HI> <C_LO> <C_HI> <prefix> <num_prob> \nAll Integers please.\n");
   		exit(0);
	}
	M = atoi(argv[1]);
	N = atoi(argv[2]);
	F_LO = atoi(argv[3]);
	F_HI = atoi(argv[4]);
	C_LO = atoi(argv[5]);
	C_HI = atoi(argv[6]);

	MAXINS = atoi(argv[8]);
	printf("%d %s problems: Size M = %d N = %d, F = (%d, %d), C = (%d, %d)\n\n",MAXINS, filename, M, N, F_LO, F_HI, C_LO, C_HI);

	F = (int *)calloc(M, sizeof(int));
	C = (int **)calloc(M, sizeof(int *));
	for (i = 0; i < M; i++)
		C[i] = (int *)calloc(N, sizeof(int));
	srand(123456);
	for (instance = 1; instance <= MAXINS; instance++)
	{
	for (run = 1; run <= MAXRUN; run++)
	{
		strcpy(filename, argv[7]);
		itoa(instance, run_no, 10);
		strcat(filename, run_no);
		itoa(run, run_no, 10);
		strcat(filename, ".");
		strcat(filename, run_no);

		printf("Building file %s ", filename);

		for (i = 0; i < M; i++)
		{
			/*F[i] = (int)(rand()*1.0/RAND_MAX * (F_HI - F_LO) + F_LO); */
			F[i] = instance*1000;
			for (j = 0; j < N; j++)
				C[i][j] = (int)(rand()*1.0/RAND_MAX * (C_HI - C_LO) + C_LO);

		}

		fp = fopen(filename, "w");
		fprintf(fp, "FILE: %s\n",filename);
		fprintf(fp, "%d %d 0\n", M, N);
		for (i = 0; i < M; i++)
		{
			fprintf(fp, "%d %d ", i+1, F[i]);
			for (j = 0; j < N; j++)
				fprintf(fp, "%d ", C[i][j]);
			fprintf(fp, "\n");
		}
		fclose(fp);
		printf(". . . Done\n");
	}
	}

	return 0;
}
