#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <gd.h>
#include "gdfonts.h"
#include "gdfontt.h"
#include "gdfontl.h"
#include "gdfontl.h"
#include "gdfontmb.h"


void Usage(void){
	printf("dbc [-v/-h] [-c] [-d] [-i] [filenames ... ]\n");

}


int main(int argc, char **argv){
	FILE *fp1;
	FILE *out;
	gdImagePtr im;
	im = gdImageCreate(1000,1000);
    int white = gdImageColorAllocate(im, 255, 255, 255);
    int black = gdImageColorAllocate(im, 0, 0, 0);
	int green = gdImageColorAllocate(im, 0, 255, 0);
	char label[50];
	int num1 = 0;
	int num2 = 0;
	double tmp1 = 2.0;
	double tmp2 = 0.8;
	double tmp3 = 0;
	double tmp4 = 0;
	double clocks[] = {2.0, 2.3, 2.8, 3.2, 3.4, 3.6};
	double volts[] = {0.9, 1.0, 1.1, 1.2, 1.3, 1.4};
	double gflops[] = {31.902595, 36.681287, 44.656462, 51.072788, 54.264286, 57.466601};
/*
    int red = gdImageColorAllocate(im, 255, 0, 0);
    int blue = gdImageColorAllocate(im, 0, 0, 255);
    int yellow = gdImageColorAllocate(im, 255, 255, 0);
    int orange = gdImageColorAllocate(im, 255, 128, 0);
    int purple = gdImageColorAllocate(im, 255, 0, 255);
    int brown = gdImageColorAllocate(im, 128, 64, 0);
    int grey = gdImageColorAllocate(im, 128, 128, 128);
*/
	strcpy(label, "volts");
	gdImageString(im, gdFontMediumBold,   400   ,   950        , (unsigned char *)label , black);
	gdImageLine(im, 100, 900, 900, 900, black);
	gdImageLine(im, 100, 100, 100, 900, black);
	strcpy(label, "GHz");
	gdImageString(im, gdFontMediumBold,   10   ,   400        , (unsigned char *)label , black);
	//gdImageLine(im, 50, 152,50,252, black);
	//gdImageLine(im, 50, 252,306,252, black);
	strcpy(label, "GFLOPs");
	gdImageString(im, gdFontMediumBold,   950   ,   400        , (unsigned char *)label , black);
	//gdImageLine(im, 50, 152,50,252, black);
	//gdImageLine(im, 50, 252,306,252, black);
	//gdImageLine(im, n1+50, 126-temp1 ,n1+50,126, green);
	//gdImageLine(im, n1+50, 252-temp1,n1+50,252, green);

	for(num1=0; num1<17; num1++){
		(void)memset(label, '\0', 50);
		(void)sprintf(label, "%.02lf", tmp1);
		//strcpy(label, "volts");
		gdImageString(im, gdFontMediumBold,   50   ,   900-num1*50        , (unsigned char *)label , black);
		gdImageLine(im, 75, 900-num1*50, 100, 900-num1*50, black);
		tmp1 += 0.1;
	}
	for(num1=0; num1<9; num1++){
		(void)memset(label, '\0', 50);
		(void)sprintf(label, "%.02lf", tmp2);
		gdImageString(im, gdFontMediumBold,   100+num1*100   ,   975        , (unsigned char *)label , black);
		gdImageLine(im, 100+num1*100, 900, 100+num1*100, 950, black);
		tmp2 += 0.1;
	}
	for(num1=0; num1<10; num1++){
		(void)memset(label, '\0', 50);
		(void)sprintf(label, "%.02lf", tmp3);
		gdImageString(im, gdFontMediumBold,   950   ,   900-80*num1        , (unsigned char *)label , green);
		gdImageLine(im, 900, 900-80*num1, 950, 900-80*num1, black);
		tmp3 += 10;
	}
	for(num1=0; num1<6; num1++){
		tmp1 = 100*num1;
		tmp1 += 200;
		tmp2 = gflops[num1];
		tmp2 /= 10;
		tmp2 *= 80;
		if(num1 == 5){
			tmp3 = tmp1;
			tmp4 = tmp2;
		}else{
			tmp3 = tmp1+100;
			tmp4 = gflops[num1+1];
			tmp4 /= 10;
			tmp4 *= 80;
		}
		gdImageLine(im, tmp1, 900 - tmp2, tmp3, 900 - tmp4, green);
	}

	for(num1=0; num1<6; num1++){
		tmp1 = volts[num1]-0.8;
		tmp1 /= 0.1;
		tmp1 *= 100;
		//tmp1 = volts[num1]-.8/.1*100;
		tmp2 = clocks[num1]-2.0;
		tmp2 /= 0.1;
		tmp2 *= 50;
		//tmp2 = clocks[num1]-1.8/.1*50;
		if(num1 == 5){
			tmp3 = tmp1;
			tmp4 = tmp2;
		}else{
			tmp3 = volts[num1+1]-0.8;
			tmp3 /= 0.1;
			tmp3 *= 100;

			tmp4 = clocks[num1+1]-2.0;
			tmp4 /= 0.1;
			tmp4 *= 50;

			//tmp3 = volts[num1+1]-.8/.1*100;
			//tmp4 = clocks[num1+1]-1.8/.1*50;
		}
		gdImageLine(im, 100 + tmp1, 900 - tmp2, 100 + tmp3, 900 - tmp4, black);

	}




	out = fopen("clocks.png", "w");
    gdImageInterlace(im, 1);
    gdImagePng(im, out);
    fclose(out);
    gdImageDestroy(im);

	return 0;
}