--- ray/src/rt/rview.c 1991/05/03 15:43:32 1.13 +++ ray/src/rt/rview.c 1991/05/03 16:12:34 1.14 @@ -18,8 +18,6 @@ static char SCCSid[] = "$SunId$ LBL"; #include -#include - #include VIEW ourview = STDVIEW; /* viewing parameters */ @@ -57,7 +55,6 @@ PNODE ptrunk; /* the base of our image */ RECT pframe; /* current frame boundaries */ int pdepth; /* image depth in current frame */ -static jmp_buf mainloop; /* longjmp back to main loop */ static char *reserve_mem = NULL; /* pre-allocated reserve memory */ #define RESERVE_AMT 8192 /* amount of memory to reserve */ @@ -119,15 +116,15 @@ rview() /* do a view */ char buf[32]; devopen(devname); /* open device */ - newimage(); /* set up image */ - setjmp(mainloop); + newimage(); /* start image (calls fillreserves) */ + for ( ; ; ) { /* quit in command() */ - while (hresolu <= 1<comout)(buf); rsample(); @@ -136,35 +133,30 @@ rview() /* do a view */ (*dev->comout)(buf); refine(&ptrunk, 0, 0, hresolu, vresolu, pdepth+1); } - if (dev->inpready) + if (errno == ENOMEM) /* ran out of memory */ + freereserves(); + else if (dev->inpready) /* noticed some input */ command(": "); - else + else /* finished this depth */ pdepth++; } } -memreserve() /* fill memory reserves */ +fillreserves() /* fill memory reserves */ { if (reserve_mem != NULL) - return; /* got some already */ + return; reserve_mem = malloc(RESERVE_AMT); } -memerror(detail) /* try and rescue a memory error */ -char *detail; +freereserves() /* free memory reserves */ { - if (reserve_mem == NULL) { - sprintf(errmsg, "out of memory %s", detail); - error(SYSTEM, errmsg); - } + if (reserve_mem == NULL) + return; free(reserve_mem); reserve_mem = NULL; - do - command("out of memory: "); - while (reserve_mem == NULL); - longjmp(mainloop, 1); } @@ -300,10 +292,10 @@ rsample() /* sample the image */ ysiz = (((pframe.u-pframe.d)<kid == NULL) { /* subdivide */ if ((p->kid = newptree()) == NULL) - memerror("in refine"); + return(growth); /* * The following paint order can leave a black pixel * when redraw() is called in (*dev->paintr)().