Annotation of ntddk/src/video/displays/framebuf/enable.c, revision 1.1

1.1     ! root        1: /******************************Module*Header*******************************\
        !             2: * Module Name: enable.c
        !             3: *
        !             4: * This module contains the functions that enable and disable the
        !             5: * driver, the pdev, and the surface.
        !             6: *
        !             7: \**************************************************************************/
        !             8: 
        !             9: // #define DFB_ENABLED 1
        !            10: 
        !            11: #include "driver.h"
        !            12: 
        !            13: #ifdef DFB_ENABLED
        !            14: 
        !            15: BOOL DrvDFBTextOut(
        !            16: SURFOBJ  *pso,
        !            17: STROBJ   *pstro,
        !            18: FONTOBJ  *pfo,
        !            19: CLIPOBJ  *pco,
        !            20: RECTL    *prclExtra,
        !            21: RECTL    *prclOpaque,
        !            22: BRUSHOBJ *pboFore,
        !            23: BRUSHOBJ *pboOpaque,
        !            24: POINTL   *pptlOrg,
        !            25: MIX       mix);
        !            26: 
        !            27: #endif
        !            28: 
        !            29: // The driver function table with all function index/address pairs
        !            30: 
        !            31: static DRVFN gadrvfn[] =
        !            32: {
        !            33:     {   INDEX_DrvEnablePDEV,            (PFN) DrvEnablePDEV         },
        !            34:     {   INDEX_DrvCompletePDEV,          (PFN) DrvCompletePDEV       },
        !            35:     {   INDEX_DrvDisablePDEV,           (PFN) DrvDisablePDEV        },
        !            36:     {   INDEX_DrvEnableSurface,         (PFN) DrvEnableSurface      },
        !            37:     {   INDEX_DrvDisableSurface,        (PFN) DrvDisableSurface     },
        !            38:     {   INDEX_DrvAssertMode,            (PFN) DrvAssertMode         },
        !            39:     {   INDEX_DrvSetPalette,            (PFN) DrvSetPalette         },
        !            40:     {   INDEX_DrvMovePointer,           (PFN) DrvMovePointer        },
        !            41:     {   INDEX_DrvSetPointerShape,       (PFN) DrvSetPointerShape    },
        !            42:     {   INDEX_DrvDitherColor,           (PFN) DrvDitherColor        },
        !            43: #ifdef DFB_ENABLED
        !            44:     {   INDEX_DrvCreateDeviceBitmap,    (PFN) DrvCreateDeviceBitmap },
        !            45:     {   INDEX_DrvDeleteDeviceBitmap,    (PFN) DrvDeleteDeviceBitmap },
        !            46:     {   INDEX_DrvStrokePath,            (PFN) DrvStrokePath         },
        !            47:     {   INDEX_DrvCopyBits,              (PFN) DrvCopyBits           },
        !            48:     {   INDEX_DrvTextOut,               (PFN) DrvDFBTextOut         },
        !            49: #else
        !            50: #ifdef MIPS
        !            51:     {   INDEX_DrvTextOut,               (PFN) DrvTextOut            },
        !            52: #endif
        !            53: #endif
        !            54:     {   INDEX_DrvGetModes,              (PFN) DrvGetModes           }
        !            55: };
        !            56: 
        !            57: // Define the functions you want to hook for 8/16/24/32 pel formats
        !            58: 
        !            59: #ifdef MIPS
        !            60: #define HOOKS_BMF8BPP HOOK_TEXTOUT
        !            61: #else
        !            62: #define HOOKS_BMF8BPP 0
        !            63: #endif
        !            64: 
        !            65: #define HOOKS_BMF16BPP 0
        !            66: 
        !            67: #define HOOKS_BMF24BPP 0
        !            68: 
        !            69: #define HOOKS_BMF32BPP 0
        !            70: 
        !            71: /******************************Public*Routine******************************\
        !            72: * DrvEnableDriver
        !            73: *
        !            74: * Enables the driver by retrieving the drivers function table and version.
        !            75: *
        !            76: \**************************************************************************/
        !            77: 
        !            78: BOOL DrvEnableDriver(
        !            79: ULONG iEngineVersion,
        !            80: ULONG cj,
        !            81: PDRVENABLEDATA pded)
        !            82: {
        !            83: // Engine Version is passed down so future drivers can support previous
        !            84: // engine versions.  A next generation driver can support both the old
        !            85: // and new engine conventions if told what version of engine it is
        !            86: // working with.  For the first version the driver does nothing with it.
        !            87: 
        !            88:     iEngineVersion;
        !            89: 
        !            90: // Fill in as much as we can.
        !            91: 
        !            92:     if (cj >= sizeof(DRVENABLEDATA))
        !            93:         pded->pdrvfn = gadrvfn;
        !            94: 
        !            95:     if (cj >= (sizeof(ULONG) * 2))
        !            96:         pded->c = sizeof(gadrvfn) / sizeof(DRVFN);
        !            97: 
        !            98: // DDI version this driver was targeted for is passed back to engine.
        !            99: // Future graphic's engine may break calls down to old driver format.
        !           100: 
        !           101:     if (cj >= sizeof(ULONG))
        !           102:         pded->iDriverVersion = DDI_DRIVER_VERSION;
        !           103: 
        !           104:     return(TRUE);
        !           105: }
        !           106: 
        !           107: /******************************Public*Routine******************************\
        !           108: * DrvDisableDriver
        !           109: *
        !           110: * Tells the driver it is being disabled. Release any resources allocated in
        !           111: * DrvEnableDriver.
        !           112: *
        !           113: \**************************************************************************/
        !           114: 
        !           115: VOID DrvDisableDriver(VOID)
        !           116: {
        !           117:     return;
        !           118: }
        !           119: 
        !           120: /******************************Public*Routine******************************\
        !           121: * DrvEnablePDEV
        !           122: *
        !           123: * DDI function, Enables the Physical Device.
        !           124: *
        !           125: * Return Value: device handle to pdev.
        !           126: *
        !           127: \**************************************************************************/
        !           128: 
        !           129: DHPDEV DrvEnablePDEV(
        !           130: DEVMODEW   *pDevmode,       // Pointer to DEVMODE
        !           131: PWSTR       pwszLogAddress, // Logical address
        !           132: ULONG       cPatterns,      // number of patterns
        !           133: HSURF      *ahsurfPatterns, // return standard patterns
        !           134: ULONG       cjGdiInfo,      // Length of memory pointed to by pGdiInfo
        !           135: ULONG      *pGdiInfo,       // Pointer to GdiInfo structure
        !           136: ULONG       cjDevInfo,      // Length of following PDEVINFO structure
        !           137: DEVINFO    *pDevInfo,       // physical device information structure
        !           138: PWSTR       pwszDataFile,   // DataFile - not used
        !           139: PWSTR       pwszDeviceName, // DeviceName - not used
        !           140: HANDLE      hDriver)        // Handle to base driver
        !           141: {
        !           142:     GDIINFO GdiInfo;
        !           143:     DEVINFO DevInfo;
        !           144:     PPDEV   ppdev = (PPDEV) NULL;
        !           145: 
        !           146:     UNREFERENCED_PARAMETER(pwszLogAddress);
        !           147:     UNREFERENCED_PARAMETER(pwszDataFile);
        !           148:     UNREFERENCED_PARAMETER(pwszDeviceName);
        !           149: 
        !           150:     // Allocate a physical device structure.
        !           151: 
        !           152:     ppdev = (PPDEV) LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, sizeof(PDEV));
        !           153: 
        !           154:     if (ppdev == (PPDEV) NULL)
        !           155:     {
        !           156:         RIP("DISP DrvEnablePDEV failed LocalAlloc\n");
        !           157:         return((DHPDEV) 0);
        !           158:     }
        !           159: 
        !           160:     // Save the screen handle in the PDEV.
        !           161: 
        !           162:     ppdev->hDriver = hDriver;
        !           163: 
        !           164:     // Get the current screen mode information.  Set up device caps and devinfo.
        !           165: 
        !           166:     if (!bInitPDEV(ppdev, pDevmode, &GdiInfo, &DevInfo))
        !           167:     {
        !           168:         DISPDBG((1,"DISP DrvEnablePDEV failed\n"));
        !           169:         goto error_free;
        !           170:     }
        !           171: 
        !           172:     // Initialize the cursor information.
        !           173: 
        !           174:     if (!bInitPointer(ppdev, &DevInfo))
        !           175:     {
        !           176:         // Not a fatal error...
        !           177:         DISPDBG((0, "DISP DrvEnableSurface failed bInitPointer\n"));
        !           178:     }
        !           179: 
        !           180:     // Initialize palette information.
        !           181: 
        !           182:     if (!bInitPaletteInfo(ppdev, &DevInfo))
        !           183:     {
        !           184:         RIP("DISP DrvEnableSurface failed bInitPalette\n");
        !           185:         goto error_free;
        !           186:     }
        !           187: 
        !           188:     // Initialize device standard patterns.
        !           189: 
        !           190:     if (!bInitPatterns(ppdev, min(cPatterns, HS_DDI_MAX)))
        !           191:     {
        !           192:         RIP("DISP DrvEnablePDEV failed bInitPatterns\n");
        !           193:         vDisablePatterns(ppdev);
        !           194:         vDisablePalette(ppdev);
        !           195:         goto error_free;
        !           196:     }
        !           197: 
        !           198:     // Copy the devinfo into the engine buffer.
        !           199: 
        !           200:     memcpy(pDevInfo, &DevInfo, min(sizeof(DEVINFO), cjDevInfo));
        !           201: 
        !           202:     // Set the ahsurfPatterns array to handles each of the standard
        !           203:     // patterns that were just created.
        !           204: 
        !           205:     memcpy((PVOID)ahsurfPatterns, ppdev->ahbmPat, ppdev->cPatterns*sizeof(HBITMAP));
        !           206: 
        !           207:     // Set the pdevCaps with GdiInfo we have prepared to the list of caps for this
        !           208:     // pdev.
        !           209: 
        !           210:     memcpy(pGdiInfo, &GdiInfo, min(cjGdiInfo, sizeof(GDIINFO)));
        !           211: 
        !           212:     return((DHPDEV) ppdev);
        !           213: 
        !           214:     // Error case for failure.
        !           215: error_free:
        !           216:     LocalFree(ppdev);
        !           217:     RIP("DISP DrvEnablePDEV failed\n");
        !           218:     return((DHPDEV) 0);
        !           219: }
        !           220: 
        !           221: /******************************Public*Routine******************************\
        !           222: * DrvCompletePDEV
        !           223: *
        !           224: * Store the HPDEV, the engines handle for this PDEV, in the DHPDEV.
        !           225: *
        !           226: \**************************************************************************/
        !           227: 
        !           228: VOID DrvCompletePDEV(
        !           229: DHPDEV dhpdev,
        !           230: HDEV  hdev)
        !           231: {
        !           232:     ((PPDEV) dhpdev)->hdevEng = hdev;
        !           233: }
        !           234: 
        !           235: /******************************Public*Routine******************************\
        !           236: * DrvDisablePDEV
        !           237: *
        !           238: * Release the resources allocated in DrvEnablePDEV.  If a surface has been
        !           239: * enabled DrvDisableSurface will have already been called.
        !           240: *
        !           241: \**************************************************************************/
        !           242: 
        !           243: VOID DrvDisablePDEV(
        !           244: DHPDEV dhpdev)
        !           245: {
        !           246:     vDisablePalette((PPDEV) dhpdev);
        !           247:     vDisablePatterns((PPDEV) dhpdev);
        !           248:     LocalFree(dhpdev);
        !           249: }
        !           250: 
        !           251: /******************************Public*Routine******************************\
        !           252: * DrvEnableSurface
        !           253: *
        !           254: * Enable the surface for the device.  Hook the calls this driver supports.
        !           255: *
        !           256: * Return: Handle to the surface if successful, 0 for failure.
        !           257: *
        !           258: \**************************************************************************/
        !           259: 
        !           260: HSURF DrvEnableSurface(
        !           261: DHPDEV dhpdev)
        !           262: {
        !           263:     PPDEV ppdev;
        !           264:     HSURF hsurf;
        !           265:     SIZEL sizl;
        !           266:     ULONG ulBitmapType;
        !           267:     FLONG flHooks;
        !           268: 
        !           269:     // Create engine bitmap around frame buffer.
        !           270: 
        !           271:     ppdev = (PPDEV) dhpdev;
        !           272: 
        !           273:     if (!bInitSURF(ppdev, TRUE))
        !           274:     {
        !           275:         RIP("DISP DrvEnableSurface failed bInitSURF\n");
        !           276:         return(FALSE);
        !           277:     }
        !           278: 
        !           279:     sizl.cx = ppdev->cxScreen;
        !           280:     sizl.cy = ppdev->cyScreen;
        !           281: 
        !           282:     if (ppdev->ulBitCount == 8)
        !           283:     {
        !           284:         if (!bInit256ColorPalette(ppdev)) {
        !           285:             RIP("DISP DrvEnableSurface failed to init the 8bpp palette\n");
        !           286:             return(FALSE);
        !           287:         }
        !           288:         ulBitmapType = BMF_8BPP;
        !           289:         flHooks = HOOKS_BMF8BPP;
        !           290:     }
        !           291:     else if (ppdev->ulBitCount == 16)
        !           292:     {
        !           293:         ulBitmapType = BMF_16BPP;
        !           294:         flHooks = HOOKS_BMF16BPP;
        !           295:     }
        !           296:     else if (ppdev->ulBitCount == 24)
        !           297:     {
        !           298:         ulBitmapType = BMF_24BPP;
        !           299:         flHooks = HOOKS_BMF24BPP;
        !           300:     }
        !           301:     else
        !           302:     {
        !           303:         ulBitmapType = BMF_32BPP;
        !           304:         flHooks = HOOKS_BMF32BPP;
        !           305:     }
        !           306: 
        !           307:     hsurf = (HSURF) EngCreateBitmap(sizl,
        !           308:                                     ppdev->lDeltaScreen,
        !           309:                                     ulBitmapType,
        !           310:                                     (ppdev->lDeltaScreen > 0) ? BMF_TOPDOWN : 0,
        !           311:                                         (PVOID) (ppdev->pjScreen));
        !           312: 
        !           313:     if (hsurf == (HSURF) 0)
        !           314:     {
        !           315:         RIP("DISP DrvEnableSurface failed EngCreateBitmap\n");
        !           316:         return(FALSE);
        !           317:     }
        !           318: 
        !           319:     if (!EngAssociateSurface(hsurf, ppdev->hdevEng, flHooks))
        !           320:     {
        !           321:         RIP("DISP DrvEnableSurface failed EngAssociateSurface\n");
        !           322:         EngDeleteSurface(hsurf);
        !           323:         return(FALSE);
        !           324:     }
        !           325: 
        !           326:     ppdev->hsurfEng = hsurf;
        !           327: 
        !           328:     return(hsurf);
        !           329: }
        !           330: 
        !           331: /******************************Public*Routine******************************\
        !           332: * DrvDisableSurface
        !           333: *
        !           334: * Free resources allocated by DrvEnableSurface.  Release the surface.
        !           335: *
        !           336: \**************************************************************************/
        !           337: 
        !           338: VOID DrvDisableSurface(
        !           339: DHPDEV dhpdev)
        !           340: {
        !           341:     EngDeleteSurface(((PPDEV) dhpdev)->hsurfEng);
        !           342:     vDisableSURF((PPDEV) dhpdev);
        !           343:     ((PPDEV) dhpdev)->hsurfEng = (HSURF) 0;
        !           344: }
        !           345: 
        !           346: /******************************Public*Routine******************************\
        !           347: * DrvAssertMode
        !           348: *
        !           349: * This asks the device to reset itself to the mode of the pdev passed in.
        !           350: *
        !           351: \**************************************************************************/
        !           352: 
        !           353: VOID DrvAssertMode(
        !           354: DHPDEV dhpdev,
        !           355: BOOL bEnable)
        !           356: {
        !           357:     PPDEV   ppdev = (PPDEV) dhpdev;
        !           358:     ULONG   ulReturn;
        !           359: 
        !           360:     if (bEnable)
        !           361:     {
        !           362:     // The screen must be reenabled, reinitialize the device to clean state.
        !           363: 
        !           364:             bInitSURF(ppdev, FALSE);
        !           365:     }
        !           366:     else
        !           367:     {
        !           368:     // We must give up the display.
        !           369:     // Call the kernel driver to reset the device to a known state.
        !           370: 
        !           371:         if (!DeviceIoControl(ppdev->hDriver,
        !           372:                              IOCTL_VIDEO_RESET_DEVICE,
        !           373:                              NULL,
        !           374:                              0,
        !           375:                              NULL,
        !           376:                              0,
        !           377:                              &ulReturn,
        !           378:                              NULL))
        !           379:         {
        !           380:             RIP("DISP DrvAssertMode failed IOCTL");
        !           381:         }
        !           382:     }
        !           383: 
        !           384:     return;
        !           385: }
        !           386: 
        !           387: /******************************Public*Routine******************************\
        !           388: * DrvGetModes
        !           389: *
        !           390: * Returns the list of available modes for the device.
        !           391: *
        !           392: \**************************************************************************/
        !           393: 
        !           394: ULONG DrvGetModes(
        !           395: HANDLE hDriver,
        !           396: ULONG cjSize,
        !           397: DEVMODEW *pdm)
        !           398: 
        !           399: {
        !           400: 
        !           401:     DWORD cModes;
        !           402:     DWORD cbOutputSize;
        !           403:     PVIDEO_MODE_INFORMATION pVideoModeInformation, pVideoTemp;
        !           404:     DWORD cOutputModes = cjSize / (sizeof(DEVMODEW) + DRIVER_EXTRA_SIZE);
        !           405:     DWORD cbModeSize;
        !           406: 
        !           407:     DISPDBG((3, "Framebuf.dll:DrvGetModes\n"));
        !           408: 
        !           409:     cModes = getAvailableModes(hDriver,
        !           410:                                (PVIDEO_MODE_INFORMATION *) &pVideoModeInformation,
        !           411:                                &cbModeSize);
        !           412: 
        !           413:     if (cModes == 0)
        !           414:     {
        !           415:         DISPDBG((0, "FRAMEBUF DISP DrvGetModes failed to get mode information"));
        !           416:         return 0;
        !           417:     }
        !           418: 
        !           419:     if (pdm == NULL)
        !           420:     {
        !           421:         cbOutputSize = cModes * (sizeof(DEVMODEW) + DRIVER_EXTRA_SIZE);
        !           422:     }
        !           423:     else
        !           424:     {
        !           425:         //
        !           426:         // Now copy the information for the supported modes back into the output
        !           427:         // buffer
        !           428:         //
        !           429: 
        !           430:         cbOutputSize = 0;
        !           431: 
        !           432:         pVideoTemp = pVideoModeInformation;
        !           433: 
        !           434:         do
        !           435:         {
        !           436:             if (pVideoTemp->Length != 0)
        !           437:             {
        !           438:                 if (cOutputModes == 0)
        !           439:                 {
        !           440:                     break;
        !           441:                 }
        !           442: 
        !           443:                 //
        !           444:                 // Zero the entire structure to start off with.
        !           445:                 //
        !           446: 
        !           447:                 memset(pdm, 0, sizeof(DEVMODEW));
        !           448: 
        !           449:                 //
        !           450:                 // Set the name of the device to the name of the DLL.
        !           451:                 //
        !           452: 
        !           453:                 memcpy(&(pdm->dmDeviceName), L"framebuf", sizeof(L"framebuf"));
        !           454: 
        !           455:                 pdm->dmSpecVersion = DM_SPECVERSION;
        !           456:                 pdm->dmDriverVersion = DM_SPECVERSION;
        !           457: 
        !           458:                 //
        !           459:                 // We currently do not support Extra information in the driver
        !           460:                 //
        !           461: 
        !           462:                 pdm->dmDriverExtra = DRIVER_EXTRA_SIZE;
        !           463: 
        !           464:                 pdm->dmSize = sizeof(DEVMODEW);
        !           465:                 pdm->dmBitsPerPel = pVideoTemp->NumberOfPlanes *
        !           466:                                     pVideoTemp->BitsPerPlane;
        !           467:                 pdm->dmPelsWidth = pVideoTemp->VisScreenWidth;
        !           468:                 pdm->dmPelsHeight = pVideoTemp->VisScreenHeight;
        !           469:                 pdm->dmDisplayFrequency = pVideoTemp->Frequency;
        !           470: 
        !           471:                 if (pVideoTemp->AttributeFlags & VIDEO_MODE_INTERLACED)
        !           472:                 {
        !           473:                     pdm->dmDisplayFlags |= DM_INTERLACED;
        !           474:                 }
        !           475: 
        !           476:                 //
        !           477:                 // Go to the next DEVMODE entry in the buffer.
        !           478:                 //
        !           479: 
        !           480:                 cOutputModes--;
        !           481: 
        !           482:                 pdm = (LPDEVMODEW) ( ((ULONG)pdm) + sizeof(DEVMODEW) +
        !           483:                                                    DRIVER_EXTRA_SIZE);
        !           484: 
        !           485:                 cbOutputSize += (sizeof(DEVMODEW) + DRIVER_EXTRA_SIZE);
        !           486: 
        !           487:             }
        !           488: 
        !           489:             pVideoTemp = (PVIDEO_MODE_INFORMATION)
        !           490:                 (((PUCHAR)pVideoTemp) + cbModeSize);
        !           491: 
        !           492:         } while (--cModes);
        !           493:     }
        !           494: 
        !           495:     LocalFree(pVideoModeInformation);
        !           496: 
        !           497:     return cbOutputSize;
        !           498: 
        !           499: }
        !           500: 
        !           501: #ifdef DFB_ENABLED
        !           502: 
        !           503: /*----------------------------------------------------------------------------
        !           504: 
        !           505: Test DFB implementation.  Note to get much better performance drawing to
        !           506: bitmaps we should hook DrvBitBlt, DrvPaint and pass back to their Eng
        !           507: counter parts.  We don't now to test our simulations better.
        !           508: 
        !           509: */
        !           510: 
        !           511: ULONG gulCount = 0;
        !           512: BOOL bPrintDelete = FALSE;
        !           513: 
        !           514: HBITMAP DrvCreateDeviceBitmap (DHPDEV dhpdev, SIZEL  sizl, ULONG  iFormat)
        !           515: {
        !           516:     HBITMAP hbmEngine;
        !           517:     PPDEV pDevice = (PPDEV)dhpdev;
        !           518: 
        !           519:     hbmEngine = EngCreateBitmap(sizl,0,iFormat,BMF_TOPDOWN,0);
        !           520: 
        !           521:     if (hbmEngine)
        !           522:     {
        !           523:         if (EngAssociateSurface((HSURF) hbmEngine, pDevice->hdevEng, 0))
        !           524:         {
        !           525:             HBITMAP hbmDevice;
        !           526:             SURFOBJ *psoTemp;
        !           527: 
        !           528:             if (psoTemp = EngLockSurface((HSURF) hbmEngine))
        !           529:             {
        !           530:                 hbmDevice = EngCreateDeviceBitmap((DHSURF) psoTemp,sizl,iFormat);
        !           531: 
        !           532:                 if (hbmDevice)
        !           533:                 {
        !           534:                     if (EngAssociateSurface((HSURF) hbmDevice,pDevice->hdevEng,
        !           535:                                     HOOK_COPYBITS | HOOK_TEXTOUT | HOOK_STROKEPATH ))
        !           536:                     {
        !           537:                         gulCount++;
        !           538:                         return(hbmDevice);
        !           539:                     }
        !           540: 
        !           541:                     EngDeleteSurface((HSURF) hbmDevice);
        !           542:                 }
        !           543: 
        !           544:                 EngUnlockSurface(psoTemp);
        !           545:             }
        !           546:         }
        !           547: 
        !           548:         EngDeleteSurface((HSURF) hbmEngine);
        !           549:     }
        !           550: 
        !           551:     return(0);
        !           552: }
        !           553: 
        !           554: VOID  DrvDeleteDeviceBitmap(DHSURF dhsurf)
        !           555: {
        !           556:     HSURF hsurf = (HSURF) ((SURFOBJ *) dhsurf)->hsurf;
        !           557: 
        !           558:     EngUnlockSurface((SURFOBJ *) dhsurf);
        !           559: 
        !           560:     if (!EngDeleteSurface(hsurf))
        !           561:         DISPDBG((0, "FRAMEBUF failed EngDeleteSurface"));
        !           562: 
        !           563:     gulCount--;
        !           564: 
        !           565:     if (bPrintDelete)
        !           566:         DISPDBG((0, "DrvDelete %lu", gulCount));
        !           567: }
        !           568: 
        !           569: BOOL DrvStrokePath(
        !           570: SURFOBJ   *pso,
        !           571: PATHOBJ   *ppo,
        !           572: CLIPOBJ   *pco,
        !           573: XFORMOBJ  *pxo,
        !           574: BRUSHOBJ  *pbo,
        !           575: POINTL    *pptlBrushOrg,
        !           576: LINEATTRS *plineattrs,
        !           577: MIX        mix)
        !           578: {
        !           579:     return(EngStrokePath((SURFOBJ *) pso->dhsurf,
        !           580:                          ppo,
        !           581:                          pco,
        !           582:                          pxo,
        !           583:                          pbo,
        !           584:                          pptlBrushOrg,
        !           585:                          plineattrs,
        !           586:                          mix));
        !           587: }
        !           588: 
        !           589: BOOL DrvDFBTextOut(
        !           590: SURFOBJ  *pso,
        !           591: STROBJ   *pstro,
        !           592: FONTOBJ  *pfo,
        !           593: CLIPOBJ  *pco,
        !           594: RECTL    *prclExtra,
        !           595: RECTL    *prclOpaque,
        !           596: BRUSHOBJ *pboFore,
        !           597: BRUSHOBJ *pboOpaque,
        !           598: POINTL   *pptlOrg,
        !           599: MIX       mix)
        !           600: {
        !           601:     if (pso->iType == STYPE_DEVBITMAP)
        !           602:     {
        !           603:         return(EngTextOut((SURFOBJ *) pso->dhsurf,
        !           604:                           pstro,
        !           605:                           pfo,
        !           606:                           pco,
        !           607:                           prclExtra,
        !           608:                           prclOpaque,
        !           609:                           pboFore,
        !           610:                           pboOpaque,
        !           611:                           pptlOrg,
        !           612:                           mix));
        !           613:     }
        !           614:     else
        !           615:     {
        !           616: #ifdef MIPS
        !           617:         return(DrvTextOut(pso,
        !           618:                           pstro,
        !           619:                           pfo,
        !           620:                           pco,
        !           621:                           prclExtra,
        !           622:                           prclOpaque,
        !           623:                           pboFore,
        !           624:                           pboOpaque,
        !           625:                           pptlOrg,
        !           626:                           mix));
        !           627: #else
        !           628:         return(EngTextOut(pso,
        !           629:                           pstro,
        !           630:                           pfo,
        !           631:                           pco,
        !           632:                           prclExtra,
        !           633:                           prclOpaque,
        !           634:                           pboFore,
        !           635:                           pboOpaque,
        !           636:                           pptlOrg,
        !           637:                           mix));
        !           638: #endif
        !           639:     }
        !           640: }
        !           641: 
        !           642: BOOL DrvCopyBits(
        !           643: SURFOBJ  *psoTrg,
        !           644: SURFOBJ  *psoSrc,
        !           645: CLIPOBJ  *pco,
        !           646: XLATEOBJ *pxlo,
        !           647: RECTL    *prclTrg,
        !           648: POINTL   *pptlSrc)
        !           649: {
        !           650:     SURFOBJ *psoT;
        !           651:     SURFOBJ *psoS;
        !           652: 
        !           653:     if (psoTrg->iType == STYPE_DEVBITMAP)
        !           654:         psoT = (SURFOBJ *) psoTrg->dhsurf;
        !           655:     else
        !           656:         psoT = psoTrg;
        !           657: 
        !           658:     if (psoSrc->iType == STYPE_DEVBITMAP)
        !           659:         psoS = (SURFOBJ *) psoSrc->dhsurf;
        !           660:     else
        !           661:         psoS = psoSrc;
        !           662: 
        !           663:     return(EngCopyBits(psoT,
        !           664:                        psoS,
        !           665:                        pco,
        !           666:                        pxlo,
        !           667:                        prclTrg,
        !           668:                        pptlSrc));
        !           669: }
        !           670: 
        !           671: #endif

unix.superglobalmegacorp.com

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