182 lines
8.0 KiB
C++
182 lines
8.0 KiB
C++
![]() |
/*
|
||
|
** Command & Conquer Generals Zero Hour(tm)
|
||
|
** Copyright 2025 Electronic Arts Inc.
|
||
|
**
|
||
|
** This program is free software: you can redistribute it and/or modify
|
||
|
** it under the terms of the GNU General Public License as published by
|
||
|
** the Free Software Foundation, either version 3 of the License, or
|
||
|
** (at your option) any later version.
|
||
|
**
|
||
|
** This program is distributed in the hope that it will be useful,
|
||
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
** GNU General Public License for more details.
|
||
|
**
|
||
|
** You should have received a copy of the GNU General Public License
|
||
|
** along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
//
|
||
|
// IGR.cpp - A class used to access the IGR registry settings.
|
||
|
//
|
||
|
// JeffB 7/5/00
|
||
|
//
|
||
|
|
||
|
#include <assert.h>
|
||
|
#include <windows.h>
|
||
|
#include <winreg.h>
|
||
|
//#include "always.h"
|
||
|
#include "IGR.h"
|
||
|
|
||
|
|
||
|
IGROptionsClass *OnlineOptions = NULL;
|
||
|
|
||
|
|
||
|
/*********************************************************************************************
|
||
|
* IGROptions::Init -- Class initializer. Reads from the registry *
|
||
|
* *
|
||
|
* INPUT: None *
|
||
|
* *
|
||
|
* OUTPUT: bool; Did we read everything OK? *
|
||
|
* *
|
||
|
* WARNINGS: none *
|
||
|
* *
|
||
|
* HISTORY: *
|
||
|
* 07/05/00 JeffB: Initial coding *
|
||
|
*===========================================================================================*/
|
||
|
bool IGROptionsClass::Init( void )
|
||
|
{
|
||
|
int size;
|
||
|
int returnValue;
|
||
|
HKEY handle;
|
||
|
char key[128];
|
||
|
unsigned long type;
|
||
|
|
||
|
valid = false;
|
||
|
|
||
|
// Load the options from the registry
|
||
|
size = sizeof( int );
|
||
|
|
||
|
// Setup the key
|
||
|
strcpy( key, WOLAPI_REG_KEY_BOTTOM );
|
||
|
|
||
|
// Get a handle to the WOLAPI entry
|
||
|
if ( RegOpenKeyEx( HKEY_LOCAL_MACHINE, key, 0, KEY_ALL_ACCESS, &handle ) == ERROR_SUCCESS ) {
|
||
|
|
||
|
// If successful, get the options
|
||
|
IGROptionsType ReadOptions = 0;
|
||
|
|
||
|
returnValue = RegQueryValueEx(handle, WOLAPI_REG_KEY_OPTIONS, NULL,
|
||
|
(unsigned long *) &type, (unsigned char *) &ReadOptions, (unsigned long *)&size);
|
||
|
|
||
|
if (returnValue == ERROR_SUCCESS) {
|
||
|
|
||
|
// If successful, and we got a DWORD, store options and set the valid flage
|
||
|
if (type == REG_DWORD) {
|
||
|
options = ReadOptions;
|
||
|
valid = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Clean up
|
||
|
RegCloseKey( handle );
|
||
|
}
|
||
|
return ( valid );
|
||
|
}
|
||
|
|
||
|
/***********************************************************************************************
|
||
|
* IGROptions::Is_Auto_Login_Allowed -- Set the passed options in the registry *
|
||
|
* *
|
||
|
* INPUT: None *
|
||
|
* *
|
||
|
* OUTPUT: bool; Is the option set *
|
||
|
* *
|
||
|
* WARNINGS: none *
|
||
|
* *
|
||
|
* HISTORY: *
|
||
|
* 07/05/00 JeffB: Initial coding *
|
||
|
*=============================================================================================*/
|
||
|
bool IGROptionsClass::Is_Auto_Login_Allowed( void )
|
||
|
{
|
||
|
return(( options & IGR_NO_AUTO_LOGIN ) == 0 );
|
||
|
}
|
||
|
|
||
|
/***********************************************************************************************
|
||
|
* IGROptions::Is_Storing_Nicks_Allowed -- Set the passed options in the registry *
|
||
|
* *
|
||
|
* INPUT: None *
|
||
|
* *
|
||
|
* OUTPUT: bool; Is the option set *
|
||
|
* *
|
||
|
* WARNINGS: none *
|
||
|
* *
|
||
|
* HISTORY: *
|
||
|
* 07/05/00 JeffB: Initial coding *
|
||
|
*=============================================================================================*/
|
||
|
bool IGROptionsClass::Is_Storing_Nicks_Allowed( void )
|
||
|
{
|
||
|
return(( options & IGR_NEVER_STORE_NICKS ) == 0 );
|
||
|
}
|
||
|
|
||
|
/***********************************************************************************************
|
||
|
* IGROptions::Is_Running_Reg_App_Allowed -- Set the passed options in the registry *
|
||
|
* *
|
||
|
* INPUT: None *
|
||
|
* *
|
||
|
* OUTPUT: bool; Is the option set *
|
||
|
* *
|
||
|
* WARNINGS: none *
|
||
|
* *
|
||
|
* HISTORY: *
|
||
|
* 07/05/00 JeffB: Initial coding *
|
||
|
*=============================================================================================*/
|
||
|
bool IGROptionsClass::Is_Running_Reg_App_Allowed( void )
|
||
|
{
|
||
|
return(( options & IGR_NEVER_RUN_REG_APP ) == 0 );
|
||
|
}
|
||
|
|
||
|
/*********************************************************************************************
|
||
|
* IGROptions::Set_Options -- Set the passed options in the registry *
|
||
|
* *
|
||
|
* INPUT: Options to set *
|
||
|
* *
|
||
|
* OUTPUT: bool; Did we set the options successfully *
|
||
|
* *
|
||
|
* WARNINGS: none *
|
||
|
* *
|
||
|
* HISTORY: *
|
||
|
* 07/05/00 JeffB: Initial coding *
|
||
|
*===========================================================================================*/
|
||
|
bool IGROptionsClass::Set_Options( IGROptionsType options )
|
||
|
{
|
||
|
bool ReturnValue = false;
|
||
|
HKEY handle;
|
||
|
int disp;
|
||
|
char key[ 128 ];
|
||
|
|
||
|
// We don't care if it's valid, we'll MAKE it valid.
|
||
|
strcpy( key, WOLAPI_REG_KEY_BOTTOM );
|
||
|
|
||
|
// Do they have the WOLAPI key?
|
||
|
if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, key, 0, KEY_ALL_ACCESS, &handle ) != ERROR_SUCCESS ) {
|
||
|
|
||
|
// If not, make the WOLAPI key
|
||
|
if( RegCreateKeyEx( HKEY_LOCAL_MACHINE, key, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
|
||
|
NULL, &handle, (unsigned long *)&disp ) != ERROR_SUCCESS )
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if( RegSetValueEx( handle, WOLAPI_REG_KEY_OPTIONS, 0, REG_DWORD, (unsigned char *)&options, sizeof(int))
|
||
|
== ERROR_SUCCESS ) {
|
||
|
ReturnValue = true;
|
||
|
}
|
||
|
RegCloseKey( handle );
|
||
|
|
||
|
// Reinit the class to make sure we have these settings for later queries.
|
||
|
Init();
|
||
|
|
||
|
assert( valid == TRUE );
|
||
|
|
||
|
return ReturnValue;
|
||
|
}
|