
' ********************************************
' *                 PAR Real                 *
' *   Copyright (C) 1986, PAR Software, Inc. *
' *            All Rights Reserved           *
' ********************************************

100 REM EXECUTION BEGINS HERE WHEN CHAINED IN
MENU ON
ON MENU GOSUB CheckMenu
ON ERROR GOTO ErrorFix
BREAK ON
ON BREAK GOSUB ReturnUser
GOSUB InitVars
COLOR 1,0
LOCATE 11,1
PRINT BlankLine$
LINE (80,79)-(503,79),0
OPEN "lpt1:" FOR OUTPUT AS 3
CLOSE #3
phrase$ = "Please make a menu suhlection"
Speech2$ = ""
CALL InputError2
GOSUB TurnMenuOn
GOSUB InitMenuOff
WaitForever:
LINE (80,95)-(503,95),3
COLOR 2,3
LOCATE 13,11
PRINT "        Choose a Financial Evaluation or Quit        "
FOR lcv = 1 TO 2000
NEXT lcv
LINE (80,95)-(503,95),1
COLOR 2,1
LOCATE 13,11
PRINT "        Choose a Financial Evaluation or Quit        "
FOR lcv = 1 TO 2000
NEXT lcv
GOTO WaitForever

InitVars:
PrintL=340:PrintT=28:PrintR=401:PrintB=42
PrintLoc=350

ContL=418:ContT=28:ContR=503:ContB=42
ContLoc=428

ExitL=520:ExitT=28:ExitR=573:ExitB=42
ExitLoc=530
f$ = " ###.##%$$########,.##$$########,.##$$########,.##$$########,.##"
f1$ = "  $$########,.##  $$########,.##  $$########,.## "
f2$ = "  $$########,.##  $$########,.##  $$########,.##  $$########,.## "
f3$ = "$$##########,.## "
f4$ = "$$##########,.##"
f5$ = "$$########,.##$$########,.##$$########,.##$$########,.##"
RETURN

ResetAlterVars:
VarPayment = 0
VarPayYear = 0
VarPayMonth = 0
NewPayment# = 0

YearlyGrowth = 0
BegGrthYear = 0
FinGrthYear = 0
Growth = 0

BegMonGrthYear = 0
BegMonGrthMon = 0
FinMonGrthYear = 0
FinMonGrthMon = 0
GrowthChng = 0
MonGrowth = 0

PrinPayYear = 0
PrinPayMonth = 0
PrinPayOff# = 0

BallYear = 0
BallMonth = 0

ChgIntYear = 0
ChgIntMonth = 0
NewRate = 0
RETURN

TurnMenuOn:
MENU 1,0,1
MENU 1,1,1
MENU 1,2,1
MENU 1,3,1
MENU 1,4,1
MENU 1,5,1
MENU 2,0,1
MENU 3,0,1
MENU 4,0,1
RETURN

TurnMenuOff:
MENU 1,0,0
MENU 2,0,0
MENU 3,0,0
MENU 4,0,0
RETURN

InitMenuOff:
MENU 1,1,0
MENU 1,2,0
MENU 1,3,0
MENU 1,4,0
MENU 1,5,0

MENU 3,0,0
MENU 4,0,0
RETURN

eiMenuOn:
MENU 1,0,1
MENU 1,1,1
MENU 1,2,0
MENU 1,3,0
MENU 1,4,0
MENU 1,5,0
MENU 1,6,1
MENU 2,0,1
MENU 3,0,0
RETURN

TableMenuOn:
MENU 1,0,1
MENU 1,1,0
MENU 1,2,0
MENU 1,3,0
MENU 1,4,0
MENU 1,5,0
MENU 2,0,0
MENU 3,0,1
RETURN

CheckMenu:
GOSUB TurnMenuOff
FirstMenu = MENU(0)
SecondMenu = MENU(1)
ON FirstMenu GOTO PickedOutput, PickedEvaluations, PickedAlter

PickedOutput:
ON SecondMenu GOTO PrinterRequester,MonthlyTable,PrtMonTable,YearlyTable,PrtYrTable,ExitSystem

PickedEvaluations:
ON SecondMenu GOTO PaymentDet,LengthDet,AffordLoans,EffectInt,PropApprec

PickedAlter:
ON SecondMenu GOTO AlterPayment,MonthlyGrowth,YearGrowth,BalloonPay,PartPrinPayOff,AlterIntr,ResetAll


