--- ray/src/hd/rhdisp.c 1997/12/15 20:43:48 3.15 +++ ray/src/hd/rhdisp.c 1998/01/04 12:28:09 3.19 @@ -15,7 +15,7 @@ static char SCCSid[] = "$SunId$ SGI"; #include #ifndef VIEWHISTLEN -#define VIEWHISTLEN 2 /* number of remembered views */ +#define VIEWHISTLEN 4 /* number of remembered views */ #endif HOLO *hdlist[HDMAX+1]; /* global holodeck list */ @@ -56,6 +56,15 @@ char *argv[]; /* enter main loop */ do { rdy = disp_wait(); + if (rdy & RDY_SRV) { /* process server result */ + res = serv_result(); + if (pause && res != DS_SHUTDOWN) { + serv_request(DR_ATTEN, 0, NULL); + while ((res = serv_result()) != DS_ACKNOW && + res != DS_SHUTDOWN) + ; + } + } if (rdy & RDY_DEV) { /* user input from driver */ inp = dev_input(); if (inp & DFL(DC_SETVIEW)) @@ -98,15 +107,6 @@ char *argv[]; pause = 0; break; } - if (rdy & RDY_SRV) { /* process server result */ - res = serv_result(); - if (pause && res != DS_SHUTDOWN) { - serv_request(DR_ATTEN, 0, NULL); - while ((res = serv_result()) != DS_ACKNOW && - res != DS_SHUTDOWN) - ; - } - } } while (res != DS_SHUTDOWN); /* all done */ quit(0); @@ -214,17 +214,18 @@ register VIEW *v; char *err; /* restore previous view? */ if (v == NULL) { - if (nhist < 2) { - error(COMMAND, "no previous view"); - return; - } - nhist--; /* get one before last setting */ + if (nhist > 1) /* get one before last setting */ + nhist--; + else /* else go to end of list */ + while (nhist < VIEWHISTLEN && viewhist[nhist].type) + nhist++; v = viewhist + ((nhist-1)%VIEWHISTLEN); - } else if ((err = setview(v)) != NULL) { + } else +again: + if ((err = setview(v)) != NULL) { error(COMMAND, err); return; } -again: if (v->type == VT_PAR) { error(COMMAND, "cannot handle parallel views"); return; @@ -354,8 +355,6 @@ serv_result() /* get next server result and process case DS_STARTIMM: case DS_ENDIMM: imm_mode = msg.type==DS_STARTIMM; - if (msg.type == DS_ENDIMM) - dev_flush(); /* update display NOW */ /* fall through */ case DS_ACKNOW: case DS_SHUTDOWN: