; STICK3D (LISTING 6)
PROC JoyD(INT n) ;0-EDIT,1-ADD
BYTE i,k,f:INT ARRAY pt
IF n=0 THEN f=0 ELSE f=1:n=P(0) FI
n==+1:pt=P+10+8*n:Upt(n):Ucxyz(pt)
Kolor(pt(3) & 15):Maksxsy(pt):Dit(sx,sy)
DO IF n>200 THEN EXIT FI
WHILE Strig(0)=0 DO
st=Stick(0):Dit(sx,sy)
IF st<15 THEN pt(2)==-jy(st)
Maksxsy(pt):Ucxyz(pt)
FI Dit(sx,sy)
OD
st=Stick(0):Dit(sx,sy)
IF key<255 THEN k=key:key=255
IF k=33 THEN n==+1:Upt(n)
IF pt(3)<16 THEN LineTo(sx,sy)
ELSE Dot(sx,sy):xnow=sx:ynow=sy FI
IF f=1 THEN
FOR i=0 TO 3 DO pt(4+i)=pt(i) OD
FI pt==+8:Kolor(pt(3) & 15)
Maksxsy(pt):Ucxyz(pt)
ELSEIF k=10 THEN pt(3)==! 16:Ucxyz(pt)
ELSEIF k=18 THEN IncC()
pt(3)=(pt(3) & 16)+cnow:Ucxyz(pt)
ELSE key=k:EXIT FI
FI
IF st<15 THEN pt(0)==+jx(st)
pt(1)==-jy(st):Maksxsy(pt):Ucxyz(pt)
FI Dit(sx,sy)
OD P(0)=n-1:RETURN
PROC JoyF():BYTE i:INT ARRAY pt(3)
IF cnow=0 THEN Kolor(1) FI
FOR i=0 TO 2 DO pt(i)=foc(i) OD
Maksxsy(pt):Dit(sx,sy):Ufoc(pt)
DO
WHILE Strig(0)=0 DO
st=Stick(0):Dit(sx,sy)
IF st<15 THEN pt(2)==-jy(st)
Maksxsy(pt):Ufoc(pt)
FI Dit(sx,sy)
OD
st=Stick(0):Dit(sx,sy)
IF key=33 THEN key=255
FOR i=0 TO 2 DO foc(i)=pt(i) OD
CLR():Draw(P):Maksxsy(pt)
ELSEIF key<255 THEN EXIT FI
IF st<15 THEN pt(0)==+jx(st)
pt(1)==-jy(st):Maksxsy(pt):Ufoc(pt)
FI Dit(sx,sy)
OD Ufoc(foc):RETURN
PROC JoyE():INT x,y,z
x=eye(0):y=eye(1):z=eye(2)
DO st=Stick(0):Ueye()
WHILE Strig(0)=0 DO st=Stick(0)
eye(2)==-jy(st):eye(3)==+jx(st)
Ueye()
OD
IF key=33 THEN key=255
FixE():FixM():CLR():Draw(P)
x=eye(0):y=eye(1):z=eye(2)
ELSEIF key<255 THEN EXIT FI
eye(0)==+jx(st):eye(1)==-jy(st)
OD eye(0)=x:eye(1)=y:eye(2)=z:Ueye()
RETURN
PROC JoyC():INT x,y
IF cnow=0 THEN Kolor(1) FI
x=cx:y=cy:Dit(x,y)
DO st=Stick(0):Ucen(x,y):Dit(x,y)
IF key=33 THEN key=255
cx=x:cy=y:CLR():Draw(P)
ELSEIF key<255 THEN EXIT FI
x==+jx(st):y==+jy(st):Dit(x,y)
OD Ucen(cx,cy):RETURN