10 REM THE PROJECTOR 20 REM (C) 1992 30 GOSUB 8800 160 POKE 56,144:CLR:DIMC$(15):POKE53280,0:POKE53281,0:POKE650,128 190 J$(0)="SHOWN":J$(1)="HIDDEN" 200 C$(0)="[194]LACK":C$(1)="[215]HITE":C$(2)="[210]ED":C$(3)="[195]YAN":C$(4)="[208]URPLE" 210 C$(5)="[199]REEN":C$(6)="[194]LUE":C$(7)="[217]ELLOW":C$(8)="[207]RANGE":C$(9)="[194]ROWN" 215 C$(10)="[204]IGHT [210]ED":C$(11)="[196]ARK [199]RAY":C$(12)="[205]EDIUM [199]RAY" 217 C$(13)="[204]IGHT [199]REEN":C$(14)="[204]IGHT [194]LUE":C$(15)="[204]IGHT [199]RAY" 220 GOSUB5000:REM CONSTANTS 300 MT=36864:GOSUB5400:REM CHOOSE 310 IF PC=. THEN 300 320 GOSUB9000:REM CONFIG'N 330 GOSUB 700:REM DRAW 340 GOSUB10000: REM MENU 350 : 360 IF A=6 THEN 330 400 PRINT:POKE212,0:SYSMT+9,208:ON A GOSUB500,600,14000,9000,5400,330,9900 410 SYSMT+9,208:IF UD>. THEN GOSUB 1300 420 GOTO 340 490 : 500 SYS HI,0:WAITKB,7:GET A$:RETURN:REM VIEW SCREEN 540 : 600 SYS HI,0:SYS DU,0,0:RETURN:REM DUMP TO PRINTER 690 : 700 GOSUB 2600 710 IFDDTHEN 900 720 SYSMT+9,208:POKE787,1:MS$="[195]REATING DATA FOR "+N$:GOSUB15000 730 ONPCGOSUB3000,3100,3200,3300,3400,3500,3600,3700,3800,3900,4000,4100 735 IFPC>12THENONPC-12GOSUB4200,4300,10,10,10,10,10 740 IFKTHEN 800 745 : 750 FORX=MTO0STEP-1 755 FORY=0TON 760 Z(X,Y)=FNZ(X) 770 NEXTY:PRINT"[146]"X"[157] ";:NEXTX:GOTO1000 780 : 800 FORX=MTO0STEP-1 810 FORY=0TON 820 R=FNR(X):S=FNS(Y) 830 Z(X,Y)=FNZ(X) 840 NEXTY:PRINT"[146]"X"[157] ";:NEXTX:GOTO 1000 850 : 890 REM READ EMPIRICAL DATA 900 MS$="[210]EADING DATA...":POKE787,1:GOSUB15000 910 ON PC GOSUB7000,7500:READN$,M,N,SP 920 FORY=0TON 930 FORX=0TOM 940 READ Z(X,Y) 950 NEXTX:PRINT"[146]"N-Y"[157] ";:NEXTY 960 : 1000 REM VERTICAL SCALING 1010 SYSMT+9,208:MS$="[195]HECKING DATA...":POKE787,1:GOSUB15000: 1020 : 1030 VSCALAR=9E9 1040 FORY=0TON 1050 : 1060 A=0:FORX=0TOM 1070 IFZ(X,Y)>ATHENA=Z(X,Y) 1080 NEXT:REM HIGH PT ON LINE 1090 : 1100 IFATHENTMP=(199-YV(Y))/A:IF VS>TM THEN VS=TM 1120 NEXT:REM BEST SCALE 1130 : 1200 REM CALCULATE RISE 1210 MS$="[211]CALING DATA...":POKE787,1:GOSUB15000 1220 : 1230 FORY=0TON 1240 TM=YV(Y) 1250 FORX=0TOM 1260 R(X,Y)=Z(X,Y)*VS+TM 1270 NEXTX,Y 1280 : 1300 REM SET UP SCREEN 1320 SYSHI,0,GB,GC 1330 SYSDM,1 1340 : 1380 REM PLOT HORIZONTAL LINES 1400 SYS MO,10,R(0,0) 1410 : 1420 FORY=0TON 1430 TM=YH(Y) 1440 : 1450 FORX=1TOM 1460 SYSDR,TM+XH(X),R(X,Y) 1470 NEXTX 1480 : 1490 IF Y=N THEN 1580 1500 REM PLOT VERTICALS 1520 SYSD1,YH(Y+1)+XH(M),R(M,Y+1) 1530 SYSDR,YH(Y)+XH(M),R(M,Y) 1535 : 1536 IF V THEN FORX=0TO0:GOTO 1550 1540 FORX=M-1TO0STEP-1 1550 SYSMO,TM+XH(X),R(X,Y) 1560 SYSDR,YH(Y+1)+XH(X),R(X,Y+1) 1570 NEXTX 1575 : 1580 NEXTY 1590 : 1600 REM DRAW BOX 1620 IFPEEK(653)THEN1800 1625 SYSMO,10,R(0,0) 1630 SYSD1,10,10 1640 SYSD1,XH(M),10 1650 SYSD1,XH(M),R(M,0) 1660 SYSMO,XH(M),10 1670 SYSD1,XH(M)+YH(N),YV(N) 1680 SYSD1,XH(M)+YH(N),R(M,N) 1690 : 1700 REM TITLE 1720 SYSCO,TC:SYSPR,1,24,N$ 1740 : 1800 T$=N$:REM WAIT FOR HUMAN 1810 FOR I=1 TO 2E3 1820 GETA$:IF A$="" THEN NEXT 1840 UD=.:RETURN 1845 : 2300 IF DD THENMS$="[195]AN'T CHANGE SIZE OF DATA":GOSUB15000:RETURN 2310 MS$="[204][201][206][197][211] [193][195][210][207][211][211]":MIN=2:MAX=YZ+1:CU=N+1:GOSUB8100 2340 X=CU:N=INT(X)-1:RETURN 2350 : 2400 IF DD THENMS$="[195]AN'T CHANGE SIZE OF DATA":GOSUB15000:RETURN 2405 MS$="[208][207][201][206][212][211] [208][197][210] [204][201][206][197]":MIN=2:MAX=XZ+1:CU=M+1:GOSUB8100:X=CU 2430 M=INT(X)-1:RETURN 2500 REM PROJECTION 2510 : 2520 REM DEFAULT ANGLE 2530 MS$="[196][197][199][210][197][197][211] (0-90)":MIN=0:MAX=90:CU=TH:GOSUB8100:TH=CU 2560 RETURN 2570 : 2600 A=TH*(null)/180 2610 TMP=120*COS(A) 2620 XGRID=INT((309-TM)/M) 2630 YGRID=INT(SP*SIN(A)/N) 2640 YSTP=INT(TM/N) 2650 : 2700 REM OFFSETS 2710 : 2720 FORX=0TOM 2730 XHRIZ(X)=10+X*XG 2740 NEXT 2750 : 2760 FORY=0TON 2770 YHRIZ(Y)=Y*YS 2780 YVERT(Y)=10+Y*YG 2790 NEXT 2800 RETURN 2810 : 3000 G=M/2:H=N/2:K=1 3010 DEFFNR(X)=SQR((X-G)*(X-G)+(Y-H)*(Y-H))+1:DEFFNS(Y)=. 3020 DEFFNZ(X)=(COS(R)+1)/R+1 3030 DATA"[211]PLASH":RETURN 3040 : 3100 G=560:H=M/2:I=N/2:J=H*I/40 3110 DEFFNZ(X)=G-EXP(SQR(ABS((X-H)*(Y-I)/J))) 3120 DATA"[211]HELL ROOF":RETURN 3130 : 3200 G=10:H=1.5:I=4 3210 DEFFNZ(X)=G+SIN(SQR(X*X+H*Y*Y))+Y/I 3220 DATA"[199]RAVITY WAVES":RETURN 3230 : 3300 G=M*M*M/360:H=1200/N:I=3000/N/N:J=2000/N/N/N 3310 DEFFNZ(X)=X*X-X*X*X/G+H*Y-I*Y*Y+Y*Y*Y*J+500 3320 DATA"[195]ONTOURS":RETURN 3330 : 3400 G=N/2:H=M/4:I=.75*M:J=.6*N 3410 DEFFNZ(X)=Y+(G-Y)*((X>H)AND(X3)AND(Y"D"THENRETURN 6270 PRINT"[208]ROGRAM HALTED":LIST 7540-7560 6990 : 7000 B=PEEK(61)+256*PEEK(62) 7010 POKE65,BAND255:POKE66,B/256 7020 RETURN 7030 : 7040 DATA RAINFALL IN MM VANCOUVER 1956-1985,11,29,160 7048 DATA 30,94,83,90,44,31,7,29,95,266,151,192 7050 DATA 268,176,132,140,109,80,1,17,60,167,225,170 7060 DATA 186,239,122,98,40,84,102,30,99,97,325,77 7070 DATA 247,229,68,116,18,28,74,44,46,131,173,131 7080 DATA 57,106,124,173,130,138,17,59,89,125,274,157 7090 DATA 96,165,120,71,54,100,74,35,104,40,319,218 7100 DATA 57,162,61,57,49,33,32,19,74,76,65,294 7110 DATA 113,95,77,84,65,23,9,104,96,42,124,88 7120 DATA 102,87,84,52,98,18,51,53,82,98,20,140 7130 DATA 167,159,112,87,95,67,24,84,53,81,64,135 7140 DATA 162,126,118,30,49,31,19,106,1,300,210,268 7150 DATA 204,154,210,110,134,26,84,2,39,42,194,266 7160 DATA 175,67,89,21,48,62,14,31,31,118,221,244 7170 DATA 135,146,199,137,24,56,97,26,74,49,143,306 7180 DATA 248,154,153,42,27,28,18,19,91,166,204,210 7190 DATA 107,89,71,145,39,30,55,8,86,87,112,185 7200 DATA 133,58,92,113,32,17,22,44,178,118,106,164 7210 DATA 174,105,108,34,41,49,22,48,72,138,162,212 7220 DATA 104,82,94,38,16,16,27,6,40,286,93,118 7230 DATA 160,40,43,19,34,30,56,15,11,113,69,166 7240 DATA 134,216,20,32,17,14,9,53,15,102,81,54 7250 DATA 193,74,116,65,51,49,83,41,138,57,119,162 7260 DATA 27,141,76,59,39,30,23,4,30,169,174,257 7270 DATA 164,46,66,65,44,22,22,99,53,99,168,225 7280 DATA 272,307,72,70,91,34,30,71,37,153,140,161 7290 DATA 153,129,108,49,106,38,,79,42,237,136,151 7300 DATA 173,147,181,69,59,81,33,19,144,89,189,168 7310 DATA 249,121,56,67,25,30,,45,48,115,164,392 7320 DATA 84,82,135,56,42,67,59,32,35,75,94,176 7330 DATA 139,148,161,22,14,127,21,53,122,261,81,266 7490 : 7500 B=PEEK(61)+256*PEEK(62) 7510 POKE65,BAND255:POKE66,B/256 7520 RETURN 7530 : 7540 DATA"YOUR DATA TITLE",M=#POINTS-1,N=#LINES-1,160 7550 DATA (M+1)*(N+1) DATA ITEMS, LOWEST LINE FIRST, RUNNING LEFT TO RIGHT 7560 DATA ETC. 8000 SYSMT+6,216:SYSMT+3,7,19,4,21,255,6:SYSMT+3,8,20,3,20,160,7 8005 SYSMT+3,8,20,2,2,160,1:PRINT"";:SYSMT+15,9,2,MS$ 8010 PRINT"[158]";:FORI=0TO15:SYSMT+15,9,4+I,C$(I):NEXT 8020 SYSMT,4,8,20,16,7+128,129,0:GETA$:JC=ASC(A$)-49:SYSMT+9,216:RETURN 8100 SYSMT+6,216:SYSMT+3,5,20,7,15,255,6:SYSMT+3,6,21,6,6,160,1 8105 SYSMT+3,6,21,7,12,160,7 8110 SYSMT+3,6,21,13,14,160,1:SYSMT+15,7,13,"+/- TO [195]HANGE" 8115 SYSMT+15,7,6,MS$ 8120 SYSMT+15,7,14,"[210][197][212][213][210][206] TO [197]XIT[158]":GOTO8160 8130 GETA$:IFA$<>"+"ANDA$<>"-"ANDA$<>CHR$(13)THEN8130 8140 IFA$=CHR$(13)THENSYSMT+9,216:RETURN 8150 IFA$="+"THENIFCUMITHENCU=CU-1 8170 SYSMT+3,8,20,9,9,160,7:PRINT"[158]";:SYSMT+15,12,9,STR$(CU):GOTO8130 8790 SYSMT+15,12,9,STR$(CU):STOP 8800 PRINT"[146][147] [175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175][175]" 8820 PRINT" [159] [212][160][200][160][197][160] [160][208][160][210][160][207][160][202][160][197][160][195][160][212] [207] [210] " 8830 PRINT"[154] [183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183]" 8860 PRINTSPC(14)"[159]BY [201]AN [193]DAM 8880 [142] 9000 [158]MT[170]6,208 9005 [158]MT[170]3,3,34,10,18,255,6:[158]MT[170]3,4,35,9,17,160,13 9010 HL[178][182](D1[178]DR) 9100 [158]MT[170]15,5,10,"PRINT(null)UMBER OF LINES ACROSS"[170][196](N[170]1) 9110 [153]:[153][163]5)"(null)UMBER OF POINTS PER LINE:"M[170]1 9120 [153][163]5)"(null)IEWING ANGLE, IN DEGREES:"TH 9130 [153][163]5)"LEFT$IDDEN LINES WILL BE "J$(1[171]HL)" " 9140 [153][163]5)"(null)ERTICAL LINES WILL BE "J$(V)" " 9150 [153][163]5)"(null)ET GRAPHIC COLORS 9160 PRINTTAB(5)"[195]ONTINUE 9170 : 9200 [158]TE:[158]MT,10,4,35,7,13[170]128,129,0:[161]A$:A$[178][202]("N(null)AHVSC",[197](A$),1) 9210 [139]A$[178]"V"[167] V[178][182](V[178]0):UD[178]UD[170]1 9220 [139]A$[178]"H"[167] DR[178]HD[170]D1[171]DR:UD[178]UD[170]1 9230 [139]A$[178]"N"[167] [141]2300:UD[178][171]99:[137]9005 9235 [139]A$[178]"(null)"[167] [141]2400:UD[178][171]99:[137]9005 9240 [139]A$[178]"A"[167] [141]2500:UD[178][171]99:[137]9005 9250 [139]A$[178]"S"[167] 9500 9340 [139]A$[179][177]"C"[167] 9010 9360 [158]MT[170]9,208:[142] 9490 : 9500 MS$[178]"(null)(null)(null)(null) LEN(null)(null)(null)(null)":[141]8000:GC[178]JC:GC[178]GC[175]FT:[151]198,0 9520 MS$[178]"PEEKATNLEN(null)CHR$(null)(null)(null)(null)STR$":[141]8000:GB[178]JC[175]FT:[151]198,0 9540 MS$[178]"(null)RIGHT$(null)(null)VAL LEN(null)(null)(null)(null)":[141]8000:TC[178]JC[175]FT:[151]198,0 9560 UD[178]UD[170]1:[137]9000 9700 : 9900 MS$[178]"(null)UIT? ATNRE YOU SURE? ((null)/(null))":[141]15000:[139]A$[179][177]"Y"[167][142] 9930 [151] 56,160:[137]60000 9940 [144] 9990 : 10000 [158]TE:[158]MT[170]9,208:[158]MT[170]3,1,37,8,16,255,6:[158]MT[170]3,1,38,7,15,160,5 10010 [158]MT[170]15,3,8,"(null)EE PROJECTION, "[170][200](T$,14) 10020 [158]MT[170]15,3,9,"(null)RINT PROJECTION, "[170][200](T$,14) 10025 [158]MT[170]15,3,10,"(null)AVE PROJECTION, "[170][200](T$,14) 10030 [158]MT[170]15,3,11,"LENHANGE SETTINGS" 10040 [158]MT[170]15,3,12,"LENHOOSE NEW FUNCTION 10050 SYSMT+15,3,13,"[196]RAW/RE-DRAW "+LEFT$(N$,22) 10060 SYSMT+15,3,14,"[209]UIT PROGRAM 10100 [158]MT,8,2,37,7,5[170]128,129,0:[161]A$:A[178][197](A$):[153]:[153]" 10130 RETURN 13000 MS$="[214]IEW [207]R [197]DIT [198]ORMULA? ([214]/[197])":GOSUB15000:IFA$<>"V"ANDA$<>"E"THEN13000 13010 RETURN 14000 SYSMT+3,0,39,11,13,32,0:SYSMT+15,0,12,"[158][146][198]ILENAME:" 14010 SYS9*4096+5*256,13,1,14:IFW$=""THENRETURN 14020 SYSMT+9,208:MS$="[196]RIVE 8/9/[209]":GOSUB15000:IFA$<>"8"ANDA$<>"9"THENRETURN 14030 CLOSE2:OPEN2,VAL(A$),2:CLOSE2:IFSTTHENRETURN 14040 IFLEFT$(W$,2)<>"S."THENW$="S."+W$:JJ=VAL(A$) 14045 MS$="[211]AVING "+W$:POKE787,1:GOSUB15000 14050 SYS9*4096+4*256,W$,JJ,14*4096,14*4096+8000,8192 14060 CLOSE15:OPEN15,JJ,15:INPUT#15,MS$,MS$:CLOSE15:GOSUB15000:RETURN 15000 SYSMT+6,168:SYSMT+3,1,36,11,13,255,6:SYSMT+3,2,37,10,12,160,7 15010 IFMS$=""THENMS$="[208]RESS A KEY..." 15020 PRINT"[158]";:SYSMT+18,11,MS$:IFPEEK(787)THENPOKE787,0:RETURN 15030 POKE198,0:WAIT198,15:GETA$:SYSMT+9,168:RETURN 60000 A$="HELLO CONNECT":OPEN15,8,15,"R0:"+A$+"="+A$:INPUT#15,ER:CLOSE15 60010 IF ER<>63 THEN PRINT"[147]":END 60011 Q$=CHR$(34):POKE646,PEEK(53281):PRINT"[147]" 60020 PRINT"LOAD"Q$A$Q$",8" 60030 PRINT"POKE56,160:CLR:RUN":POKE631,13:POKE632,13:POKE198,2:END