home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gppdem32.zip / gppDemid32 / tools.c < prev    next >
Text File  |  1996-08-05  |  1KB  |  69 lines

  1. #define INCL_DOSERRORS
  2. #define INCL_DOSMEMMGR
  3. #include <os2.h>
  4.  
  5. #include "tools.h"
  6.  
  7. PVOID* heapBase=NULL;
  8.  
  9. #if !defined (__HEAPSIZE__)
  10. #define HEAPSIZE  64*1024
  11. #endif
  12.  
  13. unsigned long SysCreateHeap(unsigned long size)
  14. {
  15.    APIRET rc;
  16. do {
  17.    rc=DosAllocMem((PVOID)&heapBase,size,PAG_READ | PAG_WRITE | OBJ_TILE);
  18.    if (rc) {
  19.       break;
  20.    } /* endif */
  21.    rc=DosSubSetMem( heapBase,
  22.                     DOSSUB_INIT | DOSSUB_SPARSE_OBJ | DOSSUB_SERIALIZE,
  23.                     size);
  24.    if (rc) {
  25.       DosFreeMem(heapBase);
  26.       heapBase=0;
  27.    } /* endif */
  28. } while ( 0 ); /* enddo */
  29. return rc;
  30. }
  31.  
  32. unsigned long SysDestroyHeap( void )
  33. {
  34.    APIRET rc=0;
  35. if (heapBase!=NULL) {
  36.    rc =DosSubUnsetMem(heapBase);
  37.    rc|=DosFreeMem(heapBase);
  38. } /* endif */
  39. return rc;
  40. }
  41.  
  42.  
  43. void* SysAlloc(unsigned long size)
  44. {
  45.    PULONG h=NULL;
  46.    APIRET rc;
  47. if (heapBase==NULL) {
  48.    SysCreateHeap(HEAPSIZE);
  49. }
  50. rc=DosSubAllocMem(heapBase,(PVOID)&h,size+4);
  51. if (rc==0) {
  52.    *h=size+4;
  53. } /* endif */
  54. return (rc==0 ? (PVOID)(h+1) : NULL);
  55. }
  56.  
  57. unsigned long SysFree(void* p)
  58. {
  59.    PULONG h=p;
  60.    APIRET rc=ERROR_INVALID_PARAMETER;
  61. if (h) {
  62.    --h;
  63.    rc=DosSubFreeMem(heapBase,(PULONG)h,*h);
  64. }
  65. return rc;
  66. }
  67.  
  68.  
  69.