[ Previous | Next | Contents | Glossary | Home | Search ]
GL3.2 for AIX: Graphics Library (GL) Technical Reference

circuit.c Example C Language Program

Here is a very simple complete program that draws 
power and ground circuitry.  The interface consists of
the keys P draw power rectangles, G draw ground
rectangles, C clear the window, and Q quit.  To draw a
rectangle, press down the left mouse button at one
corner, hold it down and slide to the other corner,
and release it.
When you use the program, be sure to exit by typing Q.
This resets the four lowest entries in the color map
(which are used by all the windows) back to the default
values. 
*/
#include <gl/gl.h>
#include <gl/device.h>
#define BACKGROUND      0       /* = 00 */
#define POWER           1       /* = 01 */
#define GROUND          2       /* = 10 */
#define SHORT           3       /* = 11 */
long    xorg, yorg, xsize, ysize;
main()
{
  short val, drawtype;
  short x1, y1, x2, y2;
  drawtype = GROUND;
  prefposition (0,800,0,800);
  winopen("circuit");
  winconstraints();
  getorigin(&xorg, &yorg);
  getsize (&xsize,&ysize);
  ortho2 (-0.5,(Coord)xsize,-0.5,(Coord)ysize);
  /*Allow any size to work*/
  gconfig();
  mapcolor(0, 255, 255, 255);
  mapcolor(1, 0, 0, 255);
  mapcolor(2, 0, 0, 0);
  mapcolor(3, 255, 0, 0);
  qdevice(PKEY);                /* draw power rectangles */
  qdevice(GKEY);                /* draw ground rectangles */
  qdevice(CKEY);                /* clear screen */
  qdevice(QKEY);                /* quit */
  qdevice(REDRAW);        
  qdevice(LEFTMOUSE); /* mark rectangle corners */
  tie(LEFTMOUSE, MOUSEX, MOUSEY);
  color(0);
  clear();
  while (1)
    switch (qread(&val)) {
    case PKEY:
      drawtype = POWER;
      break;
    case GKEY:
      drawtype = GROUND;
      break;
    case REDRAW:
      reshapeviewport();
      getorigin(&xorg, &yorg);
      getsize (&xsize,&ysize);
      ortho2 (-0.5,(Coord)xsize,-0.5,(Coord)ysize);
      clearscreen();
      gconfig();
    case CKEY:
      clearscreen();
      break;
    case QKEY:                /* restore default colors */
      mapcolor(0, 0, 0, 0);
      mapcolor(1, 255, 0, 0);
      mapcolor(2, 0, 255, 0);
      mapcolor(3, 255, 255, 0);
      return;
    case LEFTMOUSE:
      qread(&x1);
      qread(&y1);
      qread(&val);
      qread(&x2);
      qread(&y2);
      if (drawtype == POWER)
        powerrect(x1-xorg, y1-yorg,
            x2-xorg, y2-yorg);
      else
        groundrect(x1-xorg, y1-yorg,
            x2-xorg, y2-yorg);
      break;
    }
}
clearscreen()
{
  writemask(3);                /* clear window before drawing. */
  color(BACKGROUND);
  clear();
}
powerrect(x1, y1, x2, y2)
short x1, y1, x2, y2;
{
  writemask(1);
  color(1);
  rectfs(x1, y1, x2, y2);
}
groundrect(x1, y1, x2, y2)
short x1, y1, x2, y2;
{
  writemask(2);
  color(2);
  rectfs(x1, y1, x2, y2);
}
/*
   Changes:
      -The program now starts from the default size window
         prefposition (0,800,0,800);
         getsize (&xsize,&ysize);
         qdevice(REDRAW);        
      -The program now handles resize/redraw
            case REDRAW:
               reshapeviewport();
               getorigin(&xorg, &yorg);
               getsize (&xsize,&ysize);
               ortho2 (-0.5,(Coord)xsize,-0.5,(Coord)ysize);
               clearscreen();
               gconfig();
*/

Related Information

The writemask subroutine.

Writemasks and Logical Operations in GL3.2 Version 4 for AIX: Programming Concepts.


[ Previous | Next | Contents | Glossary | Home | Search ]