📄 compare.c
字号:
/* compare.c */
#include <stdtypes.h>
#include <clib1.h>
#include <string.h>
#include <stdio.h>
int compare(LONG length, VOID *addr1, VOID *addr2, \
CHAR *err_string, WORD max_err_length, WORD flags)
/* "flags" is defined in clib1.h.
Assumes that addr1 and addr2 can be accessed the same way (size-wise).
For example, this allows WORD addr1 <-> LONG addr2 as long as
dynamic bus sizing is supported.
Entry:
Exit: <> if OK.
*/
{
void *temp;
if ( !length ) return(1);
/* compare data from addr1 & addr2 */
if ( !( (flags & ADDR1_SAME) || (flags & ADDR2_SAME) ) )
/* both addresses increment */
{
switch( flags & SIZE_MASK )
{
case SIZE_BYTE:
return ( bcompare( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_WORD:
return ( wcompare( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_LONG:
return ( lcompare( length, addr1, addr2, \
err_string, max_err_length ) );
}
}
if ( (flags & ADDR1_SAME) && !(flags & ADDR2_SAME) )
/* ADDR1 does not increment */
if ( !(flags & ADDR1_SAME) && (flags & ADDR2_SAME) )
/* ADDR2 does not increment, so swap addr1/addr2 */
{
temp = addr1;
addr2 = addr1;
addr1 = temp;
}
switch( flags & SIZE_MASK )
{
case SIZE_BYTE:
return ( bcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_WORD:
return ( wcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_LONG:
return ( lcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
}
return(1); /* OK */
}
int physical_compare(LONG length, UINT32 addr1, UINT32 addr2, \
CHAR *err_string, WORD max_err_length, WORD flags)
/* "flags" is defined in clib1.h.
Assumes that addr1 and addr2 can be accessed the same way (size-wise).
For example, this allows WORD addr1 <-> LONG addr2 as long as
dynamic bus sizing is supported.
Entry:
Exit: <> if OK.
*/
{
UINT32 temp;
if ( !length ) return(1);
/* compare data from addr1 & addr2 */
if ( !( (flags & ADDR1_SAME) || (flags & ADDR2_SAME) ) )
/* both addresses increment */
{
switch( flags & SIZE_MASK )
{
case SIZE_BYTE:
return ( physical_bcompare( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_WORD:
return ( physical_wcompare( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_LONG:
return ( physical_lcompare( length, addr1, addr2, \
err_string, max_err_length ) );
}
}
if ( (flags & ADDR1_SAME) && !(flags & ADDR2_SAME) )
/* ADDR1 does not increment */
if ( !(flags & ADDR1_SAME) && (flags & ADDR2_SAME) )
/* ADDR2 does not increment, so swap addr1/addr2 */
{
temp = addr1;
addr2 = addr1;
addr1 = temp;
}
switch( flags & SIZE_MASK )
{
case SIZE_BYTE:
return ( physical_bcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_WORD:
return ( physical_wcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_LONG:
return ( physical_lcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
}
return(1); /* OK */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -