📄 halloc.ch
字号:
/* ACC -- Automatic Compiler Configuration Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer All Rights Reserved. This software is a copyrighted work licensed under the terms of the GNU General Public License. Please consult the file "ACC_LICENSE" for details. Markus F.X.J. Oberhumer <markus@oberhumer.com> http://www.oberhumer.com/ */#define __ACCLIB_HALLOC_CH_INCLUDED 1#if !defined(ACCLIB_PUBLIC)# define ACCLIB_PUBLIC(r,f) r __ACCLIB_FUNCNAME(f)#endif#if (ACC_HAVE_MM_HUGE_PTR)#if 1 && (ACC_OS_DOS16 && defined(BLX286))# define __ACCLIB_HALLOC_USE_DAH 1#elif 1 && (ACC_OS_DOS16 && defined(DOSX286))# define __ACCLIB_HALLOC_USE_DAH 1#elif 1 && (ACC_OS_OS216)# define __ACCLIB_HALLOC_USE_DAH 1#elif 1 && (ACC_OS_WIN16)# define __ACCLIB_HALLOC_USE_GA 1#elif 1 && (ACC_OS_DOS16) && (ACC_CC_BORLANDC) && defined(__DPMI16__)# define __ACCLIB_HALLOC_USE_GA 1#endif#endif#if (__ACCLIB_HALLOC_USE_DAH)#if 0 && (ACC_OS_OS216)#include <os2.h>#elseACC_EXTERN_C unsigned short __far __pascal DosAllocHuge(unsigned short, unsigned short, unsigned short __far *, unsigned short, unsigned short);ACC_EXTERN_C unsigned short __far __pascal DosFreeSeg(unsigned short);#endif#endif#if (__ACCLIB_HALLOC_USE_GA)#if 0#define STRICT 1#include <windows.h>#elseACC_EXTERN_C const void __near* __far __pascal GlobalAlloc(unsigned, unsigned long);ACC_EXTERN_C const void __near* __far __pascal GlobalFree(const void __near*);ACC_EXTERN_C unsigned long __far __pascal GlobalHandle(unsigned);ACC_EXTERN_C void __far* __far __pascal GlobalLock(const void __near*);ACC_EXTERN_C int __far __pascal GlobalUnlock(const void __near*);#endif#endif/***********************************************************************// halloc************************************************************************/ACCLIB_PUBLIC(acc_hvoid_p, acc_halloc) (acc_hsize_t size){ acc_hvoid_p p = 0; if (size <= 0) return p;#if 0 && defined(__palmos__) p = MemPtrNew(size);#elif !defined(ACC_HAVE_MM_HUGE_PTR) if (size < (size_t) -1) p = malloc((size_t) size);#else if ((long)size <= 0) return p;{#if (__ACCLIB_HALLOC_USE_DAH) unsigned short sel = 0; if (DosAllocHuge((unsigned short)(size >> 16), (unsigned short)size, &sel, 0, 0) == 0) p = (acc_hvoid_p) ACC_MK_FP(sel, 0);#elif (__ACCLIB_HALLOC_USE_GA) const void __near* h = GlobalAlloc(2, size); if (h) { p = GlobalLock(h); if (p && ACC_FP_OFF(p) != 0) { GlobalUnlock(h); p = 0; } if (!p) GlobalFree(h); }#elif (ACC_CC_MSC && (_MSC_VER >= 700)) p = _halloc(size, 1);#elif (ACC_CC_MSC || ACC_CC_WATCOMC) p = halloc(size, 1);#elif (ACC_CC_DMC || ACC_CC_SYMANTECC || ACC_CC_ZORTECHC) p = farmalloc(size);#elif (ACC_CC_BORLANDC || ACC_CC_TURBOC) p = farmalloc(size);#elif defined(ACC_CC_AZTECC) p = lmalloc(size);#else if (size < (size_t) -1) p = malloc((size_t) size);#endif}#endif return p;}ACCLIB_PUBLIC(void, acc_hfree) (acc_hvoid_p p){ if (!p) return;#if 0 && defined(__palmos__) MemPtrFree(p);#elif !defined(ACC_HAVE_MM_HUGE_PTR) free(p);#else#if (__ACCLIB_HALLOC_USE_DAH) if (ACC_FP_OFF(p) == 0) DosFreeSeg((unsigned short) ACC_FP_SEG(p));#elif (__ACCLIB_HALLOC_USE_GA) if (ACC_FP_OFF(p) == 0) { const void __near* h = (const void __near*) (unsigned) GlobalHandle(ACC_FP_SEG(p)); if (h) { GlobalUnlock(h); GlobalFree(h); } }#elif (ACC_CC_MSC && (_MSC_VER >= 700)) _hfree(p);#elif (ACC_CC_MSC || ACC_CC_WATCOMC) hfree(p);#elif (ACC_CC_DMC || ACC_CC_SYMANTECC || ACC_CC_ZORTECHC) farfree((void __far*) p);#elif (ACC_CC_BORLANDC || ACC_CC_TURBOC) farfree((void __far*) p);#elif defined(ACC_CC_AZTECC) lfree(p);#else free(p);#endif#endif}/*vi:ts=4:et*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -