Jeroen's Collected Resource
Language Features
Welcome to our site
JCR is a very old project of mine, and this page is about JCR5, which basically means that I decided 5 times by now to rewrite the project from scratch.

JCR started long ago, in my green years of programming actually. It's precise date of origin is something I don't remember (must be between 1989 and 1992). Back then JCR was called JBCode as it was in the first place a simple encryption program only, but it did pack multiple files together (no compression though). My first big projects (back then written in Turbo Pascal) were using JBCode, which was very soon renamed to NCode (which could be considered as JCR2). When being forced to move to Windows, JCR3 came to be which was the first version also to carry the name JCR, which was by itself still written in TP, but I did make a reader in Visual Basic for it.

At last BlitzBasic came on my way, and JCR4 was written (basically to handle recursive directory handling and long file names, as JCR3 was limited for 12 characters for its entries).

Later JCR5 exists as JCR4 had not expansion possibilities and no compression. The target of JCR5 was to cover those two points most of all. (Thanks for the guys at ZLib for their compression algorithm and thanks to Mark Sibly to adept it for BlitzMax).

As JCR5 was a bit of a rushed setup, or so I realized later, it was flawed at some points. JCR6 came to fix those flaws and to make JCR extendable and ready for the future. JCR6 packs all external files you may need for creating a game and forges it into one big file. JCR6 takes away the trouble of having need to give tons of files with the installation of your game, and JCR6 also has a 'patching' engine which is extremely handy when you want patching possibilities for your own upgrades or to enable people to make some addons for your games.

JCR6 v15.10.19
Posted by: Tricky; on Oct 19th 2015

New version is now on sourceforge.

Update JCR6 modules
Posted by: Tricky; on Sep 23rd 2015

JCR6 and any program linked to it could act very odd when you changed one or more JCR6 files in the loaded resource dir AFTER you already loaded it with JCR_Dir(). It mostly resulted in very crappy data loads and that can load to bugs and errors, and mostly beyond understanding too. (for example I have a game now with a JCR6 file full off Lua scripts and sometimes if I forgot to shutdown my debug build before rebuilding my JCR6 file Lua threw errors beyond anybody's understanding. Not Lua's fault, but it makes things hard to deal with).

In the current BlitzMax modules this issue has been more properly addressed. JCR6 is now able to check if a JCR6 file (and any JCR6 file patched to it) has been modified. The JCR_B() function will now throw an understandable error when this happens. The function JCR_B uses to check this is called JCR_Changed() and you can even use it directly in your programs for your own error handling features. The best part is, it does not only work on JCR6 files. If you have a "real dir" loaded in JCR6 the system will notice when even one of the files inside has been changed. Doom WAD files and Quake Pack files too will be checked and of course also JCR5 files. If you come up with a driver for a new type of file JCR6 should be able to read, you don't have to worry about this check as JCR6 will all pick it up automatically.

The program GJCR now also takes advantage of these changes. 
At the present time these modifications are only availbe through the github repository.
Also, I was only talking about the BlitzMax modules and tools. In the Python version of JCR6 nothing has been changed.

JCR6 now on GitHub
Posted by: Tricky; on Aug 21st 2015

The focus of the JCR project is now on GitHub. Occasional updates may be done here on SourceForge every once in awhile, but if you always want to be up-to-date you'll have to go to GitHub.

I do need to note though that this build is being updated live, so stability cannot be guaranteed (if you coincidentally download something at exactly the same time I'm working on this).

I am planning to upload a new Stable Update at least once or twice a year. Despite JCR6 being a very active project (it's one of the main components in all my games currently) it does not see that many updates, and mostly it's just some fixes.

The BlitzMax modules for JCR6 can be found now along with my other BlitzMax Modules here
The PyJCR and GJCR tools can be found in the special dedicated repository here.

Both sections have their own issue trackers and that will as of today also be the place to report bugs.

JCR6 Released. JCR5 deprecated!
Posted by: Tricky; on Feb 23rd 2015

Well, it's there. The first release of JCR6. 

JCR6 has a file system that is by far more extendable than JCR5 ever was and relies on extra modules to add extra functionality. For example if you want JCR6 to compress in an algorirth it doesn't support, just write a driver for it and it does support it. 
A lot of "dirty" solutions I used in JCR5 are all passé now, and in JCR6 the approach is all better.

JCR comes with GJCR, the graphic front end for Mac and Windows. I hope to add a Linux version soon, but no promises there yet.

pyJCR replaces LJCR to create JCR files programmatically. It requires to have Python 2 installed. Windows users will need to install Python 2 in order to use it. Please note, pyJCR can NOT run in Python 3, nor is the possibility planned now or in the nearby future.


And there is a new set of BlitzMax modules. Loading JCR6 files is kept much the same as in JCR5 when it comes to the command set. Writing JCR6 files works a bit differently, however I don't think you'll spend months setting this all right.


Well that settles it... for now... :)

Posted by: Tricky; on Jan 28th 2015

Well, it's taking shape. It's not nearly good enough yet for full usage, but I'm getting somewhere here. :)

The BlitzMax modules for JCR6 can (in alpha) be found in my new module collection found here: http://trickymods.tbbs.nl

JCR6 is not yet backward compatible with JCR5. My plan is when things are further on the road to make a driver which loads JCR5 files into JCR6. JCR6 will NOT be able to output in JCR5 format.

If you already have programs made with JCR5. The BlitzMax command set has been worked out to have as minimal changes as possible for reading. Writing however did have a makeover as the old system was not really practical. 


Some other projects of mine using JCR5 will be likely transformed for JCR6, these include TeddyBear and GALE (The latter is actually already done).

Older games of mine and complete game engines will not be transformed to JCR6 for the time being. For this reason JCR5 will remain on-line in order to make those accessible to make game "hacks" or "mods" or whatever, or if you want to try out to make a game for the engine yourself (care to try to make a game in LAURA?)

The "DuCraL"-engine I'm designing for my new upcoming game, will be the first big engine to use JCR6 and thus the game will be the first JCR6 game. During the development of this game, JCR6 will be polished up some more as well and thus I hope to make a release of JCR6.

"The Secrets of Dyrt" will officially be the last game using JCR5 for the time being and with that I guess I'll bid JCR5 a fond adieu and to move on to JCR6. 

Posted by: Tricky; on Feb 10th 2014

JCR5 is a bit suffering from doing things a bit too quickly.

I do have some additions planned, but I came to the conclusion that to implement those I had to do some ugly coding, and also to do things with the JCR5 file format, and the format is already growing ugly.

JCR6 is yet in an experimental stage, but the first experiments are succesful

So I decided to make a shift to JCR6 in which things will be done a bit differently.

  1. First of all the file format of JCR6 will be better portable for extra features outside just storing files.
  2. JCR6 will be more 'driver' based. In JCR5 it required a core-update to implement new compression algorithms. In JCR6 you can add those algorithms just by adding a driver to JCR6. In Python 2.7 I managed to get JCR6 this way compatible with zlib, bz2 and lzma. I cannot yet promise the BlitzMax modules will have all these algorithms, if you are a Blitz Coder you can now easily write a module yourself, right? ;)
  3. Encryption might be possible now with modules you can add yourself. This project itself won't support encryption, but if you can hand in the drivers, JCR6 can contact those (at least, that's the idea). Still this feature has low priority, so it might take awhile before I implement this.
  4. I do plan to make a JCR5 driver to make JCR6 able to read JCR5 files
  5. I also plan to make a JCR6 driver for JCR5, however this driver will have minimal support and also only support files which are unencrypted and stored with either non-compression or zlib-compression.
  6. The command line tools LJCR, XJCR and DJCR will be replaced by PyJCR. Scripts for PyJCR must be written in (as the name suggests) Python. PyJCR itself requires Python 2.7 (which is implemented by default on OS X and Linux. On Windows you'll need to install this yourself). PJCR (the picture viewer) will be merged with GJCR. The fate of CJCR is yet unknown.


Things are in the works. As I am also in the middle of another (much bigger) project, please take into account that JCR6's development will not exactly be quick.

As long as JCR6 is unfinished JCR5 will be maintained in the sense of bugfixing whenever somebody reports one (or if I find one myself. As JCR5 is part of my other project I mentioned). When JCR6 has been released JCR5 may soon become 'deprecated'. My aim is to make JCR6 for BlitzMax as much the same as I can as JCR5 when it comes to the command set (though JCR5 uses a TMap for its pre-loaded directores. JCR6 will have its own type for that).


Anyway, things are currently hard to tell, but I am working on it. :)

