Months Budget

Developer(s): Richard Cunningham
Date: 198x
Type: Program
Platform(s): TS 2068
Tags: Finance, Home

Months Budget is a personal finance management program that tracks up to 14 expense items and 14 income sources across a month, maintaining running totals of amounts due versus amounts paid or received. Data is stored in integer-scaled penny arithmetic (values multiplied by 100 and rounded using INT(x*100+.5)) to avoid floating-point rounding errors, then converted back to dollar-and-cent strings by a set of dedicated subroutines starting at line 800. The program features a multi-screen menu system with color-coded PAPER and INK attributes, FLASH and BRIGHT effects for emphasis, and a border-drawing routine using PLOT/DRAW that frames the active display area. A SAVE/VERIFY sequence at line 9900 preserves the program together with all live data via SAVE “MBUDG1” LINE 570, allowing a mid-session restart at the menu without re-entering data. The reset option (menu choice 4, subroutine at line 9700) zeroes all paid and received values to support month-to-month reuse.


Program Structure

The program is organized into a set of clearly demarcated functional blocks, each announced by a REM banner. Execution begins at line 100 with an introduction screen, progresses through data entry (lines 200–598), and then loops through a menu at line 600. Menu choices dispatch via GO TO VAL A$*1000, mapping keys 1–5 to lines 1000, 2000, 3000, 4000, and 5000 respectively. Key 6 routes to the save/verify sequence at line 9500.

Line RangePurpose
95–129Title screen and instructions
130–300Expense title and amount entry
320–400Income title and amount entry
569–598Date, cash-on-hand, and checking balance entry
600–770Main menu
800–997Currency formatting subroutines
1000–1145Monthly due list display
2000–2110Expense paid entry and display
3000–3110Income received entry and display
4000–4530Amend menu and item editing
5000–5197Monthly summary screen
9000–9200Array/variable initialization (called as GO SUB 9000)
9500–9570Save confirmation screen
9600–9610Border-drawing subroutine (PLOT/DRAW rectangle)
9620–9650Totals recalculation subroutine
9700–9750Monthly reset (zero paid/received arrays)
9900–9930SAVE and VERIFY sequence

Data Model

All financial values are stored as integers representing whole pennies. On input, the user enters a decimal dollar amount which is immediately converted with INT(x*100+.5). This avoids cumulative floating-point drift when summing many entries. Four numeric arrays hold the core data:

  • E(14) — budgeted expense amounts (pennies)
  • Q(14) — expense amounts paid to date (pennies)
  • I(14) — budgeted income amounts (pennies); slots 1 and 2 are reserved for cash-on-hand and checking balance
  • S(14) — income received to date (pennies)

Two additional arrays, F(14) and G(14), store the day-of-month date integers for expense and income transactions respectively. String arrays E$(14,8) and I$(14,8) hold item titles (8 characters each), pre-pended with a numeric index and hyphen (e.g., "3-RENT").

Running totals TE, TI, TQ, and TS are recalculated on demand by the subroutine at line 9620 rather than maintained incrementally, which avoids accumulation errors at the cost of always iterating all 14 items.

Currency Formatting Subroutines

Because values are stored as integer pennies, a family of subroutines converts them to display strings by inserting a decimal point two characters from the right of the STR$ representation. Each subroutine follows the same four-step pattern:

  1. Convert the value to a string with STR$.
  2. If zero, force the string to "000" to guarantee three digits.
  3. Splice the string: X$(TO LEN X$-2)+"."+X$(LEN X$-1 TO).
  4. If the result is negative (leading minus), strip the sign character (lines 805, 811, etc.) — though this step is triggered by IF VAL X$ >=0 THEN GO TO skipping the strip, meaning negative values are handled by falling through.

There are ten such subroutines covering every distinct variable or expression needed across the screens: F$ (line 801), Q$ (807), J$ (816), S$ (822), Y$ (831), Z$ (840), A$ (901), B$ (910), C$ (920), D$ (930), K$ (940), L$ (950), M$ (960), N$ (970), O$ (980), and V$ (991).

Menu Dispatch Technique

The main menu at line 745–760 uses a concise dispatch idiom. After validating that the keypress is ASCII 49–56 (characters “1” through “8”), it executes GO TO VAL A$*1000. Since A$ is a single digit character, VAL A$ yields 1–8, and multiplying by 1000 produces the target line number directly. Key “6” is intercepted before this with an explicit check routing to line 9500 (save screen), since 6000 does not exist.

Display and Screen Layout

The program makes extensive use of color attributes: PAPER and INK are changed inline within PRINT statements to color-code different data categories (red/PAPER 2 for expenses, blue/PAPER 1 for income, yellow/PAPER 6 for prompts). FLASH and BRIGHT are used for user-action prompts. A decorative separator line G$ is built at line 9140 from a row of block graphics characters, and H$ at line 9150 is a 32-underscore string used as a ruled line.

The border-drawing subroutine at line 9600 uses four chained DRAW calls from a PLOT 0,0 origin to draw a rectangle around the full screen perimeter. It is called frequently to refresh the frame after CLS.

Notable Techniques and Idioms

  • POKE 23658,8 (lines 140, 572) enables CAPS LOCK for uppercase input during data entry.
  • POKE 23609,100 (line 573) sets the keyboard repeat delay system variable.
  • The projection formula at line 990 computes end-of-month cash as I(1)+I(2)+(TI-TS)-(TE-TQ) — cash on hand plus checking, plus remaining income due, minus remaining bills due.
  • ON ERR RESET appears at line 3105, providing a fallback error handler in the income-received entry loop.
  • The SAVE at line 9900 uses SAVE "MBUDG1" LINE 570, which saves the entire program and all current variable data and restarts at the menu (line 600 is reached from 570’s entry flow), preserving a full month’s data on tape.
  • Line 3105’s ON ERR RESET is the only error-trapping construct; the rest of the program has no error handling.

