Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Generals/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ set(WWLIB_SRC
ramfile.cpp
random.cpp
rawfile.cpp
rcfile.cpp
readline.cpp
realcrc.cpp
refcount.cpp
Expand Down Expand Up @@ -83,6 +84,7 @@ set(WWLIB_SRC
RAMFILE.H
RANDOM.H
RAWFILE.H
rcfile.h
readline.h
realcrc.h
ref_ptr.h
Expand Down
129 changes: 129 additions & 0 deletions Generals/Code/Libraries/Source/WWVegas/WWLib/rcfile.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
/*
** Command & Conquer Generals(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/>.
*/

/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : wwlib *
* *
* $Archive:: /Commando/Code/wwlib/rcfile.cpp $*
* *
* Author:: Greg Hjelstrom *
* *
* $Modtime:: 7/09/99 1:37p $*
* *
* $Revision:: 5 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


#include "rcfile.h"
#include <stdlib.h>

const char * RESOURCE_FILE_TYPE_NAME = "File";


ResourceFileClass::ResourceFileClass(HMODULE hmodule, char const *filename) :
ResourceName(NULL),
hModule(NULL),
FileBytes(NULL),
FilePtr(NULL),
EndOfFile(NULL)
{
Set_Name(filename);
HRSRC hresource = FindResource(hmodule,ResourceName,RESOURCE_FILE_TYPE_NAME);

if (hresource) {
HGLOBAL hglob = LoadResource(hmodule,hresource);
if (hglob) {
FileBytes = (unsigned char *)LockResource(hglob);
if (FileBytes) {
FilePtr = FileBytes;
EndOfFile = FileBytes + SizeofResource(hmodule,hresource);
}
}
}
}

ResourceFileClass::~ResourceFileClass(void)
{
if (ResourceName)
free(ResourceName);
}

char const * ResourceFileClass::Set_Name(char const *filename)
{
if (ResourceName) {
free(ResourceName);
ResourceName = NULL;
}
if (filename) {
ResourceName = strdup(filename);
}
return ResourceName;
}

int ResourceFileClass::Read(void *buffer, int size)
{
if (!FilePtr) return 0;

if (FilePtr + size > EndOfFile) {
size = EndOfFile - FilePtr;
}
memcpy(buffer,FilePtr,size);
FilePtr += size;
return size;
}

int ResourceFileClass::Seek(int pos, int dir)
{
switch (dir) {
case SEEK_SET:
FilePtr = FileBytes + pos;
break;

case SEEK_CUR:
FilePtr = FilePtr + pos;
break;

case SEEK_END:
FilePtr = EndOfFile + pos;
break;
}

if (FilePtr > EndOfFile) {
FilePtr = EndOfFile;
}
if (FilePtr < FileBytes) {
FilePtr = FileBytes;
}

return FilePtr - FileBytes;
}

int ResourceFileClass::Size(void)
{
return EndOfFile - FileBytes;
}

void ResourceFileClass::Error(int /*error*/, int /*canretry*/, char const * /*filename*/)
{
}
95 changes: 95 additions & 0 deletions Generals/Code/Libraries/Source/WWVegas/WWLib/rcfile.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*
** Command & Conquer Generals(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/>.
*/

/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : wwlib *
* *
* $Archive:: /Commando/Code/wwlib/rcfile.h $*
* *
* Author:: Greg Hjelstrom *
* *
* $Modtime:: 7/09/99 1:37p $*
* *
* $Revision:: 7 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

#if defined(_MSC_VER)
#pragma once
#endif

#ifndef RCFILE_H
#define RCFILE_H

#include "always.h"
#include "WWFILE.H"
#include "win.h"

/*
** ResourceFileClass
** This is a file class which allows you to read from a binary file that you have
** imported into your resources. Just import the file as a custom resource of the
** type "File". Replace the "id" of the resource with its filename (change
** IDR_FILE1 to "MyFile.w3d") and then you will be able to access it by using this
** class.
*/
class ResourceFileClass : public FileClass
{
public:

ResourceFileClass(HMODULE hmodule, char const *filename);
virtual ~ResourceFileClass(void);

virtual char const * File_Name(void) const { return ResourceName; }
virtual char const * Set_Name(char const *filename);
virtual int Create(void) { return false; }
virtual int Delete(void) { return false; }
virtual bool Is_Available(int /*forced=false*/) { return Is_Open (); }
virtual bool Is_Open(void) const { return (FileBytes != NULL); }

virtual int Open(char const * /*fname*/, int /*rights=READ*/) { return Is_Open(); }
virtual int Open(int /*rights=READ*/) { return Is_Open(); }

virtual int Read(void *buffer, int size);
virtual int Seek(int pos, int dir=SEEK_CUR);
virtual int Size(void);
virtual int Write(void const * /*buffer*/, int /*size*/) { return 0; }
virtual void Close(void) { }
virtual void Error(int error, int canretry = false, char const * filename=NULL);

virtual unsigned char *Peek_Data(void) const { return FileBytes; }

protected:

char * ResourceName;

HMODULE hModule;

unsigned char * FileBytes;
unsigned char * FilePtr;
unsigned char * EndOfFile;

};


#endif
2 changes: 2 additions & 0 deletions GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ set(WWLIB_SRC
ramfile.cpp
random.cpp
rawfile.cpp
rcfile.cpp
readline.cpp
realcrc.cpp
refcount.cpp
Expand Down Expand Up @@ -89,6 +90,7 @@ set(WWLIB_SRC
RAMFILE.H
RANDOM.H
RAWFILE.H
rcfile.h
readline.h
realcrc.h
ref_ptr.h
Expand Down
129 changes: 129 additions & 0 deletions GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/rcfile.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
/*
** 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/>.
*/

/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : wwlib *
* *
* $Archive:: /Commando/Code/wwlib/rcfile.cpp $*
* *
* Author:: Greg Hjelstrom *
* *
* $Modtime:: 7/09/99 1:37p $*
* *
* $Revision:: 5 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


#include "rcfile.h"
#include <stdlib.h>

const char * RESOURCE_FILE_TYPE_NAME = "File";


ResourceFileClass::ResourceFileClass(HMODULE hmodule, char const *filename) :
ResourceName(NULL),
hModule(NULL),
FileBytes(NULL),
FilePtr(NULL),
EndOfFile(NULL)
{
Set_Name(filename);
HRSRC hresource = FindResource(hmodule,ResourceName,RESOURCE_FILE_TYPE_NAME);

if (hresource) {
HGLOBAL hglob = LoadResource(hmodule,hresource);
if (hglob) {
FileBytes = (unsigned char *)LockResource(hglob);
if (FileBytes) {
FilePtr = FileBytes;
EndOfFile = FileBytes + SizeofResource(hmodule,hresource);
}
}
}
}

ResourceFileClass::~ResourceFileClass(void)
{
if (ResourceName)
free(ResourceName);
}

char const * ResourceFileClass::Set_Name(char const *filename)
{
if (ResourceName) {
free(ResourceName);
ResourceName = NULL;
}
if (filename) {
ResourceName = strdup(filename);
}
return ResourceName;
}

int ResourceFileClass::Read(void *buffer, int size)
{
if (!FilePtr) return 0;

if (FilePtr + size > EndOfFile) {
size = EndOfFile - FilePtr;
}
memcpy(buffer,FilePtr,size);
FilePtr += size;
return size;
}

int ResourceFileClass::Seek(int pos, int dir)
{
switch (dir) {
case SEEK_SET:
FilePtr = FileBytes + pos;
break;

case SEEK_CUR:
FilePtr = FilePtr + pos;
break;

case SEEK_END:
FilePtr = EndOfFile + pos;
break;
}

if (FilePtr > EndOfFile) {
FilePtr = EndOfFile;
}
if (FilePtr < FileBytes) {
FilePtr = FileBytes;
}

return FilePtr - FileBytes;
}

int ResourceFileClass::Size(void)
{
return EndOfFile - FileBytes;
}

void ResourceFileClass::Error(int /*error*/, int /*canretry*/, char const * /*filename*/)
{
}
Loading