JCR5 goes Python
Posted by: Tricky; on Sep 14th 2013

Okay, the avatar issue is fixed... sorry for the long delay, but I had a lot to do. :)

Next I can proudly announce that I got the JCR5 reader working in Python.
Support is yet limited, but I see greater possibilities in getting stuff to work in Python than in the other languages I did convert JCR5 to. And as I am also exploring Python for some other projects, I got a fire under my but to get the Python version to be fully compatible here.

When the Python version is fully ready for distribution (can't tell you yet when that will be) I'll update this the JCR5 version (the main version only contains a few hotfixes so far) including my Python stuff with it.

Posted by: Tricky; on Jun 6th 2013

Apologies for the messed up screen....

I'll sort that out as soon as possible....

Release 13.06.06
Posted by: Tricky; on Jun 6th 2013

The release is here, let's put up a copy of the changelog ;)

- LZMA has been tested, and with a few lines change you can even use it, but only do so when you know BlitzMax and know what you're doing. I'm still experimenting on this so I hope for good news on this in future versions. I really hate that it malfunctioned so much. Stay tuned. - LJCR has been completely rewritten from scratch and some major updates are planned for it to make using it easier as a few nasty bugs beyond fixing are on the way (alas). LJCR.AddDir2 doesn't work any more, so stay tuned for improvement on this, so you can get around this. The good side is this is that LJCR now supports JCR merging, that it has a quicker look and it's more expandable on a few things. - LJCR now also supports the LJCR.Input feature to enable you to ask questions. This allows you a multi-config in LJCR Lua scripts. - The ability for readling LJCR scripts in GJCR has been removed and there won't ever be way any more to do this inside a GUI. In replacement GJCR is now able to pack an entire directory just by dragging it into GJCR (when in create mode). This is handy for quick packing. JCR Merging is now also supported by GJCR. - In order to still make a GUI alternative for the removed script reader and creator from GJCR the new tool CJCR has been brought to life. This tool cannot read Lua Scripts, but uses its own simplified GUI scripting method, see it as a wizard to get things done. However you still can translate this script into a .lua script for LJCR to use (which is in fact what CJCR will always do as it uses LJCR for performing the actual packing). - On a temporary basis the tool PJCR was added to provide an image viewer able to read BMP, JPEG and PNG. A viewer is also planned for GJCR and when that's finished this tool will be removed. - PPC support has now officially stopped. For the last time a PPC build will be added to the upload. My PPC device is scheduled to become my 'reserve' and will most likely only be used now as a temporary replacement if one of my 'main' devices is out of order. - Linux is most likely to become supported now. The support will however become limited to JCR5 itself. When it comes to dependencies I'm afraid I cannot offer any support - JCR now has the 'IMPORT' feature. This feature can be put into a JCR file making JCR automatically import the data from a second JCR file as well while reading a file containing such a tag. This is not merging, it's rather referencing. This can be handy for large projects. Please note that LJCR does not yet support this, only the module does, this is planned to be done in the next version. DJCR, XJCR and such will however respond well to this (if any of them do not, please notify me, but it should basically just be a matter of re-compiling). GL Basic, Blitz3D and Pascal do not yet support this, however, I'm studying if I can make it possible there. - The official license is now MPL 2.0, some files that were not modified during this update may still show MPL 1.0 or 1.1, please know that these lics are OUTDATED, MPL 2.0 will most likely appear to them once any of them will be modified. The main reason for doing this is better compatibility with the GNU General Public License.
Well, I hope this new version will be satisfying ;)
Extra source for the module
Posted by: Tricky; on May 13th 2013

All modules I create and maintain will now have a place at http://tinyurl.com/trickymods  which contains a zip file will all modules of mine in uncompiled form. The JCR5 modules are also included in this file.

I most note though that I can NEVER guarantee that any module in that zip file is a stable version, same goes for the JCR5 module inside that file. On the updates I post here, the JCR5 module will just remain along the downloads, so nothing changes there.

And I must also note that the link in this message only contains the module. The tools that are part of the JCR5 project are not included in the file above.

The official next release in on the way, I hope I have time to do the finishing touches next week, but no promises yet.

See ya.

Coming Soon: JCR5 Next Release
Posted by: Tricky; on Apr 25th 2013


