home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixlib36d / src / c / memcpy < prev    next >
Text File  |  1994-03-08  |  2KB  |  112 lines

  1. #ifdef __STDC__
  2. static char sccs_id[] = "@(#) memcpy.c 1.0 " __DATE__ " HJR";
  3. #else
  4. static char sccs_id[] = "@(#) memcpy.c 1.0 26/9/90 HJR";
  5. #endif
  6.  
  7. /* memcpy.c (c) Copyright 1990 H.Rogers */
  8.  
  9. #include <string.h>
  10.  
  11. #ifdef ARCH
  12. extern void *__memcpy (void *, const void *, size_t);
  13. #endif
  14.  
  15. #ifdef __STDC__
  16. void *(memcpy) (register void *s1, register const void *s2, register size_t n)
  17. #else
  18. void *(memcpy) (s1, s2, n)
  19.      register void *s1;
  20.      register const void *s2;
  21.      register size_t n;
  22. #endif
  23. #ifdef ARCH
  24. {
  25.   return (__memcpy (s1, s2, n));
  26. }
  27. #else
  28. {
  29.   register unsigned char *_s1 = (unsigned char *) s1, *_s2 = (unsigned char *) s2;
  30.  
  31.   if (_s1 == _s2)
  32.     return (s1);
  33.   if (_s1 < _s2)
  34.     {
  35.       while (n & 0x07)
  36.     {
  37.       n--;
  38.       *_s1++ = *_s2++;
  39.     }
  40.       n >>= 3;
  41.       while (n)
  42.     {
  43.       n--;
  44.       *_s1++ = *_s2++;
  45.       *_s1++ = *_s2++;
  46.       *_s1++ = *_s2++;
  47.       *_s1++ = *_s2++;
  48.       *_s1++ = *_s2++;
  49.       *_s1++ = *_s2++;
  50.       *_s1++ = *_s2++;
  51.       *_s1++ = *_s2++;
  52.     }
  53.     }
  54.   else
  55.     {
  56.       _s1 += n;
  57.       _s2 += n;
  58.  
  59.       while (n & 0x07)
  60.     {
  61.       n--;
  62.       *--_s1 = *--_s2;
  63.     }
  64.       n >>= 3;
  65.       while (n)
  66.     {
  67.       n--;
  68.       *--_s1 = *--_s2;
  69.       *--_s1 = *--_s2;
  70.       *--_s1 = *--_s2;
  71.       *--_s1 = *--_s2;
  72.       *--_s1 = *--_s2;
  73.       *--_s1 = *--_s2;
  74.       *--_s1 = *--_s2;
  75.       *--_s1 = *--_s2;
  76.     }
  77.     }
  78.  
  79.   return (s1);
  80. }
  81. #endif
  82.  
  83. #ifdef __STDC__
  84. void *(memmove) (register void *s1, register const void *s2, register size_t n)
  85. #else
  86. void *(memmove) (s1, s2, n)
  87.      register void *s1;
  88.      register const void *s2;
  89.      register size_t n;
  90. #endif
  91. #ifdef ARCH
  92. {
  93.   return (__memcpy (s1, s2, n));
  94. }
  95. #else
  96. {
  97.   return (memcpy (s1, s2, n));
  98. }
  99. #endif
  100.  
  101. #ifdef __STDC__
  102. void *(bcopy) (register const void *s1, register void *s2, register size_t n)
  103. #else
  104. void *(bcopy) (s1, s2, n)
  105.      register void *s1;
  106.      register const void *s2;
  107.      register size_t n;
  108. #endif
  109. {
  110.   return (bcopy (s1, s2, n));
  111. }
  112.