home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / e20313sr.zip / emacs / 20.3.1 / src / mem-limits.h < prev    next >
C/C++ Source or Header  |  1999-07-31  |  4KB  |  186 lines

  1. /* Includes for memory limit warnings.
  2.    Copyright (C) 1990, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
  3.  
  4. This file is part of GNU Emacs.
  5.  
  6. GNU Emacs is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU Emacs is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU Emacs; see the file COPYING.  If not, write to
  18. the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  19. Boston, MA 02111-1307, USA.  */
  20.  
  21. #ifdef MSDOS
  22. #include <dpmi.h>
  23. #endif
  24.  
  25. /* Some systems need this before <sys/resource.h>.  */
  26. #include <sys/types.h>
  27.  
  28. #ifdef _LIBC
  29.  
  30. #include <sys/resource.h>
  31. #define BSD4_2            /* Tell code below to use getrlimit.  */
  32.  
  33. /* Old Linux startup code won't define __data_start.  */
  34. extern int etext, __data_start; weak_extern (__data_start)
  35. #define start_of_data()    (&__data_start ?: &etext)
  36.  
  37. #else /* not _LIBC */
  38.  
  39. #if defined (__osf__) && (defined (__mips) || defined (mips) || defined(__alpha))
  40. #include <sys/time.h>
  41. #include <sys/resource.h>
  42. #endif
  43.  
  44. #ifdef __bsdi__
  45. #define BSD4_2
  46. #endif
  47.  
  48. #ifndef BSD4_2
  49. #ifndef USG
  50. #ifndef MSDOS
  51. #ifndef WINDOWSNT
  52. #include <sys/vlimit.h>
  53. #endif /* not WINDOWSNT */
  54. #endif /* not MSDOS */
  55. #endif /* not USG */
  56. #else /* if BSD4_2 */
  57. #include <sys/time.h>
  58. #include <sys/resource.h>
  59. #endif /* BSD4_2 */
  60.  
  61. #ifdef emacs
  62. /* The important properties of this type are that 1) it's a pointer, and
  63.    2) arithmetic on it should work as if the size of the object pointed
  64.    to has a size of 1.  */
  65. #ifdef __STDC__
  66. typedef void *POINTER;
  67. #else
  68. typedef char *POINTER;
  69. #endif
  70.  
  71. typedef unsigned long SIZE;
  72.  
  73. #ifdef NULL
  74. #undef NULL
  75. #endif
  76. #define NULL ((POINTER) 0)
  77.  
  78. extern POINTER start_of_data ();
  79. #ifdef DATA_SEG_BITS
  80. #define EXCEEDS_LISP_PTR(ptr) \
  81.   (((EMACS_UINT) (ptr) & ~DATA_SEG_BITS) >> VALBITS)
  82. #else
  83. #define EXCEEDS_LISP_PTR(ptr) ((EMACS_UINT) (ptr) >> VALBITS)
  84. #endif
  85.  
  86. #ifdef BSD_SYSTEM
  87. #ifndef DATA_SEG_BITS
  88. extern char etext;
  89. #define start_of_data() &etext
  90. #endif
  91. #endif
  92.  
  93. #else  /* not emacs */
  94. extern char etext;
  95. #define start_of_data() &etext
  96. #endif /* not emacs */
  97.  
  98. #endif /* not _LIBC */
  99.  
  100.  
  101. /* start of data space; can be changed by calling malloc_init */
  102. static POINTER data_space_start;
  103.  
  104. /* Number of bytes of writable memory we can expect to be able to get */
  105. static unsigned long lim_data;
  106.  
  107. #ifdef NO_LIM_DATA
  108. static void
  109. get_lim_data ()
  110. {
  111.   lim_data = -1;
  112. }
  113. #else /* not NO_LIM_DATA */
  114.  
  115. #ifdef USG
  116.  
  117. static void
  118. get_lim_data ()
  119. {
  120.   extern long ulimit ();
  121.  
  122.   lim_data = -1;
  123.  
  124.   /* Use the ulimit call, if we seem to have it.  */
  125. #if !defined (ULIMIT_BREAK_VALUE) || defined (LINUX)
  126.   lim_data = ulimit (3, 0);
  127. #endif
  128.  
  129.   /* If that didn't work, just use the macro's value.  */
  130. #ifdef ULIMIT_BREAK_VALUE
  131.   if (lim_data == -1)
  132.     lim_data = ULIMIT_BREAK_VALUE;
  133. #endif
  134.  
  135.   lim_data -= (long) data_space_start;
  136. }
  137.  
  138. #else /* not USG */
  139. #ifdef WINDOWSNT
  140.  
  141. static void
  142. get_lim_data ()
  143. {
  144.   extern unsigned long data_region_size;
  145.   lim_data = data_region_size;
  146. }
  147.  
  148. #else
  149. #if !defined (BSD4_2) && !defined (__osf__)
  150.  
  151. #ifdef MSDOS
  152. void
  153. get_lim_data ()
  154. {
  155.   _go32_dpmi_meminfo info;
  156.  
  157.   _go32_dpmi_get_free_memory_information (&info);
  158.   lim_data = info.available_memory;
  159. }
  160. #else /* not MSDOS */
  161. static void
  162. get_lim_data ()
  163. {
  164.   lim_data = vlimit (LIM_DATA, -1);
  165. }
  166. #endif /* not MSDOS */
  167.  
  168. #else /* BSD4_2 */
  169.  
  170. static void
  171. get_lim_data ()
  172. {
  173.   struct rlimit XXrlimit;
  174.  
  175.   getrlimit (RLIMIT_DATA, &XXrlimit);
  176. #ifdef RLIM_INFINITY
  177.   lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */
  178. #else
  179.   lim_data = XXrlimit.rlim_cur;    /* soft limit */
  180. #endif
  181. }
  182. #endif /* BSD4_2 */
  183. #endif /* not WINDOWSNT */
  184. #endif /* not USG */
  185. #endif /* not NO_LIM_DATA */
  186.