PaymentDet:
IF AlreadyBegan = 0 THEN
AlreadyBegan = 1
CHAIN MERGE n1$, 1000, ALL, DELETE DeleteBegin-DeleteEnd
END IF
request1$ = "    Are you sure you want to start "
request2$ = "     a new payment determination?   "
Choice$ = n1$
GOTO NewProgram

LengthDet:
IF AlreadyBegan = 0 THEN
AlreadyBegan = 1
CHAIN MERGE n2$, 1000, ALL, DELETE DeleteBegin-DeleteEnd
END IF
request1$ = "    Are you sure you want to start "
request2$ = "   a new loan length determination? "
Choice$ = n2$
GOTO NewProgram

AffordLoans:
IF AlreadyBegan = 0 THEN
AlreadyBegan = 1
CHAIN MERGE n3$, 1000, ALL, DELETE DeleteBegin-DeleteEnd
END IF
request1$ = "    Are you sure you want to start   "
request2$ = " a new affordable loan determination?"
Choice$ = n3$
GOTO NewProgram

EffectInt:
IF AlreadyBegan = 0 THEN
AlreadyBegan = 1
CHAIN MERGE n4$, 1000, ALL, DELETE DeleteBegin-DeleteEnd
END IF
request1$ = "    Are you sure you want to start     "
request2$ = "a new effective interest determination?"
Choice$ = n4$
GOTO NewProgram

PropApprec:
IF AlreadyBegan = 0 THEN
AlreadyBegan = 1
CHAIN MERGE n5$, 1000, ALL, DELETE DeleteBegin-DeleteEnd
END IF
request1$ = " Are you sure you want to start a new"
request2$ = " property appreciation determination?"
Choice$ = n5$
GOTO NewProgram

EndMenuCheck:
IF YrTableSel <> 1 THEN
IF eiFlag = 0 THEN
GOSUB TurnMenuOn
ELSE
GOSUB eiMenuOn
END IF
IF MonTableSel = 1 THEN
GOSUB TableMenuOn
ELSEIF PrtMonSel = 1 THEN
PrtMonSel = 0
ELSEIF PrtYrSel = 1 THEN
PrtYrSel = 0
END IF
END IF
IF Count <= 0 THEN
GOSUB InitMenuOff
END IF
RETURN


REM ========================================================================   
InCheck:
FieldsFull = 0
HitReturn = 0

WHILE FieldsFull = 0

a$ = "":MoveCursorFlag = 0
WHILE a$ = ""
IF TIMER - NewTime >= .3 THEN CALL FlashCursor
a$ = INKEY$

WEND
CALL GetRoutine (Word$)
Value# = VAL(Word$)
IF MoveCursorFlag <> 0 THEN
NewTime = TIMER - .5
LOCATE Lin(Index),Strt(Index)
COLOR 2,BGColor(Index)
PRINT SPACE$(FieldLength(Index))
LOCATE Lin(Index),Strt(Index)
Saved$(Index) = Word$:Saved#(Index) = Value#
IF Saved#(Index) <> 0 THEN PRINT USING Use$(UseIndex(Index));Saved#(Index)
IF Index <> LastLine AND MoveCursorFlag = 1 THEN Index = Index + 1
IF Index <> 1 AND MoveCursorFlag = -1 THEN Index = Index - 1
Idx = 0
IF Index > LastLine THEN Index = LastLine
END IF
IF paFlag = 0 AND Saved#(2) <> 0 AND Saved#(3) <> 0 AND Saved#(4) <> 0 AND Saved#(5) <> 0 AND HitReturn = 1 THEN FieldsFull = 1
IF paFlag = 1 AND Saved#(1) <> 0 AND Saved#(2) <> 0 AND Saved#(3) <> 0 AND HitReturn = 1 THEN FieldsFull = 1
WEND

GOSUB TurnMenuOff
GOSUB SetValues
GOSUB Calculate
IF TooLarge = 0 THEN
GOSUB FindEffInt
GOSUB OutputEffInt
GOSUB OutputAnalysis
END IF
IF eiFlag = 0 THEN
GOSUB TurnMenuOn
ELSE
GOSUB eiMenuOn
END IF

IF Count < MaxComps GOTO InCheck

