--- title: "Life Insurance Estimater" id: 53839 type: "computer_media" slug: "lifeinsest" url: "http://localhost/computer_media/lifeinsest/" markdown_url: "http://localhost/computer_media/lifeinsest.md" published_at: "2024-05-13T19:02:05+00:00" modified_at: "2026-03-30T21:43:28+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2024/05/SCR-20240622-tapd.png" excerpt: "A step-by-step life insurance estimator walks you through income, Social Security benefits, time horizons, and assets to calculate your exact coverage gap." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "John Colonna" slug: "john-colonna" taxonomy: "indiv" url: "http://localhost/indiv/john-colonna/" genre: - name: "Finance" slug: "finance" taxonomy: "genre" url: "http://localhost/type/finance/" media_contents: - id: 55361 title: "SINCUS Exchange Tape 102 – Utilities & Business" type: "computer_media" url: "http://localhost/computer_media/sincus-exchange-tape-102-utilities-business/" media_type: "Program" programmers: - name: "John Colonna" slug: "john-colonna" taxonomy: "indiv" url: "http://localhost/indiv/john-colonna/" mediadate: "1983" images: - url: "http://localhost/wp-content/uploads/2024/05/SCR-20240622-tapd.png" - url: "http://localhost/wp-content/uploads/2024/05/SCR-20240622-tapv.png" - url: "http://localhost/wp-content/uploads/2024/05/SCR-20240622-tawy.png" media_type_tags: "Finance" --- # Life Insurance Estimater 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 | Variable | Description | | --- | --- | | `p` | 75% of annual take-home pay (income needed) | | `b` | Annual Social Security benefits | | `t` | Time period in years (from fixed table) | | `a` | Multiplier corresponding to `t` | | `l` | Lump sum for funeral/debt expenses | | `gl` | Existing 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`) | | --- | --- | | 5 | 4.7 | | 10 | 8.7 | | 15 | 12 | | 20 | 15 | | 25 | 18 | | 30 | 20 | | 50 | 26 | 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. ## 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 ```