home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_122 / 1.ddi / WINLBSRC.ZIP / HEAP.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  2.2 KB  |  97 lines

  1. /*------------------------------------------------------------------------
  2.  * filename - heap.cpp
  3.  *
  4.  * function(s)
  5.  *        malloc  - allocate heap space
  6.  *        calloc  - allocate heap space and zero fill
  7.  *        free    - free heap space
  8.  *        realloc - resize heap block
  9.  *-----------------------------------------------------------------------*/
  10.  
  11. /*
  12.  *      C/C++ Run Time Library - Version 5.0
  13.  *
  14.  *      Copyright (c) 1991, 1992 by Borland International
  15.  *      All Rights Reserved.
  16.  *
  17.  */
  18.  
  19. // HEAP.CPP
  20.  
  21. #include <windows.h>
  22. #include <alloc.h>
  23. #include <dos.h>
  24.  
  25. extern "C" unsigned _WinAllocFlag;
  26.  
  27. #ifndef LDATA
  28. #if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
  29. #define LDATA 1
  30. #else
  31. #define LDATA 0
  32. #endif
  33. #endif
  34.  
  35. extern "C"
  36. {
  37.     void far  * _Cdecl _farcallocf (unsigned long __nunits,
  38.                                    unsigned long __unitsz,
  39.                                    unsigned __flags);
  40.     void        _Cdecl _farfreef (void far *__block, unsigned __flags);
  41.     void far  * _Cdecl _farmallocf (unsigned long __nbytes,
  42.                                    unsigned __flags);
  43.     void far  * _Cdecl _farreallocf (void far *__oldblock,
  44.                                     unsigned long __nbytes,
  45.                                     unsigned __flags);
  46. }
  47.  
  48. void *malloc(size_t size)
  49. {
  50. #if (LDATA)
  51.     return(_farmallocf(size, _WinAllocFlag));
  52. #else
  53.     return((void *)LocalAlloc(LMEM_FIXED, size));
  54. #endif
  55. }
  56.  
  57.  
  58. void *realloc(void *block, size_t size)
  59. {
  60. #if (LDATA)
  61.     return(_farreallocf(block, size, _WinAllocFlag));
  62. #else
  63.     if(block == 0)
  64.         return malloc(size);
  65.     else
  66.         if(size == 0)
  67.             {
  68.             free(block);
  69.             return 0;
  70.             }
  71.         else
  72.             return((void *)LocalReAlloc((HANDLE) block, size, LMEM_MOVEABLE));
  73. #endif
  74. }
  75.  
  76.  
  77. void *calloc(size_t nitems, size_t size)
  78. {
  79. #if (LDATA)
  80.     return(_farcallocf(nitems, size, _WinAllocFlag));
  81. #else
  82.     return((void *)LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, size * nitems));
  83. #endif
  84. }
  85.  
  86.  
  87. void free(void *block)
  88. {
  89. #if (LDATA)
  90.     _farfreef(block, _WinAllocFlag);
  91. #else
  92.     if (block)
  93.         LocalFree((HANDLE)block);
  94. #endif
  95. }
  96.  
  97.