--- title: "Accounts" id: 76294 type: "computer_media" slug: "accounts" url: "http://localhost/computer_media/accounts/" markdown_url: "http://localhost/computer_media/accounts.md" published_at: "2026-11-11T08:03:15+00:00" modified_at: "2026-11-11T08:03:15+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/11/accounts-1.png" excerpt: "Keep a small business's accounts: up to 240 debit and credit records in 40 account codes, with monthly or yearly summaries." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" - name: "ZX81" slug: "zx81" taxonomy: "post_tag" url: "http://localhost/tag/zx81/" model: - name: "Sinclair ZX81" slug: "zx81" taxonomy: "model" url: "http://localhost/model/zx81/" - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" indiv: - name: "James Shoaf" slug: "james-shoaf" taxonomy: "indiv" url: "http://localhost/indiv/james-shoaf/" genre: - name: "Business" slug: "business" taxonomy: "genre" url: "http://localhost/type/business/" media_type: "Program" programmers: - name: "James Shoaf" slug: "james-shoaf" taxonomy: "indiv" url: "http://localhost/indiv/james-shoaf/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Accounts%20%281983%29%28Shoaf%2C%20James%29%28TS1000%29%28US%29%28Program%29.zip" mediadate: "1983" images: - url: "http://localhost/wp-content/uploads/2026/11/accounts-1.png" - url: "http://localhost/wp-content/uploads/2026/11/accounts-2.png" - url: "http://localhost/wp-content/uploads/2026/11/accounts-3.png" article_media: - id: 19591 title: "Accounts" type: "article" url: "http://localhost/article/accounts/" media_type_tags: "Business" license: false --- # Accounts A small-business accounting program. Choose options from the menu by their first letter. BEGIN clears everything and takes new records: the date as six digits (year first), who the money went to or came from, the reason, a two-digit account code and the amount. Codes up to 32 are stored as debits. Check each record, then answer YES, NO to enter it again, or QUIT after the last one. CONTINUE adds records to the existing data. VIEW lists the records for a year or a month and then gives totals by code, income, expense and net; it is slow. PRINT sends the same report to an 80-column printer through a Memotech interface. EDIT alters or deletes a record, FILE shows how much space is used, and SAVE saves the program with its data. Once there is data, never RUN the program, which would clear it; use GOTO 10 to get back to the menu. Lines 3110 and others jump to line numbers that are not in the listing; the program carries on at the next line, which works. Published in Syntax November 1983 ([Accounts](https://timexsinclair.com/article/accounts/)). ## Source Code ``` 1 REM A C C O U N T S . 2 REM BY JAMES R SHOAF III, BOX 2147, SANTA CLARA, CA 95055-2147. 3 REM ALL RIGHTS RESERVED. 10 CLS 20 PRINT AT 3,12;"ACCOUNTS" 30 PRINT AT 5,5;"BEGIN NEW ACCOUNTS." 40 PRINT AT 7,5;"CONTINUE ADDING DATA." 50 PRINT AT 9,5;"VIEW ACCOUNTS DATA." 60 PRINT AT 11,5;"PRINT ACCOUNTS DATA." 70 PRINT AT 13,5;"EDIT A RECORD" 80 PRINT AT 15,5;"SAVE PROGRAM AND DATA." 90 PRINT AT 17,5;"FILE INFORMATION." 100 IF INKEY$="B" THEN GOTO 1000 110 IF INKEY$="C" THEN GOTO 2000 120 IF INKEY$="V" THEN GOTO 3000 130 IF INKEY$="P" THEN GOTO 4000 140 IF INKEY$="S" THEN GOTO 9000 150 IF INKEY$="F" THEN GOTO 5000 160 IF INKEY$="E" THEN GOTO 6000 170 GOTO 100 1000 DIM D(240) 1010 DIM A(240) 1020 DIM T(40) 1030 DIM Q(3) 1040 DIM C$(240,2) 1045 DIM Z$(15) 1050 DIM Y$(240,10) 1060 DIM W$(240,15) 1070 LET N=1 1100 CLS 1110 FOR I=N TO 240 1120 LET X=I 1200 PRINT AT 0,8;"DATE = ?YYMMDD" 1210 INPUT D(I) 1220 PRINT AT 0,15;D(I);" " 1300 PRINT AT 1,5;"TO/FROM = ?" 1310 INPUT W$(I) 1320 PRINT AT 1,15;W$(I) 1400 PRINT AT 2,5;"PURPOSE = ?" 1410 INPUT Y$(I) 1420 PRINT AT 2,15;Y$(I) 1500 PRINT "ACCOUNT CODE = ??" 1510 INPUT C$(I) 1520 PRINT AT 3,15;C$(I) 1600 PRINT AT 4,6;"AMOUNT = ?" 1610 INPUT A(I) 1615 IF VAL C$(I)<=32 THEN LET A(I)=-A(I) 1620 PRINT AT 4,15;A(I);" " 1700 PRINT AT 7,5;"ALL ENTRIES OK? (YES/NO/QUIT)" 1710 IF INKEY$="Y" THEN GOTO 1810 1720 IF INKEY$="N" THEN GOTO 1800 1730 IF INKEY$="Q" THEN GOTO 10 1740 GOTO 1710 1800 LET I=I-1 1810 FOR F=1 TO 10 1820 IF I>235 THEN PRINT AT 20,8;"FILE ALMOST FULL" 1830 IF I>235 THEN PRINT AT 20,8;"FILE ALMOST FULL" 1840 NEXT F 1850 CLS 1860 NEXT I 1900 GOTO 10 2000 LET N=X+1 2010 GOTO 1100 3000 GOSUB 7000 3005 LET R=0 3010 PRINT "REC.NO.";TAB 10;"DATE";TAB 16;"CODE";TAB 22;"AMOUNT" 3020 PRINT "TO/FROM";TAB 20;"REASON" 3030 PRINT "===============================" 3100 FOR M=1 TO X 3110 IF G0 THEN LET Q(2)=Q(2)+T(M) 3350 NEXT M 3400 LET Q(3)=Q(2)+Q(1) 3410 PRINT 3420 PRINT "INCOME = ";Q(2) 3430 PRINT TAB 7;"EXPENSE = ";Q(1) 3440 PRINT TAB 15;"NET = ";Q(3) 3450 INPUT Z$ 3460 GOTO 10 4000 GOSUB 7000 4002 IF L=0 THEN GOTO 4006 4004 GOTO 4010 4006 LPRINT " YEAR = 19";Z;CHR$ 155;"A";CHR$ 155;"A" 4008 GOTO 4020 4010 LPRINT " YEAR = 19";Z;" MONTH = ";L;CHR$ 155;"A";CHR$ 155;"A" 4025 LPRINT " DATE TO/FROM REASON CODE AMOUNT";CHR$ 155;"A" 4030 FOR M=1 TO X 4040 IF G0 THEN LET Q(2)=Q(2)+T(M) 4350 NEXT M 4400 LET Q(3)=Q(2)+Q(1) 4410 LPRINT CHR$ 155;"A";CHR$ 155;"A"; 4420 LPRINT "INCOME = ";Q(2);" EXPENSE = ";Q(1);" NET = ";Q(3) 4430 GOTO 10 5000 CLS 5005 LET P=INT (100*X/240) 5010 PRINT AT 10,5;"FILE USAGE INFORMATION" 5020 PRINT AT 12,6;"FILE HAS ";X;" RECORDS." 5025 PRINT AT 13,6;"FILE IS ";P;" P/C FULL." 5030 PRINT AT 15,6;"LAST RECORD READS:" 5040 PRINT X;TAB 9;D(X);TAB 17;C$(X);TAB 22;A(X) 5050 PRINT W$(X);TAB 20;Y$(X) 5060 PRINT 5100 PRINT "PROGRAM = "; 5103 PRINT PEEK 16396+256*PEEK 16397-16509;" BYTES." 5110 PRINT "DATA AREA = "; 5120 PRINT (PEEK 16404+256*PEEK 16405)-(PEEK 16400+256*PEEK 16401); 5130 PRINT " BYTES." 5200 INPUT Z$ 5210 GOTO 10 6000 CLS 6005 PRINT "WHICH RECORD?" 6010 INPUT M 6020 IF M>239 THEN GOTO 6000 6023 PRINT M;TAB 9;D(M);TAB 17;C$(M);TAB 22;A(M) 6027 PRINT W$(M);TAB 20;Y$(M) 6030 PRINT "ALTER? OR DELETE?" 6040 IF INKEY$="D" THEN GOTO 6500 6050 IF INKEY$="A" THEN GOTO 6100 6060 GOTO 6040 6100 DIM Z$(15) 6105 PRINT "IF NO CHANGE, ENTER" 6110 PRINT AT 5,0;"DATE = ?" 6120 INPUT Z$(1 TO 6) 6130 IF Z$(1 TO 6)<>" " THEN LET D(M)=VAL Z$(1 TO 6) 6135 PRINT AT 1,9;D(M) 6140 PRINT AT 6,0;"TO/FROM = ?" 6150 INPUT Z$ 6160 IF Z$<>" " THEN LET W$(M)=Z$ 6165 PRINT AT 2,0;W$(M) 6170 PRINT AT 7,0;"REASON = ?" 6180 INPUT Z$(1 TO 10) 6190 IF Z$(1 TO 10)<>" " THEN LET Y$(M)=Z$(1 TO 10) 6195 PRINT AT 2,20;Y$(M) 6200 PRINT AT 8,0;"CODE = ?" 6210 INPUT Z$(1 TO 2) 6220 IF Z$(1 TO 2)<>" " THEN LET C$(M)=Z$(1 TO 2) 6225 PRINT AT 1,17;C$(M) 6230 PRINT AT 9,0;"AMOUNT = ?" 6240 INPUT Z$ 6250 IF Z$<>" " THEN LET A(M)=VAL Z$ 6255 PRINT AT 1,22;A(M) 6260 PRINT AT 11,0;"ALL ENTRIES OK? (YES/NO)" 6270 IF INKEY$="Y" THEN GOTO 10 6280 IF INKEY$="N" THEN GOTO 6000 6290 GOTO 6270 6500 LET A(M)=0 6510 LET D(M)=0 6520 LET C$(M)=" " 6530 LET Y$(M)=" " 6540 LET W$(M)=" " 6550 GOTO 10 7000 CLS 7005 LET L=0 7010 DIM Q(3) 7020 DIM T(40) 7100 PRINT AT 3,0;"YEAR = 19??" 7110 INPUT Z 7120 PRINT AT 3,9;Z 7200 PRINT AT 5,0;"YEARLY OR MONTHLY ACCOUNTS?" 7210 IF INKEY$="Y" THEN GOTO 7300 7220 IF INKEY$="M" THEN GOTO 7400 7230 GOTO 7210 7300 LET G=Z*10000 7310 LET S=G+9999 7320 GOTO 7450 7400 PRINT AT 5,0;"MONTH = ? " 7410 INPUT L 7420 PRINT AT 5,8;L 7430 LET G=Z*10000+L*100 7440 LET S=G+99 7450 CLS 7460 RETURN 7500 LET R=R+1 7510 IF R<6 THEN GOTO 3145 7520 LET R=0 7530 PRINT "ENTER TO CONTINUE" 7540 INPUT Z$ 7550 CLS 7560 GOTO 3145 8000 FOR K=1 TO 40 8010 IF VAL C$(M)=K THEN LET T(K)=T(K)+A(M) 8020 NEXT K 8030 RETURN 9000 CLS 9010 PRINT "READY CASSETTE, TYPE NAME, ENTER" 9020 INPUT Z$ 9030 SAVE Z$ 9040 GOTO 10 ```