1 REM TINY CALC -- COPYRIGHT(C) 1981 T.PITTMAN
2 REM L IS DIMENSION: RRC
3 LET L=11
4 PRINT
5 REM PRINT HEADING
90 PRINT
98 LET P=276
99 GOTO 20010
100 PRINT "ROW 1",
105 RETURN
110 REM
119 RETURN
20000
20000 REM INITIALIZATION
20010 LET A=0
20020 LET B=0
20030 LET C=0
20040 LET D=0
20050 LET E=0
20110 LET K=L-L/10*10
20130 LET N=10
20140 IF K<0 THEN LET K=-K
20150 IF K=0 THEN GOTO 20170
20160 IF L/10<>0 THEN IF L<2000 THEN IF L>-2000 THEN GOTO 20210
20170 PRINT "ROW/COLUMN?"
20180 END
20200
20200 REM COMPUTE DATA WORK SPACE (M)
20210 LET S=1
20220 LET M=USR(P,38)*256+USR(P,39)
20230 GOSUB 20240
20240 IF M=USR(P,38)*256+USR(P,39)+2 THEN LET S=0
20250 IF S=1 THEN LET M=USR(P,39)*256+USR(P,38)+2
20260 LET J=L/10*K*4+2
20270 IF J<0 THEN LET J=-J+4
20280 IF M+J<USR(P,34+S)*256+USR(P,35-S) THEN GOTO 21010
20310 LET J=J-2
20320 IF J>0 THEN GOSUB 20310
20330 LET M=USR(P,38+S)*256+USR(P,39-S)+2
21000
21000 REM MAIN CELL SERVICE LOOP
21010 IF L<0 THEN PRINT
21030 GOSUB N*10
21070 LET H=0
21080 LET I=0
21090 LET F=0
21110 LET N=N+1
21120 LET G=-2
21130 LET S=0
21140 LET X=0
21150 LET Y=0
21160 LET Z=0
21170 LET A=0
21180 GOSUB N*10
21190 IF A+B+C+D+E>0 THEN GOTO 21230
21200
21200 REM COMPUTE RESULT, ROUND, AND STORE IT
21210 IF I=0 THEN IF H=0 THEN IF F=0 THEN GOTO 21450
21220 LET A=1
21230 IF G=-2 THEN LET G=2
21240 GOSUB 22020
21250 LET U=X
21260 LET V=Y
21270 LET W=Z
21280 GOSUB 24510
21290 LET J=0
21310 IF G<0 THEN GOTO 21410
21320 IF G>1 THEN GOTO 21410
21330 IF G=1 THEN GOTO 21370
21340 LET J=(V+50)/100*100
21350 IF W=0 THEN IF V-V/200*200=50 THEN LET J=J-100
21360 GOTO 21430
21370 LET J=(V+5)/10*10
21380 IF W=0 THEN IF V-V/20*20=5 THEN LET J=J-10
21390 GOTO 21430
21410 LET J=V+W/5000
21420 IF W=5000 THEN IF V=V/2*2 THEN LET J=J-1
21430 LET X=U+J/10000
21440 LET Y=J-J/10000*10000
21450 LET J=(N/10*K+N-N/10*10-K-1)*4+M
21460 LET Z=USR(P+4,J,X/256)+USR(P+4,J+3,Y-Y/100*100)
21470 LET Z=USR(P+4,J+2,Y/100+S*100)+USR(P+4,J+1,X)
21500
21500 REM PRINT RESULT
21510 IF G<0 THEN GOTO 21720
21520 IF G>1 THEN IF X>9999 THEN LET S=-S-1
21530 IF X<10000 THEN IF G<2 THEN PRINT " ";
21540 IF X<1000 THEN PRINT " ";
21550 IF X<100 THEN PRINT " ";
21560 IF X<10 THEN PRINT " ";
21570 IF X<1 THEN PRINT " ";
21580 IF X=0 THEN IF Y<1000 THEN PRINT " ";
21590 IF S=0 THEN PRINT " ";
21610 IF S>0 THEN PRINT "-";
21620 IF X>0 THEN PRINT X;
21630 IF X>0 THEN IF Y<1000 THEN PRINT 0;
21640 PRINT Y/100;
21650 IF G=0 THEN GOTO 21730
21660 IF S=-2 THEN PRINT "-";
21670 IF S>-2 THEN PRINT ".";
21680 PRINT (Y-Y/100*100)/10;
21690 IF G>1 THEN PRINT Y-Y/10*10;
21710 GOTO 21740
21720 PRINT "          ";
21730 PRINT "  ";
21740 IF N-N/10*10<K THEN GOTO 21070
21750 PRINT
21760 GOSUB 5+N/10*100
21770 LET N=N+10-K
21780 IF N/10*N<L/10*L THEN GOTO 21010
21790 END
22000
22000 REM PERFORM A CALCULATION
22010 GOSUB J*10
22020 LET O=A
22030 LET A=0
22040 IF O>0 THEN GOSUB 22210
22050 LET O=B
22060 LET B=0
22070 IF O>0 THEN GOSUB 22210
22110 LET O=C
22120 LET C=0
22130 IF O>0 THEN GOSUB 22210
22140 LET O=D
22150 LET D=0
22160 IF O>0 THEN GOSUB 22210
22170 LET O=E
22180 LET E=0
22190 IF O<=0 THEN RETURN
22200
22200 REM DECODE ONE OPERATION
22210 LET J=O/10
22220 LET O=O-J*10
22230 IF O>6 THEN GOTO O*50+22260
22240 IF J<10 THEN LET J=J+N/10*10
22250 IF J=J/10*10 THEN LET J=J+N-N/10*10
22260 IF J<>N THEN IF O=0 THEN GOTO 22010
22270 IF J-J/10*10>K THEN GOTO 22330
22280 IF J<=N THEN IF O>4 THEN GOTO 23010
22290 IF J<=N THEN IF O>0 THEN GOTO O*400+22010
22300
22300 REM ERROR MESSAGES
22310 PRINT " ROW ";J/10;"?"
22320 GOTO 22360
22330 PRINT " COLUMN ";J-J/10*10;"?"
22340 GOTO 22360
22350 PRINT " SYNTAX"
22360 PRINT "ERROR IN CALCULATING ROW ";N/10;
22370 PRINT ", COLUMN ";N-N/10*10
22380 PRINT
22390 END
22400
22400 REM SUM
22410 GOSUB 24410
22420 IF S<>T THEN GOTO 22840
22430 LET Z=Z+W
22440 LET Y=Y+V+Z/10000
22450 LET X=X+U+Y/10000
22510 LET Y=Y-Y/10000*10000
22520 LET Z=Z-Z/10000*10000
22530 LET A=0
22540 IF X+Y+Z<>0 THEN RETURN
22550 LET S=0
22560 RETURN
22600
22600 REM ADD/SUBTRACT PERCENT
22610 LET W=(J-J/1000*1000)*10
22620 LET V=J/1000+1
22630 GOTO 22770
22660 IF J>999 THEN GOTO 22350
22670 LET W=10000-J*10
22680 LET V=0
22690 GOTO 22770
22700
22700 REM MULTIPLY PERCENT
22710 LET W=(J-J/1000*1000)*10
22720 LET V=J/1000
22770 LET U=0
22780 LET A=100
22790 GOTO 23250
22800
22800 REM DIFFERENCE
22810 GOSUB 24410
22830 IF S<>T THEN GOTO 22430
22840 LET Z=Z-W+10000
22850 LET Y=Y-V+9999+Z/10000
22860 LET X=X-U+Y/10000-1
22870 IF X>=0 THEN GOTO 22510
22880 GOSUB 22510
22910 LET S=1-S
22920 LET Z=10000-Z
22930 LET Y=9999-Y+Z/10000
22940 LET X=Y/10000-X-1
22950 GOTO 22510
23000
23000 REM CHOOSE MAX/MIN
23010 GOSUB 22810
23040 IF O+S=6 THEN GOTO 22420
23050 LET S=T
23060 LET X=U
23070 LET Y=V
23080 LET Z=W
23090 RETURN
23200
23200 REM MULTIPLY (BY PARTS)
23210 GOSUB 24410
23220 LET S=S+T
23230 IF S>1 THEN LET S=0
23240 IF X>0 THEN IF U>0 THEN GOTO 23580
23250 IF Y>=A THEN IF U>=A THEN GOTO 23580
23260 LET Q=Y/A*(V-V/A*A)+V/A*(Y-Y/A*A)
23270 IF W>0 THEN LET Q=Q+X/A*(W-W/A*A)+W/A*(X-X/A*A)
23280 IF U>0 THEN LET Q=Q+Z/A*(U-U/A*A)+U/A*(Z-Z/A*A)
23290 LET R=Y/A*(V/A)+Z/A*(U/A)+Q/A
23310 IF X>0 THEN LET R=R+X/A*(W/A)+(X-X/A*A)*(V-V/A*A)
23320 IF U>0 THEN LET R=R+(Y-Y/A*A)*(U-U/A*A)
23330 LET Q=(Q-Q/A*A)*A+(Y-Y/A*A)*(V-V/A*A)
23340 IF W+Z>0 THEN LET Q=Q+Y/A*(W/A)+Z/A*(V/A)
23350 IF W>0 THEN LET Q=Q+(X-X/A*A)*(W-W/A*A)
23360 IF U>0 THEN LET Q=Q+(Z-Z/A*A)*(U-U/A*A)
23370 IF Q<0 THEN LET R=R+3
23380 IF Q<0 THEN LET Q=Q-30000
23390 LET X=X/A*(V-V/A*A)+V/A*(X-X/A*A)
23410 IF U>0 THEN LET X=X+Y/A*(U-U/A*A)+U/A*(Y-Y/A*A)
23420 IF X>=A THEN GOTO 23580
23430 IF X>=0 THEN LET X=R+X*A
23440 LET J=0
23450 LET R=Z/A*(V-V/A*A)+V/A*(Z-Z/A*A)
23460 IF W=0 THEN GOTO 23510
23470 LET J=Z/A*(W-W/A*A)+W/A*(Z-Z/A*A)
23480 LET J=(J+50)/A+Z/A*(W/A)
23490 LET J=J+(Y-Y/A*A)*(W-W/A*A)
23510 LET J=J+(Z-Z/A*A)*(V-V/A*A)
23520 LET R=R+Y/A*(W-W/A*A)+W/A*(Y-Y/A*A)
23530 LET Q=Q+R/A+J/10000
23540 LET Z=J-J/10000*10000+(R-R/A*A)*A
23550 LET Y=Q+Z/10000
23560 LET U=0
23570 IF X>=0 THEN GOTO 22450
23580 PRINT " OVERFLOW"
23590 GOTO 22360
23600
23600 REM DIVIDE (CLASSICAL LONG DIVISION)
23610 GOSUB 24410
23620 IF U+V+W=0 THEN GOTO 23680
23630 IF S+T<>1 THEN GOTO 23710
23640 GOSUB 23710
23650 LET S=1
23660 RETURN
23680 PRINT " 0 DIVISOR"
23690 GOTO 22360
23710 LET Q=0
23720 LET R=0
23730 LET T=X/10000
23740 LET X=X-T*10000
23750 LET J=20
23760 IF U>2 THEN GOTO 23810
23770 GOSUB 24510
23780 LET J=J+2
23790 IF U<3 THEN GOTO 23770
23810 LET O=Q
23820 LET Q=R
23830 LET R=T
23840 LET T=X
23850 LET X=Y
23860 LET Y=Z
23870 LET Z=0
23880 LET J=J-4
23890 IF J<5 THEN GOTO 23960
23910 IF O>0 THEN GOTO 23960
23920 IF U>Q THEN GOTO 23810
23930 IF Q>U THEN GOTO 23960
23940 IF V>R THEN GOTO 23810
23950 IF V=R THEN IF W>T THEN GOTO 23810
23960 IF U>O THEN GOTO 24210
23970 LET S=O/(U+1)
23980 IF S=0 THEN GOTO 24150
23990 LET Z=Z+S
24010 LET R=R-(W-W/100*100)*S+20000
24020 LET A=W/100*S
24030 LET R=R-(A-A/100*100)*100
24040 LET Q=Q-(V-V/100*100)*S+19998-A/100
24050 LET A=V/100*S
24060 LET Q=Q-(A-A/100*100)*100+R/10000
24070 LET O=O-U*S-A/100-2+Q/10000
24090 LET R=R-R/10000*10000
24110 LET Q=Q-Q/10000*10000
24120 IF O>U THEN GOTO 23970
24130 LET S=0
24150 IF U>O THEN GOTO 24210
24160 IF Q<V THEN GOTO 24210

