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><&URL;(s)></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 (⪚ 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 ⪚ 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><data></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><primitive></emphasis></emphasis></term>
0395 <listitem><para>To create a primitive data types like ⪚ <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><bitfield></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><bitfield></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><enum></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><enumDef></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><enumDef></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><primitive></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><flags></emphasis></emphasis></term>
0472 <listitem><para>This is the same as <emphasis><enum></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><struct></emphasis></emphasis></term>
0478 <listitem><para>To create a structure. All other elements (including <emphasis><struct></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><union></emphasis></emphasis></term>
0484 <listitem><para>To create a union. Basically the same as <emphasis><struct></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><array></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><array></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><primitive></emphasis>, <emphasis><enum></emphasis> or <emphasis><flags></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><string></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 <?xml version="1.0" encoding="UTF-8"?>
0620 <data>
0621 <struct name="simple">
0622 <primitive name="aChar" type="Char"/>
0623 <primitive name="anInt" type="Int32"/>
0624 <bitfield name="bitFlag" type="bool" width="1"/>
0625 <bitfield name="padding" type="unsigned" width="7"/>
0626 </struct>
0627 </data>
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 <?xml version="1.0" encoding="UTF-8"?>
0677 <data>
0678 <struct name="complex">
0679 <primitive name="size" type="UInt8" />
0680 <union name="aUnion">
0681 <array name="fourBytes" length="4">
0682 <primitive type="Int8" />
0683 </array>
0684 </union>
0685 <struct name="nested">
0686 <array name="string" length="size"> <!-- references the field size above -->
0687 <primitive type="Char" />
0688 </array>
0689 </struct>
0690 </struct>
0691 </data>
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/menus.html">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 -->