How to reset Transformations

Im new in opengl. Im using keyboardfunc, when press “+” make my polygons bigger, i want to press “Home” to undo all my changes and get back to original position and size.

// Quadrado.c - Isabel H. Manssour
// Um programa OpenGL simples que desenha um
// quadrado em  uma janela GLUT.
// Este código está baseado no GLRect.c, exemplo
// disponível no livro "OpenGL SuperBible",
// 2nd Edition, de Richard S. e Wright Jr.

#include <windows.h>
#include <gl/glut.h>

GLfloat escala = 1;
GLfloat movx, movy = 0;
GLfloat   win;


// Função callback chamada para fazer o desenho
void Desenha(void)
{
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();

     // Limpa a janela de visualização com a cor de fundo especificada
     glClear(GL_COLOR_BUFFER_BIT);

     // Especifica que a cor corrente é vermelha
     //         R     G     B
     glColor3f(1.0f, 0.0f, 0.0f);

    glPushMatrix();
    glTranslatef(movx,movy,0);
    glScalef(escala, escala, 0);







     // Desenha um quadrado preenchido com a cor corrente
    glBegin(GL_TRIANGLES);
        glColor3f(1,1,0);
        glVertex2f(40,60);
        glVertex2f(20,20);
        glVertex2f(60,20);
    glEnd();

    glBegin(GL_TRIANGLES);
        glVertex2f(20,20);
        glVertex2f(0,-20);
        glVertex2f(40,-20);
    glEnd();

    glBegin(GL_TRIANGLES);
        glVertex2f(60,20);
        glVertex2f(40,-20);
        glVertex2f(80,-20);
    glEnd();

glPopMatrix();
     // Executa os comandos OpenGL
     glFlush();
}

// Inicializa parâmetros de rendering
void Inicializa (void)
{
    // Define a cor de fundo da janela de visualização como preta
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}

// Função callback chamada quando o tamanho da janela é alterado
void AlteraTamanhoJanela(GLsizei w, GLsizei h)
{
                   // Evita a divisao por zero
                   if(h == 0) h = 1;

                   // Especifica as dimensões da Viewport
                   glViewport(0, 0, w, h);

                   // Inicializa o sistema de coordenadas
                   glMatrixMode(GL_PROJECTION);
                   glLoadIdentity();

                   // Estabelece a janela de seleção (left, right, bottom, top)
                   if (w <= h)
                           gluOrtho2D (0.0f, 250.0f, 0.0f, 250.0f*h/w);
                   else
                           gluOrtho2D (0.0f, 250.0f*w/h, 0.0f, 250.0f);
}
// Função callback chamada para gerenciar eventos do teclado
// para teclas especiais, tais como F1, PgDn e Home
void tecla_especial(GLint tecla, GLint x, GLint y)
{
    switch(tecla)
    {
    case GLUT_KEY_RIGHT: movx++;
                        break;
    case GLUT_KEY_LEFT: movx--;
                        break;
    case GLUT_KEY_HOME:glLoadIdentity();
                        break;

    case GLUT_KEY_UP:
         win -= 20;
           glMatrixMode(GL_PROJECTION);
           glLoadIdentity();
           gluOrtho2D (-win, win, -win, win);
                        break;

    case GLUT_KEY_DOWN:
           win += 20;
           glMatrixMode(GL_PROJECTION);
           glLoadIdentity();
           gluOrtho2D (-win, win, -win, win);
                        break;



    }
    glutPostRedisplay();
}

void teclas(unsigned char tecla, int x, int y)
{

  switch(tecla)
  {
    case 27: // Escape key
    case 'q':
        exit(0);
    break;

    case '+':escala=escala*1.5;


    break;

    case '-':escala=escala*0.5;
    break;

    }
    glutPostRedisplay();

}

// Programa Principal
int main(void)
{
     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
     glutInitWindowSize(400,350);
     glutInitWindowPosition(10,10);
     glutCreateWindow("Triforce");
     glutDisplayFunc(Desenha);
     glutSpecialFunc (tecla_especial);
     glutReshapeFunc(AlteraTamanhoJanela);
     glutKeyboardFunc(teclas);
     Inicializa();
     glutMainLoop();
}

  1. Define your transformation setup code in your display function in terms specific parameters
  2. Define what “reset” means (in terms of specific values for those parameters)
  3. On reset, just change the parameter values to those you defined in #2 and force a redisplay (glutPostRedisplay())