Apêndice


= Apêndices =

== Apêndice A - Compilando o GRAFO ==

Esse capitulo tem a intenção de auxiliar a quem vier a fazer uma futura manutenção
ou melhoria no **GRAFO**. Mostra de maneira simplificada a estrutura de diretórios
e o conteúdo de cada arquivo e os pacotes de dependência do **GRAFO** e onde
pode-se obter os arquivos fontes.


=== Obtenção dos Fontes ===

Os fontes devem ser obtidos através do //Subversion// do //AlgLab// para isto deve-se
solicitar a inclusão de sua chave pública ao professor //André Guedes// <andre@inf.upfr.br>.

- **Gerando chave pública** 

Para geração de chave pública //RSA// execute o comando abaixo:
```
ssh-keygen -t rsa
```
Enviar o arquivo ``{$HOME}\.ssh\id_rsa.pub`` ao professor //André Guedes//.

- **Fazendo //Checkout// dos fontes**

```
mkdir <DIRETÓRIO DO GRAFO>

svn checkout svn+ssh://andre@fradim.inf.ufpr.br/alglab/grafo/ <DIRETÓRIO DO GRAFO>
```


=== Pacotes necessários ===

Os pacotes abaixo relacionados são necessários para a compilação. Em muitos
ambientes alguns destes já virão instalados por padrão. Esta lista foi obtida
a partir de um //Linux Ubuntu 7.10// com a sua instalação padrão.

- sudo apt-get install g++
- sudo apt-get install build-essential
- sudo apt-get install libtool
- sudo apt-get install libgtk2.0-dev
- sudo apt-get install libgtkgl2.0-dev
- sudo apt-get install xlibmesa-gl-dev
- sudo apt-get install libgl1-mesa-dev
- sudo apt-get install gtkglarea5-dev
- sudo apt-get install freeglut3-dev



=== Compilação, Execução e Instalação ===

- **Compilação**

Para gerar o programa executável a partir dos fontes obtidos do //Subversion// faça:
```
cd <DIRETÓRIO DO GRAFO>

cd src

./configure

make
```

- **Execução**

Para executar o programa a partir do compilação acima faça:
```
./grafo
```

- **Instalação**

O arquivo executável será instalado no diretório ``/usr/bin``. É necessário privilégio
de //root// para fazer esta operação.
```
make install

```


=== Estrutura e conteúdo de diretórios ===

A seguir segue a estrutura de diretório e uma breve descrição do conteúdo dos
arquivos que compõem o **GRAFO**.

 - **/grafo**
  - AUTHORS
  - CHANGES
  - COPYING
  - README
  - **/icons**
   - k3.xpm
   - k5.xpm
  - **/docs**
   - <Arquivos para composição deste documento>
  - **/examples**
   - <Arquivos de exemplos de grafos>
  - **/src**
   - aclocal.m4
   - alghandler.c
   - alghandler.h
   - color.h
   - color.c
   - config.h.in
   - configure
   - configure.in
   - draw.c
   - draw.h
   - geometry.c
   - geometry.h
   - gr.c
   - grafodoc.t2t
   - graph.c
   - graph.h
   - list.c
   - list.h
   - Makefile.in
   - pgin.c
   - pgin.h
   - plugins.c
   - plugins.h
   - rc.c
   - rc.h
   - rw.c
   - rw.h
   - step.c
   - step.h
   - **/iface**
    - callbacks.c
    - callbacks.h
    - factory.c
    - factory.h
    - iface.c
    - iface.h
    - pixmaps.h
    - pixmaps2.h
   - **/plugins**
    - chcolor.c
    - chordalize.c
    - components.c
    - conected.c
    - delaunay.c
    - edgeexample.c
    - euler.c
    - getsp.c
    - hw.c
    - Makefile
    - paley.c
    - selectoddexample.c
    - stargraphexample.c
    - vertexexample.c


=== Descrição e conteúdo dos arquivos ===

- **/grafo**

**//AUTHORS//**

Lista de autores do GRAFO.

**//CHANGES//**

Descrição de correções, melhorias em cada versão.

**//COPYING//**

Cópia da GNU GENERAL PUBLIC LICENSE

**//README//**

Breve apresentação e instruções para compilação.

 - **icons**

**//k3.xpm//**

Ícone do GRAFO com 3 vértices.
 
**//k5.xpm//**

Ícone do GRAFO com 5 vértices.

 - **/docs**

Contém os arquivos necessários para confeccionar este documento

 - **/examples**
 
