home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pds.zip / LOAN.CMD < prev    next >
OS/2 REXX Batch file  |  1994-01-21  |  7KB  |  226 lines

  1. /*REXX*/
  2. main:
  3. parse arg lbegbal lrate lfactor lnumpay
  4.  
  5.   if lbegbal <> '' & TRANSLATE(lbegbal) <> '/DEBUG' then
  6.    do
  7.     if lnumpay = '' then lnumpay = 360
  8.     if lfactor = '' then lfactor = 12
  9.     if lrate   = '' then lrate   = 8.75
  10.     call rDoLoanCalc lbegbal, lrate, lfactor, lnumpay, 'N'
  11.     do i = 1 to d.0
  12.      say d.i
  13.     end
  14.    end
  15.   else
  16.    do
  17.     if TRANSLATE(lbegbal) = '/DEBUG' then
  18.      Call Trace ?r
  19.     NUMERIC DIGITS 6
  20.     irc = 0
  21.     rc   = rLoadFuncs('rxPDLoadFuncs', 'HSSPD')
  22.     if rc <> 0 then
  23.      do
  24.       Call BEEP 524, 250
  25.       Call BEEP 262, 250
  26.       say 'LOAN - Unable to initialize the "RXPD" subsystem'
  27.       exit 8
  28.      end
  29.     NUMERIC DIGITS 33
  30.     bid  = rxPDInit('LOAN','YELLOWHI', 'REDHI', 'WHITE')
  31.     rc   = rxPDZVarDefine()
  32. /*  svid = rxPDSaveScreen(bid)*/
  33.     /* Now we init the panel variables */
  34.     lbegbal   = '0.00'
  35.     lrate     = '0.00'
  36.     lfactor   = '0'
  37.     lnumpay   = '0'
  38.     fDlbegbal = ''
  39.     fDlrate   = ''
  40.     fDlfactor = ''
  41.     fDlnumpay = ''
  42.     fDwpa  = ''
  43.     fDwip  = ''
  44.     fDwfp  = ''
  45.     fDwnop = ''
  46.     fDwpp  = ''
  47.     fDwdpb = ''
  48.     fDwpia = ''
  49.     fDwaib = ''
  50.     /* And define them so that we get proper care and feeding */
  51.     rc = rxPDVarDefine(bid, 'fDlbegbal', ZVTYPE_DOUBLE, 2)
  52.     rc = rxPDVarDefine(bid, 'fDlrate'  , ZVTYPE_DOUBLE, 3)
  53.     rc = rxPDVarDefine(bid, 'fDlfactor', ZVTYPE_LONG, 3)
  54.     rc = rxPDVarDefine(bid, 'fDlnumpay', ZVTYPE_LONG, 3)
  55.     rc = rxPDVarDefine(bid, 'fDwpa', ZVTYPE_DOUBLE+ZVTYPE_RIGHTADJUST, 2)
  56.     rc = rxPDVarDefine(bid, 'fDwip', ZVTYPE_DOUBLE+ZVTYPE_RIGHTADJUST, 3)
  57.     rc = rxPDVarDefine(bid, 'fDwpp', ZVTYPE_DOUBLE+ZVTYPE_RIGHTADJUST, 2)
  58.     rc = rxPDVarDefine(bid, 'fDwdpb', ZVTYPE_DOUBLE+ZVTYPE_RIGHTADJUST, 2)
  59.     rc = rxPDVarDefine(bid, 'fDwpia', ZVTYPE_DOUBLE+ZVTYPE_RIGHTADJUST, 2)
  60.     rc = rxPDVarDefine(bid, 'fDwaib', ZVTYPE_DOUBLE+ZVTYPE_RIGHTADJUST, 2)
  61.     rc = rxPDVarDefine(bid, 'fDwfp', ZVTYPE_LONG+ZVTYPE_RIGHTADJUST, 3)
  62.     rc = rxPDVarDefine(bid, 'fDwnop', ZVTYPE_LONG+ZVTYPE_RIGHTADJUST, 3)
  63. /***
  64. ***/
  65.     sKey = rxPDDisplay(bid,'PANEL000')
  66.     do while 0 = rDoLoan(bid)
  67.     end /*do while 0 = rDoLoan(bid)*/
  68. /*  rc = rxPDRestoreScreen(bid, svid)*/
  69.     rc = rxPDTerm(bid)
  70.    end
  71.  
  72.   exit 0
  73.  
  74. /**********************************************************************\
  75.  rDoLoan:
  76.   This routine displays a dialog panel for the required LOAN data.
  77.   It then calls the lon calculation routine followed by the loan
  78.   display routine.
  79. \**********************************************************************/
  80. rDoLoan:
  81. parse arg bid
  82.  
  83.   fDlbegbal = lbegbal
  84.   fDlrate   = lrate
  85.   fDlfactor = lfactor
  86.   fDlnumpay = lnumpay
  87.  
  88.   skey = ZESC
  89.   do while sKey = ZESC
  90.    sKey = rxPDDisplay(bid,'PANEL001')
  91.   end /*do while sKey = ZESC*/
  92.  
  93.   if sKey = ZF3 then
  94.    do
  95.     return 8
  96.    end
  97.  
  98.   lbegBal = fDlbegbal
  99.   lrate   = fDlrate
  100.   lfactor = fDlfactor
  101.   lnumpay = fDlnumpay
  102.  
  103.   call rDoLoanCalc lbegbal, lrate, lfactor, lnumpay, 'Y'
  104.  
  105.   Call rDoLoanDisplay bid
  106.  
  107.   return 0;
  108.  
  109. /**********************************************************************\
  110.  rDoLoanDisplay:
  111.   This routine displays a dialog panel containing the results of the
  112.   loan calculation routine.
  113. \**********************************************************************/
  114. rDoLoanDisplay:
  115. parse arg bid
  116.   sKey = rxPDDisplay(bid,'PANEL002')
  117.   return 0;
  118.  
  119. /**********************************************************************\
  120.  rDoLoanCalc:
  121.   This routine performes the calculation of the desired loan.
  122.   This routine is independent of the mode of end user interface by
  123.   building a stem variable that will be used by either the command
  124.   line interface or the dialog interface.
  125.  
  126.   Calculations are done using the following formula:
  127.  
  128.             --                                          --
  129.             |                                            |
  130.             |                    I                       |
  131.             |                                            |
  132.   PMT = B * |  ________________________________________  |
  133.             | --                                      -- |
  134.             | |    --                              --  | |
  135.             | |    |                                |  | |
  136.             | |    |               1                |  | |
  137.             | |1 - |  ___________________________   |  | |
  138.             | |    | --                         --  |  | |
  139.             | |    | |  --             -- N      |  |  | |
  140.             | |    | |  |     1 + I     |        |  |  | |
  141.             | |    | |  --             --        |  |  | |
  142.             | |    | --                         --  |  | |
  143.             | |    --                              --  | |
  144.             | --                                      __ |
  145.             --                                          --
  146.  
  147.   PMT = B * ( I / ( 1 - ( 1 / ( ( 1 + I ) ** N ) ) ) )
  148. \**********************************************************************/
  149. rDoLoanCalc:
  150. /*Call Trace ?r*/
  151. parse arg lbegbal, lrate, lfactor, lnumpay, fPD
  152.   /*lnumpay = lnumpay * lfactor;*/
  153.   b = lbegbal;
  154.   i = FORMAT(lrate / 100,9,6);
  155.   i = FORMAT(i / lfactor,9,6);
  156.   n = lnumpay;
  157.   ir = i + 1;
  158.   ir = FORMAT(ir ** n,9,6);
  159.   ir = FORMAT(1 / ir,9,6);
  160.   ir = FORMAT(1 - ir,9,6);
  161.   ir = FORMAT(i / ir,9,6);
  162.   p = FORMAT(b * ir,9,6);
  163.   wpia = b;
  164.   wpa = b;
  165.   tb = FORMAT(p * n,9,6);
  166.   wdpb = tb;
  167.   waib = FORMAT(tb - b,9,6);
  168.   wip = lrate;
  169.   wfp = lfactor;
  170.   wnop = n;
  171.   wpp = p;
  172.  
  173.   /* Build Display Stem */
  174.   if fPD = 'N' then
  175.    do
  176.     d.1 =' '
  177.     d.2 ='                                         <***********************************>'
  178.     d.3 ='                                         <Principle            :    'FORMAT(wpa,6,2)'>'
  179.     d.4 ='                                         <Interest & Periods   : 'FORMAT(wip,2,2)'% &  'FORMAT(wfp,2,0)'>'
  180.     d.5 ='                                         <Number of Payments   :          'FORMAT(wnop,3,0)'>'
  181.     d.6 ='                                         <***********************************>'
  182.     d.7 =' '
  183.     d.8 =' Period Payment = 'FORMAT(wpp,4,2)
  184.     d.9 =' '
  185.     d.10=' Total Amount of Payments = ' FORMAT(wdpb,6,2)
  186.     d.11=' - Amount of Loan         = ' FORMAT(wpia,6,2)
  187.     d.12='                            ---------'
  188.     d.13=' Total Interest Payed     = ' FORMAT(waib,6,2)
  189.     d.0 = 13;
  190.    end
  191.  
  192.   /* Build Display Variables */
  193.   if fPD = 'Y' then
  194.    do
  195.     fDwpa  = FORMAT(wpa,6,2)
  196.     fDwip  = FORMAT(wip,2,2)
  197.     fDwfp  = FORMAT(wfp,2,0)
  198.     fDwnop = FORMAT(wnop,3,0)
  199.     fDwpp  = FORMAT(wpp,4,2)
  200.     fDwdpb = FORMAT(wdpb,6,2)
  201.     fDwpia = FORMAT(wpia,6,2)
  202.     fDwaib = FORMAT(waib,6,2)
  203.     /****
  204.     fDwpa  = RIGHT(FORMAT(wpa,6,2),11,' ')
  205.     fDwip  = FORMAT(wip,2,2)||'%'
  206.     fDwfp  = FORMAT(wfp,2,0)
  207.     fDwnop = RIGHT(FORMAT(wnop,3,0),11,' ')
  208.     fDwpp  = RIGHT(FORMAT(wpp,4,2),10,' ')
  209.     fDwdpb = RIGHT(FORMAT(wdpb,6,2),10,' ')
  210.     fDwpia = RIGHT(FORMAT(wpia,6,2),10,' ')
  211.     fDwaib = RIGHT(FORMAT(waib,6,2),10,' ')
  212.     ***/
  213.    end
  214.  
  215.   return
  216.  
  217. rLoadFuncs:
  218. parse arg sRtn, sDll
  219.   rxrc = RxFuncAdd(sRtn, sDll, sRtn)
  220.   signal on syntax name xLoadFuncs
  221.   interpret 'Call 'sRtn
  222.   return 0
  223.  
  224. xLoadFuncs:
  225.   return 127
  226.