Here is my approach, which encodes both the number of steps to take and the direction, as the sign of the return argument.
It won't work properly if you want to move more than one revolution in either direction.
#define steps_per_revolution 200
// calculates number of steps and direction to rotate from old_pos to new_pos
int steps_to_go(int old_pos, int new_pos) {
int half_rev = steps_per_revolution / 2;
int diff = new_pos - old_pos; //if this is less than half a revolution, do this move.
// else
if (diff > half_rev) diff = diff - steps_per_revolution; //result negative, go the other way
if (diff < -half_rev) diff = diff + steps_per_revolution; //result positive, go forward
return diff;
}