Contém os exemplos de grafos no formato (.gr) dos exemplos utilizados neste documento
   
 - **/src**

**//alghandler.{c,h}//**

Responsável por manipular a lista de algoritmos disponíveis para o GRAFO. A lista pode incluir algoritmos nativos ou em plugins.

**//algorithms.{c,h}//**

Contem a lista de algoritmos nativos do GRAFO.

**//color.{c,h}//**

Definição de cores disponíveis.

**//draw.{c,h}//**

Responsável por tratar a estrutura que destaca vértices e arestas na interface do GRAFO.

**//geometry.{c,h}//**

Redesenha o grafo em uma nova forma (em circulo, ocupando o máximo da janela) ou utiliza o Neato e o DOT para redesenhar o grafo.

**//gr.c//**

Programa principal; aloca espaço para a estruturas do grafo e desenho; instala algoritmos nativos; chama instalador de plugins; chama leitura de configurações;

**//graph.{c,h}//**

Manipula estrutura do grafo; insere, remove, move e edita vértices e arestas; copia; aloca; inicializa estrutura para o grafo.

**//list.{c,h}//**

Implementação de lista e pilha para ser utilizado pelo grafo. Ex Lista de algoritmos, pilha de vértices visitados etc.

**//pgin.{c,h}//**

Responsável por criar e exibir os diálogos de entrada de parâmetros.

**//plugins.{c,h}//**

Manipula carga e descarga de plugins.

**//rc.{c,h}//**

Manipula leitura e escrita do arquivo de configuração (.graforc).

**//rw.{c,h}//**

Manipula leitura e escrita dos formatos de arquivos suportados pelo grafo. (//.gr//, //.dot//, //.ps//)

**//step.{c,h}//**

Estruturas para implementação de algoritmos passo a passo.

  - **/iface**

**//callbacks.{c,h}//**

Responsável por tratar todas as chamadas da interface. Menus, Toolbar e etc.

**//factory.{c,h}//**

Responsável por criar os componentes da interface.

**//iface.{c,h}//**

Responsável pela declaração dos componentes da interface.

**//pixmaps{,2}.h//**

Conjunto de imagens utilizadas em botões e menus.
 
  - **/plugins**

**//chcolor.c//**

Colore um grafo cordal usando algoritmo descrito em Gavril [72].

Obs.: Plugin não finalizado pelos autores originais.

**//chordalize.c//**

Insere arestas de maneira a transformar um grafo em um grafo cordal.

**//components.c//**

Retorna o número de componentes do grafo.

**//conected.c//**

Testa a conectividade do grafo.

**//delaunay.c//**

Cria triangulação Delaunay de um conjunto de vértices.

**//edgeexample.c//**

Exemplo de como utilizar a lista de arestas especiais //special edge// dento do GRAFO. Esta lista que é responsável por destacar as arestas dentro da interface do GRAFO. 

**//euler.c//**

Testa se o grafo tem um //caminho de Euler//.

**//getsp.c//**

Exemplo de como trabalhar com passagem de parâmetros para o grafo. Como inteiros, ponto flutuante e strings.

**//hw.c//**

Exemplo de plugin minimalista //Hello World!//.

**//Makefile//**

Arquivo de makefile para compilar os plugins.

**//paley.c//**

Gera um grafo de //Paley// a partir de um número de vértices informado.

**//selectoddexample.c//**

Seleciona todos os vértices ímpares e todas as arestas que conectam dois vértices ímpares

**//stargraphexample.c//**

Gera um grafo em estrela de acordo com o número de vértices informado.

**//vertexexample.c//**

Exemplo de como utilizar a lista de vértices especiais //special vertex// dento do GRAFO. Esta lista que é responsável por destacar os vértices dentro da interface do GRAFO. 


== Apêndice B - Fontes dos plugins de exemplo ==

=== Hello Word! - (hw.c) ===

%!include(html): ''include/09-Apendice-01-hw.c.html'' 

=== Get some parameters - (getsp.c) ===

%!include(html): ''include/09-Apendice-02-getsp.c.html'' 

=== Generate Star Graphs - (stargraphexample.c) ===

%!include(html): ''include/09-Apendice-03-stargraphexample.c.html'' 

=== Highest Degree - (vertexexample.c) ===

%!include(html): ''include/09-Apendice-04-vertexexample.c.html'' 

=== Some Edge - (edgeexample.c) ===

%!include(html): ''include/09-Apendice-05-edgeexample.c.html'' 

=== Select odd - (selectoddexample.c) ===

%!include(html): ''include/09-Apendice-06-selectoddexample.c.html'' 


