/*----------------------------------------------------------------
*
* Copyright(c) 2004
*
* FILENAME : mem.c
* CONTENTS : source file mobitex lib
* DATE : 2004/12/20
* LANGUAGE : C
* VERSION : 1.0.0.0
* AUTHOR : Xiangbin Lee(Honeycombs)
* AUTHOR's EMail:
* Honeycombs@263.net
* Honeycombs@sina.com
*-----------------------------------------------------------------
* If this code works, it was written by Xiangbin Lee(Honeycombs).
* If not, I don't know who wrote it.
*-----------------------------------------------------------------
* RECORD:
* DATE VERSION AUTHOR CONTENTS
* 2004/12/20 1.0.0.0 Honeycombs Create file
*----------------------------------------------------------------*/
#include "osdef.h"
#include "MEM.h"
/* ---------------------------------------------------------------------
*
*/
INT MemDangerious(VOID *pMem)
{
#if 1
#ifdef WIN32
#define SPECIAL_MEMADDR (0x80000000)
DWORD saddr = (DWORD)pMem;
if(saddr>=SPECIAL_MEMADDR || saddr<0x000000CC) return 1;
#endif
#endif
if(pMem == NULL) return 1;
return 0;
}
VOID *MemAlloc(DWORD memsize)
{
return (VOID *)GlobalAlloc(GMEM_FIXED, memsize);
}
VOID MemFree(VOID *pmem)
{
GlobalFree((HGLOBAL)pmem);
}
INT MemCopy(
VOID *pdest,
VOID *psrc,
INT len,
memOrder order
)
{
WORD *wDest, *wSrc;
BYTE *dest=(BYTE*)pdest;
BYTE *src=(BYTE*)psrc;
if(len<1)
return -1;
else if(dest == src)
return 1;
if(order == reverse)
{
dest=dest+(len-1);
src =src+ (len-1);
if(len&1)
{
len = len-1;
*dest = *src;
dest = dest-1;
src = src-1;
}
len >>= 1;
wDest = (WORD *)(dest-1);
wSrc = (WORD *)(src-1);
while(len>0)
{
*wDest = *wSrc ;
wDest=((WORD *)((BYTE*)wDest-sizeof(WORD)));
wSrc=((WORD *)((BYTE*)wSrc-sizeof(WORD)));
len = len -1;
}
}
else
{
if(len&1)
{
len = len-1;
*dest = *src;
dest = dest+1;
src = src+1;
}
len >>= 1;
wDest = (WORD *)(dest);
wSrc = (WORD *)(src);
while(len>0)
{
*wDest = *wSrc ;
wDest=((WORD *)((BYTE*)wDest+sizeof(WORD)));
wSrc=((WORD *)((BYTE*)wSrc+sizeof(WORD)));
len = len -1;
}
}
return len;
}
/* ---------------------------------------------------------------------
*
*/
INT MemSet(
VOID *pdest,
BYTE data,
INT length
)
{
BYTE *dest=(BYTE*)pdest;
WORD wdata = ((data<<8)|data), *wDest;
if(length<1)
return -1;
else if(dest == 0)
return -2;
if(length&1)
{
length=length-1;
*dest = data;
dest=dest+1;
}
length >>= 1;
wDest = (WORD *)(dest);
while(length>0)
{
*wDest = wdata ;
wDest=((WORD *)((BYTE*)wDest+sizeof(WORD)));
length=length-1;
}
return 0;
}
INT MemComp(
VOID *pdest,
VOID *psrc,
INT len
)
{
WORD *wDest, *wSrc;
BYTE *dest=(BYTE*)pdest;
BYTE *src=(BYTE*)psrc;
if(len<1)
return -1;
else if(dest == src)
return 0;
if(len&1)
{
if(*dest != *src)
{
if(*dest > *src)
return 1;
else
return -1;
}
dest=dest+1;
src=src+1;
len=len-1;
if(len<=0)
return 0;
}
len >>= 1;
wDest = (WORD *)(dest);
wSrc = (WORD *)(src);
while(len>0)
{
if(*wDest != *wSrc)
{
if(*wDest > *wSrc)
return 1;
else
return -1;
}
wDest=((WORD *)((BYTE*)wDest+sizeof(WORD)));
wSrc =((WORD *)((BYTE*)wSrc +sizeof(WORD)));
len=len-1;
}
return 0;
}
/*----------------------------------------------------------------------*/