100 REM MICHEAL MCCABE 110 REM RETROCHALLENGE 2021 120 REM DTMF TONE GENERATOR 130 CALL CLEAR 135 OPTION BASE 0 140 DIM F(16,3) 150 RESTORE 160 DATA 941,1336,100 170 DATA 697,1209,100 180 DATA 697,1336,100 190 DATA 697,1477,100 200 DATA 770,1209,100 210 DATA 770,1336,100 220 DATA 770,1477,100 230 DATA 852,1209,100 240 DATA 852,1336,100 250 DATA 852,1477,100 260 DATA 941,1209,100 270 DATA 941,1477,100 272 DATA 697,1633,100 274 DATA 770,1633,100 276 DATA 852,1633,100 278 DATA 941,1633,100 280 FOR I=0 TO 15 290 READ F(I,1),F(I,2),F(I,3) 300 NEXT I 310 PRINT "DTMF TONE GENERATOR FOR" 320 PRINT "CO DIALING" 330 PRINT 340 PRINT "ENTER A STRING OF DIGITS" 350 PRINT "FOR THE DESTINATION PHONE" 360 PRINT "NUMBER:" 370 PRINT 380 INPUT D$ 390 PRINT 400 PRINT "THANK YOU." 410 PRINT 418 PRINT "SENDING DIGITS..." 420 FOR I=1 TO LEN(D$) 430 LET E$=SEG$(D$,I,1) 440 GOSUB 550 443 CALL SOUND(F(D,3),F(D,1),7,F(D,2),7) 450 NEXT I 460 PRINT 500 PRINT "TONE SEQUENCE COMPLETE." 510 PRINT 520 INPUT "RUN AGAIN?":Q$ 530 IF (Q$="Y")+(Q$="YES")THEN 330 540 END 550 REM PARSE THE DIGIT 560 LET A=ASC(E$) 570 IF (A>=48)*(A<=57)THEN 650 580 IF (A>=65)*(A<=68)THEN 680 590 IF A=35 THEN 710 600 IF A=42 THEN 740 610 PRINT "PARSE ERROR." 620 STOP 650 REM CASE 1 660 LET D=A-48 670 RETURN 680 REM CASE 2 690 LET D=A-53 700 RETURN 710 REM CASE 3 720 LET D=11 730 RETURN 740 REM CASE 4 750 LET D=10 760 RETURN