3 REM STOPB: MATH CALCULATOR PACKAGE 6 REM TRANSLATED TO BASIC-PLUS BY PROJECT DELTA 8 OPEN'P.DAT' AS FILE1%:DIM#1%,A(1000) 30 B$='0123456789' 40 A$='000000000 ' 45 R=0 50 PRINT'THIS PROGRAM WAS DEVELOPED BY THE T I E S PROJECT.' 60 PRINT'NOTE: TYPE AN "E" TO TERMINATE PROGRAM RATHER THAN "0,0" .' 70 PRINT 80 MAT A=ZER 90 PRINT'BEGIN TYPING IN YOUR PROGRAM' 130 INPUT LINE C$:C$=LEFT(C$,LEN(C$)-2) 140 IF C$='E' THEN 540 150 I,J=0 160 IF MID(C$,4,1)=',' THEN 190 170 PRINT'ILLEGAL FORMAT. RE-TYPE STATEMENT.' 180 GOTO 130 190 IF MID(C$,10,1)=' ' THEN 230 200 IF MID(C$,5,1)='-' THEN 230 210 IF MID(C$,5,1)='+' THEN 230 220 GOTO 170 230 FOR K=11 TO 72 240 IF MID(C$,K,1)<>' ' THEN 170 250 NEXT K 252 GOSUB 261 253 IF L=99 THEN 170 254 GOTO 350 261 C5=2 270 FOR K=1 TO 3 280 FOR L=1 TO 10 290 IF MID(C$,K,1)=MID(B$,L,1) THEN 320 300 NEXT L 310 L=99 315 GOTO 342 320 I=I+((L-1)*10^C5) 330 C5=C5-1 340 NEXT K 342 RETURN 350 C5=4 360 IF MID(C$,10,1)=' ' THEN 400 370 I1=6 380 I2=10 390 GOTO 420 400 I1=5 410 I2=9 420 FOR K=I1 TO I2 430 FOR L=1 TO 10 440 IF MID(C$,K,1)=MID(B$,L,1) THEN 470 450 NEXT L 460 GOTO 170 470 J=J+((L-1)*10^C5) 480 C5=C5-1 490 NEXT K 500 IF MID(C$,5,1)<>'-' THEN 520 510 J=J*(-1) 520 A(I)=J 530 GOTO 130 540 PRINT'TYPE 0 TO RUN, 1 TO EDIT, 2 TO LIST, 3 TO STEP, 4 TO STOP.' 550 INPUT Z 560 PRINT 570 IF Z=1 THEN 620 580 IF Z=0 THEN 650 590 IF Z=2 THEN 1940 600 IF Z=3 THEN 650 605 IF Z=4 THEN 2530 610 GOTO 540 620 PRINT'BEGIN EDITING' 630 PRINT 640 GOTO 130 650 PRINT'INPUT THE STARTING ADDRESS' 660 INPUT C$ 662 I=0 664 FOR K=4 TO 72 666 IF MID(C$,K,1)<>' ' THEN 690 668 NEXT K 670 GOSUB 261 672 IF L=99 THEN690 674 Q3=I 676 PRINT 680 GOTO 710 690 PRINT'BAD ADDRESS! TRY AGAIN!' 700 GOTO 650 710 IF Z<>3 THEN 870 720 PRINT ' ADD.';' ACCUM.' 730 GOTO 870 740 IF Z<>3 THEN 840 750 PRINT 760 I=Q3 770 GOSUB 2080 780 P3=R 790 GOSUB 2260 800 PRINT' 'MID(A$,1,3)' 'MID(A$,5,6) 810 A$='000000000 '+RIGHT(A$,11) 820 INPUT Z 830 GOTO 860 840 IF Z=0 THEN 860 850 GOTO 540 860 Q3=Q3+1 870 A=A(Q3) 880 GOSUB 1050 890 IF X>0 AND X<=12 THEN 910 900 IF X<>15 AND X<>17 THEN 950 910 N=1 920 IF X=N THEN 965 930 N=N+1 940 GOTO 920 950 PRINT'ILLEGAL OPCODE!' 960 GOTO 540 965 IF N=15 THEN 1760 966 IF N=17 THEN 1790 970 ON N GOTO 1120,1160,1220,1280,1340,1400,1440,1480,1540,1570,1610,1680 1000 PRINT'ILLEGAL PRORAM ADDRESS REFERENCED.' 1010 GOTO 540 1020 PRINT'ILLEGAL OPCODE.' 1030 GOTO 540 1040 REM THIS SUBROUTINE RETURNS THE OPCODE 1050 X=INT(A*.001) 1060 RETURN 1070 REM THIS SUBROUTINE RETURN THE OPERAND 1080 X=A-(INT(A*.001)*1000) 1090 IF X<0 OR X>999 THEN 1000 1100 IF X=0 AND N<>17 THEN 1000 1110 RETURN 1120 REM OPCODE 01 1130 GOSUB 1080 1140 R=A(X) 1150 GOTO 740 1160 REM OPCODE 02 1170 GOSUB 1080 1180 R=R+A(X) 1190 R2=R 1200 GOSUB 1850 1210 GOTO 740 1220 REM OPCODE 03 1230 GOSUB 1080 1240 R=R-A(X) 1250 R2=R 1260 GOSUB 1850 1270 GOTO 740 1280 REM OPCODE 04 1290 GOSUB 1080 1300 R=R*A(X) 1310 R2=R 1320 GOSUB 1850 1330 GOTO 740 1340 REM OPCODE 05 1350 GOSUB 1080 1360 IF A(X)<>0 THEN 1380 1370 GOTO 1710 1380 R=INT(R/A(X)) 1390 GOTO 740 1400 REM OPCODE 06 1410 GOSUB 1080 1420 A(X)=R 1430 GOTO 740 1440 REM OPCODE 07 1450 GOSUB 1080 1452 P3=A(X) 1454 A$='000000000 '+RIGHT(A$,11) 1456 GOSUB 2260 1460 PRINT MID(A$,5,6) 1462 A$='000000000 '+RIGHT(A$,11) 1470 GOTO 740 1480 REM OPCODE 08 1490 IF R<0 THEN 1510 1500 GOTO 740 1510 GOSUB 1080 1520 Q3=X 1530 GOTO 870 1540 REM OPCODE 09 1550 PRINT'HALT' 1560 GOTO 540 1570 REM OPCODE 10 UNCONDITIONAL JUMP 1580 GOSUB 1080 1590 Q3=X 1600 GOTO 870 1610 REM OPCODE 11 MULTI-COLUMN PRINT 1620 GOSUB 1080 1630 IF ABS(A(X))<=99999 THEN 1660 1640 R2=A(X) 1650 GOTO 1850 1660 PRINTA(X); 1670 GOTO 740 1680 REM OPCODE 12 1690 GOSUB 1080 1700 IF A(X)<>0 THEN 1740 1710 PRINT'ATTEMPT TO DIVIDE BY ZERO AT LOCATION 'Q3 1720 PRINT 1730 GOTO 540 1740 R=R-INT(R/A(X))*A(X) 1750 GOTO 740 1760 REM OPCODE 15 1770 IF R=0 THEN 1510 1780 GOTO 740 1790 REM OPCODE 17 1800 GOSUB 1080 1810 R1=R/10^X 1820 IF ABS(R1)<=99999 THEN 1920 1830 R2=R1 1840 GOSUB 1850 1850 IF ABS(R2)<=99999 THEN 1910 1860 PRINT'ACCUMULATOR OVERFLOW. HIGH ORDER DIGITS TRUNCATED.' 1870 R3=INT(R2/100000) 1880 R=R2-R3*100000 1890 PRINT'VALUE OF ACCUMULATOR IS'R 1900 PRINT 1910 RETURN 1920 P3=R1 1922 A$='000000000 '+RIGHT(A$,11) 1924 GOSUB 2260 1926 PRINT MID(A$,5,6) 1928 A$='000000000 '+RIGHT(A$,11) 1930 GOTO 740 1940 PRINT'INPUT THE STARTING AND ENDING ADDRESSES FOR THE LISTING.' 1950 INPUT LINE D$:D$=LEFT(D$,LEN(D$)-2) 1952 IF MID(D$,4,1)<>',' THEN 2000 1954 FOR K=8 TO 72 1956 IF MID(D$,K,1)<>' ' THEN 2000 1958 NEXT K 1960 C$=MID(D$,1,3) 1962 I=0 1964 GOSUB 261 1966 IF L=99 THEN 2000 1968 Z1=I 1970 I=0 1972 C$=MID(D$,5,3) 1974 GOSUB 261 1976 IF L=99 THEN 2000 1978 Z2=I 1979 PRINT 1980 IF Z1>0 AND Z1<72 THEN 1990 1982 GOTO 2000 1990 IF Z2<1000 THEN 2020 2000 PRINT'ILLEGAL LIST PARAMETERS.' 2010 GOTO 1940 2020 FOR I=Z1 TO Z2 2030 A$=LEFT(A$,3)+','+RIGHT(A$,5) 2040 GOSUB 2080 2050 P3=A(I) 2060 GOSUB 2260 2070 GOTO 2460 2080 IF I>9 THEN 2120 2090 A$='00'+RIGHT(A$,3) 2100 A$=LEFT(A$,2)+MID(B$,I+1,1)+RIGHT(A$,4) 2110 GOTO 2250 2120 IF I>99 THEN 2190 2130 A$='0'+RIGHT(A$,2) 2140 L1=INT(I/10) 2150 A$=LEFT(A$,1)+MID(B$,L1+1,1)+RIGHT(A$,3) 2160 L1=I-L1*10 2170 A$=LEFT(A$,2)+MID(B$,L1+1,1)+RIGHT(A$,4) 2180 GOTO 2250 2190 L1=INT(I/100) 2200 A$=MID(B$,L1+1,1)+RIGHT(A$,2) 2210 L2=INT((I-L1*100)/10) 2220 A$=LEFT(A$,1)+MID(B$,L2+1,1)+RIGHT(A$,3) 2230 L1=I-((L1*100)+(L2*10)) 2240 A$=LEFT(A$,2)+MID(B$,L1+1,1)+RIGHT(A$,4) 2250 RETURN 2260 IF P3>0 THEN 2310 2270 P3=P3*(-1) 2280 P1=6 2290 A$=LEFT(A$,4)+'-'+RIGHT(A$,6) 2300 GOTO 2320 2310 P1=5 2320 IF P3>9999 THEN 2350 2330 L1=0 2340 GOTO 2360 2350 L1=INT(P3/10000) 2360 A$=LEFT(A$,P1-1)+MID(B$,L1+1,1)+RIGHT(A$,P1+1) 2370 L2=INT((P3-L1*10000)/1000) 2380 A$=LEFT(A$,P1)+MID(B$,L2+1,1)+RIGHT(A$,P1+2) 2390 L3=INT((P3-((L1*10000)+(L2*1000)))/100) 2400 A$=LEFT(A$,P1+1)+MID(B$,L3+1,1)+RIGHT(A$,P1+3) 2410 L4=INT((P3-((L1*10000)+(L2*1000)+(L3*100)))/10) 2420 A$=LEFT(A$,P1+2)+MID(B$,L4+1,1)+RIGHT(A$,P1+4) 2430 L5=P3-((L1*10000)+(L2*1000)+(L3*100)+(L4*10)) 2440 A$=LEFT(A$,P1+3)+MID(B$,L5+1,1)+RIGHT(A$,P1+5) 2450 RETURN 2460 PRINTA$ 2470 IF MID(A$,5,1)<>'-' THEN 2480 2480 A$='000000000 '+RIGHT(A$,11) 2490 NEXT I 2500 PRINT 2510 GOTO 540 2520 STOP 2530 CLOSE 1%:END