home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 3
/
PDCD_3.iso
/
pocketbk
/
pictures
/
picdraw1
/
PICDMOD.OPL
< prev
next >
Wrap
Text File
|
1993-01-12
|
4KB
|
228 lines
rem This module is called by the PicDraw OPL
rem to handle zooming requests
proc Zoom:
global zId%,zoomx%,zoomy%,zoomw%,zoomh%
Busy "Zooming..."
zoomx%=0: zoomy%=0
zoomw%=min(24, width%-curx%)-1
zoomh%=min(24, height%-cury%)-1
zId%=gCreate(80,0,80,80,0)
Cursor Off
gBorder 3
DrawZoom:
gAt 2,2
Cursor zId%,0,5,5
gVisible On
Busy Off
do
until ReadKey2: = 0
gClose zId%
curx%=curx%+zoomx%
cury%=cury%+zoomy%
Cursor wId%,0,1,1
gAt curx%,cury%
endp
proc ReadKey2:
local k%,mod%,a$(5),t$(1)
local menu$(10)
menu$="JILDMX"
GetEvent a%()
if a%(1)=$404
PDrName$=GetCmd$
t$=Left$(PDrName$, 1)
PDrName$=Mid$(PDrName$,2,128)
if t$="X"
SaveIcon:
Stop
elseif t$="C" or t$="O"
DoFile:(t$)
endif
endif
mod%=a%(2) and $00ff
if a%(1)=$122
mInit
mCard "Modes","Move",%M,"Draw",%D,"Clear",%L,"Invert",%I
mCard "Zoom","Zoom Out",%J
k%=menu
if k% and intf(loc(menu$, chr$(k%)))
a$="proc"+chr$(k%)
return @(a$):
endif
elseif a%(1) and $200
k%=(a%(1)-$200)
k%=loc(menu$, chr$(k%))
if k%
a$="proc"+mid$(menu$,k%,1)
return @(a$):
else
giPrint "Unknown option "+chr$(2)+"-"+chr$(a%(1))
endif
elseif a%(1)=27 : rem clear on/off
if stMode% < 4
procl:
endif
elseif a%(1)=32 : rem plot pixel
PutPix2:(0)
elseif a%(1)=8 : rem clear pixel
PutPix2:(1)
elseif a%(1)=9 : rem invert pixel
PutPix2:(2)
elseif a%(1)=13 : rem draw on/off
if stMode% < 4
procd:
else : rem selected a region to copy
gIPrint "Copy mode disabled on zoom"
endif
elseif (a%(1)=261) :rem pgdn
zoomy%=zoomh%
DrawCur2:
elseif (a%(1)=260):rem pgup
zoomy%=0
DrawCur2:
elseif (a%(1)=262) :rem home
zoomx%=0
DrawCur2:
elseif (a%(1)=263) :rem end
zoomx%=zoomw%
DrawCur2:
elseif a%(1)=258 and (mod% and 4)
zoomx%=zoomx%+4
if zoomx% > zoomw%
zoomx%=0
endif
DrawCur2:
elseif a%(1)=259 and (mod% and 4)
zoomx%=zoomx%-4
if zoomx% < 0
zoomx% = zoomw%
endif
DrawCur2:
elseif a%(1)=257 and (mod% and 4)
zoomy%=zoomy%+4
if zoomy% > zoomh%
zoomy%=0
endif
DrawCur2:
elseif a%(1)=256 and (mod% and 4)
zoomy%=zoomy%-4
if zoomy% < 0
zoomy%=zoomh%
endif
DrawCur2:
elseif a%(1)=258
if zoomx% < zoomw%
zoomx%=zoomx%+1
else zoomx%=0
endif
DrawCur2:
elseif a%(1)=259
if zoomx% > 0
zoomx%=zoomx%-1
else zoomx%=zoomw%
endif
DrawCur2:
elseif a%(1)=257
if zoomy% < zoomh%
zoomy%=zoomy%+1
else zoomy%=0
endif
DrawCur2:
elseif a%(1)=256
if zoomy% > 0
zoomy%=zoomy%-1
else zoomy%=zoomh%
endif
DrawCur2:
elseif a%(1)=291
ShowHelp:
endif
return a%(1)
endp
proc PutPix2:(mode%)
if stMode% < 4
gUpdate Off
gUse wId%
gGMode mode%
gAt zoomx%+curx%,zoomy%+cury%
gLineBy 0,0
gUse zId%
gAt zoomx%*3+3,zoomy%*3+3
gFill 3,3,mode%
gAt zoomx%*3+2,zoomy%*3+2
if stMode%<>3
gGMode stMode%
gUse wId%
gGMode stMode%
endif
gUpdate On
endif
endp
proc DrawCur2:
gUpdate Off
gUse statId%
gAt 6,60
gPrintB gen$(curx%+zoomx%,3)+gen$(cury%+zoomy%,-3),48,3,1,1,1
gUse wId%
gAt zoomx%+curx%,zoomy%+cury%
if stMode%<3
gGMode stMode%
gLineBy 0,0
endif
gUse zId%
if stMode%<3
gAt zoomx%*3+3,zoomy%*3+3
gFill 3,3,stMode%
gAt zoomx%*3+2,zoomy%*3+2
else
gAt zoomx%*3+2,zoomy%*3+2
endif
gUpdate On
endp
proc DrawZoom: rem redraws zoom window
local i%
i%=0
gUpdate Off
Lock On
while i% < 24
DrawLine:(i%)
i%=i%+1
if cury%+i% > height%-1
break
endif
endwh
gUpdate On
Lock Off
endp
proc DrawLine:(l%)
local i%,d%(2),p&,w%
w%=min(24, width%-curx%)
gPeekLine wId%,curx%,cury%+l%,d%(),w%
i%=0
while i% < w%
if i% < 16
p&=(int(d%(1)) and &2**i%) <> 0
else
p&=(int(d%(2)) and &2**(i%-16)) <> 0
endif
if p&
gAt (i%+1)*3,(zoomy%+l%+1)*3
gFill 3,3,0
endif
i%=i%+1
endwh
endp
proc procj: rem Zoom Out
return 0
endp