#!/usr/local/bin/perl @m = ("Foo", "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec", "B/W"); print<Mortgage Calculation

Mortgage Calculation

Header #$arglist = $ENV{'QUERY_STRING'}; # For GET read(STDIN,$arglist,$ENV{'CONTENT_LENGTH'}); # For POST $arglist =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig; $arglist =~ s/,//g; @f = split("&",$arglist); # Actually search for the keys since some browser obviously switches things! for ($i=0; $i<=$#f; $i++) { ($k,$v) = split("=",@f[$i],2); $v =~ s/,//g; $aa{$k} = $v; } $stry2 = $aa{stry}; $tint2 = 0; $strt = $aa{strt}; # Canadian interest conversion if ($aa{int} =~ /C/) { $l = length($aa{int}) -1; $cint = substr($aa{int},0,$l); # print "$cint"; $mr = (1 + $cint/200)**(1/6) - 1; $int = $mr * 1200 ; $aa{int} = $int; printf("

US rate equivalent of %7.3f %% is %7.3f %%

\n",$cint,$int); } $tt = $aa{term} * 12; $i = $aa{int} / 1200; if ($tt == 0) { $tt = 360; } $temp = (1 + $i) ** -$tt; if ($temp < 1) { $paymt = ($aa{prin} * $i) / (1 - $temp); } else { $paymt = $aa{prin} / $tt; } $tint = $paymt * $tt - $aa{prin}; $bal = $aa{prin}; $yrint = 0; $yrprin = 0; $mm = 0; $apay = 0; # figure all pre-payment options $aa{prep} =~ s/\+/ /g; if ($aa{prep} =~ /1 full/) { $bw_pay = $paymt; $bi_week = 2; $ppay = 0; } if ($aa{prep} =~ /2 half/) { $bw_pay = $paymt/2; $bi_week = 1; $ppay = 0; } if ($aa{prep} =~ /Monthly/) { $apay = 0; $ppay = $aa{ppay}; } if ($aa{prep} =~ /Annually/) { $apay = $aa{ppay}; $ppay = 0; } if ($aa{prep} =~ /One Time/) { $ot_pay = $aa{ppay}; $ppay = 0; } if ($aa{outt} =~ /Table/) { print "

For the given values:

\n"; print "
Principal \$ $aa{prin} \n"; print "
Interest Rate $aa{int} % \n"; print "
Amortization Period $aa{term} years\n"; if ( $bi_week == 2 ) { print "
BI-WEEKLY 1 full payment/yr"; } if ( $bi_week == 1 ) { print "
BI-WEEKLY 2 half payments/yr"; } if ( $ppay > 0) { print "
Monthly pre-payment $ppay\n"; } print "
Starting month @m[$aa{strt}] \n"; print "
Starting year $aa{stry} \n"; if ($ppay > 0) { print "
Monthly Pre-payment \$ $ppay \n"; } if ($apay > 0) { printf("
Annual Pre-payment\$ %10.2f \n",$apay); } if ($ot_pay > 0) { printf("
One time Pre-payment\$ %10.2f paid after month %3d\n", $ot_pay, $aa{ppno}); } print "

\n"; } else { print "

For the given values:

\n\n"; } if ($bi_week > 0) { printf("

Your biweekly payment will be \$ %10.2f

\n",$paymt/2);} else { printf("

Your monthly payment will be \$ %10.2f

\n",$paymt); } if ( $ppay > 0) { printf ("

+ Monthly Prepayment of \$ %10.2f = \$ %10.2f

\n", $ppay,$paymt+$ppay); } # Now do the amortization $first_yr = $yrint; $lft = $aa{term} - 1; $m = 1; $cm = $strt; if ($aa{outt} =~ /Table/) { print ""; print "
YearMonthPrinIntBalance\n"; } else { print "
\n";
  print "Year Month Principle Interest   Balance\n";
  print "==== ===== ========= ========= =========\n";
}

$bal = $aa{prin}; $cm = $strt; $cy = $aa{stry} + 0; $m = 1; $bw = 0;
if ($aa{full} =~ /Yes/ ) { $mmax = $aa{term} * 12; } else { $mmax = 12; }
while ($m <= $aa{term} * 12 && $bal > 0)
{
  $mint = $i * $bal; $bal = $bal - $paymt + $mint - $ppay;
  $yrint = $yrint + $mint; $mprin = $paymt - $mint + $ppay;
  $yrprin = $yrprin + $mprin; $tm++; $tint2 = $tint2 + $mint;
  if ($m <= $mmax)
  {
    if ($aa{outt} =~ /Table/)
    {
      printf ("
%4d%3s%10.2f%10.2f%10.2f", $cy,@m[$cm],$mprin,$mint,$bal); } else { printf ("%4d %3s %9.2f %9.2f %9.2f\n", $cy,@m[$cm],$mprin,$mint,$bal); } } # Perform one-time prepayment if ($m == $aa{ppno} && $ot_pay > 0) { $bal = $bal - $ot_pay; if ($m <= $mmax) { if ($aa{outt} =~ /Table/) { printf ("
-PREPAY%10.2f%10.2f%10.2f", $ot_pay,0,$bal); } else { printf ("%4d P-PAY %9.2f %9.2f %9.2f\n", $cy,$ot_pay,0,$bal); } } } # Perform biweekly adjustment $bw++; if ($bw == $bi_week * 6) { $bal = $bal - $bw_pay; $bw = 0; $yrprin = $yrprin + $bw_pay; if ($m <= $mmax) { if ($aa{outt} =~ /Table/) { printf ("
-BIWEEKLY%10.2f%10.2f%10.2f", $bw_pay,0,$bal); } else { printf (" P-PAY %9.2f %9.2f %9.2f\n", $bw_pay,0,$bal); } } } $m++; $cm++; if ($cm > 12) { if ($aa{outt} =~ /Table/) { if ($apay > 0) { $bal = $bal - $apay; $yrprin = $yrprin + $apay; printf ("
%4dPREPAY%10.2f%10.2f%10.2f", $cy,$apay,0,$bal); } printf ("
%4dTOTALS%10.2f%10.2f%10.2f", $cy,$yrprin,$yrint,$bal); print "
\n"; print "
YearMonthPrinIntBalance\n"; } else { if ($apay > 0) { $bal = $bal - $apay; $yrprin = $yrprin + $apay; printf ("%4d P-PAY %9.2f %9.2f %9.2f\n", $cy,$apay,0,$bal); } printf ("%4d TOTAL %9.2f %9.2f %9.2f\n\n", $cy,$yrprin,$yrint,$bal); } $cy++; $cm=1; } } # End main loop # Print out Trailer if ($aa{term} > 0) { $aint = $tint2 / ($aa{term} * 12); } if ($aa{outt} =~ /Table/) { print "
\n"; } else { print "\n\n"; } # Print Results print"

Where the final summary is

\n
\n"; print<