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

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

int main(int argc, char **argv){
	uint64_t sectors_512K;
	uint64_t sectors_1MiB;
	uint64_t start = 1;
	uint64_t end;
	uint64_t sectors = 0;
	uint64_t sectors_per_partition;
	uint8_t partition = 0;
	//uint8_t max_partitions = 4;
	//uint8_t count;
	//uint64_t remaining;
	//uint64_t end_reserve = 0;
	//uint64_t part_start[4] = 0;
	//uint64_t part_end[4] = 0;
	//uint64_t MiB = 1073741824;
	//uint64_t KiB_sectors_per_GiB = 262144;
	uint64_t MiB_sectors_per_GiB = 1024;

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

	sectors_512K = (uint64_t)atol(argv[1]);


	printf("total sectors(512B): %" PRIu64 "\n", sectors_512K);
	sectors_1MiB = sectors_512K / 2048;
	printf("total sectors(1MiB): %" PRIu64 "\n", sectors_1MiB);
	printf("device\t\t\tstart\t\t\tend\t\t\tsectors\n");

	//create 4 partitions: 128GiB, 128GiB, 32GiB, main to end
	start = 1;
	sectors_per_partition = MiB_sectors_per_GiB*128;
	end = start + sectors_per_partition;
	sectors = end - start;
	printf("%u\t\t\t%" PRIu64 "\t\t\t%" PRIu64 "\t\t\t%" PRIu64 "\n", partition+4, MiB_to_B(start), MiB_to_B(end)+2047, MiB_to_B(sectors));

start = end + 1;
//start += sectors_per_partition+1;
sectors_per_partition = MiB_sectors_per_GiB*128;
end = start + sectors_per_partition;
sectors = end - start;
printf("%u\t\t\t%" PRIu64 "\t\t\t%" PRIu64 "\t\t\t%" PRIu64 "\n", partition+3, MiB_to_B(start), MiB_to_B(end)+2047, MiB_to_B(sectors));


start = end + 1;
//start += sectors_per_partition+1;
sectors_per_partition = MiB_sectors_per_GiB*32;
end = start + sectors_per_partition;
sectors = end - start;
printf("%u\t\t\t%" PRIu64 "\t\t\t%" PRIu64 "\t\t\t%" PRIu64 "\n", partition+2, MiB_to_B(start), MiB_to_B(end)+2047, MiB_to_B(sectors));


start = end + 1;
//start += sectors_per_partition+1;
//sectors_per_partition = sectors_1MiB-start;
//end = start + sectors_per_partition;
//end = sectors_1MiB;
//sectors = end - start;
start = MiB_to_B(start);
end = sectors_512K-1;
sectors = end - start;
printf("%u\t\t\t%" PRIu64 "\t\t\t%" PRIu64 "\t\t\t%" PRIu64 "\n", partition+1, start, end, sectors);



	return 0;
}