WaitLoop:
COLOR 3,2
LOCATE 2,8:PRINT " The Maximum  Number of Comparisons is 12, Make a Menu Selection "
GOTO WaitLoop


GetLoanInfo:
WINDOW 2, "General Loan Information",(0,73)-(374,126),22
LOCATE 2:PRINT " (Hit <RETURN> to keep current values.) "
PRINT
INPUT "Enter the date: ",TempDay$
IF TempDay$ <> "" THEN
Today$ = TempDay$
END IF
INPUT "Enter the name of the loan: ",TempName$
IF TempName$ <> "" THEN
LoanName$ = TempName$
END IF
WINDOW CLOSE 2
RETURN

ResetAll:
request1$ = "        Are you sure you want to"
request2$ = "         reset all alterations?"
title$ = "Reset All Alterations?"
wind%=2
OKleft = 52:OKtop = 36:OKright = 90:OKbottom = 50
CANCELleft = 192:CANCELright = 268
CALL Requester (wind%, title$, request1$, request2$, answer, OKleft, OKtop, OKright, OKbottom, CANCELleft, CANCELright)
IF answer = 1 THEN GOSUB ResetAlterVars
WINDOW CLOSE 2
GOTO EndMenuCheck

SUB GetRoutine (Var$) STATIC
SHARED a$, Idx, Index, MoveCursorFlag, HitReturn
IF (ASC(a$)>47 AND ASC(a$)<58) THEN AlphaNum
IF ASC(a$) = 46 THEN AlphaNum
IF ASC(a$) = 28 THEN CursorUp
IF ASC(a$) = 29 THEN CursorDown
IF ASC(a$) = 13 THEN Enter
IF ASC(a$) = 8 OR ASC(a$) = 31 OR ASC(a$) = 127 THEN BackSpace
GOTO EndGetRoutine
                                         
AlphaNum:
IF Idx = MaxLength(Index) THEN EndGetRoutine
COLOR 2,BGColor(Index)
IF LEN(TempVar$) = 0 THEN
LOCATE Lin(Index), Strt(Index)
PRINT SPACE$(FieldLength(Index))
END IF
TempVar$ = TempVar$ + a$
LOCATE Lin(Index),Strt(Index):PRINT TempVar$
Idx = Idx + 1
GOTO EndGetRoutine  

CursorDown:
IF Index <> LastLine THEN
MoveCursorFlag = 1
TempVar$ = ""
END IF
Var$ = Saved$(Index)
GOTO EndGetRoutine

CursorUp:
IF Index <> 1 THEN
MoveCursorFlag = -1
TempVar$ = ""
END IF
Var$ = Saved$(Index)
GOTO EndGetRoutine

Enter:
HitReturn = 1
IF LEN(TempVar$) <> 0 THEN
Var$ = TempVar$
TempVar$ = ""
Idx = 0
ELSE
Var$ = Saved$(Index)
END IF
MoveCursorFlag = 1
GOTO EndGetRoutine   

BackSpace:
IF Idx <> 0 THEN
TempVar$ = LEFT$(TempVar$,LEN(TempVar$)-1)
COLOR ,BGColor(Index)
LOCATE Lin(Index),Strt(Index)+Idx:PRINT " "; CHR$(8);
Idx = Idx - 1
END IF
GOTO EndGetRoutine
 
EndGetRoutine:
END SUB
                                                              
SUB FlashCursor STATIC 
SHARED Index,CurColChange,CursorColor,Cur$,NewTime,Idx
IF CursorColor = 2 THEN CursorColor = BGColor(Index) ELSE CursorColor = 2
LOCATE Lin(Index),Strt(Index)+Idx
COLOR ,CursorColor
PRINT Cur$

NewTime = TIMER
END SUB   

PrinterRequester:
GOSUB TurnMenuOff
request2$ = "        Ready the Printer Please"
request1$ = ""
title$ = "Printer Output"
wind%=2
OKleft = 52:OKtop = 36:OKright = 90:OKbottom = 50
CANCELleft = 192:CANCELright = 268

CALL Requester (wind%, title$, request1$, request2$, answer, OKleft, OKtop, OKright, OKbottom, CANCELleft, CANCELright)

