home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / g / gtak212.zip / LIBX / farstr.c < prev    next >
C/C++ Source or Header  |  1992-09-24  |  2KB  |  71 lines

  1. /*****************************************************************************
  2.  * $Id: farstr.c,v 1.5 1992/06/22 14:30:11 ak Exp $
  3.  *****************************************************************************
  4.  * $Log: farstr.c,v $
  5.  * Revision 1.5  1992/06/22  14:30:11  ak
  6.  * *** empty log message ***
  7.  *
  8.  * Revision 1.4  1992/02/14  18:34:41  ak
  9.  * *** empty log message ***
  10.  *
  11.  * Revision 1.3  1992/01/07  14:20:19  ak
  12.  * *** empty log message ***
  13.  *
  14.  * Revision 1.2  1992/01/03  14:32:35  ak
  15.  * $Header: h:/SRC.SSB/lib/libx/farstr.c,v 1.5 1992/06/22 14:30:11 ak Exp $Id:
  16.  *
  17.  * Revision 1.1  1992/01/03  13:57:48  ak
  18.  * Initial revision
  19.  *
  20.  *****************************************************************************/
  21.  
  22. static char *rcsid = "$Id: farstr.c,v 1.5 1992/06/22 14:30:11 ak Exp $";
  23.  
  24. #if defined(__ZTC__) && (defined(__SMALL__) || defined(__MEDIUM__)) && !defined(DOS386)
  25.  
  26. #include <ztc.h>
  27. #include <dos.h>
  28.  
  29. void _far *
  30. _fmemcpy(void _far *dst, void const _far *src, unsigned len)
  31. {
  32.     movedata(FP_SEG(src), FP_OFF(src), FP_SEG(dst), FP_OFF(dst), len);
  33.     return dst;
  34. }
  35.  
  36. void _far *
  37. _fmemmove(void _far *dst, void const _far *src, unsigned len)
  38. {
  39.     if (FP_SEG(dst) == FP_SEG(src)) {
  40.         unsigned char _far *d = dst;
  41.         unsigned char const _far *s = src;
  42.         if (dst > src) {
  43.             if (d >= s + len)
  44.                 goto move;
  45.             d += len;
  46.             s += len;
  47.             while (len--)
  48.                 *--d = *--s;
  49.         } else {
  50.             if (s >= d + len)
  51.                 goto move;
  52.             while (len--)
  53.                 *d++ = *s++;
  54.         }
  55.     } else
  56. move:        movedata(FP_SEG(src), FP_OFF(src), FP_SEG(dst), FP_OFF(dst), len);
  57.     return dst;
  58. }
  59.  
  60. int
  61. _fmemcmp(void const _far *dst, void const _far *src, unsigned len)
  62. {
  63.     unsigned char const _far *d = dst, _far *s = src;
  64.     while (len--)
  65.         if (*d != *s)
  66.             return (*d < *s) ? -1 : 1;
  67.     return 0;
  68. }
  69.  
  70. #endif
  71.