I'm doing some rotations that didn't seem very hard to do in my head, but implementing has been a pain in the a**. Anyway, I want my draw function to do a 2D rotation around a point on the screen. In between calls to this function the point of rotation could change, but the new rotation must take into account the old rotations. Here's some I'm some code I'm trying if it helps...

if(firstTime){ //initailize matrix
glLoadIdentity();
glTranslatef(0.0, 0.0, -30.0);
glRotatef(zAngle, 0.0, 0.0, 1.0);
}else
glPopMatrix();

glTranslatef(xRotPos, RotPos, 0.0);
drawShape(0,0,0.6f,1.2f,0.6f,1.2f,0);
glRotatef(zChngAngle, 0.0, 0.0, 1.0);
glTranslatef(-xRotPos, -yRotPos, 0.0);
glPushMatrix();