The next release of JCR5 is almost done, but I need you to hang on with me. I'm currently in a situation that gave me a lot of work outside of JCR5 which I (alas) must give priority.

Then another piece of bad news. LZMA has been taken off from JCR5 next release due to a lot of compilation errors on the WIndows and Linux Platforms and on MacOS X it also acts a little bit odd, but there it appears to be working. I also had a lot of issues that some files packed in LZMA became in unpacked form complete garbage. I have a few things in mind to fix these issues, but this will require time.... A LOT of time as I need to do some studies about this.
The ambition to make JCR5 compatible with LZMA has not been cancelled though. I will do some more studies on this and I already made more progress than I thought possible, I just didn't want to delay the next release because of this though.

Then a few notes with my last message here in mind:
- The creation tool of GJCR has been completely removed and been replaced by a simpler one
- In order to have full wizard capabilties in JCR creation the CJCR tool has been created
- On temporary basis the tool PJCR has been made which is a picture viewer for pictures stored inside a JCR. This tool is temporary as I plan to put a picture viewer inside GJCR

That covers it I think....
Well first my work on things outside JCR5 that MUST come first and after that I'll make the next release happen ASAP.

So hang on, guys.

A new version of JCR5 is on the way
Posted by: Tricky; on Mar 8th 2013

Well, I said it in my last update that a major update to JCR5 is on the way.

A long desire of mine was to make JCR5 compatible with the LZMA compression algorithm. There were a lot of conflicts with BlitzMax to get this done on my earlier attempts until I found out that Jan Vahro already did the dirty work for me and even released it into the public domain. Thanks Jan, you helped JCR5 a lot. Well that said I'm happy to announce that the next version of JCR5 will be LZMA compatible.

The ZLib deflate algorithm will remain present and I don't plan to deprecate it. A few reasons for that are:

  1. ZLib is more friendly on your memory while compressing. For decompressing it doesn't matter. As I want JCR5 to be able to compress in-game (when used in a game, for which it was intended), memory can be an issue.
  2. Backward compatibility
  3. There are still plans to port JCR5 to as many languages as I can. ZLib is already an issue, but can in some languages already be solved, but LZMA may be more of a problem on some languages. I really don't have the time to sort this out too deeply, so therefore this measure.
  4. There is also a technical issue on the File Table compression. Nothing big, but I won't promise it to be solved in the next update.


LJCR has be completely re-written from scratch. Of course, it still uses the JCR_Create.bmx file for its compression, but the code of LJCR itself was re-written. This was necessary to provide LJCR with the possibility to not only add all files into a JCR file, but to see JCR files it encounters as a folder as well and copy its entries into the new JCR file, in stead of adding the JCR file as a whole into a JCR file (which is pretty pointless as JCR5 cannot act JCR files inside another JCR file, and I don't even plan to make that possible in the future, either).

The re-write did have a few downsides. Lua doesn't seem to be able to address the AddDir2 and AddFIle2 methods any more. At least not directly. I don't think I can fix this, unless I do things differently than originally planned. This makes the future of these two methods a bit uncertain, so therefore I advice to avoid them in your scripts until further notice.


GJCR is a nice tool, but for serious JCR creating, it doesn't work. Therefore the current JCR creation routine in GJCR is from this moment hencheforth deprecated, and may most likely be removed in the next released. This is also due to the fact that the new LJCR has been changed so much that it won't be possible any more to keep GJCR compatible with it.

In order not to turn peeps away who rather use a GUI interface to get the job done I'm thinking to create a new app that will be a completely new script generator. This new tool won't create JCR files itself any more (but leave to that LJCR in stead) but it will contain a lot more possibilities on building scripts from a GUI interface than GJCR could ever cover. As this new tool is yet still on the drawing board, I cannot promise yet that it will be done on the next release, but I'll work as fast as I can.


And that should cover it, for now ;)

13.02.12 released
Posted by: Tricky; on Feb 12th 2013

Well, a new version and a few new features.

I've added the feature to add author and license information to the files inside a JCR5 file. I added this feature specifically because I work a lot with 3rd party stuff in my projects, and this way I can keep my JCR5 files clean and still provide the required license and copyright information.

Please note that when you make use of that, that older versions of JCR cannot read the file any more, when you don't use it, then your file will just work as normally :)

