home *** CD-ROM | disk | FTP | other *** search
- /* cpp.c */
-
- #include <stdlib.h>
- #include <io.h>
-
- typedef void (*vfp)(void);
-
- static void default_new_handler (void);
-
- vfp __new_handler = default_new_handler;
-
- static void default_new_handler (void)
- {
- static char *msg = "Virtual memory exhausted in `new'\n";
-
- write (2, msg, strlen (msg));
- _exit (255);
- }
-
-
- void *__builtin_new (long size)
- {
- void *p;
-
- p = malloc (size);
- if (p == NULL)
- (*__new_handler)();
- return (p);
- }
-
-
- void *__builtin_vec_new (void *p, int max_index, int size,
- void (*ctor)(void *))
- {
- int i, n;
- char *q;
-
- n = max_index + 1;
- if (p == NULL)
- p = (void *)__builtin_new (n * size);
- q = p;
- for (i = 0; i < n; ++i)
- {
- ctor ((void *)q);
- q += size;
- }
- return (p);
- }
-
-
- void __builtin_delete (void *p)
- {
- if (p != NULL)
- free (p);
- }
-
-
- void __builtin_vec_delete (void *p, int max_index, int size,
- void (*dtor)(), int auto_delete_vec,
- int auto_delete)
- {
- int i, n;
- char *q;
-
- n = max_index + 1;
- q = p; q += n * size;
- for (i = 0; i < n; ++i)
- {
- q -= size;
- dtor((void *)q, auto_delete);
- }
-
- if (auto_delete_vec)
- __builtin_delete (p);
- }
-
-
- vfp __set_new_handler (vfp handler)
- {
- vfp prev_handler;
-
- prev_handler = __new_handler;
- if (handler == NULL)
- handler = default_new_handler;
- __new_handler = handler;
- return (prev_handler);
- }
-
-
- vfp set_new_handler (vfp handler)
- {
- return (__set_new_handler (handler));
- }
-