/* 
 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], 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");
}

