/* w4gl.c                                         */
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* menu item numbers   */
#define FILE_NEW        1
#define FILE_OPEN       2
#define FILE_PRINT      3
#define FILE_QUIT       4
#define ENTER_EASY     11
#define ENTER_COMPLETE 12

static int  winWidth, winHeight;
static int  debug = 1;

static void display(void)
{
  int len, i;
  char msg[] = "right click for menu";

  glClearColor(1.0, 1.0, 1.0, 1.0);
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  /* view transform */
  glLoadIdentity();

  /* for future use */


  glPushMatrix();
    glColor3f(1.0, 0.0, 0.0);
    glRasterPos2f(0.0, 0.0);
    len = strlen(msg);
    for (i = 0; i<len; i++)
      glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, msg[i]);
  glPopMatrix();

  glFlush();
  glutSwapBuffers();
}

static void mouseButton(int button, int state, int x, int y)
{
  /* for future use, except right button is menu */
  glutPostRedisplay();
}

static void myReshape(int w, int h)
{
  glViewport(0, 0, w, h);
  winWidth = w;
  winHeight = h;
  /* future use */
}

static void keyboard(unsigned char key, int x, int y)
{
  switch(key)
  {
    case 'a':    /* future use  */
      break;
    default:
      break;
  }
  glutPostRedisplay();
} /* end keyboard */

static void menu_item(int item)
{
  if(debug) printf("menu item item=%d\n", item);
  switch(item)
  {
    case FILE_NEW:
      printf("File, New\n"); /* do simple actions here */
      break;                 /* call function if more than a few lines */
    case FILE_OPEN:
      printf("File, open\n");
      break;
    case FILE_PRINT:
      printf("File, Print\n");
      break;
    case FILE_QUIT:
      printf("File, Quit\n");
      break;
    case ENTER_EASY:
      printf("Enter, Easy\n");
      break;
    case ENTER_COMPLETE:
      printf("Enter, Complete\n");
      break;
    default:
      break;
  }
  glutPostRedisplay();
}

int main(int argc, char *argv[])
{
  int sub1, sub2;
  
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  glutInitWindowSize(300, 300);
  glutInitWindowPosition(100,100);
  glutCreateWindow(argv[0]);
  glutReshapeFunc(myReshape);
  glutDisplayFunc(display);
  glutMouseFunc(mouseButton);
  glutKeyboardFunc(keyboard);
  sub1 = glutCreateMenu(menu_item); /* create lowest submenu first */
     glutAddMenuEntry("New", FILE_NEW);
     glutAddMenuEntry("Open", FILE_OPEN);
     glutAddMenuEntry("Print", FILE_PRINT);
     glutAddMenuEntry("Quit", FILE_QUIT);
  sub2 = glutCreateMenu(menu_item);
      glutAddMenuEntry("Easy", ENTER_EASY);
      glutAddMenuEntry("Complete", ENTER_COMPLETE);
  glutCreateMenu(menu_item); /* top menu callback, add submenus */
    glutAddSubMenu("File", sub1);
    glutAddSubMenu("Enter", sub2);
  glutAttachMenu(GLUT_RIGHT_BUTTON);
  glutMainLoop();
  return 0;
}

