<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.restless.systems/index.php?action=history&amp;feed=atom&amp;title=Jax_Archive</id>
	<title>Jax Archive - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.restless.systems/index.php?action=history&amp;feed=atom&amp;title=Jax_Archive"/>
	<link rel="alternate" type="text/html" href="https://wiki.restless.systems/index.php?title=Jax_Archive&amp;action=history"/>
	<updated>2026-05-29T18:11:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.restless.systems/index.php?title=Jax_Archive&amp;diff=1238&amp;oldid=prev</id>
		<title>JennyWakeman: /* Magic Number */ whoops</title>
		<link rel="alternate" type="text/html" href="https://wiki.restless.systems/index.php?title=Jax_Archive&amp;diff=1238&amp;oldid=prev"/>
		<updated>2024-09-07T03:24:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Magic Number: &lt;/span&gt; whoops&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 03:24, 7 September 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Magic Number==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Magic Number==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Jax &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;archive formats &lt;/del&gt;all begin with the bytes &amp;lt;code&amp;gt;5E 6A 61 78&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;^jax&amp;lt;/code&amp;gt; in ASCII.)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Jax&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-format archives &lt;/ins&gt;all begin with the bytes &amp;lt;code&amp;gt;5E 6A 61 78&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;^jax&amp;lt;/code&amp;gt; in ASCII.)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Records==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Records==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki-mw_:diff:1.41:old-1237:rev-1238:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>JennyWakeman</name></author>
	</entry>
	<entry>
		<id>https://wiki.restless.systems/index.php?title=Jax_Archive&amp;diff=1237&amp;oldid=prev</id>
		<title>JennyWakeman: /* Utilities */ new implementation :) thanks moff</title>
		<link rel="alternate" type="text/html" href="https://wiki.restless.systems/index.php?title=Jax_Archive&amp;diff=1237&amp;oldid=prev"/>
		<updated>2024-09-07T02:56:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Utilities: &lt;/span&gt; new implementation :) thanks moff&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:56, 7 September 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l93&quot;&gt;Line 93:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 93:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Utilities==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Utilities==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;None are officially released (as &lt;/del&gt;of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;September 6th, 2024) but several are in the works&lt;/del&gt;. The &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;reference &lt;/del&gt;implementation&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; (in a way) is Jenny&#039;s, written in Crystal&lt;/del&gt;. It is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;still a work in progress&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;There is no official implementation &lt;/ins&gt;of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jax yet&lt;/ins&gt;. The &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cenix project contains a Jax &lt;/ins&gt;implementation &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and utility capable of reading and writing Jax archives&lt;/ins&gt;. It is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;available on [https://github.com/notvelleda/cenix/tree/main/jax GitHub]&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki-mw_:diff:1.41:old-1234:rev-1237:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>JennyWakeman</name></author>
	</entry>
	<entry>
		<id>https://wiki.restless.systems/index.php?title=Jax_Archive&amp;diff=1234&amp;oldid=prev</id>
		<title>JennyWakeman: fix record types</title>
		<link rel="alternate" type="text/html" href="https://wiki.restless.systems/index.php?title=Jax_Archive&amp;diff=1234&amp;oldid=prev"/>
		<updated>2024-09-06T23:44:01Z</updated>

		<summary type="html">&lt;p&gt;fix record types&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:44, 6 September 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l23&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;!Type!!Name!!Details&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;!Type!!Name!!Details&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt;    || Record Type || &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/del&gt;d&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;` &lt;/del&gt;for directory, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/del&gt;s&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;` &lt;/del&gt;for symbolic link, and &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;`&lt;/del&gt;r&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;` &lt;/del&gt;for a regular file.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt;    || Record Type || &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;d&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt; &lt;/ins&gt;for directory, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;s&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt; &lt;/ins&gt;for symbolic link, and &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;r&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt; &lt;/ins&gt;for a regular file.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;  || Record Name || Pascal-style, see [[#Strings|Strings]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;  || Record Name || Pascal-style, see [[#Strings|Strings]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki-mw_:diff:1.41:old-1233:rev-1234:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>JennyWakeman</name></author>
	</entry>
	<entry>
		<id>https://wiki.restless.systems/index.php?title=Jax_Archive&amp;diff=1233&amp;oldid=prev</id>
		<title>JennyWakeman: create page (feedback welcome!)</title>
		<link rel="alternate" type="text/html" href="https://wiki.restless.systems/index.php?title=Jax_Archive&amp;diff=1233&amp;oldid=prev"/>
		<updated>2024-09-06T23:43:18Z</updated>

		<summary type="html">&lt;p&gt;create page (feedback welcome!)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Jax&amp;#039;&amp;#039;&amp;#039; (or &amp;#039;&amp;#039;&amp;#039;J&amp;#039;&amp;#039;&amp;#039;enny&amp;#039;s &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;rchive e&amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039;change) is an awful backronym and a simple archive format intended to be easy and cheap (processing power-wise) to parse. Structurally, it is similar to &amp;lt;code&amp;gt;tar&amp;lt;/code&amp;gt;, while not being nearly as wasteful. Instead of fixed-length fields, it uses Pascal-style strings for archive names and descriptions, as well as an additional &amp;#039;descriptor&amp;#039; field. The &amp;#039;descriptor&amp;#039; is a simple key/value style field for additional metadata.&lt;br /&gt;
&lt;br /&gt;
==Magic Number==&lt;br /&gt;
Jax archive formats all begin with the bytes &amp;lt;code&amp;gt;5E 6A 61 78&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;^jax&amp;lt;/code&amp;gt; in ASCII.)&lt;br /&gt;
&lt;br /&gt;
==Records==&lt;br /&gt;
Jax archives are structured as follows:&lt;br /&gt;
&lt;br /&gt;
*Magic number&lt;br /&gt;
*Record for File 1&lt;br /&gt;
*Data for File 1&lt;br /&gt;
*Record for File 2&lt;br /&gt;
*Data for File 2&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
Records are not aligned to any particular byte boundary and neither are the files within the archive, in the interest of creating smaller archives without the need for compression.&lt;br /&gt;
&lt;br /&gt;
Records are structured as follows. Note that a &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; is an 8-bit unsigned integer, a &amp;lt;code&amp;gt;long&amp;lt;/code&amp;gt; is a 64-bit signed integer, a &amp;lt;code&amp;gt;ulong&amp;lt;/code&amp;gt; is a 64-bit unsigned integer, and a &amp;lt;code&amp;gt;ushort&amp;lt;/code&amp;gt; is a 16-bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Jax archive record structure&lt;br /&gt;
|-&lt;br /&gt;
!Type!!Name!!Details&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt;    || Record Type || `d` for directory, `s` for symbolic link, and `r` for a regular file.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;  || Record Name || Pascal-style, see [[#Strings|Strings]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;  || Description || Also Pascal-style, see [[#Descriptors|Descriptors]] for parsing information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ulong&amp;lt;/code&amp;gt;   || Timestamp   || UNIX timestamp of last change, seconds since 12:00 AM or 00:00 on January 1st, 1970&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ushort&amp;lt;/code&amp;gt;  || File Mode   || UNIX file mode, `644` by default&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ushort&amp;lt;/code&amp;gt;  || File Owner  || UNIX file owner ID, `0` by default&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ushort&amp;lt;/code&amp;gt;  || File Group  || UNIX file group ID, `0` by default&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;long&amp;lt;/code&amp;gt;    || Size        || File size, in bytes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the record, the file&amp;#039;s content begins. If you just want to read the next record, you can skip `Size` bytes ahead and begin reading from there. Note that the archive&amp;#039;s magic number is only seen once at the very beginning and does not repeat per-record.&lt;br /&gt;
&lt;br /&gt;
===Strings===&lt;br /&gt;
Strings are encoded in Pascal-style, meaning they are prefaced by their length. The length is encoded as an unsigned 16-bit integer (`ushort`). Strings must be encoded as UTF-8.&lt;br /&gt;
&lt;br /&gt;
===Descriptors===&lt;br /&gt;
Descriptors are stored as Pascal-style strings, but they have a strict format. Thankfully, the format is fairly easy to both assemble and parse.&lt;br /&gt;
&lt;br /&gt;
Descriptors are an extensible key/value format for extra file metadata. They look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
key1=value1;key2=value2;bool1;bool2=false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All keys and values are strings. Key/value pairs are separated by the semicolon (&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;U+003B&amp;lt;/code&amp;gt;). The end of a key and the beginning of a value is denoted by the equals sign (&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;U+003E&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Key/value pairs may be missing the value (see `bool1` above). In this case, it must be assumed that the value is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. A pair &amp;#039;&amp;#039;&amp;#039;must&amp;#039;&amp;#039;&amp;#039; contain at least the key.&lt;br /&gt;
&lt;br /&gt;
A trailing semicolon is not required. All of the following are valid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
key1=value1;key2=value2;bool1;bool2=false;&lt;br /&gt;
key1=value1;key2=value2;bool1=true;bool2=false;&lt;br /&gt;
key1=value1;key2=value2;bool1;bool2=false&lt;br /&gt;
key1=value1;key2=value2;bool1=true;bool2=false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Storing a semicolon (&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;) or equals sign (&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;) in a key or value is done by encoding it as a URL entity (&amp;lt;code&amp;gt;%3b&amp;lt;/code&amp;gt; for semicolons, &amp;lt;code&amp;gt;%3e&amp;lt;/code&amp;gt; for equals signs. This is case sensitive.) Note that no other URL entities are to be parsed or encoded.&lt;br /&gt;
&lt;br /&gt;
The following is an example of an encoded equals sign in a value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
einstein-relativity=e%3emc^2;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By storing information in a simple dictionary, the Jax archive format is extensible with up to 65,536 bytes of additional metadata. Take the following representation&lt;br /&gt;
of a partial Jax entry (in pseudocode):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
[ type = &amp;#039;r&amp;#039;,&lt;br /&gt;
  name = &amp;#039;Test File.001&amp;#039;,&lt;br /&gt;
  description = [&amp;#039;nextFile&amp;#039;:  &amp;#039;Test File.002&amp;#039;,&lt;br /&gt;
                 &amp;#039;ownerName&amp;#039;: &amp;#039;John Doe&amp;#039;,&lt;br /&gt;
                 &amp;#039;groupName&amp;#039;: &amp;#039;wheel&amp;#039; ],&lt;br /&gt;
  size = 512000,&lt;br /&gt;
  uid = 6756,&lt;br /&gt;
  group = 12 ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example is by no means part of the Jax standard, but it demonstrates a potential use case for the extensible key/value store.&lt;br /&gt;
&lt;br /&gt;
==Utilities==&lt;br /&gt;
&lt;br /&gt;
None are officially released (as of September 6th, 2024) but several are in the works. The &amp;quot;reference implementation&amp;quot; (in a way) is Jenny&amp;#039;s, written in Crystal. It is still a work in progress.&lt;/div&gt;</summary>
		<author><name>JennyWakeman</name></author>
	</entry>
</feed>