MESSAGE "Writing pension procedures to library..." PROC Ask_For_Output() PRIVATE File_Id Subset_Table = "P_Output" ECHO OFF FORMKEY MOVETO "Output" MOVETO FIELD "File_No" File_Id = [Pensions->File_No] + [Pensions->Version] LOCATE File_Id if RetVal then ; output record located COPYTOARRAY Temp_Array CREATE Subset_Table LIKE "Output" VIEW Subset_Table COEDITKEY COPYFROMARRAY Temp_Array DO_IT! FORMKEY Select_Forms() DELETE Subset_Table else MESSAGE("Please compute and save results of this entry first!") endif MOVETO "Pensions" FORMKEY ENDPROC; WRITELIB Off_Lib Ask_For_Output PROC Discount(DR, IR, Max_COLA, Pmts, Monthly) PRIVATE COLA, PV_Pmt, Months_Delayed DR = DR * 0.01/12 ; if (IR = 0) then ; Payout = Round(Pmts * Monthly,0) ; Fund_Bal = Round(PV(Monthly, DR, Pmts),0) ; else ; F = "TEMP.TXT" ; FILEWRITE F FROM "This is a printout of the annuity stream."+"\n"+"\n" Months_Delayed = 12; number of monthly payments until COLA kicks in Payout = 0 Fund_Bal = 0 DR = 1/(1+DR) FOR N FROM 1 to Pmts if (IR > 0.0) then if (N > Months_Delayed) AND (MOD(N,12) = 1) then if (IR < 1.0) then COLA = Round(Monthly*IR,2) else COLA = IR endif if (Max_COLA > 0.0) AND (COLA > Max_COLA) then COLA = Max_COLA endif Monthly = Monthly + COLA endif; (if N > Months_Delayed AND Divisible by 12) endif; (if Increase Rate > 0.0) Payout = Payout + Monthly PV_Pmt = Round(Monthly * Round(POW(DR,N),5),2) Fund_Bal = Fund_Bal + PV_Pmt ; PRINT FILE F FORMAT("W5", N), FORMAT("W15.2,EC", Monthly), FORMAT("W15.2,EC", Payout), FORMAT("W15.2,EC", PV_Pmt), FORMAT("W15.2,EC", Fund_Bal),"\n" ENDFOR; FOR N FROM 1 to Pmts Payout = Round(Payout,0) Fund_Bal = Round(Fund_Bal,0) ; endif; if (IR > 0) Last_Pmt = Monthly ENDPROC; WRITELIB Off_Lib Discount PROC Life_Stats( Age_1, Age_2, Race_Sex_Code ) PRIVATE I, N, Alive_Now, Alive_Then FORMKEY; get out of pension table form view MOVETO Life_Table MOVETO FIELD "Age" LOCATE INT(Age_1) ; integer, current age MOVETO FIELD "NA_" + Race_Sex_Code ; F = "TEMP.TXT" FOR I FROM 1 to ARRAYSIZE(Num_Alive) ; copy number alive to array Num_Alive[I] = [] ; PRINT FILE F FORMAT( "W9.2", I ) ; PRINT FILE F FORMAT( "W9.2", Num_Alive[I] ), "\n" DOWN ENDFOR I = ARRAYSIZE(Num_Alive) Alive_Now = Round(Num_Alive[1]-(Num_Alive[1]-Num_Alive[2])*(Age_1-INT(Age_1)),0) Alive_Then = Round(Num_Alive[I-1]-(Num_Alive[I-1]-Num_Alive[I])*(Age_2-INT(Age_2)),0) Num_Alive[1] = Alive_Now Num_Alive[I] = Alive_Then ; PRINT FILE F FORMAT( "W9.2", Num_Alive[1] ), "\n" ; PRINT FILE F FORMAT( "W9.2", Num_Alive[I] ), "\n" Mortality = Round((Alive_Then/Alive_Now), 4) if (Mortality > 1.0) then Mortality = 1.0 endif LEFT UP N = [] UP I = [] LE = Round(I-(I-N)*(Age_2-INT(Age_2)),2) ENDPROC; WRITELIB Off_Lib Life_Stats PROC Is_Vested(Full, Per_Vested, V_Date) ; check for expected value of future vesting PRIVATE I, Prob, Expected Expected = Round(Full*Per_Vested*0.01, 2) if (Per_Vested < 100.0) then MOVETO "Separate" if (NIMAGERECORDS() > 0) then Prob = 1 - [Separation_Rate] * 0.01 if (Prob < 1.0) then MOVETO "Schedule" FOR I FROM 1 TO NIMAGERECORDS() MOVETO RECORD I if ([Vests_On]<> BLANKDATE()) And ([Vests_At] > 0.0) then Expected = Expected + Round(Full*[Vests_At]*0.01*POW(Prob, ([Vests_On]-[Pensions->Valu])/365 ), 2) endif ENDFOR endif endif MOVETO "Pensions" ; move to next table endif RETURN Expected ENDPROC; WRITELIB Off_Lib Is_Vested PROC Death_Benefit(Is_Age, Pay_Age, Last_Pmt) ; check for death benefit -- Lump1, Lump2 PRIVATE N, I, DB_1, DB_2, B1, B2, Partial, Probability, B_Age, B_Starts MOVETO "Death" DB_1 = 0.0 DB_2 = 0.0 if (NIMAGERECORDS() > 0) then if ([Lump1] > 0.0) Or ([Lump2] > 0.0) then B1 = [Lump1] B2 = [Lump2] N = ARRAYSIZE(Num_Alive) FOR I FROM 1 to N - 1 Probability = 1 - Round(Num_Alive[I+1]/Num_Alive[I], 5) if (I = 1) then Partial = Is_Age - INT(Is_Age) else if (I = N - 1) then Partial = Pay_Age - INT(Pay_Age) else Partial = 1 endif endif B1 = Round(B1*(1+[Growth1]*.01*Partial)/(1+[Disc1]*.01*Partial), 0) B2 = Round(B2*(1+[Growth2]*.01*Partial)/(1+[Disc2]*.01*Partial), 0) DB_1 = DB_1 + Round((B1+B2)*Probability,0) ENDFOR endif ; pre-payment lump sum distribution endif ; a record exists R["PV_Pre_DB"] = DB_1 R["PV_Annuity"] = R["PV_AMT"] + DB_1 if (R["PV_Annuity"] >= R["WV_AT"]) then R["PV_Plan"] = R["PV_Annuity"] else R["PV_Plan"] = R["WV_AT"] endif ENDPROC; WRITELIB Off_Lib Death_Benefit PROC Marriage_Factor() ; check for marriage factor --- first dates, then years, finally % PRIVATE M, S, M_Per MOVETO "Marriage" M = 0.0 S = 0.0 M_Per = 100.0 if (NIMAGERECORDS() > 0) then ; calculate years married based on dates, or accept entry if ([Married_From] <> BLANKDATE()) And ([Married_To] <> BLANKDATE()) then M = Round(([Married_To]-[Married_From])/365,2) [Married_Years] = M else if ([Married_Years] > 0.0) then M = [Married_Years] endif endif ; calculate years of service based on dates, or accept entry if ([Service_From] <> BLANKDATE()) And ([Service_To] <> BLANKDATE()) then S = Round(([Service_To]-[Service_From])/365,2) [Service_Years] = S else if ([Service_Years] > 0.0) then S = [Service_Years] endif endif ; calculate marriage factor, or accept entry if (M > 0.0) And (S >= M) then M_Per = Round(M/S, 4) * 100 [Marital_%] = M_Per else if ([Marital_%] > 0.0) then M_Per = [Marital_%] endif endif endif; if an image is present R["Years_Married"] = M R["Years_Service"] = S R["Marr_Per"] = M_Per R["Marr_Amt"] = Round(M_Per * 0.01 * R["PV_Plan"], 0) MOVETO "Pensions" ENDPROC; WRITELIB Off_Lib Marriage_Factor PROC Save_Results() PRIVATE File_Id, I, J MESSAGE "Saving results of calculation..." FORMKEY; put results table into table view CTRLHOME DYNARRAY Transfer[] J = NFIELDS("Results") FOR I FROM 1 TO J TAB Transfer[FIELD()] = FIELDSTR() ENDFOR DEL MOVETO "Output" MOVETO FIELD "File_No" File_Id = [Pensions->File_No] + [Pensions->Version] LOCATE File_Id if (RetVal = False) then END DOWN ; open up a blank row endif [File_No] = File_Id FOREACH Element IN Transfer MOVETO FIELD Element [] = Transfer[Element] ENDFOREACH if (R["Mortality"] < 1.0) then [Mortality] = "0" + [Mortality] endif [Title] = [Pensions->Title] [First] = [Pensions->First] [Last] = [Pensions->Last] if ( SUBSTR([Last], LEN([Last]), 1) = "s") then [Last's] = [Last] + "'" else [Last's] = [Last] + "'s" endif [Plan_Name] = [Pensions->Plan_Name] [Birth] = FORMAT("d1", [Pensions->Birth]) if (SEARCH(" ", [Birth]) = 1) then [Birth] = "0" + SUBSTR([Birth], 2, 7) endif [Race] = [Pensions->Race] [Sex] = [Pensions->Sex] [Info] = FORMAT("d2", [Pensions->Info]) I = SEARCH(" ", [Info]) if (I > 1) then [Info] = SUBSTR([Info], 1, I) + SUBSTR([Info], I+2, 15) endif [Valu] = FORMAT("d2", [Pensions->Valu]) I = SEARCH(" ", [Valu]) if (I > 1) then [Valu] = SUBSTR([Valu], 1, I) + SUBSTR([Valu], I+2, 15) endif [Vested_Per] = FORMAT("w7.2", [Pensions->Vested_Per]) if ([Pensions->Vested_Per] < 100.0) then [Vest_Amt_Text] = "Monthly Benefit Reduced For Probability of Vesting" endif if ([Pensions->COLA] > 0.0) then [Cola_Text] = "Expected Annual Increase In Benefits" if ([Pensions->COLA] > 1.0) then [COLA] = FORMAT("W7.2, E$", [Pensions->COLA]) else [COLA] = FORMAT("W5.2", [Pensions->COLA]*100) + "%" endif endif [Initial_Amt_Text] = "Accrued Monthly Benefit" if ([Pensions->Pre_DR] = 0) then [Initial_Amt_Text] = "Present Value of Monthly Annuity" [PV_Plan_Text] = "Money Purchase Annuity Benefit" else if ([Pensions->Pre_DR] < [Pensions->Post_DR]) then [PV_Plan_Text] = "Money Purchase Annuity Benefit" else [PV_Plan_Text] = "Formula Method Annuity Benefit " endif endif if (R["PV_Annuity"] < R["WV_AT"]) then [PV_Plan_Text] = "Separation Benefit" endif if ([Pensions->Tax_Rate] > 0.0) then [V_Title] = "after-tax present value" [Tax_Rate_Text] = "Estimated Tax Liability" [PV_AT_Text] = "After-tax Present Value of Annuity" else [V_Title] = "" [Tax_Rate_Text] = "" [PV_AT_Text] = "" endif if ([Pensions->Withdrawal] > 0.0) then [With_Text] = "Lump Sum Payment Option in Lieu of Annuity" if ([Pensions->Tax_Rate] > 0) then [With_AT_Text] = " After-tax Value of Lump Sum Payment Option" endif else [With_Text] = "No lump sum payment option available" [With_AT_Text] = "" endif if (R["PV_Pre_DB"] > 0.0) then [PV_Ann_Text] = "Total Present Value, Including Death Benefit" [Pre_DB_Text] = "Present Value of Pre-retirement Death Benefit" else [Pre_DB_Text] = "" endif if (R["Marr_Per"] < 100.0) then [Years_Married] = FORMAT("W7.2", R["Years_Married"]) [Years_Service] = FORMAT("W7.2", R["Years_Service"]) [Married_Text] = "Years of Service While Married" [Service_Text] = "Total Years of Plan Service" [Marr_Per_Text] = "Percent of Benefit Accrued While Married" [Marr_Amt_Text] = "Marital Component" else [Married_Text] = "" [Service_Text] = "" [Marr_Per_Text] = "" [Marr_Amt_Text] = "" endif MESSAGE "" ENDPROC; WRITELIB Off_Lib Save_Results PROC Life_Exp_Compute() PRIVATE LE, Mortality, Payout, Fund_Bal, Last_Pmt ECHO OFF if (SYSMODE() <> "CoEdit") then COEDITKEY endif MOVETO "Pensions" POSTRECORD NOPOST LEAVELOCKED if NOT RetVal then MESSAGE "Duplicate file/version entry - please change!" MOVETO FIELD "Version" RETURN endif MESSAGE "Computing present value..." R["Age"] = Round(([Valu]-[Birth])/365.25, 2) if ([Start_Age] > R["Age"]) then R["Start_Age"] = [Start_Age] else R["Start_Age"] = R["Age"] [Start_Age] = R["Age"] POSTRECORD NOPOST endif R["Accrued"] = [Accrued] R["COLA"] = [COLA] R["Pre_DR"] = [Pre_DR] R["Post_DR"] = [Post_DR] R["Tax_Rate"] = [Tax_Rate] R["Years_From"] = R["Start_Age"] - R["Age"] ARRAY Num_Alive[INT(R["Start_Age"])-INT(R["Age"])+2] ; get life expectancy and mortality factor Life_Stats(R["Age"], R["Start_Age"], SUBSTR([Race],1,1)+SUBSTR([Sex],1,1)) MOVETO "Pensions" FORMKEY; return to form view R["Life_Exp"] = LE R["Payments"] = INT(LE*12) R["Mortality"] = Mortality R["EV_Monthly"] = Is_Vested([Accrued], [Vested_Per], [Valu]) Discount([Post_DR], [COLA], [Max_COLA], R["Payments"], R["EV_Monthly"]) R["Pay_Out"] = Payout R["Fund_Value"] = Fund_Bal R["PV"] = Round(Fund_Bal * POW((1+[Pre_DR]*0.01/12), -R["Years_From"]*12), 0) R["PV_AM"] = Round(R["PV"] * Mortality, 0 ) R["PV_AMT"] = Round(R["PV_AM"] * (1-[Tax_Rate]*0.01), 0) R["Withdrawal"] = [Withdrawal] R["WV_AT"] = Round(R["Withdrawal"] * (1-[Tax_Rate]*0.01), 0) Death_Benefit( R["Age"], R["Start_Age"], Last_Pmt ) Marriage_Factor() POSTRECORD NOPOST FORMKEY MOVETO "Results" COPYFROMARRAY R PICKFORM 1 MESSAGE "" PROMPT " Press ESC when finished viewing." BEEP WAIT FIELD UNTIL "ESC" PROMPT "" if Response_Is_Yes("SAVE RESULTS", "Save Results of PV Calculation?") then Save_Results() else DEL endif MOVETO "Pensions" FORMKEY ; redisplay pension form PROMPT Prompt_String ENDPROC; WRITELIB Off_Lib Life_Exp_Compute PROC Actuarial_Compute() PRIVATE Increase, Race_Sex_Code, Monthly, COLA, Max_COLA, Pre_Dr, Post_DR, TEP, PV_TEP, PV_TEP_NOW TEP = 0 PV_TEP = 0 PV_TEP_NOW = 0 ECHO OFF if (SYSMODE() <> "CoEdit") then COEDITKEY endif MOVETO "Pensions" POSTRECORD NOPOST LEAVELOCKED if NOT RetVal then MESSAGE "Duplicate file/version entry - please change!" MOVETO FIELD "Version" RETURN endif MESSAGE "Computing present value..." R["Age"] = Round(([Valu]-[Birth])/365.25, 2) if ([Start_Age] > R["Age"]) then R["Start_Age"] = [Start_Age] else R["Start_Age"] = R["Age"] [Start_Age] = R["Age"] POSTRECORD NOPOST endif Current_Age = INT(R["Age"] * 12) Start_Age = INT(R["Start_Age"] * 12) First_Payment_Age = Start_Age + 1 ; first payment is made one month after retirement Array_Size = 1200 - Start_Age Array Pmt_Age[Array_Size] ARRAY Num_Alive[Array_Size] ARRAY Prob_Surv[Array_Size] ARRAY Payment[Array_Size] ARRAY EV_Payment[Array_Size] ARRAY Disc_Factor[Array_Size] ARRAY EPV_Payment[Array_Size] R["Accrued"] = [Accrued] R["EV_Monthly"] = Is_Vested([Accrued], [Vested_Per], [Valu]) R["COLA"] = [COLA] R["Pre_DR"] = [Pre_DR] R["Post_DR"] = [Post_DR] R["Tax_Rate"] = [Tax_Rate] R["Years_From"] = R["Start_Age"] - R["Age"] R["Tax_Rate"] = [Tax_Rate] R["Withdrawal"] = [Withdrawal] R["WV_AT"] = Round(R["Withdrawal"] * (1-[Tax_Rate]*0.01), 0) Race_Sex_Code = SUBSTR([Race],1,1) + SUBSTR([Sex],1,1) Monthly = R["EV_Monthly"] COLA = [COLA] Max_COLA = [Max_COLA] Increase = COLA Pre_DR = [Pre_DR] Pre_DR = 1/(1+Pre_DR*0.01/12) Post_DR = [Post_DR] Post_DR = 1/(1+Post_DR*0.01/12) ; (******************* New portion of code ***************) FORMKEY; get out of pension table form view MOVETO Mort_Table MOVETO FIELD "Month" LOCATE Current_Age MOVETO FIELD "NA_" + Race_Sex_Code Num_Alive_Now = [] MOVETO FIELD "Month" LOCATE First_Payment_Age MOVETO FIELD "NA_" + Race_Sex_Code FOR I FROM 1 to Array_Size ; copy number alive to array Num_Alive[I] = [] Pmt_Age[I] = Start_Age + I Prob_Surv[I] = Round((Num_Alive[I] / Num_Alive_Now), 6) if (Increase > 0.0) then if (I > 12) AND (MOD(I,12) = 1) then if (Increase < 1.0) then COLA = Round(Monthly * Increase,2) else COLA = Increase endif if (Max_COLA > 0.0) AND (COLA > Max_COLA) then COLA = Max_COLA endif Monthly = Monthly + COLA endif; (if I > 12 AND Remainder = 1) endif; (if Increase > 0.0) Payment[I] = Monthly EV_Payment[I] = Round((Monthly * Prob_Surv[I]), 2) TEP = TEP + EV_Payment[I] Disc_Factor[I] = Round(POW(Post_DR,I),6) EPV_Payment[I] = Round((EV_Payment[I] * Disc_Factor[I]), 2) PV_TEP = PV_TEP + EPV_Payment[I] if (I < Array_Size) then DOWN endif ENDFOR TEP = Round(TEP,0) PV_TEP = Round(PV_TEP,0) PV_TEP_NOW = Round(PV_TEP * Round(POW(Pre_DR,(Start_Age-Current_Age)),6),0) Print_To_File = "N" if (Print_To_File = "Y") then F = "TEMP.TXT" FILEWRITE F FROM "This is a printout of the annuity stream. \n \n" PRINT FILE F "Current Age: ", FORMAT("W9", Current_Age), "\n" PRINT FILE F "Age at First Payment: ", FORMAT("W9", First_Payment_Age), "\n" PRINT FILE F "Number Alive at Present: ", FORMAT( "W9", Num_Alive_Now), "\n", "\n", "\n", "\n" PRINT FILE F "Pmt # Age #Alive Prob. Surv. Payment Exp. Value Disc. Fact. PVEP", "\n", "\n" FOR I FROM 1 to Array_Size PRINT FILE F FORMAT( "W6", I ) PRINT FILE F FORMAT( "W6", Pmt_Age[I] ) PRINT FILE F FORMAT( "W9", Num_Alive[I] ) PRINT FILE F FORMAT( "W10.6", Prob_Surv[I] ) PRINT FILE F FORMAT( "W12.2", Payment[I] ) PRINT FILE F FORMAT( "W12.2", EV_Payment[I] ) PRINT FILE F FORMAT( "W14.6", Disc_Factor[I] ) PRINT FILE F FORMAT( "W14.2", EPV_Payment[I] ), "\n" ENDFOR PRINT FILE F "\n" PRINT FILE F "Totals: ", FORMAT( "W10", TEP), FORMAT( "W28", PV_TEP), "\n", "\n" PRINT FILE F "Total Expected Payout: ", FORMAT( "W10", TEP), "\n", "\n" PRINT FILE F "Total Present Value of Expected Payments @ Commencement: ", FORMAT( "W10", PV_TEP), "\n", "\n" PRINT FILE F "Total Present Value of Expected Payments Now: ", FORMAT( "W10", PV_TEP_Now), "\n", "\n" endif; Print_To_File = "Y" MOVETO "Pensions" FORMKEY; return to form view R["Life_Exp"] = 0.0 R["Payments"] = 0.0 R["Mortality"] = 0.0 R["PV_AM"] = 0.0 R["Pay_Out"] = TEP R["Fund_Value"] = PV_TEP R["PV"] = PV_TEP_NOW R["PV_AMT"] = Round(R["PV"] * (1-[Tax_Rate]*0.01), 0) ; skip death benefit calculation for now, set DB values to zero ; Death_Benefit( R["Age"], R["Start_Age"], Monthly ) R["PV_Pre_DB"] = 0.0 R["PV_Annuity"] = R["PV_AMT"] + R["PV_Pre_DB"] if (R["PV_Annuity"] >= R["WV_AT"]) then R["PV_Plan"] = R["PV_Annuity"] else R["PV_Plan"] = R["WV_AT"] endif ; (******************* balance of original compute procedure ***************) Marriage_Factor() POSTRECORD NOPOST FORMKEY MOVETO "Results" COPYFROMARRAY R PICKFORM 1 MESSAGE "" PROMPT " Press ESC when finished viewing." BEEP WAIT FIELD UNTIL "ESC" PROMPT "" if Response_Is_Yes("SAVE RESULTS", "Save Results of PV Calculation?") then Save_Results() else DEL endif MOVETO "Pensions" FORMKEY; redisplay pension form PROMPT Prompt_String ENDPROC; WRITELIB Off_Lib Actuarial_Compute PROC Pension_Wait_Proc(TriggerType, EventInfo, CycleNumber) PRIVATE Key_Code, Menu_Pick if (EventInfo["TYPE"] = "KEY") then Key_Code = EventInfo["KEYCODE"] SWITCH ; ALT A - Compute Using Actuarial Method CASE (Key_Code = -30) : if ISFIELDVIEW() then DO_IT! endif MOVETO "Pensions" Actuarial_Compute() ; pv of a pension Main_Table_Menu() RETURN 1 ; ALT L - Compute using Life Exepctancy Method CASE (Key_Code = -38) : if ISFIELDVIEW() then DO_IT! endif MOVETO "Pensions" Life_Exp_Compute() ; pv of a pension Main_Table_Menu() RETURN 1 ; F9 - COEDIT CASE (Key_Code = -67) : RETURN Main_Table_Edit() ; F2 - DO_IT! CASE (Key_Code = -60) : if ISEMPTY(Main_Table) then RETURN Main_Table_Clear() else RETURN Main_Table_End_Edit() endif ; F8 - CLEAR CASE (Key_Code = -66) : RETURN Main_Table_Clear() ; DELETE CASE (Key_Code = -83) : if (SYSMODE() = "CoEdit") then RETURN Display_Delete_Box() else RETURN 1 endif ; + or - to change date by day CASE (Key_Code = 43) OR (Key_Code = 45) : RETURN Change_Date(Key_Code) OTHERWISE : SOUND 400 100 RETURN 1 ENDSWITCH endif if (EventInfo["MESSAGE"] = "MENUSELECT") then Menu_Pick = EventInfo["MENUTAG"] SWITCH CASE (Menu_Pick = "Edit\Mode") : RETURN Main_Table_Edit() CASE (Menu_Pick = "Main\Mode") : if ISEMPTY(Main_Table) then RETURN Main_Table_Clear() else RETURN Main_Table_End_Edit() endif CASE (Menu_Pick = "Ask") : Ask_For_Output() RETURN 1 CASE (Menu_Pick = "Close\Yes") : RETURN Main_Table_Clear() CASE (Menu_Pick = "Close\No") : RETURN 1 OTHERWISE : SOUND 400 100 RETURN 1 ENDSWITCH endif SOUND 400 100 RETURN 1 ; safety valve ENDPROC WRITELIB Off_Lib Pension_Wait_Proc PROC Pension_Table_Wait() ; Life Expectancy Method uses LifeTabl Life_Table = "LifeTabl" ; Actuarial Method uses NumberAl Mortailty Table Mort_Table = "NumberAl" R_Table = "Results" Prompt_String = " Alt-L for Life Expectancy Method; Alt-A for Actuarial Method" Main_Table_View("Pensions", 1, 0); place pension table on workspace in form view ECHO OFF END; move to last record in pension table FORMKEY; move from form view to table view VIEW Life_Table VIEW Mort_Table VIEW "Output" VIEW R_Table COEDITKEY COPYTOARRAY R DO_IT! MOVETO "Pensions" FORMKEY Main_Table_Edit() PROMPT Prompt_String ECHO NORMAL WAIT WORKSPACE PROC "Pension_Wait_Proc" MESSAGE "MENUSELECT" ; TRIGGER "ARRIVEFIELD" KEY -60, -66, -67, -83, -38, -30, 43, 45 ; DO_IT Clear Edit Delete Alt-L Alt-A + - ; F2 F8 F9 DEL LECompute ActCompute ENDWAIT ECHO OFF EMPTY "Output"; empty output table every time script is exited CLEARALL PROMPT "" MESSAGE "" ENDPROC; WRITELIB Off_Lib Pension_Table_Wait RELEASE PROCS ALL