home *** CD-ROM | disk | FTP | other *** search
- /*-----------------------------------------------------------------------*
- * filename - memset.cas
- *
- * function(s)
- * memset - sets memory to value
- * setmem - sets memory to value
- *-----------------------------------------------------------------------*/
-
- /*[]------------------------------------------------------------[]*/
- /*| |*/
- /*| Turbo C Run Time Library - Version 3.0 |*/
- /*| |*/
- /*| |*/
- /*| Copyright (c) 1987,1988,1990 by Borland International |*/
- /*| All Rights Reserved. |*/
- /*| |*/
- /*[]------------------------------------------------------------[]*/
-
- #pragma inline
- #include <asmrules.h>
- #include <mem.h>
-
- /*-----------------------------------------------------------------------*
-
- Name setmem - sets memory to value
-
- Usage void setmem(void *addr, unsigned len, char val);
-
- Prototype in mem.h
-
- Description sets the len bytes of the block pointed to by addr to
- val
-
- Return value nothing
-
- *------------------------------------------------------------------------*/
- void setmem(void *addr, unsigned len, char val)
- {
- #if !(LDATA)
- _ES = _DS;
- #endif
- asm LES_ di, addr
- asm mov cx, len
- asm mov al, val
- asm mov ah, al
- asm cld
-
- asm test di, 1
- asm jz isAligned
- asm jcxz done
- asm stosb
- asm dec cx
- isAligned:
- asm shr cx, 1
- asm rep stosw
- asm jnc noOdd
- asm stosb
- noOdd:
- done: ;
- }
-
-
- /*-----------------------------------------------------------------------*
-
- Name memset - sets memory to value
-
- Usage void *memset(void *src, int c, size_t n);
-
- Prototype in mem.h
-
- Description sets the n bytes of the block pointed to by src to
- c.
-
- Return value src
-
- *------------------------------------------------------------------------*/
- #undef memset /* not an intrinsic */
- void *_CType memset(void *src, int c, size_t n)
- {
- setmem( src, n, c );
- return( src );
- }
-
-