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;
}