#include "cs148.h"


#define	drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); \
	glVertex2f ((x1),(y1)); glVertex2f ((x2),(y2)); glEnd();

GLuint offset;

void myinit (void) {

  offset = glGenLists (3);
  glNewList (offset, GL_COMPILE);
  glDisable (GL_LINE_STIPPLE);
  glEndList ();
  glNewList (offset+1, GL_COMPILE);
  glEnable (GL_LINE_STIPPLE);
  glLineStipple (1, 0x0F0F);
  glEndList ();
  glNewList (offset+2, GL_COMPILE);
  glEnable (GL_LINE_STIPPLE);
  glLineStipple (1, 0x1111);
  glEndList ();
}


void display(void) {

  // background to be cleared to black
  glClearColor (0.0, 0.0, 0.0, 0.0);
  glClear(GL_COLOR_BUFFER_BIT);

	// draw all lines in white
  glColor3f (1.0, 1.0, 1.0);

  glCallList (offset);
  drawOneLine (50.0, 125.0, 350.0, 125.0);
  glCallList (offset+1);
  drawOneLine (50.0, 100.0, 350.0, 100.0);
  glCallList (offset+2);
  drawOneLine (50.0, 75.0, 350.0, 75.0);
  glCallList (offset+1);
  drawOneLine (50.0, 50.0, 350.0, 50.0);
  glCallList (offset);
  drawOneLine (50.0, 25.0, 350.0, 25.0);
  glFlush ();
}


void reshape(int w, int h) {
   glViewport(0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);
}

void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case ' ':
         glutPostRedisplay();
         break;
      case 27:
         exit(0);
   }
}

/*  Main Loop
 *  Open window with initial window size, title bar, 
 *  RGBA display mode, and handle input events.
 */
int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize (400, 150);
   glutInitWindowPosition (0, 0);
   glutCreateWindow ("linelist");
   myinit ();
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glutDisplayFunc(display);
   glutMainLoop();
   return 0;
}

