home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 5 / CD_Magazyn_EXEC_nr_5.iso / Programy / Programowanie / AmigaE / powerd.lha / PowerD / examples / rtg.d < prev    next >
Encoding:
Text File  |  2000-12-29  |  2.6 KB  |  116 lines

  1. //OPT    PPC
  2.  
  3. MODULE    'rtgmaster',
  4.             'rtgmaster/rtgmaster',
  5.             'rtgmaster/rtgc2p',
  6.             'rtgmaster/rtgsublibs'
  7. MODULE    'exec/memory',
  8.             'utility/tagitem'
  9.  
  10. DEF    nbuf=0,    // rendering buffer
  11.         c2psig,    // c2p signal
  12.  
  13.         width,    // buffer dimensions
  14.         height
  15.  
  16. PROC Go(rsc,bin:PTR TO UBYTE)
  17.     DEF    x,y,n=0
  18.     WHILE n<128
  19.         FOR x:=0 TO width-1
  20.             FOR y:=0 TO height-1
  21.                 bin[y*width+x]:=x*y+n
  22.             ENDFOR
  23.         ENDFOR
  24.     EXITIF ChangeBuffer(rsc,bin)=FALSE
  25.         n++
  26.     EXITIF Mouse()
  27. //        IF n\10=0 THEN PrintF('\d\b',n)
  28.     ENDWHILE
  29. //    Delay(250)
  30. ENDPROC
  31.  
  32. PROC ChangeBuffer(rsc:PTR TO RtgScreen,bin:PTR TO UBYTE)(LONG)
  33.     DEF    buf
  34.     IF buf:=GetBufAdr(rsc,nbuf)
  35.         CopyRtgBlit(rsc,buf,bin,0,0,0,width,height,width,height,0,0)
  36.         RtgWaitTOF(rsc)
  37.         SwitchScreens(rsc,nbuf)
  38.         IF nbuf=2 THEN nbuf:=0
  39.     ELSE RETURN FALSE
  40. ENDPROC TRUE
  41.  
  42. DEF    RTGMasterBase
  43.  
  44. PROC main()
  45.     DEF    req:PTR TO ScreenReq,
  46.             rsc:PTR TO RtgScreen,
  47.             rgb[800]:ULONG,
  48.             bin:PTR TO UBYTE
  49.     DEF    n,tags:PTR TO TagItem,i
  50.  
  51.     // open the rtgmaster.library
  52.     IF RTGMasterBase:=OpenLibrary('rtgmaster.library',23)
  53.  
  54.         // open the rtg screen requester to select screenmode and dimensions
  55.         IF req:=RtgScreenModeReq([
  56.                 smr_MinWidth,320,
  57.                 smr_MinHeight,200,
  58.                 smr_MaxWidth,1024,
  59.                 smr_MaxHeight,768,
  60.                 smr_ChunkySupport,512,
  61.                 smr_PlanarSupport,-1,
  62.                 smr_Buffers,2,                                // double buffering
  63.                 smr_PrefsFileName,'rtgtest.prefs',    // preferences file
  64.                 smr_ForceOpen,TRUE,                        // always open this requester
  65.                 TAG_END])
  66.  
  67.             // open requested screen
  68.             IF rsc:=OpenRtgScreen(req,NIL)
  69.  
  70.                 GetRtgScreenData(rsc,tags:=[
  71.                     grd_Width,0,
  72.                     grd_Height,0,
  73.                     TAG_END])
  74.                 width:=tags[0].Data
  75.                 height:=tags[1].Data
  76.  
  77.                 // get c2p signal
  78.                 IF (c2psig:=AllocSignal(-1))<>-1
  79.  
  80.                     // lock the screen for private use
  81.                     LockRtgScreen(rsc)
  82.  
  83.                     // setup colours of the screen
  84.  
  85.                     i:=0
  86.                     rgb[i++]:=256<<16
  87.                     FOR n:=000 TO 063 DO rgb[i++]:=n<<26;    rgb[i++]:=n<<26;    rgb[i++]:=n<<26
  88.                     FOR n:=064 TO 127 DO rgb[i++]:=n<<26;    rgb[i++]:=0;        rgb[i++]:=0
  89.                     FOR n:=128 TO 191 DO rgb[i++]:=0;        rgb[i++]:=n<<26;    rgb[i++]:=0
  90.                     FOR n:=192 TO 255 DO rgb[i++]:=0;        rgb[i++]:=0;        rgb[i++]:=n<<26
  91.                     rgb[i]:=0
  92.                     LoadRGBRtg(rsc,rgb)
  93.  
  94.                     IF bin:=AllocVec(width*height,MEMF_PUBLIC|MEMF_CLEAR)
  95.  
  96.                         Go(rsc,bin)
  97.  
  98.                         FreeVec(bin)
  99.                     ELSE PrintF('Not enough memory!\n')
  100.  
  101.                     // unlock locked screen
  102.                     UnlockRtgScreen(rsc)
  103.  
  104.                     FreeSignal(c2psig)
  105.                 ELSE PrintF('Can''t get c2p signal!\n')
  106.  
  107.                 CloseRtgScreen(rsc)
  108.             ELSE PrintF('Can''t open rtg screen!\n')
  109.  
  110.             FreeRtgScreenModeReq(req)
  111.         ELSE PrintF('Can''t open rtg requester!\n')
  112.  
  113.         CloseLibrary(RTGMasterBase)
  114.     ELSE PrintF('Can''t open rtgmaster.library v23+!\n')
  115. ENDPROC
  116.