; SPLASH4
;------------------------------------
; Gr7plus
; Paul Chabot
;
MODULE
BYTE ARRAY mask=[64 16 4 1]
CARD ARRAY adrow(160)
PROC Clor(BYTE c)
mask(3)=c:mask(2)=c LSH 2
mask(1)=c LSH 4:mask(0)=c LSH 6
RETURN
PROC Dot(BYTE x,y)
BYTE xb,xr
BYTE ARRAY row
,premask=[63 207 243 252]
xb=x RSH 2:xr=x AND 3:row=adrow(y)
row(xb)==& premask(xr) % mask(xr)
RETURN
PROC BLine(BYTE x1,y1,x2,y2)
BYTE x,y,xf,yf,i
INT a,b,t,dx,dy
Dot(x1,y1):Dot(x2,y2)
IF x2>x1 THEN dx=x2-x1:xf=0
ELSE dx=x1-x2:xf=1 FI
IF y2>y1 THEN dy=y2-y1:yf=0
ELSE dy=y1-y2:yf=1 FI
IF dx<2 AND dy<2 THEN RETURN FI
x=x1:y=y1
IF dx>dy THEN a=dy+dy:t=a-dx:b=t-dx
FOR i=2 TO dx DO
IF xf=0 THEN x==+1 ELSE x==-1 FI
IF t<0 THEN t==+a
ELSE t==+b
IF yf=0 THEN y==+1 ELSE y==-1 FI
FI Dot(x,y)
OD
ELSE a=dx+dx:t=a-dy:b=t-dy
FOR i=2 TO dy DO
IF yf=0 THEN y==+1 ELSE y==-1 FI
IF t<0 THEN t==+a
ELSE t==+b
IF xf=0 THEN x==+1 ELSE x==-1 FI
FI Dot(x,y)
OD
FI
RETURN
PROC Gr7plus()
BYTE i
BYTE ARRAY dl
CARD sa=88,dlist=560
Graphics(8):adrow(0)=sa
FOR i=1 TO 159 DO
adrow(i)=adrow(i-1)+40
OD
dl=dlist:dl(3)=78:dl(99)=78
FOR i=6 TO 98 DO dl(i)=14 OD
FOR i=102 TO 166 DO dl(i)=14 OD
RETURN
;------------------------------------
; COLOR SPLASH
;
MODULE
BYTE cur=752,key=764,trow=656,tcol=657
,x,y,s,c,i,j
BYTE ARRAY creg=708
,dfault=[54 26 194 0 80]
PROC Splash()
FOR i=0 TO 159 STEP s DO
BLine(x,y,i,0):BLine(x,y,i,159)
BLine(x,y,0,i):BLine(x,y,159,i)
OD
RETURN
PROC IncStep()
s==+1:IF s>16 THEN s=1 FI
trow=1:tcol=26:PrintB(s):Print(" ")
RETURN
PROC IncColor()
i=c:c==+1
IF c>3 THEN c=0:i=4 FI
Clor(c):i=creg(i)
trow=1:tcol=37:PrintB(c):Print(" ")
trow=2:tcol=36:PrintB(i RSH 4):Print(" ")
trow=3:tcol=36:PrintB(i & 14):Print(" ")
RETURN
PROC IncHue()
IF c=0 THEN i=4 ELSE i=c-1 FI
j=creg(i) RSH 4:j==+1
IF j>15 THEN j=0 FI
trow=2:tcol=36:PrintB(j):Print(" ")
creg(i)=(j LSH 4)+(creg(i) & 14)
RETURN
PROC IncLum()
IF c=0 THEN i=4 ELSE i=c-1 FI
j=creg(i) & 14:j==+2
IF j>15 THEN j=0 FI
trow=3:tcol=36:PrintB(j):Print(" ")
creg(i)=(creg(i) & 240)+j
RETURN
PROC Joystick()
BYTE st,k
DO trow=1:tcol=9
PrintC(x):Print(" , "):PrintB(y):Print(" ")
WHILE Stick(0)=15 DO
IF Strig(0)=0 THEN Splash() FI
IF key<255 THEN k=key:key=255
IF k=62 THEN IncStep() ;S
ELSEIF k=18 THEN IncColor() ;C
ELSEIF k=57 THEN IncHue() ;H
ELSEIF k=0 THEN IncLum() ;L
ELSEIF k=35 THEN RETURN ;N
FI
FI
OD st=Stick(0)
IF st=7 AND x<159 THEN x==+1
ELSEIF st=11 AND x>0 THEN x==-1
ELSEIF st=13 AND y<159 THEN y==+1
ELSEIF st=14 AND y>0 THEN y==-1
FI
OD
RETURN
PROC Setup()
Gr7plus():cur=1
FOR i=0 TO 4 DO creg(i)=dfault(i) OD
PrintE(" Çò·ðìõó Ó Ð Ì Á Ó È ")
PrintE("CENTER 80 , 60 [S]tep 7 [C]OLOR")
PrintE(" [joystick] [H]ue")
Print("[trig]-SPLASH [N]ew Screen [L]um")
x=80:y=60:s=7:c=0:IncColor()
RETURN
PROC OpenScene()
Setup():x=20:y=20:s=9:Splash()
IncColor():x=50:y=110:s=7:Splash()
IncColor():x=120:y=60:s=9:Splash()
IncColor():x=80:y=130:s=9:Splash()
IncColor():x=140:y=130:s=7:Splash()
RETURN
PROC Main()
OpenScene():Joystick()
DO Setup():Joystick() OD
RETURN