# Tööriistad

## Ülevaade

&okteta; pakub mitmeid tööriistu: osad on mõeldud baidimassiivide analüüsimiseks ja käitlemiseks, mõned on üldisemad. Tööriistu saab nähtavale tuua või varjata vastavate kirjetega menüüs Tööriistad. Kõigil tööriistadel on pisike vaade, mis paikneb dokina ühel külgribadest või vabalt omaette aknana. Tööriistavaateid saab dokkida, dokist vabastada, ümber korraldada ja pinusse seada hiirega või tööriistavaate tiitliribal &HVNga; klõpsates ja seda vajalikku kohta liigutades, pärast mida tuleb &HVN; toimingu lõpetamiseks lahti lasta või toimingust loobuda klahvile &Esc; vajutades.

### Analüsaatorid ja käitlejad

Baiditabel

  Tabel toob ära kõik võimalikud baidiväärtused nii märk- kui arvväärtusena.

  Valitud väärtuse saab sisestada kursori asukohta. Selleks tuleb klõpsata nupule Lisa või teha tabelis real topeltklõps.

Binaarfilter

  Filter võimaldab valitud baitidega ette võtta binaartoiminguid. Pärast toimingu (AND, OR, ROTATE...) valimist saab allpool olevas kastis soovi korral paika panna parameetrid. Filtri saab rakendada klõpsuga nupule Filtreeri.

Stringid

  See tööriist tuvastab valitud baitides stringid. Stringi miinimumpikkuse valimise järel hangitakse stringid klõpsuga nupule Hangi. Näidatavate stringide loendit saab piirata, kui sisestada sobiv filter.

Statistika

  Siin näeb valitud baitide statistikat. See näitab iga valikusse kuuluva baidi esinemissagedust. See arvutatakse välja, kui klõpsata nupule Loo.

Kontrollsumma

  See tööriist arvutab mitmesuguseid valitud baitide kontrollsummasid. Pärast algoritmi valimist ja vajaduse korral parameetrite määramist arvutatakse kontrollsumma välja, kui klõpsata nupule Arvuta.

Dekodeerimistabel

  Siin näeb baidi või baitide (alates kursorist) väärtust, mida esitatakse selliste levinud andmetüüpide, nagu täis- või murdarv, aga ka UTF-8 kohta. Tabeli real topeltklõpsu tehes käivitab redaktori, kus saab väärtusi muuta.

Struktuurid

  See tööriist võimaldab baidimassiive uurida ja muuta vastavalt kasutaja määratud struktuuridefinitsioonile. Üksikasjalikumalt kõneldakse selles omaette osas.

### Üldised tööriistad

Failisüsteem

  See tööriist pakub põimitud failisirvijat, mille abil saab valida avatavaid faile.

Dokumendid

  See tööriist näitab kõiki viimati loodud või laaditud faile. Sümbolid tähistavad parajasti aktiivses vaates olevat faili, samuti näitavad, millistes failides on salvestamata muudatusi või millist salvestil leiduvat faili on muutnud mõni muu programm.

Järjehoidjad

  Selle tööriista abil saab hallata järjehoidjaid, mis on võimalik ka järjehoidjate menüü vahendusel.

  Järjehoidjad on praegu ainult ajutised ning neid ei salvestata, kui sulged baidimassiivi või rakenduse.

Failiinfo

  See tööriist näitab mõningat teavet aktiivse faili kohta, sealhulgas selle tüüpi, asukohta ja suurust.

## Struktuuride tööriist

### Üldine

Struktuuride tööriist võimaldab baidimassiive analüüsida ja muuta vastavalt kasutaja loodud struktuuridefinitsioonidele, mida saab luua massiividest, ühendutest, primitiivide tüüpidest ja loendiväärtustest

Tööriistal on oma seadistustedialoog, mille saab avada nupuga Seadistused. Seal saab seadistada mitmesuguseid valikuid, näiteks stiili, millega väärtusi kuvatakse (10nd-, 16nd- või 2nd-süsteem). Samuti saab määrata, millised struktuuridefinitsioonid laaditakse ja milliseid struktuure näidatakse vaates.

Struktuurid on defineeritud &okteta; struktuuridefinitsioonifailides (need on &XML;-failid laiendiga `.osd`). Lisaks sisaldab `.desktop`-fail struktuuridefinitsioonifaili metaandmeid, näiteks autor, kodulehekülg ja litsents.

Praegu puudub struktuuridefinitsioonide loomise, muutmise ja paigaldamise sisseehitatud toetus, mistõttu seda tuleb teha käsitsi, nagu kirjeldatakse järgmistes lõikudes.

### Struktuuridefinitsioonide paigaldamine

Struktuuride tööriist otsib struktuuridefinitsioone kasutaja programmi andmete kataloogi (selle saab teada käsuga ``kde4-config` `--localprefix``) alamkataloogis `share/apps/okteta/structures/`. Kui sul pole veel ühtegi struktuuridefinitsiooni paigaldatud, võib olla vajalik see alamkataloog esmalt luua.

Selles alamkataloogis on oma alamkataloogid igale struktuuridefinitsioonile, mis sisaldavad nii definitsiooni `.desktop`-faili kui ka `.osd`-faili.

