Im trying to impliment some basic equation based animation. Using glutGet for the time and idle to keep it animating at a steady pace. Ive been told to not put any drawing type code in the idle function itself, also opengl should realise when the function is idle and call its own idle function. But im not sure if i have this right. Only when i impliment it, the animation doesnt occur. Here's some code, do i need to call the idle func from the display one? (surely that will just be based on the computer speed if i did that)

if you have any ideas of where im going wrong, please help me

Code:
void idle(void)
{
float fTime, fSimTime;
float static fLastIdleTime=0;

fTime=glutGet(GLUT_ELAPSED_TIME)/1000;

fSimTime=fTime-fLastIdleTime;

animation(fSimTime);

fLastIdleTime=fTime;

glutPostRedisplay();
}

void visible(int iVis)
{
if(iVis==GLUT_VISIBLE)
	glutIdleFunc(idle);
else
	glutIdleFunc(NULL);

return;
}

void animation(float fSimTime)
{
float fAngle;

glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);

fAngle=fSimTime*iSpeed; 

glTranslatef( 26.00f, 2.00f, 18.95f);
glRotatef(fAngle, 0, 0, 1);
glColor3ub(100, 100, 100);
glCallList(cog);
glRotatef(-fAngle, 0, 0, 1);
glTranslatef(-26.00f,-2.00f,-18.95f);

glTranslatef( 23.00f, 2.00f, 18.95f);
glRotatef(fAngle+25, 0, 0, 1);
glColor3ub(100, 100, 100);
glCallList(cog);
glRotatef(-fAngle-25, 0, 0, 1);
glTranslatef(-23.00f,-2.00f,-18.95f);

glDisable(GL_COLOR_MATERIAL);

}