ACZ General Ledger 2000

Developer(s): Alan R. Czarnek
Date: 1984
Type: Program
Platform(s): TS 2068
Tags: Finance

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

LinesPurpose
10–26Format a numeric string Q$ to 9 characters with two decimal places
30–58Keypad numeric input with backspace, decimal, and cancel handling via STICK
100–140Account name lookup: POKEs digits into machine code buffer, calls USR (RT+360), returns result in A
150–180Cursor position adjustment: modifies system variables 23684–23688 to reposition the print position for inline editing feedback
200–270Arrow-key menu navigation using either INKEY$ or STICK, moving QF between QB and QA
280–390Input 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–8050Flashing “INVALID” error indicator using cursor repositioning subroutines
8300–8330STICK-based yes/no input: joystick button 12 = “y”, button 11 = “n”
8500–8530Printer 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 string O$
  • \d (USR “D”): Lower alternating lines — DATA 0,0,0,0,255,0,255,0, used to build M$

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.
  • DELETE statements 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 original RN that was encoded as RN/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 into D$(1) and D$(2) — a string array used to hold the labels “DR” and “CR”. However, the main code uses D$(Q) and D$(P) to index these labels, relying on Q and P being 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 variable I from within the loop body to skip ahead in the B() 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

Appears On

Related Products

Double-entry accounting system. Reports include income statement (P&L), balance sheet, equity statement, journal entries, ledger detail, chart of accounts, monthly...

Related Articles

Related Content

Image Gallery

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.

Scroll to Top