Code:
void move_WithoutTurn(ENTITY* _ent, ENTITY* _target, var _maxSpeed)
{
  VECTOR temp;
  vec_diff(temp,_target.x,_ent.x);
  if(vec_length(temp) > _maxSpeed)
  {
    vec_normalize(temp,_maxSpeed);
  }
  vec_scale(temp,time_step);
 
  c_move(_ent,nullvector,temp,IGNORE_PASSABLE);
}



just from the top of my head. The basic idea was already described by Pappenheimer.