home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 28 / amigaformatcd28.iso / -seriously_amiga- / misc / posbb / src / amigaos / gfx.c < prev    next >
C/C++ Source or Header  |  1998-05-09  |  7KB  |  266 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <dos/dos.h>
  4. #include <exec/types.h>
  5. #include <exec/memory.h>
  6. #include <devices/timer.h>
  7. #include <math.h>
  8. #include "compiler.h"
  9.  
  10. /****** posbb_tests.c/Test_WritePixel ********************************************
  11. *
  12. *   NAME
  13. *     Test_WritePixel -- Tests pixel writing speed.
  14. *
  15. *   SYNOPSIS
  16. *     time = Test_WritePixel(struct RastPort *rport,int precision)
  17. *     ULONG Test_WritePixel( struct RastPort,int );
  18. *
  19. *   FUNCTION
  20. *     Fill the given rastport pixel by pixel with graphics.library/WritePixel()
  21. *     and returns the time taken.
  22. *
  23. *   INPUT
  24. *     *rport            pointer to a valid RastPort structure to draw on.
  25. *
  26. *     int precision     the precision of the results. Can be any of
  27. *                       POSBB_PREECISION#?. The higher is the precision wanted,
  28. *                       the higher the time taken. precision is useful on faster
  29. *                       machines,on wich the times will be too low.
  30. *
  31. *   RESULT
  32. *     time - Time spent in seconds. No errors can be returned.
  33. *
  34. *   EXAMPLE
  35. *     See posbb.c/Perform_Tests.
  36. *
  37. *   BUGS
  38. *     No known bugs.
  39. *
  40. ****************************************************************************
  41. */
  42. ULONG Test_WritePixel( rport,precision,freeze,mt)
  43. struct RastPort *rport;
  44. int precision;
  45. BOOL freeze,mt;
  46. {
  47.   struct timeval *time1,*time2;
  48.   int x,y,pen;
  49.   ULONG secs,time;
  50.   char tmpstr[20];
  51.   time1 = (struct timeval *) POSBB_AllocMem(sizeof(struct timeval),0);
  52.   time2 = (struct timeval *) POSBB_AllocMem(sizeof(struct timeval),0);
  53. #ifndef NOFORBID
  54.   if (freeze == TRUE) Forbid();
  55. #endif
  56.   if (mt)
  57.   {
  58.     printf("Press RETURN to start");
  59.     getchar();
  60.   }
  61.   else  GetSysTime(time1);   /* This gets the system time using timer.device. It is opened by posbb.c */
  62.   for (pen=0;pen<4*precision;pen++)
  63.   {
  64.      SetAPen(rport,pen);
  65.      for (y=0;y<255;y++)
  66.      {
  67.     for (x=0;x<319;x++)
  68.     {
  69.        WritePixel(rport,x,y);
  70.     }
  71.      }
  72.   }
  73.  if (mt)
  74.     {
  75.       DisplayBeep();
  76.       printf("Test finished. Type in the number of seconds taken:");
  77.       secs = atoi(gets(tmpstr));
  78.     }
  79.     else GetSysTime(time2);
  80. #ifndef NOFORBID
  81.   if (freeze == TRUE) Permit();
  82. #endif
  83.   if (mt) time = secs * 1000;
  84.   else
  85.   {
  86.     SubTime(time2,time1);
  87.     time = (time2->tv_secs)*1000+(time2->tv_micro)/1000;
  88.   }
  89.   POSBB_FreeMem(time1,sizeof(struct timeval));
  90.   POSBB_FreeMem(time2,sizeof(struct timeval));
  91.   return time;
  92. }
  93. /****** posbb_tests.c/Test_DrawEllipse ********************************************
  94. *
  95. *   NAME
  96. *     Test_DrawEllipse -- Tests pixel ellipse drawing speed.
  97. *
  98. *   SYNOPSIS
  99. *     time = Test_DrawEllipse(struct RastPort *rport,int precision)
  100. *     ULONG Test_DrawEllipse( struct RastPort,int );
  101. *
  102. *   FUNCTION
  103. *     Draws some ellipses in the given rastport and returns the time taken.
  104. *
  105. *
  106. *   INPUT
  107. *     struct RastPort *rport    pointer to a valid RastPort structure
  108. *
  109. *     int precision     the precision of the results. Can be any of
  110. *                       POSBB_PREECISION#?. The higher is the precision wanted,
  111. *                       the higher the time taken. precision is useful on faster
  112. *                       machines,on wich the times will be too low.
  113. *
  114. *   RESULT
  115. *     time - Time spent in seconds. No error can be returned.
  116. *
  117. *   EXAMPLE
  118. *     See posbb.c/Perform_Tests.
  119. *
  120. *   BUGS
  121. *     No known bugs.
  122. *
  123. ****************************************************************************
  124. */
  125. ULONG Test_DrawEllipse(rport,precision,freeze,mt)
  126. struct RastPort *rport;
  127. int precision;
  128. BOOL freeze,mt;
  129. {
  130.   struct timeval *time1,*time2;
  131.   short a,b,pen;
  132.   ULONG secs,time;
  133.   char tmpstr[20];
  134.   time1 = (struct timeval *) POSBB_AllocMem(sizeof(struct timeval),0);
  135.   time2 = (struct timeval *) POSBB_AllocMem(sizeof(struct timeval),0);
  136. #ifndef NOFORBID
  137.   if (freeze == TRUE) Forbid();
  138. #endif
  139.   if (mt)
  140.   {
  141.     printf("Press RETURN to start");
  142.     getchar();
  143.   }
  144.   else  GetSysTime(time1);   /* This gets the system time using timer.device. It is opened by posbb.c */
  145.   for (pen=0;pen<4*precision;pen++)
  146.   {
  147.     SetAPen(rport,pen);
  148.     for (a=1;a<159;a++)
  149.     {
  150.       b = ((a * 256) / 320);
  151.       DrawEllipse(rport,159,127,a,b);
  152.     }
  153.    }
  154.  if (mt)
  155.    {
  156.    DisplayBeep();
  157.    printf("Test finished. Type in the number of seconds taken:");
  158.    secs = atoi(gets(tmpstr));
  159.    }
  160.    else GetSysTime(time2);
  161. #ifndef NOFORBID
  162.    if (freeze == TRUE) Permit();
  163. #endif
  164.   if (mt) time = secs * 1000;
  165.   else
  166.   {
  167.     SubTime(time2,time1);
  168.     time = (time2->tv_secs)*1000+(time2->tv_micro)/1000;
  169.   }
  170.    POSBB_FreeMem(time1,sizeof(struct timeval));
  171.    POSBB_FreeMem(time2,sizeof(struct timeval));
  172.    return time;
  173. }
  174.  
  175. /****** posbb_tests.c/Test_Draw ***********************************************
  176. *
  177. *   NAME
  178. *     Test_Draw -- Tests pixel ellipse drawing speed.
  179. *
  180. *   SYNOPSIS
  181. *     time = Test_Draw(struct RastPort *rport,int precision)
  182. *     ULONG Test_Draw( struct RastPort,int );
  183. *
  184. *   FUNCTION
  185. *     Draws some lines in the given rastport and returns the time taken.
  186. *
  187. *
  188. *   INPUT
  189. *     struct RastPort *rport  Pointer to a valid RastPort structure to draw on.
  190. *
  191. *     int precision     the precision of the results. Can be any of
  192. *                       POSBB_PREECISION#?. The higher is the precision wanted,
  193. *                       the higher the time taken. precision is useful on faster
  194. *                       machines,on wich the times will be too low.
  195. *
  196. *   RESULT
  197. *     time - Time spent,in seconds.
  198. *
  199. *   EXAMPLE
  200. *     See posbb.c/Perform_Tests.
  201. *
  202. *   BUGS
  203. *     No known bugs.
  204. *
  205. ****************************************************************************
  206. */
  207.  
  208. ULONG Test_Draw(rport,precision,freeze,mt)
  209. struct RastPort *rport;
  210. int precision;
  211. BOOL freeze,mt;
  212. {
  213.   struct timeval *time1,*time2;
  214.   short x,y,x1,y1,pen;
  215.   ULONG secs,time;
  216.   char tmpstr[20];
  217.   time1 = (struct timeval *) POSBB_AllocMem(sizeof(struct timeval),0);
  218.   time2 = (struct timeval *) POSBB_AllocMem(sizeof(struct timeval),0);
  219. #ifndef NOFORBID
  220.   if (freeze == TRUE) Forbid();
  221. #endif
  222.   if (mt)
  223.   {
  224.     printf("Press RETURN to start");
  225.     getchar();
  226.   }
  227.   else  GetSysTime(time1);   /* This gets the system time using timer.device. It is opened by posbb.c */
  228.   Move(rport,0,0);
  229.   for(pen=0;pen<4*precision;pen++)
  230.   {
  231.     SetAPen(rport,pen);
  232.     for (y=0;y<256;y++)
  233.     {
  234.       Draw(rport,320,y);
  235.       Move(rport,0,0);
  236.     }
  237.     for (x=0;x<320;x++)    {
  238.       Draw(rport,x,256);
  239.       Move(rport,0,0);}
  240.     SetAPen(rport,pen-1);
  241.     for(y=0;y<256;y++) {
  242.       Draw(rport,320,y);
  243.       Draw(rport,0,y+1); }
  244.   }
  245.   if (mt)
  246.   {
  247.     DisplayBeep();
  248.     printf("Test finished. Type in the number of seconds taken:");
  249.     secs = atoi(gets(tmpstr));
  250.   }
  251.   else GetSysTime(time2);
  252. #ifndef NOFORBID
  253.   if (freeze == TRUE) Permit();
  254. #endif
  255.   if (mt) time = secs * 1000;
  256.   else
  257.   {
  258.     SubTime(time2,time1);
  259.     time = (time2->tv_secs)*1000+(time2->tv_micro)/1000;
  260.   }
  261.   POSBB_FreeMem(time1,sizeof(struct timeval));
  262.   POSBB_FreeMem(time2,sizeof(struct timeval));
  263.   return time;
  264. }
  265.  
  266.