Bugs and Anomalies

  • At line 2048, GO TO 2048 is referenced by lines 2055 and 2059, but line 2048 does not exist in the listing; the next defined line is 2050. This means those branches effectively fall through to line 2050, which re-prompts for an item number — probably the intended behavior, making this a harmless non-existent-line technique.
  • Similarly, line 3050 is referenced at lines 3055 and 3057 but does not exist; execution falls to line 3051, repeating the input prompt.
  • At line 4297, TI is temporarily augmented by I(1)+I(2) before calling the total-income formatter, then decremented. This compensates for the totals subroutine at 9635 which sums income only from indices 3–14, but the pattern is fragile if an error occurs between the adjustment lines.
  • The amend screen (line 4500) stores E(A)=E(A)*100 after the user enters the new amount directly (not via the INT rounding), meaning amended amounts bypass the penny-rounding step applied to all other entries.
  • Line 2060’s condition IF A>=1 OR A<=15 is always true for any numeric input, so the branch is never skipped; the range check at line 2055 (IF A>15) is the effective guard.
  • The income received screen (line 3058) has a compound condition checking IF A>=3 OR A<=14 (always true) combined with a nested IF A=1 OR A=2; the logic is functionally correct but the outer condition is redundant.
  • Line 1100 prints (TI-TE)/100 directly with BASIC’s floating-point output rather than using the established formatting subroutines, meaning this one value may display with trailing decimal digits inconsistent with the rest of the program.

Content

Appears On

Related Products

Related Articles

Related Content

Image Gallery

