home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / FPTR_ADD.C < prev    next >
C/C++ Source or Header  |  1997-07-05  |  863b  |  44 lines

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /*
  4. **  FPTR_ADD.C
  5. **
  6. **  Add any add any value to a far pointer and returns the result as a
  7. **  normalized far pointer.
  8. **
  9. **  Public Domain by Soleil Lapierre
  10. */
  11.  
  12. #include "snpdosys.h"
  13. #include "mk_fp.h"
  14.  
  15.  
  16. void FAR *addptr (char FAR *p, unsigned long num)
  17. {
  18.       unsigned seg,off;
  19.  
  20.       seg = FP_SEG(p); off = FP_OFF(p);
  21.       seg += off>>4;   off &= 0x000F;
  22.  
  23.       off += (unsigned)(num&0x0000000fL);
  24.  
  25.       seg += off>>4;   off &= 0x000F;
  26.       seg += (unsigned)num>>4;
  27.  
  28.       return(MK_FP(seg,off));
  29. }
  30.  
  31. /*
  32. **  Normalize a far pointer
  33. */
  34.  
  35. void FAR *farnormal(void FAR *ptr)
  36. {
  37.       unsigned long base, para;
  38.  
  39.       base = ((unsigned long)(ptr) & 0xffff000fL);
  40.       para = ((unsigned long)(ptr) & 0x0000fff0L);
  41.       para <<= 12;
  42.       return (void FAR *)(base + para);
  43. }
  44.