Life Insurance Estimater

This file is part of and SINCUS Exchange Tape 102 - Utilities & Business. Download the collection to get this file.
Developer(s): John Colonna
Date: 1983
Type: Program
Platform(s): TS 2068
Tags: Finance

This program estimates how much life insurance a user needs, based on a formula adapted from a 1983 Parade Magazine article by Andrew Tobias. It collects the user’s take-home pay (at 75%), expected Social Security benefits, a chosen time horizon from a fixed table of multipliers, a lump-sum cushion, and existing assets, then computes the insurance gap. The title screen uses block graphic characters (█) and INVERSE text to render a decorative banner with BORDER, PAPER, and INK commands for a styled presentation. A subroutine at line 2000 handles paged output using FLASH text and PAUSE 0 for keypress-gated screen clearing, and the program supports COPY to print the summary or restart via a C/A prompt.


Program Analysis

Program Structure

The program is divided into clearly separated functional blocks:

  1. Lines 5–20: REM headers and splash screen subroutine call.
  2. Lines 100–195: Explain the method and collect 75% take-home pay (p).
  3. Lines 200–290: Collect Social Security annual benefit (b).
  4. Lines 300–490: Compute the annual income gap, look up the time-period multiplier (a), and calculate total money needed.
  5. Lines 500–690: Collect lump-sum expenses (l) and existing assets (gl).
  6. Lines 700–880: Display a formatted summary and offer COPY or restart.
  7. Lines 1000–1500: Title screen subroutine using block graphics and INVERSE text.
  8. Lines 2000–2200: Paged-output “press any key” subroutine.
  9. Line 9999: SAVE routine with auto-run.

Input Variables

VariableDescription
p75% of annual take-home pay (income needed)
bAnnual Social Security benefits
tTime period in years (from fixed table)
aMultiplier corresponding to t
lLump sum for funeral/debt expenses
glExisting group life insurance and assets
n$User response for COPY or AGAIN prompt

Time-Period Multiplier Table

Lines 390–450 implement a lookup table via sequential IF statements, mapping the user’s chosen time period to a present-value multiplier. This approach assumes a fixed interest/discount rate baked into each multiplier value:

Years (t)Multiplier (a)
54.7
108.7
1512
2015
2518
3020
5026

The validation at line 385 (IF t<5 OR t>50 THEN GO TO 380) re-prompts if the value is out of range, but does not catch invalid values between valid table entries (e.g., entering 7 passes validation but matches no IF, leaving a uninitialized or holding a stale value from a previous run). This is a latent bug.

Paged Output Subroutine

The subroutine at lines 2000–2200 is called repeatedly (lines 195, 290, 490, 560, 690, and 1450) to pause between screens. It uses FLASH 1 to draw attention to the prompt at the bottom of the screen, then PAUSE 0 to wait for any keypress before issuing CLS. This is an efficient and idiomatic screen-paging pattern.

Title Screen and Display Techniques

The splash screen subroutine (lines 1000–1500) sets BORDER 1, PAPER 1, and INK 7 (blue background, white text), then builds a banner using the \:: block graphic (█) printed with TAB positioning to create decorative borders around the words “LIFE”, “INSURANCE”, and “ESTIMATER”. INVERSE 1 is used for the text between the block-graphic borders to create a highlighted effect.

Summary Screen

Lines 710–800 use INVERSE 1 on label strings and TAB positioning for the corresponding numeric values, creating a rudimentary columnar layout. The final insurance need is computed inline as (((a*(p-b))+l)-gl) and displayed with INVERSE 1 at line 800 to highlight the result.

Notable Techniques and Idioms

  • The variable name gl suggests “group life” insurance/assets, a meaningful mnemonic.
  • The COPY command at line 860 sends the current screen to a ZX Printer, enabling a paper record of the insurance summary.
  • Line 870 uses RUN 100 rather than GO TO 100, which clears all variables before restarting — appropriate here since all values should be fresh for a new estimate.
  • Long explanatory text is crammed into PRINT string literals that wrap naturally at the 32-column display width, with deliberate breaks managed by the programmer to avoid mid-word splits.
  • Line 800 contains a semicolon-separated mix of a literal string, TAB, and an expression, demonstrating composite PRINT statement construction for alignment.

Bugs and Anomalies

  • Unguarded multiplier assignment: As noted, entering a year value between 5 and 50 that does not exactly match a table entry (e.g., 12) passes the range check at line 385 but leaves a at whatever its previous value was, silently producing an incorrect result.
  • Typo in program title: “ESTIMATER” is consistently used throughout (lines 5, 100, 1060) — this appears to be intentional stylization rather than a bug, as it matches the Parade Magazine source.
  • PAUSE 0 / CLS pattern: The PAUSE 0 at line 2100 consumes a keypress but CLS immediately follows without re-displaying any screen content, so the user sees a blank screen momentarily before the calling code continues — a minor cosmetic issue.
  • Line 800 apostrophe: The ' mid-PRINT statement acts as a newline within the print list, moving to the next line before the TAB 13 and final value — this is intentional formatting to split the label text from the dollar amount.

Content

Appears On

The workhorse tape — assemble Z80 code, manage databases, analyze statistics, cast I Ching hexagrams, balance your checkbook, and switch between four font styles. SINCUS Tape 102 turns the TS 2068 into a serious productivity machine.

Related Products

Related Articles

Related Content

Image Gallery

