home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / grafik / vifs / mkegacol.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-08-13  |  1.8 KB  |  112 lines

  1. /*
  2.  *    mkegacol.c  --  rgb and palette for ega graphics.
  3.  *
  4.  *    28 june 1989  Olle Olsson
  5.  */
  6.  
  7. #include <stdlib.h>
  8. #include "egargb.h"
  9.  
  10. /* number of color intensitys */
  11. #define NINTENS    4
  12.  
  13. /* color values for ega */
  14. #define R0    000
  15. #define R1    040
  16. #define R2    004
  17. #define R3    044
  18. #define G0    000
  19. #define G1    020
  20. #define G2    002
  21. #define G3    022
  22. #define B0    000
  23. #define B1    010
  24. #define B2    001
  25. #define B3    011
  26. /*#define    BLACK    (R0+G0+B0)*/
  27.  
  28. /* select pattern (blue only) */
  29. #define EGACB(n) (((n) == 1) ? B1 : (((n) == 2) ? B2 : ((n) == 3) ? B3 : B0))
  30.  
  31. int mkegacolor( cl )
  32. rgb *cl;
  33. {
  34. int c;
  35.  
  36. /* make an ega color from (r, g, b) */
  37. c = EGACB( cl -> r ) << 2;
  38. c |= EGACB( cl -> g ) << 1;
  39. c |= EGACB( cl -> b );
  40. return (c);
  41. }
  42.  
  43. void randrgb( cp )
  44. rgb *cp;
  45. {
  46. cp -> r = rand() % 4;
  47. cp -> g = rand() % 4;
  48. cp -> b = rand() % 4;
  49. }
  50.  
  51. void rgbtopal( clr, nclr, pal )
  52. rgb clr[];            /* colors (bg is the first) */
  53. int nclr;            /* number of colors */
  54. struct palettetype *pal;    /* return values here */
  55. {
  56. register int i;
  57. register rgb *fcp;
  58.  
  59. /* check size */
  60. if (nclr > MAXCOLORS + 1) nclr = MAXCOLORS + 1;
  61.  
  62. pal -> size = nclr;
  63.  
  64. for (i = 0, fcp = clr; i < nclr; ++i, ++fcp)
  65.     pal -> colors[i] = mkegacolor( fcp );
  66. }
  67.  
  68.  
  69. void r_incdec( rgb *cp, int incr )
  70. {
  71. /* red increment/decrement */
  72.  
  73. if (incr)
  74.     {
  75.     if (++cp -> r >= NINTENS) cp -> r = 0;
  76.     }
  77. else
  78.     {
  79.     if (--cp -> r < 0) cp -> r = NINTENS - 1;
  80.     }
  81. }
  82.  
  83. void g_incdec( rgb *cp, int incr )
  84. {
  85. /* green increment/decrement */
  86.  
  87. if (incr)
  88.     {
  89.     if (++cp -> g >= NINTENS) cp -> g = 0;
  90.     }
  91. else
  92.     {
  93.     if (--cp -> g < 0) cp -> g = NINTENS - 1;
  94.     }
  95. }
  96.  
  97. void b_incdec( rgb *cp, int incr )
  98. {
  99. /* blue increment/decrement */
  100.  
  101. if (incr)
  102.     {
  103.     if (++cp -> b >= NINTENS) cp -> b = 0;
  104.     }
  105. else
  106.     {
  107.     if (--cp -> b < 0) cp -> b = NINTENS - 1;
  108.     }
  109. }
  110.  
  111.  
  112.