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 
