home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / dev / e / amigae / src / tools / scrbuffer / thebox.e < prev   
Text File  |  1992-09-02  |  2KB  |  76 lines

  1. /*
  2.  
  3.   Example for ScrBuffer.m double buffered screen module
  4.  
  5.   by Michael Zucchi, 1994 this code in the public domain
  6.  
  7.  */
  8.  
  9.  
  10. MODULE 'intuition/intuition', 'intuition/screens',
  11.     'graphics/rastport',
  12.     'tools/scrbuffer'
  13.  
  14. DEF bscr, scr:PTR TO screen, win:PTR TO window
  15.  
  16. PROC main()
  17.  
  18. DEF x,y,x2,y2,x3,y3, dx, dy, rp, myrp:rastport, c, go, im:PTR TO intuimessage
  19.  
  20. bscr:=sb_OpenScreen([SA_WIDTH, 320, SA_HEIGHT, 256, SA_DEPTH, 4,
  21.     SA_OVERSCAN, OSCAN_STANDARD, SA_AUTOSCROLL, -1, SA_PENS, [-1]:INT, 0], 0);
  22.  
  23. -> find the screen we are using, and make a copy of the rastport so we can use it
  24. scr:=sb_GetScreen(bscr);
  25. CopyMem(scr.rastport, myrp, SIZEOF rastport);
  26. myrp.layer:=0;        -> must set layer to 0 'cause we dont have one!
  27.  
  28. -> open a window so we can get REAL input events
  29. win:=OpenWindowTagList(0, [WA_CUSTOMSCREEN, scr, WA_BACKDROP, -1,
  30.  WA_FLAGS, WFLG_BORDERLESS+WFLG_ACTIVATE+WFLG_RMBTRAP,
  31.  WA_IDCMP, IDCMP_VANILLAKEY, 0]);
  32.  
  33. dx:=2;dy:=1;
  34. x:=50;y:=50;    -> position
  35. x2:=0;y2:=0;
  36. x3:=0;y3:=0;    -> where to erase
  37. c:=1        -> colour
  38. go:=1;
  39.  
  40. WHILE go
  41.   IF (im:=GetMsg(win.userport))        -> get any vanillakey events
  42.     IF im.class=IDCMP_VANILLAKEY AND im.code=27 THEN go:=0;
  43.     ReplyMsg(im);
  44.   ENDIF
  45.  
  46.   myrp.bitmap:=sb_NextBuffer(bscr);    -> change screen buffers, and get its bitmap
  47.  
  48.   SetAPen(myrp, 0);            -> erase the old image
  49.   RectFill(myrp, x3, y3, x3+100, y3+50);
  50.   SetAPen(myrp, c);            -> draw the new box
  51.   RectFill(myrp, x, y, x+100, y+50);
  52.  
  53.   Move(myrp, 50,50);
  54.   Text(myrp, 'ESC to quit!', 12);
  55.  
  56.   x3:=x2;y3:=y2;            -> roll coordinates
  57.   x2:=x;y2:=y;
  58.  
  59.   x:=x+dx;                -> new position
  60.   y:=y+dy;
  61.  
  62.   IF (x>(320-110)) OR (x<10)        -> bounce the box off of walls
  63.     dx:=-dx;c++
  64.   ENDIF
  65.   IF (y>(256-60)) OR (y<10)
  66.     dy:=-dy;c++
  67.   ENDIF
  68. ENDWHILE
  69.  
  70. -> clean up.  In 'real life' all the open functions would be tested after use
  71. CloseWindow(win);
  72. sb_CloseScreen(bscr);
  73.  
  74. ENDPROC
  75.  
  76.