I also must note that this feature does yet only work in BlitzMax, the readers in the other languages have not yet been updated for this feature.



Then I decided to stop the official PPC support on JCR. I think it's safe to assume that nearly all Mac users have an Intel based machine by now, so no need to keep sticking on that. If you really desire a PPC build, for the time being I can still provide it, but I basically want to save myself the trouble.


I can also gladly announce that I finally could compile Linux binaries of JCR5. I could not test if they work properly as I had to compile them using a VM and Linux doesn't like the fact that I work on a FAT32 device either (it refuses to run binaries that are stored on a FAT32 device and there's nothing I can do about it). I don't expect any trouble, though.



Then I can tell you that I have a big update in the planning for LJCR.
Basically it's only a feature that allows LJCR to merge other JCR files into a big JCR file (like MJCR does, but then in a way providing a lot more possibilities). As things look now this may require me to recode LJCR from scratch and this also means that I will remove all deprecated behavior in the process.
I am not planning to bring these features into GJCR yet, and I don't know if I will in the future. GJCR was never meant for serious use, only as a quick visual tool to cover a few things up for when you are too lazy to create your own LJCR lua scripts or when you don't have full understanding of those, but maybe I'll change my mind on the way, I'll have to see about that, and it will depend on how much work this will provide me (as I do have more matters on my schedule). We'll see.

Posted by: Tricky; on Dec 20th 2012

Well, here I am, pretty ill and still working. If it's devotion or pure insanity I'll leave that up to you cheeky

I did make some huge improvements to JCR5 and a new game project of mine of which the works have only just begun will be the first to take advantage of that. It's basically a credits & remark system. As I work A LOT with third party material released in a 'free-to-use-as-long-as-you-credit' license I could take advantage of this. In stead of putting this all in a separate txt file, JCR5 can now store it by itself and both the game as DJCR and GJCR will be able to show the copyright info of each JCR-entry. That's the idea.
Downside is that when you make use of these new features that older versions of JCR5 will not be able to read the JCR file anymore, however when you don't use these features then there's no problem.

I plan to release this upgrade in combination with the Pascal unit in January 2013

Then I'm right now putting the finishing touches onto my newest game release 'Scyndi's Forest Quest'. http://sfq.sourceforge.net
A MacOS X only alpha version can already be downloaded, I hope to release the BETA or even the first official release very soon.

And so far my story for now.

A few small things
Posted by: Tricky; on Oct 31st 2012

It came to my attention that something went wrong with MJCR
It's possible that when you dl it you either get an unfinished dev version or that it's not included at all. This will be fixed in my next version update.

I can also announce that I got a reader for JCR5 working in Pascal. Yet tried in Turbo Pascal, but since nobody ever uses that anymore I'll see if it works in Free Pascal as well. If the code is Delphi compatible, I cannot say. As Delphi is based on Turbo Pascal I'd say so, but you can best try that out yourself as soon as the Pascal version is released which will be in my next update.

New release
Posted by: Tricky; on Oct 25th 2012

Version 12.10.26 has been released.


Let's sum a few things up

- New tools (see readme)
- A few cosmetic changes in LJCR
- Blitz3D reader has been released (please note, this version does not support compression so configure LJCR or GJCR correctly on this)

And so a few more things...

More info in the readme.txt file in the download folder


See ya cool


Hi there welcome to the new site.
Posted by: Tricky; on Apr 22nd 2012

Hi there;

Welcome to the official JCR5 website, which is finally accessible. Here I'll try to update you on the latest news on the project. Please note, JCR5 is an important tool for me, so (even the reasons could be a bit selfish), JCR5 is very bound to be maintained for a long time, even when I don't post updates in awhile (JCR could possibly be one of the oldest open-source projects still maintained, though this is debateble as JCR5 is the first version that went open-source) :)

With the opening of this site I can already announce that I succesfully managed to make a Blitz3D version of JCR5, and this will be opened to the public in my next version release, for which a date has not yet been set. Though BlitzPlus is very much alike Blitz3D when it comes to file handling (as far as I know), I don't know if JCR5 works on that as well, when the release it there, I hope somebody with BlitzPlus can test that out for me.

See you later, guys.

Posted by: Tricky; on Apr 22nd 2012



Powered by: TBBS
© Jeroen Petrus Broks 2010