--- title: "Financial Record Keeper" id: 51881 type: "computer_media" slug: "financial-record-keeper" url: "http://localhost/computer_media/financial-record-keeper/" markdown_url: "http://localhost/computer_media/financial-record-keeper.md" published_at: "2023-08-16T01:42:21+00:00" modified_at: "2026-03-31T08:19:04+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2022/03/Financial-Record-Keeper-2.png" excerpt: "A full-featured personal finance manager tracks income, payments, tax deductions, and check registers across 20 categories and 12 months with a reconciliation tool." 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: "Markel Software" slug: "markel-software" taxonomy: "post_tag" url: "http://localhost/tag/markel-software/" - 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: "Mark Fendrick" slug: "mark-fendrick" taxonomy: "indiv" url: "http://localhost/indiv/mark-fendrick/" genre: - name: "Finance" slug: "finance" taxonomy: "genre" url: "http://localhost/type/finance/" media_type: "Program" programmers: - name: "Mark Fendrick" slug: "mark-fendrick" taxonomy: "indiv" url: "http://localhost/indiv/mark-fendrick/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Financial Record Keeper (1983)(Markel Software)(US)(TS2068)(Cassette).zip" mediadate: "1983" producer_company: - id: 11075 title: "Markel Software" type: "company" url: "http://localhost/company/markel-software/" images: - url: "http://localhost/wp-content/uploads/2022/03/Financial-Record-Keeper-2.png" - url: "http://localhost/wp-content/uploads/2022/03/Financial-Record-Keeper-1-1.png" - url: "http://localhost/wp-content/uploads/2022/03/Financial-Record-Keeper-3.png" related_products: - id: 12575 title: "Financial Record Keeper" type: "product" url: "http://localhost/product/financial-record-keeper/" media_type_tags: "Finance" --- This program is a comprehensive personal finance manager that tracks income and payments across up to 20 user-defined categories and 12 months, storing data in parallel arrays. It offers a menu-driven interface with ten distinct functions: file updating, review, category totals by month, year-to-date summaries, tax deduction tracking, file renaming, file maintenance, check/deposit entry, check register review, and endorsee-based totals. A separate checkbook reconciliation module (option A) walks through each transaction and compares the running balance against a bank statement total. The program uses a custom UDG character defined via binary DATA at line 9989, a currency formatting subroutine at lines 9990–9993 that handles zero, whole-number, and single-decimal cases, and saves its data state to tape using SAVE with a LINE auto-run parameter. *** ## Program Analysis ### Program Structure The program is organized around a central menu loop at lines 100–700, with ten major subsystems branched to by single-keypress selection. Initialization occupies lines 10–27, setting up all arrays and reading month-name DATA. Lines 77–79 handle year entry and UDG setup. The menu dispatch at lines 490–640 uses a chain of `IF q$=` comparisons rather than a computed `GO TO`. | Line Range | Function | | --- | --- | | 1–3 | Title screen and instructions | | 10–27 | Array initialization and month DATA | | 77–79 | Year input and UDG definition | | 80–700 | Main menu and dispatch | | 1000–1370 | Update / review monthly file entries | | 2000–2190 | Category totals by month (graphical grid) | | 2300–2490 | Year-to-date income/payments summary | | 2600–2970 | File maintenance (rename, adjust amounts, tax) | | 3000–3260 | Check and deposit entry | | 3510–3670 | Review check listing by check number | | 4000–4140 | Year-to-date totals by endorsee | | 5000–5300 | Review check listing by date / reconciliation | | 5100–5300 | Reconcile checking account | | 6000–6070 | Tax deduction review | | 8000–8190 | Entry subroutine for updating amounts | | 8500–8720 | Define file names | | 9000–9090 | Save to tape | | 9150–9330 | Utility subroutines (copy prompt, repeat/menu prompt) | | 9989–9999 | DATA, formatting, beep, and save/run lines | ### Data Storage Financial data lives in a two-dimensional numeric array `m(12,20)` where the first index is month (1–12) and the second is category/file (1–20). Negative values represent payments; positive values represent income. The 20 category names are stored in `b$(20,15)`, initialized to `"File # n"` but user-renameable. Tax deduction totals per category are kept in `t(20)`. The check register uses five parallel string arrays, each dimensioned to 350 entries: `c$(350,8)` for dates, `d$(350,4)` for check numbers, `e$(350,20)` for payees, `f$(350,7)` for amounts (with a leading sign character), and `g$(350,20)` for running balance expressions. A sixth array `r$(350,1)` stores reconciliation status per transaction. ### Currency Formatting Subroutine Lines 9990–9993 implement a small formatting routine that takes a value in `temp` and returns a string `t$`. It handles three cases: zero returns `"0.00"`; whole numbers append `".00"`; numbers with exactly one decimal place append a trailing `"0"`. The check `temp/INT temp=1` is used to test for whole-number values — a common Sinclair BASIC idiom. Note that this routine does not handle values already having two decimal places correctly in all rounding scenarios, which could cause display anomalies for amounts like $1.23. ### UDG Definition Line 79 defines a User Defined Graphic for character `"u"` using eight bytes of binary DATA read from line 9989. The shape encodes a small checkmark or tick symbol (binary pattern `00000010, 00000100, 10001000, 01010000, 00100000`). This UDG is subsequently used in the reconciliation module at line 5115 and 5192 to mark transactions that appear on the bank statement, stored in `r$(e)` as `"\u"`. ### Check Register Balance Calculation Rather than storing numeric balances directly, the program builds a string expression in `g$(d)` at lines 3050–3055. For deposits this is `STR$ bal + f$(d)` (e.g., `"1000.00+500.00"`); for checks it prepends a negation term involving the per-check charge `i$`. The running balance is then recovered with `VAL g$(e)` at display time. This approach lets the program store a self-describing arithmetic expression rather than recomputing balances during review. ### Reconciliation Module The reconciliation routine at lines 5100–5300 iterates through all transactions and accumulates the total of unreconciled items in `bb`. For each unreconciled check or deposit, it subtracts the per-check charge by evaluating `VAL (f$(e)+"-"+i$)`. The final reconciled balance is computed as `cs + bb` where `cs` is the statement closing balance. A congratulations message is shown if `STR$ recon = STR$ bal` — using string comparison to avoid floating-point equality pitfalls. ### Graphical Monthly Grid The category review at lines 2060–2150 draws a 3×4 grid using `PLOT` and `DRAW` commands to create a visual table of monthly totals. Screen coordinates for each cell are read from DATA at line 9995, which stores 24 row/column pairs (two per month). This separates layout data from display logic neatly. ### Key BASIC Idioms - `GO SUB 9996` is a triple-beep audio cue signaling the user to provide input; it appears before nearly every `INPUT` statement. - `ON ERR GO TO 9999` at line 1 and `ON ERR GO TO 79` at line 80 provide global error recovery, looping back to initialization or the post-setup point respectively. - `LET d=0: LET b=d: LET c=d` at line 17 uses assignment chaining from a single zero to initialize multiple variables efficiently. - `SAVE y$ LINE 9090` at line 9080 saves the program with the user-entered year as the filename and auto-runs from line 9090, which jumps to the post-initialization setup at line 79. - The hidden option `q$="l"` at line 640 branches to line 5900, which requires a second input of `"l"` before executing `ON ERR RESET : STOP` — a deliberate multi-step soft reset guard. ### Notable Anomalies - Lines 2477–2490 contain unreachable code: line 2475 ends with `GO TO 1350`, so lines 2480 and 2490 are never executed. - Line 8500 is part of a `FOR b=1 TO 20 ... NEXT b` loop (lines 8500–8720) but the loop body ends mid-routine and `NEXT b` appears at line 8720 after the `GO TO 80` guard at line 8680, meaning a full 20-file initialization always runs on first entry but subsequent calls via line 8665 skip to mid-loop. - The `GO SUB 9150` copy-prompt at line 1346 is followed by `INPUT ""` which consumes a keypress; the copy flag `p$` set in subroutine 9150 then drives the `COPY` and `LPRINT` path. - Line 3555 is referenced by `GO TO 3555` at line 5095 but does not exist in the listing; control will fall through to the next available line (3560), which prints a “not found” message — an intentional fall-through technique. ## Source Code ``` 1 ON ERR GO TO 9999: BRIGHT 0: BORDER 2: PAPER 2: INK 6: CLS : PRINT AT 1,3;" FINANCIAL RECORD KEEPER ";TAB 3; BRIGHT 1;"\* 1983, Mark L. Fendrick "; BRIGHT 0 2 PRINT '" This program allows you to keep track of all income and payments made during the year. Follow all instructions, and you will have the whole year at a glance." 3 PRINT AT 11,2;"In a moment you will be asked to "; FLASH 1;"Enter"; FLASH 0;" the year. When you are asked to "; FLASH 1;"Enter"; FLASH 0;" information, first type the requested data, and then press the "; BRIGHT 1;"Enter"; BRIGHT 0;" key. When you are asked to "; FLASH 1;"Press"; FLASH 0;" an answer--do not";CHR$ 8;CHR$ 8;CHR$ 8; OVER 1;"___"; OVER 0;" press the "; BRIGHT 1;"Enter"; BRIGHT 0;" key." 10 LET q$="": DIM a$(12,9): DIM b$(20,15): DIM m(12,20) 11 FOR z=1 TO 12: READ a$(z): NEXT z 12 DATA "January","February","March","April","May","June","July","August","September","October","November","December" 14 FOR z=1 TO 20: LET b$(z)="File # "+STR$ z: NEXT z 17 LET d=0: LET b=d: LET c=d: LET u$="" 21 DIM c$(350,8): DIM d$(350,4): DIM e$(350,20): DIM f$(350,7): DIM g$(350,20) 26 LET bal=d 27 DIM r$(350,1): DIM t(20) 77 PRINT FLASH 1;AT 21,0;"Enter"; FLASH 0;" year" 78 GO SUB 9996: INPUT y$: LET y$=y$+" ": LET y$=y$( TO 4) 79 POKE 23609,30: RESTORE 9989: FOR z=0 TO 7: READ f: POKE USR "u"+z,f: NEXT z: IF q$="8" THEN LET d=d-1 80 ON ERR GO TO 79: BORDER 7: PAPER 7: INK 0: CLS 100 PRINT '"********************************" 110 PRINT "*"; PAPER 6;" R E C O R D S F O R ";y$;" "; PAPER 7;"*" 120 PRINT "********************************" 130 PRINT "Select and "; FLASH 1; INK 3;"PRESS"; INK 0; FLASH 0;" application no." 140 PRINT "********************************" 160 PRINT INK 1;'"1) Update file"'"2) Review file"'"3) Category totals by month"'"4) Year to date income/payments"'"5) Review tax deductions"'"6) Define file names"'"7) File maintenance" 170 PRINT INK 2;"8) Enter checks and deposits"'"9) Review check listing"'"0) Year to date by endorsee"'"A) Reconcile checking account"' INK 4;"B) Save to tape" 180 PRINT PAPER 6; INK 0;AT 21,2;" \* 1983, Mark L. Fendrick ": GO SUB 9996 490 LET q$=INKEY$: IF q$="" THEN GO TO 490 495 BRIGHT 0 500 IF q$="1" THEN GO TO 1000 510 IF q$="2" THEN GO TO 1000 520 IF q$="3" THEN GO TO 2000 550 IF q$="5" THEN GO TO 6000 560 IF q$="4" THEN GO TO 2300 570 IF q$="6" THEN GO TO 8665 580 IF q$="a" THEN GO TO 5100 590 IF q$="7" THEN GO TO 2600 600 IF q$="8" THEN GO TO 3120 610 IF q$="9" THEN GO TO 5000 620 IF q$="0" THEN GO TO 4000 630 IF q$="b" THEN GO TO 9000 640 IF q$="l" THEN GO TO 5900 700 GO TO 490 1000 BORDER 5: PAPER 5: INK 1: CLS 1005 PRINT 'TAB 8;y$;TAB 8;"\''\''\''\''" 1010 PRINT '" Select desired month"'" and "; FLASH 1;"ENTER"; FLASH 0;" number"''" 1) January"'" 2) February"'" 3) March"'" 4) April"'" 5) May"'" 6) June"'" 7) July"'" 8) August"'" 9) September"'" 10) October"'" 11) November"'" 12) December" 1020 GO SUB 9996: INPUT a: IF a<1 OR a>12 THEN GO TO 1020 1040 CLS 1100 BORDER 6: PAPER 6: CLS : GO SUB 9200 1110 PRINT AT 0,0;a$(a, TO 3);"."; INK 0;"INC$";inc; INK 2;" PAY$";pay'': BEEP .05,10 1120 FOR z=1 TO 20 1122 LET temp=ABS m(a,z): GO SUB 9990 1125 IF m(a,z)<0 THEN INK 2 1126 IF m(a,z)>=0 THEN INK 0 1130 PRINT z;")";TAB 4;b$(z);TAB 28-LEN t$;"$";t$;TAB 30;z: BEEP .05,10 1140 NEXT z: INK 1: IF q$="2" THEN GO TO 1346 1310 GO SUB 8000 1330 IF NOT c THEN GO TO 80 1335 PRINT AT c+1,0;" " 1336 IF m(a,c)<0 THEN INK 2 1337 IF m(a,c)>=0 THEN INK 0 1338 LET temp=ABS m(a,c): GO SUB 9990 1340 PRINT AT c+1,0;c;")";TAB 4;b$(c);TAB 28-LEN t$;"$";t$;TAB 30;c 1341 IF u$="i" THEN LET inc=inc+temp1 1342 IF u$="p" THEN LET pay=pay+ABS temp1 1343 PRINT AT 0,0;a$(a, TO 3);"."; INK 0;"INC$";inc; INK 2;" PAY$";pay 1345 INK 1: GO TO 1310 1346 GO SUB 9150: INPUT "": IF p$="y" THEN COPY : LPRINT ''''' 1350 IF INKEY$<>"" THEN GO TO 1350 1351 INPUT "": PRINT #0; PAPER 7; INK 2; FLASH 1;"Press any key to go to the menu.": GO SUB 9996 1360 IF INKEY$="" THEN GO TO 1360 1370 GO TO 80 2000 PAPER 7: INK 1: BORDER 7: CLS 2010 PRINT TAB 3; PAPER 2; INK 7; FLASH 1;" ENTER # of desired file. " 2030 FOR z=1 TO 20: PRINT TAB 4;z;")";TAB 8;b$(z): BEEP .01,20: NEXT z 2057 PRINT AT 21,0; FLASH 1; PAPER 2; INK 7;"ENTER ""0"" to return to the menu.": GO SUB 9996: INPUT f: IF f<0 OR f>20 THEN GO TO 2057 2058 IF f=0 THEN GO TO 80 2060 BORDER 5: PAPER 5: INK 1: CLS 2075 PRINT TAB 5; PAPER 6; INK 1;" ";b$(f);" ";y$;" " 2080 PRINT AT 2,1;"January";TAB 11;"February";TAB 21;"March"''''" April";TAB 11;"May";TAB 21;"June";''''" July";TAB 11;"August";TAB 21;"September"''''" October";TAB 11;"November";TAB 21;"December" 2090 PLOT 2,32: DRAW 0,128: DRAW 251,0: DRAW 0,-128: DRAW -251,0: PLOT 2,64: DRAW 251,0: PLOT 2,96: DRAW 251,0: PLOT 2,130: DRAW 251,0: PLOT 84,160: DRAW 0,-128: PLOT 164,160: DRAW 0,-128 2100 RESTORE 9995: FOR z=1 TO 12: LET temp=ABS m(z,f): GO SUB 9990: READ x1,y1: PRINT AT x1,y1;"$";t$: BEEP .01,30: NEXT z 2115 LET yr=0 2120 FOR z=1 TO 12: LET yr=yr+m(z,f): NEXT z 2130 LET temp=ABS yr: GO SUB 9990 2150 LET t$=" Total for "+y$+":$"+t$+" ": PRINT AT 19,(31-LEN t$)/2; PAPER 6; INK 1;t$: GO SUB 9150 2160 INPUT "": IF p$="y" THEN COPY 2170 GO SUB 9300 2180 IF q$="2" THEN GO TO 80 2190 GO TO 2000 2300 BORDER 6: PAPER 6: INK 0: CLS 2310 PRINT AT 1,0;" ": LET ytdi=0: LET ytdp=0 2410 FOR f=1 TO 20 2420 LET ytdf=0 2430 FOR z=1 TO 12 2435 IF m(z,f)>0 THEN LET ytdi=ytdi+m(z,f) 2436 IF m(z,f)<0 THEN LET ytdp=ytdp+m(z,f) 2440 LET ytdf=ytdf+m(z,f) 2450 NEXT z 2453 IF ytdf>=0 THEN INK 1 2454 IF ytdf<0 THEN INK 2 2455 LET temp=ABS ytdf: GO SUB 9990 2460 PRINT b$(f);TAB 15;" ytd:";TAB 29-LEN t$;"$";t$: BEEP .02,10 2470 NEXT f 2475 PRINT AT 0,0; INK 7; PAPER 4;"Inc:$";ytdi,"Pay:$";ABS ytdp: GO SUB 9150: INPUT "": IF p$="y" THEN LPRINT INVERSE 1;" Year to date for ";y$;" ": COPY : LPRINT ''''' 2477 GO TO 1350 2480 IF INKEY$="" THEN GO TO 2480 2490 GO TO 80 2600 BORDER 4: PAPER 4: INK 7: CLS 2610 PRINT '"Do you want to change a file name (n), an amount (a), or a tax deduction (t)?"'' FLASH 1;"PRESS"; FLASH 0;" ""m"" to return to menu.": GO SUB 9996 2620 LET q$=INKEY$: IF q$="" THEN GO TO 2620 2630 IF q$<>"m" AND q$<>"t" AND q$<>"a" AND q$<>"n" THEN GO TO 2620 2650 IF q$="n" THEN GO TO 2700 2660 IF q$="t" OR q$="a" THEN GO TO 2800 2665 IF q$="m" THEN GO TO 80 2700 CLS : PRINT AT 9,10; FLASH 1;"ENTER"; FLASH 0;" file #" 2710 GO SUB 9996: INPUT f: IF f<1 OR f>20 THEN GO TO 2710 2720 CLS : PRINT AT 9,0; INVERSE 1;b$(f) 2730 PRINT '' FLASH 1;"ENTER"; FLASH 0;" new file name.": GO SUB 9996: INPUT b$(f): GO TO 2600 2800 CLS : PRINT '''TAB 10; FLASH 1;"ENTER"; FLASH 0;" file #" 2820 GO SUB 9996: INPUT f: IF f<1 OR f>20 THEN GO TO 2820 2830 CLS : PRINT '''TAB 6; INVERSE 1;b$(f): IF q$="t" THEN GO TO 2970 2850 PRINT '' FLASH 1;"ENTER"; FLASH 0;" month # (1 TO 12)" 2870 GO SUB 9996: INPUT a: IF a<1 OR a>12 THEN GO TO 2870 2875 CLS : PRINT ''TAB 6; INVERSE 1;b$(f); INVERSE 0''TAB 9; INVERSE 1;a$(a) 2890 PRINT AT 8,7; FLASH 1;"ENTER"; FLASH 0;" new amount": GO SUB 9996: INPUT m(a,f): PRINT '''TAB (26-LEN STR$ m(a,f))/2; INVERSE 1;"$";ABS m(a,f): IF NOT m(a,f) THEN GO TO 2600 2920 PRINT AT 8,0; FLASH 1;"PRESS"; FLASH 0;" ""p"" for payment or ""i"" for income": GO SUB 9996 2930 LET q$=INKEY$: IF q$="" THEN GO TO 2930 2950 IF q$="p" THEN LET m(a,f)=-m(a,f) 2960 GO TO 2600 2970 PRINT ''"Current amount is: $";t(f): PRINT '' FLASH 1;"ENTER"; FLASH 0;" corrected amount": GO SUB 9996: INPUT t(f): GO TO 2600 3000 FOR d=1 TO 350 3001 BORDER 4: PAPER 4: INK 7: CLS : LET temp=bal: GO SUB 9990 3002 PRINT '" Last transaction: ": IF d>1 THEN PRINT d$(d-1);TAB 11;e$(d-1)'c$(d-1);TAB 21;"$";f$(d-1,2 TO ) 3005 PRINT " Current balance is:$"; INVERSE 1;t$+" "' INVERSE 0;"--------------------------------" 3010 GO SUB 9996: INPUT INK 7; FLASH 1;"ENTER"; FLASH 0;" date ";c$(d): PRINT 'TAB (31-LEN c$(d))/2;c$(d) 3020 GO SUB 9996: INPUT INK 7; FLASH 1;"ENTER"; FLASH 0;" check number ";temp: LET d$(d)=STR$ temp: PRINT 'TAB (31-LEN ("check #"+STR$ temp))/2;"check #";d$(d) 3030 GO SUB 9996: INPUT INK 7; FLASH 1;"ENTER"; FLASH 0;" to whom check is issued"' FLASH 1;"ENTER"; FLASH 0;" ""deposit"" if deposit"'q$: LET e$(d)=q$: PRINT 'TAB (31-LEN q$)/2;q$ 3040 IF e$(d, TO 7)="deposit" THEN GO SUB 9996: INPUT INK 7; FLASH 1;"ENTER"; FLASH 0;" amount of deposit $";temp: GO TO 3044 3042 GO SUB 9996: INPUT INK 7; FLASH 1;"ENTER"; FLASH 0;" amount of check $";temp 3044 GO SUB 9990: LET f$(d)=t$: PRINT 'TAB (31-((LEN t$)+1))/2;"$";f$(d) 3046 IF e$(d, TO 7)="deposit" THEN LET f$(d)="+"+f$(d): GO TO 3050 3048 LET f$(d)="-"+f$(d) 3050 LET g$(d)=STR$ bal+f$(d) 3055 IF e$(d, TO 7)<>"deposit" THEN LET g$(d)="-"+i$+"+"+g$(d) 3060 PRINT #0; INK 7;"PRESS ""c"" if correct"'"PRESS ""i"" if incorrect" 3065 GO SUB 9996 3070 LET q$=INKEY$: IF q$<>"i" AND q$<>"c" THEN GO TO 3070 3080 INPUT "": IF q$="i" THEN LET d=d-1: GO TO 3100 3090 LET bal=VAL g$(d) 3100 GO SUB 9300 3110 IF q$="2" THEN GO TO 80 3120 IF NOT d THEN GO SUB 3200: GO TO 3000 3130 IF d=350 THEN PRINT AT 10,8; FLASH 1;"File is full": PAUSE 90: GO TO 80 3140 NEXT d 3200 BORDER 4: PAPER 4: INK 7: CLS 3210 PRINT ''"Enter charge per check: $";: GO SUB 9996: INPUT temp: LET i$=STR$ temp: PRINT i$ 3220 PRINT ''"Enter starting balance": GO SUB 9996: INPUT bal: LET temp=bal: GO SUB 9990: PRINT TAB 20;"$";t$ 3230 PRINT ''"Press ""c"" if correct"'"Press ""i"" if incorrect": GO SUB 9996 3240 LET q$=INKEY$: IF q$<>"i" AND q$<>"c" THEN GO TO 3240 3250 IF q$="i" THEN GO TO 3200 3260 RETURN 3510 PRINT ''"Enter desired starting check #": GO SUB 9996: INPUT h$: PRINT ''h$ 3520 PRINT FLASH 1''"Do you want a copy? (y or n)": GO SUB 9996: GO SUB 9160 3523 IF h$="" THEN LET e=1: GO TO 3600 3525 CLS : PRINT AT 10,5; FLASH 1;"Working--please wait" 3530 FOR e=1 TO d 3535 IF h$="" AND d$(e)=" " THEN GO TO 3600 3536 IF d$(e)=" " THEN GO TO 3550 3540 IF VAL h$=VAL d$(e) THEN GO TO 3600 3550 NEXT e 3560 CLS : PRINT '''''h$;" not found": GO SUB 9300: IF q$="2" THEN GO TO 80 3570 GO TO 5000 3600 CLS : LET z=0 3610 FOR e=e TO d 3615 LET z=z+1 3620 PRINT d$(e);TAB 10;e$(e);" "+r$(e) 3621 IF p$="y" THEN LPRINT d$(e);TAB 10;e$(e);" "+r$(e) 3630 PRINT c$(e);TAB 10;"$";f$(e,2 TO );TAB 20;"$";: LET temp=VAL g$(e): GO SUB 9990: PRINT t$ 3631 IF p$="y" THEN LPRINT c$(e);TAB 10;"$";f$(e,2 TO );TAB 20;"$";t$ 3632 BEEP .01,10 3635 PRINT "--------------------------------" 3636 IF p$="y" THEN LPRINT "--------------------------------" 3640 IF z=7 THEN PRINT : LET z=0 3649 NEXT e 3650 IF p$="y" THEN LPRINT ''''' 3651 GO SUB 9300 3655 IF q$="2" THEN GO TO 80 3670 GO TO 5000 4000 BORDER 6: PAPER 6: INK 1: CLS 4010 PRINT ''"Enter desired name": GO SUB 9996: INPUT h$: PRINT '' INVERSE 1; BRIGHT 1;" ";h$;" ": IF LEN h$>20 THEN LET h$=h$( TO 20) 4040 GO SUB 9996: PRINT ' BRIGHT 1;"Do you want a copy? (y or n)": GO SUB 9160: CLS 4070 PRINT ' INVERSE 1; BRIGHT 1;" ";h$;" "'': IF p$="y" THEN LPRINT '' INVERSE 1;" ";h$;" "'' 4075 LET temp1=0 4080 FOR e=1 TO d 4085 LET temp=ABS VAL f$(e): GO SUB 9990 4090 IF h$=e$(e, TO LEN h$) THEN PRINT c$(e);" chk #";d$(e);TAB 30-LEN t$;"$";t$: BEEP .02,10: IF p$="y" THEN LPRINT c$(e);" chk #";d$(e);TAB 30-LEN t$;"$";t$ 4100 IF h$=e$(e, TO LEN h$) THEN LET temp1=temp1+ABS VAL f$(e) 4110 NEXT e: LET temp=temp1 4120 GO SUB 9990: PRINT '' INVERSE 1; BRIGHT 1;" ";y$;" total:$";t$;" ": IF p$="y" THEN LPRINT INVERSE 1;''" ";y$;" total:$";t$;" "''''' 4130 GO SUB 9300: IF q$="2" THEN GO TO 80 4140 GO TO 4000 5000 BORDER 1: PAPER 1: INK 7: CLS 5010 PRINT ''"Do you want to start the list with a check number (n) or with a date (d)?": GO SUB 9996 5015 LET q$=INKEY$: IF q$="n" THEN GO TO 3510 5030 IF q$<>"d" THEN GO TO 5015 5040 PRINT ''"Enter desired starting date.": GO SUB 9996: INPUT h$: IF LEN h$>8 THEN LET h$=h$( TO 8) 5050 PRINT ''h$ 5060 PRINT '' FLASH 1;"Do you want a copy? (y or n)": GO SUB 9996: GO SUB 9160 5065 IF h$="" THEN LET e=1: GO TO 3600 5070 CLS : PRINT AT 10,5; FLASH 1;"Working--please wait" 5080 FOR e=1 TO d 5085 IF h$=c$(e, TO LEN h$) THEN GO TO 3600 5090 NEXT e 5095 GO TO 3555 5100 BORDER 3: PAPER 3: INK 9: CLS 5105 PRINT AT 6,0;"--------------------------------": LET bb=0 5110 FOR e=1 TO d 5115 IF r$(e)="\u" THEN GO TO 5200 5130 PRINT AT 7,0;d$(e);" "+e$(e);TAB 30;" "'c$(e);TAB 21;"$"+f$(e,2 TO )'"--------------------------------" 5170 PRINT ''"PRESS ""x"" if this check or deposit is on statement."''"PRESS ""n"" if not on statement.": GO SUB 9996 5180 LET r$(e)=INKEY$: IF r$(e)<>"x" AND r$(e)<>"n" THEN GO TO 5180 5192 IF r$(e)="x" THEN LET r$(e)="\u" 5193 PRINT AT 7,30;r$(e): IF r$(e)="n" THEN LET r$(e)=" " 5197 IF r$(e)<>"\u" THEN LET bb=bb+VAL (f$(e)+"-"+i$) 5199 IF INKEY$<>"" THEN GO TO 5199 5200 NEXT e 5210 CLS : PRINT '''"ENTER balance from checking statement.": GO SUB 9996: INPUT cs: CLS 5250 LET recon=cs+bb 5260 PRINT AT 10,0;"Your checkbook balance"'"should be: $";recon 5270 IF STR$ recon=STR$ bal THEN PRINT ''TAB 7; FLASH 1;"congratulations" 5280 PRINT ''"PRESS any key to return to menu": GO SUB 9996 5290 IF INKEY$="" THEN GO TO 5290 5300 GO TO 80 5900 INPUT q$: IF q$<>"l" THEN GO TO 490 5910 ON ERR RESET : STOP 6000 BORDER 3: PAPER 3: INK 9: CLS : LET tot=0 6010 PRINT PAPER 6; INK 1;" Deductable for ";y$;":$"'' 6020 FOR z=1 TO 20 6025 LET temp=ABS t(z): GO SUB 9990 6030 PRINT b$(z);TAB 29-LEN t$;"$";t$: BEEP .02,10: LET tot=tot+ABS t(z) 6040 NEXT z 6050 PRINT AT 0,22; PAPER 6; INK 1;tot;" " 6060 GO SUB 9150: INPUT "": IF p$="y" THEN COPY : LPRINT ''''' 6070 GO TO 1350 8000 GO SUB 9996: INPUT FLASH 1;"ENTER"; FLASH 0;" line # or ""0"" for menu ";c: INPUT "": LET p$="n": IF c<0 OR c>20 THEN GO TO 8000 8005 IF NOT c THEN RETURN 8010 LET hold=m(a,c) 8015 PRINT AT c+1,3; FLASH 1;"\u" 8020 IF NOT c THEN RETURN 8023 PRINT #0; FLASH 1;"PRESS"; FLASH 0;" income (i) or payment (p)": GO SUB 9996 8024 LET u$=INKEY$: IF u$<>"i" AND u$<>"p" THEN GO TO 8024 8027 INPUT "": IF u$="i" AND t(c) THEN PRINT #0;"Deductable adjustment? "; FLASH 1;"(y or n)": GO SUB 9996 8028 IF u$="p" THEN PRINT #0;"Is this tax deductable? "; FLASH 1;"(y or n)": GO SUB 9996 8029 IF t(c) OR u$="p" THEN LET p$=INKEY$: IF p$<>"y" AND p$<>"n" THEN GO TO 8029 8032 GO SUB 9996: INPUT FLASH 1;"ENTER"; FLASH 0;" amount $";m(a,c): LET temp1=m(a,c) 8042 IF u$="p" THEN LET temp1=-temp1 8043 IF u$="p" AND p$="y" THEN LET t(c)=t(c)+m(a,c): GO TO 8046 8045 IF t(c) AND p$="y" THEN LET t(c)=t(c)-m(a,c) 8046 LET m(a,c)=temp1+hold 8190 RETURN 8500 FOR b=1 TO 20 8510 PRINT AT 9,5; FLASH 1;"ENTER"; FLASH 0;" name for file #";b: GO SUB 9996: INPUT t$: LET b$(b)=t$: PRINT ''TAB (31-LEN t$)/2;t$ 8520 GO SUB 9300: IF q$="2" THEN GO TO 80 8665 BORDER 1: PAPER 1: INK 7: CLS 8670 IF NOT b THEN GO TO 8500 8680 IF b=20 THEN PRINT AT 10,8; FLASH 1;"FILE IS FULL": PAUSE 90: GO TO 80 8720 NEXT b 9000 BORDER 0: PAPER 0: INK 7: CLS 9010 PRINT ''"Make sure that tape is set to the desired position, and that wires are properly connected." 9020 PRINT ''"Press "; FLASH 1;"PLAY"; FLASH 0;" and "; FLASH 1;"RECORD"; FLASH 0;" on the tape recorder." 9030 PRINT ''"To reLOAD this program, type -";TAB 9;"LOAD """;y$;"""" 9040 PRINT ''"PRESS ""s"" to SAVE"''"PRESS ""m"" to return to menu": GO SUB 9996 9050 LET q$=INKEY$: IF q$<>"s" AND q$<>"m" THEN GO TO 9050 9060 IF q$="m" THEN GO TO 80 9070 CLS : PRINT AT 10,13; FLASH 1;"SAVING": GO SUB 9996 9080 SAVE y$ LINE 9090 9090 GO TO 79 9150 PRINT #0; PAPER 7; INK 2; FLASH 1;" Do you want a copy? (y or n) ": GO SUB 9996 9160 LET p$=INKEY$: IF p$<>"y" AND p$<>"n" THEN GO TO 9160 9170 RETURN 9200 LET inc=0: LET pay=0 9205 FOR z=1 TO 20 9210 IF m(a,z)>0 THEN LET inc=inc+m(a,z) 9220 IF m(a,z)<0 THEN LET pay=pay+ABS m(a,z) 9230 NEXT z 9240 RETURN 9300 PRINT #0;AT 0,0; FLASH 1; PAPER 2; INK 7;" PRESS 1 to repeat procedure PRESS 2 to return to the menu ": GO SUB 9996 9310 LET q$=INKEY$: IF q$<>"1" AND q$<>"2" THEN GO TO 9310 9315 GO TO 9330 9320 LET q$="2" 9330 RETURN 9989 DATA BIN 00000000,BIN 00000000,BIN 00000010,BIN 00000100,BIN 10001000,BIN 01010000,BIN 00100000,BIN 00000000 9990 IF temp=0 THEN LET t$="0.00": RETURN 9991 LET t$=STR$ temp: IF temp/INT temp=1 THEN LET t$=t$+".00": RETURN 9992 LET temp=temp*10: IF temp/INT temp=1 THEN LET t$=t$+"0" 9993 RETURN 9995 DATA 4,1,4,11,4,21,8,1,8,11,8,21,12,1,12,11,12,21,16,1,16,11,16,21 9996 BEEP .05,12: BEEP .05,12: BEEP .05,12: RETURN 9998 SAVE "frk" LINE 9999 9999 RUN ```