+
+void mouse(int bn, int st, int x, int y)
+{
+ int bidx = bn - GLUT_LEFT_BUTTON;
+
+ if(bidx < 3) {
+ mbstate[bidx] = st == GLUT_DOWN;
+ }
+ mouse_x = x;
+ mouse_y = y;
+
+ if(st == GLUT_DOWN) {
+ glutSetCursor(GLUT_CURSOR_NONE);
+ } else {
+ glutSetCursor(GLUT_CURSOR_LEFT_ARROW);
+ }
+}
+
+void motion(int x, int y)
+{
+ int dx = x - mouse_x;
+ int dy = y - mouse_y;
+ mouse_x = x;
+ mouse_y = y;
+
+ if(mwarp) {
+ mwarp = 0;
+ return;
+ }
+ if(!(dx | dy)) return;
+
+ if(mbstate[0]) {
+ angle -= dx << 6;
+ }
+}