+/* -------------------------------------------------------------------------------
+
+ Copyright (C) 1999-2007 id Software, Inc. and contributors.
+ For a list of contributors, see the accompanying CONTRIBUTORS file.
+
+ This file is part of GtkRadiant.
+
+ GtkRadiant 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 2 of the License, or
+ (at your option) any later version.
+
+ GtkRadiant 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 GtkRadiant; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ -------------------------------------------------------------------------------
+
+ This code has been altered significantly from its original form, to support
+ several games based on the Quake III Arena engine, in the form of "Q3Map2."
+
+ ------------------------------------------------------------------------------- */
+
+
+
+/* dependencies */
+#include "q3map2.h"
+
+
+
+/*
+ MD4BlockChecksum()
+ calculates an md4 checksum for a block of data
+ */
+
+static int MD4BlockChecksum( void *buffer, int length ){
+ return Com_BlockChecksum( buffer, length );
+}
+
+/*
+ FixAASMain()
+ resets an aas checksum to match the given BSP
+ */
+
+int FixAASMain( int argc, char **argv ){
+ int length, checksum;
+ void *buffer;
+ FILE *file;
+ char aas[ 1024 ], **ext;
+ char *exts[] =
+ {
+ ".aas",
+ "_b0.aas",
+ "_b1.aas",
+ NULL
+ };
+
+
+ /* arg checking */
+ if ( argc < 2 ) {
+ Sys_Printf( "Usage: q3map -fixaas [-v] <mapname>\n" );
+ return 0;
+ }
+
+ /* do some path mangling */
+ strcpy( source, ExpandArg( argv[ argc - 1 ] ) );
+ StripExtension( source );
+ DefaultExtension( source, ".bsp" );
+
+ /* note it */
+ Sys_Printf( "--- FixAAS ---\n" );
+
+ /* load the bsp */
+ Sys_Printf( "Loading %s\n", source );
+ length = LoadFile( source, &buffer );
+
+ /* create bsp checksum */
+ Sys_Printf( "Creating checksum...\n" );
+ checksum = LittleLong( MD4BlockChecksum( buffer, length ) );
+
+ /* write checksum to aas */
+ ext = exts;
+ while ( *ext )
+ {
+ /* mangle name */
+ strcpy( aas, source );
+ StripExtension( aas );
+ strcat( aas, *ext );
+ Sys_Printf( "Trying %s\n", aas );
+ ext++;
+
+ /* fix it */
+ file = fopen( aas, "r+b" );
+ if ( !file ) {
+ continue;
+ }
+ if ( fwrite( &checksum, 4, 1, file ) != 1 ) {
+ Error( "Error writing checksum to %s", aas );
+ }
+ fclose( file );
+ }
+
+ /* return to sender */
+ return 0;
+}