30 POKE53280,0:POKE53281,0:GOSUB60000:POKE 198,0 40 CLR:POKE 788,52 42 DIM CR(1,2),CR$(1,2),CU$(4),FR(1,1,2),FR$(1,1,2),K(1),MS$(20),RT(2) 50 DIM A,A0,A1,A2,AD,A$,B,B0,B1,B2,B$ 60 DIM C,C0,C1,C2,CP,CS,CU,CV,C0$,C1$,C2$,C3$,C4$,C5$,CU$ 70 DIM D,DB,DP,DS,DV,EM,EX,FE,FQ,FT,H,H0,H1,H2,H$ 80 DIM J,K,KC$,L,M,MC,MC$,MS,N,NS,PR,PW,R0,R1,R2,RS 90 DIM S,SO,SC$,SR$,T0,T1,TA,TB,TC,UC,V0,V1,V2,WD$,X,XP,XS,Y,YP,YS 110 DV=PEEK(186):IF DV<8 THEN DV=8 130 SYS57812"TRIGFONT",DV,0:POKE780,0:POKE781,0:POKE782,232:SYS65493 140 SYS57812"TRIG.OBJ",DV,0:POKE780,0:POKE781,0:POKE782,192:SYS65493 150 AD=49152:SYSAD+15,0:SYSAD+21,1:POKE53265,PEEK(53265)AND191 152 PRINT"[147]"CHR$(142) 153 POKE53280,6:POKE53281,14:POKE53282,0:POKE53283,1:POKE53284,6 160 GOSUB 4720:SR$=CHR$(20)+"1234567890.[145][157][133][147][134]Q[209]H[200]P[208]"+CHR$(13) 170 CU$(1)="( [196][196] )":CU$(2)="([196][205][211] )":CU$(3)="([210][193][196] )":CU$(4)="([199][210][193][196])" 180 WD$="":X=0:Y=0:SC$=" [157][157][157][157][157][157][157][157][157][157][157][157][157][157]":CU=1 190 KC$=" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]":POKE53269,0:POKE650,128:DB=0 200 C0$="[158]":C1$="[129]":C2$="[156]":C3$="":C4$="" 210 FORJ=0TO1:FORK=0TO2:POKE214,2*K+13:POKE211,18*J+5:SYS58732:PRINTC0$SC$ 220 NEXT:NEXT:GOSUB 1980:POKE214,13:POKE211,5:SYS58732:SYSAD+9,0 240 REM *** MAIN INPUT LOOP *** 250 PRINTCHR$(142);: GOSUB 3930:MS=10:GOSUB 3880 260 FT=1 270 ON FT GOSUB 550,530 280 FOR J=1 TO 50 290 GET A$:IF A$="" THEN NEXT:FT=1-(FT=1):GOTO 270 300 J=50:NEXT 310 FOR J=1TOLEN(SR$):IFMID$(SR$,J,1)=A$THEN UC=J:J=LEN(SR$):NEXT:GOTO 330 320 NEXT:MC=1:MS=13:GOSUB3880:GOTO260 330 GOSUB 530:IFMCTHENMS=0:GOSUB3880:MC=0 340 ON UC GOTO 420,370,370,370,370,370,370,370,370,370,370,380 350 ON UC-12 GOTO 390,390,390,390,400,400,400,400,400,400,410,410,440,440,430 360 GOTO 270 370 GOSUB 860:GOTO 260:REM NUMBERS 380 GOSUB 890:GOTO 260:REM DEC POINT 390 GOSUB 960:GOTO 260:REM CURSORS 400 GOSUB 1890:GOTO 260:REM FKEYS 410 GOSUB 4270:GOTO 260:REM HELP 420 GOSUB 920:GOTO 260:REM DELETE 430 GOSUB 1050:GOTO 260:REM RETURN 440 GOSUB 1390:GOTO 260:REM PRINTER 450 REM *** END PROGRAM *** 460 POKE 788,49:SYSAD+18,12,1,8 470 GOTO40000 520 SYSAD+18,12,1,8:PRINT"[147]";:END 530 A=40*PEEK(214)+PEEK(211)+256*PEEK(648) 540 POKE A,PEEK(A)AND127:RETURN 550 A=40*PEEK(214)+PEEK(211)+256*PEEK(648) 560 POKE A,PEEK(A)OR128:RETURN 570 IF LEN(WD$) THEN RETURN 580 PRINTC0$SC$;:RETURN 590 REM *** FE SOUND *** 600 S=54272:SYSAD+24 610 POKES+1,08:POKES+4,32:POKES+6,240:POKES+24,15:POKE S+4,33 620 FOR J=1 TO 1000:NEXT:POKES+4,16 630 SYSAD+24:RETURN 640 S=54272:SYSAD+24 650 POKES+1,FQ:POKES+3,PW:POKES+4,64:POKES+5,11:POKES+24,15:POKES+4,65:RETURN 660 REM *** TITLE SCREEN *** 670 GOSUB60000:POKE53280,6:POKE53281,14:POKE53282,0:POKE53283,1:POKE53284,6 680 POKE 53265,PEEK(53265)OR 64 690 TB=7 850 RETURN 860 REM *** NUMERALS *** 870 IF (LEN(WD$)-DP)>=9 THEN RETURN 880 GOSUB 570:PRINTA$;:WD$=WD$+A$:RETURN 890 REM *** DECIMAL POINT *** 900 IF DP THEN RETURN 910 GOSUB 570:DP=1:PRINTA$;:WD$=WD$+A$:RETURN 920 REM *** DELETE *** 930 IF LEN(WD$)=0 THEN RETURN 940 IF RIGHT$(WD$,1)="." THEN DP=0 950 WD$=LEFT$(WD$,LEN(WD$)-1):PRINT" [157][157] [157]";:RETURN 960 REM *** CURSORS *** 970 POKE214,2*Y+13:POKE211,18*X+5:SYS58732:PRINTC0$SC$CR$(X,Y); 980 IF A$="" AND Y<2 THEN Y=Y+1:GOTO 1020 990 IF A$="[145]" AND Y>0 THEN Y=Y-1:GOTO 1020 1000 IF A$="" AND X=0 THEN X=1:GOTO 1020 1010 IF A$="[157]" AND X=1 THEN X=0 1020 POKE 214,2*Y+13:POKE 211,18*X+5:SYS 58732: 1030 WD$="":DP=0:RETURN 1040 REM *** RETURN *** 1050 GOSUB 530:IF WD$="" THEN RETURN 1060 IF VAL(WD$)=0 THEN CR$(X,Y)="":GOTO 1130 1070 IF VAL(CR$(X,Y)) THEN 1120 1080 A=SGN(VAL(CR$(1,0)))+SGN(VAL(CR$(1,1)))+SGN(VAL(CR$(1,2))) 1090 IF X=1 AND A>=2 THEN 1130 1100 B=SGN(VAL(CR$(0,0)))+SGN(VAL(CR$(0,1)))+SGN(VAL(CR$(0,2))) 1110 IF A+B>=3 THEN 1130 1120 CR$(X,Y)=WD$ 1130 POKE 214,2*Y+13:POKE211,18*X+5:SYS58732:WD$="":DP=0 1140 PRINTSC$CR$(X,Y):POKE 214,2*Y+13:POKE211,18*X+5:SYS58732:RETURN 1150 REM *** F(A0,B0,C0)=A1 *** 1160 IF B0*C0=0 THEN EM=15:GOTO 3290 1170 A1=B0*B0+C0*C0-A0*A0 1180 A1=A1/(2*B0*C0) 1190 IF A1=0 THEN A1=(null)/2:RETURN 1200 IF A1>=1 THEN A1=0:RETURN 1210 IF A1<=-1 THEN A1=(null):RETURN 1220 A1=ATN(SQR(1-A1*A1)/A1) 1230 IF A1<0 THEN A1=(null)+A1 1240 RETURN 1250 REM *** F(A1,B0,C0)=A0 *** 1260 A0=B0*B0+C0*C0-2*B0*C0*COS(A1) 1270 IF A0<0 THEN EM=16:GOTO 3290 1280 A0=SQR(A0):RETURN 1290 REM *** F(A1,B1,B0)=A0 1300 IF SIN(B1)=0 THEN EM=15:GOTO 3290 1310 A0=B0*SIN(A1)/SIN(B1) 1320 RETURN 1330 REM *** F(B0,B1,A0)=A1 1340 IF B0=0 THEN EM=15:GOTO 3290 1350 A1=A0*SIN(B1)/B0 1360 IF A1>=1 THEN A1=(null)/2:RETURN 1370 IF A1<0 THEN A1=0:RETURN 1380 A1=ATN(A1/SQR(1-A1*A1)):RETURN 1390 REM *** PRINT *** 1400 IF SO=0 THEN RETURN 1410 MS=14:GOSUB 3880:MC=1 1420 SYSAD+9,3:XP=PEEK(211):YP=PEEK(214):CP=PEEK(646) 1430 POKE214,11:POKE211,0:SYS58732:TB=11 1440 PRINTTAB(TB)"[158] [146]" 1450 PRINTTAB(TB)" [195][200][207][207][211][197] [196][197][214][201][195][197]  " 1460 PRINTTAB(TB)" [146]" 1470 PRINTTAB(TB)" [146][159] [208]RINTER#4 [158] " 1480 PRINTTAB(TB)" [146][159] [208]RINTER#5 [158] " 1490 PRINTTAB(TB)" [146][159] [208]RINTER#6 [158] " 1500 PRINTTAB(TB)" [146][159] [208]RINTER#7 [158] " 1510 PRINTTAB(TB)" [146]" 1520 PRINTTAB(TB)" [195][210][211][210]/[210][197][212][213][210][206]/[211][212][207][208] " 1530 PRINTTAB(TB)" [146]" 1540 POKE 198,0:SYSAD+27,12,14,16,4:PR=PEEK(780) 1550 PR=PR+3:IF PR=3 THEN 1880 1560 SYSAD+3:SYSAD+30,0,39,0,7,160,12,0:POKE53272,(PEEK(53272)AND240)OR10 1570 SYSAD+18,0,1,0:SYSAD+30,1,38,11,23,32,6,0:POKE214,12:POKE211,0:SYS58732 1580 MS=14:GOSUB 3880 1590 PRINTC3$"[211]ET-UP PRINTER#"PR"AND PRESS ANY KEY," 1600 PRINT"OR [209][146] TO QUIT.":POKE 198,0 1610 GET A$:IF A$="" THEN 1610 1620 IF A$="Q" OR A$="[209]" THEN 1880 1630 OPEN 15,PR,15:CLOSE 15:IF ST=0 THEN 1660 1640 PRINTC1$"[208]RINTER NOT DETECTED!":SYSAD+33,32768 1650 MS=17:GOSUB 3880:FORJ=1TO2000:NEXT:GOTO1570 1660 PRINT"[208]RINTING...":TA=18:TB=40:SYSAD+36 1670 OPEN PR,PR,7:CMD PR 1680 PRINT" [211][201][196][197][211] [193][206][199][204][197][211] "CU$(CV);:SYSAD+42,40 1690 IF SO=2 THEN PRINT" [211][201][196][197][211] [193][206][199][204][197][211] "CU$(CV); 1700 A=0:B=0:PRINT:PRINT"A= "FR$(A,0,B);:SYSAD+42,TA:PRINT"[193]= ";:GOSUB 5060:A=1 1710 SYSAD+42,TB 1720 IF SO=2 THEN PRINT"A= "FR$(A,0,B);:SYSAD+42,TA+TB:PRINT"[193]= ";:GOSUB 5060 1730 A=0:B=1:PRINT:PRINT"B= "FR$(A,0,B);:SYSAD+42,TA:PRINT"[194]= ";:GOSUB 5060:A=1 1740 SYSAD+42,TB 1750 IF SO=2 THEN PRINT"B= "FR$(A,0,B);:SYSAD+42,TA+TB:PRINT"[194]= ";:GOSUB 5060 1760 A=0:B=2:PRINT:PRINT"C= "FR$(A,0,B);:SYSAD+42,TA:PRINT"[195]= ";:GOSUB 5060:A=1 1770 SYSAD+42,TB 1780 IF SO=2 THEN PRINT"C= "FR$(A,0,B);:SYSAD+42,TA+TB:PRINT"[195]= ";:GOSUB 5060 1790 A=0:PRINT:PRINT" [193]REA=";:GOSUB 5130:SYSAD+42,TB:A=1 1800 IF SO=2 THEN PRINT" [193]REA=";:GOSUB 5130 1810 A=0:B=0:PRINT:PRINT"HA=";:GOSUB5150:SYSAD+42,TB:A=1 1820 IF SO=2 THEN PRINT"HA=";:GOSUB 5150 1830 A=0:B=1:PRINT:PRINT"HB=";:GOSUB5150:SYSAD+42,TB:A=1 1840 IF SO=2 THEN PRINT"HB=";:GOSUB 5150 1850 A=0:B=2:PRINT:PRINT"HC=";:GOSUB5150:SYSAD+42,TB:A=1 1860 IF SO=2 THEN PRINT"HC=";:GOSUB 5150 1870 PRINT#PR:CLOSE PR 1880 SYSAD+39:SYSAD:SYSAD+12,3:POKE214,YP:POKE211,XP:SYS58732:POKE646,CP:RETURN 1890 REM *** FUNCTION KEYS *** 1900 ON UC-16 GOTO 1920,1930,1960,2010,2010,2010 1910 RETURN 1920 GOSUB 2100:RETURN 1930 FOR N=0TO2:FOR M=0TO1 1940 CR$(M,N)="":NEXT:NEXT:SYSAD+12,0:WD$="":DP=0 1950 POKE214,13:POKE211,5:SYS58732:X=0:Y=0:MS=0:GOSUB 1980:GOTO 3880 1960 REM *** CIRCULAR UNITS *** 1970 CU=CU+1:IF CU=5 THEN CU=1 1980 J=PEEK(214):K=PEEK(211) 1990 POKE214,11:POKE 211,30:SYS58732:PRINTC2$CU$(CU)C0$ 2000 POKE214,J:POKE211,K:SYS58732:RETURN 2010 REM *** END PROGRAM *** 2020 MS=5:T0=150:T1=50:GOSUB3970 2030 IF A$<>"Y" AND A$<>"[217]" THEN 2090 2040 SYSAD+3:POKE56578,PEEK(56578)OR3 2050 POKE 56576,(PEEK(56576)AND252)OR3 2060 POKE53272,(PEEK(53272)AND15)OR16 2070 POKE53272,(PEEK(53272)AND240)OR4 2080 POKE 648,4:SYSAD+21,0:GOTO 450 2090 MS=0:GOTO 3880 2100 REM *** SOLVE THE TRIANGLE *** 2110 POKE 198,0:DS=0:RS=0 2120 MS=11:GOSUB 3880:WD$="":DP=0 2130 FOR N=0 TO 1:FOR M=0 TO 2 2140 CR(N,M)=VAL(CR$(N,M)):NEXT:NEXT 2150 GOSUB 3040:IFCR(1,0)+CR(1,1)+CR(1,2)>=(null) THEN 3270 2160 IF CR(0,0)*CR(0,1)*CR(0,2)=0 THEN 2200 2170 IF CR(0,0)>=CR(0,1)+CR(0,2) THEN 3270 2180 IF CR(0,1)>=CR(0,0)+CR(0,2) THEN 3270 2190 IF CR(0,2)>=CR(0,0)+CR(0,1) THEN 3270 2200 NS=0:FE=0:RT(0)=0:RT(1)=1:RT(2)=2 2210 GOSUB 2280:IF NS THEN RETURN 2220 RT(0)=1:RT(1)=2:RT(2)=0 2230 GOSUB 2280:IF NS THEN RETURN 2240 RT(0)=2:RT(1)=0:RT(2)=1 2250 GOSUB 2280:IF NS THEN RETURN 2260 IFCR(0,0)=0 AND CR(0,1)=0 AND CR(0,2)=0 THEN MS=12:MC=1:GOTO 3880 2270 MS=3:MC=1:GOSUB 3880:FQ=255:PW=10:GOTO 640 2280 REM *** SSS *** 2290 IF RT(0) THEN 2370 2300 IF CR(0,RT(0))*CR(0,RT(1))*CR(0,RT(2))=0 THEN 2370 2310 A0=CR(0,RT(0)):B0=CR(0,RT(1)):C0=CR(0,RT(2)):GOSUB1150:CR(1,RT(0))=A1 2320 IF FE THEN RETURN 2330 A0=CR(0,RT(1)):B0=CR(0,RT(2)):C0=CR(0,RT(0)):GOSUB1150:CR(1,RT(1))=A1 2340 IF FE THEN RETURN 2350 CR(1,RT(2))=(null)-CR(1,RT(0))-CR(1,RT(1)) 2360 GOSUB 3330:RETURN 2370 REM *** SAS *** 2380 IF CR(0,RT(0))*CR(1,RT(1))*CR(0,RT(2))=0 THEN 2450 2390 B0=CR(0,RT(0)):C0=CR(0,RT(2)):A1=CR(1,RT(1)):GOSUB 1250:CR(0,RT(1))=A0 2400 IF FE THEN RETURN 2410 A0=CR(0,RT(0)):B0=CR(0,RT(1)):C0=CR(0,RT(2)):GOSUB 1150:CR(1,RT(0))=A1 2420 IF FE THEN RETURN 2430 CR(1,RT(2))=(null)-CR(1,RT(0))-CR(1,RT(1)) 2440 GOSUB 3330:RETURN 2450 REM *** ASA *** 2460 IF CR(1,RT(0))*CR(0,RT(1))*CR(1,RT(2))=0 THEN 2530 2470 CR(1,RT(1))=(null)-CR(1,RT(0))-CR(1,RT(2)) 2480 A1=CR(1,RT(0)):B1=CR(1,RT(1)):B0=CR(0,RT(1)):GOSUB 1290:CR(0,RT(0))=A0 2490 IF FE THEN RETURN 2500 A1=CR(1,RT(2)):B1=CR(1,RT(1)):B0=CR(0,RT(1)):GOSUB 1290:CR(0,RT(2))=A0 2510 IF FE THEN RETURN 2520 GOSUB 3330:RETURN 2530 REM *** AAS,SAA *** 2540 R0=0:R1=1:R2=2:GOSUB 2570:IF NS THEN RETURN 2550 R0=2:R1=1:R2=0:GOSUB 2570:IF NS THEN RETURN 2560 GOTO 2640 2570 IF CR(1,RT(R0))*CR(1,RT(R1))*CR(0,RT(R0))=0 THEN RETURN 2580 CR(1,RT(R2))=(null)-CR(1,RT(R0))-CR(1,RT(R1)) 2590 A1=CR(1,RT(R1)):B1=CR(1,RT(R0)):B0=CR(0,RT(R0)):GOSUB1290:CR(0,RT(R1))=A0 2600 IF FE THEN RETURN 2610 A1=CR(1,RT(R2)):B1=CR(1,RT(R0)):B0=CR(0,RT(R0)):GOSUB1290:CR(0,RT(R2))=A0 2620 IF FE THEN RETURN 2630 GOSUB 3330:RETURN 2640 REM *** SSA,ASS *** 2650 R0=0:R1=1:R2=2:GOSUB 2680:IF NS THEN RETURN 2660 R0=2:R1=1:R2=0:GOSUB 2680:RETURN 2670 REM 2680 IF CR(0,RT(R0))*CR(0,RT(R1))*CR(1,RT(R0))=0 THEN RETURN 2690 IF CR(0,RT(R0))>CR(0,RT(R1)) THEN 2770:REM 1 SOLUTION 2700 IF (CR(0,RT(R0))=CR(0,RT(R1)))AND(CR(1,RT(R0)))>=(null)/2THENRETURN:REM NO SOL. 2710 IF CR(0,RT(R0))=CR(0,RT(R1))ANDCR(1,RT(R0))<(null)/2 THEN 2770:REM 1 SOL. 2720 IF ABS(CR(0,RT(R0))-CR(0,RT(R1))*SIN(CR(1,RT(R0))))>5E-8 THEN 2740 2730 CR(1,RT(R1))=(null)/2:GOTO 2800 2740 IFCR(0,RT(R0))>CR(0,RT(R1))*SIN(CR(1,RT(R0))) THEN 2840:REM 2 SOLUTION 2750 IF CR(0,RT(R0)) RAD *** 3090 FOR N=0 TO 2 3100 CR(1,N)=(null)*CR(1,N)/200 3110 NEXT:RETURN 3120 REM *** DMS ==> DD *** 3130 FOR N=0 TO 2:S=0 3140 FOR J=1 TO LEN(CR$(1,N)) 3150 IF MID$(CR$(1,N),J,1)="." THEN S=J:J=LEN(CR$(1,N)):NEXT:GOTO 3170 3160 NEXT:CR(1,N)=VAL(CR$(1,N)):NEXT:RETURN 3170 A=VAL(MID$(CR$(1,N),1,S)) 3180 B=VAL(MID$(CR$(1,N),S+1,2))*(10+9*(LEN(MID$(CR$(1,N),S+1,2))<>1)) 3190 C=VAL(MID$(CR$(1,N),S+3,2))*(10+9*(LEN(MID$(CR$(1,N),S+3,2))<>1)) 3200 D=VAL(MID$(CR$(1,N),S+5,2))*(10+9*(LEN(MID$(CR$(1,N),S+5,2))<>1)) 3210 CR(1,N)=A+B/60+C/3600+D/360000 3220 NEXT:RETURN 3230 REM *** DD ==> RAD *** 3240 FOR N=0 TO 2 3250 CR(1,N)=(null)*CR(1,N)/180 3260 NEXT:RETURN 3270 REM *** ERROR *** 3280 FQ=2:PW=8:GOSUB 640:T0=150:T1=50:MS=6:MC=1:GOTO 3970 3290 REM *** FATAL ERROR *** 3300 T0=150:T1=50:FE=1:NS=1:MS=9:MC=1:GOSUB 3880 3310 GOSUB 590:GOSUB 3970:MS=EM:GOSUB 3880 3320 RETURN 3330 REM *** DISPLAY ANSWERS *** 3340 GOSUB 3710:IF FE THEN RETURN 3350 IF DS=0 THEN SO=1 3355 CV=CU:IF DS AND RS THEN SO=2 3360 NS=1:FOR N=0 TO 2 3370 M=0:FR(RS,M,N)=CR(M,N):GOSUB 3640 3380 M=1:IF CU=1 OR CU=2 THEN FR(RS,M,N)=180*CR(M,N)/(null) 3390 IF CU=1 THEN GOSUB 3640:GOTO 3510 3400 IF CU<>2 THEN 3490 3410 FR(RS,M,N)=FR(RS,M,N)+.000001 3420 A=INT(FR(RS,M,N)):B=60*(FR(RS,M,N)-A) 3430 A$=STR$(A):A$=RIGHT$(A$,LEN(A$)-1) 3440 A=INT(B):B=60*(B-A) 3450 B$=STR$(A):B$=RIGHT$(B$,LEN(B$)-1) 3460 B=INT(100*B)/100 3470 C$=STR$(B):C$=RIGHT$(C$,LEN(C$)-1) 3480 FR$(RS,M,N)=A$+"[171]"+B$+"[179]"+C$+"[177]":GOTO 3510 3490 IF CU=3 THEN FR(RS,M,N)=CR(M,N):GOSUB 3640:GOTO 3510 3500 FR(RS,M,N)=200*CR(M,N)/(null):GOSUB 3640 3510 NEXT:IF DS THEN RETURN 3520 FOR M=0 TO 1:FOR N=0 TO 2 3530 POKE214,2*N+13:POKE211,18*M+5:SYS58732 3540 PRINTC0$SC$FR$(RS,M,N):NEXT:NEXT 3550 K=(FR(RS,0,0)+FR(RS,0,1)+FR(RS,0,2))/2 3560 K=SQR(K*(K-FR(RS,0,0))*(K-FR(RS,0,1))*(K-FR(RS,0,2))) 3570 POKE214,19:POKE211,15:SYS58732:PRINTKC$K 3580 FOR N=0 TO 2 3590 IF FR(RS,0,N)=0 THEN H$="---":GOTO 3610 3600 H$=STR$(2*K/FR(RS,0,N)) 3610 POKE214,21+N:POKE211,5:SYS58732:PRINTC0$KC$H$:NEXT 3620 IF DS THEN RETURN 3630 POKE214,2*Y+13:POKE211,18*X+5:SYS58732:MC=1:MS=8:GOTO 3880 3640 REM *** FORMAT OUTPUT *** 3650 A$=STR$(FR(RS,M,N)) 3660 A$=RIGHT$(A$,LEN(A$)-1) 3670 FR$(RS,M,N)=A$:RETURN 3680 REM *** 3690 REM *** 3700 REM *** 3710 REM *** CHECK SOLUTION *** 3720 FOR L=0 TO 1:GOSUB 3760:IF FE THEN L=1:NEXT:GOTO 3290 3730 NEXT 3740 FOR L=0 TO 1:GOSUB 3800:IF FE THEN L=1:NEXT:GOTO 3290 3750 NEXT 3760 REM *** SUB-CHECK ONE *** 3770 FOR J=0 TO 1:FOR K=0 TO 2 3780 IF CR(J,K)=0 THEN J=1:K=2:NEXT:NEXT:FE=1:EM=6:RETURN 3790 NEXT:NEXT:RETURN 3800 REM *** SUB-CHECK TWO *** 3810 IF CR(0,0)+CR(0,1)<=CR(0,2) THEN FE=1:EM=6:RETURN 3820 IF CR(0,0)+CR(0,2)<=CR(0,1) THEN FE=1:EM=6:RETURN 3830 IF CR(0,1)+CR(0,2)<=CR(0,0) THEN FE=1:EM=6:RETURN 3840 K=(CR(0,0)+CR(0,1)+CR(0,2))/2 3850 K=K*(K-CR(0,0))*(K-CR(0,1))*(K-CR(0,2)) 3860 IF K<0 THEN FE=1:EM=16 3870 RETURN 3880 REM *** PRINT MESSAGES *** 3890 CS=PEEK(646):XS=PEEK(211):YS=PEEK(214) 3900 POKE214,9:POKE211,1:SYS58732:PRINTC1$MC$ 3910 POKE214,9:POKE211,20-LEN(MS$(MS))/2:SYS58732:PRINTMS$(MS) 3920 POKE646,CS:POKE214,YS:POKE211,XS:SYS58732:RETURN 3930 REM *** READ MESSAGES *** 3940 MC$=" " 3950 FOR N=0 TO 20:READMS$(N):NEXT 3960 RETURN 3970 REM *** FLASH MESSAGE *** 3980 POKE 198,0:J=PEEK(214):K=PEEK(211):L=PEEK(646):GOSUB 3880 3990 FOR N=1 TO T0 4000 GET A$:IF A$="" THEN NEXT:GOTO4020 4010 N=T0:NEXT:POKE214,J:POKE211,K:SYS58732:RETURN 4020 SYSAD+30,1,38,9,9,32,1,1:FOR N=1 TO T1 4030 GET A$:IF A$="" THEN NEXT:SYSAD+30,1,38,9,9,32,9,1:GOTO3990 4040 N=T1:NEXT:POKE214,J:POKE211,K:SYS58732:SYSAD+30,1,38,9,8,32,9,1:RETURN 4050 REM *** MESSAGE DATA *** 4060 DATA "[211]TATUS [207][203]":REM 0 4070 DATA "[211]OLUTION ONE":REM 1 4080 DATA "[211]OLUTION TWO":REM 2 4090 DATA "[206]O SOLUTION":REM 3 4100 DATA "[195]ONTRADICTORY DATA":REM 4 4110 DATA "[209]UIT!? [193]RE YOU SURE? (Y/N)":REM 5 4120 DATA "[201]MPOSSIBLE TRIANGLE":REM 6 4130 DATA "[212]HIS TRIANGLE HAS TWO SOLUTIONS...":REM 7 4140 DATA "[212]HE COMPLETE SOLUTION IS DISPLAYED":REM 8 4150 DATA "[198]ATAL ERROR":REM 9 4160 DATA "[212][210][201][199][207][206]: [212]HE TRIGONOMETRY UTILITY":REM 10 4170 DATA "[215]ORKING...":REM 11 4180 DATA "[206]EED AT LEAST ONE SIDE":REM 12 4190 DATA "[208]RESS '[200]' FOR HELP":REM 13 4200 DATA "[208]RINT-OUT SOLUTION":REM 14 4210 DATA "[196]IVISION BY ZERO":REM 15 4220 DATA "[201]LLEGAL QUANTITY":REM 16 4230 DATA "[196]EVICE NOT PRESENT":REM 17 4240 DATA "END" 4250 DATA "END" 4260 DATA "END" 4270 REM *** HELP *** 4280 CS=PEEK(646):XS=PEEK(211):YS=PEEK(214):SYSAD+9,3 4290 SYSAD+15,0:SYSAD+3:SYSAD+18,1,1,7:POKE53272,(PEEK(53272)AND240)OR10 4300 PRINT"[154][147][212][210][201][199][207][206]" 4310 PRINT" [212][210][201][199][207][206] IS A UTILITY THAT WILL " 4320 PRINT" QUICKLY SOLVE THE UNKNOWN PARTS OF " 4330 PRINT" TRIANGLES FOR YOU. [202]UST ENTER ALL THE" 4340 PRINT" KNOWN PARTS, AND THEN PRESS [198]1[154]. [201]N " 4350 PRINT" SECONDS, THE UNKNOWNS ARE CALCULATED " 4360 PRINT" AND DISPLAYED." 4370 PRINT" [198]3[154] CYCLES THROUGH THE CIRCULAR" 4380 PRINT" UNITS THAT [212][210][201][199][207][206] USES TO SOLVE THE 4390 [153]" TRIANGLES. (null)HESE UNITS ARE:" 4400 [153]" OPENSTR$STR$CONT = STR$ECIMAL STR$EGREES" 4410 [153]" OPENSTR$(null)(null)CONT = STR$EGREES, (null)INUTES, (null)ECONDS" 4420 [153]" OPEN(null)ATNSTR$CONT = (null)ADIANS" 4430 [153]" OPENCHR$(null)ATNSTR$CONT = CHR$RADIANS" 4440 [153]" PEEKE SURE YOU HAVE SET THE CIRCULAR" 4450 [153]" UNITS TO THE DESIRED VALUE PEEKVALASC(null)(null)VAL YOU" 4460 [153]" ENTER YOUR ANGLES. (null)(null)(null)VAL: (null)HEN IN STR$(null)(null)" 4470 [153]" 23-7<2.92> MUST BE ENTERED AS:" 4480 [153]"23.070292" 4490 [153]"DEF >>> (null)RESS ANY KEY <<< WAITCONT";:[151] 198,0:[158]AD[170]15,1 4500 [161] A$:[139] A$[178]"" [167] 4500 4510 [158]AD[170]15,0 4520 [153]"LOAD(null)VAL(null)-(null)(null)VAL(null)(null)VAL(null)" 4530 [153]" ASC1CONT - (null)RDERS (null)(null)RIGHT$CHR$(null)(null) TO CALCULATE" 4540 [153]"UNKNOWN PARTS." 4550 [153]" ASC3CONT - LENYCLES THRU CIRCULAR UNITS." 4560 [153]" LEN(null)(null)CONT - LENLEARS ALL REGISTERS IN PRE-" 4570 [153]"ARATION FOR A NEW PROBLEM." 4580 [153]" (null)CONT - (null)UIT (null)(null)RIGHT$CHR$(null)(null) AND RETURN TO (null)(null)ATNSTR$(null)(null)ATN(null)." 4590 [153]" (null)CONT - (null)END SOLUTION TO PRINTER." 4600 [153]" LEFT$CONT - LENALLS THESE SCREENS." 4610 [153]" (null)VAL(null)(null)(null)(null)CONT MUST BE PRESSED TO ENTER THE" 4620 [153]" NEW VALUE INTO MEMORY, OTHERWISE" 4630 [153]" THE PREVIOUS VALUE IS RETAINED." 4640 [153]" VALNTERING A VALUE OF ZERO (0) WILL" 4650 [153]" CLEAR THAT PART. (null)EE THE DOCS FOR " 4660 [153]" WORKED EXAMPLES." 4670 [153]"DEF >>> (null)RESS ANY KEY <<< WAIT";:[151] 198,0:[158]AD[170]15,1 4680 [161] A$:[139] A$[178]"" [167] 4680 4690 [158]AD[170]15,0:[153]"SYSLOAD":[158]AD[170]12,3:[158]AD:[151]214,YS:[151]211,XS:[158] 58732 4700 [158]AD[170]18,12,12,7:[158]AD:[151]214,YS 4710 [158]AD[170]15,1:[158]AD:[151]646,CS:[142] 4720 [143] SYSAD+18,12,1,0 4730 V1[178][194](56576):V2[178][194](53272):[153]"LOAD" 4740 [151]56578,[194](56578)[176]3:V0[178][194](56578) 4750 [151]56576,([194](56576)[175]252)[176]0 4760 [151]53272,([194](53272)[175]15)[176]48 4770 [151] 648,204 4780 [153]"LOADPRINT STOP PRINTWAIT GHSTOP PRINTWAIT STOP DEFWAIT "; 4790 [153]" SYS PRINT '( SYS STOP SYSWAIT "; 4800 [153]" PRINT ASCCHR$LEFT$RIGHT$MID$ SYS TUVWXYZ[SYS ]^SYS TUVWXYZ[\]^_SYSWAIT "; 4810 [153]"POKE SYS PRINTTOFNSPC( NOT +-* SYS (null)(null)SYS 89:;SYS =>SYS 456789:;<=>"; 4820 [153]"?SYSWAIT PRINT DE HI KLMWAIT SYS DEF(null)(null)SYS DEF(null)(null)(null)(null)SYS DEF(null)(null)SYS DEF(null)(null)(null)(null)(null)(null)(null)"; 4830 [153]"(null)(null)(null)(null)(null)SYSWAIT PRINT!#$ WAIT@ -./WAIT SYS DEFINTABSPRINT DEFFREPOSSQRRNDSYS DEFEXPCOSSYS DEFSGNINTABS"; 4840 [153]"USRFREPOSSQRRNDLOGEXPCOSSINSYSWAIT PRINTPEEKLENSTR$VALASCCHR$LEFT$RIGHT$MID$(null)(null)(null)(null)(null)(null)SYSWAIT "; 4850 [153]" PRINT NOTSTEPWAIT POKE"; 4860 [153]"FRELOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGPOSCOSWAIT "; 4870 [153]" SININTABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSABS"; 4880 [153]"ABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSABSUSRCOSSYSWAIT CONT(null)RIGHT$STR$VAL(null)SYS "; 4890 [153]"CONTATN(null)CHR$(null)VAL(null) CLR( STR$STR$ )SYS POKESINCOSSYSWAIT CONT SYS CONT SYS "; 4900 [153]" POKESINCOSSYSWAIT CONTA=SYS CONT ATN=SYS "; 4910 [153]" POKESINCOSSYSWAIT CONT SYS CONT SYS "; 4920 [153]" POKESINCOSSYSWAIT CONTB=SYS CONT PEEK=SYS "; 4930 [153]" POKESINCOSSYSWAIT CONT SYS CONT SYS "; 4940 [153]" POKESINCOSSYSWAIT CONTC=SYS CONT LEN=SYS "; 4950 [153]" POKESINCOSSYSWAIT CONT SYS "; 4960 [153]" POKESINCOSSYSWAIT CONTATNREA=SYS POKE"; 4970 [153]"SINCOSSYSWAIT POKESINCOSSYSWAIT "; 4980 [153]"CONTHA=SYS POKESINCOSSYSWAIT CONTHB="; 4990 [153]"SYS POKESINCOSSYSWAIT CONTHC=SYS "; 5000 [153]" POKESINSQREXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXP"; 5010 [153]"EXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXPEXP" 5020 [151]53280,11:[151]53281,00:[151]53223,251:[151]56295,11 5030 [151]53282,04:[151]53283,04:[151]53284,05 5040 [158]AD[170]6:[158]AD:[158]AD[170]15,1:[142] 5050 [172][172][172] [153]ER [129]MAT SUBRS [172][172][172] 5060 [139] CU[178]2 [167] 5080 5070 [153]FR$(A,1,B);:[142] 5080 [129] N[178]1 [164] [195](FR$(A,1,B)) 5090 [139] [202](FR$(A,1,B),N,1)[178]"-"[167] [153]"D ";:[130]:[142] 5100 [139] [202](FR$(A,1,B),N,1)[178]"<"[167] [153]"M ";:[130]:[142] 5110 [139] [202](FR$(A,1,B),N,1)[178]">"[167] [153]"S";:[130]:[142] 5120 [153][202](FR$(A,1,B),N,1);:[130]:[142] 5130 K[178](FR(A,0,0)[170]FR(A,0,1)[170]FR(A,0,2))[173]2 5140 K(A)[178][186](K[172](K[171]FR(A,0,0))[172](K[171]FR(A,0,1))[172](K[171]FR(A,0,2))):[153]K(A);:[142] 5150 [139] FR(A,0,B)[178]0 [167] [142] 5160 [153]2[172]K(A)[173]FR(A,0,B);:[142] 10000 [159]15,8,15,"S0:TRIGON":[160]15:[148]"TRIGON",8:[128] 40000 A$[178]"HELLO CONNECT":[129]I[178]8[164]9:[160]2:[159]2,I,2:[160]2:[139]ST[167]40020 40010 [160]15:[159]15,I,15,"R0:"[170]A$[170]"="[170]A$:[132]15,ER:[160]15:[139]ER[178]63[167]40030 40020 [130]:[153]"LOAD":[151]2048,0:[151]44,8:[151]53272,23:[151]186,8:[128] 40030 [151]646,[194](53281):[153]"LOADLOAD"[199](34)A$[199](34)","I 40040 [153]"RUN":[151]44,8:[151]2048,0:[151]631,13:[151]632,13:[151]198,2:[128] 60000 [153]"LOAD":Z$[178]" PRINT# ":[151]214,10:[153] 60010 [153]" LISTFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFREFRE":[129]I[178]0[164]11:[153]Z$:[130] 60020 [153]" POKEPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPOSPRINT#" 60030 Z$(0)[178]"(null) (null) RIGHT$ CHR$ (null) (null)":Z$(1)[178]"BY (null)ICHAEL MID$. CHR$ULYAS 60040 Z$(2)="([195]) 1994 BY [211]OFTDISK [208]UBLISHING"+CHR$(13) 60050 Z$(3)="[212]HIS PROGRAM IS THE COPYRIGHTED WORK 60060 Z$(4)[178]"OF (null)(null)ASC(null)STR$RIGHT$(null)(null) (null)(null)PEEK(null)RIGHT$(null)LEFT$RIGHT$(null)CHR$. RIGHT$T IS NOT" 60070 Z$(5)[178]"SHAREWARE OR IN THE PUBLIC DOMAIN." 60080 Z$(6)[178]"(null)EPORT ILLEGAL DISTRIBUTION OF":Z$(7)[178]"THIS PROGRAM BY CALLING" 60090 Z$(8)[178]"1-318-221-8718.":[151]214,12:[153] 60100 [129]I[178]0[164]8:[153][163]20[171]([195](Z$(I))[173]2))""Z$(I):[130]:[142]