void Randsoup(LifeState* state, int w, int h, enum symm symmetry)
{
	ClearData(state);
	
	LifeState* temp = NewState();

	int evenw = 1-(w%2); // 1 if even, 0 if odd.
	int halfw = (w+1)/2;

	switch(symmetry)
	{
		case C4:
			// Rand fill first quadrant:
			Randfill(state, 0, 0, halfw, halfw);
			// Unoptimized:		
			Copy(temp, state);
			for(i=1;i<=3;i++)
				{
					Transform(temp, 0, evenw, 0, -1, 1, 0);
					Copy(state, temp, OR);
				}

			
				// Rotate first quadrant (x>0, y>0) anticlockwise(x>0, y<0):
				// We should erase unnecessary bits before it gets written;
				// e.g. In the right picture:
				// O is the origin. Bits a and b are set.	   c
				// We're going to use bit a and discard b.	  Ob
				// we should do b = a before c = b.			 a
				for (i=0; i<halfw; i++)
					for(j=0; j<halfw; j++)
						SetCell(state, j, -i+evenw, GetCell(state, i, j));
				// Fill in the other half; can be optimized:
				LifeState* temp = NewState();
				Copy(temp, state);
				Transform(temp, evenw, evenw, -1, 0, 0 -1);
				Copy(state, temp, OR);
			
		case D4:
			int evenh = 1-(h%2);
			int halfh = (h+1)/2;
			
			// Rand fill first quadrant:
			Randfill(state, 0, 0, halfw, halfh);
			// Unoptimized:
			Copy(temp, state);
			Transform(temp, 0, evenh, 1, 0, 0, -1);
			Copy(state, temp, OR);
			Copy(temp, state);
			if(evenh) Move(temp, 1, 0);
			FlipX(temp);
			Copy(state, temp, OR);
		case D4x:
			int lefthalfw = -(w-1)/2;
			Randfill(state, lefthalfw, lefthalfw, w, w);
			Copy
		case D8:
			int lefthalfw = -(w-1)/2;
		default:
			printf("Something is seriously wrong!!");
	}
}