/////////////////////////////////////////////////////////////////////////////////////////
//
//           Program / Function to Emulate the NXT "Move" Block
//
/////////////////////////////////////////////////////////////////////////////////////////

void Move(int power, int steering, int nMoveSize, tMotor left_motor, tMotor right_motor)
{
	int sync = left_motor + right_motor;
	TSynchedMotors alternateSync = synchNone;
	TSynchedMotors primarySync   = synchNone;

	switch (sync)
	{
	case 1: // motorA & motorB
		if(right_motor == motorA)
		{
			primarySync   = synchBA;
			alternateSync = synchAB;
		}
		else
		{
			primarySync   = synchAB;
			alternateSync = synchBA;
		}
		break;
	case 2: // motorA & motorC
		if(right_motor == motorA)
		{
			primarySync   = synchCA;
			alternateSync = synchAC;
		}
		else
		{
			primarySync = synchAC;
			alternateSync = synchCA;
		}
		break;
	case 3: // motorC & motorB
		if(right_motor == motorC)
		{
			primarySync = synchBC;
			alternateSync = synchCB;
		}
		else
		{
			primarySync   = synchCB;
			alternateSync = synchBC;
		}
		break;
	}

	if(steering >= 0)		 // right turn
	{
		nSyncedMotors = primarySync;
		nSyncedTurnRatio = (100 - (2*abs(steering)));
		nMotorEncoderTarget[left_motor]  = nMoveSize;
		motor[left_motor] = power;
	}

	else		// left turn
	{
		nSyncedMotors = alternateSync;
		nSyncedTurnRatio = (100 - (2*abs(steering)));
		nMotorEncoderTarget[right_motor]  = nMoveSize;
		motor[right_motor] = power;
	}

	return;
}

task main()
{
	const tMotor left_motor  = motorA;
	const tMotor right_motor = motorC;
	int power;
	int steering;

	for (power = 10; power < 100; power += 10)
	{
		for (steering = 0; steering <= 100; steering += 50)
		{
			Move(power, steering, 200, left_motor, right_motor);
			wait1Msec(10000);
		}
	}
	return;
}