Problem with Icosahedron Example

Hello,

I followed an example from the OpenGL programming book(red book) on drawing an icosahedron, but I am only getting a black screen when I run my code.
I am using GLFW for window handling. I tried to follow the example as closely as possible.

Any suggestions as to how this might be fixed and/or a diagnosis of the problem would be much appreciated
I’m not using any real lighting or shading yet, so pay no attention to the calls to shading functions.

static void error_callback(int error, const char* description)
{
    fputs(description, stderr);
}

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}


int main(int argc, char* argv[])
{
	GLFWwindow* window;
	glfwSetErrorCallback(error_callback);

	if (!glfwInit())
		exit(EXIT_FAILURE);

	window = glfwCreateWindow(800, 600, WINDOW_NAME, NULL, NULL);
	if (!window)
	{
		glfwTerminate();
		exit(EXIT_FAILURE);
	}

	glfwMakeContextCurrent(window);
	glfwSetKeyCallback(window, key_callback);
	glfwSwapInterval(1);
	glShadeModel(GL_SMOOTH);  //Enable smooth shading
	glClearDepth(1.0f);                             
	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LEQUAL);  //Depth test function to use
	//glEnable(GL_COLOR_MATERIAL);
	//glEnableClientState(GL_VERTEX_ARRAY);
	//glFrontFace(GL_CW);
	//glDisable(GL_CULL_FACE);
	//glPolygonMode( GL_FRONT_AND_BACK, GL_LINE); //set to draw wirefram
	#define X 0.525731112119133606
	#define Z 0.850650808352039932

	static GLfloat vdata[12][3] = { (-X, 0.0, Z), (X, 0.0, Z), (-X, 0.0, -Z), (X, 0.0, -Z),
		(0.0, Z, X), (0.0, Z, -X), (0.0, -Z, X), (0.0, -Z, -X),
		(Z, X, 0.0), (-Z, X, 0.0), (Z, -X, 0.0), (-Z, -X, 0.0)
	};

	static GLuint tindices[20][3] = { (0,4,1), (0,9,4), (9,5,4), (4,5,8), (4,8,1),
		(8,10,1), (8,3,10),(5,3,8), (5,2,3), (2,7,3),
		(7,10,3), (7,6,10), (7,11,6), (11,0,6), (0,1,6),
		(6,1,10), (9,0,11), (9,11,2), (9,2,5), (7,2,11)
	};

	

	while (!glfwWindowShouldClose(window)) //NEW window loop goes here. I am in control of the loop now
	{
		float ratio;
        int width, height;
        glfwGetFramebufferSize(window, &width, &height);
		if ( height == 0)
			height = 1;

        ratio = width / (float) height;
        glViewport(0, 0, width, height);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
		gluPerspective(45.0, ratio, 1.0, 100.0);
		gluLookAt(0.0,0.0,1.5,0.0,0.0,0.0,0.0,1.0,0.0);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
		//glTranslatef(0.0,0.0,-10.0);
		//gluLookAt(0.0,0.0,1.0,0.0,0.0,0.25,0.0,0.0,1.0);
        //glRotatef((float) glfwGetTime() * 50.f, 0.f, 0.f, 1.f);
		//glRotatef((float) glfwGetTime() * 50.f, 0.f, 1.f, 0.f);
      
		//glColor3f(1.0,0.0,0.0);

		glBegin(GL_TRIANGLES);
		for (int i = 0; i < 20; i++)
		{
			glColor3f((i+0.0)/19.0,(i+0.0)/19.0,(i+0.0)/19.0);
			glVertex3fv(&vdata[ tindices[i][0] ] [0]);
			glVertex3fv(&vdata[ tindices[i][1] ] [0]);
			glVertex3fv(&vdata[ tindices[i][2] ] [0]);

			/*glVertex3f(i/200.0,0.0,i/200.0);  Test Draw - This works, unlike the icosahedron
			glVertex3f(i/200.0 + 0.1, 0.0, i/200.0);
			glVertex3f(i/200.0 + 0.05, 0.1, i/200.0);*/
		}
		glEnd();

        glfwSwapBuffers(window);
        glfwPollEvents();
	}

	glfwDestroyWindow(window);

	
	glfwTerminate(); //Done using glfw
	exit(EXIT_SUCCESS);
}