Source Code

    5 REM Life Insurance Estimat-er from PARADE MAGAZINE, April  24, 1983, by Andrew Tobias
   10 REM  Adapted for computer  use by John Colonna, SINCUS
   20 GO SUB 1000
  100 PRINT : PRINT : PRINT : PRINT "    LIFE INSURANCE ESTIMATER"
  110 PRINT : PRINT : PRINT 
  120 PRINT "     Simply stated the amount oflife insurance you need is equalto the amount needed to replace you financially. By using this  program you can estimate  what  your  family  would  need.  The first step is to determine 75%  of your take-home pay."
  150 INPUT "Enter 75% of your annual take-  home pay. ";p
  170 PRINT : PRINT 
  180 PRINT "   75% of annual"
  190 PRINT "   take-home pay   =   $";p
  195 GO SUB 2000
  200 PRINT : PRINT : PRINT : PRINT : PRINT 
  220 PRINT "     The next important questionis to find out the Social Secur-ity benefits your family could  expect to receive. The current  range is between $5000 to $16000(tax-free) a year. Contact your local Security Security office."
  230 INPUT "Enter Social Security yearly    benefits. ";b
  250 PRINT : PRINT : PRINT : PRINT : PRINT "    S. S. benefits  =  $";b
  290 GO SUB 2000
  300 PRINT : PRINT 
  320 PRINT "     The difference between yourannual income needed (";p;") andyour Social Security benefits   (";b;") is $";p-b;"."
  330 PRINT "     This annual insurance gap  you'll want life insurance to   make up, but you must decide forhow many years. This depends on the  ages  of  your  spouse and children. Choose a time  period from the table."
  350 PRINT : PRINT "         NUMBER OF YEARS"
  360 PRINT 
  370 PRINT "5   10   15   20   25   30   50"
  380 INPUT "Enter time period from above. ";t
  385 IF t<5 OR t>50 THEN GO TO 380
  390 IF t=5 THEN LET a=4.7
  400 IF t=10 THEN LET a=8.7
  410 IF t=15 THEN LET a=12
  420 IF t=20 THEN LET a=15
  430 IF t=25 THEN LET a=18
  440 IF t=30 THEN LET a=20
  450 IF t=50 THEN LET a=26
  470 PRINT : PRINT "     The amount of money needed for the next ";t;" years is $";a*(p-b);"."
  490 GO SUB 2000
  500 PRINT : PRINT : PRINT : PRINT : PRINT 
  520 PRINT "     Now you must add a lump sumas  a  cushion  for  funeral ex-penses, debts,  etc.,  at least half a year's salary."
  550 INPUT "Enter lump sum. ";l
  551 PRINT : PRINT : PRINT : PRINT : PRINT : PRINT "     Lump sum   =    $";l
  560 GO SUB 2000
  600 PRINT : PRINT : PRINT : PRINT 
  620 PRINT "     Now you must subtract what-ever group life insurance you   may have at work and also your  assets such as savings accounts,stocks,  retirement  accounts,  etc."
  630 INPUT "Enter your assets. ";gl
  640 PRINT : PRINT : PRINT : PRINT : PRINT "    Total assets   =   $";gl
  690 GO SUB 2000
  700 PRINT : PRINT : PRINT "SUMMARY OF LIFE INSURANCE NEEDS"
  710 PRINT : PRINT : PRINT INVERSE 1;"Annual Income Needed"; INVERSE 0;TAB 23;p
  720 PRINT : PRINT INVERSE 1;"Annual S. S. Benefits"; INVERSE 0;TAB 23;b
  730 PRINT : PRINT INVERSE 1;"No. of Years Needed"; INVERSE 0;TAB 26;t
  740 PRINT : PRINT INVERSE 1;"Amt. of Money Needed"; INVERSE 0;TAB 22;a*(p-b)
  750 PRINT : PRINT INVERSE 1;"Lump Sum Expenses"; INVERSE 0;TAB 23;l
  760 PRINT : PRINT INVERSE 1;"Assets"; INVERSE 0;TAB 23;gl
  800 PRINT : PRINT : PRINT " Your life insurance needs are-  "'TAB 13;"$"; INVERSE 1;(((a*(p-b))+l)-gl)
  850 INPUT "COPY or AGAIN (C/A)? ";n$
  860 IF n$="C" OR n$="c" THEN COPY 
  870 IF n$="A" OR n$="a" THEN RUN 100
  880 GO TO 850
  999 STOP 
 1000 BORDER 1: PAPER 1: INK 7: CLS 
 1010 PRINT : PRINT : PRINT : PRINT 
 1015 PRINT TAB 12;"\::\::\::\::\::\::\::\::\::"
 1020 PRINT TAB 12; INVERSE 1;" L I F E "
 1025 PRINT TAB 12;"\::\::\::\::\::\::\::\::\::"
 1030 PRINT : PRINT 
 1035 PRINT TAB 7;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
 1040 PRINT TAB 7; INVERSE 1;" I N S U R A N C E "
 1045 PRINT TAB 7;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
 1050 PRINT : PRINT 
 1055 PRINT TAB 7;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
 1060 PRINT TAB 7; INVERSE 1;" E S T I M A T E R "
 1065 PRINT TAB 7;"\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::"
 1450 GO SUB 2000
 1500 RETURN 
 2000 PRINT AT 21,3; FLASH 1;"Press any key to continue."
 2100 PAUSE 0: CLS 
 2200 RETURN 
 9999 CLEAR : CLS : SAVE "lifeinsest" LINE 1: BEEP 1,32: PRINT "Rewind to VERIFY.": VERIFY "": BEEP .2,30: PRINT FLASH 1;" V E R I F I E D 

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top