home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / pictures / picdraw1 / PICDMOD.OPL < prev    next >
Text File  |  1993-01-12  |  4KB  |  228 lines

  1. rem This module is called by the PicDraw OPL
  2. rem to handle zooming requests
  3.     
  4. proc Zoom:
  5.     global zId%,zoomx%,zoomy%,zoomw%,zoomh%
  6.  
  7.     Busy "Zooming..."
  8.     zoomx%=0: zoomy%=0
  9.     zoomw%=min(24, width%-curx%)-1
  10.     zoomh%=min(24, height%-cury%)-1
  11.     zId%=gCreate(80,0,80,80,0)
  12.     Cursor Off
  13.     gBorder 3
  14.     DrawZoom:
  15.     gAt 2,2
  16.     Cursor zId%,0,5,5
  17.     gVisible On
  18.     Busy Off
  19.     do
  20.     until ReadKey2: = 0
  21.     gClose zId%
  22.     curx%=curx%+zoomx%
  23.     cury%=cury%+zoomy%
  24.     Cursor wId%,0,1,1
  25.     gAt curx%,cury%
  26. endp
  27.  
  28. proc ReadKey2:
  29.     local k%,mod%,a$(5),t$(1)
  30.     local menu$(10)
  31.  
  32.     menu$="JILDMX"
  33.     GetEvent a%()
  34.     if a%(1)=$404
  35.         PDrName$=GetCmd$
  36.         t$=Left$(PDrName$, 1)
  37.         PDrName$=Mid$(PDrName$,2,128)
  38.         if t$="X"
  39.             SaveIcon:
  40.             Stop
  41.         elseif t$="C" or t$="O"
  42.             DoFile:(t$)
  43.         endif
  44.     endif
  45.     mod%=a%(2) and $00ff
  46.     if a%(1)=$122
  47.         mInit
  48.         mCard "Modes","Move",%M,"Draw",%D,"Clear",%L,"Invert",%I
  49.         mCard "Zoom","Zoom Out",%J
  50.         k%=menu 
  51.         if k% and intf(loc(menu$, chr$(k%)))
  52.             a$="proc"+chr$(k%)
  53.             return @(a$):
  54.         endif
  55.     elseif a%(1) and $200
  56.         k%=(a%(1)-$200)
  57.         k%=loc(menu$, chr$(k%))
  58.         if k%
  59.             a$="proc"+mid$(menu$,k%,1)
  60.             return @(a$):
  61.         else
  62.             giPrint "Unknown option "+chr$(2)+"-"+chr$(a%(1))
  63.         endif
  64.     elseif a%(1)=27 : rem clear on/off
  65.         if stMode% < 4
  66.             procl:
  67.         endif
  68.     elseif a%(1)=32 : rem plot pixel
  69.         PutPix2:(0)
  70.     elseif a%(1)=8 : rem clear pixel
  71.         PutPix2:(1)
  72.     elseif a%(1)=9 : rem invert pixel
  73.         PutPix2:(2)
  74.     elseif a%(1)=13 : rem draw on/off
  75.         if stMode% < 4
  76.             procd:
  77.         else : rem selected a region to copy
  78.             gIPrint "Copy mode disabled on zoom"
  79.         endif
  80.     elseif (a%(1)=261) :rem pgdn
  81.         zoomy%=zoomh%
  82.         DrawCur2:
  83.     elseif (a%(1)=260):rem pgup
  84.         zoomy%=0
  85.         DrawCur2:
  86.     elseif (a%(1)=262) :rem home
  87.         zoomx%=0
  88.         DrawCur2:
  89.     elseif (a%(1)=263) :rem end
  90.         zoomx%=zoomw%
  91.         DrawCur2:
  92.     elseif a%(1)=258 and (mod% and 4)
  93.         zoomx%=zoomx%+4
  94.         if zoomx% > zoomw%
  95.             zoomx%=0
  96.         endif
  97.         DrawCur2:
  98.     elseif a%(1)=259 and (mod% and 4)
  99.         zoomx%=zoomx%-4
  100.         if zoomx% < 0
  101.             zoomx% = zoomw%
  102.         endif
  103.         DrawCur2:
  104.     elseif a%(1)=257 and (mod% and 4)
  105.         zoomy%=zoomy%+4
  106.         if zoomy% > zoomh%
  107.             zoomy%=0
  108.         endif
  109.         DrawCur2:
  110.     elseif a%(1)=256 and (mod% and 4)
  111.         zoomy%=zoomy%-4
  112.         if zoomy% < 0
  113.             zoomy%=zoomh%
  114.         endif
  115.         DrawCur2:
  116.     elseif a%(1)=258
  117.         if zoomx% < zoomw%
  118.             zoomx%=zoomx%+1
  119.         else zoomx%=0
  120.         endif
  121.         DrawCur2:
  122.     elseif a%(1)=259
  123.         if zoomx% > 0
  124.             zoomx%=zoomx%-1
  125.         else zoomx%=zoomw%
  126.         endif
  127.         DrawCur2:
  128.     elseif a%(1)=257
  129.         if zoomy% < zoomh%
  130.             zoomy%=zoomy%+1
  131.         else zoomy%=0
  132.         endif
  133.         DrawCur2:
  134.     elseif a%(1)=256
  135.         if zoomy% > 0
  136.             zoomy%=zoomy%-1
  137.         else zoomy%=zoomh%
  138.         endif
  139.         DrawCur2:
  140.     elseif a%(1)=291
  141.         ShowHelp:
  142.     endif
  143.     return a%(1)
  144. endp
  145.  
  146. proc PutPix2:(mode%)
  147.     if stMode% < 4
  148.         gUpdate Off
  149.         gUse wId%
  150.         gGMode mode%
  151.         gAt zoomx%+curx%,zoomy%+cury%
  152.         gLineBy 0,0
  153.         gUse zId%
  154.         gAt zoomx%*3+3,zoomy%*3+3
  155.         gFill 3,3,mode%
  156.         gAt zoomx%*3+2,zoomy%*3+2
  157.         if stMode%<>3
  158.             gGMode stMode%
  159.             gUse wId%
  160.             gGMode stMode%
  161.         endif
  162.         gUpdate On
  163.     endif
  164. endp
  165.  
  166. proc DrawCur2:
  167.     gUpdate Off
  168.     gUse statId%
  169.     gAt 6,60
  170.     gPrintB gen$(curx%+zoomx%,3)+gen$(cury%+zoomy%,-3),48,3,1,1,1
  171.     gUse wId%
  172.     gAt zoomx%+curx%,zoomy%+cury%
  173.     if stMode%<3
  174.         gGMode stMode%
  175.         gLineBy 0,0
  176.     endif
  177.     gUse zId%
  178.     if stMode%<3
  179.         gAt zoomx%*3+3,zoomy%*3+3
  180.         gFill 3,3,stMode%
  181.         gAt zoomx%*3+2,zoomy%*3+2
  182.     else
  183.         gAt zoomx%*3+2,zoomy%*3+2
  184.     endif
  185.     gUpdate On
  186. endp
  187.  
  188. proc DrawZoom: rem redraws zoom window
  189.     local i%
  190.     
  191.     i%=0
  192.     gUpdate Off
  193.     Lock On
  194.     while i% < 24
  195.         DrawLine:(i%)
  196.         i%=i%+1
  197.         if cury%+i% > height%-1
  198.             break
  199.         endif
  200.     endwh
  201.     gUpdate On
  202.     Lock Off
  203. endp
  204.  
  205. proc DrawLine:(l%)
  206.     local i%,d%(2),p&,w%
  207.  
  208.     w%=min(24, width%-curx%)
  209.     gPeekLine wId%,curx%,cury%+l%,d%(),w%
  210.     i%=0
  211.     while i% < w%
  212.         if i% < 16
  213.             p&=(int(d%(1)) and &2**i%) <> 0
  214.         else
  215.             p&=(int(d%(2)) and &2**(i%-16)) <> 0
  216.         endif
  217.         if p&
  218.             gAt (i%+1)*3,(zoomy%+l%+1)*3
  219.             gFill 3,3,0
  220.         endif
  221.         i%=i%+1
  222.     endwh
  223. endp
  224.     
  225. proc procj: rem Zoom Out
  226.     return 0
  227. endp
  228.