# Ferramentas

## Introdução

O &okteta; traz algumas ferramentas, algumas delas para analisar e manipular as sequências de 'bytes' e outras com fins mais gerais. Estas ferramentas poderão ser ativadas ou desativadas com o item Ferramentas do menu. Cada ferramenta tem uma área pequena que se associa a uma das barras laterais ou que flui livremente como uma janela. Você poderá acoplar, desacoplar, reorganizar e também empilhar as áreas de ferramentas com o mouse, clicando com o &LMB; na barra de título de uma área de ferramentas, movendo-o como desejar e soltando o &LMB; para completar a ação, ou, caso contrário, cancelando o movimento com a tecla &Esc;.

### Analisadores e Manipuladores

Tabela de 'Bytes'

  A tabela apresenta todos os valores possíveis de um 'byte', quer na forma numérica quer na de caracteres.

  O valor selecionado poderá ser inserido na posição do cursor, repetida numa determinada quantidade de vezes. Isto poderá ser obtido usando-se o botão Inserir ou fazendo um duplo-clique na linha da tabela.

Filtro Binário

  O filtro efetua operações binárias sobre os 'bytes' selecionados. Depois de selecionar a operação (E, OU, RODAR...), você poderá definir os parâmetros, se necessário, na área abaixo. O filtro é executado quando usar o botão Filtro.

Cadeias de caracteres

  Esta ferramenta localiza os pedaços de texto nos 'bytes' selecionados. Depois de escolher o tamanho mínimo do texto, estes pedaços são pesquisados, bastando para isso usar o botão Extrair. A lista de textos apresentados poderá ser refinada se inserir um termo de filtragem.

Estatísticas

  Esta ferramenta gera algumas estatísticas sobre a sequência de 'bytes'. As estatísticas fornecem a frequencia de ocorrência de cada 'byte' na seleção. Ela pode ser calculada usando o botão Construir.

Código de validação

  Esta ferramenta calcula diversos códigos de verificação (checksums ou hashsums) para os 'bytes' selecionados. Depois de escolher a operação e definir os parâmetros, se necessários, o somatório é calculado ao usar o botão Calcular.

Tabela de Decodificação

  A tabela apresenta o valor do 'byte' ou 'bytes' que começam no cursor, interpretado como um tipo de dados simples, como o Inteiro ou Real, mas também como UTF-8. Ao fazer duplo-clique sobre uma linha da tabela, será aberto um editor, de modo que o valor possa ser editado e alterado.

Estruturas

  Esta ferramenta ativa a investigação e edição das sequências de 'bytes', baseando-se nas definições de estruturas criadas pelo usuário. As instruções detalhadas sobre isto estão na sua própria seção.

### Ferramentas gerais

Sistema de arquivos

  Esta ferramenta oferece um navegador de arquivos incorporado que poderá usar para selecionar os arquivos a abrir.

Documentos

  Esta ferramenta mostra todos os arquivos carregados ou criados atualmente. Os símbolos marcam o arquivo com a área ativa e também mostram os arquivos que possuem alterações por salvar ou qual a cópia armazenada que foi modificada por outro programa.

Favoritos

  Esta ferramenta poderá ser usada para gerenciar os favoritos, como alternativa ao menu Favoritos.

  Os favoritos são atualmente transitórios e não são salvos ao fechar uma lista de 'bytes' ou o programa em si.

Informações do Arquivo

  Esta ferramenta mostra algumas informações sobre o arquivo atual, incluindo o seu tipo, a localização do armazenamento e o tamanho.

## Ferramenta de Estruturas

### Geral

A ferramenta de Estruturas permite a análise e edição de sequências de 'bytes' com base na definição de estruturas criadas pelo usuário, as quais poderão ser compostas por listas, uniões, tipos primitivos e enumerados.

Ela tem uma janela de configuração própria, que poderá ser acessada com o botão Configurações. Existem várias opções que poderão ser configuradas, como o estilo (decimal, hexadecimal ou binário) no qual são apresentados os valores. Além disso, é possível escolher as definições de estruturas que são carregadas e quais são apresentadas na janela.

As estruturas são definidas nos arquivos de Definição de Estruturas do &okteta; (baseados em &XML;, com a extensão `.osd`). Além disso, um arquivo `.desktop` contém os meta-dados sobre esse arquivo de descrição de estruturas, como o autor, a página Web e a licença.

Atualmente, não existe nenhum suporte incorporado para criar, editar ou instalar as definições das estruturas, assim elas deverão ser criadas manualmente, como se encontra descrito nas seções a seguir.

### Instalar as definições das estruturas

A ferramenta de Estruturas procura pelas descrições de estruturas na sub-pasta `share/apps/okteta/structures/` da pasta do usuário para os dados dos aplicativos (descubra-a com o comando ``kde4-config` `--localprefix``). Você poderá ter que criar esta pasta, caso não existam ainda nenhumas definições de estruturas instaladas.

Nessa sub-pasta, existe uma sub-pasta própria para cada definição de estruturas, a qual contém tanto o arquivo `.desktop` como o `.osd` para essa definição.

Por exemplo, com a pasta de dados dos aplicativos `.kde` e com uma definição de estrutura chamada EstruturaExemplo, existe a pasta `.kde/share/apps/okteta/structures/EstruturaExemplo`, que contém um arquivo `EstruturaExemplo.desktop` e um arquivo `EstruturaExemplo.osd`.

