home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / EMXLIB8F.ZIP / EMX / LIB / GCC / CPP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-02  |  1.6 KB  |  94 lines

  1. /* cpp.c */
  2.  
  3. #include <stdlib.h>
  4. #include <io.h>
  5.  
  6. typedef void (*vfp)(void);
  7.  
  8. static void default_new_handler (void);
  9.  
  10. vfp __new_handler = default_new_handler;
  11.  
  12. static void default_new_handler (void)
  13. {
  14.   static char *msg = "Virtual memory exhausted in `new'\n";
  15.  
  16.   write (2, msg, strlen (msg));
  17.   _exit (255);
  18. }
  19.  
  20.  
  21. void *__builtin_new (long size)
  22. {
  23.   void *p;
  24.  
  25.   p = malloc (size);
  26.   if (p == NULL)
  27.     (*__new_handler)();
  28.   return (p);
  29. }
  30.  
  31.  
  32. void *__builtin_vec_new (void *p, int max_index, int size,
  33.                          void (*ctor)(void *))
  34. {
  35.   int i, n;
  36.   char *q;
  37.  
  38.   n = max_index + 1;
  39.   if (p == NULL)
  40.     p = (void *)__builtin_new (n * size);
  41.   q = p;
  42.   for (i = 0; i < n; ++i)
  43.     {
  44.       ctor ((void *)q);
  45.       q += size;
  46.     }
  47.   return (p);
  48. }
  49.  
  50.  
  51. void __builtin_delete (void *p)
  52. {
  53.   if (p != NULL)
  54.     free (p);
  55. }
  56.  
  57.  
  58. void __builtin_vec_delete (void *p, int max_index, int size,
  59.                            void (*dtor)(), int auto_delete_vec,
  60.                            int auto_delete)
  61. {
  62.   int i, n;
  63.   char *q;
  64.  
  65.   n = max_index + 1;
  66.   q = p; q += n * size;
  67.   for (i = 0; i < n; ++i)
  68.     {
  69.       q -= size;
  70.       dtor((void *)q, auto_delete);
  71.     }
  72.   
  73.   if (auto_delete_vec)
  74.     __builtin_delete (p);
  75. }
  76.  
  77.  
  78. vfp __set_new_handler (vfp handler)
  79. {
  80.   vfp prev_handler;
  81.  
  82.   prev_handler = __new_handler;
  83.   if (handler == NULL)
  84.     handler = default_new_handler;
  85.   __new_handler = handler;
  86.   return (prev_handler);
  87. }
  88.  
  89.  
  90. vfp set_new_handler (vfp handler)
  91. {
  92.   return (__set_new_handler (handler));
  93. }
  94.