Source Code

   95 REM \{20}\{1}INSTRUCTIONS\{20}\{0}
   96 REM \{20}\{1}USE GOTO 600 \{20}\{0}FOR RESTART    WITH DATA INTACT
  100 CLS :INK 9:BEEP 2,12
  101 GO SUB 9000
  105  BORDER 6
  110 PRINT TAB 1;"MONTH'S BUDGET"; PAPER 3;"  \*R.J.CUNNINGHAM"
  115 PRINT G$
  120 PRINT TAB 5;"This program is designed to"
  121 PRINT "provide a month'S record of all:"
  122 PRINT PAPER 6;"Bills due,Income due,Cash On"
  123 PRINT PAPER 6;"Hand and Cash in Checking."
  125 PRINT :PRINT TAB 5;"Upon completion of entries:"' PAPER 6;"you will know how much cash is"'"available to you at any given   time by projection of due and   recievables to month's end."
  127 PRINT :PRINT TAB 5;"If you have a printer you  may copy any of the tables at   any time by pressing the"'" indicated key."
  128 PRINT :PRINT INVERSE 1;"HAVE AT HAND ALL THE INFORMATION YOU WILL NEED FOR ENTRY."
  129 PRINT :PRINT TAB 5; PAPER 6; FLASH 1;"PRESS ""ENTER"" TO BEGIN":PAUSE 0
  130 REM \{20}\{1}DATA ASSIGNMENT-INITIAL\{20}\{0}
  135 BEEP .75,18
  140 POKE 23658,8
  200 CLS :BORDER 6
  210 PRINT AT 10,0; PAPER 6;"You will now begin data entry.  Do not worry about errors. They can be corrected later."
  215 PAUSE 240:CLS :BORDER 6
  220 PRINT PAPER 2; INK 9;"fourteen ITEMS MUST BE ENTERED.  TO LEAVE ENTRIES BLANK PRESS    ENTER.                         "
  231 PRINT G$
  235 FOR A=1 TO 14
  239 REM \{20}\{1}INPUT EXPENSE TITLES\{20}\{0}
  240 INPUT INK 9;"ENTER EACH EXPENSE ITEM'S TITLE (MAX.6 CHAR.) ";E$(A)
  250 LET E$(A)= STR$ A+"-"+E$(A)
  260 PRINT E$(A):BEEP .2,35
  270 NEXT A
  275 GO SUB 9600
  280 PRINT :PRINT PAPER 6; FLASH 1;"PRESS ENTER TO CONTINUE:"'"corrections can be made later."
  300 PAUSE 0
  320 REM \{20}\{1}INPUT EXPENSE AMTS\{20}\{0}
  330  BEEP .75,18
  360 CLS :GO SUB 9600
  362 PRINT INK 9; PAPER 2;"ENTERING EXPENSE AMOUNTS:       "
  363 PRINT G$
  365 FOR A=1 TO 14
  368 PRINT E$(A);" ";
  370 INPUT INK 9;"NOW ENTER PROPER AMOUNT FOR EACH EXPENSE ITEM ";E(A)
  372 LET E(A)= INT (E(A)*100+.5)
  375 GO SUB 800
  380 PRINT TAB 15;"$"; TAB 25- LEN F$;F$:BEEP .2,35
  390 NEXT A
  400 PRINT INK 9; FLASH 1; PAPER 2;"NOW PRESS ENTER TO BEGIN"'"      INCOME ENTRIES"
  409 REM \{20}\{1}INPUT INCOME TITLES\{20}\{0}
  410 PAUSE 0
  414 BEEP .75,18
  415 CLS :GO SUB 9600
  417 BORDER 1
  418 PRINT PAPER 1; INK 9;"ENTERING INCOME TITLES: FIRST 2 ITEMS ALREADY ENTERED CANNOT BE CHANGED                         "
  419 PRINT G$
  420 PRINT I$(1):PRINT I$(2)
  425 FOR A=3 TO 14
  430 INPUT INK 9;"ENTER NAME FOR EACH INCOME SOURCE MAX.6 CHAR.-";I$(A)
  440 LET I$(A)= STR$ A+"-"+I$(A)
  450 PRINT I$(A):BEEP .2,35
  460 NEXT A
  470 PRINT :PRINT INK 9; FLASH 1; PAPER 1;"FINAL ENTRIES: INCOME AMTS.     "'"PRESS ENTER                     "
  475 REM \{20}\{1}INPUT INCOME AMTS\{20}\{0}
  480 PAUSE 0
  485 CLS :GO SUB 9600
  490 BORDER 1
  495 BEEP .75,18
  498 PRINT PAPER 1; INK 9;"ENTERING INCOME AMOUNTS         "
  499 PRINT G$
  510 FOR A=1 TO 14
  520 PRINT I$(A);" ";
  530 INPUT INK 9;"NOW ENTER EACH INCOME AMOUNT-";I(A)
  534 LET I(A)= INT (I(A)*100+.5)
  535 GO SUB 815
  540 PRINT TAB 15;"$"; TAB 25- LEN J$;J$:BEEP .2,35
  550 NEXT A
  560 PRINT FLASH 1;"ENTRIES ARE COMPLETE:"'"NOW PRESS ENTER TO PROCEED"
  565 PAUSE 0
  569 REM \{20}\{1}OPENING DATE ENTRY-CASH\{20}\{0}
  570 CLS :BEEP .5,15:BORDER 6
  572 POKE 23658,8
  573 POKE 23609,100
  575 PRINT AT 5,0; PAPER 4; FLASH 1; BRIGHT 1; INK 7;"ENTER TODAYS DATE:ie.""JAN. 1 84"""
  580 INPUT P$:BEEP .75,18:PRINT TAB 1; PAPER 6; BRIGHT 1;"TODAY'S DATE"; TAB 15;P$
  581 PRINT AT 5,0;"                                "
  585 PRINT AT 8,1; PAPER 7; FLASH 1; BRIGHT 1; INK 0;"ENTER PRESENT CASH ON HAND:"
  588 INPUT I(1):BEEP .75,18:PRINT TAB 1; PAPER 6; BRIGHT 1; TAB 1;"CASH ON HAND"; TAB 20;"$";
  589 LET I(1)= INT (I(1)*100+.5)
  590 GO SUB 960:PRINT M$
  591 PRINT AT 8,1;"                                "
  592 PRINT AT 11,1; PAPER 7; BRIGHT 1; FLASH 1;"ENTER PRESENT CHECKING BALANCE:"
  593 INPUT I(2):BEEP .75,18:PRINT TAB 1; PAPER 6; BRIGHT 1; TAB 1;"CHECKING BALANCE:"; TAB 20;"$";
  594 LET I(2)= INT (I(2)*100+.5)
  595 GO SUB 970:PRINT N$
  596 PRINT AT 11,1;"                                "
  597 PRINT AT 21,0; PAPER 2; INK 7; BRIGHT 1; FLASH 1;" NOW PRESS ANY KEY TO CONTINUE:"
  598 PAUSE 0
  599 \{20}\{1} REM  menu\{20}\{0}
  600 BORDER 6:PAPER 7:CLS :BEEP .5,0:BEEP 1,-10
  630 PRINT PAPER 4;"MONTHLY BUDGET-"; TAB 32- LEN P$;P$
  640 PRINT G$
  650 PRINT TAB 1; BRIGHT 1; PAPER 6;"1-TO SEE BUDGET."
  660 PRINT :PRINT TAB 1; BRIGHT 1; PAPER 6;"2-TO ENTER AN EXPENSE PAID."
  665 PRINT TAB 3; BRIGHT 1; PAPER 6;"OR TO SEE EXPENSE PAID LIST."
  670 PRINT :PRINT TAB 1; BRIGHT 1; PAPER 6;"3-TO ENTER INCOME RECEIVED."
  675 PRINT TAB 3; BRIGHT 1; PAPER 6;"OR SEE INCOME RECEIVED LIST."
  680 PRINT :PRINT TAB 1; BRIGHT 1; PAPER 6;"4-a)TO AMEND A BUDGET NAME:"
  685 PRINT TAB 3; BRIGHT 1; PAPER 6;"b)AMEND A MONTHLY AMOUNT:"
  687 PRINT TAB 3; PAPER 6; BRIGHT 1;"c)TO RE-SET FOR NEW MONTH:"
  710 PRINT :PRINT TAB 1; BRIGHT 1; PAPER 6;"5-TO SEE PRESENT STATUS."
  720 PRINT :PRINT TAB 1; BRIGHT 1; PAPER 6;"6-TO SAVE PROGRAM."
  730 PRINT G$
  735 PRINT TAB 6; PAPER 3; INK 9; BRIGHT 1;" \* R.J.CUNNINGHAM "
  740 PRINT AT 20,1; FLASH 1; BRIGHT 1;"PRESS APPROPRIATE NUMBER KEY."
  741 GO SUB 9600
  745 LET A$= INKEY$
  750 IF CODE A$<49 OR CODE A$>56 THEN GO TO 745
  760 CLS :IF A$ <>"6" THEN GO TO VAL A$*1000
  770 IF A$="6" THEN GO TO 9500
  799 REM \{20}\{1} VALUES TO STRING\{20}\{1}S\{20}\{0}
  801 LET F$= STR$ E(A)
  802 IF E(A)=0 THEN LET F$="000"
  803 LET F$=F$( TO LEN F$-2)+"."+F$(LEN F$-1 TO )
  804 IF VAL F$ >=0 THEN GO TO 806
  805 LET F$=F$(2 TO )
  806 RETURN 
  807 LET Q$= STR$ Q(A)
  808 IF Q(A)=0 THEN LET Q$="000"
  809 LET Q$=Q$( TO LEN Q$-2)+"."+Q$(LEN Q$-1 TO )
  810 IF VAL Q$ >=0 THEN GO TO 812
  811 LET Q$=Q$(2 TO )
  812 RETURN 
  815 REM 
  816 LET J$= STR$ I(A)
  817 IF I(A)=0 THEN LET J$="000"
  818 LET J$=J$( TO LEN J$-2)+"."+J$(LEN J$-1 TO )
  819 IF VAL J$ >=0 THEN GO TO 821
  820 LET J$=J$(2 TO )
  821 RETURN 
  822 LET S$= STR$ S(A)
  823 IF S(A)=0 THEN LET S$="000"
  824 LET S$=S$( TO LEN S$-2)+"."+S$(LEN S$-1 TO )
  825 IF VAL S$ >=0 THEN GO TO 827
  826 LET S$=S$(2 TO )
  827 RETURN 
  830 REM 
  831 LET Y$= STR$ (E(A)-Q(A))
  832 IF E(A)-Q(A) <=0 THEN LET Y$="000"
  833 LET Y$=Y$( TO LEN Y$-2)+"."+Y$(LEN Y$-1 TO )
  834 IF VAL Y$ >=0 THEN GO TO 836
  835 LET Y$=Y$(2 TO )
  836 RETURN 
  840 LET Z$= STR$ (I(A)-S(A))
  841 IF I(A)-S(A) <=0 THEN LET Z$="000"
  842 LET Z$=Z$( TO LEN Z$-2)+"."+Z$(LEN Z$-1 TO )
  843 IF VAL Z$ >=0 THEN GO TO 845
  844 LET Z$=Z$(2 TO )
  845 RETURN 
  900 REM 
  901 LET A$= STR$ TE
  902 IF TE=0 THEN LET A$="000"
  903 LET A$=A$( TO LEN A$-2)+"."+A$(LEN A$-1 TO )
  904 IF VAL A$ >=0 THEN GO TO 906
  905 LET A$=A$(2 TO )
  906 RETURN 
  910 LET B$= STR$ TI
  911 IF TI=0 THEN LET B$="000"
  912 LET B$=B$( TO LEN B$-2)+"."+B$(LEN B$-1 TO )
  913 IF VAL B$ >=0 THEN GO TO 915
  914 LET B$=B$(2 TO )
  915 RETURN 
  920 LET C$= STR$ TQ
  921 IF TQ=0 THEN LET C$="000"
  922 LET C$=C$( TO LEN C$-2)+"."+C$(LEN C$-1 TO )
  923 IF VAL C$ >=0 THEN GO TO 925
  924 LET C$=C$(2 TO )
  925 RETURN 
  930 LET D$= STR$ (TE-TQ)
  931 IF TE-TQ=0 THEN LET D$="000"
  932 LET D$=D$( TO LEN D$-2)+"."+D$(LEN D$-1 TO )
  933 IF VAL D$ >=0 THEN GO TO 935
  934 LET D$=D$(2 TO )
  935 RETURN 
  940 LET K$= STR$ TS
  941 IF TS=0 THEN LET K$="000"
  942 LET K$=K$( TO LEN K$-2)+"."+K$(LEN K$-1 TO )
  943 IF VAL K$ >=0 THEN GO TO 945
  944 LET K$=K$(2 TO )
  945 RETURN 
  950 LET L$= STR$ (TI-TS)
  951 IF TI-TS=0 THEN LET L$="000"
  952 LET L$=L$( TO LEN L$-2)+"."+L$(LEN L$-1 TO )
  953 IF VAL L$ >=0 THEN GO TO 955
  954 LET L$=L$(2 TO )
  955 RETURN 
  960 LET M$= STR$ I(1)
  961 IF I(1)=0 THEN LET M$="000"
  962 LET M$=M$( TO LEN M$-2)+"."+M$(LEN M$-1 TO )
  963 IF VAL M$ >=0 THEN GO TO 965
  964 LET M$=M$(2 TO )
  965 RETURN 
  970 LET N$= STR$ I(2)
  971 IF I(2)=0 THEN LET N$="000"
  972 LET N$=N$( TO LEN N$-2)+"."+N$(LEN N$-1 TO )
  973 IF VAL N$ >=0 THEN GO TO 975
  974 LET N$=N$(2 TO )
  975 RETURN 
  980 LET O$= STR$ (I(1)+I(2))
  981 IF I(1)+I(2)=0 THEN LET O$="000"
  982 LET O$=O$( TO LEN O$-2)+"."+O$(LEN O$-1 TO )
  983 IF VAL O$ >=0 THEN GO TO 985
  984 LET O$=O$(2 TO )
  985 RETURN 
  990 LET V=(I(1)+I(2)+(TI-TS)-(TE-TQ))
  991 LET V$= STR$ V
  992 IF V=0 THEN LET V$="000"
  993 LET V$=V$( TO LEN V$-2)+"."+V$(LEN V$-1 TO )
  994 IF VAL V$ >=0 THEN GO TO 997
  997 RETURN 
  998 REM \{20}\{1}MONTHLY DUE SCREEN\{20}\{0}
 1000 CLS :BORDER 6:BEEP .1,10:PRINT INK 7; PAPER 6;"MONTHLY DUE LIST"; TAB 32- LEN P$;P$
 1001 INK 9
 1010 PLOT 1,168:DRAW 254,0
 1020 PRINT PAPER 4; INK 7;" EXPENSE:  AMT.    INCOME:  AMT: "
 1040 FOR A=1 TO 14:GO SUB 800:PRINT AT A+1,0;E$(A);"$"; TAB 15- LEN F$;F$:NEXT A:FOR A=1 TO 14:GO SUB 815:PRINT AT A+1,16; OVER 1;;I$(A);"$"; TAB 32- LEN J$;;J$; AT A+1,0:NEXT A
 1045 FOR A=1 TO 14:PRINT AT A+1,0; OVER 1; PAPER 2; BRIGHT 1;"_______________":NEXT A
 1046 FOR A=1 TO 2:PRINT AT A+1,16; OVER 1; BRIGHT 1; PAPER 7;"________________":NEXT A
 1047 FOR A=3 TO 14:PRINT AT A+1,16; OVER 1; BRIGHT 1; PAPER 1;"________________":NEXT A
 1050 PRINT INK 4;G$
 1080 GO SUB 9620
 1089 GO SUB 900
 1090 PRINT PAPER 2; BRIGHT 1;"EXP.DUE:$";:GO SUB 900:PRINT TAB 15- LEN A$; PAPER 2; BRIGHT 1;A$;:GO SUB 910:PRINT TAB 16; PAPER 1; BRIGHT 1;"INC.DUE."; TAB 24;"$"; TAB 32- LEN B$;B$;
 1100 PRINT "  CASH BALANCE:  $";(TI-TE)/100
 1105 PRINT :PRINT PAPER 4; BRIGHT 1; INK 7;"PRESS ""Z"" FOR PRINTED COPY:"
 1110 PRINT FLASH 1; BRIGHT 1;"PRESS ANY KEY TO RETURN TO MENU:"
 1120 GO SUB 9600
 1130 PLOT 125,159:DRAW 0,-143
 1135 PLOT 0,31:DRAW 255,0
 1137 PLOT 0,15:DRAW 255,0
 1140 PLOT 2,159:DRAW 251,0
 1142 IF INKEY$="" THEN GO TO 1142
 1143 IF INKEY$="Z" THEN COPY 
 1145 IF INKEY$ <>"Z" THEN GO TO 600
 1999 REM \{20}\{1}EXPENSE PAID SCREEN\{20}\{0}
 2000 CLS :BORDER 2:INK 9:BEEP .5,12
 2010 PRINT PAPER 2; INK 7;"EXPENSE PD. ENTRIES:"; TAB 32- LEN P$;P$
 2015 PRINT G$
 2020 PRINT AT 2,0;"Item"; TAB 8;"Due"; TAB 15; "Paid"; TAB 22;"Bal/Due";"Dte"; OVER 1; AT 2,0; INK 0; PAPER 6;"________"; TAB 8; PAPER 5;"_______"; TAB 15; PAPER 7; BRIGHT 1;"_______"; TAB 22; BRIGHT 0; PAPER 5;"_______"; PAPER 6;"___"
 2030 FOR A=1 TO 14:GO SUB 800 :PRINT E$(A);"$"; TAB 15- LEN F$;F$; TAB 15;"$";:GO SUB 807:PRINT TAB 22- LEN Q$;Q$;; TAB 22;"$";:GO SUB 830:PRINT TAB 29- LEN Y$;Y$; TAB 30;F(A):NEXT A
 2035 FOR A=1 TO 14:PRINT OVER 1; AT A+2,0; INK 0; PAPER 6;"________"; TAB 8; PAPER 5;"_______"; TAB 15; PAPER 7; BRIGHT 1;"_______"; TAB 22; BRIGHT 0; PAPER 5;"_______"; PAPER 6;"___":NEXT A
 2040 GO SUB 9620
 2042 PRINT AT 17,0;"TOTALS:$";:GO SUB 900:PRINT TAB 15- LEN A$;A$; TAB 15;"$";:GO SUB 920:PRINT TAB 22- LEN C$;C$; TAB 22;"$";:GO SUB 930:PRINT TAB 29- LEN D$;D$;
 2043 PRINT OVER 1; AT 17,0; INK 0; PAPER 6; BRIGHT 1;"________"; TAB 8; PAPER 5; BRIGHT 1;"_______"; TAB 15; PAPER 7; BRIGHT 1;"_______"; TAB 22; BRIGHT 1; PAPER 5;"_______"; PAPER 6;"___"
 2044 PRINT AT 20,0; PAPER 4;"<ENTER> 15 TO COPY"
 2045 GO SUB 9600:PRINT AT 21,0; PAPER 2;"<ENTER> 0 TO RETURN TO MENU OR:"; AT 21,0; INK 7; OVER 1;H$
 2050 INPUT FLASH 1;"ENTER ITEM NUMBER OF ENTRY ";A:BEEP .2,18
 2055 IF A>15 THEN BEEP .1,30:GO TO 2048
 2058 IF A=0 THEN GO TO 600
 2059 IF A=15 THEN COPY :GO TO 2048
 2060 IF A >=1 OR A <=15 THEN PRINT AT 21,0; PAPER 2;"                                "
 2065 PRINT AT 18,0; PAPER 2; INK 7; BRIGHT 1;"ITEM: ";E$(A);" BEING ENTERED"
 2070 INPUT FLASH 1;"ENTER: AMOUNT PAID FOR ITEM:$ ";P:BEEP .75,18
 2071 PRINT PAPER 2; INK 7; BRIGHT 1;"ITEM: ";E$(A);" AMT. PAID ";"$";P
 2074 LET P= INT (P*100+.5)
 2075 LET Q(A)=Q(A)+P
 2090 INPUT FLASH 1;"ENTRY DATE? (ie:1-31)";F(A):BEEP .75,18
 2100 PRINT BRIGHT 1; PAPER 2; INK 7;"ITEM: ";A;"        DATE PAID:";F(A):PRINT AT 21,0; PAPER 2;"                                "
 2110 PAUSE 100:GO TO 2000
 2999 REM \{20}\{1}INCOME RCD SCREEN\{20}\{0}
 3000 CLS :BORDER 1:BEEP .5,12
 3010 PRINT PAPER 1; INK 7;"INCOME RCD. ENTRIES:"; TAB 32- LEN P$;P$
 3015 PRINT G$
 3020 PRINT AT 2,1;"Item"; TAB 8;"Due"; TAB 15;"Rcd."; TAB 22;"Bal/DueDte";
 3025 PRINT OVER 1; AT 2,0; INK 0; PAPER 6;"________"; TAB 8; PAPER 5;"_______"; TAB 15; PAPER 6; BRIGHT 1;"_______"; TAB 22; BRIGHT 0; PAPER 5;"_______"; PAPER 6;"___"
 3028 FOR A=1 TO 2:GO SUB 815:PRINT AT A+2,0;I$(A); TAB 13;"$"; TAB 22- LEN J$;J$;"$":NEXT A
 3030 FOR A=3 TO 14:GO SUB 815:PRINT AT A+2,0;I$(A);"$"; TAB 15- LEN J$;J$;"$";:GO SUB 822:PRINT TAB 22- LEN S$;S$; TAB 22;:GO SUB 840:PRINT "$"; TAB 30- LEN Z$;Z$; TAB 30;G(A):NEXT A
 3033 FOR A=1 TO 2:PRINT AT A+2,0; OVER 1;H$:NEXT A
 3035 FOR A=3 TO 14:PRINT OVER 1; AT A+2,0; INK 0; PAPER 6;"________"; TAB 8; PAPER 5;"_______"; TAB 15; PAPER 6; BRIGHT 1;"_______"; TAB 22; BRIGHT 0; PAPER 5;"________"; PAPER 6;"__":NEXT A
 3042 GO SUB 9620
 3045 PRINT AT 17,0;"TOTALS:$";:GO SUB 910:PRINT TAB 15- LEN B$;B$;:GO SUB 940:PRINT TAB 22- LEN K$;K$; TAB 22;"$";:GO SUB 950:PRINT TAB 30- LEN L$;L$
 3046 PRINT OVER 1; AT 17,0; INK 0; PAPER 6; BRIGHT 1;"________"; TAB 8; PAPER 5; BRIGHT 1;"_______"; TAB 15; PAPER 7; BRIGHT 1;"_______"; TAB 22; BRIGHT 1; PAPER 5;"________"; PAPER 6;"__"
 3047 PRINT AT 20,0; PAPER 4;"<ENTER> 15 TO COPY"
 3048 GO SUB 9600:PRINT AT 21,0; PAPER 1;"<ENTER> 0 TO RETURN TO MENU OR:"; AT 21,0; INK 7; OVER 1;H$
 3051 INPUT FLASH 1;"ENTER ITEM NUMBER OF ENTRY ";A:BEEP .5,18
 3055 IF A>15 THEN BEEP .1,30:GO TO 3050
 3056 IF A=0 THEN GO TO 600
 3057 IF A=15 THEN COPY :GO TO 3050
 3058 IF A >=3 OR A <=14 THEN PRINT AT 21,0; PAPER 1;"                                ":IF A=1 OR A=2 THEN CLS :PRINT AT 10,0; FLASH 1;"ITEM 1&2 CANNOT BE ENTERED HERE USE AMEND LIST: MENU (#4)       ":PAUSE 240:GO TO 3000
 3059 PRINT AT 18,0; PAPER 1; BRIGHT 1; INK 7;"ITEM: ";I$(A);" BEING ENTERED."
 3070 INPUT PAPER 1; INK 7; BRIGHT 1; FLASH 1;"ENTER: AMOUNT RECD. FOR ITEM: ";R
 3071 PRINT PAPER 1; INK 7; BRIGHT 1;"ITEM: ";I$(A);"AMT.RCD. $";R:BEEP .75,18
 3074 LET R= INT (R*100+.5)
 3075 LET S(A)=S(A)+R
 3090 INPUT FLASH 1;"ENTRY DATE?(ie.1-31)";G(A):BEEP .75,18
 3100 PRINT BRIGHT 1; PAPER 1; INK 7;"ITEM: ";A;" DATE PAID: ";G(A)
 3105 ON ERR RESET 
 3110 PAUSE 100:GO TO 3000
 3999 REM \{20}\{1}AMEND MENU\{20}\{0}
 4000 CLS :BEEP .5,18:BORDER 6
 4010 PRINT INK 9; PAPER 6;"          AMENDING LIST         "
 4020 PRINT G$
 4025 PRINT TAB 12; BRIGHT 1; PAPER 0; INK 7;"TO AMEND:"
 4030 PRINT AT 5,5; PAPER 6;"1-AN EXPENSE ITEM?"
 4040 PRINT :PRINT AT 8,5; PAPER 6;"2-AN INCOME ITEM?"
 4050 PRINT :PRINT AT 11,1; PAPER 6;"3-NO CHANGES: RETURN TO MENU."
 4060 PRINT AT 14,0;G$
 4065 PRINT AT 16,0; PAPER 6; BRIGHT 1;"4-TO RE-SET PAID/RCD VALUES TO    ZERO ON ALL ITEMS."' "DO THIS TO START A NEW MONTH OF ENTRIES."
 4070 PRINT AT 21,2; FLASH 1; BRIGHT 1;"PRESS NUMBER OF ITEM DESIRED."
 4080 IF INKEY$ <>"1" AND INKEY$ <>"2" AND INKEY$ <>"3" AND INKEY$ <>"4" THEN GO TO 4080
 4090 IF INKEY$="1" THEN BORDER 2:LET X=1:CLS :GO TO 4200
 4100 IF INKEY$= "2" THEN :CLS :BORDER 1:LET X=2:GO TO 4210
 4110 IF INKEY$="3" THEN :CLS :GO TO 600
 4120 IF INKEY$="4" THEN GO TO 9700
 4199 REM \{20}\{1}COMBINED ENTRIES FOR   AMENDOF INCOME AND EXPENSES\{20}\{0}
 4200 IF X=1 THEN BEEP .5,15:PRINT AT 1,5; INK 7; PAPER 2;"AMENDING EXPENSE ITEMS"
 4210 IF X=2 THEN BEEP .5,15:PRINT AT 1,5; INK 7; PAPER 1;"AMENDING INCOME ITEMS"
 4212 PRINT G$
 4215 PRINT "item"; TAB 10;"amt."; TAB 16;"item"; TAB 25;"amt."
 4220 PRINT G$
 4240 IF X=1 THEN FOR A=1 TO 7:GO SUB 800:PRINT AT 4+A,0;E$(A);"$"; TAB 15- LEN F$;F$:NEXT A:FOR A=8 TO 14:GO SUB 800:PRINT AT A-3,17;E$(A);"$"; TAB 32- LEN F$;F$:NEXT A
 4260 IF X=2 THEN FOR A=1 TO 7:GO SUB 815:PRINT AT 4+A,0;I$(A);"$"; TAB 16- LEN J$;J$:NEXT A:FOR A=8 TO 14:GO SUB 815:PRINT AT A-3,17;I$(A);"$"; TAB 32- LEN J$;J$:NEXT A
 4280 PRINT H$
 4290 PRINT TAB 8;"TOTAL:  $";:GO SUB 9620
 4295 IF X=1 THEN GO SUB 900:PRINT TAB 26- LEN A$;A$
 4297 IF X=2 THEN LET TI=TI+I(1)+I(2):GO SUB 910:PRINT TAB 26- LEN B$;B$:LET TI=TI-I(1)-I(2)
 4300 PRINT G$
 4310 PRINT TAB 1; BRIGHT 1;"ENTER:"; FLASH 1;" ""A"" "; FLASH 0;"TO CHANGE AMOUNT"
 4320 PRINT TAB 1; BRIGHT 1;"ENTER:"; FLASH 1;" ""T"" "; FLASH 0;"FOR NEW TITLE"
 4330 PRINT TAB 1; BRIGHT 1;"ENTER:"; FLASH 1;" ""M"" "; FLASH 0;"TO RETURN TO MENU"
 4340 INPUT X$
 4350 IF X$(1) <>"A" AND X$(1) <>"T" AND X$(1) <>"M" THEN GO TO 4340
 4355 IF X$(1)="M" THEN CLS :GO TO 600
 4360 IF X$(1)="R" THEN CLS :GO TO 4000
 4370 IF X$(1)="A" THEN BEEP .2,30:INPUT "ENTER ITEM NUMBER FOR NEW AMOUNT: ";A:BEEP .2,25
 4380 IF X$(1)="T" THEN BEEP .2,30:INPUT "ENTER ITEM NUMBER FOR NEW TITLE: ";A:BEEP .2,25
 4385 IF A<1 OR A>14 THEN BEEP .1,20:GO TO 4370
 4390 IF X$(1)="T" AND X=1 OR X$(1)="A" AND X=1 THEN BEEP .2,30:PRINT AT 18,1; PAPER 2; INK 9;"AMENDING ITEM: ";E$(A)
 4400 IF X$(1)="T" AND X=2 OR X$(1)="A" AND X=2 THEN BEEP .2,30:PRINT AT 18,1; PAPER 1; INK 9;"AMENDING ITEM: ";I$(A)
 4420 IF X$(1)="T" AND X=2 AND A=1 THEN PRINT FLASH 1; BRIGHT 1;\{5}"CAN'T CHANGE THAT TITLE:RE-ENTER":BEEP .1,20:PAUSE 120:PRINT AT 18,1;"                 `"; AT 19,0;"                                ":GO TO 4380
 4430 IF X$(1)="T" AND X=2 AND A=2 THEN PRINT FLASH 1; BRIGHT 1;\{5}"CAN'T CHANGE THAT TITLE:RE-ENTER":BEEP .1,20:PAUSE 120:PRINT AT 18,1;"                  "; AT 19,0;"                                ":GO TO 4380
 4440 IF X$(1)="T" AND X=1 THEN INPUT "ENTER NEW TITLE: ";E$(A):BEEP .2,40
 4445 IF X$(1)="T" AND X=2 THEN INPUT "ENTER NEW TITLE: ";I$(A):BEEP .2,40
 4450 IF X$(1)="A" AND X=1 THEN INPUT "ENTER NEW AMOUNT: ";E(A):BEEP .2,40
 4455 IF X$(1)="A" AND X=2 THEN INPUT "ENTER NEW AMOUNT: ";I(A):BEEP .2,40
 4460 IF X$(1)="T" AND X=1 THEN LET E$(A)= STR$ A+"-"+E$(A)
 4470 IF X$(1)="T" AND X=2 THEN LET I$(A)= STR$ A+"-"+I$(A)
 4480 IF X$(1)="T" AND X=1 THEN PRINT FLASH 1; BRIGHT 1;"NEW TITLE: ";E$(A)
 4490 IF X$(1)="T" AND X=2 THEN PRINT FLASH 1; BRIGHT 1;"NEW TITLE: ";I$(A)
 4500 IF X$(1)="A" AND X=1 THEN PRINT FLASH 1; BRIGHT 1;"NEW AMOUNT $";E(A):LET E(A)=E(A)*100
 4510 IF X$(1)="A" AND X=2 THEN PRINT FLASH 1; BRIGHT 1;"NEW AMOUNT $";I(A):LET I(A)=I(A)*100
 4520 PRINT BRIGHT 1;"ENTRY HAS BEEN MADE-AMENDED LIST FOLLOWS:":BEEP .2,15:
 4525 GO SUB 9600
 4530 PAUSE 150:CLS :GO TO 4200
 4999 REM \{20}\{1}MONTHLY SUMMARY\{20}\{0}
 5000 CLS :BORDER 5:INK 9:BEEP .5,0
 5010 PRINT "   SUMMARY OF MONTHLY ACCOUNT   "
 5015 PRINT AT 0,0; BRIGHT 1; PAPER 6; OVER 1;H$
 5020 PRINT TAB 5;"TO: "; TAB 16- LEN P$/2;P$
 5025 PRINT AT 1,0; OVER 1; BRIGHT 1; PAPER 5;H$
 5027 BRIGHT 0
 5028 PRINT AT 2,0; PAPER 1;"INCOME DUE:";:GO SUB 950:PRINT TAB 24;"$"; TAB 32- LEN L$; PAPER 7; BRIGHT 1;L$
 5030 PRINT PAPER 1;"INCOME RCD:";:GO SUB 940:PRINT TAB 24;"$"; TAB 32- LEN K$; BRIGHT 1;K$
 5050 PRINT BRIGHT 1; PAPER 1;"INCOME TOTAL:";:GO SUB 910:PRINT TAB 24;"$"; TAB 32- LEN B$; BRIGHT 1; PAPER 1;B$
 5052 PRINT PAPER 5;G$
 5055 PRINT PAPER 2;"BILLS DUE:   ";:GO SUB 930:PRINT TAB 24;"$"; TAB 32- LEN D$; PAPER 7; BRIGHT 1;D$
 5060 PRINT PAPER 2;"BILLS PAID:";:GO SUB 920:PRINT TAB 24;"$"; TAB 32- LEN C$; PAPER 7; BRIGHT 1;C$
 5080 PRINT PAPER 2; BRIGHT 1;"BILLS TOTAL:";:GO SUB 900:PRINT TAB 24;"$"; TAB 32- LEN A$; PAPER 2; BRIGHT 1;A$
 5090 PRINT PAPER 5;G$
 5120 PRINT "CASH ON HAND:";:GO SUB 960:PRINT  TAB 24;"$"; TAB 32- LEN M$; BRIGHT 1;M$
 5130 PRINT PAPER 7;"CASH IN CHECKING:";:GO SUB 970:PRINT TAB 24;"$"; TAB 32- LEN N$; BRIGHT 1;N$
 5140 PRINT "CASH TOTAL:";:GO SUB 980:PRINT TAB 24;"$"; TAB 32- LEN O$; BRIGHT 1; PAPER 7;O$
 5145 PRINT PAPER 5;G$
 5148 PRINT PAPER 6; BRIGHT 1;"     SUMMARY TO MONTH'S END     ":PRINT PAPER 5;G$
 5149 PRINT "CASH TOTAL:";:GO SUB 980:PRINT TAB 24;"$"; TAB 32- LEN O$; BRIGHT 1; PAPER 7;O$
 5150 PRINT PAPER 1;"INCOME STILL DUE:";:GO SUB 950:PRINT TAB 24;"$"; TAB 32- LEN L$; BRIGHT 1; PAPER 1;L$
 5155 PRINT PAPER 2;"BILLS STILL DUE:";:GO SUB 930:PRINT TAB 24;"$"; TAB 32- LEN D$; BRIGHT 1; PAPER 2;D$
 5160 PRINT "CASH TO MONTH'S END:"; TAB 24;\{20}\{1}\{20}\{1}\{20}\{0}"$";:GO SUB 990:PRINT TAB 32- LEN V$; BRIGHT 1;V$
 5165 IF VAL V$<0 THEN PRINT AT 19,20; PAPER 2; FLASH 1; BRIGHT 1; OVER 1;"OVER";"_________"
 5170 PRINT AT 20,0; BRIGHT 1; FLASH 1;"{ENTER} 15 TO COPY."
 5180 PRINT AT 21,0; BRIGHT 1; FLASH 1;"{ENTER} 0 TO RETURN TO MENU."
 5185 GO SUB 9600
 5190 INPUT R$
 5195 IF R$="15" THEN COPY :GO TO 5190
 5196 IF R$="0" THEN GO TO 600
 5197 GO TO 5190
 8998 STOP 
 8999 REM \{20}\{1}INITIAL VALUES,DIMS\{20}\{0}
 9000 DIM E(14)
 9005 DIM Q(14)
 9010 DIM I(14)
 9015 DIM S(14)
 9040 DIM F(14)
 9050 DIM G(14)
 9060 DIM E$(14,8)
 9070 DIM I$(14,8)
 9080 LET TE=0
 9100 LET TI=0
 9115 LET TQ=0
 9118 LET TS=0
 9120 LET I$(1)="1-C.O.H."
 9130 LET I$(2)="2-CKING"
 9140 LET G$="\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''"
 9150 LET \{20}\{0}H$="________________________________"
 9170 LET X$=""
 9200 RETURN 
 9300 REM \{20}\{1}SAVE SCREEN\{20}\{0}
 9400 STOP 
 9500 CLS 
 9510 PRINT AT 5,1; BRIGHT 1; FLASH 1;" ARE YOU SURE YOU ARE DONE ???"
 9520 PRINT :PRINT TAB 1;"IF YES THEN PRESS ""Y"" TO SAVE."
 9530  PRINT :PRINT TAB 1;"IF NO THEN PRESS ""N"" TO RETURN  TO PROGRAM"
 9535 PRINT AT 15,7; PAPER 3; BRIGHT 1; INK 9;" \* R.J.CUNNINGHAM "
 9540 IF INKEY$="" THEN GO TO 9540
 9550 IF INKEY$="N" THEN CLS :BEEP .1,20:GO TO 600
 9560 IF INKEY$="Y" THEN BEEP .1,20:CLS :GO TO 9900
 9570 GO TO 9540
 9600 PLOT 0,0:DRAW 255,0:DRAW 0,175:DRAW -255,0:DRAW 0,-175
 9610 RETURN 
 9615 REM \{20}\{1}INITIALIZE TOTALS\{20}\{0}
 9620 LET TE=0:LET TI=0:LET TQ=0:LET TS=0
 9630 FOR A=1 TO 14:LET TE=TE+E(A):LET TQ=TQ+Q(A):NEXT A
 9635 FOR A=3 TO 14:LET TI=TI+I(A):LET TS=TS+S(A):NEXT A
 9650 RETURN 
 9690 REM \{20}\{1}RESET MONTHLY VALUES\{20}\{0}
 9700 CLS :BEEP 1,20:BORDER 4
 9705 BRIGHT 1:PAPER 4:CLS 
 9710 PRINT AT 10,0; INK 7; FLASH 1; BRIGHT 1; PAPER 4;"RE-SETTING PD/RCD VALUES TO ZERO"
 9720 FOR A=1 TO 14:LET G(A)=0:LET F(A)=0:LET Q(A)=0:LET S(A)=0:NEXT A
 9740 FLASH 0:PAPER 7
 9750 PAUSE 60:GO TO 570
 9800 STOP 
 9900 SAVE "MBUDG1" LINE 570:GO TO 9910
 9910 CLS :PRINT AT 10,1; INK 2; BRIGHT 1;"REWIND TAPE, REPLAY TO VERIFY!"
 9915 PRINT PAPER 2;" IF VERIFY FAILS USE GOTO 600   "
 9920 VERIFY "MBUDG1":GO TO 9930
 9930 CLS :PRINT AT 15,0; FLASH 1; PAPER 2;"VERIFY OK!!":PAUSE 120:GO TO 600

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

Scroll to Top