source: trunk/src/ddraw/OS2PALETTE.CPP@ 521

Last change on this file since 521 was 503, checked in by hugh, 26 years ago

Changed to use ODINCRT macros to preserve FS, but still does crash

File size: 6.8 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <memory.h>
5#define INITGUID
6#include "os2palette.h"
7#define _OS2WIN_H
8#define FAR
9#include "misc.h"
10#include "os2palset.h"
11#include <winerror.h>
12#include <odincrt.h>
13
14//******************************************************************************
15//******************************************************************************
16OS2IDirectDrawPalette::OS2IDirectDrawPalette( OS2IDirectDraw *lpDirectDraw,
17 int palsize,
18 LPPALETTEENTRY lpColorTable,
19 DWORD dwPalFlags) :
20 Referenced(0), os2pal(NULL),
21 lastError(DD_OK), lpDraw(NULL)
22{
23 lpVtbl = &Vtbl;
24 Vtbl.AddRef = PalAddRef;
25 Vtbl.Release = PalRelease;
26 Vtbl.QueryInterface = PalQueryInterface;
27 Vtbl.GetCaps = PalGetCaps;
28 Vtbl.GetEntries = PalGetEntries;
29 Vtbl.Initialize = PalInitialize;
30 Vtbl.SetEntries = PalSetEntries;
31
32 lpDraw = lpDirectDraw;
33 lpDraw->Vtbl.AddRef(lpDraw);
34 hDive = lpDirectDraw->GetDiveInstance();
35 dwCaps = dwPalFlags;
36
37 dwSize = palsize;
38 if(256==dwSize)
39 dwCaps |= DDPCAPS_ALLOW256;
40 dwCaps &= ~DDPCAPS_VSYNC; // No sync change
41
42 os2pal = (LPPALETTEENTRY)malloc(palsize*sizeof(PALETTEENTRY));
43 memcpy((char *)os2pal, (char *)lpColorTable, palsize*sizeof(PALETTEENTRY));
44}
45//******************************************************************************
46//******************************************************************************
47OS2IDirectDrawPalette::~OS2IDirectDrawPalette()
48{
49 if(os2pal)
50 free(os2pal);
51 lpDraw->Vtbl.Release(lpDraw);
52}
53//******************************************************************************
54//******************************************************************************
55HRESULT __stdcall PalQueryInterface(THIS This, REFIID riid, LPVOID FAR * ppvObj)
56{
57 #ifdef DEBUG
58 WriteLog("OS2IDirectDrawPalette::PalQueryInterface\n");
59 #endif
60
61 *ppvObj = NULL;
62
63 if(!IsEqualGUID(riid, IID_IDirectDrawPalette))
64//&& !IsEqualGUID(riid, IID_IUnknown))
65 return E_NOINTERFACE;
66
67 *ppvObj = This;
68
69 PalAddRef(This);
70 return(DD_OK);
71}
72//******************************************************************************
73//******************************************************************************
74ULONG __stdcall PalAddRef(THIS This)
75{
76 OS2IDirectDrawPalette *me = (OS2IDirectDrawPalette *)This;
77
78 #ifdef DEBUG
79 WriteLog("OS2IDirectDrawPalette::PalAddRef %d\n", me->Referenced+1);
80 #endif
81
82 return (++me->Referenced);
83}
84//******************************************************************************
85//******************************************************************************
86ULONG __stdcall PalRelease(THIS This)
87{
88 OS2IDirectDrawPalette *me = (OS2IDirectDrawPalette *)This;
89
90 #ifdef DEBUG
91 WriteLog("OS2IDirectDrawPalette::PalRelease %d\n", me->Referenced-1);
92 #endif
93
94 if(me->Referenced)
95 {
96 me->Referenced--;
97 if(me->Referenced == 0)
98 {
99 ODIN_delete(me);
100 return(0);
101 }
102 else
103 return (me->Referenced);
104 }
105 else
106 return(0);
107}
108//******************************************************************************
109//******************************************************************************
110HRESULT __stdcall PalGetCaps(THIS This, LPDWORD lpdwCaps)
111{
112 OS2IDirectDrawPalette *me = (OS2IDirectDrawPalette *)This;
113
114 #ifdef DEBUG
115 WriteLog("OS2IDirectDrawPalette::GetCaps\n");
116 #endif
117
118 if(NULL== lpdwCaps)
119 return(DDERR_INVALIDPARAMS);
120
121 *lpdwCaps = me->dwCaps;
122
123 if(me->fAttachedToPrimary)
124 *lpdwCaps |= DDPCAPS_PRIMARYSURFACE;
125
126 return(DD_OK);
127}
128//******************************************************************************
129//******************************************************************************
130HRESULT __stdcall PalGetEntries(THIS This, DWORD dwFlags,
131 DWORD dwBase,
132 DWORD dwNumEntries,
133 LPPALETTEENTRY lpEntries)
134{
135 OS2IDirectDrawPalette *me = (OS2IDirectDrawPalette *)This;
136
137 #ifdef DEBUG
138 WriteLog("OS2IDirectDrawPalette::PalGetEntries\n");
139 #endif
140
141 if( (NULL== lpEntries) ||(0!=dwFlags) ||(dwBase<0) ||((dwBase + dwNumEntries)>me->dwSize) )
142 return(DDERR_INVALIDPARAMS);
143
144 ODIN_FS_BEGIN
145
146 memcpy( (char *)lpEntries,
147 (char *)(me->os2pal + dwBase),
148 dwNumEntries*sizeof(PALETTEENTRY));
149
150 ODIN_FS_END
151
152 return(DD_OK);
153}
154//******************************************************************************
155//******************************************************************************
156HRESULT __stdcall PalInitialize(THIS, LPDIRECTDRAW, DWORD, LPPALETTEENTRY)
157{
158 #ifdef DEBUG
159 WriteLog("OS2IDirectDrawPalette::PalInitialize\n");
160 #endif
161 return(DDERR_ALREADYINITIALIZED);
162}
163//******************************************************************************
164//******************************************************************************
165HRESULT __stdcall PalSetEntries(THIS This, DWORD dwFlags,
166 DWORD dwBase,
167 DWORD dwNumEntries,
168 LPPALETTEENTRY lpNewEntries)
169{
170 OS2IDirectDrawPalette *me = (OS2IDirectDrawPalette *)This;
171
172 #ifdef DEBUG
173 WriteLog("OS2IDirectDrawPalette::PalSetEntries\n");
174 #endif
175 if( (NULL== lpNewEntries) ||(0!=dwFlags) ||(dwBase<0) ||((dwBase + dwNumEntries)>me->dwSize) )
176 return(DDERR_INVALIDPARAMS);
177
178 ODIN_FS_BEGIN
179
180 memcpy((char *)(me->os2pal + dwBase),
181 (char *)lpNewEntries,
182 dwNumEntries*sizeof(PALETTEENTRY));
183
184 ODIN_FS_END
185
186 if(me->fAttachedToPrimary)
187 me->SetPhysPalette();
188
189 return(DD_OK);
190}
191//******************************************************************************
192//******************************************************************************
193void OS2IDirectDrawPalette::SetPhysPalette()
194{
195 OS2SetPhysPalette(os2pal);
196}
197//******************************************************************************
198//******************************************************************************
199void OS2IDirectDrawPalette::RestorePhysPalette()
200{
201 OS2ResetPhysPalette();
202}
203//******************************************************************************
204//******************************************************************************
205void OS2IDirectDrawPalette::SetIsPrimary(BOOL fNewVal)
206{
207 if(fNewVal==fAttachedToPrimary)
208 return;
209 fAttachedToPrimary = fNewVal;
210 if(fAttachedToPrimary)
211 SetPhysPalette();
212
213}
214//******************************************************************************
215//******************************************************************************
216
Note: See TracBrowser for help on using the repository browser.