First of all, the reasons why I programmed this utility. I received a CD-R burner for Christmas 1998 and soon enough, CD-R started to crop all over the place and when I was tired of trying to figure out where in the world a certain file was stored. I realized I needed a way to catalog them in a database. I remembered an ad about DiskCataloger(TM) from Sheridan Software Systems, Inc. in PC Magazine somewhere in 1996, if I remember correctly. I didn't have any use for it in that time. In any case, I looked back at that product in summer 1999. I realized a Win32 only product was not the solution as I often use OS/2, WinNT/98 and sometimes Linux, FreeBSD and BeOS. I tested DiskCataloger(TM) anyway, but I realized soon enough that is was very unstable and unreliable, not something I want to use. It's database was a simple linear range of entries rendering each operations dead slow and unreliable on big databases.
So I decided to build my own program in JDK 1.1. I wanted to learn and do something in Java and Disk Indexer was a perfect candidate. That is the second reason. I learned Java during summer 1999 and found out about Swing 1.1 so I never touched AWT Components. I realized that writing a program like Disk Indexer in Java would prevent it to hook the operating system to automatically reflect changes to the disks, but at least for CD-Rs that do not change often, it is not very important. Half way through building my first hierarchical database and my first Java program, another "Disk Cataloger" type program for Java appears, DiskCatalog by Yves Hetzer, but I did not like the interface and the underlying model. But I liked the idea of storing MP3 ID3 tag and bitmap thumbnails.
The format of the database used by Disk Indexer is available in another HTML file.
Thanks goes to Anousone Kitisa for making the nice logo and icon!
From the command line:
JDK/JRE 1.1 with JFC/Swing 1.1.1:
jre -cp %classpath%;DiskIndexer.jar DiskIndexer [path to database file] [-proxy host:port]
Java 2:
java -jar DiskIndexer.jar [path to database file] [-proxy host:port]
The default path to the database file is "./diskindexer.index". The proxy parameter is just an unimportant parameter so that the browser used in the Help menu can load URL from the Internet, if you wish to do that, and that you need a proxy to access those URLs.
Note: %classpath%;DiskIndexer.jar is for DOS style OS (OS/2, NT and Windows). $classpath:DiskIndexer.jar must be used on Unix style OS. Moreover, jre does not use the environmental variable HOME to set the system property "user.home" that DiskIndexer uses to save properties. java does not have this problem. A few sample batch files have been provided for your convenience. MacOS users will have to execute DiskIndexer class inside DiskIndexer.jar from the GUI.
If you do not already have all the Java components needed to run Disk Indexer, here are links to sites that will be helpful:
For the GUI, I tried to mimick the old fashioned File Manager type interface, but Swing 1.1 JTree and JTable were not very cooperative, but it finally gave something useable. So on the left you have all the nodes that can contain other nodes and on the right you have a list of nodes contained in the node selected in the tree. Each node have a popup menu. The menu bar on top contains shortcut to this popup menu.
There are five types of node. Files, Directories, Disk Volumes, Containers and Zip Files. Containers are used to classify your Disk Volumes which contain Files, Directories, and Zip Files. Zip Files are displayed as Folders in Disk Indexer eventhough they are Files. In the Tree and Table, the description is displayed for Disk Volumes instead of the filename, since seeing twenty times "d:\" or "/cdrom" isn't very helpful.
Columns in the tables can be sorted by pressing the mouse button on the title of the column desired for ascending sorting, or by pressing the mouse button with shift pressed down to sort the column in descending order. By default, the tables are sorted in ascending order by Type (using the Icon column).
Open - Will look at the Assocation Table and launch the appropriate
executable. If you have an association with extension * (a lone star) which
will match any file, it will be used as default if nothing else matches.
Properties - Displays the node's properties. The filename and
description can be changed there as well as the ID3 Tag. The thumbnail
is found in the Properties dialog also.
Delete - uuh..
Pickup/Drop/Cancel Drag - This is a simili drag and drop function
instead of real drag and drop which is only available in Java 2. It is
used to move nodes around. It works like in OS/2. In Windows, it works
like Cut/Paste however you can Pickup multiple times. You have to do Cancel
Drag to remove all nodes from the "pool".
Search - Will open the Search Dialog and will set the root of
the search to the node used to open it.
Rescan - Will rescan a "Disk Volume". It actually adds a Disk
and deletes the old one.
Add - Opens an Add Dialog to either scan a Disk for the first
time or add a new Container.
When double clicking or pressing Enter on a node in the Table, if it has the type File it executes Open on it, otherwize, it lists its content by selecting the equivalent node in the Tree.
Note: All changes made to Disk Indexer database will not reflect on the original media. I am unsure if it would be desirable to do otherwize. Please send me e-mail concerning your thoughts on this subject.
Associations - Here you can add Associations for any type of extension (actually, you have to type in a wildcard expression like *.gif or the old Amiga style mod.*). If you enter * as the wildcard expression, it will be used last when you try to open a file (ie.: as a default fallback association, like the "Plain Text" association in OS/2. Windows lacks this severely)
Mount Points - Here you can enter equivalent mount points (or drive letters). For example if you scanned a CD from d:\, but then you put it in e:\ to read it from Disk Indexer, set these two drive letters as equivalent, so Disk Indexer will search both. It is also useful when using a database from two different OS or Computers. If you scanned a CD from d:\ in OS/2, and you are in Linux and your drive is now on /cdrom, then you can set it in here that /cdrom is equivalent to d:\.
General - Set the temporary directory where files from Zip Files are temporarely extracted. You can also set the memory buffer size. The size of this buffer in kilobytes actually represents the size of the data on the hard disk. Because of Java overhead, in memory, the data can be much bigger. Calculate that each node takes ~50 bytes on disk, and that each thumbnail take ~4kB on disk always. Also available is a kludge to try if you are using IBM JDK and if you have problem launching applications with a filename with spaces in parameter.
If you check "Stick with selection", the properties displayed with change with the selection you make from the tree or table.
You can use the popup menu available for every entry to Lookup an entry. This means Disk Indexer will automatically hunt down the found entries in the main window for you!
The registration number is actually a digital signature composed of the string "Disk Indexer" and your name. Since JDK 1.1 and up have builtin SHA/DSA I am using that as "registration signature". It is composed of 2 * 160bits number = 40 bytes plus some X.509 formatting and Base64 encoding to convert it into typable ASCII. It brings the total length to 62 characters. Of course, MD5/RSA would be a lot smaller (22 characters), but ah, I wouldn't be able to export it as safely and easily.
In any case, even if immoral people can more easily "crack" the program when sources are available, this signature cannot be forged for all practical purposes. So even if Disk Indexer is open source, no one will be able to generate a fake signature unless they possess a copy of the private key I generated. Also, as far as I know, this kind of signature is legally presentable just like a real one on paper. Interesting concept isn't it?
The software and most of the source code is (C) 1999-2000 Samuel Audet <guardia@cam.org>.
Profitable use of this source code based on its execution or sale excluding the cost of the media, shipping, manwork or supporting hardware is not allowed unless granted by the author himself. Any modifications or inclusion of this code in other non-profitable programs must contain this message and the original author's name. Programs based on any of this source code must therefore contain the original or modified source code files. Use of this source code in a commercial program will require permission from the author. No more than 50% of the original size of the source code from Disk Indexer can be used in a non-commercial program, unless granted by the author. Thank you!
Disclaimer
The author makes NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy.
Samuel Audet <guardia@cam.org>
Homepage
IRC nick: _Guardian (be sure it's me before starting asking questions
though)
Snail Mail:
Samuel Audet
377, rue D'Argenteuil
Laval, Québec
H7N 1P7
CANADA