view *view_create() { view *V; if ((V = (view *) calloc(1, sizeof (view)))) view_home(V); return V; }
int viewglut_key(viewglut *P, int k, int d) { double s = 5; int mine = 1; assert(P); if (d) { /* Interpret a key press. */ switch (tolower(k)) { case 27: exit(EXIT_SUCCESS); break; case 7: viewglut_grab(); break; case 6: viewglut_fwd(P); break; case 2: viewglut_rev(P); break; case 16: view_prev(P->V); break; case 14: view_next(P->V); break; case 8: view_home(P->V); break; case 10: view_jump(P->V); break; case 19: view_save(P->V, VIEW_DAT); break; case 12: view_load(P->V, VIEW_DAT); break; case 18: view_remove(P->V); break; case 9: view_insert(P->V); break; case 3: view_clear (P->V); break; case 'd': case 'e': P->d[0] += s; break; case 'a': P->d[0] -= s; break; case 'r': case 'p': P->d[1] += s; break; case 'f': case 'u': P->d[1] -= s; break; case 's': case 'o': P->d[2] += s; break; case 'w': case ',': P->d[2] -= s; break; default: mine = 0; /* Not a viewglut key */ } } else { /* Interpret a key release. */ switch (tolower(k)) { case 'd': case 'e': P->d[0] -= s; break; case 'a': P->d[0] += s; break; case 'r': case 'p': P->d[1] -= s; break; case 'f': case 'u': P->d[1] += s; break; case 's': case 'o': P->d[2] -= s; break; case 'w': case ',': P->d[2] += s; break; default: mine = 0; /* Not a viewglut key */ } } if (mine) { view_move(P->V, P->d); glutPostRedisplay(); } return mine; }