/*
**	$VER: bigPoly.c 1.1 (12.03.1998)
**
**	This is an example program for CyberGL
**
**      Written by Frank Gerberding
**
**	Copyright © 1996-1998 by phase5 digital products
**      All Rights reserved.
**
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include <clib/exec_protos.h>

#define CYBERGLNAME             "cybergl.library"
#define CYBERGLVERSION          39L


#define SHARED                  /* we use the cyberglshared library */
#define GL_APICOMPATIBLE        /* we use stubs from cybergl.lib */


#include <cybergl/cybergl.h>
#include <proto/cybergl.h>

#ifdef SHARED
LONG __oslibversion   = 39L;
LONG __CGLlibversion = CYBERGLVERSION;
#endif

#define WIDTH    600
#define HEIGHT   450





void handle_window_events (struct Window *window)
{
  struct IntuiMessage *msg;
  int                  done = 0;

  while (!done)
  {
    Wait (1L << window->UserPort->mp_SigBit);
    while ((!done) && (msg = (struct IntuiMessage *) GetMsg (window->UserPort)))
    {
      switch (msg->Class)
      {
        case IDCMP_CLOSEWINDOW:
          done = 1;
          break;
      }
      ReplyMsg ((struct Message *) msg);
    }
  }
}





void drawDisk (int stepnum)
{
  double angle;
  double step;

/*
  GLdouble plane [] = {-1.0, -1.0, 1.0,  -0.5};

  glClipPlane (GL_CLIP_PLANE0, plane);
  glEnable    (GL_CLIP_PLANE0);
*/

  glMatrixMode   (GL_PROJECTION);
  glLoadIdentity ();
  glOrtho2D      (-1.33333, 1.33333, -1.0, 1.0);

  step = 360.0 / (double) stepnum;
  glBegin (GL_POLYGON);
    for (angle = 0.0; angle <= 360.1 - step; angle += step)
    {
      glColor3d  (angle / 360.0, 0.0, 0.01);
      glVertex2d (-sin (angle * 3.14159265 / 180.0), cos (angle * 3.14159265 / 180.0));
    }
  glEnd ();
}





void main (int argc, char *argv[])
{
  void *window;
  int   edgeNum = 20;

  if (argc > 1)
  {
    sscanf (argv [1], "%d", &edgeNum);
  }

  window  = openGLWindowTags (WIDTH, HEIGHT, GLWA_Title, "HSV Disk",
                                             GLWA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY,
                                             GLWA_CloseGadget, TRUE,
                                             GLWA_DepthGadget, TRUE,
                                             GLWA_DragBar,     TRUE,
                                             GLWA_Activate, TRUE,
                                             GLWA_RGBAMode, GL_TRUE,
                                             TAG_DONE);
  if (window)
  {
    glEnable         (GL_DITHER);
    glShadeModel     (GL_SMOOTH);
    glClear          (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    drawDisk         (edgeNum);

    handle_window_events (getWindow (window));

    closeGLWindow (window);
  }
}