Se você tiver instalado uma nova definição de estruturas, criando uma destas sub-pastas com os dois arquivos ou editando os mesmos, você terá que reiniciar o &okteta; e abrir a janela de configuração da ferramenta de Estruturas. Aí, selecione a página de Gerenciamento das Estruturas e certifique-se de que a definição da estrutura relevante é assinalada. Depois, use o botão Aplicar as Alterações, mude para a página Estruturas e certifique-se de que o elemento desejado está listado no lado direito.

### Compartilhar definições de estruturas

Para as estruturas comuns, você poderá não ter que criar você mesmo uma definição, mas sim reutilizar uma definição já existente de locais como o kde-files.org.

Você poderá também querer compartilhar você mesmo uma definição. Para fazer isso, crie um pacote de arquivos (p. ex., um pacote tar.gz ou `.tgz`) contendo apenas a sub-pasta com o arquivo `.osd` e o `.desktop`. No exemplo da última seção, seria a sub-pasta `EstruturaExemplo`. Se aderir a este formato, as futuras versões da ferramenta de Estruturas poderão transferir e instalar automaticamente essas definições.

### Criar a sua própria definição de estruturas

#### Uma primeira definição de estrutura

Para começar, vamos criar uma definição para uma estrutura de testes muito simples, contendo apenas tipos de dados primitivos (um caractere e um inteiro de 32-bits). Estes seriam expressos em C/C++ como:

              struct simples {
                char umCaractere;
                int umInteiro;
              };

O primeiro passo é criar o arquivo `.osd`, que se chamará `estruturasimples.osd`:

              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                <struct name="simples">
                  <primitive name="umCaractere" type="Char"/>
                  <primitive name="umInteiro" type="Int32"/>
                </struct>
              </data>

, que é relativamente parecido com a definição em C/C++. O atributo do tipo poderá ser qualquer um dos seguintes:

- Char
- Int8
- UInt8
- Int16
- UInt16
- Int32
- UInt32
- Int64
- UInt64
- Float
- Double
- Bool8
- Bool16
- Bool32
- Bool64

O próximo passo é criar o arquivo `.desktop` para os meta-dados, que é basicamente um conjunto de pares chave-valor. Ele deverá se chamar `estruturasimples.desktop`. Neste exemplo, será algo do gênero:

              [Desktop Entry]
              Encoding=UTF-8
              Icon=arrow-up
              Type=Service
              ServiceTypes=KPluginInfo

              Name=Estrutura de testes simples
              Comment=Uma estrutura de testes muito simples que contém apenas dois itens

              X-KDE-PluginInfo-Author=Marcus Gama
              X-KDE-PluginInfo-Email=marcus.gama@exemplo.com
              X-KDE-PluginInfo-Name=estruturasimples
              X-KDE-PluginInfo-Version=1.0
              X-KDE-PluginInfo-Website=http://www.plugin.org/
              X-KDE-PluginInfo-Category=structure
              X-KDE-PluginInfo-License=LGPL
              X-KDE-PluginInfo-EnabledByDefault=false

Estes campos deverão todos ser relativamente intuitivos, excetuando o `X-KDE-PluginInfo-Name`. Este deverá ter o nome do arquivo `.osd` como valor (sem o sufixo `.osd`).

Agora crie uma sub-pasta `estrutura-simples` como descrito acima, copie os dois arquivos para esta pasta e reinicie o &okteta;.

#### Estruturas mais complexas

A seguir, iremos criar uma estrutura mais complexa, que irá se chamar "complexa" e salvá-la num arquivo `complexa.osd`. Esta estrutura irá conter duas listas (uma de tamanho fixo e outra com o tamanho determinado durante a execução), assim como uma estrutura encadeada e uma união.

              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                <struct name="complexa">
                  <primitive name="tamanho" type="UInt8" />
                  <union name="umaUniao">
                    <array name="quatroBytes" length="4">
                      <primitive type="Int8" />
                    </array>
                  </union>
                  <struct name="encadeado">
                    <array name="texto" length="tamanho"> <!-- referencia o campo 'tamanho' acima -->
                      <primitive type="Char" />
                    </array>
                  </struct>
                </struct>
              </data>

Isto irá corresponder ao seguinte, em pseudo-C/C++

    struct complexa {
                uint8_t tamanho;
                union umaUniao {
                  int8_t quatroBytes[4];
                };
                struct encadeado {
                  char texto[tamanho] //C++ não válido por referenciar o valor de 'tamanho'
                };
              };

Obviamente, você só poderá ter campos de referência de listas de tamanho dinâmico antes da lista.

A seguir, será criado o arquivo `complexo.desktop`, como foi feito no exemplo anterior (certifique-se de que define o `X-KDE-PluginInfo-Name` corretamente) e faça o mesmo para instalar ambos os arquivos.

#### Mais informações

Alguns exemplos de definições de estruturas poderão ser encontrados aqui. Isto inclui, por exemplo, o cabeçalho dos arquivos PNG. Você poderá encontrar um esquema em &XML; que descreve a estrutura do arquivo `.osd` aqui. Se precisar de mais informações, sinta-se à vontade em contactar-me em &Alex.Richardson.email;