fakk2-sdk/source/utils/tgaconvert/tgaconvert.c
2000-09-17 00:00:00 +00:00

234 lines
5.1 KiB
C

//-----------------------------------------------------------------------------
//
// $Logfile:: /fakk2_code/Utils/tgaconvert/tgaconvert.c $
// $Revision:: 6 $
// $Author:: Markd $
// $Date:: 7/24/00 5:29p $
//
// Copyright (C) 1998 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /fakk2_code/Utils/tgaconvert/tgaconvert.c $
//
// 6 7/24/00 5:29p Markd
// fixed bug in tga conversion process
//
// 5 7/22/00 12:12a Markd
// fixed conversion bug
//
// 4 7/21/00 3:16a Markd
// made wrong tga type a soft error so tool could continue
//
// 3 7/21/00 2:35a Markd
// fixed small bug
//
// 2 7/21/00 2:32a Markd
// first time check in for tgaconvert
//
// 1 7/21/00 1:58a Markd
//
// DESCRIPTION:
// TGACONVERT - Convert all TGA's to right side up 32-bit color TGA's
//
#include <direct.h>
#include <windows.h>
#include "cmdlib.h"
#include "mathlib.h"
#include "imagelib.h"
#include "qfiles.h"
#define VERSION "1.0"
char ** _argv;
int _argc;
qboolean force = qfalse;
qboolean recursive = qfalse;
char filespec[1024];
char basedir[1024];
/*
=============
ConvertTGA
=============
*/
void ConvertTGA ( const char *name, const char * shortname )
{
FILE * fp;
char srcfile[ 1024 ];
char destfile[ 1024 ];
unsigned * buffer;
qboolean has_alpha;
int len;
int width, height;
int srcTime, destTime;
ftx_t header;
strcpy( srcfile, shortname );
strcpy( destfile, shortname );
// replace extension with FTX extesion
len = strlen( destfile );
destfile[ len - 3 ] = 'f';
destfile[ len - 2 ] = 't';
destfile[ len - 1 ] = 'x';
// get dest file time
destTime = FileTime( destfile );
// get src file time
srcTime = FileTime( shortname );
// see if we need to update
if ( !force && ( ( destTime != -1 ) && ( destTime > srcTime ) ) )
return;
printf(" converting %s.\n", name );
buffer = NULL;
Load32BitImage( srcfile, &buffer, &width, &height, &has_alpha );
if ( !buffer )
{
printf(" cannot convert %s.\n", name );
return;
}
header.width = width;
header.height = height;
header.has_alpha = has_alpha;
fp = SafeOpenWrite( destfile );
SafeWrite( fp, &header, sizeof( header ) );
SafeWrite( fp, buffer, width * height * 4 );
fclose( fp );
free( buffer );
}
/*
======================
FixArgs
======================
*/
char * FixArgs(char *arg)
{
char *p;
p = arg;
DeSlashify(p);
return arg;
}
/*
=================
ConvertFile
filename is the name of the file we want to convert
name is the path of the file (built from process_directory)
=================
*/
void ConvertFile ( char * filename, char * name )
{
char fullname[ 1024 ];
strcpy( fullname, name );
strcat( fullname, filename );
ConvertTGA( fullname, filename );
}
/*
======================
Convert
======================
*/
void Convert( const char * wild, qboolean recursive )
{
char path[ 1024 ];
char search[ 1024 ];
char name[ 1024 ];
if ( recursive )
{
printf( "recursively converting %s\n", wild );
}
else
{
printf( " converting %s\n", wild );
}
memset( path, 0, sizeof( path ) );
strcpy( name, wild );
FixArgs( name );
ExtractFilePath( name, path );
ExtractFileName( name, search );
strcpy( name, path );
if ( !path[0] )
strcpy( path, basedir );
ProcessWildDirectory( path, name, search, ConvertFile, recursive );
}
void Usage( void )
{
printf("USAGE:\n");
printf(" tgaconvert [-v erbose] [-r ecursive] [-f orce] <file spec (*.tga)>\n");
}
extern qboolean verbose;
void ParseArguments( void )
{
int i;
qprintf ("argc = %d\n",_argc);
i = 1;
while (i<_argc && _argv[i][0]=='-')
{
switch( _argv[i][1] )
{
case 'v':
verbose = qtrue;
break;
case 'r':
recursive = qtrue;
break;
case 'f':
force = qtrue;
break;
default:
Usage();
exit( 0 );
}
i++;
}
if (i+1>_argc)
{
Usage();
exit( 0 );
}
strcpy( filespec, _argv[i] );
}
/*
==============================
main
==============================
*/
int main (int argc, char **argv)
{
_argc = argc;
_argv = argv;
printf ("\nTGACONVERT "VERSION" copyright (c) 2000 Ritual Entertainment\n");
ParseArguments();
// get the current directory
_getcwd(basedir,1024);
Convert( filespec, recursive );
return 0;
}