Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
127 lines
3.3 KiB
C++
127 lines
3.3 KiB
C++
//------------------------------------------------------------------------------
|
|
// File: DDMM.cpp
|
|
//
|
|
// Desc: DirectShow base classes - implements routines for using DirectDraw
|
|
// on a multimonitor system.
|
|
//
|
|
// Copyright (c) 1995-2001 Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
#include <streams.h>
|
|
#include <ddraw.h>
|
|
#include "ddmm.h"
|
|
|
|
/*
|
|
* FindDeviceCallback
|
|
*/
|
|
typedef struct {
|
|
LPSTR szDevice;
|
|
GUID* lpGUID;
|
|
GUID GUID;
|
|
BOOL fFound;
|
|
} FindDeviceData;
|
|
|
|
BOOL CALLBACK FindDeviceCallback(GUID* lpGUID, LPSTR szName, LPSTR szDevice, LPVOID lParam) {
|
|
FindDeviceData *p = (FindDeviceData*)lParam;
|
|
|
|
if(lstrcmpiA(p->szDevice, szDevice) == 0) {
|
|
if(lpGUID) {
|
|
p->GUID = *lpGUID;
|
|
p->lpGUID = &p->GUID;
|
|
}
|
|
else {
|
|
p->lpGUID = NULL;
|
|
}
|
|
p->fFound = TRUE;
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CALLBACK FindDeviceCallbackEx(GUID* lpGUID, LPSTR szName, LPSTR szDevice, LPVOID lParam, HMONITOR hMonitor) {
|
|
FindDeviceData *p = (FindDeviceData*)lParam;
|
|
|
|
if(lstrcmpiA(p->szDevice, szDevice) == 0) {
|
|
if(lpGUID) {
|
|
p->GUID = *lpGUID;
|
|
p->lpGUID = &p->GUID;
|
|
}
|
|
else {
|
|
p->lpGUID = NULL;
|
|
}
|
|
p->fFound = TRUE;
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/*
|
|
* DirectDrawCreateFromDevice
|
|
*
|
|
* create a DirectDraw object for a particular device
|
|
*/
|
|
IDirectDraw * DirectDrawCreateFromDevice(LPSTR szDevice, PDRAWCREATE DirectDrawCreateP, PDRAWENUM DirectDrawEnumerateP) {
|
|
IDirectDraw* pdd = NULL;
|
|
FindDeviceData find;
|
|
|
|
if(szDevice == NULL) {
|
|
DirectDrawCreateP(NULL, &pdd, NULL);
|
|
return pdd;
|
|
}
|
|
|
|
find.szDevice = szDevice;
|
|
find.fFound = FALSE;
|
|
DirectDrawEnumerateP(FindDeviceCallback, (LPVOID)&find);
|
|
|
|
if(find.fFound) {
|
|
//
|
|
// In 4bpp mode the following DDraw call causes a message box to be popped
|
|
// up by DDraw (!?!). It's DDraw's fault, but we don't like it. So we
|
|
// make sure it doesn't happen.
|
|
//
|
|
UINT ErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
|
|
DirectDrawCreateP(find.lpGUID, &pdd, NULL);
|
|
SetErrorMode(ErrorMode);
|
|
}
|
|
|
|
return pdd;
|
|
}
|
|
|
|
|
|
/*
|
|
* DirectDrawCreateFromDeviceEx
|
|
*
|
|
* create a DirectDraw object for a particular device
|
|
*/
|
|
IDirectDraw * DirectDrawCreateFromDeviceEx(LPSTR szDevice, PDRAWCREATE DirectDrawCreateP, LPDIRECTDRAWENUMERATEEXA DirectDrawEnumerateExP) {
|
|
IDirectDraw* pdd = NULL;
|
|
FindDeviceData find;
|
|
|
|
if(szDevice == NULL) {
|
|
DirectDrawCreateP(NULL, &pdd, NULL);
|
|
return pdd;
|
|
}
|
|
|
|
find.szDevice = szDevice;
|
|
find.fFound = FALSE;
|
|
DirectDrawEnumerateExP(FindDeviceCallbackEx, (LPVOID)&find,
|
|
DDENUM_ATTACHEDSECONDARYDEVICES);
|
|
|
|
if(find.fFound) {
|
|
//
|
|
// In 4bpp mode the following DDraw call causes a message box to be popped
|
|
// up by DDraw (!?!). It's DDraw's fault, but we don't like it. So we
|
|
// make sure it doesn't happen.
|
|
//
|
|
UINT ErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
|
|
DirectDrawCreateP(find.lpGUID, &pdd, NULL);
|
|
SetErrorMode(ErrorMode);
|
|
}
|
|
|
|
return pdd;
|
|
}
|
|
|