#include <stdio.h>

double atof();
double mexp();

main(argc, argv)
int argc;
char *argv[];
{
char tmp[200];
double prin = 0;
double interest = 0;
double prepaym = 0;
int length = 0;
int i = 0;
double mon_paym = 0;	/* Monthly payment	*/
double m_intr = 0;	/* This months interest paid over course of loan */
double m_prin = 0;	/* This months prin paid over course of loan */
double r_prin = 0;	/* Remaining prin paid over course of loan */
double m_int = 0;	/* monthly interest	*/
double t_prin = 0;	/* Total prin paid over course of loan */
double t_intr = 0;	/* Total interest paid over course of loan */

if ((argc == 2) && ((argv[1][0] == 'p') || (argv[1][0] == 'P')))
	{
	 fprintf(stdout,"Enter principal amount <$>....................... ");
	 fgets(tmp,100,stdin);
	 prin = atof(tmp);
	 fprintf(stdout,"Enter interest rate <%%>.......................... ");
	 fgets(tmp,100,stdin);
	 interest = atof(tmp);
	 fprintf(stdout,"Enter length of loan <months>.................... ");
	 fgets(tmp,100,stdin);
	 length = atoi(tmp);
	 fprintf(stdout,"Enter monthly principal prepayment <optional>.... ");
	 fgets(tmp,100,stdin);
	 prepaym = atof(tmp);
	 fprintf(stdout,"\n");
	 if ((prepaym <= 0) || (tmp[0] == '\n'))
		{
		 prepaym = 0;
		}
	}
else if ((argc == 2) && ((argv[1][0] == 'v') || (argv[1][0] == 'V')))
	{
	 fprintf(stdout,"amort: Version 1.00 \n");
	 fprintf(stdout,"       Copyright 1987 by Michael Brochstein\n");
	 fprintf(stdout,"       All rights reserved.\n");
	}
else if ((argc != 4) && (argc != 5))
	{
	 fprintf(stderr,"Usage: amort p \n");
	 fprintf(stderr,"       amort v \n");
	 fprintf(stderr,"       amort <principal> <interest> ");
	 fprintf(stderr,"<length of loan (months)>\n");
	 fprintf(stderr,"       amort <principal> <interest> ");
	 fprintf(stderr,"<length of loan (months)> <prepayment>\n");
	}
else if ((argc == 4) || (argc == 5))
	{
	 prin = atof(argv[1]);
	 interest = atof(argv[2]);
	 length = atoi(argv[3]);
	 if (argc == 5)
		{
	 	 prepaym = atof(argv[4]);
		}
	}

if ((argc == 4) || (argc == 5)
	|| ((argc == 2) && ((argv[1][0] == 'p') || (argv[1][0] == 'P'))))
	{
	 m_int = (interest/100)/12;
	 mon_paym = prin 
		/ ( (1 - mexp(1 + m_int, length))
		/ m_int);
	
	 if (prepaym == 0)
		{
		 fprintf(stdout,"-Monthly payment.......$ %12.2f\n", mon_paym);
		 fprintf(stdout,"-Total interest paid...$ %12.2f\n",
			mon_paym*length-prin);
		}
	 else if (prepaym > 0)
		{
		 fprintf(stdout,"-Regular monthly payment........$ %12.2f\n",
			mon_paym);
		 fprintf(stdout,"-Monthly principal pre-payment..$ %12.2f\n",
			prepaym);
		}

	 r_prin = prin;

	 if (prepaym == 0)
		{
		 for (i = 1; i <= length; i++)
			{
			 m_intr = r_prin * m_int;
			 m_prin = mon_paym - m_intr;
			 r_prin -= m_prin;
			 t_intr += m_intr;
			 t_prin += m_prin;
			}
		}
	 else if (prepaym > 0)
		{
		 i = 1;
		 while (r_prin > 0)
			{
			 m_intr = r_prin * m_int;
			 m_prin = mon_paym - m_intr;
			 if (m_prin > r_prin)
				{
				 m_prin = r_prin;
				}
			 r_prin -= (m_prin + prepaym);
			 t_prin += (m_prin + prepaym);
			 if (r_prin == -prepaym)
				{
				 r_prin = 0;
				 t_prin -= prepaym;
				 prepaym = 0;
				}
			 t_intr += m_intr;
			 ++i;
			}
		 fprintf(stdout,"-Total interest paid............$ %12.2f\n",
			t_intr);
		 fprintf(stdout,"-Length of loan <months>......... %12d\n",i-1);
		}
	}
}


double mexp(x,y)
double x;
int y;
{
double ret_val = 1/x;
int i = 0;

for (i = 0; i < (y-1); i++)
	{
	 ret_val *= 1/x; 
	}
return (ret_val);
}
