/* 
 Test libarchfpga, try reading an architecture and print the results to a file

 Date: February 19, 2009
 Author: Jason Luu
 */

#include <stdio.h>
#include <stdlib.h>

#include "read_xml_arch_file.h"

void print_help();

int main(int argc, char **argv) {
	t_arch* arch = (t_arch *)my_calloc(1,sizeof(t_arch));
	t_type_descriptor *types;
	int numTypes;
	;

	if (argc - 1 != 3) {
		printf(
				"Error: Unexpected # of arguments.  Expected 3 found %d arguments\n",
				argc);
		print_help();
	}

	printf(
			"------------------------------------------------------------------------------\n");
	printf(
			"- Read architecture file and print library data structures into an output file\n");
	printf(
			"------------------------------------------------------------------------------\n\n");

	printf("Inputs: \n"
			"architecture %s \n"
			"timing_driven %d \n"
			"output file %s\n", argv[1], atoi(argv[2]), argv[3]);
	printf("Reading in architecture\n");

	/* function declarations */
	XmlReadArch(argv[1], (boolean) atoi(argv[2]), arch, &types, &numTypes);

	printf("Printing Results\n");

	EchoArch(argv[3], types, numTypes, arch);

	printf("Done\n");
	free(arch);

	return 0;
}

void print_help() {
	printf(
			"\n---------------------------------------------------------------------------------------\n");
	printf(
			"read_arch: Read a VPR architecture file and output internal data structures");
	printf(
			"Usage: read_arch <arch_file.xml> <timing_driven (0|1)> <output_file>\n");
	printf("  ex: read_arch k4_n10.xml 1 arch_data.out\n");
	printf(
			"      Read timing-driven architecture k4_n10.xml and output the results to arch_data.out\n");
	printf(
			"\n---------------------------------------------------------------------------------------\n");
}

