5 DEFSNGF,L-O:DEFINTC:DEFSTRD 7 DEFSNGX,Y 10 DIMX(256),Y(256):CLS 20 LINE(61,0)-(239,63),1,B:POKE63036,10 30 F=1:LX=0:LY=0 35 GOSUB500 40 PRINT@0,"Command:":LINEINPUTD:GOSUB500 60 IFD="line"THENGOSUB1000 65 IFD="1line"THENGOSUB1500 70 IFD="save"THENGOSUB2000 75 IFD="load"THENGOSUB2500 80 IFD="new"THENGOSUB3000 90 IFD="menu"ORD="Menu"THENPOKE63036,40:MENU 95 IFD="rays"THENGOSUB3500 100 IFD="text"THENGOSUB4000 105 IFD="goto"THENGOSUB4500 110 IFD="zoom"THENGOSUB5000 115 IFD="info"THENGOSUB5500 120 IFD="exit"THENPOKE63036,40:END 200 GOTO40 250 GOSUB500 260 PRINT@20,"Zoom:";F 262 PRINT@30,"Lx:";LX 264 PRINT@40,"Ly:";LY 268 PRINT@50,"Pts:";C0; 270 PRINT@60,"(";X(C0-1);",";Y(C0-1);")"; 280 GOSUB500:RETURN 500 PRINT@0," ":PRINT@0,;:RETURN 510 PRINT@0," ";:RETURN 600 TE=1:TX=LX+176/F:TY=LY+62/F 610 IFLTXTHENTE=0 612 IFMTYTHENTE=0 613 IFNTXTHENTE=0 615 IFOTYTHENTE=0 620 RETURN 800 L=62+F*(L-LX):M=62-F*(M-LY):N=62+F*(N-LX):O=62-F*(O-LY):LINE(L,M)-(N,O):RETURN 1000 PRINT"Start at:":INPUTL,M:GOSUB500 1020 PRINT"Draw to:":INPUTN,O:GOSUB500 1021 IFN=-1ANDO=-1THENRETURN 1030 X(C0)=L:Y(C0)=M:X(C0+1)=N:Y(C0+1)=O 1040 C0=C0+2:GOSUB250:GOSUB600 1050 IFTE=1THENGOSUB800 1070 L=X(C0-1):M=Y(C0-1):GOTO1020 1500 PRINT"Coord 1:":INPUTL,M:GOSUB500 1505 IFL-1ANDM=-1THENRETURN 1510 PRINT"Coord 2:":INPUTN,O:GOSUB500 1520 X(C0)=L:Y(C0)=M:X(C0+1)=N:Y(C0+1)=O 1530 C0=C0+2:GOSUB250:GOSUB600 1540 IFTE=1THENGOSUB800 1550 RETURN 2000 PRINT"Filename:":INPUTD$ 2010 CLOSE1:OPEN D FOROUTPUTAS1 2020 PRINT#1,C0 2030 FORC1=0TO(C0-1)STEP2:D$=STR$(X(C1))+STR$(Y(C1))+STR$(X(C1+1))+STR$(Y(C1+1)):PRINT#1,D$ 2040 PRINT@30,C1;"/";C0-1; 2050 NEXTC1:CLOSE1:GOSUB500:RETURN 2500 PRINT"Filename:":INPUTD 2510 CLOSE1:OPEN D FORINPUTAS1 2520 INPUT#1,C0 2525 PRINT@30,"Loading:" 2530 FORC1=0TOC0-2STEP2 2540 INPUT#1,X(C1):INPUT#1,Y(C1):INPUT#1,X(C1+1):INPUT#1,Y(C1+1) 2550 PRINT@40,C1;"/";C0-2 2560 NEXTC1 2565 PRINT@30,"Drawing:" 2570 FORC1=0TO(C0-1)STEP2 2580 L=X(C1):M=Y(C1):N=X(C1+1):O=Y(C1+1) 2590 GOSUB600 2600 IFTE=1THENGOSUB800 2610 PRINT@40,C1;"/";C0-1 2620 NEXTC1 2630 GOSUB250:GOSUB500:RETURN 3000 PRINT"Confirm:":INPUT"Y/N";D 3010 IFD="y"ORD="Y"THENGOTO3030 3020 RETURN 3030 LINE(63,1)-(238,62),0,BF 3040 FORT1=0TO70:PRINT" ";:NEXTT1 3050 CLEAR 3060 GOTO5 3500 PRINT"Draw from:":INPUTL,M 3510 GOSUB500 3520 PRINT"Ray to:":INPUTN,O 3525 IFN=-1ANDO=-1THENRETURN 3527 X(C0)=L:Y(C0)=M:X(C0+1)=N:Y(C0+1)=O 3530 GOSUB500 3540 C0=C0+2 3550 GOSUB600:IFTE=1THENGOSUB800 3560 L=X(C0-2):M=Y(C0-2) 3570 GOTO3520 4000 PRINT"Height":PRINT"of text":INPUTH 4005 GOSUB500 4010 PRINT"Width":PRINT"of char":INPUTW 4020 GOSUB500 4030 PRINT"Start at:":INPUTL1,M1 4040 GOSUB500 4050 IFTU=1THENGOTO4130 4060 DEFINTT:DIMT(407) 4070 GOSUB500:PRINT"Loading:" 4080 CLOSE1:OPEN"chars.do"FORINPUTAS1 4090 FORC1=0TO407:PRINT@10,C1;"/";407 4100 D=INPUT$(1,1):IFASC(D)<47ORASC(D)>58THENGOTO4100 4110 T(C1)=VAL(D) 4120 NEXTC1 4130 GOSUB500:PRINT"Type text and press enter." 4200 D=INKEY$:IFD=""THENGOTO4200 4210 IFASC(D)>96ANDASC(D)<123THEND=CHR$(ASC(D)-32)'convert to all caps 4220 IFD=CHR$(13)THENRETURN 4230 IFD="A"THENT1=0:T2=11 4300 FORC1=T1TOT2STEP4 4310 L=T(C1):M=T(C1+1):N=T(C1+2):O=T(C1+3) 4320 L=L1+W*L/10:M=M1+W*M/10:N=L1+N*W/10:O=M1+W*O/10 4330 X(C0)=L:Y(C0)=M:X(C0+1)=N:Y(C0+1)=O:C0=C0+2 4340 GOSUB600:IFTE=1THENGOSUB800 4350 L1=L1+W:GOTO4200 4500 PRINT"New Lx, LyCoords":INPUTLX,LY 4510 GOSUB500 4520 LINE(62,1)-(238,62),0,BF 4530 FORL1=0TOC0-1STEP2 4535 PRINT@10,L1;"/";C0-1 4540 L=X(L1):M=Y(L1):N=X(L1+1):O=Y(L1+1) 4550 GOSUB600 4560 IFTE=1THENGOSUB800 4570 NEXTL1 4580 GOSUB250:RETURN 5000 PRINT"New scale factor: ":INPUTF 5010 GOSUB500:LINE(62,1)-(238,62),0,BF 5020 FORL1=0TOC0-1STEP2 5030 PRINT"Redrawing:"; 5040 PRINT@10,L1;"/";C0-1 5050 FORL1=0TOC0-1STEP2 5060 L=X(L1):M=Y(L1):N=X(L1+1):O=Y(L1+1) 5070 GOSUB600:IFTE=1THENGOSUB800 5080 NEXTL1 5090 GOSUB500:RETURN 5500 L2=0:FORT1=0TO69:PRINT@T1," ";:NEXTT1:PRINT@0,"Enter=ret":PRINT@10,"J=Decrmnt":PRINT@20,"L=Forward":GOTO5580 5510 L=X(L2):M=Y(L2):N=X(L2+1):O=Y(L2+1) 5520 GOSUB600:IFTE=1THENL=62+F*(L-LX):M=62-F*(M-LY):N=62+F*(N-LX):O=62-F*(O-LY) 5530 LINE(L,M)-(N,O),0:FORT1=0TO50:NEXTT1 5535 LINE(L,M)-(N,O) 5540 D=INKEY$:IFD$=""THENGOTO5530 5550 IFD=CHR$(13)THENGOSUB250:RETURN 5560 IFD="j"ORD="J"THENL2=L2-2:IFL2<0THENL2=C0-2:GOTO5580 5570 IFD="l"ORD="L"THENL2=L2+2:IFL2>C0-2THENL2=0 5580 PRINT@30,"#";(L2+2)/2; 5590 PRINT@40,X(L2);",";Y(L2); 5600 PRINT@50,X(L2+1);",";Y(L2+1); 5610 GOTO5510