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



void usage(void){
	printf("\tUsage: print-chars [output] [input]\n");


	exit(1);
}


/*
struct translation_structure{
        char* series;
        unsigned char a;
        unsigned char b;
        unsigned char len;
}table[]={
    {(char[]){0, 1, 2}, 5, 100, 3},
    {(char[]){4, 5, 6, 7}, 1, 2, 4},
    {(char[]){0, 1, 2}, 5, 100, 3},
    {(char[]){4, 5, 6, 7}, 1, 2, 4},
    {(char[]){0, 1, 2}, 5, 100, 3},
    {(char[]){4, 5, 6, 7}, 1, 2, 4}
};




struct translation_structure{
	int *series;	
        unsigned char a;
        unsigned char b;
	unsigned char len;
}table[]={
        {(int[4]){0, 1, 2, 3}, 0, 100, 4},
        {(int[4]){4, 5, 6, 7}, 1, 100, 4},
        {(int[3]){8, 9, 10}, 2, 100, 3},
        {(int[6]){11, 12, 13, 14, 15, 16}, 3, 100, 6},
        {(int[2]){17, 18}, 4, 100, 2},
        {(int[3]){19, 20, 21}, 5, 100, 3}
};
*/


int main(int argc, char **argv){
	FILE *output;
	FILE *input;
	int character;
	int counter1, counter2, counter3;
	int lines = 0;
	int num1, num2, num3, num4;
	int set = 1;
	char outstr[100];
	char linestring[100];

	if(argc != 3){
		usage();
		//printf("error\n");
		//exit(1);
	}

        //outstr = (char *)malloc( strlen(argv[2])*sizeof(char) );
        //(void)sprintf(input_file, "%s", argv[2]);
	
	char semicolon = 59;
	char string1[100];
/*
	for(counter1=0; counter1<6; counter1++){
		for(counter2=0; counter2<table[counter1].len; counter2++){		

			printf("%d ", table[counter1].series[counter2]);

		}
		printf("\t%d ", table[counter1].a);
		printf("%d", table[counter1].b);
		printf("\n");
	
	}
*/


	output = fopen(argv[1], "w");

	
        if( ( input = fopen( argv[2], "r" ) ) == NULL ) {
                fprintf( stderr, "Error opening %s\n", argv[2] );
                exit( 1 );
        }

        while( fgets(linestring, sizeof(linestring), input) != NULL)
        {       
		lines++;
	}
	fclose(input);

	//strcpy("struct", string1);
	fprintf(output, "struct translation_structure{\n");
	fprintf(output, "\tunsigned char *series%c\n", semicolon);
	fprintf(output, "\tunsigned char a%c\n", semicolon);
	fprintf(output, "\tunsigned char b%c\n", semicolon);
	fprintf(output, "\tunsigned char len%c\n", semicolon);
	fprintf(output, "}table[]={\n");

        num1 = 0;  
        num2 = 0;
        num3 = 0;
        num4 = 1;


	for(counter1=0; counter1<25600; counter1++){


		//num4 = strlen(outstr);
                fprintf(output, "\t{(int[%d]){", num2+1);
                fprintf(output, "%d",  num1);
                
                for(counter3=1; counter3 < num2+1; counter3++){
                        fprintf(output, ", %d",  num1);
                }
                fprintf(output, "}, ");
         
                //if(num3 != lines){
                  //      fprintf(output, "%d, %d, %d},\n", num1, num2, num4 );
                        //fprintf(output, "\t{\"%s\", %d, %d},\n", outstr, num1, num2 );
                //}else{
                        fprintf(output, "%d, %d, %d},\n", num1, num2, num2+1 );
                        //fprintf(output, "\t{\"%s\", %d, %d}\n", outstr, num1, num2 );
                //}
                //counter1++;
                if(num1 == 255){
                        num1 = 0;
                        num2++;
			
                }else{
                        num1++;
                }



	}

	
	num1 = 0;
	num2 = 100;
	num3 = 0;
	num4 = 0;
	counter1=25600;


//fprintf(output, "\t{(int[4]){");
//0, 1, 2, 3},

//fprintf(output, "%d, ",  );

//fprintf(output, "%d}, ",  );


//fprintf(output, "%d, %d, %d},\n", num1, num2, num3 );


        if( ( input = fopen( argv[2], "r" ) ) == NULL ) {
                fprintf( stderr, "Error opening %s\n", argv[2] );
                exit( 1 );
        }

	
        while( fgets(linestring, sizeof(linestring), input) != NULL && counter1 < 65536)
        {

		strcpy(outstr, linestring);
		outstr[strlen(outstr)-1]='\0';
		num3++;
		//39926 //156
		//for(counter1=25600; counter1<65536; counter1++){

		num4 = strlen(outstr);
		fprintf(output, "\t{(int[%d]){", num4);
		fprintf(output, "%d",  outstr[0]);
		//num4 = strlen(outstr);
		for(counter3=1; counter3 < num4; counter3++){
			fprintf(output, ", %d", outstr[counter3] );
		}
		fprintf(output, "}, ");

		if(num3 != lines){
			fprintf(output, "%d, %d, %d},\n", num1, num2, num4 );
			//fprintf(output, "\t{\"%s\", %d, %d},\n", outstr, num1, num2 );
		}else{
			fprintf(output, "%d, %d, %d}\n", num1, num2, num4 );
			//fprintf(output, "\t{\"%s\", %d, %d}\n", outstr, num1, num2 );
		}
		//}
		counter1++;
		if(num1 == 255){
			num1 = 0;
			num2++;
		}else{
			num1++;
		}	
	}
	
	
	fprintf(output, "}%c\n", semicolon);

	fclose(input);
	fclose(output);



return 0;
}
