More DbgPrint to DPRINT changes, Implimented support for deleting DCs, causing switch back to text mode, and another change from nonpaged to paged pool

svn path=/trunk/; revision=1248
This commit is contained in:
Phillip Susi 2000-07-07 01:20:53 +00:00
parent 4568d2fd4c
commit b81629c2a0

View file

@ -1,4 +1,4 @@
/* $Id: dc.c,v 1.17 2000/06/29 23:35:53 dwelch Exp $ /* $Id: dc.c,v 1.18 2000/07/07 01:20:53 phreak Exp $
* *
* DC.C - Device context functions * DC.C - Device context functions
* *
@ -256,7 +256,7 @@ int i; // DELETEME
return W32kCreateCompatableDC(hDC); return W32kCreateCompatableDC(hDC);
} }
DbgPrint("NAME: %S\n", Driver); DPRINT("NAME: %S\n", Driver);
/* Allocate a DC object */ /* Allocate a DC object */
if ((NewDC = DC_AllocDC(Driver)) == NULL) if ((NewDC = DC_AllocDC(Driver)) == NULL)
@ -267,7 +267,7 @@ DbgPrint("NAME: %S\n", Driver);
/* Open the miniport driver */ /* Open the miniport driver */
if ((NewDC->DeviceDriver = DRIVER_FindMPDriver(Driver)) == NULL) if ((NewDC->DeviceDriver = DRIVER_FindMPDriver(Driver)) == NULL)
{ {
DbgPrint("FindMPDriver failed\n"); DPRINT("FindMPDriver failed\n");
goto Failure; goto Failure;
} }
@ -275,7 +275,7 @@ DbgPrint("NAME: %S\n", Driver);
/* FIXME: Retrieve DDI driver name from registry */ /* FIXME: Retrieve DDI driver name from registry */
if ((GDEnableDriver = DRIVER_FindDDIDriver(L"\\??\\C:\\reactos\\system32\\drivers\\vgaddi.dll")) == NULL) if ((GDEnableDriver = DRIVER_FindDDIDriver(L"\\??\\C:\\reactos\\system32\\drivers\\vgaddi.dll")) == NULL)
{ {
DbgPrint("FindDDIDriver failed\n"); DPRINT("FindDDIDriver failed\n");
goto Failure; goto Failure;
} }
@ -284,22 +284,22 @@ DbgPrint("NAME: %S\n", Driver);
if (!GDEnableDriver(DDI_DRIVER_VERSION, sizeof(DED), &DED)) if (!GDEnableDriver(DDI_DRIVER_VERSION, sizeof(DED), &DED))
{ {
DbgPrint("DrvEnableDriver failed\n"); DPRINT("DrvEnableDriver failed\n");
goto Failure; goto Failure;
} }
DbgPrint("Building DDI Functions\n"); DPRINT("Building DDI Functions\n");
/* Construct DDI driver function dispatch table */ /* Construct DDI driver function dispatch table */
if (!DRIVER_BuildDDIFunctions(&DED, &NewDC->DriverFunctions)) if (!DRIVER_BuildDDIFunctions(&DED, &NewDC->DriverFunctions))
{ {
DbgPrint("BuildDDIFunctions failed\n"); DPRINT("BuildDDIFunctions failed\n");
goto Failure; goto Failure;
} }
/* Allocate a phyical device handle from the driver */ /* Allocate a phyical device handle from the driver */
if (Device != NULL) if (Device != NULL)
{ {
DbgPrint("Device in u: %u\n", Device); DPRINT("Device in u: %u\n", Device);
// wcsncpy(NewDC->DMW.dmDeviceName, Device, DMMAXDEVICENAME); FIXME: this crashes everything? // wcsncpy(NewDC->DMW.dmDeviceName, Device, DMMAXDEVICENAME); FIXME: this crashes everything?
} }
NewDC->DMW.dmSize = sizeof(NewDC->DMW); NewDC->DMW.dmSize = sizeof(NewDC->DMW);
@ -316,7 +316,7 @@ DbgPrint("Device in u: %u\n", Device);
NewDC->w.bitsPerPixel = 8; // FIXME: set this here?? NewDC->w.bitsPerPixel = 8; // FIXME: set this here??
DbgPrint("Enabling PDev\n"); DPRINT("Enabling PDev\n");
NewDC->PDev = NewDC->DriverFunctions.EnablePDev(&NewDC->DMW, NewDC->PDev = NewDC->DriverFunctions.EnablePDev(&NewDC->DMW,
L"", L"",
@ -331,25 +331,25 @@ DbgPrint("Enabling PDev\n");
NewDC->DeviceDriver); NewDC->DeviceDriver);
if (NewDC->PDev == NULL) if (NewDC->PDev == NULL)
{ {
DbgPrint("DrvEnablePDEV failed\n"); DPRINT("DrvEnablePDEV failed\n");
goto Failure; goto Failure;
} }
DbgPrint("calling completePDev\n"); DPRINT("calling completePDev\n");
/* Complete initialization of the physical device */ /* Complete initialization of the physical device */
NewDC->DriverFunctions.CompletePDev(NewDC->PDev, NewDC); NewDC->DriverFunctions.CompletePDev(NewDC->PDev, NewDC);
DbgPrint("calling DRIVER_ReferenceDriver\n"); DPRINT("calling DRIVER_ReferenceDriver\n");
DRIVER_ReferenceDriver (Driver); DRIVER_ReferenceDriver (Driver);
DbgPrint("calling EnableSurface\n"); DPRINT("calling EnableSurface\n");
/* Enable the drawing surface */ /* Enable the drawing surface */
NewDC->Surface = NewDC->DriverFunctions.EnableSurface(NewDC->PDev); // hsurf NewDC->Surface = NewDC->DriverFunctions.EnableSurface(NewDC->PDev); // hsurf
DbgPrint("Bits per pel: %u\n", NewDC->w.bitsPerPixel); DPRINT("Bits per pel: %u\n", NewDC->w.bitsPerPixel);
/* Test EngXxx functions */ /* Test EngXxx functions */
// TestEngXxx(NewDC); // TestEngXxx(NewDC);
@ -377,20 +377,22 @@ BOOL STDCALL W32kDeleteDC(HDC DCHandle)
{ {
PDC DCToDelete; PDC DCToDelete;
UNIMPLEMENTED;
DCToDelete = DC_HandleToPtr(DCHandle); DCToDelete = DC_HandleToPtr(DCHandle);
if (DCToDelete == NULL) if (DCToDelete == NULL)
{ {
return FALSE; return FALSE;
} }
DPRINT( "Deleting DC\n" );
if (!DRIVER_UnreferenceDriver (DCToDelete->DriverName)) if (!DRIVER_UnreferenceDriver (DCToDelete->DriverName))
{ {
DPRINT( "No more references to driver, reseting display\n" );
DCToDelete->DriverFunctions.DisableSurface(DCToDelete->PDev); DCToDelete->DriverFunctions.DisableSurface(DCToDelete->PDev);
CHECKPOINT;
DCToDelete->DriverFunctions.AssertMode( DCToDelete->PDev, FALSE );
CHECKPOINT;
DCToDelete->DriverFunctions.DisablePDev(DCToDelete->PDev); DCToDelete->DriverFunctions.DisablePDev(DCToDelete->PDev);
} }
CHECKPOINT;
/* First delete all saved DCs */ /* First delete all saved DCs */
while (DCToDelete->saveLevel) while (DCToDelete->saveLevel)
{ {
@ -412,11 +414,11 @@ BOOL STDCALL W32kDeleteDC(HDC DCHandle)
/* Free GDI resources allocated to this DC */ /* Free GDI resources allocated to this DC */
if (!(DCToDelete->w.flags & DC_SAVED)) if (!(DCToDelete->w.flags & DC_SAVED))
{ {
DC_UnlockDC (DCToDelete); /* DC_UnlockDC (DCToDelete);
SelectObject (DCHandle, STOCK_BLACK_PEN); W32kSelectObject (DCHandle, STOCK_BLACK_PEN);
SelectObject (DCHandle, STOCK_WHITE_BRUSH); W32kSelectObject (DCHandle, STOCK_WHITE_BRUSH);
SelectObject (DCHandle, STOCK_SYSTEM_FONT); W32kSelectObject (DCHandle, STOCK_SYSTEM_FONT);
DC_LockDC (DCHandle); DC_LockDC (DCHandle); W32kSelectObject does not recognize stock objects yet */
if (DCToDelete->w.flags & DC_MEMORY) if (DCToDelete->w.flags & DC_MEMORY)
{ {
W32kDeleteObject (DCToDelete->w.hFirstBitmap); W32kDeleteObject (DCToDelete->w.hFirstBitmap);
@ -440,12 +442,32 @@ BOOL STDCALL W32kDeleteDC(HDC DCHandle)
DC_FreeDC (DCToDelete); DC_FreeDC (DCToDelete);
return STATUS_SUCCESS; return TRUE;
} }
BOOL STDCALL W32kDeleteObject(HGDIOBJ hObject) BOOL STDCALL W32kDeleteObject(HGDIOBJ hObject)
{ {
UNIMPLEMENTED; PGDIOBJ Obj;
PGDIOBJHDR ObjHdr;
Obj = GDIOBJ_HandleToPtr( hObject, GO_MAGIC_DONTCARE );
if( !Obj )
return FALSE;
ObjHdr = (PGDIOBJHDR)(((PCHAR)Obj) - sizeof (GDIOBJHDR));
switch( ObjHdr->wMagic )
{
case GO_BITMAP_MAGIC: {
DPRINT( "Deleting bitmap\n" );
ExFreePool( ((PBITMAPOBJ)Obj)->bitmap.bmBits );
BITMAPOBJ_FreeBitmap( Obj );
break;
}
default: {
DPRINT( "W32kDeleteObject: Deleting object of unknown type %x\n", ObjHdr->wMagic );
return FALSE;
}
}
return TRUE;
} }
INT STDCALL W32kDrawEscape(HDC hDC, INT STDCALL W32kDrawEscape(HDC hDC,
@ -845,8 +867,8 @@ HGDIOBJ STDCALL W32kSelectObject(HDC hDC, HGDIOBJ hGDIObj)
// setup mem dc for drawing into bitmap // setup mem dc for drawing into bitmap
pb = BITMAPOBJ_HandleToPtr(GdiObjHdr); pb = BITMAPOBJ_HandleToPtr(GdiObjHdr);
surfobj = ExAllocatePool(NonPagedPool, sizeof(SURFOBJ)); surfobj = ExAllocatePool(PagedPool, sizeof(SURFOBJ));
surfgdi = ExAllocatePool(NonPagedPool, sizeof(SURFGDI)); surfgdi = ExAllocatePool(PagedPool, sizeof(SURFGDI));
BitmapToSurf(surfgdi, surfobj, pb); BitmapToSurf(surfgdi, surfobj, pb);
dc->w.hBitmap = (BITMAPOBJ *)GdiObjHdr; dc->w.hBitmap = (BITMAPOBJ *)GdiObjHdr;
@ -1024,7 +1046,7 @@ PDC DC_AllocDC(LPCWSTR Driver)
} }
if (Driver != NULL) if (Driver != NULL)
{ {
NewDC->DriverName = ExAllocatePool(NonPagedPool, NewDC->DriverName = ExAllocatePool(PagedPool,
(wcslen(Driver) + 1) * sizeof(WCHAR)); (wcslen(Driver) + 1) * sizeof(WCHAR));
wcscpy(NewDC->DriverName, Driver); wcscpy(NewDC->DriverName, Driver);
} }
@ -1057,7 +1079,7 @@ void DC_FreeDC(PDC DCToFree)
ExFreePool(DCToFree->DriverName); ExFreePool(DCToFree->DriverName);
if (!GDIOBJ_FreeObject((PGDIOBJ)DCToFree, GO_DC_MAGIC)) if (!GDIOBJ_FreeObject((PGDIOBJ)DCToFree, GO_DC_MAGIC))
{ {
DbgPrint("DC_FreeDC failed\n"); DPRINT("DC_FreeDC failed\n");
} }
} }