Warning, /utilities/okteta/doc/index.docbook is written in an unsupported language. File is not indexed.

0001 <?xml version="1.0" ?>
0002 <!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [
0003   <!ENTITY % English "INCLUDE">
0004   <!ENTITY % addindex "IGNORE">
0005 ]>
0006 
0007 <book id="okteta" lang="&language;">
0008 
0009 <bookinfo>
0010 <title>The &okteta; Handbook</title>
0011 
0012 <authorgroup>
0013     <author>
0014       <firstname>Friedrich</firstname><othername>W. H.</othername><surname>Kossebau</surname>
0015       <affiliation>
0016         <address>&Friedrich.Kossebau.email;</address>
0017       </affiliation>
0018     </author>
0019     <author>
0020       <firstname>Alex</firstname><surname>Richardson</surname>
0021       <affiliation>
0022         <address>&Alex.Richardson.email;</address>
0023       </affiliation>
0024     </author>
0025 <!-- TRANS:ROLES_OF_TRANSLATORS -->
0026 </authorgroup>
0027 
0028 <copyright>
0029 <year>2008, 2010, 2011</year>
0030 <holder>&Friedrich.Kossebau; and &Alex.Richardson;</holder>
0031 </copyright>
0032 <legalnotice>&FDLNotice;</legalnotice>
0033 
0034 <date>2018-03-23</date>
0035 <releaseinfo>&okteta; 0.24.60</releaseinfo>
0036 
0037 <abstract>
0038   <para>&okteta; is a simple editor for the raw data of files. This type of program
0039   is also called hex editor or binary editor.</para>
0040 </abstract>
0041 
0042 <keywordset>
0043 <keyword>KDE</keyword>
0044 <keyword>Okteta</keyword>
0045 <keyword>view</keyword>
0046 <keyword>edit</keyword>
0047 <keyword>bits</keyword>
0048 <keyword>bytes</keyword>
0049 <keyword>binary</keyword>
0050 <keyword>octal</keyword>
0051 <keyword>hexadecimal</keyword>
0052 <keyword>hex editor</keyword>
0053 <keyword>raw data</keyword>
0054 </keywordset>
0055 </bookinfo>
0056 
0057 <chapter id="introduction">
0058 <title>Introduction</title>
0059 
0060 <para>&okteta; is a simple editor for the raw data of files.</para>
0061 
0062 <para>The data is displayed in two variants: as the numeric values of the bytes
0063 and as the character assigned to the values. Values and characters can be shown
0064 either in two columns (the traditional display in hex editors) or in rows with
0065 the value on top of the character. Editing can be done both for the values and
0066 for the characters.</para>
0067 
0068 <para>Besides the usual editing capabilities &okteta; also brings a small set of
0069 tools, like a table listing decodings into common simple data types, a table
0070 listing all possible bytes with their character and value equivalents, an info
0071 view with a statistic, a checksum calculator, a filter tool and a string
0072 extraction tool.</para>
0073 
0074 <para>All modifications to the data loaded can be endlessly undone or redone.</para>
0075 
0076 </chapter>
0077 
0078 <chapter id="basics">
0079 <title>Basics</title>
0080 
0081 <sect1 id="starting-basics">
0082 <title>Starting &okteta;</title>
0083 
0084     <para>Type <userinput><command>okteta</command></userinput> at a command
0085     prompt or select <guimenuitem>Hex Editor</guimenuitem> from the
0086     <menuchoice><guisubmenu>Applications</guisubmenu><guisubmenu>Utilities</guisubmenu>
0087     </menuchoice> group in the application launcher.</para>
0088 
0089     <para>The standard &Qt; and &kf5-full; command line
0090     options are available, and can be listed by entering
0091     <userinput><command>okteta</command> <option>--help</option></userinput>.</para>
0092 
0093     <para>Command line options specific to &okteta; are:</para>
0094 
0095     <para><option><replaceable>&lt;&URL;(s)&gt;</replaceable></option> - open
0096     file(s) from the specified &URL;(s)</para>
0097 
0098 </sect1>
0099 
0100 <sect1 id="usage-basics">
0101 <title>Usage</title>
0102 
0103     <para>The main &okteta; window has the following components:
0104     a menu bar, a toolbar, a status bar, one or several sidebars with tools, and
0105     the main view with the tabbed data views.</para>
0106 
0107     <para>When a file is opened or a new byte array is created, the bytes
0108     contained are listed consecutively in lines with a given number of bytes
0109     per line. They are displayed in two variants: as the numeric values of the
0110     bytes and as the characters assigned to the values. Values and characters
0111     can be shown either separated in two columns or next to each other with the
0112     value on top of the character. On the left side the offsets of the first
0113     byte in each line are shown.</para>
0114 
0115     <para>The handling is similar to that of most text editors:
0116     the data can be edited, cut, copied, pasted, dragged and dropped much as
0117     text in these can. A cursor marks the current position. Pressing the
0118     <keycap>Insert</keycap> key toggles between the overwrite and insert modes.
0119     The overwrite mode is stricter than in text editors, as it doesn't allow any
0120     operation which changes the size of the byte array.</para>
0121 
0122     <para>Other than in text editors the content is displayed in two variants.
0123     Only one of these is active with regard to new input. There are two linked
0124     cursors shown for the value and the character display, the cursor of
0125     the active one is blinking. With the characters active, characters can be
0126     entered as known from text editors. With the values active, typing a digit
0127     will open a minimal editor to enter the rest of the value.</para>
0128 
0129     <para>The search dialog allows the user to search for a specific string of
0130     bytes, definable as values (hexadecimal, decimal, octal, binary) or text
0131     (current 8-bit encoding or UTF-8).</para>
0132 
0133     <para>Multiple byte arrays can be open at the same time, but only one can be
0134     active. Use the <guimenu>Windows</guimenu> menu to select which byte array will
0135     be active.</para>
0136 </sect1>
0137 
0138 
0139 </chapter>
0140 
0141 <chapter id="tools">
0142   <title>Tools</title>
0143 
0144 <!-- The tool Versions is not part of released versions,
0145 just used for development, so no need to document it. -->
0146 <!--
0147 4.7
0148 Other stuff:
0149 New encodings: ISO-8859-14, ISO-8859-16, Codepage 874
0150 File info tool now estimates the mimetype also for the unstored/edited data in the working memory
0151 FIXME  
0152 -->
0153 <sect1 id="tools-overview">
0154 
0155   <title>Overview</title>
0156   <para>&okteta; brings some tools, some to analyze and manipulate the byte arrays
0157   and some with more general purpose. These tools can be activated or deactivated from
0158   the <guimenu>Tools</guimenu> entry in the menu bar. Each tool has a small view,
0159   which docks either in one of the sidebars or freely floats as a window. You
0160   can dock, undock, rearrange and also stack the tool views with the mouse, by
0161   pressing the &LMB; on the title bar of a tool view, moving it as you like and
0162   releasing the &LMB; to complete the action, otherwise cancel it by pressing
0163   the &Esc; key.</para>
0164 
0165 <sect2>
0166   <title>Analyzers and Manipulators</title>
0167 <variablelist>
0168   <varlistentry>
0169     <term>Value/Char Table</term>
0170     <listitem><para>The table lists all possible byte values, both as character and
0171     in the different numerical codings.</para>
0172     <para>The selected value can be inserted at the cursor position for a
0173     defined number of bytes. This can be achieved by using the <guibutton>Insert</guibutton>
0174     button or double-clicking the line in the table.</para></listitem>
0175   </varlistentry>
0176 
0177   <varlistentry>
0178     <term>Binary Filter</term>
0179     <listitem><para>The filter performs binary operations on the selected bytes.
0180     After choosing the operation (AND, OR, ROTATE..) the parameters,
0181     if any, can be set in the box below. The filter is executed on the use
0182     of the <guibutton>Filter</guibutton> button.</para></listitem>
0183   </varlistentry>
0184 
0185   <varlistentry>
0186     <term>Strings</term>
0187     <listitem><para>This tool locates the strings in the selected bytes.
0188     After choosing the minimum string length, the strings are grepped for
0189     on the use of the <guibutton>Extract</guibutton> button.
0190     The list of the strings displayed can be narrowed by entering a
0191     filter term.</para></listitem>
0192   </varlistentry>
0193 
0194   <varlistentry>
0195     <term>Statistics</term>
0196     <listitem><para>This tool builds a statistic for the selected bytes.
0197     The statistic gives the frequency of the occurrence of each byte value
0198     in the selection.
0199     It can be calculated by using the <guibutton>Build</guibutton>
0200     button.</para></listitem>
0201   </varlistentry>
0202 
0203   <varlistentry>
0204     <term>Checksum</term>
0205     <listitem><para>This tool calculates various checksums or hashsums for the
0206     selected bytes. After choosing the algorithm and setting the parameter, if
0207     any, the sum is computed on the use of the <guibutton>Calculate</guibutton>
0208     button.</para></listitem>
0209   </varlistentry>
0210 
0211   <varlistentry>
0212     <term>Decoding Table</term>
0213     <listitem><para>The table displays the values of the byte or the bytes
0214     starting at the cursor for some common simple data types like Integer or
0215     Float, but also UTF-8. Double-clicking on a line in the table opens an
0216     editor, so the value can be edited and changed.</para></listitem>
0217   </varlistentry>
0218 
0219   <varlistentry>
0220     <term>Structures</term>
0221     <listitem><para>This tool enables investigating and editing of byte arrays
0222     based on user-creatable structure definitions. Detailed instructions are in
0223     an own <link linkend="tools-structures">section</link>.</para></listitem>
0224   </varlistentry>
0225 </variablelist>
0226 </sect2>
0227 
0228 <sect2>
0229   <title>General tools</title>
0230 <variablelist>
0231   <varlistentry>
0232     <term>Filesystem</term>
0233     <listitem><para>This tool offers an embedded file browser which
0234     can be used to select files to open.</para></listitem>
0235   </varlistentry>
0236 
0237   <varlistentry>
0238     <term>Documents</term>
0239     <listitem><para>This tool shows all currently created or loaded files.
0240     Symbols mark the file with the currently active view and also show which
0241     files have unsaved changes or which storage copy has been modified by
0242     another program.</para></listitem>
0243   </varlistentry>
0244 
0245   <varlistentry>
0246     <term>Bookmarks</term>
0247     <listitem><para>This tool can be used to manage the bookmarks, alternatively
0248     to the <link linkend="bookmarks-menu"><guimenu>Bookmarks</guimenu></link> menu.
0249     <note><para>Bookmarks are currently only transient and not saved if you
0250     close a byte array or the whole program.</para></note></para></listitem>
0251   </varlistentry>
0252 
0253   <varlistentry>
0254     <term>File Info</term>
0255     <listitem><para>This tool displays some information about the current file,
0256     including its type, the location of storage and the size.</para></listitem>
0257   </varlistentry>
0258 
0259   <varlistentry>
0260     <term>Terminal</term>
0261     <listitem><para>An embedded Terminal, the working directory is not coupled with the active file.</para></listitem>
0262   </varlistentry>
0263 
0264   <varlistentry>
0265     <term>Charset Conversion</term>
0266     <listitem><para>The tool rewrites the bytes so the respective chars are the same as with the other charset.
0267      Only 8-bit charsets are supported, and unmatched chars are currently substituted with a value hardcoded to 0.
0268      </para></listitem>
0269   </varlistentry>
0270 </variablelist>
0271 </sect2>
0272 </sect1>
0273 
0274 
0275 <sect1 id="tools-structures">
0276 <!--
0277 Many improvements in the Structures tool by Alex:
0278 Begin of a structure can be pinned to a specific offset
0279 Support for strings (various Unicode encodings) in definitions
0280   -->
0281     <title>Structures Tool</title>
0282 
0283     <sect2>
0284       <title>General</title>
0285 
0286       <para>The Structures tool enables analyzing and editing of byte arrays
0287       based on user-creatable structure definitions, which can be built from
0288       arrays, unions, primitive types and enum values.</para>
0289      <!-- explain/link what these types are? probably not, since most user will be programmers? -->
0290       <para>It has an own settings dialog, which can be reached by using the
0291       <guibutton>Settings</guibutton> button. There are various options that can be
0292       configured, like the style (decimal, hexadecimal or binary) in which the
0293       values are displayed. Moreover it is possible to choose which structure
0294       definitions get loaded and which structures are shown in the view.</para>
0295       <para>Structures are defined in &okteta; Structure Definition files (based
0296       on &XML;, with the file extension <literal role="extension">.osd</literal>).
0297       Additionally a <literal role="extension">.desktop</literal> file contains
0298       metadata about that structure description file, such as author, homepage
0299       and license.</para>
0300       <para>Currently there is no built-in support for creating or editing
0301       structure definitions, therefore this must be done manually as
0302       described in the next sections.</para>
0303     </sect2>
0304 
0305     <sect2>
0306       <title>Installing structure definitions</title>
0307 
0308       <sect3>
0309         <title>Installing using KNewStuff</title>
0310         <para>The easiest way of installing new structure definitions is by using the built-in
0311         KNewStuff support in &okteta;. To install an existing structure open the settings dialog of the
0312         Structures tool. There select the <guilabel>Structures Management</guilabel> tab and press the
0313         <guibutton>Get New Structures...</guibutton> button. The dialog that shows up now allows you to
0314         install and uninstall structures.</para>
0315       </sect3>
0316       <sect3>
0317         <title>Installing structure definitions manually</title>
0318         <para>The Structures tool looks for structure descriptions in the
0319           subdirectory <filename class="directory">okteta/structures/</filename>
0320           of the user's directory for program data (find that by executing
0321           <userinput><command>qtpaths</command> <option>--paths GenericDataLocation</option></userinput>).
0322           You may need to create this directory if there are no structure
0323           definitions installed yet.</para>
0324           <para>Two files exist for every structure definition: One file for the actual definition and a
0325           <literal role="extension">.desktop</literal> file for the metadata (author, version, etc.).</para>
0326           <para>In that directory there is a subdirectory for each structure
0327           definition, which contains both the <literal role="extension">.desktop</literal>
0328           file and the <literal role="extension">.osd</literal> or
0329           <filename>main.js</filename> file of that definition.</para>
0330           <para>For example, with the program data directory
0331           <filename class="directory"><userinput><command>qtpaths</command> <option>--paths GenericDataLocation</option></userinput></filename>
0332           and a structure definition named ExampleStructure there is the directory
0333           <filename class="directory">okteta/structures/ExampleStructure</filename>
0334           which contains a file <filename>ExampleStructure.desktop</filename> and a
0335           file <filename>ExampleStructure.osd</filename>.</para>
0336       </sect3>
0337       <sect3>
0338         <title>Using the newly installed structures</title>
0339         <para>After having installed a new structure definition you need to restart &okteta;
0340         before you can use it.
0341         Once &okteta; has started, open the settings dialog of the Structures tool. There select the
0342         <guilabel>Structures Management</guilabel> tab and make sure the relevant
0343         structure definition is checked. Then switch to the <guilabel>Structures</guilabel> tab and
0344         make sure the desired element is listed on the right-hand side.</para>
0345       </sect3>
0346     </sect2>
0347 
0348     <sect2>
0349       <title>Sharing structure definitions</title>
0350       <para>For common structures you may not need to create a definition yourself,
0351       but instead can reuse an already existing definition from places like
0352       <ulink url="https://store.kde.org/browse/cat/214">store.kde.org</ulink>.</para>
0353       <para>You also may want to share a definition yourself. To do so, create a
0354       file archive (&eg; a zipped tar archive, <literal role="extension">.tar.gz</literal>)
0355       containing just the subdirectory with the <literal role="extension">.desktop</literal>
0356       file and the structure definition file. Looking at the example in the last section this
0357       would be the directory <filename class="directory">ExampleStructure</filename> with all its contents.
0358       Using this format for sharing the structure definitions allows installing them inside &okteta; and
0359       requires no manual installation.</para>
0360     </sect2>
0361 
0362 
0363     <sect2>
0364       <title>Creating structure definitions</title>
0365 
0366       <note><para>A more up to date, but not completed guide to writing structure definitions can be found
0367         <ulink url="https://userbase.kde.org/Okteta/Writing_structure_definitions">on the KDE UserBase Wiki</ulink>.
0368       </para></note>
0369 
0370       <para>There are two different ways of creating structure definitions. The first is writing the
0371       definition in &XML; the other is using JavaScript<!-- Markup??-->. The JavaScript approach allows you
0372       to create more complex structures with features like &eg; validating the structure. Using &XML; gives you
0373       less features but if a static structure is all you need this may be the easiest approach. If you need a dynamic
0374       structure i.e. where array lengths depend on other values in the structure or the structure layout is different when
0375       some member value changes, then you will have to write the structure definition in JavaScript.
0376       There is one exception to that rule: if you have an array where the length is supposed to be
0377       <emphasis role="bold">exactly</emphasis> the same as another value in the structure, then you can use &XML;.
0378       But if it is something like <emphasis>length - 1</emphasis> it has to be JavaScript.</para>
0379     </sect2>
0380 
0381 
0382     <sect2>
0383       <title>Structure definition &XML; file format</title>
0384       <note><para>A more up to date, but not completed guide to writing structure definitions can be found
0385         <ulink url="https://userbase.kde.org/Okteta/Writing_structure_definitions">on the KDE UserBase Wiki</ulink>.
0386       </para></note>
0387       <para>
0388       <!-- TODO xml schema -->
0389       The <literal role="extension">.osd</literal> &XML; file has one root element: <emphasis>&lt;data&gt;</emphasis> with no
0390       attributes. Inside this element there must be one of the following elements:</para>
0391       <!-- TODO markup, though better than nothing this way-->
0392       <variablelist>
0393           <varlistentry>
0394             <term><emphasis role="bold"><emphasis>&lt;primitive&gt;</emphasis></emphasis></term>
0395             <listitem><para>To create a primitive data types like &eg; <emphasis>int</emphasis> and
0396               <emphasis>float</emphasis>. This element accepts no subelements and can have the following attributes:</para>
0397               <variablelist>
0398                 <varlistentry>
0399                 <term><emphasis role="bold">type</emphasis></term>
0400                 <listitem>
0401                   <para>The type of this primitive type. It must be one of the following:</para>
0402                   <itemizedlist>
0403                     <listitem><para><emphasis>char</emphasis> for a 8 bit ASCII character</para></listitem>
0404                     <listitem><para><emphasis>int8, int16, int32, int64</emphasis> for a signed integer of that size</para></listitem>
0405                     <listitem><para><emphasis>uint8, uint16, uint32, uint64</emphasis> for an unsigned integer of that size</para></listitem>
0406                     <listitem><para><emphasis>bool8, bool16, bool32, bool64</emphasis> for an unsigned boolean (0 = false, any other value = true) of that size</para></listitem>
0407                     <listitem><para><emphasis>float</emphasis> for a 32 bit IEEE754 floating point number</para></listitem>
0408                     <listitem><para><emphasis>double</emphasis> for a 64 bit IEEE754 floating point number</para></listitem>
0409                   </itemizedlist>
0410                 </listitem>
0411                 </varlistentry>
0412               </variablelist>
0413             </listitem>
0414           </varlistentry>
0415 
0416           <varlistentry>
0417             <term><emphasis role="bold"><emphasis>&lt;bitfield&gt;</emphasis></emphasis></term>
0418             <listitem><para>To create a bitfield. This element accepts no subelements and can have the following
0419               attributes:</para>
0420               <variablelist>
0421                 <varlistentry>
0422                   <term><emphasis role="bold">width</emphasis></term>
0423                   <listitem><para>The number of bits used by this bitfield. Must be between 1 and 64.</para></listitem>
0424                 </varlistentry>
0425                 <varlistentry>
0426                   <term><emphasis role="bold">type</emphasis></term>
0427                   <listitem>
0428                     <para>The type of this bitfield. It must be one of the following:</para>
0429                     <itemizedlist>
0430                       <listitem><para><emphasis>unsigned</emphasis> for a bitfield where the value will be interpreted as
0431                       an unsigned value (value range from 0 to 2<superscript>width</superscript> - 1)</para></listitem>
0432                       <listitem><para><emphasis>signed</emphasis> for a bitfield where the value will be interpreted as a
0433                       signed value (value range from -2<superscript>width - 1</superscript> to
0434                       2<superscript>width - 1</superscript> - 1)</para></listitem>
0435                       <listitem><para><emphasis>bool</emphasis> for a bitfield where the value will be interpreted as a
0436                       boolean value</para></listitem>
0437                   </itemizedlist>
0438                   <note><para>Always remember to add padding after a <emphasis>&lt;bitfield&gt;</emphasis>, since otherwise
0439                   the next element (except for strings and arrays, since they add padding automatically) will start in the
0440                   middle of a byte. Obviously padding is not necessary if you want this behavior.</para></note>
0441                   </listitem>
0442                 </varlistentry>
0443               </variablelist>
0444             </listitem>
0445           </varlistentry>
0446 
0447           <varlistentry>
0448             <term><emphasis role="bold"><emphasis>&lt;enum&gt;</emphasis></emphasis></term>
0449             <listitem><para>To create a primitive type, but where the values are displayed as members of an enumeration if
0450               possible. This element accepts no subelements (however you will need an <emphasis>&lt;enumDef&gt;</emphasis>
0451               tag in the file to reference it). It has the following attributes:</para>
0452               <variablelist>
0453                 <varlistentry>
0454                   <term><emphasis role="bold">enum</emphasis></term>
0455                   <listitem><para>The underlying enum for this value. Must match the <emphasis>name</emphasis> attribute of
0456                   one of the <emphasis>&lt;enumDef&gt;</emphasis> tags in this file.</para></listitem>
0457                 </varlistentry>
0458                 <varlistentry>
0459                   <term><emphasis role="bold">type</emphasis></term>
0460                   <listitem>
0461                     <para>The type of this enum. See type attribute of <emphasis>&lt;primitive&gt;</emphasis>.
0462                     Only difference is that <emphasis>Double</emphasis> and <emphasis>Float</emphasis> make no sense.</para>
0463                   </listitem>
0464                 </varlistentry>
0465               </variablelist>
0466             </listitem>
0467           </varlistentry>
0468 
0469 
0470           <varlistentry>
0471             <term><emphasis role="bold"><emphasis>&lt;flags&gt;</emphasis></emphasis></term>
0472             <listitem><para>This is the same as <emphasis>&lt;enum&gt;</emphasis> with the only difference being
0473             that values are represented as a <emphasis>bitwise-or</emphasis> of all the values of the enumeration.</para></listitem>
0474           </varlistentry>
0475 
0476           <varlistentry>
0477             <term><emphasis role="bold"><emphasis>&lt;struct&gt;</emphasis></emphasis></term>
0478             <listitem><para>To create a structure. All other elements (including <emphasis>&lt;struct&gt;</emphasis>) can
0479             be a child of this and will then be part of the resulting structure</para></listitem>
0480           </varlistentry>
0481 
0482           <varlistentry>
0483             <term><emphasis role="bold"><emphasis>&lt;union&gt;</emphasis></emphasis></term>
0484             <listitem><para>To create a union. Basically the same as <emphasis>&lt;struct&gt;</emphasis> except for the fact
0485             that all child elements will start from the same offset. Useful for interpreting the same sequence of bytes in
0486             various ways.</para></listitem>
0487           </varlistentry>
0488 
0489           <varlistentry>
0490             <term><emphasis role="bold"><emphasis>&lt;array&gt;</emphasis></emphasis></term>
0491             <listitem><para>To create an array. This element accepts exactly one child (the underlying type of the array),
0492             which can be any of the elements, even <emphasis>&lt;array&gt;</emphasis> itself. It also has the following
0493             attributes:</para>
0494               <variablelist>
0495                 <varlistentry>
0496                   <term><emphasis role="bold">length</emphasis></term>
0497                   <listitem><para>The number of elements in this array as a decimal number.
0498                   Alternatively it can also be a string which matches the name attribute of a previously defined
0499                   <emphasis>&lt;primitive&gt;</emphasis>, <emphasis>&lt;enum&gt;</emphasis> or <emphasis>&lt;flags&gt;</emphasis>
0500                   element. Then the length will be the value of that element.
0501                   Currently it is limited to 10000, because larger arrays would use too much memory and slow down the tool
0502                   too much.
0503                   </para></listitem>
0504                 </varlistentry>
0505               </variablelist>
0506             </listitem>
0507           </varlistentry>
0508 
0509           <varlistentry>
0510             <term><emphasis role="bold"><emphasis>&lt;string&gt;</emphasis></emphasis></term>
0511             <listitem><para>To create a string in various encodings. By default you get a <emphasis>NULL</emphasis>-
0512             terminated C-style string. However different types of string can be created with the following attributes:</para>
0513               <variablelist>
0514                 <varlistentry>
0515                   <term><emphasis role="bold">terminatedBy</emphasis></term>
0516                   <listitem><para>This attribute determines what unicode codepoint the string is terminated by. It must be a
0517                   hexadecimal number (optionally with leading <emphasis>0x</emphasis>). When encoding is ASCII, only values
0518                   up to 0x7f are meaningful. If neither this nor <emphasis>maxCharCount</emphasis> nor <emphasis>maxByteCount</emphasis>
0519                   are set, this is assumed to be set to 0 (C-style string)
0520                   </para></listitem>
0521                 </varlistentry>
0522                 <varlistentry>
0523                   <term><emphasis role="bold">maxCharCount</emphasis></term>
0524                   <listitem><para>The maximum number of chars this string can have. If <emphasis>terminatedBy</emphasis> is
0525                   set too then whatever is reached first terminates the string. This is mutually exclusive with
0526                   <emphasis>maxByteCount</emphasis></para></listitem>
0527                 </varlistentry>
0528                 <varlistentry>
0529                   <term><emphasis role="bold">maxByteCount</emphasis></term>
0530                   <listitem><para>The maximum number of bytes this string can be long. If <emphasis>terminatedBy</emphasis>
0531                   is set too then whatever is reached first terminates the string. This is mutually exclusive with
0532                   <emphasis>maxCharCount</emphasis>. With encodings like <emphasis>ASCII</emphasis> this is the same as
0533                   <emphasis>maxCharCount</emphasis>.</para></listitem>
0534                 </varlistentry>
0535                 <varlistentry>
0536                   <term><emphasis role="bold">type</emphasis></term>
0537                   <listitem><para>The encoding of this string. Can be one of the following:</para>
0538                     <itemizedlist>
0539                       <listitem><para><emphasis>ASCII</emphasis></para></listitem>
0540                       <listitem><para><emphasis>LATIN-1</emphasis></para></listitem>
0541                       <listitem><para><emphasis>UTF-8</emphasis></para></listitem>
0542                       <listitem><para><emphasis>UTF-16-LE</emphasis> or <emphasis>UTF-16-BE</emphasis>. If neither
0543                       <emphasis>-LE</emphasis> or <emphasis>-BE</emphasis> suffix is given, little endian is assumed.
0544                       </para></listitem>
0545                       <listitem><para><emphasis>UTF-32-LE</emphasis> or <emphasis>UTF-32-BE</emphasis>. If neither
0546                       <emphasis>-LE</emphasis> or <emphasis>-BE</emphasis> suffix is given, little endian is assumed.
0547                       </para></listitem>
0548                     </itemizedlist>
0549                   </listitem>
0550                 </varlistentry>
0551               </variablelist>
0552             </listitem>
0553           </varlistentry>
0554       </variablelist>
0555       <para>
0556       Every element also accepts an attribute <emphasis>name</emphasis> which is then visible in the structures view.
0557       </para>
0558     </sect2>
0559 
0560     <sect2>
0561       <title>An example structure definition in both &XML; and JavaScript</title>
0562       <note><para>A more up to date, but not completed guide to writing structure definitions can be found
0563         <ulink url="https://userbase.kde.org/Okteta/Writing_structure_definitions">on the KDE UserBase Wiki</ulink>.
0564       </para></note>
0565 
0566       <sect3>
0567         <title>The common step shared by both approaches</title>
0568         <para>
0569         Our metadata file looks like this:
0570         <screen>
0571         [Desktop Entry]
0572         Icon=arrow-up<co id="icon" />
0573         Type=Service
0574         ServiceTypes=KPluginInfo
0575 
0576         Name=Simple test structure
0577         Comment=A very simple test structure containing only two items
0578 
0579         X-KDE-PluginInfo-Author=Alex Richardson
0580         X-KDE-PluginInfo-Email=foo.bar@email.org
0581         X-KDE-PluginInfo-Name=simplestruct
0582         X-KDE-PluginInfo-Version=1.0
0583         X-KDE-PluginInfo-Website=https://www.plugin.org/
0584         X-KDE-PluginInfo-Category=structure
0585         X-KDE-PluginInfo-License=LGPL
0586         X-KDE-PluginInfo-EnabledByDefault=false
0587         </screen>
0588         <calloutlist>
0589           <callout arearefs="icon">
0590           <para>The icon displayed in &okteta; for this structure can be anything found by executing
0591           <userinput><command>kdialog</command> <option>--geticon</option></userinput> or a path to an icon</para>
0592           </callout>
0593         </calloutlist>
0594 
0595           These fields should all be pretty much self-explanatory, except for
0596           <literal>X-KDE-PluginInfo-Name</literal>. The value of this field must match the name of the directory containing the file as well as the name of the <literal role="extension">.desktop</literal> file. When creating &XML; structure definitions the name of the <literal role="extension">.osd</literal> file must also match the name. </para>
0597 
0598         <para>In this example we would have a directory named <filename>simplestruct</filename>
0599         containing the file <filename>simplestruct.desktop</filename>. When defining structures in &XML;
0600         the directory would also contain a file named <filename>simplestruct.osd</filename>. Using JavaScript we would have a file named <filename>main.js</filename> instead.</para>
0601       </sect3>
0602       <sect3>
0603         <title>A simple &XML; structure definition</title>
0604         <para>
0605           To start we create a definition for a very simple test structure
0606           containing only integral data types (one char, one 32-bit signed integer, and a bitfield).
0607           This would be expressed in C/C++ as:
0608           <screen>
0609           struct simple {
0610             char aChar;
0611             int anInt;
0612             bool bitFlag :1;
0613             unsigned padding :7;
0614           };
0615           </screen>
0616           The first step is writing the <literal role="extension">.osd</literal> file according to the file format defined
0617           in the previous section. We will call <filename>simplestruct.osd</filename>:
0618           <screen><markup>
0619           &lt;?xml version="1.0" encoding="UTF-8"?&gt;
0620           &lt;data&gt;
0621             &lt;struct name="simple"&gt;
0622               &lt;primitive name="aChar" type="Char"/&gt;
0623               &lt;primitive name="anInt" type="Int32"/&gt;
0624               &lt;bitfield name="bitFlag" type="bool" width="1"/&gt;
0625               &lt;bitfield name="padding" type="unsigned" width="7"/&gt;
0626             &lt;/struct&gt;
0627           &lt;/data&gt;
0628           </markup></screen>
0629           which is fairly similar to the C/C++ definition.
0630           </para>
0631           <para>Now create a directory <filename class="directory">simplestruct</filename>
0632           inside the structure installation directory (see manually installing structure definitions) <!-- markup TODO-->
0633           and copy the two files to this directory. Now you can restart &okteta; and use the new structure.</para>
0634       </sect3>
0635       <sect3>
0636         <title>The simple structure in JavaScript</title>
0637         <para>
0638         To implement the structure above in JavaScript, create a file named <filename>main.js</filename> instead of <filename>simplestruct.osd</filename>
0639         and change X-KDE-PluginInfo-Category=structure to X-KDE-PluginInfo-Category=structure/js.
0640         The contents of that file should be:
0641         <screen>
0642         function init() {
0643           var structure = struct({
0644             aChar : char(),
0645             anInt : int32(),
0646             bitFlag : bitfield("bool", 1),
0647             padding : bitfield("unsigned", 7),
0648           })
0649           return structure;
0650         }
0651         </screen>
0652         The structure displayed by &okteta; is always the return value of the <literal>init</literal> function.</para>
0653         <para>
0654         The following functions can be called to create a primitive type:
0655         <itemizedlist>
0656           <listitem><para>char()</para></listitem>
0657           <listitem><para>int8(), int16(), int32() or int64()</para></listitem>
0658           <listitem><para>uint8(), uint16(), uint32() or uint64()</para></listitem>
0659           <listitem><para>bool8(), bool16(), bool32() or bool64()</para></listitem>
0660           <listitem><para>float()</para></listitem>
0661           <listitem><para>double()</para></listitem>
0662         </itemizedlist>
0663         The bitfield function takes two parameters, the first being a string consisting of
0664         <literal>bool</literal>, <literal>signed</literal> or <literal>unsigned</literal>. The second parameter is an integer which sets the width in bits.
0665         </para>
0666       </sect3>
0667       <sect3>
0668         <title>More complex structures</title>
0669         <para>
0670         Next we create a definition of a more complex structure which we will
0671         call "complex" and save in a file named <filename>complex.osd</filename>.
0672         This structure will contain two arrays (one with fixed length and one
0673         where the length is determined at runtime) as well as a nested structure
0674         and a union.
0675         <screen><markup>
0676           &lt;?xml version="1.0" encoding="UTF-8"?&gt;
0677           &lt;data&gt;
0678             &lt;struct name="complex"&gt;
0679               &lt;primitive name="size" type="UInt8" /&gt;
0680               &lt;union name="aUnion"&gt;
0681                 &lt;array name="fourBytes" length="4"&gt;
0682                   &lt;primitive type="Int8" /&gt;
0683                 &lt;/array&gt;
0684               &lt;/union&gt;
0685               &lt;struct name="nested"&gt;
0686                 &lt;array name="string" length="size"&gt; &lt;!-- references the field size above --&gt;
0687                   &lt;primitive type="Char" /&gt;
0688                 &lt;/array&gt;
0689               &lt;/struct&gt;
0690             &lt;/struct&gt;
0691           &lt;/data&gt;
0692           </markup></screen>
0693           This would correspond to the following in pseudo-C/C++
0694           <screen>
0695           struct complex {
0696             uint8_t size;
0697             union aUnion {
0698               int8_t fourBytes[4];
0699             };
0700             struct nested {
0701               char string[size] //not valid C++, references value of the uint8 size
0702             };
0703           };
0704           </screen>
0705           </para>
0706           <note><para>You can obviously only have dynamic length arrays
0707           reference fields before the array.</para></note>
0708           <para>Next we create the <filename>complex.desktop</filename> file just as
0709           in the example before (make sure you set <literal>X-KDE-PluginInfo-Name</literal>
0710           correctly) and also do the same to install both files.</para>
0711       </sect3>
0712       <sect3>
0713         <title>Further information</title>
0714         <para>
0715           A few example structure definitions can be found in the <ulink url="https://commits.kde.org/okteta?path=kasten/controllers/view/structures/examples/okteta/structures/">Git repository.</ulink>
0716           This includes for example the file header for PNG files and the ELF file header.
0717           An &XML; schema describing the structure of the <literal role="extension">.osd</literal> file can be found <ulink url="https://commits.kde.org/okteta?path=kasten/controllers/view/structures/schema/">here.</ulink>
0718           If more information is needed feel free to contact me at &Alex.Richardson.email;
0719         </para>
0720       </sect3>
0721     </sect2>
0722 <!--FIXME missing
0723 Extended structures definitions
0724 Structures Script Console-->
0725 </sect1>
0726 </chapter>
0727 
0728 <chapter id="interface-overview">
0729 <title>Interface Overview</title>
0730 
0731 <sect1 id="menu-commands">
0732 <title>Menu Items</title>
0733 
0734 <para>Apart from the common &kde; menus described in the <ulink url="help:/fundamentals/ui.html#menus">Menu</ulink>
0735 chapter of the &kde; Fundamentals documentation &okteta; has these application specific menu entries:
0736 </para>
0737 
0738 <sect2 id="file-menu">
0739 <title>File Menu</title>
0740 
0741 <variablelist>
0742     <varlistentry>
0743     <term><menuchoice>
0744     <shortcut>
0745     <keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
0746     </shortcut>
0747     <guimenu>File</guimenu>
0748     <guimenuitem>New</guimenuitem>
0749     </menuchoice></term>
0750     <listitem><para><action>Create a new byte array...</action></para>
0751     <itemizedlist>
0752     <listitem><para><guimenuitem>Empty</guimenuitem>: ... as Empty one.</para>
0753     </listitem>
0754     <listitem><para><guimenuitem>From Clipboard</guimenuitem>: ... by the current
0755     content of the clipboard.</para></listitem>
0756     <listitem><para><guimenuitem>Pattern...</guimenuitem>: ... with a given pattern.</para>
0757     </listitem>
0758     <listitem><para><guimenuitem>Random Data...</guimenuitem>: ...with random data.</para></listitem>
0759     <listitem><para><guimenuitem>Sequence</guimenuitem>: ... with all the bytes
0760     from 0 to 255.</para></listitem>
0761     </itemizedlist>
0762     </listitem>
0763     </varlistentry>
0764 
0765     <varlistentry>
0766     <term><menuchoice>
0767     <guimenu>File</guimenu>
0768     <guisubmenu>Export</guisubmenu>
0769     </menuchoice></term>
0770     <listitem><para>Export the selected bytes to a file...</para>
0771     <itemizedlist>
0772     <listitem><para><guimenuitem>Values</guimenuitem>: ... encoded as byte values.
0773     By default the values are separated with one whitespace. The <guilabel>Separation</guilabel>
0774     characters can be changed in the <guilabel>Export</guilabel> dialog.
0775     </para>
0776     </listitem>
0777     <listitem><para><guimenuitem>Characters</guimenuitem>: ... encoded as plain text.
0778     </para></listitem>
0779     <listitem><para><guimenuitem>Base64</guimenuitem>: ... encoded in the
0780     <ulink url="https://en.wikipedia.org/wiki/Base64">Base64</ulink>
0781     format.</para></listitem>
0782     <listitem><para><guimenuitem>Base32</guimenuitem>: ... encoded in the 
0783     <ulink url="https://en.wikipedia.org/wiki/Base32">Base32</ulink>
0784     format.</para></listitem>
0785     <listitem><para><guimenuitem>Ascii85</guimenuitem>: ... encoded in the
0786     <ulink url="https://en.wikipedia.org/wiki/Ascii85">Ascii85</ulink>
0787     format.</para></listitem>
0788     <listitem><para><guimenuitem>Uuencoding</guimenuitem>: ... encoded in the
0789     <ulink url="https://en.wikipedia.org/wiki/Uuencoding">Uuencoding</ulink>
0790     format.</para></listitem>
0791     <listitem><para><guimenuitem>Xxencoding</guimenuitem>: ... encoded in the
0792     <ulink url="https://en.wikipedia.org/wiki/Xxencoding">Xxencoding</ulink>
0793     format.</para></listitem>
0794     <listitem><para><guimenuitem>Intel Hex</guimenuitem>: ... encoded in the
0795     <ulink url="https://en.wikipedia.org/wiki/Intel_Hex">Intel Hex</ulink>
0796     format.</para></listitem>
0797     <listitem><para><guimenuitem>S-Record</guimenuitem>: ... encoded in the
0798     <ulink url="https://en.wikipedia.org/wiki/S-record">S-Record</ulink>
0799     format.</para></listitem>
0800     <listitem><para><guimenuitem>C array</guimenuitem>: ... defined as
0801     an array in the programming language C.</para></listitem>
0802     <listitem><para><guimenuitem>View in Plain Text</guimenuitem>:
0803     ... as in the data view with offset, byte values and characters. </para></listitem>
0804     </itemizedlist>
0805     </listitem>
0806 
0807 </varlistentry>
0808 
0809     <varlistentry>
0810     <term><menuchoice>
0811     <guimenu>File</guimenu>
0812     <guisubmenu>Permissions</guisubmenu><guimenuitem>Set Read-only</guimenuitem>
0813     </menuchoice></term>
0814     <listitem><para>When set, changes may not be made to the loaded
0815     byte array.</para></listitem>
0816     </varlistentry>
0817 
0818     <varlistentry>
0819     <term><menuchoice>
0820     <guimenu>File</guimenu>
0821     <guimenuitem>Close All Other</guimenuitem>
0822     </menuchoice></term>
0823     <listitem><para><action>Close all besides the current byte array.</action></para></listitem>
0824     </varlistentry>
0825 
0826 </variablelist>
0827 </sect2>
0828 
0829 <sect2 id="edit-menu">
0830 <title>Edit Menu</title>
0831 <variablelist>
0832 <para>Simple copy and cut send data to the clipboard with the
0833 mimetype <quote>application/octetstream</quote>, &klipper; is not able to display this data.
0834 And almost all other applications cannot handle this, too, as this is
0835 simply raw data. So also see for the <guisubmenu>Copy as</guisubmenu> submenu.</para>
0836     <varlistentry>
0837     <term><menuchoice>
0838     <guimenu>Edit</guimenu>
0839     <guisubmenu>Copy as</guisubmenu>
0840     </menuchoice></term>
0841     <listitem><para>Copy the selected bytes in one of different formats to the clipboard.
0842     For a list of available formats see the menu item <menuchoice><guimenu>File</guimenu>
0843     <guisubmenu>Export</guisubmenu></menuchoice>
0844     </para>
0845     </listitem>
0846     </varlistentry>
0847 
0848     <varlistentry>
0849     <term><menuchoice>
0850     <guimenu>Edit</guimenu>
0851     <guisubmenu>Insert</guisubmenu>
0852     </menuchoice></term>
0853     <listitem>
0854     <variablelist>
0855     <varlistentry>
0856     <term><menuchoice>
0857     <guimenuitem>Insert Pattern...</guimenuitem>
0858     </menuchoice></term>
0859     <listitem><para><action>Insert a specified string of bytes at the cursor.</action></para>
0860     <para>Options in the dialog box allow you to specify the number of insertion of the pattern
0861     and it's format (Hexadecimal, Decimal, Octal, Binary, Character(s) or UTF-8).</para>
0862     <!--FIXME Random Data + Sequence - use cases?-->
0863     </listitem>
0864     </varlistentry>
0865     </variablelist>
0866     </listitem>
0867     </varlistentry>
0868 
0869     <varlistentry>
0870     <term><menuchoice>
0871     <shortcut>
0872     <keycombo action="simul">&Ctrl;&Shift;<keycap>A</keycap></keycombo>
0873     </shortcut>
0874     <guimenu>Edit</guimenu>
0875     <guimenuitem>Deselect</guimenuitem>
0876     </menuchoice></term>
0877     <listitem><para><action>Deselect the current selection.</action></para></listitem>
0878     </varlistentry>
0879 
0880     <varlistentry>
0881     <term><menuchoice>
0882     <shortcut>
0883     <keycombo action="simul">&Ctrl;<keycap>E</keycap></keycombo>
0884     </shortcut>
0885     <guimenu>Edit</guimenu>
0886     <guimenuitem>Select Range...</guimenuitem>
0887     </menuchoice></term>
0888     <listitem><para><action>Opens an embedded dialog to enter the range to
0889     select.</action></para></listitem>
0890     </varlistentry>
0891 
0892     <varlistentry>
0893     <term><menuchoice>
0894     <shortcut>
0895     <keycombo action="simul"><keycap>Ins</keycap></keycombo>
0896     </shortcut>
0897     <guimenu>Edit</guimenu>
0898     <guimenuitem>Overwrite Mode</guimenuitem>
0899     </menuchoice></term>
0900     <listitem><para><action>Switch between Insert mode and Overwrite mode</action>.
0901     </para>
0902     <note><para>Overwrite mode is implemented to be very strict, it is not possible to
0903     change the size of the data (no appending or removing of bytes).</para></note>
0904     </listitem>
0905     </varlistentry>
0906 
0907     <varlistentry>
0908     <term><menuchoice>
0909     <shortcut>
0910     <keycombo action="simul">&Ctrl;<keycap>F</keycap></keycombo>
0911     </shortcut>
0912     <guimenu>Edit</guimenu>
0913     <guimenuitem>Find...</guimenuitem>
0914     </menuchoice></term>
0915     <listitem><para><action>Find a specified pattern in the document.</action>
0916     Hexadecimal, decimal, octal, binary or text patterns can be searched for.</para>
0917     <para>Options in the dialog box allow you to specify the starting point,
0918     direction and range of the search.</para></listitem>
0919     </varlistentry>
0920 
0921     <varlistentry>
0922     <term><menuchoice>
0923     <shortcut>
0924     <keycombo action="simul">&Ctrl;<keycap>G</keycap></keycombo>
0925     </shortcut>
0926     <guimenu>Edit</guimenu>
0927     <guimenuitem>Goto Offset...</guimenuitem>
0928     </menuchoice></term>
0929     <listitem><para><action>Move the cursor to a specified
0930     offset.</action></para></listitem>
0931     </varlistentry>
0932 
0933 </variablelist>
0934 </sect2>
0935 
0936 <sect2 id="view-menu">
0937 <title>View Menu</title>
0938 
0939 <variablelist>
0940 
0941     <varlistentry>
0942     <term><menuchoice>
0943     <shortcut>
0944     <keycap>F11</keycap>
0945     </shortcut>
0946     <guimenu>View</guimenu>
0947     <guimenuitem>Show Line Offset</guimenuitem>
0948     </menuchoice></term>
0949     <listitem><para><action>Toggle display of the line offset on a pane to the left
0950     on and off.</action></para></listitem>
0951     </varlistentry>
0952 
0953     <varlistentry>
0954     <term><menuchoice>
0955     <guimenu>View</guimenu>
0956     <guisubmenu>Show Values or Chars</guisubmenu>
0957     </menuchoice></term>
0958     <listitem><para><action>Select which of the byte interpretations are shown.</action>
0959     Possible are:</para>
0960     <itemizedlist>
0961     <listitem><para><guimenuitem>Values</guimenuitem></para>
0962     </listitem>
0963     <listitem><para><guimenuitem>Chars</guimenuitem></para></listitem>
0964     <listitem><para><guimenuitem>Values and Chars</guimenuitem></para></listitem>
0965     </itemizedlist>
0966     </listitem>
0967     </varlistentry>
0968 
0969     <varlistentry>
0970     <term><menuchoice>
0971     <guimenu>View</guimenu>
0972     <guisubmenu>Value Coding</guisubmenu>
0973     </menuchoice></term>
0974     <listitem><para><action>Select the coding of the values</action> from:</para>
0975     <itemizedlist>
0976     <listitem><para><guimenuitem>Hexadecimal</guimenuitem></para></listitem>
0977     <listitem><para><guimenuitem>Decimal</guimenuitem></para></listitem>
0978     <listitem><para><guimenuitem>Octal</guimenuitem></para></listitem>
0979     <listitem><para><guimenuitem>Binary</guimenuitem></para></listitem>
0980     </itemizedlist>
0981     </listitem>
0982     </varlistentry>
0983 
0984     <varlistentry>
0985     <term><menuchoice>
0986     <guimenu>View</guimenu>
0987     <guisubmenu>Char Coding</guisubmenu>
0988     </menuchoice></term>
0989     <listitem><para><action>Select the coding of the chars</action>
0990     from the submenu.
0991     </para>
0992     </listitem>
0993     </varlistentry>
0994 
0995     <varlistentry>
0996     <term><menuchoice>
0997     <guimenu>View</guimenu>
0998     <guimenuitem>Show Non-printing Chars</guimenuitem>
0999     </menuchoice></term>
1000     <listitem><para><action>Toggle display of non-printing chars on and
1001     off.</action> If the display is turned off, at the corresponding places in
1002     the character column a substitute char is shown instead.</para></listitem>
1003     </varlistentry>
1004 
1005     <varlistentry>
1006     <term><menuchoice>
1007     <guimenu>View</guimenu>
1008     <guisubmenu>Set Bytes per Line</guisubmenu>
1009     </menuchoice></term>
1010     <listitem><para><action>Select the displayed bytes per line</action>
1011     from the dialog, the default value is 16 bytes.
1012     </para>
1013     </listitem>
1014     </varlistentry>
1015     <varlistentry>
1016     <term><menuchoice>
1017     <guimenu>View</guimenu>
1018     <guisubmenu>Set Bytes per Group</guisubmenu>
1019     </menuchoice></term>
1020     <listitem><para><action>By default the hexadecimal values are displayed in groups of 4 bytes.</action>
1021      Using this menu item you can adapt this to your preferences in a dialog.
1022     </para>
1023     </listitem>
1024     </varlistentry>
1025     <varlistentry>
1026     <term><menuchoice>
1027     <guimenu>View</guimenu>
1028     <guisubmenu>Dynamic Layout</guisubmenu>
1029     </menuchoice></term>
1030     <listitem><para><action>Set the rules for the layout of the data display.</action>
1031     This defines how many bytes are displayed per line, depending on the width of the
1032     view. Possible rules are:</para>
1033     <itemizedlist>
1034     <listitem><para><guimenuitem>Off</guimenuitem>: The layout is fixed to the
1035     current number of bytes per line and not adapted on the change of the view size.</para>
1036     </listitem>
1037     <listitem><para><guimenuitem>Wrap only complete byte groups</guimenuitem>: Puts as many bytes
1038     per line as possible, as long as groups of bytes are complete.
1039     </para></listitem>
1040     <listitem><para><guimenuitem>On</guimenuitem>: Same as previous,
1041     but allows also incomplete groups of bytes.</para></listitem>
1042     </itemizedlist>
1043     </listitem>
1044     </varlistentry>
1045 
1046     <varlistentry>
1047     <term><menuchoice>
1048     <guimenu>View</guimenu>
1049     <guisubmenu>View Mode</guisubmenu>
1050     </menuchoice></term>
1051     <listitem><para><action>Select the layout for the view</action> from:</para>
1052     <itemizedlist>
1053     <listitem><para><guimenuitem>Columns</guimenuitem>: The values and chars
1054     interpretations are shown in the classic layout with each listed in a
1055     separate column.</para></listitem>
1056     <listitem><para><guimenuitem>Rows</guimenuitem>: The char
1057     interpretation of a byte is directly shown under the value interpretation.</para></listitem>
1058     </itemizedlist>
1059     </listitem>
1060     </varlistentry>
1061 
1062     <varlistentry>
1063     <term><menuchoice>
1064     <shortcut>
1065     <keycombo action="simul">&Ctrl;&Shift;<keycap>T</keycap></keycombo>
1066     </shortcut>
1067     <guimenu>View</guimenu>
1068     <guimenuitem>Split Horizontal</guimenuitem>
1069     </menuchoice></term>
1070     <listitem><para><action>Split the view area with the currently focused view
1071     into two parts and add a copy of the current view to the new, lower area.</action></para></listitem>
1072     </varlistentry>
1073 
1074     <varlistentry>
1075     <term><menuchoice>
1076     <shortcut>
1077     <keycombo action="simul">&Ctrl;&Shift;<keycap>L</keycap></keycombo>
1078     </shortcut>
1079     <guimenu>View</guimenu>
1080     <guimenuitem>Split Vertically</guimenuitem>
1081     </menuchoice></term>
1082     <listitem><para><action>Split the view area with the currently focused view
1083     into two parts and add a copy of the current view to the new, right area.</action></para></listitem>
1084     </varlistentry>
1085 
1086     <varlistentry>
1087     <term><menuchoice>
1088     <shortcut>
1089     <keycombo action="simul">&Ctrl;&Shift;<keycap>R</keycap></keycombo>
1090     </shortcut>
1091     <guimenu>View</guimenu>
1092     <guimenuitem>Close View Area</guimenuitem>
1093     </menuchoice></term>
1094     <listitem><para><action>Close the view area with the currently focused view.</action></para></listitem>
1095     </varlistentry>
1096 
1097     <varlistentry>
1098     <term><menuchoice>
1099     <guimenu>View</guimenu>
1100     <guimenuitem>View Profile</guimenuitem>
1101     </menuchoice></term>
1102     <listitem><para>View settings can be separately stored as view profiles.
1103     The currently selected profile can be updated directly from the current view
1104     settings, or a new one can be created from them. All view profiles can be
1105     managed in a dialog available from <menuchoice><guimenu>Settings</guimenu><guimenuitem>Manage View Profiles...</guimenuitem></menuchoice>.</para></listitem>
1106     </varlistentry>
1107 
1108 </variablelist>
1109 
1110 </sect2>
1111 
1112 <sect2 id="windows-menu">
1113 <title>Windows Menu</title>
1114 
1115     <para>Provides a list of the current views. Select the active window.</para>
1116 
1117 </sect2>
1118 
1119 <sect2 id="bookmarks-menu">
1120 <title>Bookmarks Menu</title>
1121 
1122     <para>Multiple bookmarks can be set for a single byte array. Each byte array
1123     has its own set of bookmarks, and the appropriate set is displayed at the
1124     bottom of the <guimenu>Bookmarks</guimenu> menu. Choose a bookmark
1125     from the menu to move the cursor and the view to it.
1126     <note><para>Bookmarks are currently only transient and not saved if you
1127     close a byte array or the whole program.</para></note></para>
1128 
1129 <variablelist>
1130     <varlistentry>
1131     <term><menuchoice>
1132     <shortcut>
1133     <keycombo action="simul">&Ctrl;<keycap>B</keycap></keycombo>
1134     </shortcut>
1135     <guimenu>Bookmarks</guimenu>
1136     <guimenuitem>Add Bookmark</guimenuitem>
1137     </menuchoice></term>
1138     <listitem><para>Bookmark a location within the byte array.</para></listitem>
1139     </varlistentry>
1140 
1141     <varlistentry>
1142     <term><menuchoice>
1143     <shortcut>
1144     <keycombo action="simul">&Ctrl;&Shift;<keycap>B</keycap></keycombo>
1145     </shortcut>
1146     <guimenu>Bookmarks</guimenu>
1147     <guimenuitem>Remove Bookmark</guimenuitem>
1148     </menuchoice></term>
1149     <listitem><para><action>Remove the current bookmark.</action> This command
1150     is only available if the cursor is at a bookmarked location.</para></listitem>
1151     </varlistentry>
1152 
1153     <varlistentry>
1154     <term><menuchoice>
1155     <guimenu>Bookmarks</guimenu>
1156     <guimenuitem>Remove All Bookmarks</guimenuitem>
1157     </menuchoice></term>
1158     <listitem><para><action>Clear the bookmark list.</action></para></listitem>
1159     </varlistentry>
1160 
1161     <varlistentry>
1162     <term><menuchoice>
1163     <shortcut>
1164     <keycombo action="simul">&Alt;<keycap>Up</keycap></keycombo>
1165     </shortcut>
1166     <guimenu>Bookmarks</guimenu>
1167     <guimenuitem>Goto Previous Bookmark</guimenuitem>
1168     </menuchoice></term>
1169     <listitem><para><action>Move the cursor to the previous
1170     bookmark.</action></para></listitem>
1171     </varlistentry>
1172 
1173     <varlistentry>
1174     <term><menuchoice>
1175     <shortcut>
1176     <keycombo action="simul">&Alt;<keycap>Down</keycap></keycombo>
1177     </shortcut>
1178     <guimenu>Bookmarks</guimenu>
1179     <guimenuitem>Go to Next Bookmark</guimenuitem>
1180     </menuchoice></term>
1181     <listitem><para><action>Move the cursor to the next
1182     bookmark.</action></para></listitem>
1183     </varlistentry>
1184 
1185 </variablelist>
1186 
1187 </sect2>
1188 
1189 <sect2 id="tools-menu">
1190 <title>Tools Menu</title>
1191 
1192 <para>Provides a list of installed tools. Toggle the display of each tools
1193 on or off. A detailed description of each tool you find in the <link linkend="tools">Tools</link> section.</para>
1194 
1195 </sect2>
1196 
1197 <sect2 id="settings-menu">
1198 <title>Settings Menu</title>
1199 <variablelist>
1200     <varlistentry>
1201     <term><menuchoice>
1202     <guimenu>Settings</guimenu>
1203     <guimenuitem>Manage View Profiles...</guimenuitem>
1204     </menuchoice></term>
1205     <listitem><para>Open a dialog to create, edit, delete and set a default view profile.</para></listitem>
1206     </varlistentry>
1207 </variablelist>
1208 
1209 </sect2>
1210 
1211 </sect1>
1212 
1213 </chapter>
1214 
1215 <chapter id="credits">
1216     <title>Credits and License</title>
1217 
1218     <para>
1219     &okteta;
1220     </para>
1221 
1222     <!--List all the copyright holders here-->
1223     <para>Program Copyright 2006-2012 &Friedrich.Kossebau;
1224     &Friedrich.Kossebau.email;</para>
1225 
1226     <para>Documentation Copyright 2008,2010 &Friedrich.Kossebau;
1227     &Friedrich.Kossebau.email;, &Alex.Richardson; &Alex.Richardson.email;</para>
1228 
1229     <!-- TRANS:CREDIT_FOR_TRANSLATORS -->
1230 
1231     &underFDL;
1232     &underGPL;
1233 
1234 </chapter>
1235 
1236 &documentation.index;
1237 </book>
1238 <!--
1239 Local Variables:
1240 mode: sgml
1241 sgml-minimize-attributes:nil
1242 sgml-general-insert-case:lower
1243 sgml-omittag:t
1244 sgml-shorttag:t
1245 sgml-namecase-general:t
1246 sgml-always-quote-attributes:t
1247 sgml-indent-step:0
1248 sgml-indent-data:nil
1249 sgml-parent-document:nil
1250 sgml-exposed-tags:nil
1251 sgml-local-catalogs:nil
1252 sgml-local-ecat-files:nil
1253 End:
1254 -->