diff options
Diffstat (limited to 'jindroush/lib/autil.cpp')
-rw-r--r-- | jindroush/lib/autil.cpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/jindroush/lib/autil.cpp b/jindroush/lib/autil.cpp new file mode 100644 index 0000000..3afc782 --- /dev/null +++ b/jindroush/lib/autil.cpp @@ -0,0 +1,139 @@ +// 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; +} + |