<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
<html><h1>Options for structs,unions and arrays</h1><table><tr><th>Name</th><th>Documentation</th><th>Default</th></tr>
<tr><td>notag</td><td>alias for tag false</td>
<tr><td>tag</td><td>Should the array index be displayed</td><td> false </td>
<tr><td>width</td><td>How many values should be displayed in a row</td><td>infinite</td>
</table></html>
[[Welcome]]
<html>
<head>
</head>
<body>
<h1>First steps in the digital world</h1> 
Start with creating a new .hv file in Eclipse with file/new/Other, General / .hv file.  Enter this program:
<code><pre>
file("/dev/zero",@int:8);
</pre></code>
for unix, or
<code><pre>
file("NUL",@int:8);
</pre></code>
for windows.<p>

Save this file, and run it in eclipse (for example by right clicking on it and selecting Run as > Hyperview. 
A new window appears with the number zero. This means that, if we read the very first 8 bits of the device /dev/zero or
nul, we will get the number 0. Not surprising, as both devices generate an endless series of 0's when asked.<p>

If you've ever programmed in C or one of its syntactic lookalikes, most of the structure above should be clear to you.
A little surprise is the @ sign, which introduces a data type in an expression.  In a lot of cases it is optional.<p>

In order to make this example OS-independant, there's a little trick I have to introduce next, called inline data.

<code><pre>
file("data:01 02",@int:8);
</pre></code>

This pretends to have created a file of 2 bytes, with data 01 hexadecimal and 02 hexadecimal.  Run it, and you'll
see the number change.  Not how only the first byte, 01, is used.  There is nothing in our .hv file causing it
to read the 02, so it is ignored.

<h1>Integer types</h1> 
  
Let's play a bit with the int type: First of all, you might want to change its signedness:

<code><pre>
file("data:FF",@unsigned int:8);
</pre></code>
 gives you 255, while
<code><pre>
file("data:FF",@signed int:8);
</pre></code>
 renders -1

Let's make it harder.  Suppose you'd like to see the number in hexadecimal:
<code><pre>
file("data:FF",@unsigned int:8(base:16) );
</pre></code>
Here you see how an option has been attached to the int datatype. In general, you might want to prefix the number with 0x, 
as is customary in C and derivates:
<code><pre>
file("data:FF",@unsigned int:8(base:16,prefix:"0x") );
</pre></code>
nicely renders 0xFF, as the gods intended life to be.

As this is a very normal configuration, there is a shortcut available:
<code><pre>
file("data:FF",@unsigned int:8(hex) );
</pre></code>

As you guessed, the 8 stands for the 8 bits we read from the file.
<code><pre>
file("data:12 34",@int:4);
</pre></code>
reads 4 bits (or half a byte) from the file.  As we start reading from the lowest bits, you'll see the number 2.

<code><pre>
file("data:12 34",@int:16);
</pre></code>
is a bit more interesting: Will it read the 2 bytes lsb first or msb first?  Basically, you don't want to know.
You'd better specify it explicitly,  of course with an option:
<code><pre>
file("data:12 34",@int:16(hex,order:intel));
</pre></code>
renders 0x3412 and
<code><pre>
file("data:12 34",@int:16(hex,order:network));
</pre></code>
renders 0x1234.

int's are not the only simple data types available, there's also characters:
<code><pre>
file("data:48",@char:8);
</pre></code>
render the letter 'H'.

Also there are the enumerations.
<code><pre>
file("data:01",@enum:8{
	ZERO,
	ONE=1,
	TWO,
	FIFTY=50	
});
</pre></code>
renders the identifier ONE.
<p>
Both characters and enums are basically integers in disguise, so you can give them endianness, sizes, signedness,
etc... They are also available for calculation.
<p>
<h1>Structures</h1> 
At this point, you've probably realized there is no end to the fun you can have with a simple number,
so it's time to move on to more advanced topics: The structure.  The basic idea comes straight from C:
<code><pre>
file("data:01 02 03",@struct{
	int:8 one;
	int:16(hex) twoAndThree;
});
</pre></code>

C unions are also present: They behave like a struct, except all members start at the same adress, instead of following each other.  This results in multiple views of the same data.

<code><pre>
file("data:01 02",@union{
	struct {int:8(hex) lowByte,highByte;} bytes;
	int:16(hex) word;
});
</pre></code>

A struct or union can contain virtual members. These do not take space on disk, but get their value
from a calculation:
<code><pre>

file("data:01 02",@struct{
	int:8 one;
	int:8 two;
	virtual int sum=one+two;
});
</pre></code>

Another  advanced feature is a condition, which decides if a structure will be in use:
<code><pre>
file("data:01 02",@struct{
	int:8 one;
	struct if(one==1234){
		int:8 invisible;
	} hidden;
	int:8 two;
});
</pre></code>
will render 1 2, and the invisible field will simply be skipped.

<h1>Expressions</h1>
The HV expressions are inspired by C: The standard integer and boolean operators are available.  Unlike C but like java, boolean expressions return booleans, not integers.

<h1>Arrays</h1>
Arrays are comparable to C:
<code><pre>
file("data:01 02",@int:8[2]);
</pre></code>

The size needs not be constant:
<code><pre>
file("data:02 01 03",@struct{
	int:8 size;
	int:8[size] data;
});
</pre></code>
As the array is part of the type, it must be attached to the type.  This means <code>int:8[2] x;</code> is acceptable, but <code>int:8 x[2];</code> is not.

<h1>Pointers</h1>
Standard C pointers are also available, with a twist: You need to specify both the target and the type of the pointer.  Pointers are calculated in bytes, starting from 0:
<code><pre>
file("data:02 00 01 03",@int:16 (hex) *(int:8) );
</pre></code>
will read the 8 bits pointer (02), seek to the 2nd byte (01), read 16 bits and render them as a hexadecimal number (0x103)

Just like structures, pointers can be made conditional :
<code><pre>
file("data:02 00 01 03",@int:16 (hex) *(int:8) if(true));
</pre></code>

They can also be virtual if they are contained in a structure:
<code><pre>
file("data:01 02 00 00 03",@struct{
	int:8 exists;
	int:8 pointerBase;
	virtual int* (int) if(exists==1) thePointer= pointerBase*2;
});</pre></code>


<h1>Others - typedef</h1>
C-style typedefs are available as a simple abstraction.  Also, Structures can be named:
<code><pre>
typedef unsigned int:8(hex) Byte;
typedef unsigned int:16(hex,order:intel) Word;

struct FileStructure{
	Word size;
	Byte[size] data;
};

file("data:02 00 10 11",@FileStructure);
</pre></code>
</body>
</html>
<html><head></head><body><table><tr><td><a name='grammar_START' class='prodName'>START</a> =</td><td><a href='#grammar_item-repeatend-;' class='nonterminal'>item-repeatend-;</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_item-repeatend-;' class='prodName'>item-repeatend-;</a> =</td><td><a href='#grammar_item-repeat-;' class='nonterminal'>item-repeat-;</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_item-repeat-;' class='nonterminal'>item-repeat-;</a> "<span class='symbol'>;</span>" </td></tr>
<tr><td>|</td><td></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_item-repeat-;' class='prodName'>item-repeat-;</a> =</td><td><a href='#grammar_item' class='nonterminal'>item</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_item-repeat-;' class='nonterminal'>item-repeat-;</a> "<span class='symbol'>;</span>" <a href='#grammar_item' class='nonterminal'>item</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_item' class='prodName'>item</a> =</td><td><a href='#grammar_structtype' class='nonterminal'>structtype</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>typedef</span>" <a href='#grammar_type' class='nonterminal'>type</a> <a href='#grammar_typename' class='nonterminal'>typename</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expression' class='nonterminal'>expression</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expression' class='prodName'>expression</a> =</td><td><a href='#grammar_expr12' class='nonterminal'>expr12</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr12' class='nonterminal'>expr12</a> "<span class='symbol'>?</span>" <a href='#grammar_expression' class='nonterminal'>expression</a> "<span class='symbol'>:</span>" <a href='#grammar_expression' class='nonterminal'>expression</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr12' class='prodName'>expr12</a> =</td><td><a href='#grammar_expr11' class='nonterminal'>expr11</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr12' class='nonterminal'>expr12</a> "<span class='symbol'>||</span>" <a href='#grammar_expr11' class='nonterminal'>expr11</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr11' class='prodName'>expr11</a> =</td><td><a href='#grammar_expr10' class='nonterminal'>expr10</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr11' class='nonterminal'>expr11</a> "<span class='symbol'>&&</span>" <a href='#grammar_expr10' class='nonterminal'>expr10</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr10' class='prodName'>expr10</a> =</td><td><a href='#grammar_expr9' class='nonterminal'>expr9</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr10' class='nonterminal'>expr10</a> "<span class='symbol'>|</span>" <a href='#grammar_expr9' class='nonterminal'>expr9</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr9' class='prodName'>expr9</a> =</td><td><a href='#grammar_expr8' class='nonterminal'>expr8</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr9' class='nonterminal'>expr9</a> "<span class='symbol'>^</span>" <a href='#grammar_expr8' class='nonterminal'>expr8</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr8' class='prodName'>expr8</a> =</td><td><a href='#grammar_expr7' class='nonterminal'>expr7</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr8' class='nonterminal'>expr8</a> "<span class='symbol'>&</span>" <a href='#grammar_expr7' class='nonterminal'>expr7</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr7' class='prodName'>expr7</a> =</td><td><a href='#grammar_expr6' class='nonterminal'>expr6</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr6' class='nonterminal'>expr6</a> "<span class='symbol'>==</span>" <a href='#grammar_expr6' class='nonterminal'>expr6</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr6' class='nonterminal'>expr6</a> "<span class='symbol'>!=</span>" <a href='#grammar_expr6' class='nonterminal'>expr6</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr6' class='prodName'>expr6</a> =</td><td><a href='#grammar_expr5' class='nonterminal'>expr5</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr5' class='nonterminal'>expr5</a> "<span class='symbol'><=</span>" <a href='#grammar_expr5' class='nonterminal'>expr5</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr5' class='nonterminal'>expr5</a> "<span class='symbol'>>=</span>" <a href='#grammar_expr5' class='nonterminal'>expr5</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr5' class='nonterminal'>expr5</a> "<span class='symbol'><</span>" <a href='#grammar_expr5' class='nonterminal'>expr5</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr5' class='nonterminal'>expr5</a> "<span class='symbol'>></span>" <a href='#grammar_expr5' class='nonterminal'>expr5</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr5' class='prodName'>expr5</a> =</td><td><a href='#grammar_expr4' class='nonterminal'>expr4</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr4' class='nonterminal'>expr4</a> "<span class='symbol'><<</span>" <a href='#grammar_expr4' class='nonterminal'>expr4</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr4' class='nonterminal'>expr4</a> "<span class='symbol'>>></span>" <a href='#grammar_expr4' class='nonterminal'>expr4</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr4' class='prodName'>expr4</a> =</td><td><a href='#grammar_expr3' class='nonterminal'>expr3</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr4' class='nonterminal'>expr4</a> "<span class='symbol'>+</span>" <a href='#grammar_expr3' class='nonterminal'>expr3</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr4' class='nonterminal'>expr4</a> "<span class='symbol'>-</span>" <a href='#grammar_expr3' class='nonterminal'>expr3</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr3' class='prodName'>expr3</a> =</td><td><a href='#grammar_expr2' class='nonterminal'>expr2</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr3' class='nonterminal'>expr3</a> "<span class='symbol'>*</span>" <a href='#grammar_expr2' class='nonterminal'>expr2</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr3' class='nonterminal'>expr3</a> "<span class='symbol'>/</span>" <a href='#grammar_expr2' class='nonterminal'>expr2</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr3' class='nonterminal'>expr3</a> "<span class='symbol'>%</span>" <a href='#grammar_expr2' class='nonterminal'>expr2</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr2' class='prodName'>expr2</a> =</td><td><a href='#grammar_expr1' class='nonterminal'>expr1</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>+</span>" <a href='#grammar_expr1' class='nonterminal'>expr1</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>-</span>" <a href='#grammar_expr1' class='nonterminal'>expr1</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>~</span>" <a href='#grammar_expr1' class='nonterminal'>expr1</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>!</span>" <a href='#grammar_expr2' class='nonterminal'>expr2</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>*</span>" <a href='#grammar_expr2' class='nonterminal'>expr2</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr1' class='prodName'>expr1</a> =</td><td><a href='#grammar_expr0' class='nonterminal'>expr0</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr1' class='nonterminal'>expr1</a> "<span class='symbol'>-></span>" "<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_expr0' class='prodName'>expr0</a> =</td><td><a href='#grammar_exprCore' class='nonterminal'>exprCore</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr0' class='nonterminal'>expr0</a> "<span class='symbol'>[</span>" <a href='#grammar_expression' class='nonterminal'>expression</a> "<span class='symbol'>]</span>" </td></tr>
<tr><td>|</td><td><a href='#grammar_expr0' class='nonterminal'>expr0</a> "<span class='symbol'>.</span>" "<span class='symbol'>IDENTIFIER</span>" <a href='#grammar_funcArg-repeatend-,' class='nonterminal'>funcArg-repeatend-,</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_expr0' class='nonterminal'>expr0</a> "<span class='symbol'>.</span>" "<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_funcArg-repeatend-,' class='prodName'>funcArg-repeatend-,</a> =</td><td><a href='#grammar_funcArg-repeat-,' class='nonterminal'>funcArg-repeat-,</a> "<span class='symbol'>)</span>" </td></tr>
<tr><td>|</td><td><a href='#grammar_funcArg-repeat-,' class='nonterminal'>funcArg-repeat-,</a> "<span class='symbol'>,</span>" "<span class='symbol'>)</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>(</span>" "<span class='symbol'>)</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_funcArg-repeat-,' class='prodName'>funcArg-repeat-,</a> =</td><td>"<span class='symbol'>(</span>" <a href='#grammar_funcArg' class='nonterminal'>funcArg</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_funcArg-repeat-,' class='nonterminal'>funcArg-repeat-,</a> "<span class='symbol'>,</span>" <a href='#grammar_funcArg' class='nonterminal'>funcArg</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_funcArg' class='prodName'>funcArg</a> =</td><td><a href='#grammar_expression' class='nonterminal'>expression</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>@</span>" <a href='#grammar_type' class='nonterminal'>type</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_exprCore' class='prodName'>exprCore</a> =</td><td>"<span class='symbol'>STRING</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>NUMBER</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>true</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>false</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>IDENTIFIER</span>" <a href='#grammar_funcArg-repeatend-,' class='nonterminal'>funcArg-repeatend-,</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>(</span>" <a href='#grammar_expression' class='nonterminal'>expression</a> "<span class='symbol'>)</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_typename' class='prodName'>typename</a> =</td><td>"<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_type' class='prodName'>type</a> =</td><td><a href='#grammar_type1' class='nonterminal'>type1</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_type' class='nonterminal'>type</a> "<span class='symbol'>*</span>" <a href='#grammar_pointer-container' class='nonterminal'>pointer-container</a> <a href='#grammar_pointer-if' class='nonterminal'>pointer-if</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_pointer-if' class='prodName'>pointer-if</a> =</td><td>"<span class='symbol'>if</span>" "<span class='symbol'>(</span>" <a href='#grammar_expression' class='nonterminal'>expression</a> "<span class='symbol'>)</span>" </td></tr>
<tr><td>|</td><td></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_pointer-container' class='prodName'>pointer-container</a> =</td><td>"<span class='symbol'>(</span>" <a href='#grammar_type' class='nonterminal'>type</a> "<span class='symbol'>)</span>" </td></tr>
<tr><td>|</td><td></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_type1' class='prodName'>type1</a> =</td><td><a href='#grammar_type2' class='nonterminal'>type2</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_type1' class='nonterminal'>type1</a> "<span class='symbol'>[</span>" <a href='#grammar_maybe-1' class='nonterminal'>maybe-1</a> "<span class='symbol'>]</span>" <a href='#grammar_options' class='nonterminal'>options</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_options' class='prodName'>options</a> =</td><td><a href='#grammar_option-repeatend-,' class='nonterminal'>option-repeatend-,</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_option-repeatend-,' class='prodName'>option-repeatend-,</a> =</td><td><a href='#grammar_option-repeat-,' class='nonterminal'>option-repeat-,</a> "<span class='symbol'>)</span>" </td></tr>
<tr><td>|</td><td><a href='#grammar_option-repeat-,' class='nonterminal'>option-repeat-,</a> "<span class='symbol'>,</span>" "<span class='symbol'>)</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>(</span>" "<span class='symbol'>)</span>" </td></tr>
<tr><td>|</td><td></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_option-repeat-,' class='prodName'>option-repeat-,</a> =</td><td>"<span class='symbol'>(</span>" <a href='#grammar_option' class='nonterminal'>option</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_option-repeat-,' class='nonterminal'>option-repeat-,</a> "<span class='symbol'>,</span>" <a href='#grammar_option' class='nonterminal'>option</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_option' class='prodName'>option</a> =</td><td>"<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>IDENTIFIER</span>" "<span class='symbol'>:</span>" "<span class='symbol'>STRING</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>IDENTIFIER</span>" "<span class='symbol'>:</span>" "<span class='symbol'>NUMBER</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>IDENTIFIER</span>" "<span class='symbol'>:</span>" "<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>IDENTIFIER</span>" "<span class='symbol'>:</span>" "<span class='symbol'>true</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>IDENTIFIER</span>" "<span class='symbol'>:</span>" "<span class='symbol'>false</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_maybe-1' class='prodName'>maybe-1</a> =</td><td><a href='#grammar_expression' class='nonterminal'>expression</a> </td></tr>
<tr><td>|</td><td></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_type2' class='prodName'>type2</a> =</td><td><a href='#grammar_named' class='nonterminal'>named</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_intModifier-repeat1' class='nonterminal'>intModifier-repeat1</a> <a href='#grammar_maybeBits' class='nonterminal'>maybeBits</a> <a href='#grammar_options' class='nonterminal'>options</a> <a href='#grammar_EnumItem-repeatend-,' class='nonterminal'>EnumItem-repeatend-,</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>bool</span>" </td></tr>
<tr><td>|</td><td><a href='#grammar_structtype' class='nonterminal'>structtype</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_EnumItem-repeatend-,' class='prodName'>EnumItem-repeatend-,</a> =</td><td><a href='#grammar_EnumItem-repeat-,' class='nonterminal'>EnumItem-repeat-,</a> "<span class='symbol'>}</span>" </td></tr>
<tr><td>|</td><td><a href='#grammar_EnumItem-repeat-,' class='nonterminal'>EnumItem-repeat-,</a> "<span class='symbol'>,</span>" "<span class='symbol'>}</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>{</span>" "<span class='symbol'>}</span>" </td></tr>
<tr><td>|</td><td></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_EnumItem-repeat-,' class='prodName'>EnumItem-repeat-,</a> =</td><td>"<span class='symbol'>{</span>" <a href='#grammar_EnumItem' class='nonterminal'>EnumItem</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_EnumItem-repeat-,' class='nonterminal'>EnumItem-repeat-,</a> "<span class='symbol'>,</span>" <a href='#grammar_EnumItem' class='nonterminal'>EnumItem</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_EnumItem' class='prodName'>EnumItem</a> =</td><td>"<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>IDENTIFIER</span>" "<span class='symbol'>=</span>" "<span class='symbol'>NUMBER</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_maybeBits' class='prodName'>maybeBits</a> =</td><td></td></tr>
<tr><td>|</td><td>"<span class='symbol'>:</span>" "<span class='symbol'>NUMBER</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_intModifier-repeat1' class='prodName'>intModifier-repeat1</a> =</td><td><a href='#grammar_intModifier' class='nonterminal'>intModifier</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_intModifier-repeat1' class='nonterminal'>intModifier-repeat1</a> <a href='#grammar_intModifier' class='nonterminal'>intModifier</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_intModifier' class='prodName'>intModifier</a> =</td><td>"<span class='symbol'>int</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>char</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>enum</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>unsigned</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>signed</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_named' class='prodName'>named</a> =</td><td>"<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>|</td><td><a href='#grammar_named' class='nonterminal'>named</a> "<span class='symbol'>.</span>" "<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_structtype' class='prodName'>structtype</a> =</td><td>"<span class='symbol'>struct</span>" <a href='#grammar_name' class='nonterminal'>name</a> <a href='#grammar_if' class='nonterminal'>if</a> <a href='#grammar_options' class='nonterminal'>options</a> <a href='#grammar_member-repeatend-;' class='nonterminal'>member-repeatend-;</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>union</span>" <a href='#grammar_name' class='nonterminal'>name</a> <a href='#grammar_if' class='nonterminal'>if</a> <a href='#grammar_options' class='nonterminal'>options</a> <a href='#grammar_member-repeatend-;' class='nonterminal'>member-repeatend-;</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_member-repeatend-;' class='prodName'>member-repeatend-;</a> =</td><td><a href='#grammar_member-repeat-;' class='nonterminal'>member-repeat-;</a> "<span class='symbol'>}</span>" </td></tr>
<tr><td>|</td><td><a href='#grammar_member-repeat-;' class='nonterminal'>member-repeat-;</a> "<span class='symbol'>;</span>" "<span class='symbol'>}</span>" </td></tr>
<tr><td>|</td><td>"<span class='symbol'>{</span>" "<span class='symbol'>}</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_member-repeat-;' class='prodName'>member-repeat-;</a> =</td><td>"<span class='symbol'>{</span>" <a href='#grammar_member' class='nonterminal'>member</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_member-repeat-;' class='nonterminal'>member-repeat-;</a> "<span class='symbol'>;</span>" <a href='#grammar_member' class='nonterminal'>member</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_member' class='prodName'>member</a> =</td><td><a href='#grammar_type' class='nonterminal'>type</a> <a href='#grammar_DummyTerminal-repeatend-,' class='nonterminal'>DummyTerminal-repeatend-,</a> </td></tr>
<tr><td>|</td><td>"<span class='symbol'>virtual</span>" <a href='#grammar_type' class='nonterminal'>type</a> "<span class='symbol'>IDENTIFIER</span>" "<span class='symbol'>=</span>" <a href='#grammar_expression' class='nonterminal'>expression</a> </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_DummyTerminal-repeatend-,' class='prodName'>DummyTerminal-repeatend-,</a> =</td><td><a href='#grammar_DummyTerminal-repeat-,' class='nonterminal'>DummyTerminal-repeat-,</a> </td></tr>
<tr><td>|</td><td><a href='#grammar_DummyTerminal-repeat-,' class='nonterminal'>DummyTerminal-repeat-,</a> "<span class='symbol'>,</span>" </td></tr>
<tr><td>|</td><td></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_DummyTerminal-repeat-,' class='prodName'>DummyTerminal-repeat-,</a> =</td><td>"<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>|</td><td><a href='#grammar_DummyTerminal-repeat-,' class='nonterminal'>DummyTerminal-repeat-,</a> "<span class='symbol'>,</span>" "<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_if' class='prodName'>if</a> =</td><td></td></tr>
<tr><td>|</td><td>"<span class='symbol'>if</span>" "<span class='symbol'>(</span>" <a href='#grammar_expression' class='nonterminal'>expression</a> "<span class='symbol'>)</span>" </td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><a name='grammar_name' class='prodName'>name</a> =</td><td>"<span class='symbol'>IDENTIFIER</span>" </td></tr>
<tr><td>|</td><td></td></tr>
<tr><td>&nbsp;</td></tr>
</table></body>
</html>
The full integer syntax is:
*unsigned or signed (default:signed)
*int, char or enum, (defaut:int)
*number of bits (default:8)
*options
*enumList
Each part is taken from a default integr if not specified.  Future versions should allow you to specify this default, for now, consider it undefined.

When using an enum, you should specify a list of constants, each followed by an expression:
<html><pre><code>
enum X:8 = {
	X1=e1,
	X2=e2,
	X3=z3
	...
}
</code></pre></html>
If no expression is given, HV uses either 0 for the first item, or 1 more than the last item if possible.
<html><h1>Options for integer types</h1><table><tr><th>Name</th><th>Documentation</th><th>Default</th></tr>
<tr><td>binary</td><td>alias for base 2 prefix 0b</td>
<tr><td>hex</td><td>alias for base 16 prefix 0x</td>
<tr><td>octal</td><td>alias for base 8 prefix 0o</td>
<tr><td>decimal</td><td>alias for base 10</td>
<tr><td>plus</td><td>Character to prepend to a positive number</td><td></td>
<tr><td>pad</td><td>Character to prepend to this number if not long enough</td><td> </td>
<tr><td>prefix</td><td>Text before the number</td><td></td>
<tr><td>base</td><td>Numeric base, 10 for decimal etc..</td><td>10(decimal)</td>
<tr><td>size</td><td>Total length of the output</td><td>as needed</td>
</table><h1>Options for character types</h1><table><tr><th>Name</th><th>Documentation</th><th>Default</th></tr>
<tr><td>charset</td><td>Character set</td><td>ASCII</td>
</table>
<h1>Options for enumeration types</h1><table><tr><th>Name</th><th>Documentation</th><th>Default</th></tr>
</table>
</html>
[[Welcome]]
[[Getting Started]]
[[Reference]]
[[Tiddly man page|GettingStarted]]
[[Grammar]] - A dump of  the grammar, straight from the parser
[[Integer reference]]
[[Struct/union reference]]
[[Pointer Reference]]
[[Array Reference]]
Not your granny's hex viewer
<html>Hyperview<br><img src="rolstoel-128.png"/> </html>
<html><h1>Options for structs,unions and arrays</h1><table><tr><th>Name</th><th>Documentation</th><th>Default</th></tr>
<tr><td>notag</td><td>alias for tag false</td>
<tr><td>tag</td><td>Should the array index be displayed</td><td>true</td>
<tr><td>width</td><td>How many values should be displayed in a row</td><td>1</td>
</table></html>
Welcom to hyperview, the hex viewer which interpretes the structure of your data.
For setting up your environment and a simple demo, see the movie at https://bitbucket.org/harkanlangbaard/hyperview/downloads/upAndRunning.swf
If this is your first visit, you'll want to read [[Getting Started]]