This is a two-part accounting system called “ACZ General Ledger 2.000,” written in 1984 by Alan R. Czarnek. The suite handles double-entry bookkeeping: the first module (ACZGL1) manages journal entry input, ledger detail display, and transaction data storage, while the second module (ACZGL2) generates financial statements including an income statement, balance sheet, and year-to-date trial balance. A companion machine code routine loaded at address RT (derived from system variables at 23730–23731) is used for array sorting, with the BASIC calling it via USR; the loader adjusts the RAMTOP pointer (POKEing 23730–23731) to reserve 500 bytes below the current top of RAM before loading the code block. The system supports both keyboard input and a Cardco numeric keypad via STICK, using joystick port selection at startup, and encodes transaction metadata (debit/credit flag and reference number) in the fractional part of floating-point array elements stored in array A(801,2).
Program Analysis
Overall Architecture
The system comprises two independently-loaded BASIC programs (ACZGL1 and ACZGL2) plus a shared 500-byte machine code block (“acz mc”). A splash screen (“acz soft”) is loaded as a SCREEN$ image. The loader sequence at lines 100–1060 adjusts RAMTOP downward by 500 bytes to carve out safe space for the machine code, then loads it at the reserved address stored in RT. The second program is MERGEd or chained for financial statement output. Both modules share identical low-numbered subroutines (lines 10–390) for numeric formatting, keypad input, cursor movement, and validation.
RAMTOP Manipulation and Machine Code
The loader reads the current RAMTOP from system variables at addresses 23730–23731 (RT = PEEK 23730 + 256*PEEK 23731), subtracts 500, and POKEs the new value back, reserving a 500-byte region below RAMTOP for the machine code. Validity of the loaded routine is checked at line 1000 by testing PEEK RT <> 42 (the ASCII/opcode value 42 acting as a sentinel byte). The machine code is invoked via USR RT for sorting and USR (RT+360) for an account name lookup; a single byte at RT+15 is POKEd to 130 or 129 to switch between two operating modes of the same routine.
Data Encoding in Floating-Point Arrays
The central data store is A(801,2), where column 1 holds a compound value encoding the account number (integer part), a debit/credit flag (first decimal digit: <0.2 for debit, ≥0.2 for credit), and the reference number (remaining fractional digits via RN/100000). Column 2 holds the monetary amount. The trial balance array B(251,2) uses a similar scheme. Separating debit from credit in display and computation is done throughout by testing B(Q,1)-INT B(Q,1) against 0.2. The sentinel element A(801,1) stores the record count N, allowing it to be saved and restored across tape operations.
Subroutine Structure
| Lines | Purpose |
|---|---|
| 10–26 | Format a numeric string Q$ to 9 characters with two decimal places |
| 30–58 | Keypad numeric input with backspace, decimal, and cancel handling via STICK |
| 100–140 | Account name lookup: POKEs digits into machine code buffer, calls USR (RT+360), returns result in A |
| 150–180 | Cursor position adjustment: modifies system variables 23684–23688 to reposition the print position for inline editing feedback |
| 200–270 | Arrow-key menu navigation using either INKEY$ or STICK, moving QF between QB and QA |
| 280–390 | Input and validation of a non-negative decimal number; sets QQ=1 on error |
| 800–970 (GL1) | Error correction loop: displays prompt, calls navigation, allows re-entry of account number and amount in place |
| 8000–8050 | Flashing “INVALID” error indicator using cursor repositioning subroutines |
| 8300–8330 | STICK-based yes/no input: joystick button 12 = “y”, button 11 = “n” |
| 8500–8530 | Printer selection dialog; sets CPY flag |
| 9200–9590 (GL1) | Initialization: dimensions arrays, defines FN A, loads chart of accounts, prompts for keypad preference |
STICK / Keypad Support
The program supports an optional Cardco numeric keypad connected to either joystick port. At startup (lines 9300–9430 in GL1; equivalent in GL2) the user selects port L or R, setting JP to 1 or 2. Thereafter, all input paths check NP (numeric pad flag): when set, input is collected via STICK(2,JP) to detect a button press and STICK(1,JP) to read the value. Keypad codes 0–9 map to digits, 10 = Enter/cancel, 11 = down/N, 12 = up/Y, 13 = backspace, 14 = decimal point. To debounce, the code at line 212 reads the joystick value twice and only proceeds if both reads agree.
Financial Statement Module (ACZGL2)
GL2 is a self-contained financial reporting engine MERGEd from tape. It consumes the B(251,2) trial balance array produced by GL1’s ledger calculation pass. The income statement (lines 2400–3200) iterates over configurable expense categories defined in arrays P(CAT,2) and P$(CAT,15). The balance sheet (lines 4000–4890) uses four fixed asset/liability buckets in W$(4) and F(4,2), plus up to ten offset account pairs in G(10,2). Retained earnings are computed on-the-fly by summing all revenue/expense accounts (lines 3910–3990). Fiscal year-end closing (lines 3500–3890) zeroes income/expense accounts and saves the resulting trial balance to tape labeled "tbal"+E$.
Setup / First-Run Path
Lines 9200–9990 in GL2 implement a one-time setup wizard: it collects company name, expense category definitions, the retained-earnings account number (RE), and fiscal year-end month (FY). It then DELETEs the setup lines (9200–9900) from itself, saves the stripped program as "fin stmt", and uses POKE 26780,75 as a flag byte to indicate that chart-of-accounts entry should follow automatically on next load. The chart of accounts array A$(161,13) stores account records with the integer count in element 151 and offset-account mappings in elements 152–161.
UDG Characters
GL2 defines four UDGs at lines 8610–8680:
\a(USR “A”): Arrow cursor shape —DATA 8,12,254,255,255,254,12,8\b(USR “B”): Solid horizontal bar —DATA 255,0,0,0,0,0,0,0(top line only)\c(USR “C”): Alternating horizontal lines —DATA 0,255,0,255,0,0,0,0, used to build the separator stringO$\d(USR “D”): Lower alternating lines —DATA 0,0,0,0,255,0,255,0, used to buildM$
The \b UDG is used in print statements as a 9-character run ("\b\b\b\b\b\b\b\b\b") to overprint and right-align numeric columns — a technique that exploits OVER 0 overwriting to clear the previous value before printing the new one at a TAB position.
Notable Techniques and Idioms
VAL B$(A)and similar constructs in the account-lookup routine (lines 100–140) pass data to the machine code by POKEing ASCII digits into a fixed buffer, avoiding the need to pass parameters through registers directly.- The
DEF FN A(P)=ABS(INT(D(P)*100+.5)/100)function is used throughout for rounding currency values to two decimal places while keeping them non-negative. DELETEstatements at lines 5570–5590 (GL1) and 9910 (GL2) trim the program in memory after the setup phase, freeing RAM for larger data arrays — a common technique when RAM is tight.- The
MERGE "fin stmt"at line 5622 (GL1) splices the financial reporting code into the running program without clearing existing variables, allowing the trial balance data computed by GL1 to be consumed directly by GL2’s reporting routines. - Lines 3820 and 5540 use the expression
INT(((A(I,1)*10 - INT(A(I,1)*10))*10000)+.1)to extract the reference number from the fractional part of a stored array element, recovering the originalRNthat was encoded asRN/100000.
Anomalies and Observations
- Line 19 of GL1 (
IF 7-DE=LEN Q$ THEN LET Q$=Q$+"00") is absent from GL2’s copy of the same subroutine — GL2’s line 10–26 block omits line 19 entirely. This means GL2’s formatter may produce a string one character shorter than GL1’s for certain inputs, though the padding loop at lines 22–26 compensates in most cases. - In GL1 line 40, the backspace handler sets
Q$(LEN Q$)=" ", which only works if the string is already at least one character long — the guard at line 56 then strips the trailing space. This is an intentional two-step delete idiom rather than a bug. - Line 9220 in GL1 dimensions
D$(2,2)(a 2×2 string array) and then at line 9290 reads intoD$(1)andD$(2)— a string array used to hold the labels “DR” and “CR”. However, the main code usesD$(Q)andD$(P)to index these labels, relying onQandPbeing 1 or 2. - The loop at line 430 in GL2 (
IF X<F(J,1) THEN LET I=I+1: GO TO 430) modifies the FOR loop variableIfrom within the loop body to skip ahead in theB()array — a deliberate use of mutable FOR indices rather than a structured search. - Line 9210 in GL2 contains a typo: “WILL WILL BE CREDITED” — a duplicate word in a PRINT string, cosmetic only.
Content
Source Code
100 BORDER 1: PAPER 1: INK 1: CLS
1000 LOAD "acz soft"SCREEN$
1010 LET RT=PEEK 23730+256*PEEK 23731
1020 LET RT=RT-500
1030 POKE 23731,INT (RT/256): POKE 23730,RT-(INT (RT/256)*256)
1035 INK 7
1040 PRINT AT 21,31; OVER 1;" ": INK 7
1050 LOAD "acz mc"CODE
1060 LOAD "ACZGL1"
1 REM sVAL$ 3PEEK 100aaaaaaaaaaaaacccc':3..`cccccccccccccccccczzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzglglglglglglglglglglglglglglglgl
2 GO TO 9200
10 LET DE=6
12 FOR K=1 TO LEN Q$
14 IF Q$(K)="." THEN GO TO 18
16 LET DE=DE-1: NEXT K
18 IF DE=6-LEN Q$ THEN LET Q$=Q$+".00"
19 IF 7-DE=LEN Q$ THEN LET Q$=Q$+"00"
20 IF 8-DE=LEN Q$ THEN LET Q$=Q$+"0"
22 IF LEN Q$<9 THEN LET Q$=" "+Q$
24 IF LEN Q$>=9 THEN RETURN
26 GO TO 22
30 LET Q$="": PRINT FLASH 1;"::";: LET QX=1: GO SUB 150
32 IF STICK (2,JP)>0 THEN GO TO 36
34 GO TO 32
36 LET QQQ= STICK (1,JP)
38 IF QQQ<10 THEN GO TO 48
40 IF QQQ=13 THEN LET Q$(LEN Q$)=" ": GO TO 52
42 IF QQQ=14 THEN LET R$=".": GO TO 50
44 IF QQQ=10 THEN LET QX=9: RETURN
46 IF QQQ=12 OR QQQ=11 THEN GO TO 32
48 LET R$=STR$ QQQ
50 LET Q$=Q$+R$
51 IF LEN Q$=2 AND Q$(1)=" " THEN LET Q$=R$
52 PRINT Q$;
54 LET QX=LEN Q$: GO SUB 150
56 IF QQQ=13 AND LEN Q$>1 THEN LET Q$=Q$( TO LEN Q$-1)
58 GO TO 32
100 FOR A=1 TO 3: POKE 26720+A,(VAL B$(A))+48: NEXT A
110 POKE 26719,VAL A$(151): POKE 26720,0
120 LET A=USR (RT+360)
140 RETURN
150 LET QA1=(PEEK 23684+256*PEEK 23685)-QX
160 POKE 23688,PEEK 23688+QX
170 POKE 23685,INT (QA1/256): POKE 23684,QA1-(PEEK 23685*256)
180 RETURN
200 PRINT AT QF,3;"a"
205 LET qc=0
209 IF NP THEN GO TO 212
210 LET q$=INKEY$: IF q$="" THEN GO TO 210
211 GO TO 222
212 IF STICK (2,JP)>0 THEN LET QQQ= STICK (1,JP): LET QQW= STICK (1,JP): IF QQQ=QQW THEN GO TO 214
213 GO TO 212
214 IF QQQ=12 THEN LET Q$="7": GO TO 222
216 IF QQQ=11 THEN LET Q$="6": GO TO 222
217 IF QQQ=10 THEN LET Q$=CHR$ 13: GO TO 222
218 GO TO 212
222 IF Q$=CHR$ 13 THEN RETURN
223 IF QF>=qa THEN GO TO 225
224 IF q$="6" THEN LET qc=qe
225 IF QF<=qb THEN GO TO 240
230 IF q$="7" THEN LET qc=-qe
240 PRINT AT QF,3;" "
250 LET QF=QF+qc
270 GO TO 200
280 IF NOT NP THEN INPUT Q$
290 IF NP THEN GO SUB 30
300 LET QQ=0: LET QA1=0
310 IF Q$="" OR Q$="." THEN GO TO 380
320 FOR K=1 TO LEN Q$
330 IF Q$(K)="." THEN LET QA1=QA1+1: GO TO 350
340 IF Q$(K)<"0" OR Q$(K)>"9" THEN GO TO 380
350 IF QA1>1 THEN GO TO 380
360 NEXT K
370 RETURN
380 LET QQ=1
390 RETURN
420 PRINT "ACCT # = ";
430 GO SUB 280
450 IF QQ=1 THEN GO SUB 8000: GO TO 430
460 LET AN=INT (VAL Q$)
470 IF AN>0 AND AN<100 OR AN>599 THEN GO SUB 8000: GO TO 430
499 RETURN
500 PRINT ,, PAPER 6; INK 0;" VALID ACCOUNT #'s ARE 100-599 "
510 RETURN
520 PRINT D$(P);" = ";
530 GO SUB 280
550 IF QQ=1 THEN GO SUB 8000: GO TO 530
560 LET BN=(INT (VAL Q$*100+.1))/100
570 IF BN>999999.99 THEN GO SUB 8000: GO TO 530
580 GO SUB 10: PRINT Q$
590 RETURN
600 LET PA=PA+1
610 IF PA<20 THEN RETURN
615 LET PE=B(Q,1)-INT B(Q,1)
620 LET QF=6: LET QB=6: LET QE=1
630 IF PT<.2 AND PE<.2 THEN LET P=1: GO TO 660
640 IF PT<.2 AND PE>=.2 THEN GO TO 670
650 IF PT>=.2 AND PE>=.2 THEN LET P=2: GO TO 660
660 LET QA=19: GO SUB 800: GO TO 690
670 IF d(3)-(14*(x-1))<>0 THEN LET P=1: LET QA=5+D(3)-(X-1)*14: GO SUB 800
680 IF d(3)-((14*x)-1)<>0 THEN LET P=2: LET QF=5+d(3)-(14*(x-1))+2: LET QB=QF: LET QA=19: GO SUB 800
690 IF P=2 AND Q=S THEN LET ST=9: RETURN
700 LET PA=6: LET X=X+1: CLS
710 PRINT AT 0,0; PAPER 1; INK 7;"REF #:";RN;TAB 31;" "
720 LET Q$=STR$ D(1): GO SUB 10: PRINT PAPER 1; INK 7;TAB 4;"Debit Balance $";Q$;TAB 31;" ": LET Q$=STR$ D(2): GO SUB 10: PRINT PAPER 1; INK 7;TAB 4;"Credit Balance $";Q$;TAB 31;" "
730 PRINT PAPER 1; INK 7;TAB 31;" ": PRINT INVERSE 1;" # NAME AMOUNT "; INVERSE 0: PAPER 0: INK 7
740 LET PT=B(Q,1)-INT B(Q,1)
745 IF Q>1 AND B(Q,1)-INT B(Q,1)<.2 AND B(Q+1,1)-INT B(Q+1,1)>=.2 THEN PRINT : GO TO 770
750 IF PT<.2 THEN PRINT ,,"DR: ";
760 IF PT>=.2 THEN PRINT ,,"CR: ";
770 PAPER 0: INK 7: RETURN
800 PRINT AT 21,0; INVERSE 1;" ANY ERRORS IN "; FLASH 1;" ";D$(P);" "; FLASH 0;"? (Y OR N) "; INVERSE 0
810 IF NOT NP THEN LET Q$=INKEY$: IF Q$="" THEN GO TO 810
815 IF NP THEN GO SUB 8300
820 IF Q$="y" OR Q$="Y" THEN GO TO 850
830 IF Q$="n" OR Q$="N" THEN PRINT AT 21,0;Y$: PAUSE 30: RETURN
840 GO TO 810
850 PRINT AT 21,0; FLASH 1;"MOVE ARROW TO ERROR, PRESS ENTER"; FLASH 0
860 GO SUB 200
870 LET QL=(QF-4-P)+(14*(X-1))
880 PRINT AT P,20; PAPER 1;Y$( TO 9): PRINT AT 21,0;Y$
890 LET A=B(QL,1)-INT B(QL,1)
900 PRINT AT 21,0;: GO SUB 400
910 IF AN=0 THEN GO TO 900
915 LET B(QL,1)=AN+A
920 PRINT AT QF,4;Y$( TO 15);: LET B$=STR$ INT B(QL,1): GO SUB 100
925 PRINT AT QF,4;INT B(QL,1);: IF A=0 THEN GO TO 930
927 PRINT TAB 8;A$(A)(4 TO )
930 PRINT AT 21,0;Y$: PRINT AT 21,0;: GO SUB 520
940 LET D(P)=D(P)-B(QL,2): LET D(P)=FN A(P): LET B(QL,2)=BN
945 LET D(P)=D(P)+BN: LET D(P)=FN A(P)
950 PRINT AT QF,20;Y$( TO 10): LET Q$=STR$ B(QL,2): GO SUB 10: PRINT AT QF,20;Q$
960 LET Q$=STR$ D(P): GO SUB 10: PRINT AT P,20; PAPER 1; INK 7;Q$
970 PRINT AT QF,3;" ": GO TO 800
980 PRINT ,," ACZ GENERAL LEDGER 2.000 "
990 RETURN
1000 BORDER 1: PAPER 1: INK 7: CLS : LET Q=1: IF PEEK RT<>42 THEN PRINT ,," Machine code missing. Re-load";TAB 10;"from start.": STOP
1005 PRINT ''': BEEP .15,20: GO SUB 980: PRINT 'TAB 7;"TRANSACTION ENTRY": PRINT Z$
1010 PRINT ,,TAB 5;"JOURNAL ENTRIES"
1020 PRINT ,,TAB 5;"LEDGER DETAIL"
1040 PRINT ,,TAB 5;"SAVE TRANSACTION DATA"
1050 PRINT ,,TAB 5;"PRINT FINANCIAL STATEMENTS"
1060 PRINT Z$
1070 PRINT '' PAPER 6; INK 0;" MOVE ARROW TO CHOICE, THEN PRESS ENTER. "
1095 LET QF=9: LET QA=15: LET QB=9: LET QE=2
1099 GO SUB 190
1100 CLS
1120 IF QF=9 THEN GO TO 1500
1130 IF QF=11 THEN GO TO 3600
1140 IF QF=13 THEN GO TO 8620
1150 GO TO 5400
1500 BEEP .15,20: PRINT ,, INVERSE 1;" JOURNAL ENTRIES "; INVERSE 0
1505 PRINT ,," ENTER "
1640 PRINT ,,"BEGINING TRANS REF # (2 TO 4999)"
1650 GO SUB 280
1670 IF QQ=1 THEN GO SUB 8000: GO TO 1650
1680 LET RN=VAL Q$
1690 IF RN<2 OR RN>4999 THEN GO SUB 8000: GO TO 1650
1700 LET NN=N+1: LET TD=0: LET TC=0
1710 IF RN>4999 THEN CLS : PRINT ,,"INVALID REFERENCE NUMBER ";RN: GO SUB 8450: GO TO 1000
1720 LET QD=0: LET S=0: DIM D(4): LET P=1: LET X=1
1725 BORDER 1: PAPER 1: INK 7: CLS
1726 FOR Q=1 TO 20
1727 PRINT
1728 NEXT Q
1730 PRINT ,,"REF # = ";RN: POKE 23692,255
1733 FOR Q=1 TO 2
1735 GO SUB 500
1740 PRINT PAPER 6; INK 0;" AT END ";D$(Q);" ENTER ACCOUNT # 0 ": PAPER 0: INK 7
1750 PRINT ,,D$(Q)
1760 GO SUB 400
1770 IF AN=0 THEN PRINT : GO TO 2400
1780 LET S=S+1: PRINT AN,: IF S>150 THEN GO TO 8600
1790 LET B(S,1)=AN+(Q/10)+(RN/100000)
1800 LET P=Q: GO SUB 520
1810 LET B(S,2)=BN
1880 LET D(Q)=D(Q)+B(S,2)
1890 GO TO 1760
2400 LET D(2+Q)=S
2410 NEXT Q
2420 CLS
2430 IF D(3)>0 THEN GO TO 2460
2440 PRINT ,," INVALID - NO DEBIT ENTRIES."
2450 GO TO 3140
2460 IF D(4)-D(3)>0 THEN GO TO 2700
2470 PRINT ,," INVALID - NO CREDIT ENTRIES."
2480 GO TO 3140
2700 LET ST=0: LET Q=1: LET X=0: LET PB=0: LET PC=0: GO SUB 700
2750 FOR Q=1 TO S
2760 IF B(Q,1)-INT B(Q,1)>=.2 THEN LET PB=1
2770 IF PC<>PB AND PA>=19 THEN PRINT : GO SUB 600: GO TO 2773
2772 IF PC<>PB THEN PRINT '"CR: ";: GO SUB 600
2780 LET PC=PB
2800 PRINT TAB 4;INT B(Q,1);: LET B$=STR$ B(Q,1)
2810 GO SUB 100
2820 IF A=0 THEN GO TO 2850
2830 PRINT TAB 8;A$(A)(4 TO );
2850 LET Q$=STR$ B(Q,2): GO SUB 10: PRINT TAB 20;Q$
2860 GO SUB 600
2890 NEXT Q
3000 IF ST=9 THEN GO TO 3060
3005 LET QF=6: LET QB=6: LET QE=1
3010 IF PT>=.2 THEN GO TO 3050
3020 IF D(3)-(14*(X-1))<>0 THEN LET P=1: LET QA=5+D(3)-(14*(X-1)): GO SUB 800
3030 LET P=2: LET QF=5+D(3)-(14*(X-1))+2: LET QB=QF: LET QA=QF-1+(D(4)-D(3)): GO SUB 800
3040 GO TO 3060
3050 LET P=2: LET QA=5+D(4)-(14*(X-1)-1): GO SUB 800
3060 IF X<2 THEN GO TO 3100
3070 CLS : PRINT ''"DO YOU WANT TO RE-CHECK ENTRIES?";TAB 12;"(Y OR N)"
3080 GO SUB 8540
3084 IF Q$="y" OR Q$="Y" THEN GO TO 2700
3086 IF Q$="n" OR Q$="N" THEN GO TO 3100
3090 GO TO 3080
3100 CLS
3110 LET D(1)=ABS (INT (D(1)*100+.5)/100): LET D(2)=ABS (INT (D(2)*100+.5)/100)
3120 GO SUB 980
3130 IF D(1)=D(2) THEN GO TO 3250
3140 PRINT ,, TAB 7;"TOTAL DR=";D(1)
3150 PRINT TAB 7; "TOTAL CR=";D(2)
3160 PRINT ,," THIS ENTRY DOES NOT BALANCE."
3170 GO TO 3200
3200 PRINT ,,TAB 6;"RE-ENTER TRANS # ";RN
3210 GO SUB 8450
3220 GO TO 1720
3250 PRINT AT 4,0; INVERSE 1;TAB 10;"REF # ";RN;TAB 31;" "; INVERSE 0,,,,TAB 6;"PROCESSING ";
3260 FOR Q=1 TO S
3270 LET N=N+1: IF N>800 THEN CLS : PRINT ''"CAN'T HAVE MORE THAN 800 ENTRIES": GO SUB 8450: LET N=N-1: GO TO 1000
3280 LET A(N,1)=B(Q,1): LET A(N,2)=B(Q,2)
3290 NEXT Q
3300 LET RN=RN+1: LET TD=TD+D(1): LET TC=TC+D(2)
3310 PRINT "COMPLETE",,,"TOTAL DR THIS SESSION=";TD,"TOTAL CR THIS SESSION=";TC
3320 PRINT ,,TAB 3;"DO YOU HAVE MORE ENTRIES?";TAB 11;"(Y OR N)"
3330 IF NOT NP THEN LET Q$=INKEY$: IF Q$="" THEN GO TO 3330
3340 IF NP THEN GO SUB 8300
3350 IF Q$="y" OR Q$="Y" THEN GO TO 1710
3360 IF Q$="n" OR Q$="N" THEN GO TO 3400
3370 GO TO 3330
3400 CLS : PAUSE 60: LET QA=0
3410 GO SUB 8500: IF CPY=0 THEN GO TO 3560
3420 LPRINT : LPRINT : LPRINT : LPRINT Z$;TAB 6;"JOURNAL ENTRIES ";E$( TO 2);"/";E$(5 TO )
3430 LPRINT "ACT****NAME*******DR******CR****"
3440 FOR Q=NN TO N
3444 LET P=A(Q,1)-INT A(Q,1)
3446 IF INT (P*10)=INT (QA*10) THEN GO TO 3460
3450 IF P<.2 THEN LPRINT Z$: LPRINT : LPRINT "REF # ";INT (((A(Q,1)*10-INT (A(Q,1)*10))*10000)+.1): LPRINT
3455 IF P>=.2 THEN LPRINT
3460 LPRINT INT A(Q,1);" ";
3465 LET B$=STR$ INT A(Q,1)
3466 GO SUB 100
3470 IF A=0 THEN GO TO 3490
3480 LPRINT A$(A)(4 TO );
3490 LET Q$=STR$ A(Q,2): GO SUB 10
3493 IF P>=.2 THEN LPRINT TAB 23;Q$
3494 IF P<.2 THEN LPRINT TAB 15;Q$
3495 LET QA=P
3550 NEXT Q
3555 LPRINT : LPRINT : LPRINT
3560 LET A(801,1)=N
3570 GO TO 1000
3600 CLS : IF A(801,1)=0 THEN GO TO 1000
3605 GO SUB 980: BEEP .15,20: PRINT ,,TAB 9;"LEDGER DETAIL"
3610 POKE 26720,INT (N/256): POKE 26719,N-((INT (N/256))*256)
3620 IF N=0 THEN GO TO 3650
3625 PRINT AT 10,11;" SORTING "
3630 LET QQ=USR RT: PAUSE 60: CLS
3640 IF QQ=2 THEN PRINT "NO ARRAY IN PROGRAM": STOP
3650 IF Q=0 THEN GO TO 3740
3660 PRINT ,, PAPER 6; INK 0;" ENTER THE NUMBER OF THE ACCOUNT YOU WANT TO SEE "
3670 PRINT PAPER 6; INK 0;" (100 TO 599) "
3680 GO SUB 280: IF QQ=1 THEN GO SUB 8000: GO TO 3680
3685 LET E=VAL Q$
3690 IF E<100 OR E>599 THEN GO SUB 8000: GO TO 3680
3730 CLS : PRINT AT 10,10;" SEARCHING ": PAUSE 60
3740 DIM B(251,2): DIM D(2)
3750 LET M=0: LET S=0
3760 LET EE=0
3800 FOR I=1 TO N
3805 IF Q=0 THEN PRINT AT 12,10;"RECORD ";I
3810 LET B=A(I,1)
3820 LET FF=INT (((A(I,1)*10-INT (A(I,1)*10))*10000)+.1)
3830 LET J=INT B
3840 IF J<E THEN GO TO 4000
3850 IF J>M THEN GO TO 4010
3860 IF Q=0 AND INT J>=400 AND FF=0 THEN GO SUB 7900: LET B(S,1)=A(I,1): LET B(S,2)=A(I,2): GO TO 4000
3870 LET EE=EE+1
3875 IF Q=1 AND EE>13 THEN GO SUB 8460: GO SUB 8800: LET EE=1
3880 LET Q$=STR$ A(I,2): GO SUB 10: IF B-J>.15 THEN GO TO 3940
3890 REM
3900 IF Q=1 THEN PRINT FF;TAB 6;Q$,": "
3910 IF Q=2 THEN LPRINT FF;TAB 6;Q$,": "
3920 LET D(2)=D(2)+A(I,2)
3930 GO TO 3980
3940 REM
3950 IF Q=1 THEN PRINT ,": ";FF;TAB 22;Q$
3960 IF Q=2 THEN LPRINT ,": ";FF;TAB 22;Q$
3970 LET D(2)=D(2)-A(I,2)
4000 NEXT I
4010 IF M=0 THEN GO TO 4110
4090 IF Q=1 THEN PRINT "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"
4100 IF Q=2 THEN LPRINT "''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"
4110 LET EE=0
4120 IF M>0 THEN GO TO 4150
4130 IF Q<>0 THEN GO TO 4140
4131 PRINT AT 7,2; INVERSE 1;" CALCULATING TRIAL BALANCE "; INVERSE 0;AT 10,5;"THERE ARE ";A(801,1);" RECORDS"
4140 IF Q=1 THEN CLS
4145 GO SUB 8800: LET M=J : GO TO 3810
4150 GO SUB 7900
4160 IF D(2)>=0 THEN LET SS=.1
4170 IF D(2)<0 THEN LET SS=.2
4180 LET D(2)=(INT (D(2)*100+.5))/100: LET Q$=STR$ ABS D(2): GO SUB 10
4200 IF Q=1 AND SS=.1 THEN PRINT "BAL ";Q$
4205 IF Q=2 AND SS=.1 THEN LPRINT "BAL ";Q$
4210 IF Q=1 AND SS<>.1 THEN PRINT ," BAL ";Q$
4212 IF Q=2 AND SS<>.1 THEN LPRINT ," BAL ";Q$
4220 LET B(S,1)=M+SS+.00001
4230 LET B(S,2)=ABS D(2)
4290 IF Q=0 AND I>N THEN GO TO 5550
4300 IF Q=2 AND I>N THEN LPRINT : LPRINT : LPRINT : GO TO 1000
4305 IF I>N THEN GO SUB 8450: GO TO 5100
4310 LET D(2)=0: LET M=J
4370 IF Q=0 THEN GO TO 3860
5000 IF Q=2 THEN GO TO 5080
5010 REM
5020 PRINT AT 19,0;TAB 5; INVERSE 1;" DISPLAY NEXT ACCOUNT "; INVERSE 0;TAB 5; INVERSE 1;" SELECT ANOTHER ACCT "; INVERSE 0;TAB 5; INVERSE 1;" EXIT DISPLAY MODE "; INVERSE 0
5030 LET QF=19: LET QA=21: LET QB=19: LET QE=1: GO SUB 200
5040 IF QF=20 THEN GO TO 5090
5050 IF QF=21 THEN GO TO 5100
5060 IF QF=19 THEN GO TO 5080
5070 GO TO 5030
5080 GO SUB 8800: GO TO 3870
5090 CLS : GO TO 3650
5100 REM
5110 GO SUB 8500: IF CPY=1 THEN LET E=100: LET Q=2: GO TO 3740
5120 GO TO 1000
5400 CLS : IF A(801,1)=0 THEN GO TO 1000
5405 GO SUB 980: BEEP 1,20: PRINT ''"DON'T USE THIS OPTION UNTIL YOU ARE READY TO PRINT THE FINANCIAL";TAB 10;"STATEMENTS."'''"DO YOU WANT TO CONTINUE?(Y OR N)"
5410 GO SUB 8540
5420 IF Q$="n" THEN GO TO 1000
5500 LET Q=0: LET E=1
5520 GO TO 3610
5550 LET B(251,1)=S
5560 CLS
5570 DIM a(1,1)
5580 DELETE 1,5570
5590 DELETE 7900,
5600 CLS : PRINT ''" PLACE THE FINANCIAL STATEMENT TAPE IN RECORDER AND PRESS PLAY."''" ALLOW APPROXIMATELY 4 MINUTES FOR THE PROGRAM TO LOAD & MERGE."
5620 LET NP1=NP
5622 MERGE "fin stmt"
5623 GO TO 8600
7900 LET S=S+1: IF S<=250 THEN RETURN
7910 PRINT ,,"There are too many accounts"
7999 STOP
8000 PRINT FLASH 1;" INVALID ";
8020 GO SUB 150
8030 BEEP .1,20: PAUSE 1: BEEP .3,19
8040 PRINT FLASH 0;" ";
8050 GO SUB 160: RETURN
8100 IF NP THEN PRINT AT 21,0; FLASH 1;" USE THE COMPUTER KEYBOARD! "
8110 RETURN
8300 IF STICK (1,JP)=12 THEN LET Q$="y": RETURN
8310 IF STICK (1,JP)=11 THEN LET Q$="n": RETURN
8330 GO TO 8300
8400 IF STICK (2,1)>0 THEN GO TO 8405
8401 GO TO 8400
8405 PRINT STICK (1,1)
8410 GO SUB 8400
8450 PRINT
8460 PRINT INVERSE 1;" TO CONTINUE, PRESS ENTER "; INVERSE 0: PAUSE 60
8470 IF NOT NP THEN LET V$=INKEY$: IF V$="" THEN GO TO 8470
8480 IF NP THEN LET V$=STR$ STICK (2,JP): IF V$="0" THEN GO TO 8480
8490 RETURN
8500 BORDER 2: PAPER 2: INK 7: CLS : PRINT ,," DO YOU WANT PRINTED OUTPUT?",TAB 11;"(Y OR N)"
8510 GO SUB 8540
8520 IF Q$="y" OR Q$="Y" THEN PRINT ,,TAB 4;"BE SURE PRINTER IS ON!!!": PAUSE 180: LET CPY=1: CLS : PRINT AT 11,11; INVERSE 1;" PRINTING ": RETURN
8530 LET CPY=0: RETURN
8540 IF NOT NP THEN LET Q$=INKEY$: IF Q$="" THEN GO TO 8540
8550 IF NP THEN GO SUB 8300
8560 IF Q$="n" OR Q$="N" THEN LET Q$="n": RETURN
8570 IF Q$="y" OR Q$="Y" THEN LET Q$="y": RETURN
8580 GO TO 8540
8600 CLS : PRINT ,,"THIS TRANSACTION HAS MORE THAN 150 ENTRIES. SPLIT INTO 2 PARTS."
8610 GO TO 3140
8620 CLS : GO SUB 980: BEEP .15,20: PRINT ,,,,"SAVE TRANSACTIONS - LABEL TAPE:"
8630 LET T$="tran"+E$
8640 PRINT ,,,,T$: GO SUB 8100
8650 SAVE T$ DATA A()
8660 GO TO 1000
8700 PRINT ,,"ENTER DATE (mmddyy)";TAB 22;
8710 GO SUB 280
8720 IF QQ=1 THEN GO SUB 8000: GO TO 8710
8725 IF LEN Q$<6 THEN GO SUB 8000: GO TO 8710
8730 LET QQ=VAL Q$
8740 IF QQ<101 OR QQ>123199 THEN GO SUB 8000: GO TO 8710
8750 LET E$=Q$: CLS
8760 RETURN
8800 IF Q=0 THEN RETURN
8801 IF Q=1 THEN CLS
8805 IF Q=1 AND EE>=13 THEN PRINT "(CONTINUED)"
8810 IF Q=1 THEN PRINT AT 1,14;E$( TO 2);"/";E$(5 TO )
8815 IF Q=2 THEN LPRINT : LPRINT : LPRINT AT 1,14;e$( TO 2);"/";E$(5 TO )
8820 IF Q=1 THEN PRINT "ACCOUNT# ";J;TAB 20;
8825 IF Q=2 THEN LPRINT "ACCOUNT# ";J;TAB 20;
8827 LET B$=STR$ J: GO SUB 100: IF A=0 THEN GO TO 8840
8828 IF Q=1 THEN PRINT A$(A)(4 TO )
8829 IF Q=2 THEN LPRINT A$(A)(4 TO )
8830 GO TO 8860
8840 IF Q=1 THEN PRINT
8850 IF Q=2 THEN LPRINT
8860 IF Q=1 THEN PRINT "................................ ..............................."
8870 IF Q=2 THEN LPRINT "................................ ..............................."
8880 RETURN
8999 STOP
9000 SAVE "acz mc"CODE rt,500
9005 RUN 9010
9010 SAVE "ACZGL1" LINE 9200
9020 VERIFY "ACZGL1"
9099 STOP
9100 RESTORE 9130: FOR J=0 TO 7
9110 READ Q: POKE USR "A"+J,Q
9120 NEXT J
9130 DATA 8,12,254,255,255,254,12,8
9190 RETURN
9200 RUN 9210
9210 PAPER 1: INK 7: BORDER 1: CLS : GO SUB 980: PRINT ''TAB 4;" * 1984 Alan R. Czarnek"
9220 DIM A(801,2): DIM B(151,2): DIM D$(2,2)
9230 DEF FN A (P)=ABS (INT (D(P)*100+.5)/100): BORDER 1: PAPER 1: INK 7
9240 LET N=0: LET QX=9: LET NP=0: LET CPY=0: LET RT=PEEK 23730+256*PEEK 23731
9250 LET Z$="________________________________": LET Y$=" "
9270 GO SUB 9100
9280 DATA "DR","CR"
9290 RESTORE 9280: READ D$(1),D$(2)
9295 GO SUB 9600: CLS : GO SUB 980: PAUSE 60
9300 PRINT ,," DO YOU WANT TO USE THE CARDCO";TAB 4;"NUMERIC KEYPAD? (Y OR N)"
9310 LET Q$=INKEY$
9320 IF Q$="y" OR Q$="Y" THEN GO TO 9350
9330 IF Q$="n" OR Q$="N" THEN GO TO 1000
9340 GO TO 9310
9350 PRINT ,," WHICH JOYSTICK PORT? (L OR R)"
9360 LET Q$=INKEY$
9370 IF Q$="l" OR Q$="L" THEN GO TO 9400
9380 IF Q$="r" OR Q$="R" THEN GO TO 9420
9390 GO TO 9360
9400 LET JP=1
9410 GO TO 9430
9420 LET JP=2
9430 LET NP=1: PRINT ,,TAB 3;"THE KEYPAD IS NOW ENABLED."
9440 PRINT ,,TAB 8; FLASH 1;" USE THE KEYPAD!! " ; FLASH 0
9590 GO SUB 8450: GO TO 1000
9600 LET T$="chart acct"
9610 PRINT ,,TAB 1; FLASH 1;" LOAD DATA TAPE 'chart acct' "; FLASH 0
9650 GO SUB 9950: PRINT PAPER 6; INK 0;" THEN ENTER 'GO TO 9600' " : PRINT ,,TAB 17;T$
9660 LOAD T$ DATA A$()
9670 CLS : GO SUB 980: GO SUB 8700
9680 GO SUB 980: PRINT ,,TAB 2;"START A NEW MONTH? (Y OR N)"
9690 IF NOT NP THEN LET Q$=INKEY$: IF Q$="" THEN GO TO 9690
9700 IF NP THEN GO SUB 8300
9710 IF Q$="y" OR Q$="Y" THEN GO TO 9750
9720 IF Q$="n" OR Q$="N" THEN GO TO 9740
9730 GO TO 9690
9740 PRINT ,,"LOAD THE DATA TAPE WHICH HOLDS THE TRANSACTIONS FOR THE MONTH."''"THE TAPE IS LABELED tran+date": GO TO 9760
9750 PRINT ,," LOAD THE DATA TAPE WHICH HOLDS THE TRIAL BALANCE FROM";TAB 10;"LAST MONTH.","THE TAPE IS LABELED tbal+date"
9770 PRINT '';TAB 4;"ENTER NAME OF DATA TAPE"
9780 INPUT T$: GO SUB 9950: PRINT PAPER 6; INK 0;" THEN ENTER 'GO TO 9770' ": PRINT ,,TAB 14;T$
9790 LOAD T$ DATA A(): LET N=A(801,1)
9800 CLS : PRINT ''" MEMORY CONTAINS ";N;" ENTRIES"
9805 PRINT ,," DO YOU WANT TO LOAD ANY OTHER";TAB 6;"DATA TAPES? (Y OR N)"
9810 IF NOT NP THEN LET Q$=INKEY$: IF Q$="" THEN GO TO 9810
9820 IF NP THEN GO SUB 8300
9830 IF Q$="n" OR Q$="N" THEN RETURN
9840 IF Q$="y" OR Q$="Y" THEN GO TO 9860
9850 GO TO 9810
9860 PRINT '';TAB 4;"ENTER NAME OF DATA TAPE"
9870 INPUT T$: GO SUB 9950: PRINT PAPER 6; INK 0;" THEN ENTER 'GO TO 9860' ": PRINT ,,TAB 14;T$
9880 LOAD T$ DATA B()
9885 POKE 23692,255
9890 IF N+B(151,1)>800 THEN CLS : PRINT '"CAN'T LOAD MORE THAN 800 ENTRIES": GO SUB 8450: GO TO 1000
9900 PRINT ,,TAB 9; FLASH 1;" PLEASE WAIT "; FLASH 0
9910 FOR I=1 TO B(151,1)
9920 LET A(N+1,1)=B(I,1): LET A(N+1,2)=ABS B(I,2): LET N=N+1
9930 NEXT I: LET A(801,1)=N
9940 GO TO 9800
9950 PRINT ,, PAPER 6; INK 0;" PRESS PLAY ON TAPE. IF THE TWO NAMES DO NOT MATCH, PRESS THE 'CAPS SHIFT' AND THE 'BREAK' KEYS. "
9960 RETURN
100 BORDER 1: PAPER 1: INK 1: CLS
1000 LOAD "acz soft"SCREEN$
1010 LET RT=PEEK 23730+256*PEEK 23731
1020 LET RT=RT-500
1030 POKE 23731,INT (RT/256): POKE 23730,RT-(INT (RT/256)*256)
1035 INK 7
1040 PRINT AT 21,31; OVER 1;" ": INK 7
1050 LOAD "acz mc"CODE
1060 LOAD "ACZGL2"
1 REM PAUSE USR t THEN 543aaaaaaaaaaaaacccc310Com Stock ccccccccccccccczzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzglglglglglglglglglglglglglglglgl
2 GO TO 9200
10 LET DE=6
12 FOR K=1 TO LEN Q$
14 IF Q$(K)="." THEN GO TO 18
16 LET DE=DE-1: NEXT K
18 IF DE=6-LEN Q$ THEN LET Q$=Q$+".00"
20 IF 8-DE=LEN Q$ THEN LET Q$=Q$+"0"
22 IF LEN Q$<9 THEN LET Q$=" "+Q$
24 IF LEN Q$>=9 THEN RETURN
26 GO TO 22
30 LET Q$="": PRINT FLASH 1;"::";: LET QX=1: GO SUB 150
32 IF STICK (2,JP)>0 THEN GO TO 36
34 GO TO 32
36 LET QQQ= STICK (1,JP)
38 IF QQQ<10 THEN GO TO 48
40 IF QQQ=13 THEN LET Q$(LEN Q$)=" ": GO TO 52
42 IF QQQ=14 THEN LET S$=".": GO TO 50
44 IF QQQ=10 THEN LET QX=9: RETURN
46 IF QQQ=12 OR QQQ=11 THEN GO TO 32
48 LET S$=STR$ QQQ
50 LET Q$=Q$+S$
51 IF LEN Q$=2 AND Q$(1)=" " THEN LET Q$=S$
52 PRINT Q$;
54 LET QX=LEN Q$: GO SUB 150
56 IF QQQ=13 AND LEN Q$>1 THEN LET Q$=Q$( TO LEN Q$-1)
58 GO TO 32
100 FOR A=1 TO 3: POKE 26720+A,(VAL B$(A))+48: NEXT A
110 POKE 26719,VAL A$(151): POKE 26720,0
120 LET A=USR (RT+360)
140 RETURN
150 LET QA1=(PEEK 23684+256*PEEK 23685)-QX
160 POKE 23688,PEEK 23688+QX
170 POKE 23685,INT (QA1/256): POKE 23684,QA1-(PEEK 23685*256)
180 RETURN
200 PRINT AT QF,3;"a"
205 LET qc=0
209 IF NP THEN GO TO 212
210 LET q$=INKEY$: IF q$="" THEN GO TO 210
211 GO TO 222
212 IF STICK (2,JP)>0 THEN LET QQQ= STICK (1,JP): LET QQW= STICK (1,JP): IF QQQ=QQW THEN GO TO 214
213 GO TO 212
214 IF QQQ=12 THEN LET Q$="7": GO TO 222
216 IF QQQ=11 THEN LET Q$="6": GO TO 222
217 IF QQQ=10 THEN LET Q$=CHR$ 13: GO TO 222
218 GO TO 212
222 IF Q$=CHR$ 13 THEN RETURN
223 IF QF>=qa THEN GO TO 225
224 IF q$="6" THEN LET qc=qe
225 IF QF<=qb THEN GO TO 240
230 IF q$="7" THEN LET qc=-qe
240 PRINT AT QF,3;" "
250 LET QF=QF+qc
270 GO TO 200
280 IF NOT NP THEN INPUT Q$
290 IF NP THEN GO SUB 30
300 LET QQ=0: LET QA1=0
310 IF Q$="" OR Q$="." THEN GO TO 380
320 FOR K=1 TO LEN Q$
330 IF Q$(K)="." THEN LET QA1=QA1+1: GO TO 350
340 IF Q$(K)<"0" OR Q$(K)>"9" THEN GO TO 380
350 IF QA1>1 THEN GO TO 380
360 NEXT K
370 RETURN
380 LET QQ=1
390 RETURN
400 IF Q=1 THEN PRINT W$(J): GO SUB 2000
410 IF Q=2 THEN LPRINT W$(J)
420 FOR I=1 TO B(251,1)
430 LET X=B(I,1): IF X<F(J,1) THEN LET I=I+1: GO TO 430
440 IF INT X>F(J,2) THEN RETURN
450 LET QA=B(I,2): LET QB=INT (((B(I,1)-INT B(I,1))*10)+.5)
460 FOR H=1 TO 10
470 IF INT X<>G(H,1) THEN GO TO 650
480 LET QC=QA: LET QD=QB: GO SUB 900
490 LET QE=11: GO SUB 950
500 FOR F=1 TO B(251,1)
510 LET X=B(F,1): IF INT X<>G(H,2) THEN GO TO 600
520 LET QA=B(F,2): LET QB=INT (((B(F,1)-INT B(F,1))*10)+.5)
530 GO SUB 900: GO SUB 950
540 IF (QB AND QD)=KK THEN LET QF=QC+QA
545 IF (QB AND QD)<>KK THEN LET QF=(QC+QA)*-1
550 IF QD=KK AND QB<>KK THEN LET QF=(QC-QA)
555 IF QD<>KK AND QB=KK THEN LET QF=(QA-QC)
560 LET Q$=STR$ ABS QF: GO SUB 10
570 IF Q=1 THEN PRINT TAB 12;"bbbbbbbbb";
580 IF Q=2 THEN LPRINT TAB 12;"bbbbbbbbb";
582 IF Q=1 AND QF>=0 THEN PRINT TAB 22;Q$: GO SUB 2000
584 IF Q=1 AND QF<0 THEN PRINT TAB 21;"(";Q$;")": GO SUB 2000
586 IF Q=2 AND QF>=0 THEN LPRINT TAB 22;Q$
588 IF Q=2 AND QF<0 THEN LPRINT TAB 21;"(";Q$;")"
590 GO TO 700
600 NEXT F
610 LET QA=0: LET QB=1
620 GO TO 540
650 NEXT H
660 GO SUB 900
670 IF Q=1 THEN PRINT "..........";
680 IF Q=2 THEN LPRINT "..........";
690 LET QE=21: GO SUB 950
700 NEXT I: RETURN
900 LET B$=STR$ X: GO SUB 100
910 IF Q=1 AND A=0 THEN PRINT TAB 1;INT X;".......";: RETURN
920 IF Q=2 AND A=0 THEN LPRINT TAB 1;INT X;".......";: RETURN
930 IF Q=1 THEN PRINT TAB 1;A$(A)(4 TO );
935 IF Q=2 THEN LPRINT TAB 1;A$(A)(4 TO );
940 RETURN
950 LET Q$=STR$ ABS (QA): GO SUB 10
960 IF KK=QB THEN GO TO 970
965 IF Q=1 THEN PRINT TAB QE;"(";Q$;")": GO SUB 2000
967 IF Q=2 THEN LPRINT TAB QE;"(";Q$;")"
968 LET V=V-QA: RETURN
970 IF Q=1 THEN PRINT TAB QE+1;Q$: GO SUB 2000
972 IF Q=2 THEN LPRINT TAB QE+1;Q$
975 LET V=V+QA: RETURN
979 STOP
980 PRINT ,," ACZ GENERAL LEDGER 2.000 "
990 RETURN
1000 BORDER 1: PAPER 1: INK 7: CLS : IF PEEK RT<>42 THEN PRINT ,," Machine code missing. Re-load";TAB 10;"from start.": STOP
1005 PRINT ''': BEEP .15,20: GO SUB 980: PRINT 'TAB 5;"FINANCIAL STATEMENTS": PRINT Z$
1010 PRINT ,,TAB 5;"CHART OF ACCOUNTS"
1020 PRINT ,,TAB 5;"INCOME STATEMENT"
1040 PRINT ,,TAB 5;"BALANCE SHEET"
1050 PRINT ,,TAB 5;"YEAR TO DATE/TRIAL BALANCE"
1060 PRINT Z$
1070 PRINT '' PAPER 6; INK 0;" MOVE ARROW TO CHOICE, THEN PRESS ENTER. "
1095 LET QF=9: LET qa=15: LET QB=9: LET qe=2
1099 GO SUB 190
1100 CLS
1120 IF QF=9 THEN GO TO 1600
1130 IF QF=11 THEN GO TO 2400
1140 IF QF=13 THEN GO TO 6200
1150 GO TO 5400
1500 LET Q$=N$: GO SUB 8700: PRINT TAB CN;Q$
1510 PRINT '" ID ";TAB 7;"CHART OF ACCOUNTS": PRINT O$: LET EE=1
1520 RETURN
1530 PRINT AT 18,5; INVERSE 1;" TO CONTINUE "; INVERSE 0;TAB 5; INVERSE 1;" ADD NEW ACCOUNT "; INVERSE 0;TAB 5; INVERSE 1;" CHANGE EXISTING ID # "; INVERSE 0;TAB 5; INVERSE 1;" EXIT CHART "; INVERSE 0
1540 LET QF=18: LET QA=21: LET QB=18: LET QE=1: GO SUB 200
1550 IF QF=18 AND NOT EF THEN CLS : GO SUB 1500: LET EE=1: GO TO 1660
1560 IF QF=19 THEN GO TO 1750
1570 IF QF=20 THEN GO TO 1680
1575 IF EF=1 AND QF=18 THEN GO TO 2100
1580 IF QF=21 AND PEEK 26780=75 THEN GO TO 2100
1585 IF QF=21 THEN GO TO 1000
1590 STOP
1600 BORDER 0: PAPER 0: INK 7: CLS : BEEP .15,20: GO SUB 1500
1610 LET EF=0: LET J=VAL A$(151): IF J=0 THEN PRINT "No accounts entered": GO TO 1675
1620 FOR K=1 TO J
1630 LET Q$=A$(K)
1640 PRINT TAB 1;K;TAB 7;A$(K)(1 TO 3),A$(K)(4 TO ): LET EE=EE+1
1650 IF EE=15 THEN GO TO 1530
1670 NEXT K
1675 LET EF=1: GO TO 1530
1680 CLS : PRINT ''"ENTER ID # OF ACCOUNT TO CHANGE",,,TAB 6;"(IF UNSURE, ENTER 0)"
1690 GO SUB 280
1700 IF QQ=1 THEN GO SUB 8000: GO TO 1690
1704 IF INT VAL Q$>J THEN GO SUB 8000: GO TO 1690
1710 IF VAL Q$=0 THEN GO TO 1600
1720 LET J=VAL Q$: GO TO 1770
1750 IF VAL A$(151)<150 THEN LET A$(151)=STR$ (VAL A$(151)+1)
1760 LET J=VAL A$(151)
1780 CLS : PRINT ''"ENTER ACCOUNT #";TAB 20;
1790 GO SUB 280
1800 IF QQ=1 THEN GO SUB 8000: GO TO 1790
1805 IF VAL Q$<100 OR VAL Q$>599 THEN GO SUB 8000: GO TO 1790
1810 PRINT Q$: LET A$(J)( TO 3)=Q$
1815 GO SUB 1860
1820 PRINT ''"ENTER ACCOUNT NAME","(MAX. SIZE 10 CHARACTERS)": GO SUB 8100
1830 INPUT L$
1850 LET A$(J)(4 TO )=L$
1855 GO TO 1960
1860 LET KK=INT VAL Q$: IF KK<290 OR KK>299 THEN RETURN
1870 PRINT ' INVERSE 1;"ACCOUNT ";KK;" IS AN OFFSET ACCOUNT"; INVERSE 0;''"ENTER THE NUMBER OF THE ACCOUNT TO WHICH IT IS RELATED.";TAB 11;"(100-289)"
1880 GO SUB 280
1890 IF QQ=1 THEN GO SUB 8000: GO TO 1880
1900 IF VAL Q$<100 OR VAL Q$>289 THEN GO SUB 8000: GO TO 1880
1905 PRINT TAB 20;Q$
1910 FOR I=1 TO 10
1920 IF G(I,2)=KK THEN LET G(I,1)=INT VAL Q$: RETURN
1930 NEXT I
1940 RETURN
1960 CLS : IF VAL A$(151)=1 THEN GO TO 1600
1965 POKE 26719,VAL A$(151): POKE 26720,0
1970 PRINT AT 10,10; INVERSE 1;" SORTING "
1980 LET QQ=USR (RT+180)
1990 GO TO 1600
2000 IF EE=21 THEN GO SUB 8450: LET EE=0
2010 LET EE=EE+1: RETURN
2020 IF B(I,1)-INT B(I,1)>=.15 THEN GO TO 2070
2030 LET K(J)=K(J)+B(I,2)
2040 IF Q=1 THEN PRINT TAB 13;Q$: GO SUB 2000
2050 IF Q=2 THEN LPRINT TAB 13;Q$
2060 GO TO 3000
2070 LET K(J)=K(J)-B(I,2)
2080 IF Q=1 THEN PRINT TAB 12;"(";Q$;")": GO SUB 2000
2090 IF Q=2 THEN LPRINT TAB 12;"(";Q$;")"
2099 GO TO 3000
2100 BORDER 0: PAPER 0: INK 7: CLS : PRINT ''': BEEP .15,20: GO SUB 980: PRINT 'TAB 7;"CHART OF ACCOUNTS": PRINT M$
2110 PRINT ,,TAB 5;"RETURN TO CHART OF ACCOUNTS"
2120 PRINT ,,TAB 5;"PRINT CHART OF ACCOUNTS"
2130 PRINT ,,TAB 5;"SAVE CHART ON TAPE"
2140 IF PEEK 26780=0 THEN PRINT ,,TAB 5;"RETURN TO MAIN MENU"
2150 PRINT M$
2160 PRINT '' PAPER 6; INK 0;" MOVE ARROW TO CHOICE, THEN PRESS ENTER. "
2170 LET QF=9: LET QB=9: LET QE=2
2171 IF PEEK 26780=75 THEN LET QA=13
2172 IF PEEK 26780=0 THEN LET QA=15
2175 GO SUB 190: CLS
2180 IF QF=9 THEN GO TO 1600
2190 IF QF=11 THEN GO TO 2360
2200 IF QF=13 THEN GO TO 2320
2220 GO TO 1000
2320 CLS : PRINT ''"SAVE THE CHART OF ACCOUNTS ON ABLANK TAPE.LABEL IT:'chart acct'"
2330 GO SUB 6000: IF NP THEN GO SUB 8100
2340 SAVE "chart acct" DATA a$()
2345 IF PEEK 26780=0 THEN GO TO 2100
2350 POKE 26780,0: CLS : PRINT ''TAB 8;"SET-UP COMPLETE."'''"TURN COMPUTER OFF BEFORE LOADING";TAB 7;"ANY OTHER PROGRAM.": STOP
2360 LET Q$="y": GO SUB 8520: LET Q$=N$: GO SUB 8700: LPRINT '''TAB CN;Q$
2365 LPRINT '" ID ";TAB 7;"CHART OF ACCOUNTS": LPRINT O$
2370 FOR K=1 TO J
2375 LET Q$=A$(K)
2380 LPRINT TAB 1;K;TAB 7;A$(K)(1 TO 3),A$(K)(4 TO )
2385 NEXT K: LPRINT O$: LPRINT : LPRINT : LPRINT
2390 GO TO 2100
2400 LET TD=0
2410 LET Q=1: LET CPY=0
2500 PAPER 7: INK 0: BORDER 4: CLS : BEEP .15,20
2700 LET EE=5
2704 LET Q$=N$: GO SUB 8700
2705 IF Q=1 THEN PRINT 'TAB CN;Q$: PRINT TAB 8;"INCOME STATEMENT"
2710 IF Q=2 THEN LPRINT 'TAB CN;Q$: LPRINT TAB 8;"INCOME STATEMENT"
2720 IF TD=0 AND Q=1 THEN PRINT " For The Period Ending ";E$( TO 2);"/";E$(3 TO 4);"/";E$(5 TO )
2725 IF TD=0 AND Q=2 THEN LPRINT " For The Period Ending ";E$( TO 2);"/";E$(3 TO 4);"/";E$(5 TO )
2730 IF TD=1 AND Q=2 THEN LPRINT TAB 5;" Year to Date ";E$( TO 2);"/";E$(3 TO 4);"/";E$(5 TO )
2735 IF TD=1 AND Q=1 THEN PRINT TAB 5;" Year to Date ";E$( TO 2);"/";E$(3 TO 4);"/";E$(5 TO )
2740 DIM K(CAT)
2745 IF Q=1 THEN PRINT O$: GO SUB 2000
2746 IF Q=2 THEN LPRINT O$
2750 FOR J=1 TO CAT
2760 IF J<>2 THEN GO TO 2830
2771 IF Q=1 THEN PRINT "LESS EXPENSES:": GO SUB 2000: PRINT : GO SUB 2000
2772 IF Q=2 THEN LPRINT "LESS EXPENSES:": LPRINT
2840 IF Q=1 THEN PRINT P$(J): GO SUB 2000
2850 IF Q=2 THEN LPRINT P$(J)
2860 FOR I=1 TO B(251,1)
2870 LET X=B(I,1): IF X<P(J,1) THEN GO TO 3000
2880 IF TD=0 THEN LET XX=(X*10-INT (X*10))+.000001: IF XX<.0001 THEN LET I=I+1: GO TO 2870
2890 IF INT X>P(J,2) THEN GO TO 3010
2900 LET B$=STR$ X: GO SUB 100
2910 IF Q=1 AND A=0 THEN PRINT TAB 1;INT X;: GO TO 2930
2915 IF Q=2 AND A=0 THEN LPRINT TAB 1;INT X;: GO TO 2930
2920 IF Q=1 THEN PRINT TAB 1;A$(A)(4 TO );
2925 IF Q=2 THEN LPRINT TAB 1;A$(A)(4 TO );
2930 LET Q$=STR$ ABS B(I,2): GO SUB 10
2960 IF J>1 THEN GO TO 2020
2970 IF B(I,1)-INT B(I,1)>=.15 THEN GO TO 2030
2980 GO TO 2070
3000 NEXT I
3010 LET Q$=STR$ K(J): GO SUB 10
3020 IF Q=1 THEN PRINT "TOTAL";TAB 13;"bbbbbbbbb";TAB 23;Q$: GO SUB 2000: PRINT : GO SUB 2000
3030 IF Q=2 THEN LPRINT "TOTAL";TAB 13;"bbbbbbbbb";TAB 23;Q$: LPRINT
3040 NEXT J
3050 LET EXP=0: FOR J=2 TO CAT
3060 LET EXP=EXP+K(J): NEXT J
3070 LET EXP=(INT (EXP*100+.5))/100
3080 LET Q$=STR$ EXP: GO SUB 10
3090 IF Q=1 THEN PRINT "TOTAL EXPENSES";TAB 23;Q$: GO SUB 2000
3100 IF Q=2 THEN LPRINT "TOTAL EXPENSES";TAB 23;Q$
3120 LET NI=K(1)-EXP: LET NI=(INT (NI*100+.05))/100: LET Q$=STR$ ABS NI: GO SUB 10
3130 IF Q=1 THEN PRINT : GO SUB 2000: PRINT O$: GO SUB 2000
3135 IF Q=2 THEN LPRINT : LPRINT O$
3136 IF Q=1 THEN PRINT "NET INCOME (LOSS)";
3140 IF Q=2 THEN LPRINT "NET INCOME (LOSS)";
3150 IF NI<0 THEN GO TO 3180
3160 IF Q=1 THEN PRINT TAB 23;Q$: GO SUB 2000
3170 IF Q=2 THEN LPRINT TAB 23;Q$: GO TO 3183
3175 GO TO 3190
3180 IF Q=1 THEN PRINT TAB 21;"(";Q$;")": GO SUB 2000
3182 IF Q=2 THEN LPRINT TAB 21;"(";Q$;")"
3183 IF Q=2 THEN LPRINT : LPRINT : LPRINT : GO TO 3200
3190 GO SUB 8450: GO SUB 8500
3195 IF CPY=1 THEN LET Q=2: LPRINT : LPRINT : LPRINT : GO TO 2700
3200 IF TD=0 THEN GO TO 1000
3210 PAPER 1: INK 7: BORDER 1: CLS : PAUSE 60: PRINT ''" PRINT TRIAL BALANCE? (Y OR N)"
3220 GO SUB 8510
3230 IF CPY=1 THEN GO TO 3250
3240 GO TO 3500
3250 LET Q$=N$: GO SUB 8700: LET QC=0: LET QD=0: LPRINT 'TAB CN;Q$: LPRINT TAB 9;"TRIAL BALANCE"
3260 LPRINT TAB 12;E$( TO 2);"/";E$(3 TO 4);"/";E$(5 TO ): LPRINT O$: LPRINT "ACCT #";TAB 14;"DR";TAB 24;"CR"
3270 FOR I=1 TO B(251,1)
3280 LET XX=INT ((B(I,1)-INT B(I,1))*10+.001)
3290 LPRINT TAB 1;INT B(I,1);: LET Q$=STR$ B(I,2): GO SUB 10
3300 IF XX>1 THEN GO TO 3350
3310 LET QD=QD+B(I,2)
3320 LPRINT TAB 10;Q$
3340 GO TO 3370
3350 LET QC=QC+B(I,2)
3360 LPRINT TAB 20;Q$
3370 NEXT I
3380 LPRINT O$:
3390 LET QC=(INT (QC*100+.5))/100
3400 LET QD=(INT (QD*100+.5))/100
3410 LET Q$=STR$ QD: GO SUB 10: LPRINT '"Total DR = $";Q$
3420 LET Q$=STR$ QC: GO SUB 10: LPRINT '"Total CR = $";Q$: LPRINT : LPRINT : LPRINT
3500 IF VAL E$( TO 2)<>FY THEN GO TO 3800
3510 CLS : PRINT ''"THIS IS THE END OF YOUR FISCALYEAR. THE PROGRAM WILL CLOSE THEBOOKS FOR THIS YEAR.": GO SUB 8450
3520 DIM A(801,2): LET S=0: LET OE=0
3530 FOR I=1 TO B(251,1)
3535 PRINT AT 7,2;; INVERSE 1;" CALCULATING TRIAL BALANCE "; INVERSE 0;AT 10,5;"THERE ARE ";B(251,1);" RECORDS"
3540 PRINT AT 12,10;"RECORD ";I
3550 IF INT B(I,1)<>RE THEN GO TO 3650
3560 GO SUB 3910
3570 LET QA=INT (((B(I,1)-INT B(I,1))*10)+.5)
3580 IF QA=1 THEN LET OE1=B(I,2)*-1
3590 IF QA<>1 THEN LET OE1=B(I,2)
3600 LET OE=OE1+OE
3612 IF OE>=0 THEN LET B(I,1)=INT B(I,1)+.2
3614 IF OE<0 THEN LET B(I,1)=INT B(I,1)+.1
3620 LET B(I,2)=ABS OE
3650 IF B(I,2)=0 THEN GO TO 3690
3655 IF B(I,1)>=400 THEN GO TO 3690
3660 LET S=S+1
3670 LET A(S,1)=B(I,1)
3680 LET A(S,2)=B(I,2)
3690 NEXT I
3700 LET A(801,1)=S
3710 GO TO 3850
3800 CLS : PRINT AT 10,10; FLASH 1;" PLEASE WAIT ": DIM A(801,2)
3810 FOR I=1 TO B(251,1)
3820 LET A(I,1)=B(I,1)
3830 LET A(I,2)=B(I,2)
3840 NEXT I
3845 LET A(801,1)=I-1
3850 CLS : LET Q$="tbal"+E$: PRINT ''"SAVE THIS TRIAL BALANCE ON A"''"BLANK TAPE, FOR USE NEXT MONTH.";'';"LABEL IT:"'',Q$
3855 GO SUB 8100
3860 SAVE Q$ DATA A()
3890 CLS : PRINT AT 10,5; FLASH 1;" PROCESSING COMPLETE ": STOP
3900 GO TO 4000
3910 FOR J=1 TO B(251,1)
3920 IF B(J,1)<400 THEN GO TO 3980
3930 LET QA=INT (((B(J,1)-INT B(J,1))*10)+.5)
3940 IF QA=2 THEN GO TO 3970
3950 LET OE=OE-B(J,2)
3960 GO TO 3980
3970 LET OE=OE+B(J,2)
3980 NEXT J
3990 RETURN
4000 BORDER 4: PAPER 7: INK 0: CLS : LET Q=1: LET CPY=0
4010 LET EE=8
4100 LET Q$=N$: GO SUB 8700
4110 IF Q=1 THEN PRINT 'TAB CN;Q$: PRINT TAB 9;"BALANCE SHEET"
4120 IF Q=2 THEN LPRINT : LPRINT : LPRINT : LPRINT : LPRINT 'TAB CN;Q$: LPRINT TAB 9;"BALANCE SHEET"
4130 IF Q=1 THEN PRINT TAB 12;E$( TO 2);"/";E$(3 TO 4);"/";E$(5 TO )
4140 IF Q=2 THEN LPRINT TAB 12;E$( TO 2);"/";E$(3 TO 4);"/";E$(5 TO )
4150 IF Q=1 THEN PRINT M$
4160 IF Q=2 THEN LPRINT M$
4170 IF Q=1 THEN PRINT TAB 13;"ASSETS": PRINT O$
4180 IF Q=2 THEN LPRINT TAB 13;"ASSETS": LPRINT O$
4210 LET KK=1: DIM K(4)
4220 FOR J=1 TO 4
4230 LET V=0: GO SUB 400
4240 IF Q=1 THEN PRINT TAB 22;"bbbbbbbbb": GO SUB 2000
4250 IF Q=2 THEN LPRINT TAB 22;"bbbbbbbbb"
4260 LET Q$=STR$ (ABS V): GO SUB 10
4270 IF Q=1 THEN PRINT W$(J);TAB 22;Q$: GO SUB 2000 : PRINT : GO SUB 2000: PRINT : GO SUB 2000
4280 IF Q=2 THEN LPRINT W$(J);TAB 22;Q$: LPRINT : LPRINT
4290 IF J=2 THEN LET KK=2
4300 LET K(J)=V
4310 IF J<>2 THEN GO TO 4500
4320 LET Q$=STR$ ABS (K(1)+K(2)): GO SUB 10
4330 IF Q=1 THEN PRINT "TOTAL ASSETS";TAB 22;Q$: GO SUB 2000: PRINT : GO SUB 2000: PRINT M$: GO SUB 2000: PRINT TAB 11;"LIABILITIES": GO SUB 2000: PRINT O$: GO SUB 2000
4340 IF Q=2 THEN LPRINT "TOTAL ASSETS";TAB 22;Q$: LPRINT : LPRINT M$: LPRINT TAB 11;"LIABILITIES": LPRINT O$
4500 NEXT J
4520 IF Q=1 THEN PRINT "STOCKHOLDERS EQUITY";: GO SUB 2000
4530 IF Q=2 THEN LPRINT "STOCKHOLDERS EQUITY";
4540 LET V=0
4550 FOR I=1 TO B(251,1)
4560 LET X=B(I,1): IF X<300 THEN NEXT I
4565 IF X>=400 THEN GO TO 4690
4570 GO SUB 900
4580 IF Q=1 THEN PRINT "..........";
4590 IF Q=2 THEN LPRINT "..........";
4600 IF INT X<>RE THEN GO TO 4650
4605 LET OE=0
4610 GO SUB 3910
4620 LET QQ=INT (((X-INT X)*10)+.5)
4630 IF QQ=1 THEN LET OE1=B(I,2)*-1
4632 IF QQ<>1 THEN LET OE1=B(I,2)
4635 LET QA=OE1+OE: LET QA=(INT (QA*100+.5))/100
4640 IF QA>=0 THEN LET QB=2
4645 IF QA<0 THEN LET QB=1
4649 LET QA=ABS QA: GO TO 4660
4650 LET QA=B(I,2)
4655 LET QB=INT (((B(I,1)-INT B(I,1))*10)+.5)
4660 LET KK=2: LET QE=21
4670 GO SUB 950
4680 NEXT I
4690 IF Q=1 THEN PRINT TAB 22;"bbbbbbbbb": GO SUB 2000
4700 IF Q=2 THEN LPRINT TAB 22;"bbbbbbbbb"
4790 LET OE=(INT (V*100+.5))/100: LET Q$=STR$ OE: GO SUB 10
4800 IF Q=1 THEN PRINT "STOCKHOLDERS EQUITY";TAB 22;Q$: GO SUB 2000: PRINT : GO SUB 2000
4810 IF Q=2 THEN LPRINT "STOCKHOLDERS EQUITY";TAB 22;Q$: LPRINT
4820 IF Q=1 THEN PRINT "TOTAL LIABILITIES": GO SUB 2000
4830 IF Q=2 THEN LPRINT "TOTAL LIABILITIES"
4840 LET Q$=STR$ (OE+K(3)+K(4)): GO SUB 10
4850 IF Q=1 THEN PRINT TAB 10;"AND EQUITY";TAB 22;Q$: GO SUB 2000
4860 IF Q=2 THEN LPRINT TAB 10;"AND EQUITY";TAB 22;Q$
4870 IF Q=2 THEN LPRINT : LPRINT : LPRINT : GO TO 5000
4880 GO SUB 8450: GO SUB 8500
4890 IF CPY=1 THEN LET Q=2: GO TO 4010
5000 GO TO 1000
5400 CLS : GO SUB 980: BEEP 1,20: PRINT ''" THIS SECTION WILL ERASE THE MONTHLY TRIAL BALANCE. DON'T USE THIS OPTION IF YOU HAVEN'T PRINTED THE MONTHLY INCOME STATEMENT AND BALANCE SHEET.": PRINT ''"CONTINUE THIS OPTION? (Y OR N)"
5410 GO SUB 8540
5420 IF Q$="y" OR Q$="Y" THEN CLS : GO TO 5500
5430 IF Q$="n" OR Q$="N" THEN GO TO 1000
5440 GO TO 5410
5500 CLS : GO SUB 980: LET M=0: LET S=0: LET E=1: LET N=B(251,1): DIM A(251,2): DIM D(2): PRINT AT 7,2;; INVERSE 1;" CALCULATING TRIAL BALANCE "; INVERSE 0;AT 10,5;"THERE ARE ";N;" RECORDS"
5510 FOR I=1 TO N
5520 PRINT AT 12,10;"RECORD ";I
5530 LET B=B(I,1)
5540 LET FF=INT (((B(I,1)*10-INT (B(I,1)*10))*10000)+.1)
5550 LET J=INT B
5560 IF J<E THEN GO TO 5610
5570 IF J>M THEN GO TO 5620
5580 IF B-J>.15 THEN GO TO 5600
5590 LET D(2)=D(2)+B(I,2): GO TO 5610
5600 LET D(2)=D(2)-B(I,2)
5610 NEXT I
5620 IF M>0 THEN GO TO 5640
5621 GO TO 5630
5630 LET M=J: GO TO 5530
5640 LET S=S+1
5650 IF D(2)>=0 THEN LET SS=.1
5660 IF D(2)<0 THEN LET SS=.2
5670 LET A(S,1)=M+SS
5675 LET D(2)=ABS D(2): LET D(2)=(INT (D(2)*100+.5))/100
5680 LET A(S,2)=ABS D(2)
5690 IF I>N THEN GO TO 5800
5700 LET D(2)=0: LET M=J: GO TO 5570
5800 CLS : PRINT AT 10,9; FLASH 1;" PLEASE WAIT ": DIM B(251,2): LET B(251,1)=S
5810 FOR I=1 TO S
5820 LET B(I,1)=A(I,1)
5830 LET B(I,2)=A(I,2)
5840 NEXT I
5860 LET TD=1: GO TO 2410
6000 LET I=152
6010 FOR J=1 TO 10
6020 LET A$(I)=STR$ G(J,1)
6030 LET I=I+1
6040 NEXT J
6080 RETURN
6100 LET I=152
6110 FOR J=1 TO 10
6120 LET G(J,1)=VAL A$(I)
6130 LET I=I+1
6140 NEXT J
6150 RETURN
6200 CLS : BEEP .15,20: PRINT AT 10,2; INVERSE 1;" CALCULATING BALANCE SHEET "; INVERSE 0
6210 FOR I=1 TO 10
6220 LET QA=G(I,1): IF QA=0 THEN GO TO 6240
6230 GO SUB 6300
6240 NEXT I
6250 LET QA=RE: GO SUB 6300
6260 LET N=B(251,1)
6270 POKE 26720,INT (N/256): POKE 26719,N-((INT (N/256))*256)
6275 POKE (RT+15),130
6280 LET QQ=USR RT
6290 POKE (RT+15),129: GO TO 4000
6300 FOR J=1 TO B(251,1)
6310 LET QB=INT B(J,1)
6350 IF QA=QB THEN GO TO 6400
6360 NEXT J
6370 LET B(251,1)=B(251,1)+1
6380 LET B(B(251,1),1)=(QA+.10001)
6390 LET B(B(251,1),2)=0
6400 RETURN
7900 LET S=S+1: IF S<=250 THEN RETURN
7910 PRINT ,,"There are too many accounts"
7999 STOP
8000 PRINT FLASH 1;" INVALID ";
8020 GO SUB 150
8030 BEEP .1,20: PAUSE 1: BEEP .3,19
8040 PRINT FLASH 0;" ";
8050 GO SUB 160: RETURN
8100 IF NP THEN PRINT AT 21,0; FLASH 1;" USE THE COMPUTER KEYBOARD! "
8110 RETURN
8300 IF STICK (1,JP)=12 THEN LET Q$="y": RETURN
8310 IF STICK (1,JP)=11 THEN LET Q$="n": RETURN
8330 GO TO 8300
8450 PRINT AT 21,0; INVERSE 1;" TO CONTINUE, PRESS ENTER "
8470 IF NOT NP THEN LET V$=INKEY$: IF V$="" THEN GO TO 8470
8480 IF NP THEN LET V$=STR$ STICK (2,JP): IF V$="0" THEN GO TO 8480
8490 CLS : RETURN
8500 BORDER 2: PAPER 2: INK 7: CLS : PRINT ,," DO YOU WANT PRINTED OUTPUT?",TAB 11;"(Y OR N)"
8510 GO SUB 8540
8520 IF Q$="y" OR Q$="Y" THEN PRINT ,,TAB 4;"BE SURE PRINTER IS ON!!!": PAUSE 180: LET CPY=1: CLS : PRINT INVERSE 1;AT 11,11;" PRINTING ": RETURN
8530 LET CPY=0: RETURN
8540 IF NOT NP THEN LET Q$=INKEY$: IF Q$="" THEN GO TO 8540
8550 IF NP THEN GO SUB 8300
8560 IF Q$="n" OR Q$="N" THEN LET Q$="n": RETURN
8570 IF Q$="y" OR Q$="Y" THEN LET Q$="y": RETURN
8580 GO TO 8540
8600 BORDER 2: PAPER 2: INK 7: CLS : GO SUB 6100
8605 GO SUB 980: PRINT ''TAB 4;"* 1984 Alan R. Czarnek"
8610 DATA "b",255,0,0,0,0,0,0,0
8615 DATA "c",0,255,0,255,0,0,0,0
8620 DATA "d",0,0,0,0,255,0,255,0
8625 DATA "a",8,12,254,255,255,254,12,8
8630 RESTORE 8600: FOR I=1 TO 4
8640 READ Q$: FOR J=0 TO 7
8650 READ Q
8660 POKE USR Q$+J,Q
8670 NEXT J
8680 NEXT I
8685 LET O$="cccccccccccccccccccccccccccccccc"
8690 LET M$="dddddddddddddddddddddddddddddddd"
8692 IF PEEK 26780=75 THEN GO TO 1600
8695 LET NP=NP1: GO TO 1000
8700 LET CN=LEN (Q$)
8710 LET CN=16-INT (CN/2+.51): RETURN
9200 BORDER 0: PAPER 0: INK 7: CLS
9210 POKE 26780,0: LET NP=0: LET QX=9: LET RT=PEEK 23730+256*PEEK 23731
9230 GO SUB 980: PRINT ''TAB 4;"* 1984 Alan R. Czarnek"
9240 PRINT '''"ENTER NAME OF THE COMPANY","MAXIMUM SIZE 32 CHARACTERS"
9250 INPUT N$: PRINT 'N$
9270 PRINT '"ENTER THE NUMBER OF EXPENSE","CATEGORIES (1 TO 10)"
9280 GO SUB 280
9290 IF QQ=1 THEN GO SUB 8000: GO TO 9280
9295 IF VAL Q$<1 OR VAL Q$>10 THEN GO SUB 8000: GO TO 9280
9300 LET CAT=INT (VAL Q$)
9310 LET CAT=CAT+1: DIM P(CAT,2): DIM P$(CAT,15)
9320 LET P(1,1)=400: LET P(1,2)=499: LET P(2,1)=500: LET P$(1)="SALES"
9330 FOR J=2 TO CAT
9340 GO SUB 9370
9360 NEXT J: GO TO 9450
9370 CLS : PRINT '"ENTER NAME OF CATEGORY ";J-1,"MAXIMUM SIZE IS 15 CHARACTERS"
9375 LET P(J,1)=P(J-1,2)+1
9380 INPUT P$(J): PRINT 'P$(J)
9390 PRINT '"THIS CATEGORY BEGINS AT ACCOUNT # ";(P(J-1,2))+1
9400 PRINT '"ENTER ENDING ACCOUNT #"
9410 GO SUB 280
9420 IF QQ=1 THEN GO SUB 8000: GO TO 9410
9425 IF VAL Q$>599 OR VAL Q$<(P(J-1,1)+1) THEN GO SUB 8000: GO TO 9410
9430 LET P(J,2)=INT (VAL Q$)
9440 RETURN
9450 LET P(CAT,2)=599
9460 CLS : PRINT '"CAT# NAME BEG# END#"
9470 PRINT : FOR J=2 TO CAT
9480 PRINT J-1;TAB 5;P$(J);TAB 22;P(J,1);TAB 28;P(J,2)
9490 NEXT J
9500 PRINT '"DO YOU WANT TO MAKE CORRECTIONS?";TAB 12;"(Y OR N)"
9510 LET Q$=INKEY$: IF Q$="" THEN GO TO 9510
9520 GO SUB 8540
9525 IF Q$="y" OR Q$="Y" THEN GO TO 9550
9530 IF Q$="n" OR Q$="N" THEN GO TO 9610
9540 GO TO 9510
9550 PRINT 'TAB 3;"ENTER CATEGORY # TO CHANGE"
9560 GO SUB 280
9570 IF QQ=1 THEN GO SUB 8000: GO TO 9560
9575 IF VAL Q$<1 OR VAL Q$>CAT-1 THEN GO SUB 8000: GO TO 9560
9580 LET J=(INT (VAL Q$)+1)
9590 GO SUB 9370
9600 GO TO 9450
9610 CLS :: FOR J=1 TO CAT-1
9620 IF P(J+1,1)<>P(J,2)+1 THEN GO TO 9640
9625 IF P(J,2)<P(J,1) THEN GO TO 9640
9630 NEXT J: GO TO 9650
9640 CLS : PRINT ' FLASH 1;" ERROR IN NUMBER SEQUENCE ": GO TO 9470
9650 CLS : DIM W$(4,20): RESTORE 9660
9660 DATA "CURRENT ASSETS","NON CURRENT ASSETS","CURRENT LIABILITIES","NON CUR. LIABILITIES"
9670 FOR J=1 TO 4: READ W$(J): NEXT J
9680 DIM F(4,2): RESTORE 9690
9690 DATA 100,149,150,199,200,249,250,289
9700 FOR J=1 TO 4: READ F(J,1),F(J,2): NEXT J
9710 DIM G(10,2): FOR J=1 TO 10: LET G(J,2)=289+J: NEXT J
9720 CLS : PRINT ''"ENTER THE NUMBER OF THE ACCOUNT T0 WHICH EARNINGS WILL WILL BE CREDITED. (300-399)"
9730 GO SUB 280
9740 IF QQ=1 THEN GO SUB 8000: GO TO 9730
9750 LET RE=INT VAL Q$
9760 IF RE<300 OR RE>399 THEN GO SUB 8000: GO TO 9730
9770 PRINT '"ENTER THE NUMBER OF THE MONTH THAT IS THE END OF YOUR FISCAL YEAR. (1 TO 12)"
9780 GO SUB 280: IF QQ=1 THEN GO SUB 8000: GO TO 9780
9790 LET FY=INT VAL Q$
9800 IF (FY<1 OR FY>12) THEN GO SUB 8000: GO TO 9780
9810 CLS : PRINT ''"MAKE AN EMPTY TRIAL BALANCE FOR USE WITH TRANSACTION ENTRY TAPE DURING THE FIRST MONTH."''"LABEL IT: 'tbal000000'"
9830 DIM A(801,2)
9840 SAVE "tbal000000" DATA a()
9900 CLS : LET Q$=N$: GO SUB 8700: PRINT ''"SAVE THIS PROGRAM ON A BLANKTAPE."''"LABEL IT:"''TAB CN;Q$: PRINT TAB 6;"FINANCIAL STATEMENTS"''"IT WILL PRODUCE YOUR FINANCIALSTATEMENTS."
9910 DELETE 9200,9900
9915 DIM A(1,1)
9920 SAVE "fin stmt"
9930 CLS : PRINT ''" TO VERIFY 'fin stmt', REWIND",TAB 6;"TAPE AND PRESS PLAY."
9940 VERIFY "fin stmt"
9960 CLS : POKE 26780,75: PRINT ''"SET-UP NEARLY COMPLETE. THE LAST STEP IS TO CREATE A CHART OF";TAB 11;"ACCOUNTS."
9980 GO SUB 8450: DIM A$(161,13): LET A$(151)=STR$ 0
9985 FOR I=152 TO 161
9986 LET A$(I)="0"
9987 NEXT I
9990 GO TO 8600
9991 SAVE "acz mc"CODE rt,500
9992 RUN 9993
9993 SAVE "ACZGL2" LINE 9200
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

