10 COM X[103,22],M[19,19],U[19,19],Q[20],V[20],P[78] 30 COM M$[60],N$[72] 40 COM N,K,N8,K8,N9,K9,Q9,Q7,Q5,Q4,Q3,Q2,Q1 45 COM I3,I4,U9,X$[20] 50 REM:21MAY74 52 REM:>CALC 60 IF Q9>1 THEN 95 90 GOTO 3000 95 DIM A[50],B[50],C[50],A$[72],D$[10] 99 W=15 100 D$="0123456789" 101 MAT A=CON 102 MAT B=CON 103 MAT C=CON 104 R=D=0 105 GOTO 3070 106 REM 110 A=ABS(A[1]) 120 A1=(A[1]<0)+4*(A-3 MAX 0)+1+(D>0)+D-(A >= 4)*(2+(A[A]<100)+(A[A]<10)) 130 FOR A2=1 TO ABS(W)-A1 140 PRINT " "; 150 NEXT A2 160 IF A[1] >= 0 THEN 180 170 PRINT "-"; 180 A2=3 185 IF A >= 4 THEN 210 190 PRINT "0"; 200 GOTO 220 210 GOSUB 330 220 A1=0 230 FOR A=A-1 TO 4 STEP -1 240 PRINT ","; 250 GOSUB 330 260 NEXT A 270 IF D=0 THEN 324 280 PRINT "."; 290 A2=D MIN 3 295 A=3 300 GOSUB 330 310 A2=(D-3) MIN 3 320 A=2 323 GOSUB 330 324 IF W<0 THEN 326 325 PRINT 326 RETURN 330 A3=A[A]*(A <= ABS(A[1])) 340 A4=INT(A3/100) 350 A5=INT((A3-100*A4)/10) 355 A6=A3-100*A4-10*A5 360 IF A4=0 AND A1 OR A2<1 THEN 380 370 PRINT D$[A4+1,A4+1]; 380 IF A3<10 AND A1 OR A2<2 THEN 400 390 PRINT D$[A5+1,A5+1]; 400 IF A2<3 THEN 420 410 PRINT D$[A6+1,A6+1]; 420 RETURN 500 REM--A=B+C 510 B=ABS(B[1]) 520 C=ABS(C[1]) 530 A1=0 540 IF B[1]*C[1]<0 THEN 640 550 FOR A=2 TO B MAX C 560 A2=A1+B[A]*(A <= B)+C[A]*(A <= C) 570 A1=(A2>999) 580 A[A]=A2-1000*A1 590 NEXT A 600 IF NOT A1 THEN 620 610 A[A]=1 620 A[1]=(A-( NOT A1))*SGN(B[1]) 630 RETURN 640 A3=1 650 GOTO SGN(B-C)+2 OF 710,660,720 660 FOR A=B TO 2 STEP -1 670 GOTO SGN(B[A]-C[A])+2 OF 710,680,720 680 NEXT A 690 A[1]=1 700 RETURN 710 A3=-1 720 FOR A=2 TO B MAX C 730 A2=A1+(B[A]*(B >= A)-C[A]*(C >= A))*A3 740 A1=-(A2<0) 750 A[A]=A2-1000*A1 760 NEXT A 770 FOR A=A-1 TO 2 STEP -1 780 IF A[A]>0 THEN 800 790 NEXT A 800 A[1]=A*A3*SGN(B[1]) 810 RETURN 820 REM--A=B-C 830 C[1]=-C[1] 840 GOSUB 500 850 C[1]=-C[1] 860 RETURN 900 A8=1 910 GOTO 930 920 A8=0 930 A9=1 935 A3=0 940 A[1]=3 945 A[2]=A[3]=0 950 FOR A1=1 TO LEN(A$) 960 IF A$[A1,A1] <> " " THEN 1000 970 NEXT A1 980 IF A8 THEN 995 985 READ A$ 990 GOTO 950 995 INPUT A$ 997 GOTO 950 1000 IF A$[A1,A1] <> "-" THEN 1040 1010 A9=-1 1020 A1=A1+1 1030 GOTO 1000 1040 IF A$[A1,A1] <> " " THEN 1070 1050 A$=A$[A1] 1060 GOTO 1340 1070 IF A3=.1 THEN 1020 1075 FOR A2=1 TO 10 1080 IF D$[A2,A2]=A$[A1,A1] THEN 1150 1090 NEXT A2 1100 IF A$[A1,A1] <> "." THEN 1020 1110 A3=100000. 1120 GOTO 1020 1150 A2=A2-1 1160 IF A3=0 THEN 1250 1180 A4=INT(A3/1000) 1190 A[3]=A[3]+A2*A4 1200 A[2]=A[2]+A2*(A3-1000*A4) 1210 A3=A3/10 1220 GOTO 1020 1250 FOR A4=4 TO A[1] 1260 A5=10*A[A4]+A2 1270 A2=INT(A5/1000) 1280 A[A4]=A5-1000*A2 1290 NEXT A4 1300 IF A2=0 THEN 1020 1310 A[1]=A[1]+1 1320 A[A[1]]=A2 1330 GOTO 1020 1340 IF A[A[1]] THEN 1370 1350 A[1]=A[1]-1 1360 GOTO 1340 1370 A[1]=A[1]*A9 1380 RETURN 1400 REM--A=B*C 1410 A[1]=1 1420 IF ABS(B[1])=1 OR ABS(C[1])=1 THEN 1570 1430 MAT A=ZER 1440 A[1]=INT(B[2]*C[2]/1000) 1450 A1=3 1460 FOR C=2 TO ABS(C[1]) 1470 A2=0 1480 FOR B=A1 TO ABS(B[1]) 1490 A3=C[C]*B[B]+A2+A[B+C-4] 1500 A2=INT(A3/1000) 1510 A[B+C-4]=A3-1000*A2 1520 NEXT B 1530 A1=2 1540 A[B+C-4]=A2 1550 NEXT C 1560 A[1]=(B+C-5-(A[B+C-5]=0))*SGN(B[1]*C[1]) 1570 RETURN 1600 REM--A=B/C 1610 B=ABS(B[1])+2 1620 C=ABS(C[1]) 1630 IF C>1 THEN 1660 1640 PRINT '13'10'10"*** DIVISION BY ZERO **" 1650 GOTO 9998 1660 A[1]=1 1670 IF B>3 THEN 1690 1680 RETURN 1690 REM--SCALE B AND C. 1700 FOR B1=B TO 4 STEP -1 1710 B[B1]=B[B1-2] 1720 NEXT B1 1730 B[2]=B[3]=0 1735 IF C=2 THEN 2150 1740 B1=INT(1000/(C[C]+1)) 1750 B[B+1]=0 1760 IF B1=1 THEN 1900 1770 B2=0 1780 FOR B3=4 TO B 1790 B4=B1*B[B3]+B2 1800 B2=INT(B4/1000) 1810 B[B3]=B4-1000*B2 1820 NEXT B3 1830 B[B3]=B2 1840 B2=0 1850 FOR B3=2 TO C 1860 B4=B1*C[B3]+B2 1870 B2=INT(B4/1000) 1880 C[B3]=B4-1000*B2 1890 NEXT B3 1900 FOR B1=B+1 TO C+1 STEP -1 1910 A=INT((1000*B[B1]+B[B1-1])/C[C]) MIN 999 1920 IF C[C-1]*A-B[B1-2] <= (B[B1]*1000+B[B1-1]-A*C[C])*1000 THEN 1950 1930 A=A-1 1940 GOTO 1920 1950 B2=0 1955 B5=B1-C-1 1960 FOR B3=2 TO C 1970 B4=B2+B[B5+B3]-A*C[B3] 1980 B2=INT(B4/1000) 1990 B[B5+B3]=B4-1000*B2 2000 NEXT B3 2010 IF B2+B[B1] >= 0 THEN 2090 2020 A=A-1 2030 B2=0 2040 FOR B3=2 TO C 2050 B4=B2+B[B5+B3]+C[B3] 2060 B2=INT(B4/1000) 2070 B[B5+B3]=B4-1000*B2 2080 NEXT B3 2090 A[B5+2]=A 2100 NEXT B1 2110 A=B+2-C MAX 1 2115 IF A=1 THEN 2140 2120 A=(A-(A[A]=0)-(A[A]+A[A-1]=0))*SGN(B[1]*C[1]) 2130 A[1]=A+2*(A=-1) 2140 RETURN 2150 REM--SIMPLE CASE--C IS ONLY 1 WORD. 2160 C1=C[2] 2170 B2=0 2180 FOR B1=B TO 2 STEP -1 2190 B3=1000*B2+B[B1] 2200 A[B1]=INT(B3/C1) 2210 B2=B3-A[B1]*C1 2220 NEXT B1 2230 GOTO 2110 3000 PRINT '10'10'10"CALCULATOR" 3010 PRINT "NEED INSTRUCTIONS "; 3020 INPUT A$ 3030 IF A$[1,1]="Y" THEN 9948 3040 IF A$[1,1]="N" THEN 95 3050 PRINT "WHAT"; 3060 GOTO 3020 3070 GOSUB 3860 3090 GOSUB 3940 3100 GOSUB 106 3110 INPUT A$ 3115 IF A$[1,1]="Q" THEN 9998 3120 REM 3130 IF LEN(A$)=0 THEN 3110 3140 REM 3150 FOR I=1 TO LEN(A$) 3160 IF A$[1,1] <> " " THEN 3200 3170 A$=A$[2] 3180 NEXT I 3190 GOTO 3110 3200 E$=A$[1,1] 3210 A$=A$[2] 3220 REM 3230 IF E$ <> "C" THEN 3280 3240 GOSUB 3970 3250 GOSUB 3940 3260 GOSUB 106 3270 GOTO 3110 3280 REM 3290 IF E$ <> "R" THEN 3350 3300 GOSUB 3970 3310 GOSUB 3860 3320 GOSUB 3940 3330 GOSUB 106 3340 GOTO 3110 3350 REM 3360 IF E$="H" THEN 3620 3370 REM 3380 FOR I=1 TO LEN(A$) 3390 FOR J=1 TO 10 3400 IF D$[J,J]=A$[1,1] THEN 3470 3410 NEXT J 3420 IF A$[1,1]="." THEN 3470 3430 IF A$[1,1]="-" THEN 3470 3440 A$=A$[2] 3450 NEXT I 3460 GOTO 3110 3470 REM 3480 GOSUB 3940 3490 REM 3500 GOSUB 900 3510 MAT C=A 3520 REM 3530 IF E$="+" THEN 3670 3540 IF E$="A" THEN 3670 3550 IF E$="-" THEN 3700 3560 IF E$="S" THEN 3700 3570 IF E$="*" THEN 3730 3580 IF E$="M" THEN 3730 3590 IF E$="/" THEN 3760 3600 IF E$="D" THEN 3760 3610 REM 3620 PRINT " "E$" NOT LEGAL"'10'10'10 3630 GOSUB 3940 3640 MAT A=B 3650 GOSUB 106 3660 GOTO 3110 3670 REM*****ADD 3680 GOSUB 500 3690 GOTO 3820 3700 REM*****SUBTRACT 3710 GOSUB 820 3720 GOTO 3820 3730 REM*****MULTIPLY 3740 GOSUB 1400 3750 GOTO 3820 3760 REM DIVIDE 3770 IF A[1] <> 1 THEN 3810 3780 PRINT " DIVISION BY ZERO"'10'10'10 3790 E$="C" 3800 GOTO 3230 3810 GOSUB 1600 3820 REM 3830 MAT B=A 3840 GOSUB 106 3850 GOTO 3120 3860 GOTO Q9 OF 3870,3870,3904 3870 PRINT '10'10"HOW MANY DIGITS TO THE LEFT OF THE DECIMAL POINT "; 3880 INPUT W 3890 PRINT '10'10"HOW MANY DIGITS TO THE RIGHT OF THE DECIMAL (6 MAX)"; 3900 INPUT D 3902 GOTO 3910 3904 PRINT "NO. DIGITS (LEFT, RIGHT) OF DECIMAL PT. = "; 3906 INPUT W,D 3910 W=INT(W+W/3+D+3) 3920 PRINT '10'10'10; 3930 RETURN 3940 REM 3950 PRINT TAB(W);"="; 3960 RETURN 3970 REM 3980 A[1]=B[1]=1 3990 RETURN 9948 CHAIN "$IDAE48" 9998 CHAIN "$IDA",150 9999 END