mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-16 23:51:41 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
252
Code/Tools/wdump/wdump.cpp
Normal file
252
Code/Tools/wdump/wdump.cpp
Normal file
@@ -0,0 +1,252 @@
|
||||
/*
|
||||
** Command & Conquer Renegade(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/>.
|
||||
*/
|
||||
|
||||
// wdump.cpp : Defines the class behaviors for the application.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "wdump.h"
|
||||
|
||||
#include "MainFrm.h"
|
||||
#include "wdumpDoc.h"
|
||||
#include "wdView.h"
|
||||
|
||||
#include "FCNTL.H"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CWdumpApp
|
||||
|
||||
BEGIN_MESSAGE_MAP(CWdumpApp, CWinApp)
|
||||
//{{AFX_MSG_MAP(CWdumpApp)
|
||||
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
|
||||
// NOTE - the ClassWizard will add and remove mapping macros here.
|
||||
// DO NOT EDIT what you see in these blocks of generated code!
|
||||
//}}AFX_MSG_MAP
|
||||
// Standard file based document commands
|
||||
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
|
||||
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CWdumpApp construction
|
||||
|
||||
CWdumpApp::CWdumpApp()
|
||||
: DumpTextures(false), NoWindow(false), TextureDumpFile(0)
|
||||
{
|
||||
// TODO: add construction code here,
|
||||
// Place all significant initialization in InitInstance
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// The one and only CWdumpApp object
|
||||
|
||||
CWdumpApp theApp;
|
||||
|
||||
// private class declaration of a CCommandLineInfo class that knows about our special options
|
||||
class CWDumpCommandLineInfo : public CCommandLineInfo
|
||||
{
|
||||
virtual void ParseParam(const TCHAR* pszParam,BOOL bFlag,BOOL bLast)
|
||||
{
|
||||
if (bFlag)
|
||||
{
|
||||
if(pszParam[0] == 't') {
|
||||
theApp.DumpTextures = true;
|
||||
ParseLast(bLast);
|
||||
return;
|
||||
}
|
||||
if(pszParam[0] == 'q') {
|
||||
theApp.NoWindow = true;
|
||||
ParseLast(bLast);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
CCommandLineInfo::ParseParam(pszParam, bFlag, bLast);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CWdumpApp initialization
|
||||
|
||||
BOOL CWdumpApp::InitInstance()
|
||||
{
|
||||
// Standard initialization
|
||||
// If you are not using these features and wish to reduce the size
|
||||
// of your final executable, you should remove from the following
|
||||
// the specific initialization routines you do not need.
|
||||
|
||||
#ifdef _AFXDLL
|
||||
Enable3dControls(); // Call this when using MFC in a shared DLL
|
||||
#else
|
||||
Enable3dControlsStatic(); // Call this when linking to MFC statically
|
||||
#endif
|
||||
|
||||
// Change the registry key under which our settings are stored.
|
||||
// You should modify this string to be something appropriate
|
||||
// such as the name of your company or organization.
|
||||
SetRegistryKey(_T("Westwood Studios"));
|
||||
|
||||
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
|
||||
|
||||
// Register the application's document templates. Document templates
|
||||
// serve as the connection between documents, frame windows and views.
|
||||
|
||||
CSingleDocTemplate* pDocTemplate;
|
||||
pDocTemplate = new CSingleDocTemplate(
|
||||
IDR_MAINFRAME,
|
||||
RUNTIME_CLASS(CWdumpDoc),
|
||||
RUNTIME_CLASS(CMainFrame), // main SDI frame window
|
||||
RUNTIME_CLASS(CWdumpView));
|
||||
AddDocTemplate(pDocTemplate);
|
||||
|
||||
// Parse command line for standard shell commands, DDE, file open
|
||||
CWDumpCommandLineInfo cmdInfo;
|
||||
ParseCommandLine(cmdInfo);
|
||||
|
||||
// note: if any other dump types are enabled, they should probably open different files.
|
||||
if(DumpTextures) {
|
||||
TextureDumpFile = fopen("textures.txt", "a");
|
||||
}
|
||||
|
||||
if(NoWindow) {
|
||||
if(cmdInfo.m_nShellCommand == CWDumpCommandLineInfo::FileOpen) {
|
||||
const char *c = strrchr(cmdInfo.m_strFileName, '\\');
|
||||
if(c == 0)
|
||||
c = (LPCTSTR) cmdInfo.m_strFileName;
|
||||
if(*c == '\\')
|
||||
c++;
|
||||
|
||||
Filename = c;
|
||||
|
||||
|
||||
|
||||
/* STARTUPINFO info;
|
||||
GetStartupInfo(&info);
|
||||
|
||||
if(info.hStdOutput == NULL) {
|
||||
AllocConsole(); // Allocate console window
|
||||
freopen("CONOUT$", "a", stdout);
|
||||
freopen("CONIN$", "r", stdin);
|
||||
} else {
|
||||
int CrtInput;
|
||||
int CrtOutput;
|
||||
if ( (CrtInput =_open_osfhandle((long) info.hStdInput, _O_RDONLY)) != -1) {
|
||||
if ( (CrtOutput = _open_osfhandle((long) info.hStdOutput, _O_APPEND)) != -1) {
|
||||
_dup2( CrtInput, 0);
|
||||
_dup2( CrtOutput, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// stdin = (struct _iobuf * ) info.hStdInput;
|
||||
// stdout = (struct _iobuf * ) info.hStdOutput;
|
||||
}
|
||||
*/
|
||||
|
||||
CWdumpDoc *doc = (CWdumpDoc *) pDocTemplate->OpenDocumentFile(cmdInfo.m_strFileName, FALSE);
|
||||
|
||||
/* if(info.hStdOutput == NULL) {
|
||||
printf("Press return to close this window..");
|
||||
getchar();
|
||||
FreeConsole();
|
||||
}
|
||||
*/
|
||||
|
||||
CloseAllDocuments(TRUE);
|
||||
PostQuitMessage(0);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// Dispatch commands specified on the command line
|
||||
if (!ProcessShellCommand(cmdInfo))
|
||||
return FALSE;
|
||||
|
||||
|
||||
m_pMainWnd->ShowWindow(SW_SHOW);
|
||||
m_pMainWnd->UpdateWindow();
|
||||
|
||||
POSITION p = pDocTemplate->GetFirstDocPosition();
|
||||
CWdumpDoc *doc = (CWdumpDoc *) pDocTemplate->GetNextDoc(p);
|
||||
doc->UpdateAllViews(0);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CAboutDlg dialog used for App About
|
||||
|
||||
class CAboutDlg : public CDialog
|
||||
{
|
||||
public:
|
||||
CAboutDlg();
|
||||
|
||||
// Dialog Data
|
||||
//{{AFX_DATA(CAboutDlg)
|
||||
enum { IDD = IDD_ABOUTBOX };
|
||||
//}}AFX_DATA
|
||||
|
||||
// ClassWizard generated virtual function overrides
|
||||
//{{AFX_VIRTUAL(CAboutDlg)
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||
//}}AFX_VIRTUAL
|
||||
|
||||
// Implementation
|
||||
protected:
|
||||
//{{AFX_MSG(CAboutDlg)
|
||||
// No message handlers
|
||||
//}}AFX_MSG
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
|
||||
{
|
||||
//{{AFX_DATA_INIT(CAboutDlg)
|
||||
//}}AFX_DATA_INIT
|
||||
}
|
||||
|
||||
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CAboutDlg)
|
||||
//}}AFX_DATA_MAP
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
||||
//{{AFX_MSG_MAP(CAboutDlg)
|
||||
// No message handlers
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
// App command to run the dialog
|
||||
void CWdumpApp::OnAppAbout()
|
||||
{
|
||||
CAboutDlg aboutDlg;
|
||||
aboutDlg.DoModal();
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CWdumpApp commands
|
||||
Reference in New Issue
Block a user