anchor.diff:        control_map[MOUSE_MOVE][0](x, y);
       }
     }
  +  void register_touchstart(TouchEvent e) {
  +    e.preventDefault();
  +    if (e.touches.length > 0) {
  +      Touch t = e.touches.first;
  +      int x = t.client.x-canvas.offsetLeft; int y = t.client.y-canvas.offsetTop;
  +      if (control_map.containsKey(TOUCH_START)) {
  +        control_map[TOUCH_START][0](x, y);
  +      }
  +    }
  +  }
  +  void register_touchmove(TouchEvent e) {
  +    e.preventDefault();
  +    if (e.touches.length > 0) {
  +      Touch t = e.touches.first;
  +      int x = t.client.x-canvas.offsetLeft; int y = t.client.y-canvas.offsetTop;
  +      if (control_map.containsKey(TOUCH_MOVE)) {
  +        control_map[TOUCH_MOVE][0](x, y);
  +      }
  +    }
  +  }
   
     void process_entity(int entity) {}
     void remove_entity(int e) {}
  
positive.code:     // also, need to actually add the mousemove/touchmove handlers
      //canvas.onMouseDown.listen(register_mousedown);
      //window.onMouseUp.listen(register_mouseup);
      //canvas.onTouchStart.listen(register_touchstart);
      //canvas.onTouchMove.listen(register_touchmove);
      //window.onTouchEnd.listen(register_touchend);
  
      //window.onDeviceMotion.listen(register_devicemotion);
  
  
negative.code:   //}
    //void register_mouseup(MouseEvent e) {
    //  int x = e.client.x-canvas.offsetLeft; int y = e.client.y-canvas.offsetTop;
    //}
    //void register_touchend(TouchEvent e) {
    //  e.preventDefault();
  