2011-11-22 21:28:15 +00:00
|
|
|
/*
|
|
|
|
===========================================================================
|
|
|
|
|
|
|
|
Doom 3 GPL Source Code
|
2011-12-06 18:20:15 +00:00
|
|
|
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
|
2011-11-22 21:28:15 +00:00
|
|
|
|
2011-12-06 16:14:59 +00:00
|
|
|
This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code").
|
2011-11-22 21:28:15 +00:00
|
|
|
|
|
|
|
Doom 3 Source Code 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.
|
|
|
|
|
|
|
|
Doom 3 Source Code 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 Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
|
|
|
|
|
|
|
|
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
|
|
|
|
|
|
|
===========================================================================
|
|
|
|
*/
|
|
|
|
|
2011-12-16 22:28:29 +00:00
|
|
|
#include "sys/platform.h"
|
2011-11-22 21:28:15 +00:00
|
|
|
#pragma hdrstop
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
================
|
|
|
|
CreateResourceIDs_f
|
|
|
|
================
|
|
|
|
*/
|
|
|
|
void CreateResourceIDs_f( const idCmdArgs &args ) {
|
|
|
|
int i, j;
|
|
|
|
idStr path, fileName;
|
|
|
|
idStrList resourceFiles;
|
|
|
|
idLexer src;
|
|
|
|
idToken token;
|
|
|
|
idStrList dialogs;
|
|
|
|
idStrList resources;
|
|
|
|
idStrList bitmaps;
|
|
|
|
idStrList icons;
|
|
|
|
idStrList strings;
|
|
|
|
idStrList controls;
|
|
|
|
idStrList commands;
|
|
|
|
|
|
|
|
if ( args.Argc() > 1 ) {
|
|
|
|
path = args.Argv(1);
|
|
|
|
} else {
|
|
|
|
path = SOURCE_CODE_BASE_FOLDER"/";
|
|
|
|
path.Append( __FILE__ );
|
|
|
|
path.StripFilename();
|
|
|
|
path.BackSlashesToSlashes();
|
|
|
|
}
|
|
|
|
|
|
|
|
common->Printf( "%s\n", path.c_str() );
|
|
|
|
Sys_ListFiles( path, "_resource.h", resourceFiles );
|
|
|
|
|
|
|
|
for ( i = 0; i < resourceFiles.Num(); i++ ) {
|
|
|
|
|
|
|
|
fileName = path + "/" + resourceFiles[i];
|
|
|
|
|
|
|
|
common->Printf( "creating IDs for %s...\n", fileName.c_str() );
|
|
|
|
|
|
|
|
if ( !src.LoadFile( fileName, true ) ) {
|
|
|
|
common->Warning( "couldn't load %s", fileName.c_str() );
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
dialogs.Clear();
|
|
|
|
resources.Clear();
|
|
|
|
bitmaps.Clear();
|
|
|
|
icons.Clear();
|
|
|
|
strings.Clear();
|
|
|
|
controls.Clear();
|
|
|
|
commands.Clear();
|
|
|
|
|
|
|
|
while( src.ReadToken( &token ) ) {
|
|
|
|
if ( token == "#" ) {
|
|
|
|
src.ExpectAnyToken( &token );
|
|
|
|
if ( token == "ifdef" || token == "ifndef" ) {
|
|
|
|
src.SkipRestOfLine();
|
|
|
|
} else if ( token == "define" ) {
|
|
|
|
src.ExpectTokenType( TT_NAME, 0, &token );
|
|
|
|
|
|
|
|
if ( token.Icmpn( "_APS_", 5 ) == 0 ) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( token.Icmpn( "IDD_", 4 ) == 0 ) {
|
|
|
|
dialogs.AddUnique( token );
|
|
|
|
} else if ( token.Icmpn( "IDR_", 4 ) == 0 ) {
|
|
|
|
resources.AddUnique( token );
|
|
|
|
} else if ( token.Icmpn( "IDB_", 4 ) == 0 ) {
|
|
|
|
bitmaps.AddUnique( token );
|
|
|
|
} else if ( token.Icmpn( "IDI_", 4 ) == 0 ) {
|
|
|
|
icons.AddUnique( token );
|
|
|
|
} else if ( token.Icmpn( "IDS_", 4 ) == 0 ||
|
|
|
|
token.Icmpn( "IDP_", 4 ) == 0 ) {
|
|
|
|
strings.AddUnique( token );
|
|
|
|
} else if ( token.Icmpn( "IDC_", 4 ) == 0 ) {
|
|
|
|
controls.AddUnique( token );
|
|
|
|
} else {
|
|
|
|
commands.AddUnique( token );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
src.FreeSource();
|
|
|
|
|
|
|
|
idFile *f;
|
|
|
|
int curResource, curControl, curCommand;
|
|
|
|
|
|
|
|
curResource = i ? i * 1000 : 100;
|
|
|
|
curCommand = 20000 + i * 1000;
|
|
|
|
curControl = i * 1000 + 200;
|
|
|
|
|
|
|
|
f = fileSystem->OpenExplicitFileWrite( fileName );
|
|
|
|
if ( !f ) {
|
|
|
|
common->Warning( "couldn't write %s", fileName.c_str() );
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
f->WriteFloatString( "//{{NO_DEPENDENCIES}}\n"
|
|
|
|
"// Microsoft Visual C++ generated include file.\n"
|
|
|
|
"// Used by .rc\n"
|
|
|
|
"//\n\n" );
|
|
|
|
|
|
|
|
for ( j = 0; j < dialogs.Num(); j++ ) {
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", dialogs[j].c_str(), curResource++ );
|
|
|
|
}
|
|
|
|
for ( j = 0; j < resources.Num(); j++ ) {
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", resources[j].c_str(), curResource++ );
|
|
|
|
}
|
|
|
|
for ( j = 0; j < bitmaps.Num(); j++ ) {
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", bitmaps[j].c_str(), curResource++ );
|
|
|
|
}
|
|
|
|
for ( j = 0; j < icons.Num(); j++ ) {
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", icons[j].c_str(), curResource++ );
|
|
|
|
}
|
|
|
|
for ( j = 0; j < strings.Num(); j++ ) {
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", strings[j].c_str(), curResource++ );
|
|
|
|
}
|
|
|
|
|
|
|
|
f->WriteFloatString( "\n" );
|
|
|
|
|
|
|
|
for ( j = 0; j < controls.Num(); j++ ) {
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", controls[j].c_str(), curControl++ );
|
|
|
|
}
|
|
|
|
|
|
|
|
f->WriteFloatString( "\n" );
|
|
|
|
|
|
|
|
for ( j = 0; j < commands.Num(); j++ ) {
|
|
|
|
|
|
|
|
// NOTE: special hack for Radiant
|
|
|
|
if ( commands[j].Cmp( "ID_ENTITY_START" ) == 0 ) {
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", commands[j].c_str(), 40000 );
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if ( commands[j].Cmp( "ID_ENTITY_END" ) == 0 ) {
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", commands[j].c_str(), 45000 );
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
f->WriteFloatString( "#define %-40s %d\n", commands[j].c_str(), curCommand++ );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
f->WriteFloatString( "\n// Next default values for new objects\n"
|
|
|
|
"// \n"
|
|
|
|
"#ifdef APSTUDIO_INVOKED\n"
|
|
|
|
"#ifndef APSTUDIO_READONLY_SYMBOLS\n"
|
|
|
|
"#define _APS_3D_CONTROLS 1\n"
|
|
|
|
"#define _APS_NEXT_RESOURCE_VALUE %d\n"
|
|
|
|
"#define _APS_NEXT_COMMAND_VALUE %d\n"
|
|
|
|
"#define _APS_NEXT_CONTROL_VALUE %d\n"
|
|
|
|
"#define _APS_NEXT_SYMED_VALUE %d\n"
|
|
|
|
"#endif\n"
|
|
|
|
"#endif\n", curResource, curCommand, curControl, curResource );
|
|
|
|
|
|
|
|
fileSystem->CloseFile( f );
|
|
|
|
}
|
|
|
|
}
|