#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#include <string.h>

uint64_t MiB_to_B(uint64_t input){
	return input*2048;
}

//uint64_t Num_Spaced(uint64_t input


int main(int argc, char **argv){
	uint64_t sectors_512B = 0;;
	uint64_t sectors_1MiB = 0;;
	uint64_t start = 1;
	uint64_t end = 0;;
	uint64_t end_512B = 0;;
	uint64_t sectors = 0;
	uint64_t sectors_per_partition = 0;;
	uint64_t num1 = 0;
	uint64_t sectors_remainder = 0;
	uint64_t desired_partitions = 0;
	uint8_t partition = 1;
	char output_num[67];

	if(argc != 3)
		exit(1);

	sectors_512B = (uint64_t)atol(argv[1]);
	desired_partitions = (uint64_t)atol(argv[2]);

	sectors_1MiB = (sectors_512B-2048) / 2048;

	sectors_per_partition = sectors_1MiB / desired_partitions;
	//sectors_remainder = sectors_1MiB - sectors_per_partition*desired_partitions;
	sectors_remainder = sectors_1MiB % sectors_per_partition;


	printf("total sectors(512B): %" PRIu64 "\n", sectors_512B);
	printf("max sectors(1MiB) available: %" PRIu64 "\n", sectors_1MiB);
	printf("sectors per partition(1MiB): %" PRIu64 "\n", sectors_per_partition);
	printf("sectors remainder(1MiB): %" PRIu64 "\n", sectors_remainder);
	printf("desired partitions: %" PRIu64 "\n", desired_partitions);

	//printf("device\tstart\tend\tsectors\n");
	printf("%-20s\t%-20s\t%-20s\t%-20s\n", "device", "start", "end", "sectors");

	for(partition=1; partition<desired_partitions; partition++){
		if(sectors_remainder > 0){
			sectors = 1;
			sectors_remainder--;
		}else{
			sectors = 0;
		}

		sectors += sectors_per_partition;
		end = start + sectors - 1;
		end_512B =  MiB_to_B(end + 1) - 1;
		//print in 512B
		printf("%-20u\t%-20" PRIu64 "\t%-20" PRIu64 "\t%-20" PRIu64 "\n", partition, MiB_to_B(start), end_512B, end_512B-MiB_to_B(start)+1);
		//print in 1MiB
		//printf("%-20u\t%-20" PRIu64 "\t%-20" PRIu64 "\t%-20" PRIu64 "\n", partition, start, end, sectors+1);
		start = end + 1;
	}

	//last partition
	start = MiB_to_B(start);
	end = sectors_512B-1;
	sectors = end - start;
	printf("%-20u\t%-20" PRIu64 "\t%-20" PRIu64 "\t%-20" PRIu64 "\n", partition, start, end, sectors+1);


	return 0;
}
