#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int iniciar_grafico()
{
   int gdriver = DETECT, gmode;

   /* inicia modo grafico */
   /* IMPORTANTE: nao esquecer de confirmar o
                  local do diretorio BGI */
   initgraph(&gdriver, &gmode, "c:\\tc\\bgi");

   return(graphresult());
}

void fechar_grafico()
{
   /* encerra modo grafico */
   closegraph();
}

void oito(int x, int y, int tamanho)
{
   /*
     Desenha um dĄgito 8 em formato de display
     de sete segmentos.
   */
   int desv;

   desv = tamanho / 20;

   /* barra esquerda superior */
   bar(x, y + desv, x + tamanho / 10, y + tamanho - desv);
   /* barra esquerda inferior */
   bar(x, y + tamanho + desv * 2, x + tamanho / 10, y + tamanho * 2 + desv);
   /* barra direita superior */
   bar(x + tamanho + tamanho / 10 + desv * 2, y + desv, x + tamanho + tamanho / 5 + desv * 2, y + tamanho - desv );
   /* barra direita inferior */
   bar(x + tamanho + tamanho / 10 + desv * 2, y + tamanho + desv * 2, x + tamanho + tamanho / 5 + desv * 2, y + tamanho * 2 + desv);
   /* barra horizontal superior */
   bar(x + tamanho / 10 + desv, y, x + tamanho + tamanho / 10 + desv, y + tamanho / 10);
   /* barra horizontal do meio */
   bar(x + tamanho / 10 + desv, y + tamanho - desv / 2, x + tamanho + tamanho / 10 + desv, y + tamanho + tamanho / 10 - desv / 2);
   /* barra horizontal inferior */
   bar(x + tamanho / 10 + desv, y + tamanho * 2, x + tamanho + tamanho / 10 + desv, y + tamanho * 2 + tamanho / 10);
}

void dois_pontos(int x, int y, int tamanho)
{
   int desv;

   desv = tamanho / 2;

   bar(x, y + desv, x + tamanho / 10, y + tamanho / 10 + desv);
   bar(x, y + desv * 2, x + tamanho / 10, y + desv * 2 + tamanho / 10);
}

void main()
{
   int errorcode;

   errorcode = iniciar_grafico();
   if (errorcode != grOk)
   {
      printf("Erro ao iniciar modo grafico: %s\n", grapherrormsg(errorcode));
      printf("Pressione uma tecla para sair.");
      getch();
      exit(1);
   }

   oito(400, 100, 50);
   dois_pontos(480, 100, 50);
   oito(500, 100, 50);

   getch();

   fechar_grafico();
}

