[comp.os.minix] bcopy

tholm@uvicctr.UUCP (Terrence W. Holm) (09/14/88)

EFTH MINIX report #41  - September 1988 -  bcopy(3) & friends


There follows an implementation of bcopy(3), bcmp(3) and
bzero(3) for MINIX. Please consider this public domain
software. "man" pages are included.

Note: This replaces the old MINIX bcopy(3) routine.

----------------------------------------------------------
echo x - bcmp.3
gres '^X' '' > bcmp.3 << '/'
XSUBROUTINES
X    bcmp(3)		- byte compare
X
XINVOCATION
X    int bcmp( vector1, vector2, count )
X      char *vector1;
X      char *vector2;
X      int   count;
X
XEXPLANATION
X    Bcmp(3) determines if the data pointed to by <vector1>
X    is equal to the data pointed to by <vector2>. Up to
X    <count> bytes are compared.
X
XRESULTS
X     =0 : <vector1> is equal to <vector2>
X    <>0 : <vector1> is not equal to <vector2>
X
XREFERENCES
X    memcmp(3), strcmp(3)
/
echo x - bcmp.c
gres '^X' '' > bcmp.c << '/'
X/*  bcmp(3)
X *
X *  Author: Terrence W. Holm          Sep. 1988
X */
X
X
Xint bcmp( vector1, vector2, count )
X  char *vector1;
X  char *vector2;
X  int   count;
X
X  {
X  int word_count = count / sizeof(int);
X  int byte_count = count & ( sizeof(int) - 1 );
X
X  if ( vector1 == vector2 )
X    return( 0 );
X
X  while( --word_count >= 0 )
X    if (  *((int *) vector1)++ != *((int *) vector2)++ )
X	return( 1 );
X
X  while( --byte_count >= 0 )
X    if (  *vector1++ != *vector2++ )
X	return( 1 );
X
X  return( 0 );
X  }
/
echo x - bcopy.3
gres '^X' '' > bcopy.3 << '/'
XSUBROUTINES
X    bcopy(3)		- byte copy
X
XINVOCATION
X    bcopy( from, to, count )
X      char *from;
X      char *to;
X      int   count;
X
XEXPLANATION
X    <count> bytes are copied from the memory pointed to
X    by <from> to the memory pointed to by <to>. If the
X    location <to> is within the <from> vector, then
X    the copy is done backwards to save the <from> vector
X    from being trampled.
X
XREFERENCES
X    memcpy(3), strcpy(3)
/
echo x - bcopy.c
gres '^X' '' > bcopy.c << '/'
X/*  bcopy(3)
X *
X *  Author: Terrence W. Holm          Sep. 1988
X */
X
X
Xbcopy( from, to, count )
X  char *from;
X  char *to;
X  int   count;
X
X  {
X  int word_count = count / sizeof(int);
X  int byte_count = count & ( sizeof(int) - 1 );
X  
X  if ( to > from  &&  to < from + count )
X    {
X    /*  Must copy backwards  */
X    from += count;
X    to   += count;
X
X    while( --byte_count >= 0 )
X      *--to = *--from;
X
X    while( --word_count >= 0 )
X      *--((int *) to) = *--((int *) from);
X    }
X  else
X    {
X    while( --word_count >= 0 )
X      *((int *) to)++ = *((int *) from)++;
X
X    while( --byte_count >= 0 )
X      *to++ = *from++;
X    }
X  }
/
echo x - bzero.3
gres '^X' '' > bzero.3 << '/'
XSUBROUTINES
X    bzero(3)		- zero a byte string
X
XINVOCATION
X    bzero( vector, count )
X      char *vector;
X      int   count;
X
XEXPLANATION
X    The first <count> bytes of <vector> are set to 0.
X
XREFERENCES
X    memset(3)
/
echo x - bzero.c
gres '^X' '' > bzero.c << '/'
X/*  bzero(3)
X *
X *  Author: Terrence W. Holm          Sep. 1988
X */
X
X
Xbzero( vector, count )
X  char *vector;
X  int   count;
X
X  {
X  int word_count = count / sizeof(int);
X  int byte_count = count & ( sizeof(int) - 1 );
X
X  while( --word_count >= 0 )
X    *((int *) vector)++ = 0;
X
X  while( --byte_count >= 0 )
X    *vector++ = 0;
X  }
/
----------------------------------------------------------

		Edwin L. Froese
		  uw-beaver!ubc-cs!mprg!handel!froese

		Terrence W. Holm
		  uw-beaver!uvicctr!tholm