Annotation of ntddk/src/video/displays/jz484/palette.c, revision 1.1

1.1     ! root        1: /******************************Module*Header*******************************\
        !             2: * Module Name: palette.c
        !             3: *
        !             4: * Palette support.
        !             5: *
        !             6: * Copyright (c) 1992 Microsoft Corporation
        !             7: \**************************************************************************/
        !             8: 
        !             9: #include "driver.h"
        !            10: 
        !            11: // Global Table defining the 20 Window Default Colors.        For 256 color
        !            12: // palettes the first 10 must be put at the beginning of the palette
        !            13: // and the last 10 at the end of the palette.
        !            14: 
        !            15: const PALETTEENTRY BASEPALETTE[20] =
        !            16: {
        !            17:     { 0,   0,   0,   0 },       // 0
        !            18:     { 0x80,0,   0,   0 },       // 1
        !            19:     { 0,   0x80,0,   0 },       // 2
        !            20:     { 0x80,0x80,0,   0 },       // 3
        !            21:     { 0,   0,   0x80,0 },       // 4
        !            22:     { 0x80,0,   0x80,0 },       // 5
        !            23:     { 0,   0x80,0x80,0 },       // 6
        !            24:     { 0xC0,0xC0,0xC0,0 },       // 7
        !            25:     { 192, 220, 192, 0 },       // 8
        !            26:     { 166, 202, 240, 0 },       // 9
        !            27:     { 255, 251, 240, 0 },       // 10
        !            28:     { 160, 160, 164, 0 },       // 11
        !            29:     { 0x80,0x80,0x80,0 },       // 12
        !            30:     { 0xFF,0,   0   ,0 },       // 13
        !            31:     { 0,   0xFF,0   ,0 },       // 14
        !            32:     { 0xFF,0xFF,0   ,0 },       // 15
        !            33:     { 0   ,0,   0xFF,0 },       // 16
        !            34:     { 0xFF,0,   0xFF,0 },       // 17
        !            35:     { 0,   0xFF,0xFF,0 },       // 18
        !            36:     { 0xFF,0xFF,0xFF,0 },       // 19
        !            37: };
        !            38: 
        !            39: BOOL bInitDefaultPalette(PPDEV ppdev, DEVINFO *pDevInfo);
        !            40: 
        !            41: /******************************Public*Routine******************************\
        !            42: * bInitPaletteInfo
        !            43: *
        !            44: * Initializes the palette information for this PDEV.
        !            45: *
        !            46: * Called by DrvEnablePDEV.
        !            47: *
        !            48: \**************************************************************************/
        !            49: 
        !            50: BOOL bInitPaletteInfo(PPDEV ppdev, DEVINFO *pDevInfo)
        !            51: {
        !            52:     if (!bInitDefaultPalette(ppdev, pDevInfo))
        !            53:         return(FALSE);
        !            54: 
        !            55:     return(TRUE);
        !            56: }
        !            57: 
        !            58: /******************************Public*Routine******************************\
        !            59: * vDisablePalette
        !            60: *
        !            61: * Frees resources allocated by bInitPaletteInfo.
        !            62: *
        !            63: \**************************************************************************/
        !            64: 
        !            65: VOID vDisablePalette(PPDEV ppdev)
        !            66: {
        !            67: // Delete the default palette if we created one.
        !            68: 
        !            69:     if (ppdev->hpalDefault)
        !            70:     {
        !            71:         EngDeletePalette(ppdev->hpalDefault);
        !            72:         ppdev->hpalDefault = (HPALETTE) 0;
        !            73:     }
        !            74: 
        !            75:     if (ppdev->pPal != (PPALETTEENTRY)NULL)
        !            76:         LocalFree((PVOID)ppdev->pPal);
        !            77: }
        !            78: 
        !            79: /******************************Public*Routine******************************\
        !            80: * bInitDefaultPalette
        !            81: *
        !            82: * Initializes default palette for PDEV.
        !            83: *
        !            84: \**************************************************************************/
        !            85: 
        !            86: BOOL bInitDefaultPalette(PPDEV ppdev, DEVINFO *pDevInfo)
        !            87: {
        !            88:     if (ppdev->ulBitCount == 8)
        !            89:     {
        !            90:         ULONG ulLoop;
        !            91:         BYTE jRed,jGre,jBlu;
        !            92: 
        !            93:         // Allocate our palette
        !            94: 
        !            95:         ppdev->pPal = (PPALETTEENTRY)LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT,
        !            96:                 (sizeof(PALETTEENTRY) * 256));
        !            97: 
        !            98:         if ((ppdev->pPal) == NULL) {
        !            99:             DISPDBG((0, "DISP bInitDefaultPalette() failed LocalAlloc\n"));
        !           100:             return(FALSE);
        !           101:         }
        !           102:             
        !           103: 
        !           104:         // Generate 256 (8*4*4) RGB combinations to fill the palette
        !           105: 
        !           106:         jRed = jGre = jBlu = 0;
        !           107: 
        !           108:         for (ulLoop = 0; ulLoop < 256; ulLoop++)
        !           109:         {
        !           110:             ppdev->pPal[ulLoop].peRed   = jRed;
        !           111:             ppdev->pPal[ulLoop].peGreen = jGre;
        !           112:             ppdev->pPal[ulLoop].peBlue  = jBlu;
        !           113:             ppdev->pPal[ulLoop].peFlags = (BYTE)0;
        !           114: 
        !           115:             if (!(jRed += 32))
        !           116:             if (!(jGre += 32))
        !           117:             jBlu += 64;
        !           118:         }
        !           119: 
        !           120:     // Fill in Windows Reserved Colors from the WIN 3.0 DDK
        !           121:     // The Window Manager reserved the first and last 10 colors for
        !           122:     // painting windows borders and for non-palette managed applications.
        !           123: 
        !           124:         for (ulLoop = 0; ulLoop < 10; ulLoop++)
        !           125:         {
        !           126:         // First 10
        !           127: 
        !           128:             ppdev->pPal[ulLoop] = BASEPALETTE[ulLoop];
        !           129: 
        !           130:         // Last 10
        !           131: 
        !           132:             ppdev->pPal[246 + ulLoop] = BASEPALETTE[ulLoop+10];
        !           133:         }
        !           134: 
        !           135:     // Create handle for palette.
        !           136: 
        !           137:         ppdev->hpalDefault =
        !           138:         pDevInfo->hpalDefault = EngCreatePalette(PAL_INDEXED,
        !           139:                                                    256,
        !           140:                                                    (PULONG) ppdev->pPal,
        !           141:                                                    0,0,0);
        !           142: 
        !           143:         if (ppdev->hpalDefault == (HPALETTE) 0)
        !           144:         {
        !           145:             DISPDBG((0, "DISP bInitDefaultPalette failed EngCreatePalette\n"));
        !           146:             LocalFree(ppdev->pPal);
        !           147:             return(FALSE);
        !           148:         }
        !           149: 
        !           150:     // Initialize the hardware with the initial palette.
        !           151: 
        !           152:         return(TRUE);
        !           153:     } else {
        !           154: 
        !           155:         ppdev->hpalDefault =
        !           156:         pDevInfo->hpalDefault = EngCreatePalette(PAL_BITFIELDS,
        !           157:                                                    0,(PULONG) NULL,
        !           158:                                                    ppdev->flRed,
        !           159:                                                    ppdev->flGreen,
        !           160:                                                    ppdev->flBlue);
        !           161: 
        !           162:         if (ppdev->hpalDefault == (HPALETTE) 0)
        !           163:         {
        !           164:             DISPDBG((0, "DISP bInitDefaultPalette failed EngCreatePalette\n"));
        !           165:             return(FALSE);
        !           166:         }
        !           167:     }
        !           168: 
        !           169:     return(TRUE);
        !           170: }
        !           171: 
        !           172: /******************************Public*Routine******************************\
        !           173: * bInit256ColorPalette
        !           174: *
        !           175: * Initialize the hardware's palette registers.
        !           176: *
        !           177: \**************************************************************************/
        !           178: 
        !           179: BOOL bInit256ColorPalette(PPDEV ppdev)
        !           180: {
        !           181:     BYTE ajClutSpace[MAX_CLUT_SIZE];
        !           182:     PVIDEO_CLUT pScreenClut = (PVIDEO_CLUT) ajClutSpace;
        !           183:     ULONG  ulReturnedDataLength;
        !           184: 
        !           185:     // Fill in pScreenClut header info
        !           186:     pScreenClut->NumEntries = 256;
        !           187:     pScreenClut->FirstEntry = 0;
        !           188: 
        !           189:     // make sure that we have a palette
        !           190:     if (ppdev->pPal == NULL)
        !           191:     {
        !           192:         DISPDBG((0, "DISP bInit256ColorPalette -- pPal == NULL\n"));
        !           193:         return(FALSE);
        !           194:     }
        !           195: 
        !           196:     // Copy Colors in.
        !           197:     memcpy(pScreenClut->LookupTable, ppdev->pPal, sizeof(ULONG) * 256);
        !           198: 
        !           199:     // Set palette registers
        !           200:     if (!DeviceIoControl(ppdev->hDriver,
        !           201:                          IOCTL_VIDEO_SET_COLOR_REGISTERS,
        !           202:                          pScreenClut,
        !           203:                          MAX_CLUT_SIZE,
        !           204:                          NULL,
        !           205:                          0,
        !           206:                          &ulReturnedDataLength,
        !           207:                          NULL))
        !           208:     {
        !           209:         DISPDBG((0, "DISP bInit256ColorPalette failed DeviceIoControl\n"));
        !           210:         return(FALSE);
        !           211:     }
        !           212: 
        !           213:     return(TRUE);
        !           214: }
        !           215: 
        !           216: /******************************Public*Routine******************************\
        !           217: * DrvSetPalette
        !           218: *
        !           219: * DDI entry point for manipulating the palette.
        !           220: *
        !           221: \**************************************************************************/
        !           222: 
        !           223: BOOL DrvSetPalette(
        !           224: IN DHPDEV dhpdev,
        !           225: IN PALOBJ *ppalo,
        !           226: IN FLONG  fl,
        !           227: IN ULONG  iStart,
        !           228: IN ULONG  cColors)
        !           229: {
        !           230:     BYTE ajClutSpace[MAX_CLUT_SIZE];
        !           231:     PVIDEO_CLUT pScreenClut = (PVIDEO_CLUT) ajClutSpace;
        !           232:     PPALETTEENTRY pape;
        !           233:     ULONG ulTemp = 256;
        !           234: 
        !           235:     UNREFERENCED_PARAMETER(fl);
        !           236: 
        !           237: // Fill in pScreenClut header info
        !           238: 
        !           239:     pScreenClut->NumEntries = cColors;
        !           240:     pScreenClut->FirstEntry = iStart;
        !           241: 
        !           242:     pape = (PPALETTEENTRY) (pScreenClut->LookupTable);
        !           243: 
        !           244:     if (cColors != PALOBJ_cGetColors(ppalo, iStart, cColors, (PULONG) pape))
        !           245:     {
        !           246:         DISPDBG((0, "DISP DrvSetPalette failed PALOBJ_cGetColors\n"));
        !           247:         return(FALSE);
        !           248:     }
        !           249: 
        !           250: // Set the high reserved byte in each palette entry to 0.
        !           251: 
        !           252:     while(cColors--)
        !           253:         pape[cColors].peFlags = 0;
        !           254: 
        !           255: // Set palette registers
        !           256: 
        !           257:     if (!DeviceIoControl(((PPDEV)(dhpdev))->hDriver,
        !           258:                           IOCTL_VIDEO_SET_COLOR_REGISTERS,
        !           259:                           pScreenClut,
        !           260:                           MAX_CLUT_SIZE,
        !           261:                           NULL,
        !           262:                           0,
        !           263:                           &cColors,
        !           264:                           NULL))
        !           265:     {
        !           266:         DISPDBG((0, "DISP DrvSetPalette failed DeviceIoControl\n"));
        !           267:         return(FALSE);
        !           268:     }
        !           269: 
        !           270:     return(TRUE);
        !           271: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.