146 lines
3.9 KiB
C++
Executable File
146 lines
3.9 KiB
C++
Executable File
//
|
|
// STORCMP.CPP
|
|
//
|
|
// Source file for ArchiveLib 2.0
|
|
//
|
|
// Copyright (c) Greenleaf Software, Inc. 1994-1996
|
|
// All Rights Reserved
|
|
//
|
|
// CONTENTS
|
|
//
|
|
// ALStorage::Compare()
|
|
// ALStorageCompare()
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// May 26, 1994 1.0A : First release
|
|
//
|
|
// January 1, 1995 1.01A : Deleted include of storage.h. This header file
|
|
// was renamed to stor.h, but I never really needed
|
|
// to include it anyway.
|
|
//
|
|
// February 14, 1996 2.0A : New release.
|
|
//
|
|
|
|
#include "arclib.h"
|
|
#if !defined( AL_IBM )
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#include <string.h>
|
|
|
|
#include "_openf.h"
|
|
|
|
//
|
|
// NAME
|
|
//
|
|
// ALStorage::Compare()
|
|
//
|
|
// PLATFORMS/ENVIRONMENTS
|
|
//
|
|
// Console Windows PM
|
|
// C++ C VB Delphi
|
|
//
|
|
// SHORT DESCRIPTION
|
|
//
|
|
// Compare two storage objects.
|
|
//
|
|
// C++ SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
//
|
|
// int ALStorage::Compare( ALStorage &test_object );
|
|
//
|
|
// C SYNOPSIS
|
|
//
|
|
// #include "arclib.h"
|
|
//
|
|
// int ALStorageCompare( hALStorage this_object, hALStorage test_object );
|
|
//
|
|
// VB SYNOPSIS
|
|
//
|
|
// Declare Function ALStorageCompare Lib "AL20FW"
|
|
// (ByVal this_object&, ByVal test_object&) As Integer
|
|
//
|
|
// DELPHI SYNOPSIS
|
|
//
|
|
// function ALStorageCompare( this_object : hALStorage;
|
|
// test_object : hALStorage ) : Integer;
|
|
//
|
|
// ARGUMENTS
|
|
//
|
|
// this_object : A reference or pointer to the ALStorage object that
|
|
// is going to be compared. Note that the C++
|
|
// version of this call doesn't have an explicit argument
|
|
// here, since it has access to 'this' implicitly.
|
|
//
|
|
// test_object : Another storage object that will be compared against
|
|
// this_object.
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// This function provides a convenient way to test this_object
|
|
// against another. Note that if the comparison fails, the status
|
|
// code of this object will be set to an error state. You will need
|
|
// to clear that error if you intend to use this object again.
|
|
//
|
|
// RETURNS
|
|
//
|
|
// AL_SUCCESS if the two files match. AL_COMPARE_ERROR if the files
|
|
// don't match. An error code < AL_SUCCESS is possible if some other
|
|
// error takes place during the process.
|
|
//
|
|
// EXAMPLE
|
|
//
|
|
// SEE ALSO
|
|
//
|
|
// ALStorage::GetCrc32()
|
|
//
|
|
// REVISION HISTORY
|
|
//
|
|
// February 14, 1996 2.0A : New release.
|
|
//
|
|
|
|
int AL_PROTO
|
|
ALStorage::Compare( ALStorage AL_DLL_FAR & test_object ) /* Tag public function */
|
|
{
|
|
ALOpenInputFile in1( test_object );
|
|
ALOpenInputFile in2( *this );
|
|
|
|
if ( test_object.mStatus < 0 )
|
|
return mStatus = test_object.mStatus;
|
|
if ( GetSize() != test_object.GetSize() )
|
|
return mStatus.SetError( AL_COMPARE_ERROR,
|
|
"Comparison failed. "
|
|
"Objects %s and %s are two different sizes.",
|
|
mName.GetSafeName(),
|
|
test_object.mName.GetSafeName() );
|
|
long position = 0;
|
|
for ( ; ; ) {
|
|
int c = ReadChar();
|
|
if ( c < 0 )
|
|
break;
|
|
if ( c != test_object.ReadChar() )
|
|
return mStatus.SetError( AL_COMPARE_ERROR,
|
|
"Objects %s and %s differed at position %ld",
|
|
mName.GetSafeName(),
|
|
test_object.mName.GetSafeName(),
|
|
position );
|
|
position++;
|
|
}
|
|
return mStatus;
|
|
}
|
|
|
|
#if !defined( AL_NO_C )
|
|
|
|
extern "C" AL_LINKAGE int AL_FUNCTION
|
|
ALStorageCompare( hALStorage this_object, /* Tag public function */
|
|
hALStorage test_object )
|
|
{
|
|
AL_ASSERT_OBJECT( this_object, ALStorage, "ALStorageCompare" );
|
|
AL_ASSERT_OBJECT( test_object, ALStorage, "ALStorageCompare" );
|
|
return ( (ALStorage *) this_object )->Compare( *(ALStorage *) test_object );
|
|
}
|
|
|
|
#endif
|