--- ray/src/rt/rview.c 1990/03/09 14:00:06 1.11 +++ ray/src/rt/rview.c 1991/05/03 15:22:24 1.12 @@ -55,6 +55,10 @@ PNODE ptrunk; /* the base of our image */ RECT pframe; /* current frame boundaries */ int pdepth; /* image depth in current frame */ +static char *reserve_mem = NULL; /* pre-allocated reserve memory */ + +#define RESERVE_AMT 8192 /* amount of memory to reserve */ + #define CTRL(c) ('c'-'@') @@ -137,6 +141,28 @@ rview() /* do a view */ } +memreserve() /* fill memory reserves */ +{ + if (reserve_mem != NULL) + return; /* got some already */ + reserve_mem = malloc(RESERVE_AMT); +} + + +memerror(detail) /* try and rescue a memory error */ +char *detail; +{ + if (reserve_mem == NULL) { + sprintf(errmsg, "out of memory %s", detail); + error(SYSTEM, errmsg); + } + free(reserve_mem); + reserve_mem = NULL; + for ( ; ; ) + command("out of memory: "); +} + + command(prompt) /* get/execute command */ char *prompt; { @@ -268,9 +294,11 @@ rsample() /* sample the image */ xsiz = (((pframe.r-pframe.l)<kid == NULL) { /* subdivide */ if ((p->kid = newptree()) == NULL) - error(SYSTEM, "out of memory in refine"); + memerror("in refine"); /* * The following paint order can leave a black pixel * when redraw() is called in (*dev->paintr)().