home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / qc_prog / chap15 / allcolor.c next >
Encoding:
C/C++ Source or Header  |  1988-04-07  |  2.8 KB  |  95 lines

  1. /* allcolor.c -- shows _ERESCOLOR 64-color palette     */
  2. /* If you load graphics.qlb, no program list is needed.*/
  3.  
  4. /*  Hit <g> to advance left palette, <G> to go back.   */
  5. /*  Hit <h> to advance right palette, <H> to go back.  */
  6. /*  Hit <Esc> to quit                                  */
  7. #include <stdio.h>
  8. #include <graph.h>
  9. #include <conio.h>
  10. #define MAXCOLORS 64
  11. #define ESC '\033'
  12. long Ega_to_vga(int);   /* color value conversion */
  13.  
  14. main(argc, argv)
  15. int argc;
  16. char *argv[];
  17. {
  18.     struct videoconfig vc;
  19.     int mode = _ERESCOLOR;
  20.     int xmax, ymax;
  21.     int c1 = 1;
  22.     int c2 = 4;
  23.     char left[11];
  24.     char right[11];
  25.     int lpos, rpos;
  26.     char ch;
  27.  
  28.     if (argc > 1)
  29.         mode = atoi(argv[1]);
  30.     if (_setvideomode(mode) == 0)
  31.     {
  32.         fprintf(stderr,"%d mode not supported\n", mode);
  33.         exit(1);
  34.     }
  35.     _getvideoconfig(&vc);
  36.     _setlogorg(vc.numxpixels/2, vc.numypixels/2);
  37.  
  38.     xmax = vc.numxpixels / 2 - 1;
  39.     ymax = vc.numypixels / 2 - 1;
  40.     lpos = vc.numxpixels/32 - 5;
  41.     rpos = lpos + vc.numxpixels / 16;
  42.     _setcolor(1);
  43.     _rectangle(_GFILLINTERIOR, -xmax, -ymax, 0, ymax);
  44.     _setcolor(4);
  45.     _rectangle(_GFILLINTERIOR, 1, -ymax, xmax, ymax);
  46.     sprintf(left,"<-G %2d g->", c1);
  47.     sprintf(right,"<-H %2d h->", c2);
  48.     _settextcolor(6);
  49.     _settextposition(0, 0);
  50.     _outtext("Press Esc to quit");
  51.     _settextposition(24, lpos);
  52.     _outtext(left);
  53.     _settextposition(24, rpos);
  54.     _outtext(right);
  55.     while ((ch = getch()) != ESC)
  56.     {
  57.         switch (ch)
  58.         {
  59.             case 'g': c1 = (c1 + 1) % MAXCOLORS;
  60.                       _remappalette(1, Ega_to_vga(c1));
  61.                       break;
  62.             case 'G': c1 = (c1 - 1) % MAXCOLORS;
  63.                       _remappalette(1, Ega_to_vga(c1));
  64.                       break;
  65.             case 'h': c2 = (c2 + 1) % MAXCOLORS;
  66.                       _remappalette(4, Ega_to_vga(c2));
  67.                       break;
  68.             case 'H': c2 = (c2 - 1) % MAXCOLORS;
  69.                       _remappalette(4, Ega_to_vga(c2));
  70.                       break;
  71.         }
  72.         sprintf(left,"<-G %2d ->g", c1);
  73.         sprintf(right,"<-H %2d ->h", c2);
  74.         _settextposition(0, 0);
  75.         _outtext("Press Esc to quit");
  76.         _settextposition(24, lpos);
  77.         _outtext(left);
  78.         _settextposition(24, rpos);
  79.         _outtext(right);
  80.     }
  81.     _setvideomode(_DEFAULTMODE);
  82. }
  83. long Ega_to_vga(egacolor)
  84. int egacolor;       /* ega color value */
  85. {
  86.     static long vgavals[6] = {0x2A0000L, 0x002A00L, 0x00002AL,
  87.                               0x150000L, 0x001500L, 0x000015L};
  88.     long vgacolor = 0L; /* vga color value */
  89.     int bit;
  90.  
  91.     for (bit = 0; bit < 6; bit++)
  92.         vgacolor += ((egacolor >> bit) &1) * vgavals[bit];
  93.     return (vgacolor);
  94. }
  95.