No longer directly accessing debuggee memory.
[wine] / graphics / ttydrv / dc.c
1 /*
2  * TTY DC driver
3  *
4  * Copyright 1999 Patrik Stridvall
5  */
6
7 #include "config.h"
8
9 #include "gdi.h"
10 #include "bitmap.h"
11 #include "dc.h"
12 #include "monitor.h"
13 #include "ttydrv.h"
14 #include "winbase.h"
15 #include "debugtools.h"
16
17 DEFAULT_DEBUG_CHANNEL(ttydrv)
18
19 /**********************************************************************/
20
21 extern DeviceCaps TTYDRV_DC_DevCaps;
22
23 /***********************************************************************
24  *           TTYDRV_DC_CreateDC
25  */
26 BOOL TTYDRV_DC_CreateDC(DC *dc, LPCSTR driver, LPCSTR device,
27                         LPCSTR output, const DEVMODEA *initData)
28 {
29   TTYDRV_PDEVICE *physDev;
30   BITMAPOBJ *bmp;
31
32   TRACE("(%p, %s, %s, %s, %p)\n",
33     dc, debugstr_a(driver), debugstr_a(device), 
34     debugstr_a(output), initData);
35
36   dc->physDev = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
37                           sizeof(TTYDRV_PDEVICE));  
38   if(!dc->physDev) {
39     ERR("Can't allocate physDev\n");
40     return FALSE;
41   }
42   physDev = (TTYDRV_PDEVICE *) dc->physDev;
43   
44   dc->w.devCaps = &TTYDRV_DC_DevCaps;
45
46   if(dc->w.flags & DC_MEMORY){
47 #ifdef HAVE_LIBCURSES
48     physDev->window = NULL;
49 #endif /* defined(HAVE_LIBCURSES) */
50     physDev->cellWidth = 1;
51     physDev->cellHeight = 1;
52
53     TTYDRV_DC_CreateBitmap(dc->w.hBitmap);
54     bmp = (BITMAPOBJ *) GDI_GetObjPtr(dc->w.hBitmap, BITMAP_MAGIC);
55                                    
56     dc->w.bitsPerPixel = bmp->bitmap.bmBitsPixel;
57     
58     dc->w.totalExtent.left   = 0;
59     dc->w.totalExtent.top    = 0;
60     dc->w.totalExtent.right  = bmp->bitmap.bmWidth;
61     dc->w.totalExtent.bottom = bmp->bitmap.bmHeight;
62     dc->w.hVisRgn            = CreateRectRgnIndirect( &dc->w.totalExtent );
63     
64     GDI_HEAP_UNLOCK( dc->w.hBitmap );
65   } else {
66 #ifdef HAVE_LIBCURSES
67     physDev->window = TTYDRV_MONITOR_GetCursesRootWindow(&MONITOR_PrimaryMonitor);
68 #endif /* defined(HAVE_LIBCURSES) */
69     physDev->cellWidth = TTYDRV_MONITOR_GetCellWidth(&MONITOR_PrimaryMonitor);
70     physDev->cellHeight = TTYDRV_MONITOR_GetCellHeight(&MONITOR_PrimaryMonitor);
71     
72     dc->w.bitsPerPixel = MONITOR_GetDepth(&MONITOR_PrimaryMonitor);
73     
74     dc->w.totalExtent.left   = 0;
75     dc->w.totalExtent.top    = 0;
76     dc->w.totalExtent.right  = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
77     dc->w.totalExtent.bottom = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
78     dc->w.hVisRgn            = CreateRectRgnIndirect( &dc->w.totalExtent );    
79   }
80
81   return TRUE;
82 }
83
84 /***********************************************************************
85  *           TTYDRV_DC_DeleteDC
86  */
87 BOOL TTYDRV_DC_DeleteDC(DC *dc)
88 {
89   TRACE("(%p)\n", dc);
90
91   HeapFree( GetProcessHeap(), 0, dc->physDev );
92   dc->physDev = NULL;
93   
94   return TRUE;
95 }
96
97 /***********************************************************************
98  *           TTYDRV_DC_Escape
99  */
100 INT TTYDRV_DC_Escape(DC *dc, INT nEscape, INT cbInput,
101                      SEGPTR lpInData, SEGPTR lpOutData)
102 {
103   return 0;
104 }
105