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

int main(int argc, char **argv){
	if(argc != 2){
		printf("Syntax Error!\n");
		exit(1);
	}
	FILE *fp;
	size_t num1 = 0;
	//size_t num2 = 0;
	size_t bytes_read = 0;
	size_t file_size = 0;
	unsigned char cur_byte;
	unsigned char byte_index[256];
	unsigned char byte_counts[256];
	unsigned char unique_bytes = 0;
	char *filename = malloc(strlen(argv[1]) + 1);
	(void)memset((void *)&byte_counts, '\0', 256);
	//num1 = strlen(argv[1]);
	(void)strcpy(filename, (const char *)argv[1]);

	for(num1=0; num1<256; num1++){
		byte_index[num1] = num1;
	}
	if( !(fp = fopen(filename, "rb")) ){
		printf("error opening ""%s""\n", filename);
		free(filename);
		exit(1);
	}

	fseek(fp , 0 , SEEK_END);
	file_size = ftell(fp);
	rewind(fp);


	while(bytes_read < file_size){
		//fread( (void *)&cur_byte, 1, 1, fp) == 1){
		//bytes_read += fread( (void *)&bytes_found[cur_byte], 1, 1, fp);
		bytes_read += fread( (void *)&cur_byte, 1, 1, fp );
		byte_counts[cur_byte]++;
		//for(num2=0; num2<256; num2++){
		//	if(cur_byte == byte_index[num2] ){
		//		byte_counts[num2]++;
		//		continue;
		//	}
		//}
	}

	for(num1=0; num1<256; num1++){
		if(byte_counts[num1] != 0){
			printf("%zu: %d ""%c""\n", num1, byte_counts[num1], (int)num1);
			unique_bytes++;
		}
	}
	printf("\nfile_size: %zu\n", file_size);
	printf("bytes_read: %zu\n", bytes_read);
	printf("unique_bytes: %d\n", unique_bytes);

	fclose(fp);
	free(filename);
	return 0;
}