// Name:     Micheal H. McCabe
// Date:     April 20, 2009
// Program:  Calculator V10 / Modular Version
// Filename: calc_main.cpp

#include "calc.h"

/*----------------------------------------------------------------------------*/
/*      This is the main event loop and dispatch routine                      */
/*----------------------------------------------------------------------------*/

// Declare the Variables

NewDataView UserData;

int main()
	{
	bool command_loop = true;
	string command_line;
	char cmd_chr1;
	char cmd_chr2;
	string temp;
	int iresult=0;
	int p;

	while (command_loop)
		{
    		temp="";
    		cout << CMD_PROMPT;
		getline(cin, command_line);
		cmd_chr1 = command_line[0];
		cmd_chr2 = command_line[1];
		
		// Decode it

		switch (cmd_chr1)
			{
			case 'D':
				directory();
				break;
			case 'e':
				getN1N2(UserData);
				break;
			case 'i':
				GetArray(UserData);
				break;
			case 'f':
             			if (cmd_chr2 == 'i')
               			 	{
               				 ReadInputFile(UserData); 
                		 	}
             			else if (cmd_chr2 == 'o')
                  			WriteOutputFile(UserData);
                  			else temp=NO_COMMAND;
             			break;
        		case '+':
             			add(UserData);
             			cout << "Result:  " << UserData.Last_Result << endl;
             			break;
        		case '-':
             			sub(UserData);
             			cout << "Result:  " << UserData.Last_Result << endl;
             			break;
        		case '*':
             			mult(UserData);
             			cout << "Result:  " << UserData.Last_Result << endl;
             			break;
        		case '/':
             			div(UserData);
             			cout << "Result:  " << UserData.Last_Result << endl;
             			break;
        		case '^':
             			exponent(UserData);
             			cout << "Result:  " << UserData.Last_Result << endl;
             			break;
        		case '!':
             			iresult=factorial((int)UserData.N1);
             			cout << "Result:  " << iresult << endl;
	     			UserData.Last_Result = (float) iresult;
             			break;
       			case 'c':
             			if (cmd_chr2=='L')
					{
                			clearl(UserData);
                			break;
                			}
             			else
                 			{
                 			clearn(UserData);
                 			break;
                 			}
        		case 'h':
             			helpscreen();
             			break;
        		case 'l':
             			list_data(UserData);
             			break;
        		case 'q':
             			command_loop = false;
             			temp = "Bye, Bye!";
             			break;
        		case 'o':
             			output_last(UserData);
             			break;
        		case 'a':
             			mean(UserData);
             			cout << "Result:  " << UserData.Last_Result << endl;
             			break;
        		case 'd':
             			p=GetNumArg(command_line);
				deletelist(p, UserData);
             			break;
        		case 'm':
             			p=GetNumArg(command_line);
				cout << "Store result in List Item #" << p << endl;
				moveresult(p, UserData);
             			break;
        		case 's':
	     			if (cmd_chr2 == 'd')
                			{
                			deviant(UserData);
                			cout << "Result:  " << UserData.Last_Result << endl;
                 			}	
             			else
                			{
                			sum(UserData);
                			cout << "Result:  " << UserData.Last_Result << endl;
                			}
             			break;
        		case 'p':
            		 	product(UserData);
             			cout << "Result:  " << UserData.Last_Result << endl;
             			break;
        		case 'M':
             			if (cmd_chr2 == '1')
                		storen1(UserData);
                		else if (cmd_chr2 == '2')
                     		storen2(UserData);
             			break;
        		case 'N':
              			if (cmd_chr2 == '1')
                		loadn1(UserData);
                		else if (cmd_chr2 == '2')
                     		loadn2(UserData);
            		 	break;
			default:
				cout << NO_COMMAND;
			}	
		}
	return 0;
	}