Kui näiteks programmi andmete kataloog on `.kde` ja struktuuridefinitsiooni nimi ExampleStructure, siis on olemas kataloog `.kde/share/apps/okteta/structures/ExampleStructure`, mis sisaldab faile `ExampleStructure.desktop` ja `ExampleStructure.osd`.

Kui oled paigaldanud uue struktuuridefinitsiooni, luues sellise kahe failiga alamkataloogi, või neid muutnud, tuleb &okteta; taaskäivitada ning avada struktuuri tööriista seadistustedialoog. Vali seal kaart Struktuuride haldamine ja kontrolli, et vastav struktuuridefinitsioon on märgitud. Seejärel klõpsa nupule Rakenda muudatused, vali kaart Struktuurid ja kontrolli, et soovitud element on ikka parempoolses nimekirjas.

### Struktuuridefinitsioonide jagamine

Levinumate struktuuride jaoks võid muidugi definitsiooni ka ise luua, kuid selle asemel võib kasutada ka teiste loodud definitsioone, mida leiab näiteks veebileheküljelt kde-files.org.

Samuti võib jagada teistega enda loodud definitsioone. Selleks loo failiarhiiv (näiteks zip-pakenduses tar-arhiiv `.tgz`), mis sisaldab alamkataloogi `.osd`- ja `.desktop`-failiga. Eespool toodud näite põhjal oleks selleks alamkataloog `ExampleStructure`. Kui kasutad seda vormingut ka edaspidi, võivad struktuuri tööriista tulevased versioonid pakkuda definitsioonide automaatse allalaadimise ja paigaldamise võimalust.

### Omaenda struktuuridefinitsioonide loomine

#### Esimene struktuuridefinitsioon

Alustuseks loome definitsiooni hästi lihtsale teststuktuurile, mis sisaldab ainult täisarvulisi andmetüüpe (üks märk ja üks 32-bitine täisarv). Need väljenduvad C/C++ keeles järgmiselt:

              struct simple {
                char aChar;
                int anInt;
              };

Esimene samm on kirjutada `.osd`-fail, millele me anname nimeks `simplestruct.osd`:

              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                <struct name="simple">
                  <primitive name="aChar" type="Char"/>
                  <primitive name="anInt" type="Int32"/>
                </struct>
              </data>

mis on päris sarnane C/C++ definitsioonile. Tüübi atribuut võib olla üks järgmistest:

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

Järgmine samm on kirjutada `.desktop`-fail metaandmete tarbeks, mis kujutab endast lihtsalt võtme-väärtuse paaride kogumist. Selle nimeks peab olema `simplestruct.desktop`. Meie näites näeb see välja nii:

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

              Name=Simple test structure
              Comment=A very simple test structure containing only two items

              X-KDE-PluginInfo-Author=Alex Richardson
              X-KDE-PluginInfo-Email=alex.richardson@gmx.de
              X-KDE-PluginInfo-Name=simplestruct
              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

Väljade sisu peaks olema üldiselt enesestmõistetav, välja arvatud `X-KDE-PluginInfo-Name`. Selle väärtus peab olema `.osd`-faili nimi (küll ilma sufiksita `.osd`).

Nüüd tuleb luua alamkataloog `simplestruct`, nagu eespool kirjeldatud, kopeerida kaks faili sellesse kataloogi ja taaskäivitada &okteta;.

#### Keerulisemad struktuurid

Nüüd loome definitsiooni keerulisemale struktuurile, millele annamegi nimeks "complex" ja salvestame failina `complex.osd`. See struktuur sisaldab kaht massiivi (üks kindla pikkusega, teise pikkus määratakse käitusajal) ning pesastatud struktuuri ja ühendit.

              <?xml version="1.0" encoding="UTF-8"?>
              <data>
                <struct name="complex">
                  <primitive name="size" type="UInt8" />
                  <union name="aUnion">
                    <array name="fourBytes" length="4">
                      <primitive type="Int8" />
                    </array>
                  </union>
                  <struct name="nested">
                    <array name="string" length="size"> <!-- references the field size above -->
                      <primitive type="Char" />
                    </array>
                  </struct>
                </struct>
              </data>

Selle vasteks on pseudo C/C++ korral

    struct complex {
                uint8_t size;
                union aUnion {
                  int8_t fourBytes[4];
                };
                struct nested {
                  char string[size] //not valid C++, references value of the uint8 size
                };
              };

Enne massiivi saavad mõistagi olla ainult dünaamilise pikkusega massiivide viidete väljad.

Nüüd loome faili `complex.desktop` samamoodi nagu eelmises näites (kontrolli, et `X-KDE-PluginInfo-Name` oleks ikka korrektselt määratud) ning järgime eelmist näidet ka mõlema faili paigaldamisel.

#### Täiendav teave

Mõningaid näidisstruktuuridefinitsioone leiab siit. Nende seas on näiteks PNG-failide failipäis. `.osd`-faili struktuuri kirjeldava &XML; skeemi leiab siit. Kui tunned veel millegi vastu huvi, võta ühendust autoriga aadressil &Alex.Richardson.email;.