Announcing the return of WssIndex
From the early 1980's to the mid 1990's, WssIndex was the premier disk
cataloging program for DOS. Under Windows, it ran only as a console mode
application. A GUI version has been in the pipeline longer than Duke
Nukem Forever, and now it's actually being released. The Qt Toolkit by
Nokia provides the graphical interface.
Licensing
WssIndex 8 is released as
GPL 3.0 freeware.
(7 was the highest version number for console-mode versions of WssIndex.
These versions are hopelessly obsolete and no longer supported.)
System requirements
- Windows XP or higher.
- Windows 2000 seems to work, but since this OS is not officially
supported by Qt (or, for that matter, by Microsoft), continued
compatibility cannot be guaranteed.
- Older versions of Windows will likely yield unresolvable missing DLL
errors.
- 64-bit version requires 64-bit Windows.
Two 32-bit versions of WssIndex are offered, one built using the MinGW
(Minimalist Gnu for Windows) C++ compiler, the other using Microsoft
Visual C++ 2008 Express. They look and operate identically, but
they need different DLLs. (Appropriate DLLs are included with the
installers. The DLLs are installed in the same directory as the
program, so both versions of WssIndex, and other Qt-based programs,
can co-exist.) Performance differences are minimal. The VC++ version
indexes my C drive roughly 5% faster. On the other hand, either
version speeds up by a factor of more than two if the disk is indexed
a second time, presumably because the operating system has cached
directory information.
A version for 64-bit Windows, built with Visual C++ 2010, is also
available. The 64-bit version is not subject to the 2 GB process space
limit imposed by 32-bit Windows so larger databases are be possible.
You'll need 4 or more GB of physical memory to take advantage of the
increased capacity.
Discussion Forums
- Discuss WssIndex in the Forums. Sorry if
you see spam here. I clean up regularly, but the low-lifes create
new accounts and post more.
Screen shots
Changelog
Note: Norton Antivirus dowload insight doesn't like files it has never
seen before. Download of beta 1 was blocked until their whitelisting
process was completed; now you just get a warning that the file is
unknown. Future releases will probably be treated the same way. If
you're worried, you can submit the download URLs to
VirusTotal which
will download the installer and scan it with 43 different scanners.
Support for non-Windows operating systems
One reason for choosing Qt for WssIndex was its support for multiple
platforms. Early on, the Qt-based version of WssIndex was only a viewer
without Unicode support. At this stage, I copied the source to a Fedora
12 Linux system. After a few trivial code changes, it compiled and
worked. But, there are some serious obstacles to ports to other
systems:
- Drive letters: The concept of drive letters is unknown to most
operating systems, so indexing by drive letter doesn't make sense.
Indexing by UNC path could be done instead.
- File extensions: Not all operating systems use file extensions to
identify file types. To extract information from, say, JPEG files,
you first have to distinguish them from other files. Reading even the
beginning of every file to determine its type would slow indexing
considerably.
- Windows-specific functions: Qt does not have OS-independent
functions to get file system information (volume name, free space,
used space, identify a mounted volume) or to eject a disk, so these
are done with Windows-specific code. Equivalent code would be needed
for each operating system supported.
- Case sensitivity of file names: The Windows file system is
case-insensitive but case preserving. Other systems are case
sensitive. This leads to potential ambiguities when copying
comment/category information during re-indexing.
- Byte order: Windows systems use little-endian
byte ordering.
Current code would probably break in many places on a machine using
big-endian byte order.
Support for non-English languages
Qt is designed to make it easy to translate the user interface into
other languages. Text strings are marked in a way which allows them
to be extracted for a (human) translator. A table of translated text
is applied at run time. One executable supports multiple languages
through different tables. Widgets that make up the user interface
resize themselves to make text fit, so if a translated string has a
different number of characters than the original, adjustments are
mostly automatic.
WssIndex follows the standards necessary to allow translation, but
no translations currently exist.
Why a GPL release was previously impossible
Here's how you get into a situation where you can't release your source
code even if you want to: Compilers typically include source code for
library routines. You find a library routine that almost does what you
want, but maybe it's buggy or maybe it needs a small change to meet your
needs. So you modify the source code and use it. As time goes on, you
change compilers multiple times, and the original vendor goes out of
business. Now your project depends on code that you're only licensed to
distribute as part of a binary. WssIndex for DOS had several such
routines; all have been replaced or are no longer needed in WssIndex.
Documentation |
If I had time to write good documentation, I'd do something else. [Anon]
|
WssIndex for DOS had a long manual, which is largely obsolete, in
WordPerfect format which is certainly not as popular as it once was.
Here are a few important notes:
- Program windows save their positions and sizes when closed
"normally," i.e. not by using the X at the top
right of the window. You'll almost certainly want to adjust sizes and
positions the first time you run WssIndex.
- The default configuration does not display all available database
fields. Use the Table-design option to control which fields are
displayed.
- For the most part, WssIndex does not use complex queries with
multiple criteria. Instead, it uses simple queries with options to
add to or select from the currently displayed results.
- Watch for bubble help when your mouse hovers over selected dialogs.
- It's easy to imagine a disk catalog containing many millions of
files. WssIndex keeps the entire catalog in memory, so it will suffer
a performance hit if virtual memory needs to be used, and it cannot
exceed the 2 GB process space limit imposed by 32-bit Windows. The Qt
widget used to display query results takes a significant amount of
memory, so it would be a mistake to allow it to use arbitrarily many
rows. Instead, query results are broken up into pages of configurable
size (default is 1,000 entries 10x or 100x larger is probably ok).
- To edit volume names, comments, categories or extra-info, just
double-click on the displayed value. To delete a volume, right-click
on it in the volume list.
- Alternating row colors is recommended to improve readability of
layouts that spread file information across multiple lines;
elsewhere it's optional.
- Qt supports styles, or as most programs call them, skins, to
change how the program looks. WssIndex's style menu allows limited
skinning. There's a built-in Windows Modern Style, based on
code by Michal Mecinski and an option to load a style file. The
only useful style file currently available changes the font size on
menus and tool bars. Windows Modern Style is only fully implemented
under Windows 7 or Vista and is not currently applied when the mouse
hovers over the double buttons on toolbars. Styles loaded from
files are not currently saved. Style files can be specified on the
command line by -stylesheet=sheetname. (Equal sign with no
surrounding spaces is required.)
- WssIndex is very picky about the tags on mp3 files while players
tend to silently ignore problems. To get a "second opinion"
on the validity of an mp3 file, try
Mp3 Validator or
Mp3Utility. These will confirm some, but not all of the errors
that WssIndex reports.
- Extracting information from self-extracting files such as program
installers currently recognizes a rather limited number of formats.
Watch for improvements in future releases. Other archive and media
file types also need to be added.
- Databases written by any previous version of WssIndex can be read;
they will be converted to the new format when saved. WssIndex used
to put information extracted from files in to the Comment And
Category fields. Except for extracted comments, this was probably a
bad idea. Such information now has its own field. Existing comment
and category data will not be moved.
- The sort algorithm used is
stable.
This means that if, for example, you want to sort with file name as
the primary key and file extension as the secondary key, you can
click first on the extension column header and then on the file name
header and the you'll get the same result as a single sort with two
keys. WssIndex can also do a single sort with multiple keys. A
single sort is faster, but the user time to set it up will be more
than the time saved unless the database is fairly large.
Why did the console-mode version die?
- Unicode names: A console mode program can only display 256 different
characters. Code pages allow changing which characters can be
displayed, but do not increase this limit. Windows uses Unicode
for file names which means 64K characters are possible. WssIndex for
DOS would sometimes index a file, then be unable to open the file to
extract information from it because the conversion from Unicode to
Ascii character sets is not reversible. English language users would
only occasionally run into character set problems; for other languages
it was a real problem with no good solution. (This web page does not
use Unicode. As a result, it is unable to properly display the
accented characters in Michal Mecinski's name above.)
- Long file names: Displaying a table of file names was easy when
names were at most 8+3 characters long. Doing so in a text-mode
interface with names of essentially unlimited length was awkward and
ugly.
- Programmer pride: Programming is an
art
and a programmer should to be proud of his product. As Windows took
over the computing world, text-mode programs became anachronisms. A
lot of time was wasted on text-mode versions that were never released
because even the author didn't like them.
What features have not been ported from the DOS version?
- Printing. The problem of nicely displaying potentially long-names
on paper is perhaps worse than doing so on screen. CSV (comma
separated values) export is available to move results into other
programs for custom report generation.
- Shell to DOS. Not useful in a multi-tasking operating system.
- Keyboard macros. Better implemented by 3rd-party programs.
- Support for NDOS. Does anyone use this anymore?
- Writing volume labels. Better done at the operating system level.
- Import comments. Might be implemented later.
- Index-time exclusion lists. These will probably be implemented later.
- Interface to anti-virus programs. Anti-virus programs can be
configured for on-access scanning without needing any assistance from
WssIndex.
- Recording of short file names. These aren't really useful. Short
names were all the original DOS version supported; later, long names
were added while retaining the short names.
- Flagging disks as bootable. Recognizing a disk as bootable is an
extremely hard problem. WssIndex for DOS assumed any disk
containing command.com in the root was bootable. That was an
embarrassingly naive algorithm.
Acknowledgments for tools used to create WssIndex