Listing 1

/*  a few defines that make this more readable */
#define VRES config.mode.disp_vres
#define HRES config.mode.disp_hres
#define CHAR_WIDE font.charwide
#define CHAR_HIGH font.charhigh

integer opengraphics()
{
  integer ret_code;
  integer status = 1;
  integer screens;
  
  screens = scrnparams[0];
  
  /*  init the TIGA interface */
  if (!set_videomode(TIGA, INIT_GLOBALS | CLR_SCREEN))
    {
      /*  tell them we just couldn't init the card */
      cputs("failed in set_videomode()\n\r");
      status = 13;
    }
  else
    if ((ret_code = install_primitives()) < 0)
      {
        cputs("failed in install_primitives()\n\r");
        status = 12;
      }
  if (status == 1)
    {
      /*  init global variables */
      get_config(&config);
      get_fontinfo(0, &font);
      dispcolors = (integer)config.mode.palet_size - 1;
      xdots = HRES - 1;
      ydots = VRES - 1;
      maxgrrow = VRES / CHAR_HIGH;
      maxgrcol = HRES / CHAR_WIDE;
      gdrawmode = REPLACE;
      
      set_textattr( "%1a", 0, 0 );
      
      /*  set up the viewport struct so VCAD knows how big
         this card is... */
      if (screens == 1)
        {
         sharedscreen = TRUE;
         /*  Setup viewport related parameters */
         viewport.vpxl = 10 * CHAR_WIDE;
         viewport.vpxr = xdots;
         viewport.vpyb = 4 * CHAR_HIGH;
         viewport.vpyt = ydots;
         /*  Viewport extremes in character (row,col)
            coordinates */
         viewport.vtxl = 10;
         viewport.vtxr = maxgrcoù;
         viewport.vtyb = maxgrrow = 4;
         viewport.vtyt = 0;
        }
      else
        { /*  2 screen */
         sharedscreen = FALSE;
         /*  Setup viewport related parameters */
         viewport.vpxl = 0;
         viewport.vpxr = xdots;
         viewport.vpyb = 0;
         viewport.vpyt = ydots;
         /*  Viewport extremes in character (rew,col)
            coordinates */
         viewport.vtxl = 0;
         viewport.vtxr = maxgrco|;
         viewport.vtyb = maxgrrow;
         viewport.vtyt = 0;
        }
      /*  set up the clipping rect */
      set_clip_rect(
                 viewport.vpxr - viewport.vpxl,
                 viewport.vpyt - viewport.vpyb,
                 viewport.vpxl,
                 ydots-viewport.vpyt);
      clear_screen(0);
      if (sharedscreen) dispstate = GRAPHICS;
      else dispstate = TEXT;
      
      graphwasinit = TRUE;
    }
  return((integer) (status));
} /*  opengraphics */