home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 148.lha / jumpbench.c < prev    next >
C/C++ Source or Header  |  1980-11-15  |  3KB  |  137 lines

  1. /* JumpBench, by Oren Peli. Copyright (c) 1988 BazboSoft! */
  2.  
  3. /* Hint: Before executing JumpBench, run ViaCom. */
  4.  
  5. #include <graphics/gfxmacros.h>
  6.  
  7. void *OpenLibrary();
  8.  
  9. struct IntuitionBase *IntuitionBase;
  10. struct GfxBase *GfxBase;
  11.  
  12. struct Window *OpenWindow();
  13.  
  14. struct UCopList *ucop;
  15. struct ViewPort *vp;
  16. struct Screen *wbscr;
  17. struct BitMap *bm;
  18.  
  19. struct Window *win;
  20.  
  21. struct IntuiMessage *msg , *GetMsg();
  22.  
  23. struct NewWindow newwin = { 20 , 40 , 270 , 10 , -1 , -1 , CLOSEWINDOW , WINDOWCLOSE
  24. | WINDOWDEPTH | WINDOWDRAG | SMART_REFRESH , NULL , NULL , (STRPTR)
  25. "JumpBench, by Oren Peli" , NULL , NULL , 0 , 0 , 0 , 0 , WBENCHSCREEN };
  26.  
  27. main()
  28. {
  29.     REGISTER WORD i;
  30.  
  31.     REGISTER LONG SetTaskPri() , prevpri , FindTask();
  32.  
  33.     if (NOT (GfxBase = OpenLibrary("graphics.library" , 33L) ) )
  34.         bye();
  35.  
  36.     if (NOT (IntuitionBase = OpenLibrary("intuition.library" , 33L) ) )
  37.         bye();
  38.  
  39.     if (NOT (win = (struct Window *) OpenWindow(&newwin) ) )
  40.         bye();
  41.  
  42.     wbscr = win->WScreen;
  43.  
  44.     vp = &wbscr->ViewPort;
  45.     bm = wbscr->ViewPort.RasInfo->BitMap;
  46.  
  47.     if (vp->UCopIns)
  48.     {
  49.         puts("Another task is using the ViewPort's User CopperList ... aborting.");
  50.  
  51.         bye();
  52.     }
  53.  
  54.     if (NOT (ucop = AllocMem( (LONG) sizeof(struct UCopList) , MEMF_CHIP | MEMF_CLEAR)
  55.                                                                                     ) )
  56.         bye();
  57.  
  58.     vp->UCopIns = ucop;
  59.  
  60.     prevpri = SetTaskPri(FindTask(NULL) , 9L);
  61.  
  62.     for ( ; NOT (msg = GetMsg(win->UserPort) ) ; )
  63.     {
  64.         ChangeDisplayVertOffset(wbscr->Height - (10 + RangeRand(10L) ) );
  65.  
  66.         for (i = wbscr->Height - (20 + RangeRand(8L) ) ; i > 1 ; i -= 5 +
  67.                                                                         RangeRand(3L) )
  68.             ChangeDisplayVertOffset(i);
  69.  
  70.         Delay(1L + (LONG) RangeRand(3L) );
  71.     }
  72.  
  73.     ReplyMsg(msg);
  74.  
  75.     SetTaskPri(FindTask(NULL) , prevpri);
  76.  
  77.     bye();
  78. }
  79.  
  80. ChangeDisplayVertOffset(y)
  81. REGISTER WORD y;
  82. {
  83.     REGISTER WORD i;
  84.  
  85.     Forbid();
  86.  
  87.     UCopperListInit(ucop , 50L);
  88.  
  89.     CWAIT(ucop , 1L , 0L);
  90.  
  91.     for (i = 0 ; i != bm->Depth ; i++)
  92.     {
  93.         CMOVE(ucop , * (UWORD *) (0xdff0e0L + (i * 4L) ) , ( ( (LONG) bm->Planes[i]) +
  94.                                         bm->BytesPerRow * (wbscr->Height - y) ) >> 16L);
  95.         CMOVE(ucop , * (UWORD *) (0xdff0e0L + (i * 4L) + 2L) , ( ( (LONG)
  96.                             bm->Planes[i]) + bm->BytesPerRow * (wbscr->Height - y) ) );
  97.     }
  98.  
  99.     CWAIT(ucop , (LONG) y , 0L);
  100.  
  101.     for (i = 0 ; i != bm->Depth ; i++)
  102.     {
  103.         CMOVE(ucop , * (UWORD *) (0xdff0e0L + (i * 4L) ) , ( (LONG) bm->Planes[i]) >>
  104.                                                                                 16L);
  105.         CMOVE(ucop , * (UWORD *) (0xdff0e0L + (i * 4L) + 2L) , bm->Planes[i]);
  106.     }
  107.  
  108.     CEND(ucop);
  109.  
  110.     Permit();
  111.  
  112.     RethinkDisplay();
  113. }
  114.  
  115. bye()
  116. {
  117.     if (ucop)
  118.     {
  119.         vp->UCopIns = NULL;
  120.  
  121.         RethinkDisplay();
  122.         
  123.         FreeMem(ucop , (LONG) sizeof(struct UCopList) );
  124.     }
  125.  
  126.     if (win)
  127.         CloseWindow(win);
  128.  
  129.     if (GfxBase)
  130.         CloseLibrary(GfxBase);
  131.  
  132.     if (IntuitionBase)
  133.         CloseLibrary(IntuitionBase);
  134.  
  135.     exit(0);
  136. }
  137.