24170 IF Q=V THEN IF R<W THEN GOTO 24210
24180 LET S=1
24190 GOTO 23990
24210 LET A=100
24220 LET O=O*A+Q/A
24230 LET Q=(Q-Q/A*A)*A+R/A
24240 LET R=(R-R/A*A)*A+T/A
24250 LET T=(T-T/A*A)*A+X/A
24260 LET X=(X-X/A*A)*A+Y/A
24270 LET Y=(Y-Y/A*A)*A+Z/A
24280 LET Z=(Z-Z/A*A)*A
24290 IF J<4 THEN IF T>0 THEN GOTO 23580
24310 LET J=J-2
24320 IF J>0 THEN GOTO 23890
24330 LET A=0
24340 RETURN
24400
24400 REM FETCH VALUE FROM CELL
24410 IF J=N THEN GOTO 24610
24420 LET J=(J/10*K+J-J/10*10-K-1)*4+M
24430 LET U=0
24440 LET V=USR(P,J)*256+USR(P,J+1)
24450 LET W=USR(P,J+2)*100+USR(P,J+3)
24460 LET T=W/10000
24470 LET W=W-T*10000
24510 LET A=100
24520 IF U>300 THEN GOTO 23580
24530 LET U=U*A+V/A
24540 LET V=(V-V/A*A)*A+W/A
24550 LET W=(W-W/A*A)*A
24560 RETURN
24600 REM FETCH & CLEAR CONSTANT
24610 LET U=H
24620 LET V=I
24630 LET W=F
24640 LET T=1
24650 IF W>=0 THEN IF V>=0 THEN IF U>=0 THEN LET T=0
24660 IF W<0 THEN LET W=-W
24670 IF V<0 THEN LET V=-V
24680 IF U<0 THEN LET U=-U
24690 IF U>3000 THEN GOTO 23580
24710 LET A=100
24720 LET V=V+W/A+(U-U/10*10)*1000
24730 LET U=U/10+V/10000
24740 LET V=V-V/10000*10000
24750 LET W=(W-W/A*A)*A
24760 LET H=0
24770 LET I=0
24780 LET F=0
24790 RETURN
24990 END
