home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
back2roots/padua
/
padua.7z
/
padua
/
ftp.vapor.com
/
microdot-1
/
md1_src_02.lzx
/
checkvalid.c
< prev
next >
Wrap
C/C++ Source or Header
|
2014-05-19
|
2KB
|
79 lines
#include "microdot.h"
#include "asyncio.h"
extern struct WBStartup *_WBenchMsg;
ULONG checkprogramval = MODE_NEWFILE;
static ULONG __inline dosum( ULONG *buffer, int cnt, ULONG sum )
{
while( cnt-- )
sum += *buffer++;
return( sum );
}
ULONG __chip __aligned idblock[ 3 ]á= {á0x7ec04e10, 0, 0x1940e120 };
void checkvalid( void )
{
ULONG sum = NULL;
char buffer[á4096 ];
if( prefs.checksumfailed || !( rand() % 5 ) )
{
struct AsyncFile *f;
if( _WBenchMsg )
{
struct WBArg *wba = _WBenchMsg->sm_ArgList;
BPTR old = CurrentDir( wba->wa_Lock );
f = OpenAsync( wba->wa_Name, MODE_READ, 32768 );
CurrentDir( old );
}
else
{
BPTR old = CurrentDir( GetProgramDir() );
GetProgramName( buffer, sizeof( buffer ) );
f = OpenAsync( buffer, MODE_READ, 32768 );
CurrentDir( old );
}
if( f )
{
int rc;
while( ( rc = ReadAsync( f, buffer, sizeof( buffer ) ) ) > 0 )
sum = dosum( (ULONG*)buffer, rc >> 2, sum );
CloseAsync( f );
}
}
prefs.checksumfailed = checkprogramval ? 1 : 0;
checkprogramval = sum;
}
#define ALERTTXT "\000\030\026VIRUS ALERT - MICRODOT EXECUTABLE CHECKSUM FAILED!\000\000"
void reportvalid( void )
{
if( checkprogramval )
{
DisplayAlert( 0, ALERTTXT, 40 );
exit( -1 );
}
}
char unregistered[á32 ];
#define UREGTXT "[UNREGISTERED/%ld]"
void initdays( void )
{
int days = ( ( time( 0 ) - prefs.firstinstalltime ) + 86399 ) / 86400;
sprintf( unregistered, UREGTXT, days );
if( strlen( unregistered ) < 16 )
exit( 0 );
}