#include <stdlib.h>
#include <stdio.h>
#include "gcd.h"

void usage(char** argv);
int ask_args(long long * m, long long * w);
int get_args(char* arg1,char* arg2, long long * m, long long * w);


int main(int argc, char ** argv){

long long int g=0, w=0, m=0;
unsigned long long int a=0, b=0;
long long int temp=0,temp2=0;
int error=0;

	if (argc !=1 && argc !=3){
		usage(argv);
		exit(1);
	}
	else if (argc==1) error = ask_args(&m, &w);
	else error = get_args(argv[1], argv[2], &m, &w);

	if (!error){

		g = gcd(m,w,&a,&b);

		if (w<m) {		// find which was the smallest
				temp=w;
				temp2=m;
		}
		else{
				temp=m;
				temp2=w;		
		}

		printf("\ngcd = %lld\n",g);
		if (g==1){
				printf("*Inverse of %lld = %lld\n", temp, b);
				printf(" Inverse of %lld = %lld\n\n",temp2,a);
		}
		else printf("no inverse\n\n");

	}
	else {
			printf("Number exception! wrong input\n");
			usage(argv);
	}

return 0;
}


void usage(char** argv){
		printf("Simple gcd -- Sean Van Buggenum\n");
		printf("Usage:\n	%s m w <enter>\n",argv[0]);
		printf("	%s <enter>",argv[0]);
}


int ask_args(long long * m, long long * w){

	char num1[30];
	char num2[30];

	printf("m = ?");
	scanf("%s",num1);
	printf("w = ?");
	scanf("%s",num2);

	return get_args(num1, num2, m, w);
}


int get_args(char * arg1, char* arg2, long long * m, long long * w){

	*m = atoi(arg1);
	*w = atoi(arg2);

	if ((*w)==0 || (*m)==0) return 1;
	else return 0;
}

