//    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 2 of the License, or
//    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, write to the Free Software
//    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//

#include "autil.h"

void Peecize( char* szPC, char* szAtari );

//converts 8+3 Atari fname to it's PC equivalent
void ADos2MsDos( char* szMsDos, char* szADos )
{
	char szName[ 9 ];
	strncpy( szName, szADos, 8 );
	szName[ 8 ] = '\0';

	char szExt[ 4 ];
	strncpy( szExt, szADos + 8, 3 );
	szExt[ 3 ] = '\0';

	Peecize( szName, szName );
	Peecize( szExt, szExt );

	if ( !*szName )
		strcpy( szName, "out" );

	strcpy( szMsDos, szName );

	if ( *szExt )
	{
		strcat( szMsDos, "." );
		strcat( szMsDos, szExt );
	}
}

//kind of 'good-for-dos' filter
void Peecize( char* szPC, char* szAtari )
{
	int iLen = strlen( szAtari );

	while( iLen-- )
	{
		//filter off the inverse chars
		char c = *( szAtari++ ) & 0x7F;

		//filter spaces
		if ( c == ' ' )
			continue;

		//filter unprintables
		if ( !isprint( c ) )
			c = '_';

		//filter other 'ugly' characters :)
		switch( c )
		{
			case '*':
			case ':':
			case '\"':
			case ',':
			case '.':
			case '|':
			case '?':
			case '/':
			case '\\':
				c = '_';
				break;
		}

		*( szPC++ ) = c;
	}

	*szPC = '\0';
}


//converts any Atari name to it's PC equivalent
void GuessBestFnameFromAtari( char* szDest, char* szSrc, char* szExt )
{
	char szTemp[ 255 ];
	Peecize( szTemp, szSrc );
	GuessBestFnameFromPC( szDest, szTemp, szExt );
}

//changes file extension
void GuessBestFnameFromPC( char* szDest, char* szSrc, char* szExt, char* szAdd )
{
	char szTemp[ 255 ];

	char szGoodSrc[ 255 ];

	_fixpath( szSrc, szGoodSrc );

	char* szSl = strrchr( szGoodSrc, '/' );

	if ( szSl )
		strcpy( szTemp, szSl + 1 );
	else
		strcpy( szTemp, szGoodSrc );

	char* szDot = strrchr( szTemp, '.' );

	if ( szDot )
		*szDot = '\0';

	if ( !strlen( szTemp ) )
		strcpy( szTemp, "out" );

	strcpy( szDest, szTemp );

	if ( szAdd )
		strcat( szDest, szAdd );

	strcat( szDest, "." );
	strcat( szDest, szExt );
}

//is memory block empty?
BOOL IsBlockEmpty( BYTE* p, int iLen )
{
	while( iLen-- )
	{
		if ( *( p++ ) )
			return FALSE;
	}

	return TRUE;
}