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 -->