please help my cube

Who can help me in this code to make my cube make movement in any direction (by the four arrow keys )and bounce off the viewport edges.
I tell you the truth I spent tow days but I failed !!!

Please heeeeeeeeeelp

Winner

my cube code
/*

my cube

*/
#include <stdlib.h>
#include <GL/glut.h>

/*
define vertices {x,y,z} and colors {r,g,b}

*/
GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},
{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},
{1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.0}};

GLfloat normals[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},
{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},
{1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.0}};

GLfloat colors[][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0},
{1.0,1.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},
{1.0,0.0,1.0},{1.0,1.0,1.0},{0.0,1.0,1.0}};

/*

draw polygon

/
void polygon (int a, int b, int c, int d)
{
/
draw a polygon via list of vertices */
glBegin(GL_POLYGON);
glColor3fv(colors[a]);
glNormal3fv(normals[a]);
glVertex3fv(vertices[a]);

glColor3fv(colors[b]);
glNormal3fv(normals[b]);
glVertex3fv(vertices[b]);

glColor3fv(colors[c]);
glNormal3fv(normals[c]);
glVertex3fv(vertices[c]);

glColor3fv(colors[d]);
glNormal3fv(normals[d]);
glVertex3fv(vertices[d]);
glEnd();

}

/*
draw cube

/
void colorcube(void)
{
/
draw 6 faces of cube */
polygon(0,3,2,1);
polygon(2,3,7,6);
polygon(0,4,7,3);
polygon(1,2,6,5);
polygon(4,5,6,7);
polygon(0,1,5,4);
}

static GLfloat theta[] = {0.0,0.0,0.0};
static GLint axis = 0;

/*
rotate angle (theta) and display cube
/
void display (void)
{
/
display callback*/
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glRotatef(theta[0],1.0,0.0,0.0);
glRotatef(theta[1],0.0,1.0,0.0);
glRotatef(theta[2],0.0,0.0,1.0);

/* draw cube */
colorcube();

glFlush();
glutSwapBuffers();

}

/*
increment angle (theta)
*/
void SpinCube()
{
theta[axis] +=2.0;
if (theta[axis] > 360.0) theta[axis] -=360.0;
display();
}

/*
use mouse to choose axis of rotation
*/
void mouse (int btn, int state, int x, int y)
{
if(btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN)axis=0;
if(btn == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN)axis=1;
if(btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)axis=2;
}

/*
define orthographic projection
*/
void myReshape (int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-2.0,2.0,-2.0 * (GLfloat) h / (GLfloat) w,
2.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0);
else
glOrtho(-2.0 * (GLfloat) h / (GLfloat) w,
2.0 * (GLfloat) h / (GLfloat) w, -2.0, 2.0, -10.0, 10.0);

glMatrixMode(GL_MODELVIEW);

}

/*
main program loop
/
void main (int argc, char
* argv)
{
glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutCreateWindow("Use Left-Right-Middel buttons to rotate");

glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glutIdleFunc(SpinCube);
glutMouseFunc(mouse);
glEnable(GL_DEPTH_TEST);

glutMainLoop();

}