0 goto 30000 10 REM Read a pixel on the screen from CX,CY 20 REM Sets S if set, clears if clear 30 PO=int(CY/8)*40+CX/6 40 IF CH=1 THEN OS=0:l(1)=-1:l(2)=-1:l(3)=-1:l(4)=-1:CH=0:GOTO 100 50 OS=(l(0)-1)*3 60 if l(1)=po then os=0:goto 110 70 if l(2)=po then os=3:goto 110 80 if l(3)=po then os=6:goto 110 90 if l(4)=po then os=9:goto 110 100 PRINT@PO,"";:CALL 30300:CALL VARPTR(RC(0)),0,VARPTR(CD(OS)):L(os/3+1)=PO 110 CO=CX MOD 6:RO=CY MOD 8:IN=CO/2 120 IF IN=CO/2 THEN DI=CD(IN+OS) ELSE DI=CD(IN+OS)/256 130 IF DI AND 2^RO THEN S=1 ELSE S=0 140 l(0)=OS/3+2 150 if l(0)=5 then l(0)=1 160 RETURN 1000 REM Main loop 1010 REM store current cursor status in O1 1020 REM and draw cursor 1040 if K>=1 or k<=6 then CX=X:CY=Y:GOSUB 10:O1=S: 1050 PSET(X,Y) 1060 A$=INKEY$ 1070 if A$="D" or A$="d" then DM=1-DM 1080 if a$="" then k=-1 else K=ASC(A$)-27 1090 if K=88 or K=56 then K=6 1100 REM erase cursor 1120 if k<1 or k>6 then preset(x,y):goto 1000 1130 IF O1=1 THEN PSET(X,Y) ELSE PRESET(X,Y) 1140 ON K GOSUB 2000,3000,4000,5000,6000,7000 1150 GOTO 1000 2000 REM Right arrow 2020 X=X+1 2030 IF X>239 THEN X=0 2040 if dm then pset(x,y):ch=1 2050 RETURN 3000 REM Left arrow 3020 X=X-1 3030 IF X<0 THEN X=239 3040 if dm then pset(x,y):ch=1 3050 RETURN 4000 REM Up arrow 4020 Y=Y-1 4030 IF Y<0 THEN Y=63 4040 if dm then pset(x,y):ch=1 4050 RETURN 5000 REM Down arrow 5020 Y=Y+1 5030 IF Y>63 THEN Y=0 5040 if dm then pset(x,y):ch=1 5050 RETURN 6000 REM Space 6010 CX=X:CY=Y:GOSUB 10:CH=1 6015 IF S=1 THEN 6100 6020 PSET(X,Y) 6030 LI$=LI$+"-1," 6060 RETURN 6100 REM clear current pixel 6110 PRESET(X,Y) 6120 LI$=LI$+"-2," 6130 RETURN 7000 REM S - draw shape 7010 LX=X:LY=Y:LD=DM:DM=0 7020 REM Leave Cursor 7030 IF X<1 THEN 7050 7040 CX=X-1:CY=Y:GOSUB 10:O1=S:PSET(CX,Y) 7050 IF X>238 THEN 7070 7060 CX=X+1:CY=Y:GOSUB 10:O2=S:PSET(CX,Y) 7070 IF Y<1 THEN 7090 7080 CX=X:CY=Y-1:GOSUB 10:O3=S:PSET(X,CY) 7090 IF Y>62 THEN 7110 7100 CX=X:CY=Y+1:GOSUB 10:O4=S:PSET(X,CY) 7110 K=1:CH=1 7120 REM store current cursor status in L1 7130 REM and draw cursor 7140 if K>=1 or k<=9 then CX=X:CY=Y:GOSUB 10:L1=S 7150 PSET(CX,CY) 7160 A$=INKEY$ 7170 if a$="" then k=-1 else K=ASC(A$)-27 7180 if K=71 or K=39 then K=6 7190 if K=75 or K=43 then K=7 7200 if k=72 or K=40 then K=8 7210 if k=0 then k=9 7220 REM erase cursor 7230 if K<1 or k>9 then preset(x,y):goto 7120 7240 IF L1=1 THEN PSET(X,Y) ELSE PRESET(X,Y) 7250 ON K GOSUB 2000,3000,4000,5000,9000,9000,9000,9000,9000 7260 if k>4 and k<10 then dm=ld:return 7270 GOTO 7120 8000 REM Save drawing/exit program 8010 IF L1=1 THEN PSET(X,Y) ELSE PRESET(X,Y) 8020 open fn$ for output as 1 8030 li$="RESTORE"+str$(li+2):gosub 12000 8040 li$="FOR J%=0TO319:READZZ%(0),ZZ%(1),ZZ%(2):PRINT@J%,"+chr$(34)+chr$(34)+";:CALL30300:CALL29744,0,VARPTR(ZZ%(0)):NEXT:RETURN":GOSUB 12000 8050 cd(3)=-1:cd(4)=-1:cd(5)=-1 8060 for j=0 to 319 8070 print@j,""; 8080 CALL 30300 8090 call varptr(RC(0)),0,varptr(CD(0)) 8100 li$=li$+str$(cd(0))+","+str$(cd(1))+","+str$(cd(2))+"," 8110 gosub 11000 8120 CALL 30300 8130 call29744,0,varptr(cd(3)) 8140 next 8150 if len(li$)=0 then 8180 8160 li$="DATA"+left$(li$,len(li$)-1) 8170 if li$<>"" then gosub 12000 8180 CLOSE 1 8190 MENU 9000 REM Do line operation 9010 REM erase start cursor 9020 IF LX<1 THEN 9040 9030 IF O1=1 THEN PSET(LX-1,LY) ELSE PRESET(LX-1,LY) 9040 IF LX>238 THEN 9060 9050 IF O2=1 THEN PSET(LX+1,LY) ELSE PRESET(LX+1,LY) 9060 IF LY<1 THEN 9080 9070 IF O3=1 THEN PSET(LX,LY-1) ELSE PRESET(LX,LY-1) 9080 IF LY>62 THEN 9100 9090 IF O4=1 THEN PSET(LX,LY+1) ELSE PRESET(LX,LY+1) 9100 if K=9 then return 9110 CH=1 9120 if k=7 then line(lx,ly)-(x,y),1,bf 9130 if k=6 then line(lx,ly)-(x,y),1,b 9140 if k=5 then line(lx,ly)-(x,y),1 9150 if k=8 then R=sqr((lx-x)^2+(ly-y)^2):gosub 10000 9160 return 10000 REM CIRCLE V1.1 5/20/86 ADAPTED FOR M100 BY Jay Holovacs; 95 King George Rd.; Warren, NJ 07060 10002 REM BASED ON ALGORITHM PUBLISHED BY MIKE HIGGINS (COMPUTER LANGUAGE MAGAZINE 5/86) 10004 REM 3/31/87 MODIFIED BY NEIL WICK 10006 REM ENTRY CONDITIONS:LX,LY=COORD OF CENTER; R=RADIUS--ALSO USES XX,R1,YY; ALTERS ERROR TRAP 10008 ON ERROR GOTO 10022 10010 XX=R:YY=0:R1=XX/2 10012 PSET(XX+LX,YY+LY):PSET(LX+YY,LY+XX):PSET(LX-YY,LY+XX):PSET(LX-XX,LY+YY) 10014 PSET(LX-XX,LY-YY):PSET(LX-YY,LY-XX):PSET(LX+YY,LY-XX):PSET(LX+XX,LY-YY) 10016 IFXX