5 IFFF>0THEN63000 10 POKE55,0:POKE56,68: REM LOWER MEMORY TO $6000 30 IFLL=0THENLL=1:LOAD"FIGPLOT.O",8,1 35 CLR:DIM Z(199) 40 BA=8*16^3:IN=BA:RS=BA+3:CL=BA+6:DR=BA+9:MV=BA+15:CR=BA+632 50 POKE53280,14:POKE53281,0:DIMC(150,3),SH(4),MB(4,4),MC(4,4) 60 DIMMA(4,4),P(44),PT(4),X(150),Y(150),E1(150),E2(150):IX=1:UX=1 100 PRINT"[147] ENTER TYPE OF FIGURE:":REM FIRST MENU 110 PRINT" 1[146][154] FIGURE OR GRAPH" 120 PRINT" 2[146][154] DEMO OF A FIGURE" 130 PRINT" 3[146][154] DEMO OF A GRAPH" 140 PRINT" 4[146][154] INPUT FIG/GRAPH FROM FILE" 170 INPUT" CHOICE (1-4[146][154])";F 180 IFF<1ORF>4THEN100 190 ON F GOSUB600,800,800,1200 280 GOSUB 1300:EZ=10000:REM INITIALIZE MATRICES AND SET EYE DIST. 290 PRINT"[147] CHOOSE ONE OPTION:" 300 PRINT" P[154][146]LOT FIGURE OR GRAPH" 310 PRINT" V[154][146]IEW STEREOSCOPIC FIGURE" 320 PRINT" R[154][146]OTATE FIGURE" 330 PRINT" S[154][146]IZE CHANGE" 340 PRINT" M[154][146]OVE FIGURE" 350 PRINT" L[154][146]OCATE EYE" 360 PRINT" T[154][146]APE OR DISK FIGURE SAVE" 370 PRINT" O[154][146]RIGINAL FIGURE" 380 PRINT" N[154][146]EW TYPE OF FIGURE" 390 PRINT" Q[154][146]UIT" 440 INPUT" CHOICE";D$:D=ASC(D$+CHR$(0))-75:IFD<1ORD>11THEN290 450 ON D GOSUB1000,3400,1380,1300,1900,3660,2900,3200,1400,1380,3600 460 IFD=9ORD=3THEN100 470 GOTO290 600 PRINT"[147] CORNER LIST" 610 INPUT" NUMBER[146][154] OF CORNERS";NC 620 PRINT" ENTER COORDINATES OF CORNER: X,Y,Z[146][154]" 630 FOR I=1TONC:PRINT"[146] CORNER NUMBER ";I;"[146]"; 640 INPUT"";C(I,1),C(I,2),C(I,3):NEXTI 650 PRINT"[146][136] EDGE LIST" 660 INPUT" NUMBER[146][154] OF EDGES";NE 670 PRINT" ENTER CORNERS OF EDGE: CORNER#,CORNER#[146][154]" 680 FORI=1TONE:PRINT"[146] EDGE NUMBER ";I;"[146]"; 690 INPUT"";E1(I),E2(I):NEXTI:PRINT"[146]":RESTORE 700 PRINT"[147] DO YOU WANT TO INCLUDE TEXT?" 710 INPUT" Y[146]ES OR N[146]O";C$:IFC$<>"Y"THENRETURN 720 INPUT" FIGURE TITLE UP TO 35 CHAR.";V$:RETURN 800 REM CRNRS & EDGES FOR OCTAHEDRON 810 DATA6,32,10,40,-68,10,40,-32,-10,-40,68,-10,-40,0,60,-10,0,-60,10 820 DATA12,1,2,2,3,3,4,4,1,5,1,5,2,5,3,5,4,6,1,6,2,6,3,6,4,-999 825 V$="OCTAHEDRON" 830 REM CRNRS & EDGES FOR 3D BAR GRAPH 840 DATA21,-100,100,0,-100,-100,0,10,-130,108,70,-70,-170,-70,6,-28 850 DATA-70,-94,-28,0,-110,42,42,-100,0,-28,-87,-70,-28,14,-70,0,68 860 DATA-100,0,-82,-100,53,-92,-47,95,-85,-88,42,-74,-140,42,76,-140 870 DATA-65,-105,40,-32,-114,72,-103,-50,0,-103,0,0,-103,50,0:REM CORNERS 880 DATA24,1,2,2,4,2,3,5,6,6,7,7,5,8,9,9,10,10,8,10,5,8,7,11,12,12,13,13,11 890 DATA13,14,11,16,14,15,15,16,16,14,17,17,18,18,19,19,20,20,21,21 900 IFF<>3THEN930 910 I=1:V$="3D BAR GRAPH" 920 READH:IFH<>-999THENI=I+1:GOTO920 930 READNC:FORI=1TONC:FORJ=1TO3:READC(I,J):NEXTJ:NEXTI:REM READ IN CORNERS 940 READNE:FORI=1TONE:READE1(I),E2(I):NEXTI:SR=0:RESTORE:RETURN 1000 INPUT" EYE DISTANCE TO ORGIN";EZ:RETURN:REM NEW EYE DISTANCE 1200 INPUT" D[146][154]ISK OR T[146][154]APE";T$ 1210 IFT$<>"D"ANDT$<>"T"THEN1200 1220 DT=1:INPUT" NAME OF FIGURE FILE[146][154]";OF$ 1230 IFT$="D"THENDT=8 1240 OPEN1,DT,0,OF$:INPUT#1,NC,NE,EZ,V$ 1250 FORN=1TONC:INPUT#1,C(N,1),C(N,2),C(N,3):NEXTN 1260 FORI=1TONE:INPUT#1,E1(I),E2(I):NEXTI:CLOSE1:SR=0:RETURN 1300 FORI=1TO4:FORJ=1TO4:MA(I,J)=0:REM INITALIZE TRANS MATRICES MA & MB 1310 MB(I,J)=0:IFI=JTHENMA(I,J)=1:MB(I,J)=1 1320 NEXTJ:NEXTI:RETURN 1380 RESTORE:RETURN 1400 INPUT" D[146][154]ISK OR T[146][154]APE";T$ 1410 IFT$<>"D"ANDT$<>"T"THEN1400 1420 DT=1:INPUT" NAME OF FIGURE FILE[146][154]";OF$ 1430 IFT$="D"THENDT=8 1440 OPEN1,DT,1,OF$:CR$=CHR$(13):PRINT#1,NC;CR$;NE;CR$;EZ;CR$;V$ 1450 FORN=1TONC:PRINT#1,C(N,1);CR$;C(N,2);CR$;C(N,3):NEXTN 1460 FORI=1TONE:PRINT#1,E1(I);CR$;E2(I):NEXTI:CLOSE1:RETURN 1600 P(4)=1:REM PROJECT P(1-3) INTO XP,YP 1610 FOR J=1TO4:EU=0:FORK=1TO4:EU=EU+P(K)*MA(K,J):NEXTK:PT(J)=EU:NEXTJ 1620 W=1/PT(4):FORK=1TO3:PT(K)=PT(K)*W:NEXTK:IFPT(3)=EZTHENF=10000:GOTO1640 1630 F=EZ/(EZ-PT(3)):REM PERSP PROJECTION 1640 XP=F*PT(1):YP=F*PT(2)*.75:REM FIXES X VS Y SCREEN DISTORTION 1650 IFXP<-159THENXP=-159 1660 IFXP>159THENXP=159 1670 IFYP<-99THENYP=-99 1680 IFYP>99THENYP=99 1690 XP=XP+160:YP=YP+100:RETURN 1900 PRINT" DO YOU WANT TO CREATE OR EDIT TEXT?" 1910 INPUT" Y[146]ES OR N[146]O";B$:IFB$<>"Y"THEN1930 1920 INPUT"FIGURE TITLE UP TO 35 LETTERS";V$:VV=1 1930 FORN=1TONC:REM PERSP PROJ ONTO X,Y 1940 P(1)=C(N,1):P(2)=C(N,2):P(3)=C(N,3):GOSUB1600:X(N)=XP:Y(N)=YP:NEXTN 1950 IFIX=0THEN1980:REM DO PLOTING 1960 POKECR,1:IX=0:SYS49152:SYS49158:SYS49161,1:SYS49164,0 1970 IFV$<>""ORVV=1THENGOSUB2200:VV=0:B$="N":REM TEXT 1980 FORI=1TONE:II=E1(I):JJ=E2(I):SYS49170,X(II),Y(II),X(JJ),Y(JJ):NEXTI 1990 IFUX=0THENRETURN 2000 POKE198,0:WAIT198,1:GETA$ 2010 IFA$="P"THENGOSUB2100 2020 PRINT"[147]":IX=1:SYS49158:SYS49155: RETURN:REM CLEAR SCREEN ON RESTORE 2100 OPEN4,4:REM BASIC BIT SCREEN DUMP FOR 1525 PRINTER 2110 Y=0:R=0:S=24576:REM START OF BIT SCRN $6000 2120 FORI=39TO0STEP-1:FORJ=0TO24:FORK=0TO7:Q=J*8+K 2130 Z(Q)=Z(Q)+(PEEK(S+320*J+I*8+K))*2^Y:P$=P$+CHR$((Z(Q)AND127)+128): 2140 Z(Q)=Z(Q)/128:NEXTK:NEXTJ 2150 PRINT#4,CHR$(8)P$:P$="":Y=Y+1:IFY=7THENY=0:GOTO2170 2160 NEXTI:PP=1 2170 FORL=0TO199:P$=P$+CHR$((Z(L)AND127)+128) 2180 Z(L)=Z(L)/128:NEXTL:PRINT#4,CHR$(8)P$:P$="":IFPP=0THEN2160 2190 CLOSE4:RETURN 2200 POKE56334,PEEK(56334)AND254:POKE1,PEEK(1)AND251:BC=53248:BS=32280 2210 LN=LEN(V$):IFLN>35THENLN=35 2220 FORI=1TO LN:AS=ASC(MID$(V$,I,1)):IFAS<64ANDAS>31THEN2250 2230 IFAS<96AND AS=>64THENAS=AS-64:GOTO2250 2240 AS=32:REM BLANK FOR ALL OTHERS 2250 CM=AS*8+BC:FORJ=0TO7:POKEBS+(I-1)*8+J,PEEK(CM+J):NEXTJ:NEXTI 2260 POKE1,PEEK(1)OR4:POKE56334,PEEK(56334)OR1:VV=0:B$="N":RETURN 2700 FORI=1TO4:FORJ=1TO4:EU=0:FORK=1TO4 2705 EU=EU+MA(I,K)*MB(K,J):NEXTK:MC(I,J)=EU 2710 NEXTJ:NEXTI:FORI=1TO4:FORJ=1TO4:MA(I,J)=MC(I,J):NEXTJ:NEXTI:RETURN 2900 PRINT" ROTATE ABOUT[157][157][157][157][157]X[146][154] OR Y[146][154] OR Z[146][154] AND ANGLE[146][154]"; 2905 INPUTAX$,MD 2910 RA=MD*(null)/180:C=COS(RA):S=SIN(RA):FORI=1TO4:FORJ=1TO4:MB(I,J)=0 2920 IF I=JTHENMB(I,J)=1 2930 NEXTJ:NEXTI:IFAX$<>"X"THEN2950 2940 MB(2,2)=C:MB(3,3)=C:MB(2,3)=S:MB(3,2)=-S:GOTO2990:REM X AXIS 2950 IFAX$<>"Y"THENGOTO2970 2960 MB(1,1)=C:MB(3,3)=C:MB(1,3)=-S:MB(3,1)=S:GOTO2990:REM Y AXIS 2970 IFAX$<>"Z"THENGOTO2900 2980 MB(1,1)=C:MB(2,2)=C:MB(1,2)=S:MB(2,1)=-S:REM Z AXIS 2990 GOSUB2700:RETURN 3200 INPUT" SIZE: SX,[154]SY,[154]SZ[154] & SGLOBAL[154]";SH(1),SH(2),SH(3),SH(4) 3210 IFSH(1)=0ORSH(2)=0ORSH(3)=0ORSH(4)=0THENPRINT" NO SIZE=0":GOTO3200 3220 FORI=1TO4:FORJ=1TO4:MB(I,J)=0:IFI=JTHENMB(I,J)=SH(I):REM DIGNL=SIZE 3230 IFI=JTHEN MB(I,J)=SH(I):REM SET MAIN DIAGONAL ELEMENT WITH SIZE FACTOR 3240 IFI=4ANDJ=4THENMB(I,J)=1/SH(I) 3250 NEXTJ:NEXTI:GOSUB2700:RETURN 3400 INPUT" MOVES: GIVE MX,[154]MY,[154]& MZ[154]";SH(1),SH(2),SH(3):REM MOVING 3410 FORI=1TO3:FORJ=1TO4:MB(I,J)=0:IFI=JTHENMB(I,J)=1:REM SET MB TO MATRIX 3420 NEXTJ:NEXTI:MB(4,4)=1:FORJ=1TO3:MB(4,J)=SH(J):NEXTJ:GOSUB2700:RETURN 3600 PRINT" STEREOSCOPIC VIEW" 3610 INPUT" ENTER OFFSET, ANGLE[154]";SH(1),MD:SH(2)=0:SH(3)=0 3620 AX$="Y":GOSUB3410:GOSUB2910:UX=0:GOSUB1900:REM 1ST VIEW 3630 SH(1)=-2*SH(1):MD=-2*MD:GOSUB3410:GOSUB2910:UX=1:GOSUB1930:REM VIEW-2 3640 SH(1)=SH(1)/-2:MD=MD/-2:PRINT"[147] RESTORING FIGURE" 3650 GOSUB3410:GOSUB2910:RETURN 3660 GOTO63000 63000 REM RECONNECT TO LS 63005 IFFF=0THENFF=1:LOAD"SIDIRQ V3",8,1 63006 IFFF=1THENFF=2:LOAD"ROMUSIC",8,1 63007 POKE51200,75:POKE52016,33:POKE56,120 63010 PRINT"[147]LOAD"CHR$(34)"PAYLOAD"CHR$(34)",8":PRINT"RUN" 63020 POKE631,13:POKE632,13:POKE198,2: END