IF answer = 1 THEN
LOCATE 3,1
COLOR 1,0
PRINT "    Select CANCEL to stop printing."
MOUSE ON
ON MOUSE GOSUB CancelPrint
OPEN "lpt1:" FOR OUTPUT AS 3
IF MonTableSel = 1 THEN
GOTO MonTableOutput
ELSEIF YrTableSel = 1 THEN
GOTO YrTableOutput
ELSEIF PrtMonSel = 1 THEN
GOTO AllYearsMon
ELSEIF PrtYrSel = 1 THEN
GOTO AllYearsYr
ELSE
GOTO PrinterOutput
END IF
200  CLOSE #3
MOUSE OFF
END IF
WINDOW CLOSE 2
GOTO EndMenuCheck

CancelPrint:
WHILE MOUSE(0)=0
WEND
m1=MOUSE(1):m2=MOUSE(2)
IF m1>CANCELleft AND m1<CANCELright AND m2>OKtop AND m2<OKbottom THEN
answer=0
LINE (CANCELleft+1,OKtop+1)-(CANCELright-1,OKbottom-1),3,bf
COLOR 2,3
LOCATE 6,1:PRINT PTAB(CANCELright-60);"CANCEL"
WHILE MOUSE(0)<>0
WEND
RETURN 200
END IF
RETURN

SUB Requester(wind%, title$, request1$, request2$, answer, OKleft, OKtop, OKright, OKbottom, CANCELleft, CANCELright) STATIC

WINDOW wind%,title$,(0,0)-(311,60),22
MaxWidth = INT(WINDOW(2)/8)
request1$=LEFT$(request1$,MaxWidth)
request2$=LEFT$(request2$,MaxWidth)
COLOR 1,0
PRINT:PRINT request1$:PRINT request2$
CALL DoubleButton (OKleft,OKtop,OKright,OKbottom)
CALL DoubleButton (CANCELleft,OKtop,CANCELright,OKbottom)

COLOR 1,0
LOCATE 6,1:PRINT PTAB(OKright-27);"OK";
PRINT PTAB(CANCELright-60);"CANCEL"

reqloop:
WHILE MOUSE(0)=0
WEND
m1=MOUSE(1):m2=MOUSE(2)
IF m1>OKleft AND m1 < OKright AND m2>OKtop AND m2<OKbottom THEN
answer=1
LINE (OKleft+1,OKtop+1)-(OKright-1,OKbottom-1),3,bf
COLOR 2,3
LOCATE 6,1:PRINT PTAB(OKright-27);"OK";
WHILE MOUSE(0)<>0
WEND
EXIT SUB
ELSE
IF m1>CANCELleft AND m1<CANCELright AND m2>OKtop AND m2<OKbottom THEN
answer=0
LINE (CANCELleft+1,OKtop+1)-(CANCELright-1,OKbottom-1),3,bf
COLOR 2,3
LOCATE 6,1:PRINT PTAB(CANCELright-60);"CANCEL"
WHILE MOUSE(0)<>0
WEND
EXIT SUB
ELSE
GOTO reqloop
END IF
END IF
GOTO reqloop
END SUB

SUB DoubleButton (left,top,right,bottom) STATIC
LINE (left,top)-(right,bottom),2,b
LINE (left-3,top-2)-(right+3,bottom+2),2,b
LINE (left-4,top-2)-(left-4,bottom+2),2
LINE (right+4,top-2)-(right+4,bottom+2),2
END SUB

ExitSystem:
request2$ = "    Are you sure you want to QUIT? "
request1$ = ""
title$ = "Exit?"
wind%=2
OKleft = 52:OKtop = 36:OKright = 90:OKbottom = 50
CANCELleft = 192:CANCELright = 268

CALL Requester (wind%, title$, request1$, request2$, answer, OKleft, OKtop, OKright, OKbottom, CANCELleft, CANCELright)

IF answer = 1 THEN  SYSTEM
WINDOW CLOSE 2
GOTO EndMenuCheck

NewProgram:
title$ = "Start New Module?"
wind%=2
OKleft = 52:OKtop = 36:OKright = 90:OKbottom = 50
CANCELleft = 192:CANCELright = 268
CALL Requester (wind%, title$, request1$, request2$, answer, OKleft, OKtop, OKright, OKbottom, CANCELleft, CANCELright)
WINDOW CLOSE 2
IF answer = 1 THEN CHAIN MERGE Choice$, 1000, ALL, DELETE DeleteBegin-DeleteEnd
GOTO EndMenuCheck

DeleteBegin:
DeleteEnd:

