Note QDTOOLS.ZIP distribution and usage policies *ARE* restrictive :
it's a *freeware*, but definitely *NOT* public domain nor even GPL.
You can use these tools without any cost, but they're not yours.
Please *respect* letter and spirit of license as specified infra !

*Only* Modula-2 Web sites, Simtel, Garbo, FreeDOS, UBCD and MDGx sites
are authorized to host the Q&D Tools archive (provided they supply
the most recent archive as found on "http://freepages.modula2.org") :
other Web sites are *NOT* (they can provide a link to authorized ones).

README is provided in these formats : .ASC (DOS ASCII),
.TXT (Windows OEM) and .HTM (HTML).



                     Q&D Tools for DOS

                  *Freeware* distribution

                       (2024 package)

             Copyright (C) by Philippe Guiochon



                   (* === 1. HISTORY === *)
               (* === 2. SPECIAL THANKS === *)
           (* === 3. REQUIRED CONFIGURATION === *)
                (* === 4. INSTALLATION === *)
              (* === 5. ARCHIVE CONTENTS === *)
                (* === 6. HELP SCREENS === *)
                  (* === 7. LICENSE === *)
          (* === 8. CHRONICLES AND RAMBLINGS === *)
               (* === 9. Q&D ASTROTOOLS === *)



"-- Why do we have to hide from the Code Police, Daddy ?
 -- Because we're still using Modula-2, son. They use C, C++,
    Python, PHP and JavaScript."



Although Q&D Tools programs were created in good (?) old DOS
days, most of them are still useful in those (censored) Win9X days
(yes, this was written long before the WinXP/Vista/Seven/Eight
Coming Age of Darkness). Well, *I* still use them, although
their main code was supposed to be frozen years ago (except
for a few functions added and glitches fixed :
programming is the only really never ending story).
Maybe you'll find several of them of some interest, too,
if you still happen to run any flavor of real DOS,
command line console or even DOSbox (possibly with LFN support,
although in that case, I've yet to see one actually working
as it should even when it's "Made in Germany").

Yes, almost all of these tools are DOS programs. But don't despise DOS
and its command line : although primitive an operating system,
it does have virtues, even today, including simplicity and efficiency,
when any *n<i|u>x would be overkill for many tasks.
Tiny DOS utilities can quickly, easily and safely perform
essential tasks : UCLONE does full or partial hard disk cloning
even on SATA drives, VITAL saves or restores hard disk partition data,
WIPE* can wipe data (CMOS or files),
while TEXTGEN (f)utility can help creating rather *good* passwords.
For the first two examples, note a boot floppy and/or XOSL multiboot
on a DOS partition will help, even if you're a Vindoze WIMP addict. ;-)
(Fortunately for those unfortunate floppyless PC boxes,
one can create a DOS boot CDROM or a DOS boot USB key
using good programs such as Nero or Rufus ; an external USB floppy disk
may be useful too for modern PCs.) For the third example,
reading Steve Gibson's pages about passwords may be *very* instructive.

But back to Q&D Tools, now. Yes, documentation is minimal
(beyond informative help screens for each program, of course)
but this should not be a problem for command line users.
And the package is freeware, after all -- which does not mean
(entirely) valueless.

QDTOOLS.ZIP archive is probably the largest Modula-2 compilation
available today (about 295000 lines of code),
for it included, the last time I cared to check,
196 TS JPI M2 DOS various programs (171 with source code),
70 XDS M2 Win32 ports (all XDS-uglyfied source code),
as well as 15 PB DOS programs (all with source code)
and 15 VB programs (13 with source code, 2 with partial source code
but without binaries).

Contrarily to what GPL-men think, providing source code
is almost useless for most users -- and who is to believe
that someone actually reads the dozens of thousands of lines of code
available in open source projects ? (If you're for a good laugh,
just have a look at QD_ERIS.MOD and at "Fun with XOSL installer" section
about those GPL guys so willing to give lessons and lectures
when they're not even able to spot obvious flaws.)
Providing protected source code is mere *courtesy*,
and a courtesy which is not even really educational
(contrarily to what so-called "hackers extraordinaires"
dare and say, even good code is not literature,
and reading source code cannot be assimilated
to reading an essay or a novel, good code being just... good code
and not a work of art, however clever, elegant or functional it may be).
Source code is provided here for two reasons :
first, to let you know there are no malicious code in the programs,
should a stupid virus-scanner pretend otherwise ;
second, to let user fix and/or enhance any program
for his own *private* use, should he want or need to. Period.
Please note freeware status and sources providing do NOT mean
"public domain" nor "GPLed" code : you may alter source code
for your own private use, provided your alterations remain private
and are not spread to the public, whatever the reason.
I value my time and (limited) skills as highly as anyone
values his own, and I don't think "collective authorship"
is a very good thing anyway. Incidentally, yes, I know, "me too",
as every programmer and as everyone, I've seen better Modula, Basic,
Assembler, Forth, C, Perl, InterCal, French, English, YouNameIt code,
but I've also seen (much) worse code, whatever its origin
(even from Open-Source "hackers" and from commercial software
editors). So what ?

Should you read the source files and should you not like what
you'll see (especially if you're of the Code Police),
just remember that once a program is compiled and works as *intended*,
its source code "quality" (or lack of) does not matter ;
its source language does not either, even if it's not assembly language.

Design matters first, implementation comes second.

This point shows the uselessness of *any* "languages war", by the way :
everyone has seen excellent *and* awful programs in *any* language
(although a few languages are *much* *better* designed than others,
if you see what I mean, eh eh).

Incidentally, nobody should remain an "assembly rules everywhere"
young snob for too long a time. In my good old Apple ][ days,
I was one of them, to the point of being able to program directly
in hex for the Rockwell 6502 using the Apple ][ monitor
(how silly a feat...). Now, thanks to the "no comment" school
I was an advocate of (making a virtue out of necessity,
for lack of RAM and file storage), I no longer always fully understand
my own brilliant (at the time) 6502 source codes from that far time,
whether it's my word processor, my graphics editors,
my graphics libraries, my operating system (yep, I wrote one
and OMX 16/65 - as it was named - even featured defragmentation)
and my 99%-compatible Apple ][ ROM (that one was no small feat
in my not so humble opinion <g>).

Moreover, the Q&D Tools were never intended as academic "tours
de force" : they were mainly written to solve (minor) *real-world*
problems, as Yet Another Complete Waste of Time illustrations,
or even merely for the fun of playing the (almost) ultimate game
of (il)logic called "programming".

Famous moralist Sébastien-Roch Nicolas was right when he wrote :
"On court les risques du dégoût en voyant comment
l'administration, la justice et la cuisine se préparent.".
This applies to source code too. ;-) At least, you may use the .MOD
files as an inspiration : in this industry, we all like to
reinvent the wheel, because it will be *our* own hand-crafted
wheel... -- which sometimes accounts for its (lack of) roundness.
Provided it's useful, after all... There are worse ways to waste
one's time.

Note next paragraph has been left for text history, although
most of its warnings and statements are no longer applicable
to current state of the programs, now LFN support has been added
to the most important tools (tested on FAT16 and FAT32, for NTFS
is another story -- see infra) : however, none of the Q&D Tools
will correctly process any file whose size is 2 Gb or beyond.
2.147.483.647 bytes should be enough for everybody, anyway. ;-)

    (*

    Please keep in mind many Q&D Tools programs "suffer"
    from historical implementation limits (because of hardware, DOS,
    libraries and compiler used) : 2 Gb maximum individual file size,
    8+3 filenames, limited maximum number of files or directories,
    hard disk size, etc. These limits should not be too
    cumbersome anyway, as they were not with the PC mainly used to
    develop these programs : a 486 DX 33 with 8 Mb RAM and 250 Mb
    hard disk, later replaced with a Pentium II 233 with 64 Mb RAM
    and 2 Gb hard disk. Note any fast PC is likely to force some
    weird (harmless) effects with sounds generated
    by TopSpeed libraries and with graphics (which may go too fast
    in a few programs I don't intend to rewrite).

    *)

Please do keep in mind, all these tools have been created
in a real DOS environment : therefore, by design, they are all
mono-user and they are NOT meant to be run concurrently,
especially on LFNs systems, because of possible collisions with
reserved temporary filenames such as :

    ~DEL_ME~.*
    $DEL_ME$.TMP
    _DEL_ME_.TMP
    ~DELME?~.TMP
    ~DELME~.TMP
    $INDEX$.TMP
    $_TMP_$.TMP
    $DEL#.TMP (where # is a hex digit)

This should not be a problem for DOS users (unless they use
Novell DOS 7 poor multitasker), but LFNs systems users should be careful,
should they really need (but why should they ?)
to run several simultaneous instances of the following tools :
PCOPY, CS, CHKDATA, FCOMP, PEEK, STAMP, TXTFMT, KEEPUNIQ
and possibly a few others using fixed temporary or work filenames.

Do keep in mind, too, these utilities do not use a DOS extender :
they will not be able to handle the insane amount of files
(often dozens of thousands) commonly found on WinXP (and certainly
later) systems. As always in such cases, the good old
"divide and conquer" approach is recommended (that's what I do
on my Win98SE system with many logical partitions).

For unknown reasons (possibly Unicrap conversion),
a few programs may have difficulties with weird LFN filenames
(this was seen with a few HTML pages saved to disk) :
disabling LFN support using relevant option may be of some help then.
Note even Windows programs may have difficulties with weird characters.

Running on NTFS filesystem is not guaranteed either (in fact,
many tools give unreliable -- i.e. weird and wrong -- results
when run on such "modern" systems). Anyway, all tools have been
heavily and daily tested on FAT16 (M$ DOS, DR-DOS and Novell DOS)
as well as on FAT32 systems (Win98SE and WinXP) without problem.
They seem to work with DOSbox (a gamer's tool)
but this was not fully tested, for a real DOS is better than
any emulation (although DOSbox is rather fine a piece of software,
incidentally, in spite of requiring a P4 to emulate a 486).
Newer 64-bits operating systems are certainly a no-no
with Q&D utilities -- this point has not been checked
for lack of access to (and interest for) such systems.
As far as I know, Vindoze Vista and Seven no longer support
any form of DOS console (another point I could not check :
I've decided that Win98SE and WinXP were my limit to bloatware).
Many users reported success using DOSbox (but no one did
with LFN-enabled DOSbox versions anyway).

Note NTFS allows very, very long filenames, longer than FAT32 LFNs :
they won't be handled gracefully by the Win32 ports of DOS utilities.

Due to poor standard VGA support in newer (and not always "better")
video cards BIOSes, graphics display may be corrupt
with a few programs such as PICFIND, CARTE, CARTETR and CARTECO
(this was reported by a user with a nVidia GTS450 video card,
who was even kind enough to boot and try from pure DOS !).
I *love* forced obsolescence.

As a last minute bonus (and a way to gafiate -- Science-Fiction
fans will understand), a few useless programs for Windows 3.1
("classic" Vindoze, a.k.a. Win92) have been included : they will
run with the games-oriented operating system often referred to as
"Vindoze 98" whose SE flavor is strongly recommended.



(* === 1. HISTORY === *)

Note remarks about "final" status are still not true
even after 2014. Will I ever get away
from going back to DOS Modula-2 ? ;-)

Before 2000 note : Nothing. ;-) Many programs had been already
used for years by me and a few acquaintances and friends.
Yes, many tools were born in the 1980s for the Apple ][,
the ZX-81, the Oric-1 and my first IBM-compatible (branded Sanyo 16),

(* 2000 *)

At a few users' request, most utilities have been revised
to include minimal support for Win9X LFNs : this support may not be
rock-solid (it makes a few assumptions about character sets
and other minor things), but it's effective enough to enable me
and others to use my Q&D Tools from Win98SE DOS sessions
for system maintenance.

(* 2006 *)

While code was supposed to be almost frozen in 2000,
a new computer bought in 2005 (a Pentium 4 running at 2.6 GHz
with 512 Mb RAM and 80 Gb hard disk) required a full rewrite
for those really useful programs : VITAL, DTHS and CS,
which were not adapted to huge hard disks handling. Moreover,
a few friends and acquaintances did require a few updates for
their Win9X and WinXP boxes. Therefore, a few utilities
have been checked (read : better bugfixed), enhanced
and/or rewritten. Besides, Q&D AstroTools freeware package
has been included in QDTOOLS archive. Although its purpose
may seem frivolous (or even nonsensical to many),
it should do as a good demonstration of the excellence of Modula-2
for writing a non-trivial real-world problem solver. I would not
have rewritten these tools in any other language than Modula-2.

(* 2007 *)

Programming (read : adding unnecessary features)
is really a never ending story... and therefore a few bugs/features
were fixed/added, last for the FreeDOS project.
But this time, this archive is really final. Well... it should be.
"Promesse de Gascon", as one says in France ?

(* 2008 *)

"Never say 'never' again..." :-( Yet another occasion
for a few enhancements, new features and minor fixes. Even better :
I finally took the time to write UCLONE, thus adding the very last
step to my backup paranoia. Both VITAL and UCLONE utilities,
kept on a boot disk (they can be copied to a boot CD or a boot
USB drive) saved and retrieved my hard disk partitions many times
when rogue programs (both DOS *and* Windows ones !) completely trashed
my data (sometimes to the point of making boot impossible).
Thanks to them, I've avoided many hours of frustration reinstalling
OS and programs, then resetting finely-tuned parameters. IMNSHO,
anyone who values his data should have these backup and restore utilities,
and thank Modula-2 for them.

(* 2009 *)

"Game Over" ?

(* 2010 *)

Yes, "Game Over" for real, this time. Getting too old
for all that. A definite farewell to computing and to computers.
The QDTOOLS.ZIP freeware archive will no longer be publicly updated.

(* 2011 *)

"In every programmer a liar" (a variation upon
a famous statement by Number Six, for those who still remember it
and him). The YACWOT syndrome did strike again : quirkfixes
and minor enhancements were coded and released to a few friends
using a method more modern (but not necessarily more convenient
for a boot disk) than good old floppies : USB keys...
for lack of a regular Internet access.

(* 2012 *)

Will I really get away from it all any day soon ? ;-)
Moreover, I discovered yet another bad side-effect of the Internet
(in addition to defamation and source theft by some liar Apple pirate) :
a few Web sites dare and offer QDTOOLS.ZIP programs
WITHOUT being allowed to do so. On a brighter (?) side, I may port
within next months a few tools to Stony Brook freeware compiler.

(* 2013 *)

Porting and/or recoding Q&D Tools using Stony Brook
freeware compiler is still a MaybeWare TM (R) (C) project,
but programming is no longer FUN with newer over-complicated
Vindoze APIs. Moreover, my P2 233 and my P4 2.6 have just
almost passed away : thanks to stupid modernity
and forced obsolescence, I haven't been able to replace
their good old Matrox G400 and Radeon 9600 AGP video cards
(I've found a few AGP cards whose drivers only support WinXP !).
It's fortunately I had kept spare G200 and Radeon 9200SE cards.
Older "small" 80 Mb hard disks are aging, but replacements seem
difficult to find now -- especially without an Internet access.
The same applies to good old Canon BJ200 cartridges.
I guess Novell DOS 7 and even Win98SE *really* belong
to the past now. :-( This QDTOOLS.ZIP 2013 DOS archive should
therefore be *really* final now. Older DOS tools may still be fixed
and/or enhanced, but newer command line tools, if any,
will unfortunately be created on and for Win32 API.

Thanks to a friend, I've been able to check newer
PowerBASIC Windows 9.0 on her XP box, but well...
going back to BASIC syntax would be too huge
a step backwards (not even considering a few annoying compiler
quirks and bugs found in only a few hours evaluating it).

It really seems Modula-2 is like Japanese bobtails cats :
once you're hooked, you find it hard to accept anything less,
i.e. anything else. ;-)

(* 2014 *)

To be continued ? Probably not, whether for DOS
or for Win32. In the past months, I've considered
writing a TopSpeed compatibility layer
for Stony Brook freeware compiler, but this would be overkill
(and I really do not like their overcomplicated project system :
what about simplicity ? What has become of the Wirthian
KISS principle ?). Besides, too strict observance of "standard" ISO M2
seems an error to me, provided JPI TopSpeed implementation
(whatever its quirks and idiosyncrasies, such as unresponsive
editor when run from Win98SE) has been here
for very long a time and has been a "de facto" standard
for *real-world* programmers : there should be,
in all newer Vindoze M2 compilers, some form of *full*
JPI TopSpeed emulation directive, at least as an homage.
May I suggest "%ISL342" ? ;-) What M2 programmers
(both older and newer) needed was just a Win32 M2 compiler
with a JPI-like programming environment (in a way,
from what I've seen, this is what PowerBASIC for Windows provides,
whatever the flaws of the product). Besides, seriously :
recoding programs just in order for them to perform
exactly the same tasks on newer (and not *necessarily* better)
hardware and operating systems is against
my "common sense" philosophy (in case you'd like to know,
I'm still using WordPerfect 5.1, Novell DOS 7 and floppy disks, eh eh).
Darn, writing these lines, I feel I'm getting as sad and as bitter
as Marco van de Voort in his M2 XTDLI104.ZIP documentation :
it's really time to stop now ! ;-) "Everything ends well that ends."

Update ! Until now, I had not been in mood for testing
any Win32 compiler with any real code (I had quickly checked
XDS in 2005 on a few Q&D tools but I had not been fully convinced...
and I had almost forgotten it ; in 2012, I had another quick look
at both XDS and ADW, especially their help files,
without being convinced either). The full ugly story is *infra* in
"XDS vs ADW vs PB".

As a last fun fact discovered while preparing the very last QDTOOLS.ZIP
archive, note PRE, CODE, /PRE and /CODE HTML tags do not work
as they should in my humble opinion (but I'm not a HTML expert...
and I don't care) : while Web browsers should logically ignore anything
except /PRE and /CODE closing tags, it seems HTML geniuses have decided
everything between "<" and ">" belongs to them ! Thus, a Web browser
can quietly go on parsing text *supposed* to be left as is,
*untouched* -- remember it's PREFORMATTED and/or it's CODE !
Now guess what happens when they see something that looks
like a HTML tag when it is NOT ? Yes, they do process it,
thus provoking too many unwanted side effects on page
whatever the browser I suppose (this was tested with Exploder
and with Firefox). That's why REPACK.BAT must process
README.TXT before creating README.HTM !

(* 2015 *)

Christmas 2014 update was supposed to be final, at last.
UCLONE had been revised because of a few users
running the program from <source> unit without disabling log feature,
which could occasionally lead to minor but irritating
UCLONE.LOG partial corruption at end of file.
Most users, including myself, never had this problem
for they wisely ran UCLONE from a boot floppy disk ! While I was at it,
I had added a more informative display of primary partitions.
I assumed it was now time to get away from it all. Definitely.
For those unlikely users who may have cared, QDTOOLS.ZIP archive
was supposed to be really and definitely *FINAL*
on Sweetmorn, the 50th day of Confusion in the YOLD 3180
(it was time to celebrate Confuflux, *whatever* this may be).
It was time to say : GAFIA ! FUWI ! But...
I suddenly thought time-proven UCLONE, VITAL and even DTHS
could be useful to famous UBCD rescue CD. I sent an e-mail
to Victor Chew, who was kind enough to include my humble tools
from UBCD v5.3.4 release.

Update ! In the name of the YACWOT (Yet Another Complete Waste Of Time)
principle, and for reasons without any public interest,
a few tools were reluctantly ported to Win32 platform
using XDS v2.60 beta 2 and its (ahem) TopSpeed Compatibility Kit.
See the list infra. Note other ports are very, very unlikely.

I can say I've hated *every minute* of the time required
to create these really Quick & Dirty Win32 hacks.
Among other XDS nuisances, I've hated wasting hours fixing bugs
which were not mine (redirected output adding random CRLF,
among other nuisances), and fighting silly ISO syntax requirements
even in TS mode (the mandatory ELSE when all cases have been handled
being the most stupid requirement of new ISO mode :
the ISO academics have created the TERNARY-value boolean
(the "ISO-ELSE" as coined by Christoph Schlegel)
with a mandatory ELSE when TRUE and FALSE cases are handled !
And of course, the compiler is unable to flag its own requirements !).
Moreover, some Win32 executables are often slower
than their humble DOS original version ! Programs calling IO library
to poll keyboard have a tendancy to reboot (more often from Win98SE
than from WinXP, go figure !).
And welcome to a world of mixed character sets...

In order not to break DOS f8.e3 filename format,
any archive supposed to end with 32 suffix, when this would make
archive filename longer than 8 characters, have W suffix instead
and archive filename shortened if necessary.
They will be found in each DOS original archive directory :
unpack them by hand on a Win32 platform.
By the way, although XDS editor/compiler normally only supports WinXP,
the created executables *seem* to work from Win98SE.

Update ! Almost good news for us everyday Win98SE users
(wonder if a plural is really adequate here <g>) :
XDS *seems* to work if cleverly designed KernelEx libraries are installed !
This was tested with XDS 2.6beta2 and KernelEx 4.5.2
on my Win98SE partition. Anyway, XDS may randomly crash at startup,
requiring a reinstall (do not forget to save your sources first
if they are in XDS subdirectory !). Note, too, XDS installer
does require Vindoze temporary directories to be empty
(unless you want installer to freeze, uselessly recreating
its own installation files at each try to install the... thing).

For each Win32 Q&D hack created for Win32 users convenience
(I don't and won't use them myself except for Q&D rudimentary tests),
please note :

- DOS executable is better and has more options.
- DOS source is better and cleaner.
- DOS executable and source have been tested for years,
  while port has *not*. ERRORINF.$$$ may happen ! ;-) or :-(
- Fixes and enhancements to DOS executable
  may not be applied to matching Win32 port.
- Any Win32 program is considered to have BETA status.
- The Win32 executable has been packed with the outstanding UPX packer.

Among other surprises, there may be problems about character sets
(command lien or internal processing, accents, Unicode...),
input, redirection... and <Vindoze|ISO>-Knows-What, too.

ADW and XDS creators, please do us TopSpeed programmers a (big) favor :
release the source code of your freeware compilers so one of us
can try and create the mere TopSpeed Win32 we're all waiting for,
a compiler able to create native code instead of C code !
It was generous of you to release your compilers free of charge :
make another step and let Modula-2 programmers use the syntax
they prefer. As for GNU M2 programmers : *n<i|u>x is not 42.
And please try and make your compiler to really run
on a Win32 platform too (WinXP, if not Win98) -- we don't even ask
for a DOS port ! ;-)

(* 2016 *)

A small tool for both DOS and Win32 was created in order to comply
with useless and silly Modula-2 ISO requirement
about mandatory ELSE for each CASE. ISOCASE *should* handle
the, ahem... case. It should be of some help when painfully
trying to port TopSpeed code to any ISO compiler,
or it may help Win32 ISO M2 programmers to meet
the useless and silly (bis repetita semper placent) requirement.
Note even without silly ISO requirements (ter repetita semper placent),
porting the most simple TopSpeed programs to Win32 is a major pain
because of the target XDS compiler and the, ahem, quirks
of their TopSpeed Compatibility Kit (including XDS not respecting
original TopSpeed choices for parameters types and names).
And their parser is definitely not military-grade as shown by
its mostly useless (and sometimes misleading) error messages...

Incidentally, ISOCASE was created in order to help porting
DD DOS code to Win32 platform. Alas, alas, alas...
the XDS compiler would not compile the good old DOS source,
aborting with the following messages :
"severe error detected" and "out of heap space" !
Setting relevant hidden value to an obscenely higher amount of RAM
does not cure the problem, of course.

And a few people dare and laugh about DOS limits...

An update about UCLONE and VITAL when run from "another" DOS.
FreeDOS, whatever its obvious qualities, MAY not be
the best DOS to run UCLONE or VITAL on : a real DOS whether
of the MS-, DR- or Novell- variety might be much better a choice.
In fact, a few users have reported random crashes
(reported by FreeDOS itself) when UCLONE and/or VITAL
were run from FreeDOS (whether 1.0 or 1.1) :
booting with an older real DOS always solved the problem.
My $0.02 about this behavior, which is NOT related to UCLONE
or VITAL, for both programs have been used for *years* now
on both MS-DOS 6.22 and Novell DOS 7.15 systems, whether
by I or a few others. As using a real DOS solves the problem,
I did not bother wasting my time checking FreeDOS source code,
its interrupt $13 handler and its memory managers.

Well, anyway, I guess I'll never get away from DOS Modula-2...

By the way : how can the awful (but sometimes useful
in its PDS 7.1 version) micro$oft QuickBASIC 4.5
still have a large fanbase...
when J.P.I. TopSpeed Modula-2 has not ???

By the way too and two : I'm still waiting for any *useful* XDS or ADW
Win32 program to appear in the overhyped Internet galaxy... ;-)

Another update : now a few tools have been ported to Win32
and packed with UPX, a few (censored) virus scanners created
by code kiddies begin to complain about imaginary viruses...
and not even the same ones for each scanner, as shown by
*evil* Virus Total analysis -- I say *evil* because of
their scandalous terms of use : they obviously consider
any submitted binary becomes theirs for whatever use they want,
in the now classic Infamous Evil Google Way everyone accepts
without thinking.

That's why providing source code is really a Good Thing.

Just in case you'd like to know it : the PC I use to compile
my programs CANNOT access the Internet, and all the freeware tools
I use (including XDS compiler and UPX packer) were downloaded
from 2 other different PCs (and from separate Web sites
when possible). They are run if and only if binary comparison
shows no difference. As for J.P.I. TopSpeed compiler,
it's a legitimate original (floppies and printed manuals).

Update ! When creating README.HTM, REPACK.BAT would become confused
because of REMMOD and ISOCASE help screens (bold attribute was not
turned off where it should have been). This was harmless,
but this is fixed for next QDTOOLS.ZIP revision, if any.
One may easily guess I merely check README.ASC version. :-)

Update ! I've finally discovered one and only one real virtue
to XDS "TS compatibility kit" : allowing a program to process
a huge number of files. Thought it was honest to admit it. :-)

Update ! I've recompiled ROMANADW and FACT_ADW with the recently
released new public revision of the ADW compiler. Using the
original project files, compilation seems a little faster
but executables are bigger and worse, they no longer run on Win98SE
(UXTHEME.DLL WinXP library seems required but I won't waste my time
trying to see if this behavior is by design). No change in the output :
the redirection bug is still there.

(* 2017 *)

In life, one cannot rely on others ; even worse,
one can hardly rely on oneself too. After years of use,
I've just discovered, thanks to a WinXP directories system
containing unexpected filenames, Yet Another J.P.I. TopSpeed bug
in one of the system libraries supposed to be so reliable
one almost never checks them, for one wrongly assumes
they're military grade and bullet-proof :
here, it's Lib.SplitAllPath() which is unable to handle correctly paths
containing dots before the name part (a legal but weird idea
which is almost never seen with DOS systems, while being seemingly
slightly more common a practice with Win9X and WinXP directories).
This is an annoyance, albeit a minor one. Thus, I've been forced
to write a (hopefully) more robust function before recompiling
dozens of updated source code files (yes, I could have patched
the runtime library). "Trust no one" indeed.
Now for the funniest part : XDS users know about the infamous
TopSpeed Compatibility Kit supposed to help porting code
from J.P.I. TopSpeed DOS to Win32. It's *far* from adequate
and its only virtue is that it exists. Now, try and guess
what happens with XDS Lib.SplitAllPath() ? Yes,
the function contains the very same bugs than the DOS original.
XDS programmers have probably merely ripped JPI's code verbatim
without checking it (see TSTSPLIT directory).
Why am I not surprised ?

Final update ! I was about to write Yet Another Useless Program,
a small spellchecker (hence CHKSPELL subarchive and its
words lists), when I suddenly realized I no longer felt any fun
while programming, even in Modula-2. I may be getting very old,
but I'm really tired of fighting against the tide of stupidity
in many domains, including (but not limited to) computers.
I give up. I get away from it all now. QDTOOLS.ZIP freeware
archive will no longer be publicly updated. This is final.
And yep, no one will care. And yep, I won't either. ;-)

I'd like to thank again Mr Schlegel and Mr Naumov
for their kindness and patience all these years hosting
my little DOS (f)utilities.

Vale viveque !

Unexpected update ! While I was in not too bad a mood,
even though I no longer program anything,
I've added a Q&D port of John Walker's FBENCH benchmark :
our favorite language was not represented in the many
implementations available at his fourmilab.ch Web site
(look for FBENCH using the internal Web search engine).
Porting the code to TopSpeed for DOS
and even to XDS for Win32 (using TopSpeed Compatibility Kit)
was quick, while writing an ISO version for XDS was, well...
definitely NOT a pleasure. Not knowing fourmilab
was a micro$oft-free zone, I first sent Mr Walker
the DOS and Win32 ports. A few days later,
I sent Mr Walker my ISO/XDS version : he had already
written his own ISO/GnuM2 one !

(* 2018 *)

Though I thought to be through with programming,
a few days ago, probably because of FBENCH porting,
I had a sudden and silly urge to review a few programs
in this archive and add/fix a few functions,
up to the point of spending a few minutes copying changes
in DOS sources to their Win32 ports when applicable.
While working on FORTUNE32, I discovered XDS SIZE() function
returned 16 while in fact it should have returned 14
when applied to a header structure ported from a perfectly working
DOS source code. Hours wasted thinking the error was mine,
when it was, once again, the compiler's and its poorly ported libraries.
While working on PCOPY32 and DD32, I discovered one major flaw
in XDS Lib.ParamStr() : any double-quoted parameter containing a "\"
is garbled (possibly because of a silly C [pre]processing),
and here too, I wasted time wondering what was happening,
while the fault was, once again, XDS's. Their TopSpeed Compatibility Kit
is not even able to correctly parse command line parameters !
They should be ashamed of themselves (see TSTPARSE directory).

I will *never* touch XDS again from now. Never.

No wonder no one uses Modula-2 nowadays, considering
the tools we're left with if we try and write anything
outside the good old DOS world ! :-( And please do *not* answer
ADW or *n<i|u>x ISO M2. Using GCC as a generator for a real language
still looks like heresy to me. ;-)

Well, "final" no longer means "final" for me. Words no longer
have a *fixed* meaning. I'm definitely *modern* now !
I may even go back and down to C and the like, who knows ?
Python, Lua, Ruby, Erlang, PHP, JavaScript and even worse,
here I may come ! ;-) I'm ready to be just as *almost* anyone
in this damn era : a moron without coherence ! ;-)
But too late... :-(

Update ! I was reviewing my AstroTools source code, wondering if
adding LFN support and building a new planetary positions computing engine
would be of any real interest. Because I'm tired of all this,
the answer was a definite "no" for both questions.
Yet, rereading this very old code made me realize CARTE* modules
contained display code which was disabled
(at a time, I had builds for me, for friends, for acquaintances
and for possible demos). Once SHOWLATS directive reset to TRUE instead
of FALSE, it reenabled a slightly enhanced display, now available.

As usual, a few fixes and enhancements were done,
none of which is essential. Note a few JPI DOS sources have been revised
while their matching XDS Win32 has not for reasons stated *supra*.
CHKSPELL is on the way from MaybeWare to NeverWare.
MSABER is my minor contribution to Cipher Saber. As I've made
the solemn oath never to use XDS again, I leave creating
an unlikely private Win32 port to someone else.

(* 2019 *)

While recently checking old floppies content from the time I worked
in the computer press as a senior editor, I rediscovered the source code
of a program I had written for a paper really and seriously comparing
two Visual Basic 3.0 graphics libraries (known as VBXes at the time).
Colleagues would have just reworded the press releases and listed
the features, but this was not my way and thus,
in a few days of useless work, I had created
a real rather well-designed small utility for Win92 wallpapers,
demonstrating the pros and cons of both libraries, with a common code base.
The paper was not published because it became without object :
I was about to quit this dishonest press industry.
Yet, AUTOWALL and AUTOWP were interesting projects
showing that with extreme care, writing decent code
with Visual Basic 3.0 was possible indeed.
Now, I'll admit writing them for a small review was well
beyond the call of duty... but I was not exactly
the average computer journalist either. ;-)
As I'm not into copyright infrigement, I unfortunately cannot
give away the VBX-specific include files nor the VBX binaries here :
anyway, partial source may still be of some interest,
at least "historical" or as an inspiration.

Update ! XCLOCK, VCLOCK and MORFMSG source code is now available
so everyone can appreciate the (clever) use of Bresenham clever algorithm
applied to dot motions. ;-) For dozens of years since I wrote
the first ASM6502 version on my Apple ][ (at the time, I had reinvented
the line algorithm without knowing it had already been done before !),
I thought of writing a cleaner Modula-2 port (PowerBASIC for DOS
had its virtues, but it's conceptually ugly) taking 3D into account,
but well..., it's time to admit I'm very unlikely to do it. :-(

Update ! Oaths are meant not to be respected in our Era of Darkness. :-(
EVENODD had been written as to help fooling stupid virus checkers
flagging false alarms without any reason, but now even private email
can be subject to silly limits as far as file size is concerned.
I thus had to write EVERYN, a more general (but also much slower)
version of EVENODD. A few people I know kindly required a Win32 port
for their newer PCs : I therefore reluctantly reinstalled XDS
then ported the source code. While I was at it, I also updated
a few Win32 programs so they better (or less worse) match
their current their DOS version. I've even added MSABER32,
ELAPSED32 and SOLARSYS32 for no particular reason. Time wasted, but well...
I even foolishly tried to port QDASTRO, but the readme.txt
in QD32.ZIP archive will tell the sad story. ;-)
Anyway, this time, I'll NEVER give any other chance to XDS.
Therefore, in the future, fixes and enhancements brought to DOS tools
are extremely unlikely to be applied to their Win32 ports, if any.
*Vita* is very, very *brevis*.

It's nice of XDS to have released their code now they're dead.
It was not nice of them not to care about fixing their bugs,
even in a free product, anyway.

Update ! A few options were revised or added to a few tools
both old and new. Possibly the most interesting is the ability
added to WCOUNT now able to translate a password into a pattern.
When pattern analysis is run (in two parts, for RAM is a problem,
especially since I will NOT keep WCOUNT32 in sync with its DOS original)
on a list of 2151220 unique passwords found thanks to Internet
(the 22 Mb PASSWORDS.TXT I had downloaded a few years ago contains
a header mentionning 2014/03/20 and refering to a dazzlepod.com
Web site I know nothing about), one can discover
the most common password length is (or was) a pathetic 8 characters
either made of 8 letters or of 8 symbols. By the way, the list
(not included here) contains these passwords : "modula2" and "wirth" !

Update ! I recently reread a Science-Fiction and Fantasy series
I had liked a lot aeons ago (circa 1995 I guess). Written
by a Rick Cook who was a contributor to *Byte* magazine,
it features a hero wizard programmer who is abducted
in a fantasy world where he creates a spell magical compiler
in Forth. The first two books are the best, though the whole 5 books
series is enjoyable for any programmer. It's not a masterpiece,
but it's entertaining, well worth the price and the time.

I had *completely* forgotten Modula-2 was mentionned in the second book,
*Wizardry Compiled*, though only in one sentence and not with excessive
reverence : "This thing is written in something that looks
like a bastard version of Forth crossed with LISP and some features
from C and Modula 2 thrown in for grins."

Update ! There's something amusing and desperate still writing
small programs only useful to me and very few people, using
an almost dead language, with a very old compiler,
and for the now Dead Operating System we all learned to hate
for very good reasons, while at the same time so many people
are happy to *believe* Vindoze 10, the (too many) Linux distros,
PHP, Python and LUA are the acmé of computer programming.
I'm reminded of two pieces of writing I like,
which are similar in spirit, *mutatis mutandis*.

Baudouin de Bodinat, a very bright French philosopher,
wrote this in his *La vie sur terre. Réflexions sur le peu d'avenir
que contient le temps où nous sommes.* (volume 2, page 108) :
"Et j'ai pensé qu'en voyant dans les magazines les portraits
de ceux-là qu'on estime considérables en toutes activités
et qu'on donne en référence à l'émulation -- ''de ceux qui font
quelque figure dans le monde, de ceux qui ont part aux intrigues
du monde, de ceux qui entrent plus avant dans le commerce
et dans le secret du monde'' --, qui sont en vainqueurs
dans la compétition sociale ; qu'à une époque où *ces gens-là*
sont quelque chose, on se dit, avec un véritable soulagement,
que c'est une légitime satisfaction d'amour-propre,
un motif d'orgueil, une sorte de grandeur, de n'être absolument rien."
And Chamfort, the best French moralist, wrote :
"Je n'étudie que ce qui me plaît ; je n'occupe mon esprit que des
idées qui m'intéressent. Elles seront utiles ou inutiles, soit à
moi, soit aux autres. Le temps amènera ou n'amènera pas les
circonstances qui me feront faire de mes acquisitions un emploi
profitable. Dans tous les cas, j'aurai eu l'avantage inestimable
de ne me pas contrarier, et d'avoir obéi à ma pensée et à mon
caractère."

Winter may be coming, but Darkness is falling and much faster.

Till another extremely unlikely but not impossible, after all,
useless QDTOOLS.ZIP update.

(* 2020 *)

It was unlikely but not impossible : here's Year of Doom 2020 update.

The following has absolutely no relation with Modula-2,
but I feel it necessary to mention an excellent satire.
I've always thought indifference was the highest moral virtue,
warranting peaceful relations with anyone. Seems this wisdom
is not really universally accepted nowadays. Even the programming world
now has its politically correct tyrants trying and forcing everyone
to obey their lunacies, though they represent almost no one and nothing.
It's fortunate indeed Resistance does exist, even if it is futile
and doomed to lose, for common sense and reason are no longer
common practices in any domain. So, the following site :
https://github.com/TheFeministSoftwareFoundation/C-plus-Equality
is guaranteed to make laugh people who enjoyed Sokal's and Bricmont's
very clever canular against advocates of (unfortunately) "French theory"
and other foolishness. To whom it may concern... ;-)

New modern mathematics : 2020 = 1984. :-(

(* 2021 *)

This is a sign of the Gods (Crom and Cthulhu, who else ?) :
my good old Win98SE 2005 Pentium IV PC died
on September 12, 2020, and I'm still mourning for it.
Ha ha, only serious. Well, half-joking -- but what half ?
I tried everything. Culprit was the motherboard, possibly because
of electric power problems thanks to the Green Khmers
who are ruling the country.
I had kept another slightly less powerful PC as a backup
for such unfortunate an event. When fitted with video card
and hard disks removed from dead machine, the backup PC booted correctly.
Alas, it would not reboot a second time. I tried everything again
(except witchcraft), without success. Yet another dead PC.
Then, a friend was kind enough to offer me an old 2003 PC
he had not thrown away. The thing would not even turn on.
I tried everything, again, without success.
In French, we call this : "la poisse".

I'm now using a 2008 WinXP PC which was just a (moderate) gamer machine.
There are enough subtle differences between Win98SE and WinXP
to make many Win98SE games no longer work correctly
(possibly because of newer video card drivers too, of course).
This is also true for time-tested DOS utilities : from command line,
even TopSpeed editor now often crashes because of
"DPMI function failures" (I have never seen that before).
As for batches containing "&" character...
This PC has a Novell DOS 7 partition, but for lack of drivers
(because of editors' and manufacturers' greed and will to have us rebuy
hardware and software), it cannot support a working Win98SE partition.
For years, I had enjoyed a perfectly tuned system
doing perfectly all I needed :
I won't rewrite dozens of programs for yet another operating system
just in order to do on a newer PC what I was already doing
without problem on the older one. I won't rebuy software either.
I don't care learning new tools (even free ones)
just in order to perform the same tricks : this is against reason,
and worse, this would be a complete waste of time.
Don't tell me about linuxes : I've known Linux and its umpteens "distros"
for dozens of years, and I don't care about it and them.
Don't talk about emulation, when even the excellent DOSbox
is far from perfect and only emulates a slow DOS PC.
As for Win98SE emulation...
Don't tell me about newer post-XP Vindozes either.
I'm not *that* a moron. ;-)
Oh, did I say the two 500Gb disks of the 2008 PC needed replacing
because of many bad blocks suddenly appearing in a half-random elusive way ?
How S.M.A.R.T. !
This *is* "la poisse" indeed.

As if losing a good old reliable machine was not enough,
we now have to face the end of the human world because
Schwab, his minions, his puppet masters, his puppets,
his armed troops, the Green Khmers and the Khmers in White
are about to set us all into abject chinese-like slavery.
This is Heinlein's Year of the Jackpot indeed.
Rome is falling another time, and I doubt it will rise again
from the new technical and sanitary tyranny (and if an even older
tyranny wins, the probability of a new rise will be much, much lower).
Rebels don't even exist in significant numbers,
and they won't be able to do anything against the Juggernaut.
In *The House of the Dead*, Dostoevsky had a good formula to define man :
"Man is a creature that can get accustomed to anything,
and I think that is the best definition of him."
Well, in fact, mankind is worse than that, and I think I've found
much a better definition :
"Man is a creature that loves to conform and obey."

Mundus vult decipi, ergo decipiatur.
Winter is no longer coming, it is here. Lights off.
"La poisse", en vérité. :-(

To die in Portmeirion, perchance not in a dream :
"I will not be scienced, vaxed, IDchiped,
pushed, filed, stamped, indexed, briefed, debriefed
or numbered. I'm not a sheep. My life is my own."
(the original seems to have been slightly garbled.)

Yes, this has nothing to do with good old Modula-2. ;-)

2022 edition is very, very unlikely.

Update ! As usual, a few quirks and fewer bugs were fixed,
a few features added, and a few Win32 ports were added
by extremely popular demand (i.e. by one friend
and by two acquaintances).

Many dozens of years ago, I would have perused XDS source code
(thanks again for providing it, guys, though too late !)
in order to try and fix bugs
from TS libraries, taking necessary time. I've just browsed
the relevant files without feeling forced to do more.
What for, after all ? Now we're no longer allowed
to lead quiet lives of quiet Hobbits in the Shire...

As Kuznetsoz once said it (*The Wizardy Quested*, page 243),
it would be nice to go "back to the days when the world was young,
our hearts were pure, and there were  no problem in human relations
which could not be solved by the application of sufficient quantities
of high explosive.
Life was so much simpler then."

Indeed. :-(

What's left when trapped in a world where there's no escape ?
Going on and holding on as usual after a little prayer to Crom.
Among the many ways to fight nothingness awaiting us all,
reading, listening to classical music, and viewing good movies
were the most amusing wastes of times.
As Graves did, let's say "Farewell to all that". ;-)

(* 2022 *)

A last ugly port of OLDNEW to Win32 was done in 15 minutes,
probably in order to celebrate the death of OLD France
now replaced with a NEW ugly one.

Yet Another XDS TopSpeed Compatibility Kit gag : see TSTVGA.
No comment.

A last funny anecdote : Web sites dedicated to DOS are becoming
increasingly unfrequent. I found one thanks to asking
the modern Shalmanezer "still using DOS in 2022". The available
programs not being better designed or better written than mine,
I offered the German maintainer to either host, or link to, my DOS archive.
He coldly, almost agressively, replied he was not interested
"mainly because of the strange licence" without elaborating.
Free to use, source code provided for peace of mind,
possibility to privately modify the code : this is "strange" indeed.
Maybe it's my programs being written in Modula-2 ? ;-)

Well. What now ? The end.

(* 2023 *)

Bah, what for ? Done with everything.
For the principle, fixed an elusive bug in ISOCASE
which affected 1 (*one*) source file out of 587. Call that luck !

Another gag : XTRACT32 Win32 port seems to work from WinXP but...
when run on the very same file from Win Seven with the same command,
it crashes without any logical reason. Go figure...

Yet another gag : when ported, at a friend's request, to Win32,
DELB would not reliably read several file specifications correctly.
Wasted about two hours trying to understand why simple code
working perfectly with DOS would not work in Win32, without success.

Update ! I guess I could not quit programming (whether in Modula-2
or in any other language) without creating
Yet Another Utterly Useless Unutility adequately named GOTOHELL,
although there's a paradox in the fact we're already there,
considering the current state of a world where Moronia reigns.
Times do seem placed under the sign of the great Russian genius
Dostoïevski. When one sees the mass of men leading lives of
quiet desperation and obedience, two quotes come to mind
(sorry, it's roughly translated from a French translation,
and I'm too weary to try and do better) :
"Another thing worried me [...] the fact that nobody was
like me and that I was not like anybody else. In fact, I am
one of my kind, while they are all of one kind." Can't
remember where he wrote it, but the statement was expressed
again in *The Underground Mind* : "What was the most
suffering to me was that I was different from *all* others :
I am alone, and they are *the world*."
In his *Memories of the House of the Dead*, Dostoïevski gave
this famous definition : "Yes, man is an enduring animal !
He could be defined as : a being who gets used to anything
and everything ; and this might perhaps be the best
definition ever stated about him." Considering what people
are now, I'd state this better definition : "The ordinary
man is an hypanthrope who obeys and worse, who loves to obey
because by doing so, he is relieved from these two burdens
of the free man : liberty and responsability."

Yes, this has nothing to do with programming in Modula-2. ;-)

From a Frenchman now in exile in what is no longer his country :
long live and good luck, Russia !

(* 2024 *)

It's a bad and sad year indeed which begins with Niklaus Wirth's death.
Others, more qualified than I am, will write a tribute to his life
and accomplishments as both a hardware and software engineer,
designer and teacher ; all I can say is that, from all I know
about him, he was among the few names I respect
in the computer industry (among them : Steve Wozniak, Gary Kildall,
John Walker).
We're unlikely to see such individuals in the future,
at least in what's left of real Europe -- and this statement
does not apply to the computer domain alone.
May I add I'm not sad, for Mr Wirth is almost immortal, provided
next generations are still able to read and write and compute
and program : he's among the few leaving a mark both in books
and in memories...

Damn, it's a badder and sadder year indeed : John "ingénieux ingénieur"
Walker died too, as well as David "The CodeBreakers" Kahn. What worse
is yet to come ?



(* === 2. SPECIAL THANKS === *)

First, Mr Christoph Schlegel is to be thanked for hosting,
from the very beginning, this collection of (f)utilities
on his excellent and impressive Modula-2 site
("http://freepages.modula2.org"), which is likely to be
the very last line of defence for us Modula-2 lovers.
Without his Web site and the *extraordinary* work he does
in order to keep interest in Modula-2 and other Wirthian languages,
I probably would not have bothered refining and sometimes
enhancing many programs, nor even offering them to the public
at large (beyond my friends and acquaintances)... a public
who probably does not care about them and does not need them
(but well, one should always work for oneself alone).

When I faked youth, I would only swear by 6502 assembler
(ah, the AIM 65 and Apple ][+ days...) and Forth,
to the point of being almost fanatic (the incredible hatred
I had against floating-point computing, at the time !).
I now have a debt to Niklaus Wirth for Modula-2 and Oberon languages,
whose design and crystal-clear syntax are certainly the most elegant
I've seen. No other language I know of allows the programmer
to *easily* modify code 20 or 25 years old (it's amusing to quote
here Eric S. Raymond's conclusion in his paper "Why Python ?"
found in Linux Journal, issue #73, April 30, 2000 :
"So the real punchline of the story is this : weeks and months
after writing fetchmailconf, I could still read the fetchmailconf
code and grok what it was doing without serious mental effort." :
for Modula-2, it's about *years* later... thanks to decent programming
and excellent language design !). I'm still wondering
how the same great Wirth could also be responsible
for the earlier (ugly) Pascal syntax quirks... :-)

J.P.I. TopSpeed is obviously to be thanked, in spite of a few
quirks in their Modula-2 compilers (I've learned the hard way
to really hate their cryptic "isl 342" error code, among others).
I'm old enough to have worked with many compilers for many languages
for many operating systems : TS 3.1 was (and *still* is, more than
twenty years later) among the most pleasant to *work* with
(even if the extended editor does not like Win98SE, being unresponsive
to the point of being impossible to use). If only they had
written a Win32 revision of their work as Bob Zale did it
when going from DOS PowerBASIC to PBCC...

The Q&D Tools would lack a few features without these individuals :
Fabrice Bellard (for his freeware LZEXE DOS packer, used to pack
all DOS executables), Matt Pritchard (for his public domain
Mode X library) and of course Ralf Brown (for the always informative
and even sometimes fascinating DOS Interrupt(s) List).

Jim Hall and the FreeDOS project are to be thanked, too,
for their work keeping good old DOS alive and well,
up to modern hardware, even though they unfortunately seem to think
C, ASM and GPL are 42 (er... the Ultimate Answer to Every Question).
While I'm "semper fidelis" (and please, please, do NOT shorten
this already concise Latin formula to the ugly and silly
"semper fi" ! Why not "sempfi", while you're at it, or even "sfi" ?)
to Novell DOS 7, I would probably use FreeDOS if I were to install
a new PC (on newer hardware at least). Anyway, I won't be one
of those weirdoes running a DOS emulation from their *nix boxes :
what's the use ? I don't even resent (well, not too much)
Jim Hall turning down Q&D Tools for FreeDOS just because
they were not in C (tsk tsk !) and not even GPLed -- people who
have never written any real software seem to love the opportunity
to deface software written by others. Where were you all
when the programming editor screen was blank ?
It's just too bad for a few FreeDOS DOS users who would really
benefit from tools such as UCLONE, VITAL, WIPE*,
PCOPY, DD, FCOMP and C (I mean my partial match change directory,
of course <g>).

I'm glad to thank Victor Chew, the grand architect
of the essential rescue CD called UBCD : I'm proud
my humble (but useful) Modula-2 tools UCLONE, VITAL and DTHS
were included in v5.3.4 release of his essential boot CD.

Thanks to Alexander Naumov for providing an alternate site
hosting QDTOOLS.ZIP archive ("http://www.uranus.ru").

Thanks to famous (and invaluable !) MDGx site
for hosting QDTOOLS.ZIP archive !

Thanks to John Walker : even though he despises the French,
he was kind enough to answer me and he even
added 2 of my 3 Modula-2 ports of his FBENCH program
to his FBENCH archive.

Thanks, of course, to any (unlikely) reader of these ramblings...
Please accept my apologies for my under-average English
(and my not revising the whole document) :
my mother tongue is French, and I must admit that to me,
English is to be read, not written nor even heard. ;-)
In French, I'm a writer ; in English, I merely try to be understood.

"Woz, Wirth and command line for ever !"

(And Charles H. Moore : he's a genius too, even though
clever Forth is not the panacea right tool for everything.)



(* === 3. REQUIRED CONFIGURATION === *)

CHKEM utility (run from command line in directory where archives
and CHKEM.LOG are to be found) may be used to detect any tampering
(deliberate or accidental) of archives : INSTALL.BAT will always
run this program as a safety measure (note a few operating systems
and/or utilities may decide to "fix" date and time stamps :
therefore, CHKEM checks stamps only if asked to with -d option).

The full Q&D Tools archive require at least this configuration :

    - about 130 Mb of hard disk space to unpack QDTOOLS.ZIP
      (including QDTOOL.ZIP itself, its sub-archives and
      its unpacked sub-archives contents : executables
      alone take of course much, much less space,
      for required space falls to about 75 Mb
      without *.ZIP archives, and to about 60 Mb
      without source code) ;
    - an Intel 80486DX or "better" CPU ;
    - 640 Kb RAM ;
    - a VGA 2.0 or "better" video card (note newer video
      cards seem able to lie about their real VESA support) ;
    - a SoundBlaster compatible audio card (optional, for
      very few Q&D Tools programs can take advantage of it
      if present and if required by user) ;
    - micro$oft Windows 3.1 (optional, for the few Win92
      Q&D Tools included in QDTOOLS.ZIP) ;
    - micro$oft Windows 98SE or, if really desperate, Windows XP
      (later revisions are definitely not recommended),
      for the few DOS to Win32 ports ;
    - a DOS 3.3 or "better" (whether by micro$oft, I.B.M.,
      Digital Research, Novell, Caldera, FreeDOS or whoever else).
      Current development PC runs under Novell DOS 7.15.

Once again, please note that some basic knowledge of DOS
command line is really required. Commands to (ahem) master
are mainly DIR, DEL, MD and CD (as well as running a console
from any version of Windows and exiting back to it,
and possibly adding a directory to executable binaries search PATH).

Should any virus checker trigger an alarm about any Q&D tool,
it would be a *false* alarm, for my PCs do not do Internet nor
hacked software. Should paranoia strike, .BAS source code
recompilation requires PowerBASIC 3.1 DOS compiler,
while .MOD source code recompilation requires
TopSpeed Modula-2 v3.1 DOS compiler with ALL official fixes applied
to system libraries, "PathStr" type being defined
as ARRAY[0..128] OF CHAR in FIO.DEF. By the way,
even though I did not use too much assembler nor DOS API calls,
I strongly doubt XDS Modula-2 compiler will recompile these programs
without heavy editing, even with the TopSpeed Compatibility Pack gag
(I checked it in 2005) : this is left as a (useless) exercise
to the reader -- it would probably be better to fully rewrite
the programs from their help screens !

There's some fun comparing the sizes of many of these humble
DOS programs to the sizes of similar programs (when they exist)
running with other operating systems... and that means :
excluding interface code and resource data, of course.



(* === 4. INSTALLATION === *)

QDTOOLS.ZIP archive contains ZIP sub-archives for each utility,
group of programs, libraries source codes, and samples batches.
Each EXE executable file has a matching .DOC file created
with /?[?[?]] option : this should do for help. A few utilities
have companion files (.INI, .DAT, .PCX, .GLO, .TXT, .TX, .DM,
.DMX, .WAV, .BIN, .LIF).

BATDOS, BAT98SE and BATXP directories contain real-world .BAT examples
which may be of some interest : note many of them will require
editing by user before use, for they make assumptions
about PC setup (for example, a C:\BAT directory).
Use them as a base for you own PC and please,
do NOT run them without FIRST checking them !
Remember they're mere text files after all.
Note that for safety, in order to prevent any accidental run,
they have been renamed with .BA extension.

For ease of use, you'll probably want to unpack sub-archives
in their specific directory before you move
your favorite utilities to a directory located in
your PATH environment variable. Note a few sub-archives
contain a NOTABENE.TXT file, i.e. a "Please read me"
in another name.

INSTALL.BAT batch file (mainly generated by DIRBAT utility
then edited by hand) will perform this operation automatically
in current directory, provided a .ZIP DOS unpacker such as UNZIP
(by Info-Zip group) or PKUNZIP (by PKware) is available and in PATH
or in current directory. Note you may edit INSTALL.BAT
in order to change _xarc_ environment variable value,
should you want to use another .ZIP unpacker (note you will have
to care of differences between options, whether default or not :
note (un)zip is case-sensitive for file matches -- a really stupid
choice for a Win32 version !).

Note, too, INSTALL.BAT will unpack *everything*, which accounts
for the space required : remember the utilities alone take
*much* less room, of course. ;-)

Just in case it would be useful, QDTOOLS.<MD5|SHA> contains
MD5|SHA digests for all files in QDTOOLS.ZIP archive.
Paranoids should note one underestimated point :
yes, MD5 collisions (and possibly SHA-1) can be forged
(on small trivial examples, as far as I know).
Anyway, forging data able to fool several checksum or digest
methods, however primitive, would require god-like abilities,
as far as I know. That's why it's wise to validate data
with several algorithms (CRC32 and MD5, MD5 and SHA-1, etc.).
Common sense...

Older program versions should, of course, be overwritten with newer ones.
I've done my best killing old bugs and quirks, while adding only
newer ones. ;-)

A note about syntax in help screens : almost always,
"#" means a number either decimal or hexadecimal (with "$" prefix),
while "$" means a string. In case of a doubt, just check source code.

Again, a last reminder about an important implementation limit :
any file whose size is 2 Gb or more will NOT be correctly processed.



(* === 5. ARCHIVE CONTENTS === *)

Most archives contain an executable, its companion files if any,
and almost always its source code. Exceptions to this rule will be
obvious : M2LIB_S contains Modula-2 libraries, and PBLIB_S
PowerBASIC libraries, both in source form, of course.
Almost all programs were written with TopSpeed Modula-2,
but a few utilities were written with PowerBASIC for DOS
and fewer even with Visual Basic 3.0 Pro (I do not know
and I do not want to know if post-3.0 revisions of Visual Basic
are able to recompile provided source code -- considering
ordinary M$ practice, the answer is very probably : no).

For Win92 programs, no installation program was thought
necessary : freely available runtime files VBRUN300.DLL,
PICCLIP.VBX and THREED.VBX (in WIN31SYS.ZIP archive)
should be copied in \WINDOWS\SYSTEM
directory, while *.SCR screensavers should be copied in \WINDOWS
or in \WINDOWS\SYSTEM. Data files should be copied in their
executable directory (in case of doubt, check source code : it
is as readable as VB 3.0 allowed it... which says a lot).
Note Win92 programs may not run correctly with Win98SE,
and may not run at all with WinXP.

Programs version scheme is fairly classic with its "v#.#?" form,
where "#" is a digit and "?" a letter. First digit indicates
a major rewrite, second digit indicates a substantial change
in design (such as the addition of many features),
while letter indicates a minor change (such as the addition
of a small feature, or a minor quirk/bug fix).

Note that, as far as I can remember, only six minor programs
(FIRE, PLASMA, WOBBLER, VECTORS, VOXEL and EEVAL)
are not entirely original, although they could easily have been :
they are greatly rewritten and enhanced versions
of existing code probably found in old Simtel and Usenet CDs
(EEVAL being what JPI TS PROG8.MOD should have been
in the first place).

TEXTGEN data format, although enhanced, was inspired by SPEW.C,
a primitive (what else, in that language ?) but funny "novelty program".

Common libraries algorithms (Fletcher16, CRC32, Adler32, MD5 and SHA)
come from RFC and technical papers reading : Modula-2 implementation
has sometimes benefited from reading C and/or Pascal public domain versions.
QD_Rand values shuffling was found aeons ago while reading
numerous texts about random numbers generators but unfortunately,
I can't remember where the idea came from.

A companion text file in French and English may be included,
kept here for (personal) historical reasons.

Encrypted *.PBP (Pretty Bad Privacy) sources are included
to remind me how good I *WAS* at good old Apple ][ times.
Eh, Phil's Operating System was certainly the leanest
and probably the fastest... and it even had a Krunch function
in order to defrag Apple ][ floppies formatted
with my small but fast, primitive but efficient operating system.
Phil's Perfect Printer was among the first, if not the first, editor
able to cut words according to complex French rules,
to process footnotes and to dump text in Greek (with full accents !)
on the nice Taxan KP810 printer (running heads shifted by half a dot
in order to increase resolution !). And Phil's Grafwiz
(Graphics Wizard) was much, much better than
the so-called Graphics Magician : it was twice smaller
and twice faster.

Those were the days, by Woz... ;-)

Note a few more or less useful programs have been ported
to Win32 platform, the *real* Quick & Dirty way
(see infra, WIN32 section). They could be of some use,
at least to show the need for a real M2 Win32 compiler.
Anyway, for each Win32 hack, please note :
- DOS executable is better and has more options and features ;
- DOS source is better and cleaner (XDS forced me to do ugly things) ;
- DOS executable and source have been tested for years,
  while port has *not*. ERRORINF.$$$ may happen ! ;-)
Among other surprises, there may be problems about character sets
(accents, Unicode...) and Vindoze-Knows-What, too.

Here are the programs by category. Note this global presentation
was recently replaced with an archive per program.
Note, too, most useful and/or entertaining programs have
a "//" marker in terse description : I wouldn't do without them,
whether for work or for fun, even if I were not their author.



::: FILE        ; directory and file utilities

byteproc.exe    ; apply logical operations (XOR, INC, DEC) to file
c       .exe    ; //enhanced CD command also able to look for partial matches
chkfread.exe    ; check every entry in a list is readable
cs      .exe    ; //check CRC32 / MD5 / SHA-1 [/ Adler 32 / Fletcher 16]
cs      .ini
dcomp   .exe    ; compare filenames in source and target directories
delb    .exe    ; //delete all but specified files
dd      .exe    ; //xdir/xdel/deltree : a 3 in 1 ls-like
dd      .ini
dirbat  .exe    ; //create batch file to process specified files
dirweird.exe    ; list "weird" filenames
evenodd .exe    ; split a file to even and odd bytes
everyn  .exe    ; more general an EVENODD splitting by 2 to 255 bytes
fcomp   .exe    ; //enhanced binary files compare
fentropy.exe    ; compute file entropy (same as CCOUNT -ent mode)
flip    .exe    ; flip file contents
fu      .exe    ; show files usage
gotohell.exe    ; try and overwrite deleted filenames -- unfinished business
hdfree  .exe    ; //show disk space for unit(s)
isempty .exe    ; check if directory is empty
makepath.exe    ; //create multi-part directory
msaber  .exe    ; slightly enhanced Cipher Saber in Modula-2
newname .exe    ; //enhanced rename (prefix, suffix, change, delete, renumber)
pcopy   .exe    ; //enhanced copy/move/xcopy
pcopy   .ini
pending .exe    ; list DR-DOS and Novell DOS pending delete files
popdir  .exe    ; go back to previously saved directory
pushdir .exe    ; save current directory
procdups.exe    ; list identical (CRC32 or MD5) files
segcrc  .exe    ; segmented CRC32 file check
total   .exe    ; show file usage by directories
whatlfn .exe    ; show both DOS and LFN paths
wipefile.exe    ; wipe data from files
with    .exe    ; process command on specified files (immediate DIRBAT)
xor     .exe    ; apply XOR operation to files

::: FUN         ; fun (un)utilities and old 2D demos

aclock  .exe    ; animated particles clock
cells   .exe    ; an animation to be improved one of these days...
chryzo  .exe    ; an alpha skeleton for a very unlikely inclusion of chryzoids in SPIRO
curves  .exe    ; splines
daymonth.exe    ; //"on this day" novelty program
daym_ego.dm     ; private data file for daymonth.exe
daym_day.dm     ; alternate data file for daymonth.exe
dclock  .exe    ; //yet another impressive clock of the polar kind
egaclock.exe    ; moving digits clock (xclock and vclock are better)
explode .exe    ; explosion simulator
fire    .exe    ; particles fire
firebees.exe    ; fire bees
fortune .exe    ; //self-explanatory classic for both taglines and cookies
fortune .txt
taglines.txt
fountain.exe    ; interactive fountain
gematria.exe    ; warning : utter nonsense !
gematria.dat
glyphes .exe    ; view Q&D AstroTools glyphs
gridrun .exe    ; yet another idea which seemed pretty before programming it
iago    .exe    ; pretty bad othello
lavalamp.exe    ; Lava Lamp projector
loto    .exe    ; show non-maths people loto is a tax upon despair and stupidity
matrix  .exe    ; //the best text-based saver of an over-rated Z-movie
morfmsg .exe    ; primitive morphing
movie   .exe    ; display an animated PCX (poor man's DOS PICCLIP.VBX)
oclock  .exe    ; classic analog clock
patmatch.exe    ; a tool for crossword puzzles
patmatch.fra    ; words and verbs (French, uppercase)
mots    .fra    ; words (French, uppercase)
patmatch.fr     ; words and verbs (French, accents)
mots    .fr     ; words (French, accents)
pfire   .exe    ; plasma fire
plasma  .exe    ; self-explanatory
pulsar  .exe    ; pretty ugly display (see comment about gridrun)
qdtitle .exe    ; Q&D Tools intro (effects dating from 6502 Apple ][ days !)
quiz    .exe    ; "world's smallest political quiz" implementation
quiz    .dat
quiz    .pcx
quizfr  .dat    ; an older French version of quiz.dat (should be revised)
quizfr  .pcx
quizyn  .exe    ; Yes/No quiz implementation
quizyn  .dat
shuttle .exe    ; primitive 3D animation
spiro   .exe    ; nice spirolatères
splines .exe    ; test for splines formulae
stars   .exe    ; self-explanatory classic
storm   .exe    ; basic storm display
storm0  .wav
storm1  .wav
textgen .exe    ; //create random texts (and rather good passwords too)
textgen .tx     ; *.tx data created or converted from many, many sources

password.tx     ; password generator
pw*     .tx     ; password generators
*       .tx     ; TEXTGEN scripts

tvoff   .exe    ; old TV shutdown
tvstatic.exe    ; ugly TV static display (see comment for gridrun)
vclock  .exe    ; //yet another moving digits clock
vectors .exe    ; bob demo (a cleaner and more readable port than original)
vlife   .exe    ; yet another Life program
vlife   .dat    ; Life patterns
rletolif.exe    ; .RLE to .LIF converter
lifelex .dat    ; Life patterns from Life Lexicon
lifelex .exe    ; converter from Life Lexicon to VLIFE.DAT format
lifpats .zip    ; .LIF patterns taken from dozens of Life programs (DOS names)
lifpatsx.zip    ; idem but LFN names for Win98SE :-(
vldemo* .lif    ; .LIF examples
voxel   .exe    ; voxel demo (a port cleaner and more readable than original)
warp    .exe    ; ugly starfield
wobbler .exe    ; fast processor really required
wolfrule.exe    ; Wolfram's rules quick tester
xclock  .exe    ; //yet another moving digits clock
yiking  .exe    ; wisdom of the Far East... and/or utter nonsense
yiking  .dat
yingyang.exe    ; minor code to draw the classic famous symbol
zigzag  .exe    ; lines and splines
prephidn.exe    ; prepare text for search of equidistant letters hidden words
findhidn.exe    ; try and find specified equidistant letters hidden words
showhidn.exe    ; show equidistant letters hidden words

::: HACK        ; <hacker|programmer|power user>'s utilities

blockdmp.exe    ; show essential partitions data from a MBR saved to a file
dllfind .exe    ; //list Win16 and Win32 DLLs explicitely used by an EXE
dllfind .ini
dths    .exe    ; //read/write hard disk sectors
fixpe   .exe    ; //fix PE versions and/or mono- or single- processor mode
peek    .exe    ; //find text strings in files
paspeek .exe    ; //extract Pascal strings, whether ASCII or Unicode
picfind .exe    ; //view files as graphics (one of its kind as far as I know)
sigfind .exe    ; //search files for hex or ASCII data
uclone  .exe    ; //poor man's IDE/SATA hard disk safe cloning utility
vital   .exe    ; //save/compare/restore vital CMOS and partitions data
wipeunit.exe    ; First MaybeWare, now NeverWare ! ;-)
xd      .exe    ; //hexadecimal dump and command line modification tool
xosldump.exe    ; dump XOSL multiboot data
xtract  .exe    ; extract portions from files

::: MISC        ; various utilities

baseconv.exe    ; yet another decimal/hexadecimal/binary LONGCARD converter
bgidemo .exe    ; a demo calling Borland BGI libraries with TopSpeed Modula-2
cal     .exe    ; //a classic calendar with a few twists
cdcmd   .exe    ; open/close CDROM tray
change  .exe    ; currency converter
chkio   .exe    ; i/o ports diagnostic tool : use with CAUTION !
chkiomap.exe    ; chkio useless companion
chkports.exe    ; i/o ports diagnostic tool : use with CAUTION !
chkfsize.exe    ; compare filesizes
chkstamp.exe    ; compare date and time stamps
chrono  .exe    ; self-explanatory
dt      .exe    ; show date and time even in Discordian calendar : Hail Eris !
dtchk   .exe    ; //system clock safety boot checker
dtsync  .exe    ; touch-like copy source date/time stamp to target(s)
eeval   .exe    ; from useless TS PROG8.MOD to a more useful CLI calculator
elapsed .exe    ; compute elapsed number of days/hours/minutes
esf2htm .exe    ; convert encyclopedia of science-fiction CDROM to HTML
ev      .exe    ; show environment variables
factoriz.exe    ; try and find factors for specified number
fbench  .exe    ; a port of John Walker's FBENCH program with INTRIG FALSE
fbenchx .exe    ; the same as above with INTRIG TRUE
fibo    .exe    ; compute Fibonacci number
fmtmdlog.exe    ; convert MD5 digest CS MD5 logs to and from MD5SUM
joystick.exe    ; test joystick (DOS only)
hilite  .exe    ; color highlighting for PowerBASIC 3.1 editor (EMS needed)
hilite  .def    ; keywords
hilitem2.exe    ; color highlighting for TopSpeed M2 v3.1 editor (EMS needed)
hilitem2.def    ; keywords
hms     .exe    ; time converter
isocase .exe    ; fix stupid ELSE for CASE as required by (censored) ISO M2
isocase .ini
l1      .exe    ; enable/disable Pentium II cache (at least on my PC)
makedef .exe    ; //.MOD to .DEF (TopSpeed Modula-2 specific)
md5demo .exe    ; self-explanatory
missing .exe    ; find missing files in numbered files
morse   .exe    ; self-explanatory
morse   .dat
mpause  .exe    ; enhanced mouse-enabled pause-like
nowplus .exe    ; now + (days minutes seconds) = eBay sniper tool !
pcx2bj  .exe    ; print a monochrome PCX file to Canon BJ-200 printer
picdims .exe    ; //list JPG/GIF/PNG dimensions (width and height)
playwav .exe    ; back to the good old SoundBlaster 1.0 days !
poweroff.exe    ; turn PC off (at least on my PC)
reboot  .exe    ; self-explanatory
remmod  .exe    ; process remarks in Modula-2 code (TS specific)
reserve .exe    ; //create file(s) with user-specified size
restamp .exe    ; change time stamp (obsolete)
rndgen  .exe    ; return a 0..255 random number
roman   .exe    ; convert from decimal to roman numerals and vice versa
shademo .exe    ; self-explanatory
solarsys.exe    ; //solar system bodies coordinates (text ephemeris)
sound   .exe    ; self-explanatory
stamp   .exe    ; save/restore current date/time
unapple .exe    ; Apple ][ DOS 3.3 disk image processor, AppleSoft lister
wipecmos.exe    ; wipe data from CMOS
xchoice .exe    ; slightly enhanced CHOICE command
xemem   .exe    ; show XMS and/or EMS status
yt2srt  .exe    ; try and convert YT transcription to SRT format

::: TEXT        ; ASCII text processing utilities

base64  .exe    : encode to and decode from MIME base 64 format
between .exe    ; //dump lines between specified strings
ccount  .exe    ; count characters
chkspell.exe    ; First MaybeWare, now NeverWare ! ;-)
columns .exe    ; //process columns in text files
concat  .exe    ; //concatenate binary or text files
crlf    .exe    ; //process and fix CR, LF, CRLF
delims  .exe    ; delimited text extractor
duplines.exe    ; process duplicates from a SORTED text file
filter  .exe    ; //process and filter text files
htm2asc .exe    ; HTML to text (Wayne Software's HTMSTRIP is much better)
htm2asc .ini
keepuniq.exe    ; (slowly) filter out lines common to two files
kgroup  .exe    ; filter group of lines
lcount  .exe    ; count lines
mac2pc  .exe    ; macintoy ASCII to PC ASCII (XLAT is better)
mod2htm .exe    ; convert M2 source from text to HTML
newline .exe    ; //process text lines
oldnew  .exe    ; //process identifiers/words/sequences
opgroup .exe    ; operation on groups of lines
pc2mac  .exe    ; PC ASCII to macintrash ASCII (XLAT is better)
reg2txt .exe    ; slightly more readable format for REGEDIT exported dump
ssort   .exe    ; not fast but useful sort of huge files
texttool.exe    ; dictionary-oriented text operations
trim    .exe    ; trim, enquote or unquote lines
txtfmt  .exe    ; //reformat text files
unpath  .exe    ; reformat paths in text lines
unmbox  .exe    ; convert MBOX files to DOS ASCII and remove attachments
unmbox  .ini    ; required by unmbox.exe
unrtf   .exe    ; try and extract raw text data from simple RTF file (primitive)
unrtf   .ini
xcsv    .exe    ; expand CSV text data
xlat    .exe    ; //convert characters from one set to another
xlat    .glo
wcount  .exe    ; count words and n-grams

::: VIDEO       ; screen text-mode utilities

bwbmpdef.exe    ; convert a B&W BMP file to text for MORFMSG and FONTTOOL
cap2tga .exe    ; convert TEXTCAP binary format to TGA format
chargen .exe    ; set video mode
chkcols .exe    ; check video columns
chkcr   .exe    ; check video columns and rows
chkrows .exe    ; check video rows
ddc     .exe    ; display DDC monitor parameters
fonttool.exe    ; q&d text font editor using text definition
newfont .exe    ; change text font
setvmode.exe    ; set video VESA mode
viewpcx .exe    ; view PCX files (2 or 256 colors only)
a2      .fon
a2      .dat

::: WIN92       ; Windows 3.1 programs

vbrun300.dll    ; runtime (\windows\system)
picclip .vbx    ; runtime (\windows\system)
threed  .vbx    ; runtime (\windows\system)
vbasm   .dll    ; runtime (\windows\system)
wcurves .scr    ; screensaver (adaptation of DOS curves.exe)
darkness.scr    ; real screensaver
wcounter.scr    ; nice screensaver... better than John Walker's one in C ! ;-)
eternity.bmp
bam     .wav
bambam  .wav
bees    .exe    ; swarm of bees
savernow.exe    ; immediately run default screensaver
end     .exe    ; don't smile
end     .bmp
end1    .wav
end2    .wav
hdspace .exe    ; disk free/used space (won't work on huge modern disks)
plusdhm .exe    ; now + (days minutes seconds) = eBay sniper tool
pusher  .exe    ; time-waster mini-game
sscmdr  .exe    ; small ScreenSaver CoMmanDeR
dollaros.exe    ; currency converter
jokes   .exe    ; display fortune file specified in jokes.ini
2000    .exe    ; a contribution to Y2K madness (remember it ?)
2000    .bmp
2000a   .bmp
2000a   .wav
2000b   .wav

::: M2LIB_S

QD_SHA  .DEF    ; SHA-1 library
QD_MD5  .DEF    ; MD5 library
QD_CRC  .DEF    ; CRC32 library
QD_ADLER.DEF    ; Adler checksum
QD_FCS  .DEF    ; Fletcher checksum
QD_ASCII.DEF    ; a few usual ASCII constants
QD_BOX  .DEF    ; various use<d|ful> functions
QD_LFN  .DEF    ; LFN file functions
QD_FILE .DEF    ; file functions for both DOS and LFNs
QD_RAND .DEF    ; slightly improved random number generator
QD_TEXT .DEF    ; text mode functions
QD_VESA .DEF    ; VESA functions
QD_ERIS .DEF    ; Discordian date library : hail Eris ! Praise "Bob" ! ;-)
QD_DUMP .DEF    ; dump VGA screen to PCX
QD_HIRES.DEF    ; Borland BGI wrapper

::: M2BGI

Files demonstrating improved Borland BGI support for TopSpeed Modula-2
(I found JPI files impossible to use).

::: BATDOS

Batches useful for DR-DOS 6 and Novell DOS 7. FreeDOS was not tested,
but it should work.

::: BAT98SE

Batches useful for Windows 98SE console.

::: BATXP

Batches useful for Windows XP console.

::: WIN32

BASECONV32      ; see BASECONV
BYTEPROC32      ; see BYTEPROC
CAL32           ; see CAL
CHKFREAD32      ; see CHKFREAD
CHRYZO32        ; see CHRYZO
COLUMNS32       ; see COLUMNS
CONCAT32        ; see CONCAT
CRLF32          ; see CRLF
CS32            ; see CS
DAYMONTH32      ; see DAYMONTH
DD32            ; see DD
DELIMS32        ; see DELIMS32
DT32            ; see DT
DUPLINES32      ; see DUPLINES
EEVAL32         ; see EEVAL
ELAPSED32       ; see ELAPSED
EVENODD32       ; see EVENODD
EVERYN32        ; see EVERYN
FACTORIZ32      ; see FACTORIZ
FBENCH32        ; see FBENCH
FCOMP32         ; see FCOMP
FENT32          ; see FENTROPY
FINDHIDN32      ; see FINDHIDN
FIXPE32         ; see FIXPE
FLIP32          ; see FLIP
FORTUNE32       ; see FORTUNE
FU32            ; see FU
GEMATRIA32      ; see GEMATRIA
GOTOHELL32      ; see GOTOHELL
HDFREE32        ; see HDFREE
HMS32           ; see HMS
ISOCASE32       ; see ISOCASE
LCOUNT32        ; see LCOUNT
MAKEDEF32       ; see MAKEDEF
MOD2HTM32       ; see MOD2HTM
MSABER32        ; see MSABER
NEWLINE32       ; see NEWLINE
NEWNAME32       ; see NEWNAME
OCLOCK32        ; see OCLOCK
OLDNEW32        ; see OLDNEW
PASPEEK32       ; see PASPEEK
PATMATCH32      ; see PATMATCH
PCOPY32         ; see PCOPY
PEEK32          ; see PEEK
PICDIMS32       ; see PICDIMS
PREPHIDN32      ; see PREPHIDN
QUIZYN32        ; see QUIZYN
REMMOD32        ; see REMMOD
RESERVE32       ; see RESERVE
ROMAN32         : see ROMAN
SHOWHIDN32      ; ses SHOWHIDN
SOLARSYS32      ; see SOLARSYS
SPLINES32       ; see SPLINES
SSORT32         ; see SSORT
TEXTGEN32       ; see TEXTGEN
TOTAL32         ; see TOTAL
TSTISAAC32      ; see TSTISAAC
TXTFMT32        ; see TXTFMT
XLAT32          ; see XLAT
XTRACT32        ; see XTRACT
WCOUNT32        ; see WCOUNT
WIPEFILE32      ; see WIPEFILE
XCSV32          ; see XCSV
YINGYANG32      ; see YINGYANG
YT2SRT32        ; see YT2SRT



::: QDASTRO

Please note provided QD32.ZIP and QD32SRC.ZIP subarchives
are not to be used for serious work, whatever "serious" may mean here.

Please check README, LISEZMOI and DEMO*.BAT for more infos
about Q&D AstroTools found in QDASTRO.ZIP subarchive :
whatever one may think about these tools' frivolous goal,
one must admit Modula-2 was the perfect choice
for such a big project requiring
intensive astronomical data processing.
Incidentally, without these programs
and some of their unique features, I would not have been able
to compute and study natal charts for these essential happy few
(essential to various degrees and for different reasons,
of course, although I like to think there are secrets links
between them -- well, most of them) : Pierre Boutang,
Friedrich Nietzsche, Arthur Schopenhauer, Chamfort,
Antoine de Rivarol, Giovanni Papini, Ernst Jünger,
Nicolas Gomez Davila, George Orwell, Arthur Koestler,
Maurice Joly, Jaime Semprun, Guy-Ernest Debord,
Theodore Kaczynski, Baudouin de Bodinat, Jean-Marc Mandosio,
Alexis de Tocqueville, Gustave Le Bon,
Régis Messac, Lysander Spooner, Benjamin Tucker, Etienne de La Boétie,
Albert Caraco, Giacomo Leopardi, Gianfranco Sanguinetti (Censor),
Raymond Abellio, André Fraigneau, Jean Raspail, Anatole France,
Jean-Louis Curtis, John Buchan, Fruttero & Lucentini,
Jacques Laurent, Philippe Muray, Jacques Perret, Marcel Aymé,
Pierre Daninos, Jacques Chardonne, Roger Nimier, Henry James,
Gilbert Keith Chesterton, Howard Phillips Lovecraft,
Charles Maurras, Pierre Gaxotte, Daniel Halévy, Jacques Bainville,
Jérôme Carcopino, Léon Homo, Pierre Grimal, René Grousset, Jacques Heers,
Samuel Noah Kramer, Robert Graves,
Ernst von Salomon, Jacques Bergier, Pierre Nord, Jean-Marie Déguignet,
Oscar Fingal O'Flahertie Wills Wilde, Hector Hugh Munro (Saki),
Ambrose Bierce, Edgar Allan Poe, Jonathan Swift, Honoré de Balzac,
Alexandre Dumas père, Rafael Sabatini, Anthony Hope, Jack London,
Théophile Gautier, Jules Barbey d'Aurevilly, Eiji Yoshikawa,
Philippe Auguste Villiers de L'Isle-Adam, Henri de Régnier,
Octave Mirbeau, Karl Kraus, Arthur Schnitzler, Otto Weiniger,
Leo Perutz, Alfred de Vigny, Pierre Gripari, Sacha Guitry,
Sir Arthur Conan Doyle, Sir Pelham Grenville Wodehouse,
Rudyard Kipling, Samuel Langhorne Clemens (Mark Twain),
Pierre Proudhon, Henry David Thoreau, Ayn Rand, Miyamoto Musashi,
Hubert Monteilhet, Roger Caillois, Emmanuel Berl, Claude Tresmontant,
Thierry Maulnier, Georges Laffly, Benjamin Disraeli, Noam Chomsky,
Robert Brasillach, Vladimir Volkoff, Dominique Venner, Jürgen Thorwald,
Paternot & Véraldi, Julius Evola, Jules Monnerot, Louis Rougier,
Pierre Ryckmans (Simon Leys), Johann Caspar Schmidt (Max Stirner),
Henry Beard, Robert Benchley, Henry Louis Mencken, Serge Quadruppani,
Abraham Merritt, Robert Heinlein, Jacques Sternberg,
Fritz Leiber Jr, Eric Frank Russell, Robert Howard,
Pierre Rousseau, André Gillois, Roger Delorme, John Gall,
Robert Beauvais, Bergen Evans, C. W. Ceram,
Emile Littré, Maurice Grevisse,
Maurice Renard, Anton Szandor LaVey, Anthony Daniels (Theodore Dalrymple),
René Pommier, Maurice Bardèche, Robert Poulet, Pierre-Antoine Cousteau,
Niklaus Wirth, Steve Wozniak, Gary Kildall, Charles Moore, Chuck Peddle,
John Walker (fourmilab.ch), Dr Nikolai Bezroukov (softpanorama.org),
Jubal Harshaw, Martin Venator, René Dorlinde, Blumroch,
The Prisoner, Howard Roark, Patrick Dalroy, Lazarus Long, Chad Mulligan,
Frank Lloyd Wright, Albert Lewin, Joseph Leo Mankiewicz,
Akira Kurosawa, John Boorman, John Milius,
Ava Gardner, Gene Tierney, Cyd Charisse,
George Sanders, Stewart Granger, James Mason,
Patrick McGoohan, Christopher Walken,
Christopher Lee, Vincent Price, Peter Cushing,
Charles Maurice de Talleyrand-Périgord and
Jean-François Paul de Gondi (Cardinal de Retz).
This list, in no particular order, is not limitative indeed,
but those names are among the most important ones I can think of ;
unfortunately, it was not possible to gather
reliable complete birth data about obvious older classics
such as Tacite, Salluste, Aristophane, Lucien de Samosate, Sophocle,
Jules César, Aristote, Platon, Gracian, La Fontaine, La Bruyère,
Sun Tzu, Confucius, Lao Tseu,
Bach, Mozart, Wagner, Orff, Holst, Scriabine,
Henricus Barbatus et alii too numerous to mention... :-( & ;-)

Ok, I'll admit it. This list has almost nothing
to do with astrology. I just feel I have a debt to those ones
(well, except a few ones), even if I'm sure I would have thought
the same way as I do without them. Let's acknowledge
it was very gratifying to meet them in libraries
(and in movies for a few names),
whatever one may think or feel about their life.

(* === 6. HELP SCREENS === *)





(* // ---------- "aclock.doc" ---------- // *)


Q&D Atomic Particles (!) Clock Mode X v1.0i by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax : ACLOCK [option]...

  This clock displays time thanks to rays of atomic particles. ;-)
  (HH= grey particles, MM=blue particles, SS=yellow particles)
  Display is not very accurate, but it does look rather nice...
  Remember hours and minutes are exactly set without progressive change :
  they are refreshed only AFTER they have changed. In other words,
  06:50 MAY look like 05:50 but it is really 06:50 ! ;-)

  Colors must be in the [$00..$FF] range. '$' prefix stands for hex value.

  -m    abort program not only with key but with mouseclick too
  -v    show time too
  -t    transition for hours
  -s    slowdown for any processor superior to my good old... i486 DX33 ;-)
  -n    normal (less realistic) display
  -p    display current palette and quit
  -h:#  main color for hours particles (default = $1B)
  -m:#  main color for minutes particles (default = $37)
  -s:#  main color for seconds particles (default = $29)
  -i:#  increment (default = $3)
  -f    finer resolution



(* // ---------- "BASE64.doc" ---------- // *)


Q&D Base 64 v1.0a by Philippe Guiochon

Syntax 1 : BASE64 <-e> <original> [MIME_target] [option]...
Syntax 2 : BASE64 <-d> <MIME_source> <original> [option]...

This program either converts a file to MIME BASE64 format (syntax 1),
or converts a MIME BASE64 file back to its original binary (syntax 2).

  -e[e] encode (-ee = -e -o)
  -d[d} decode (-dd = -d -o)
  -w:#  line width ([4..256], default is 60)
  -o[o] overwrite existing target file (-oo = -o -r)
  -r    ignore existing read-only attribute when overwriting or erasing a file
  -q    quiet (no message on operation completion)
  -i    include optional header (-e[e] only)
  -n|-m no final CRLF (-e[e] only)
  -x    disable LFN support even if available

a) With syntax 1, should MIME_target be omitted, output will go to screen.
b) Jokers are not supported : this is by design.
c) -ii = -nn = -mm = -i -n

Examples : BASE64 -w:60 -e -o archive.zip archive.64
           BASE64 -d archive.64 archive.zip



(* // ---------- "baseconv.doc" ---------- // *)


Q&D Base Converter v1.0g by Philippe Guiochon

Syntax : BASECONV <[$|%|0x|_|!]number>... [option]...

This program displays LONGCARD numbers in bases 10, 16, 2, 8 and 4
(decimal, hexadecimal, binary, octal, Shadok numeration).

    -a[a]    dump each base value on its own line (-aa = -a -o)
    -o|-b    show octal (-a forced)
    -4[@]|-! show base 4 (-a forced)
    -@[4]    show Shadok numeration (-a forced)
    -x       shortcut for -o -4 -@
    -c       show DOS ASCII character
    -f[r]    increase values readability (French-style)
    -u[s]    increase values readability (English-style)
    -$|--|-/ show only decimal and Shadok (-a forced)
    -i       show maximum values

a) -i option ignores any parameter.
b) -c option is ignored if number is out of [0..255] ([$00..$ff]) range.
c) Inner "." and "," separators are ignored.
d) Although octal "_" and base 4 "!" prefixes are handled,
   octal and base 4 display still require -o or -4 options.
e) Shadok numeration does not use any prefix :
   it is base 4 where 0 = Ga, 1 = Bu, 2 = Zo, 3 = Meu.
   Alternate forms are 0 = G, 1 = B, 2 = Z, 3 = M.
   Normal and alternate forms should not be mixed.
f) -$ option is forced if "BASECONV.!!!" file exists
   in executable directory or in current directory.
   Please note this file was NOT found.

Examples : BASECONV %00.00.00.01 0x2 1.963 $13 _55 -o
           BASECONV -4 !3210
           BASECONV -@ MeuZoBuGa MZBG Meu.Zo.Bu.Ga 228
           BASECONV -@ -4 -f MeuZoBuGa 19630201
           BASECONV -$ meuzobuga 228



(* // ---------- "between.doc" ---------- // *)


Q&D Between v1.0g by Philippe Guiochon

Syntax : BETWEEN <opening> <closing> <source> [report] [option]...

This program reads each line from <source> and write it to [report] only
if line is enclosed between lines containing <opening> and <closing> strings.

  -a    append to existing report, creating it if required
  -o    overwrite existing report
  -c    case-sensitive filter
  -k    preserve accents when ignoring case (default is to ignore them)
  -i    reverse filter
  -s    stricter requirement (<opening> ... <closing> pairs)
  -j[j] pattern mode allowing M2 jokers (-c ignored)
  -n    no dashes separator line
  -q    quiet
  -f    include filename in report
  -p:?  replace specified character with "%" in <opening> and <closing>
  -d:?  replace specified character with '"' in <opening> and <closing>
  -*    ignore <closing> text and dump lines from <opening> until end of file
  -e:$  create report replacing <source> extension with specified one
  -lfn  disable LFN support even if available

a) Options, if any, MUST be specified AFTER <opening> and <closing> parameters,
   unless unexpected results are expected. ;-)
b) <opening> and <closing> must be carefully chosen as not to overlap.
c) <opening> and <closing> strings must be smaller than 128 characters.
d) <source> cannot contain any joker : this is by design.
e) Each line in <source> must be smaller than 1024 characters.
f) -i can be used in order to filter out lines between <opening> and <closing>.
g) -j[j] searches for <opening> and <closing> patterns. Supported jokers are :
   "?" (any single char) and "*" (any sequence of chars, including none).
   Note search is NOT case-sensitive (-c is thefore ignored).
   -jj automatically encloses both <opening> and <closing> patterns with "*".

Examples : BETWEEN "version info:" $ rpt.rpt -n
           BETWEEN *PROCEDURE*getlong*;* *END*getlong*;* between.mod -j
           BETWEEN PROCEDURE*getlong*; END*getlong*; between.mod -jj



(* // ---------- "bgidemo.doc" ---------- // *)


Q&D BGI demo v1.0 by Philippe Guiochon

BGI libraries   : internal
Graphics module : SVGA16



(* // ---------- "blockdmp.doc" ---------- // *)


Q&D Block Dump v1.0 by Philippe Guiochon

Syntax : BLOCKDMP <file> [option]...

This program dumps data found in a block saved to a file.

    -m    dump <file> as a master boot record (default)
    -a    alternate unbeautified format
    -g    partition size in gigabytes (default is megabytes)
    -s    check $aa55 signature
    -b[b] dump <file> as hexadecimal too (-b = by 16, -bb = by 8)
    -x    disable LFN support even if available
    -??   technical memento

a) Without extension, <file> is tested against these default ones :
   .BIN,.SAV,.HD0,.HD1,.MBR,.BLK
b) <file> length must be at least 512 long for data to be parsed ;
   $aa55 signature MUST exist at $01fe file position.
c) Being irrelevant, cylinders, heads and sectors will not be displayed.



(* // ---------- "bwbmpdef.doc" ---------- // *)


BWbmpDEF v1.0c par Philippe Guiochon

Syntaxe : BWBMPDEF bmpfile[.BMP] [-n] [-f] [-v]

A partir d'un fichier BMP monochrome, BWBMPDEF génère
une image .DEF (pour MorfMsg) ou .DAT (pour FontTool).

  -n négatif
  -f police (largeur fixée à 8, hauteur automatique 8 ou 16)
  -v eyecandy



(* // ---------- "byteproc.doc" ---------- // *)


Q&D Byte Processor v1.1d by Philippe Guiochon

Syntax : BYTEPROC [option]... <operation> <value|range|*|!> <filespec>

-p:#<,|..># specify start,count or start..end file positions range
-n          exclude CR and LF from operation
-c          exclude CR from operation
-f          exclude LF from operation
-k          exclude all control characters ([0..31]) from operation
-q          quiet processing
-a          audio warning at program completion
-x          disable LFN support even if available

a) Note any existing target will be overwritten without warning.
b) Operation to perform may be XOR, INC, DEC, INCR, DECR, PLUS or MINUS.
c) Value to use for operation is a byte in the [0..255] or [1..128] range.
d) "*" means [$00..$FF] processing for XOR, else it means [$01..$80].
e) "!" means value is XORed with file position modulo 256 (XOR required).
f) New files are created with ".$##" (hexadecimal value) extension :
   therefore, files with such an extension will not be processed.
g) Range can be specified in either decimal or hexadecimal ("$" prefix).

Examples : BYTEPROC x 0..$10 *.bin
           BYTEPROC i * mystery.dat
           BYTEPROC x $ff selectit.cfg
           BYTEPROC x ! install.inf



(* // ---------- "c.doc" ---------- // *)


Q&D Partial Match Change Directory v1.1x by Philippe Guiochon

Syntax 1 : C [u[u]...:][ ]<subdir>... [-l-o-m[m]-v-i-e-g-r[-u|-a|-z]]
Syntax 2 : C [u[u]...:][ ]<filespec>... <-f[f]|-m[m] [-p-t]> [-l-o-r[-u|-a|-z]]
Syntax 3 : C [u[u]...:]... <-c> [-l[-u|-a|-z]]
Syntax 4 : C
Syntax 5 : C <[u:]\subdir[\]> <-=>

-f[f] immediately go to directory containing <filespec> (-ff = -f -r)
-m[?] list entries matching specification (-my, -mm, -mr, -mmy, -mry)
-p    list pathnames matching specification (default is filenames)
-t    terse mode (-m[?] and -= only)
-y    summary mode when listing entries matching specification (-m[?] only)
-c[?] create ?:\TREEINFO.<DAT|LFN> containing directory list (-cu, -ca, -cz)
-=[t] return 255 if current directory is <[u:]\subdir[\]>, else return 192
-u    unsorted directory list (default)
-a    ASCII-sorted directory list
-z    pathlength-sorted directory list
-l    disable LFN support even if available
-o    search from root instead of current directory for first specified unit
-r[?] reread directory list(s), ignoring ?:\TREEINFO.<DAT|LFN> (-ru, -ra, -rz)
-s[s] alternate search mode (-ss = yet another alternate search mode)
-v    view list of matching directories (CD only if -i, -e or -g specified)
-i    interactive directory selection
-e    immediately go to exact match
-g    immediately go to exact match or to smallest match if no exact match
      (forced if any subdir matches [=|+]*, *[=|+] or [=|+] alone)
-x    ignore existing C.INI
-??   more help (to be read at least once !)

a) With syntaxes 1 and 2, -r option is forced if :
   - unit is a floppy (A:, B:) or a CDROM ;
   - ?:\TREEINFO.<DAT|LFN> do not exist.
b) With syntax 3, floppies (A:, B:) and CDROM units are automatically excluded.
c) With syntax 5, only -l and -t options are valid (others are ignored) ;
   <[u:]\subdir[\]> is compared verbatim (excluding unit if u: is missing).
d) -r[?] option requires a fast PC ; it does NOT update ?:\TREEINFO.<DAT|LFN> ;
   it may be always forced by setting QDCD environment variable :
   allowable values are U (unsorted), A (ASCII) or Z (path length).
e) Any error code above 127 means target (directory or file) was not found.
f) -f[f] option automagically appends ".*" to <filespec> without ".".
g) -m[m] option allows smarter than DOS jokers in <filespec> :
   "?" (any character) and "*" (any sequence, whether empty or not).
h) Directory names are excluded from search performed by -m[m] option.
i) Empty removeable units will generate an "Abort, Retry, Fail ?" error.
j) With LFN support, ?:\TREEINFO.LFN is created in addition to ?:\TREEINFO.DAT.
k) Up to 50 directory patterns (M2 jokers supported) can be ignored
   if they are specified in C.INI located in executable directory :
   this feature may fix many random crashes under WinXP with deep tree depth.
   Note patterns should be defined for both DOS and LFNs formats !



(* // ---------- "cal.doc" ---------- // *)


Q&D Calendar v1.1h by Philippe Guiochon

Syntax 1 : CAL [option]...
Syntax 2 : CAL <year|*|+[+]|-[-]> [option]...
Syntax 3 : CAL <month> <year|*> [option]...

This program prints a monthly or yearly calendar.

  -r      ignore existing CAL.INI (forced by yearly calendar)
  -a      alternate events display (forced by -j[j] and -n)
  -![!]   create default CAL.INI in current directory then terminate
  -e      list all events in CAL.INI then terminate (-u[k|s] ignored)
  -y|-xx  alternate fix to year when parsing an event date
  -s      assume first day of week is Sunday (default is Monday)
  -u[k|s] English texts (default is French texts)
  -x|-p   special calendar
  -j[j]   show last four digits of Julian Day (-jj = show full JD in header)
  -n      show day in year (base is January 1st)
  -t:??   left and right markers to highlight today in monthly calendar
          (default is "><")
  -q      do not highlight today
  -i?:#   ink [0..15] (im=main, it=title, id=days, ic=current day, ij=julian)
  -p?:#   paper [0..15] (pm=main, pt=title, pd=days, pc=current day, pj=julian)
  -b      monochrome BIOS output (no colors)

a) Month is [1..12], full month name or first three letters of month.
b) Calendar is assumed julian for dates before October 15, 1582 :
   note this was not true in the whole Western world
   (a few countries did not adopt gregorian calendar until September, 1752 !).
c) Yearly calendars with any of -n or -j[j] options should be redirected.
d) Julian Day begins at 12:00:00.
e) "*" parameter stands for current year,
   "+[+]" for next month and "-[-]" for previous month.
f) Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
   Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.
g) Ink and paper may also be specified using the following tokens :
   black,darkblue,darkgreen,darkcyan,darkred,darkmagenta,brown,gray,
   darkgray,blue,green,cyan,red,magenta,yellow,white.
h) CAL.INI events file is searched for first in current directory,
   then in executable directory : it may contain up to 400 events.
i) Default monthly calendar may not display all events (side by side view) :
   if final event line is "...", -a option is recommended
   (this option is also useful if any event ends with "+++").
j) -e option will list events using language format defined in CAL.INI.
k) When parsing an event date, program defaults to the following rule :
   it will add 2000 to year [0..79] and 1900 to year [80..99].
   Should -y option be specified, it will add 1900 to year [0..99].
l) -![!] and -e options ignore any other option or parameter.
m) CAL.INI was found in executable directory.



(* // ---------- "cap2tga.doc" ---------- // *)


Q&D text mode to graphics mode v1.0 by Philippe Guiochon

Syntax : CAP2TGA <source[.TXT]> [option]...

   -nocrop     do not automatically crop screen height
   -overwrite  overwrite existing target
   -ascii      create .ASC text file instead of .TGA graphics file
   -exact      do not right-trim lines (-ascii only)
   -fix        increase character height by one
   -$          font name
   -debug<1|2> debug display

a) This program converts .TXT files created with TEXTCAP 2.0
   (a text screen capture DOS program written by a Gisbert W. Selke in 1991).
   Only 25 or 50 lines of 80 characters screens are supported for now.
b) Default font is 50-lines Apple ][ font. Others choices may be :
   apple, compaq, sys, sysline, sysgl, win9x (50-lines) ;
   vga, readable, plain, ibm, muchery, mucherylarge, arial, legible (25-lines).
c) In order NOT to create target (<source> with .TGA extension), hit ESC key.
d) LFNs are not supported.



(* // ---------- "ccount.doc" ---------- // *)


Q&D Character Counter v1.1a by Philippe Guiochon

Syntax 1 : CCOUNT <file(s)> [option]...
Syntax 2 : CCOUNT <file(s)> <-v> [-s|-r]
Syntax 3 : CCOUNT <file(s)> <-vv|-xy>
Syntax 4 : CCOUNT <file(s)> <-entropy> [-e<bctlur>] [-dos]

This program counts bytes (syntax 1), shows bytes distribution (syntax 3),
tries and shows visually randomness (syntax 3),
or computes entropy statistics emulating John Walker's ENT utility (syntax 4).

-a     show data for all bytes (no restriction to only bytes appearing in file)
-p     add percentage to byte count
-c     compute percentages excluding control characters ([00..31]) from total
-i[i]  ignore case (-ii = ignore case and accents)
-s     sort from higher to lower byte count
-r     sort from lower to higher byte count
-x     prefix each character with its hexadecimal value
-d     prefix each character with its decimal value
-t     terse report (without header)
-g[g]  show global cumulative data (-gg = global only)
-b[b]  show bar graph (-bb = no semigraphics)
-w:#   bar graph width (default is 25 characters)
-e     eye candy
-v     graphical distribution view
-vv    randomness view (-xy = -vv)
-ee    ENT utility emulation mode
-eb    consider input as a stream of bits instead of 8-bits bytes
-ec    show table of occurrences
-et    show table in CSV format
-el    force lowercase (accents are kept)
-eu    force uppercase (accents are lost)
-er    ENT utility original report format
-dos   ENT for DOS Chi square code (default is ENT for Win32 code)
-l[fn] disable LFN support even if available
-??[?] (even) more help (-??? = about ENT utility emulation mode)

a) This program will handle up to 250 files.
b) -i[i] option assumes DOS character set.
c) Syntax 2 requires a VGA card allowing 320x200x4 standard video mode ;
   it is roughly similar to "-a -p -x -d -gg -b" syntax 1 display ;
   any option other than -<s|r|e> is silently ignored.
   Note -t -g -gg -a options are forced while -c option is ignored.
   While viewing, Tab key toggles display mode (real or proportional),
   and "*" key changes sort mode (none, ascending, descending).
d) Syntax 3 requires a VGA card allowing 640x480x4 standard video mode ;
   it parses file as a stream of X,Y coordinates ranging each from 0 to 255.
   File length should be even for obvious reasons
   (x without an y final pair is discarded). Note any option is ignored.
   When display is done, Tab key toggles undefined dots highlighting.
e) Syntax 4 tries and emulates public domain ENT by John Walker :
   This program uses ENT for Win32 Chi square code by Gary Perlman,
   unless -dos option is specified to use older ENT for DOS Chi square code :
   values may be very different. Note -dos option is not recommended.
   -el and -eu options assume DOS character set. ENT -f option is unsupported.
   Alternate options : -entropy, -bits, -table, -csv, -lower, -upper, -report.
   Contrarily to ENT utility, this program will not crash nor show nonsense
   when computing PI using Monte Carlo method if file length is smaller than 6.

Examples : CCOUNT *.t -a
           CCOUNT e:\fun\fortune\*.txt -v -ii
           CCOUNT entitle.gif -entropy -report

Here are a few notes about ENT emulation mode
adapted from its original documentation as found in fourmilab.ch Web site.
Of course, should any error happen in these notes,
ENT's original author, John Walker, cannot be held responsible for it or them !

1) Entropy is the information density of the contents of the file,
   expressed as a number of bits per character.
2) The chi-square test is the most commonly used test
   for the randomness of data, and is extremely sensitive to errors
   in pseudorandom sequence generators.
   The chi-square distribution is calculated for the stream of bytes
   in the file and expressed as an absolute number and a percentage
   which indicates how frequently a truly random sequence would exceed
   the value calculated. One may interpret the percentage as the degree
   to which the sequence tested is suspected of being non-random.
   If the percentage is greater than 99% or less than 1%,
   the sequence is almost certainly not random.
   If the percentage is between 99% and 95% or between 1% and 5%,
   the sequence is suspect. Percentages between 90% and 95% and 5% and 10%
   indicate the sequence is "almost suspect".
3) The arithmetic mean is simply the result of summing all the bytes or bits
   in the file and dividing by the file length.
   If the data are close to random, this should be about 127.5 (0.5 for bits).
   If the mean departs from this value,
   the values are consistently high or low.
4) Monte Carlo value for Pi assumes file is at least 6 bytes long.
   Each successive sequence of six bytes is used
   as 24 bit X and Y co-ordinates within a square.
   If the distance of the randomly-generated point is less
   than the radius of a circle inscribed within the square,
   the six-byte sequence is considered a "hit".
   The percentage of hits can be used to calculate the value of Pi.
   For very large streams (this approximation converges very slowly),
   the value will approach the correct value of Pi
   if the sequence is close to random.
5) Serial correlation coefficient is a quantity
   which measures the extent to which each byte in the file
   depends upon the previous byte. For random sequences,
   this value (which can be positive or negative) will be close to zero.
   A non-random byte stream will yield a serial correlation coefficient
   on the order of 0.5.
   Wildly predictable data will exhibit serial correlation coefficients
   approaching 1.



(* // ---------- "cdcmd.doc" ---------- // *)


Q&D CDROM Command v1.0b by Philippe Guiochon

Syntax 1 : CDCMD <-o|-e|-c|-r|-l|-u|-s> [u[u]...:]...|*]
Syntax 2 : CDCMD <-i>

Allowed operations : open, eject, close, reset, lock, unlock, status, infos.

Default unit is first CDROM unit ; -x option forces support of first CDROM unit
calling $214403 function (by handle) instead of more powerful $2F1510 function.



(* // ---------- "CELLS.doc" ---------- // *)


Q&D Cells demo v1.0 by Philippe Guiochon

Syntax : CELLS [option]...

  -f:#  number of cells ([1..1400], default is 200)
  -a    show palette until keypress or 10 seconds
  -z    end on mouseclick too
  -p:#  color palette (0..8, default is 0)
  -d:#  number of waits for vertical retrace ([0..20], default is 0)
  -s    small dots

  Here are the keys to interact with program while it is running :
  [Ss]-toggle small dots  [Home|End]-speed
  [rRGB1230!]-palette  [Space]-pause  [Escape|Enter]-exit



(* // ---------- "change.doc" ---------- // *)


Q&D Money Converter v1.0i by Philippe Guiochon

Syntax : CHANGE <[marker]amount[marker]>... [option]...

    -l|-p    one line presentation
    -a       US decimal format (default is French decimal format)
    -s|-t    show grand total
    -n       keep CRLFs to a minimum
    -c|-w|-y copy output to Vindoze clipboard if available
             (-cc = -ww = -c -l ; -ccc = -www = -c -l -n)
    -f:$     user-specified external file for conversion parameters
    -!       create default CHANGE.INI in current directory then terminate

a) Decimal separator is either a comma or a dot.
b) Optional CHANGE.INI may be created using "-!" option.
   It is first searched for in current directory then in executable directory.
   Here is expected format :

       value of occupation currency expressed in local currency (decimal)
       digits after decimal separator (decimal)
       verbatim occupation currency marker (up to 16 character)
       verbatim local currency marker (up to 16 characters)
       plain text for occupation currency (singular)
       plain text for occupation currency (plural)
       plain text for local currency (singular)
       plain text for local currency (plural)

   Lines beginning with ";" or "#" are ignored. Empty lines are ignored too.
c) John Walker is right about EU (as he is about many other subjects) :
   it *is* Yet Another Evil Empire.



(* // ---------- "chargen.doc" ---------- // *)


Q&D Set VGA Character Generator v1.0a by Philippe Guiochon

Syntax : CHARGEN [-c] [-v] < 25 | 28 | 43 | 50 | 8x16 | 8x14 | 8x8 >



(* // ---------- "chkcols.doc" ---------- // *)


Q&D Check Columns v1.0 by Philippe Guiochon

Syntax : CHKCOLS [-v] <number of columns>...

Return code is 128 if row count is any of specified values, and 255 if not.



(* // ---------- "chkcr.doc" ---------- // *)


Q&D Check Columns and Rows v1.0 by Philippe Guiochon

Syntax : CHKCR [-v] <number of columns> <number of rows>

Return code is 128 if screen dimensions match specified values, and 255 if not.



(* // ---------- "CHKFREAD.doc" ---------- // *)


Q&D Check File Readability v1.0c by Philippe Guiochon

Syntax : CHKFREAD <list[.LST]> [option]...

This program verifies each file entry in <list> is readable.
Possible usefulness should be self-explanatory.

    -r  resume from last file entry read
    -v  verbose mode (do not report only failures but successes too)
    -u  display file entries in uppercase
    -w  display file entries in lowercase
    -q  do not show list completion percentage
    -x  disable LFN support even if available

a) Each file entry in <list> is expected to be an ASCII DOS valid one.
   Jokers are not supported.
b) <list> should be filtered for entries locked by operating system.
c) A critical error handler TSR might be useful.
d) Should program be aborted with ESCape key,
   a resume file with ".RSM" extension will be created in current directory
   so program can resume from last file entry read thanks to -r option.
e) Note even with -r option, elapsed time applies to current program run only.



(* // ---------- "CHKFSIZE.doc" ---------- // *)


Q&D Check Filesize 1.0b by Philippe Guiochon

Syntax : CHKFSIZE <spec1> <condition> <spec2> [option]...

This program checks <spec1> filesize against <spec2> filesize.

    -p:# increase <spec1> filesize by # percent
    -d:# add # value to <spec1> filesize
    -l   show filename if condition is matched
    -v   verbose (show all data)
    -q   quiet (show nothing)
    -x   disable LFN support even if available

a) <condition> is any of the following forms :

       - SMALLER
       - SMALLERORSAME
       - BIGGER
       - BIGGERORSAME
       - SAME

b) With any of -p:# or -d:# options, # cannot be 0.
c) Program returns 255 if <condition> is true, 128 if <condition> is false.
   Note all other codes are below 128.



(* // ---------- "chkio.doc" ---------- // *)


Q&D CheckIOPorts v1.3c by Philippe Guiochon

Syntax: CHKIO <option>... [ > file ]

Here are available options (without '-' or '/' characters) :

- <port> [count] checks 'count' I/O ports starting from 'port'
  'port' belongs to the [$0000..$03FF] range, 'count' default value is 16
  Values are given in decimal, unless they begin with a '$' for hexadecimal
- FREE shows the most probably unused I/O ports in the [$0200..$03FF] range
- USED shows the most probably used I/O ports in the [$0200..$03FF] range
- MAP shows a map of I/O ports in the [$0200..$03FF] range
- SAMPLE <ticks> <port> [count] install program as a TSR
  'ticks' is the sampling frequency (one tick is 1/18.2s)
  Note about 400Kb EMS memory is required for TSR mode.
- RESET reinitializes results got from TSR
- REPORT dumps current results to CHKIO.RPT file
  Previous file of same name is kept as CHKIO.BAK
- STATUS shows current TSR status
- UNLOAD tries and unloads program from memory

For SAFETY, FREE and USED commands do NOT test hard disk and floppy I/O ports.
Program can *try* 4 methods to check whether I/O ports are used or not.
To specify survey method, enter M0, M1, M2 or M3 as the *first* parameter.
Default is M0. Beware: once program is TSR, you CANNOT change survey method!



(* // ---------- "chkiomap.doc" ---------- // *)


Q&D CheckIOPorts Map Generator v1.0 by Philippe Guiochon

Syntax : CHKIOMAP <redirected report> [ > report ]



(* // ---------- "chkports.doc" ---------- // *)


Q&D Check I/O Ports v1.1 by Philippe Guiochon

Syntax : CHKPORTS <[$]port [[$]count]]|-free|-used|-map> [option]...

This program checks whether a port address ([$0000..$03ff]) is free or not.
Even though valid range for post scanning is [$0000..$03ff],
note [$0000..$01FF] range should be avoided (or tested with extreme caution).
Note, too, that port reading MAY hang computer : BEWARE and BE CAUTIOUS !

  -free    show possibly free ports map in the [$0200..$03ff] range
  -used    show possibly used ports map in the [$0200..$03ff] range
  -map     show merged -free and -used maps
  -m#      scan method (defaut is 1)
           1 = word @ port                -- free if value is $ffff
           2 = word @ port, word @ port   -- free if values are different
           3 = byte @ port, byte @ port   -- free if values are $ff
           4 = byte @ port, byte @ port   -- free if values are different
           5 = byte @ port, byte @ port+1 -- free is values are $ff
           6 = byte @ port, byte @ port+1 -- free if values are different
  -w#      map display width ({1,2,4}, default is 4)
  -c:$     map character set (untested,free,used,skipped), default is "_.#!"
  -unsafe  allow program to scan dangerous ports :
           -- [$0320..$032f] (hard disk controller)
           -- [$03f0..$03f7] (floppy disk controller)
           WARNING ! DATA LOSS MAY HAPPEN IF THESE PORTS ARE SCANNED !

Examples : CHKPORTS $220 16
           CHKPORTS -free -w2



(* // ---------- "chkrows.doc" ---------- // *)


Q&D Check Rows v1.0 by Philippe Guiochon

Syntax : CHKROWS [-v] <number of rows>...

Return code is 128 if row count is any of specified values, and 255 if not.



(* // ---------- "chkstamp.doc" ---------- // *)


Q&D Check Date and Time stamp 1.0b by Philippe Guiochon

Syntax : CHKSTAMP <spec1> <condition> <spec2> [option]...

This program checks <spec1> stamp against <spec2> stamp.

    -l show filename if condition is matched
    -v verbose (show all data)
    -q quiet (show nothing)
    -x disable LFN support even if available

a) <condition> is any of the following forms :

       - OLDER
       - OLDERORSAME
       - NEWER
       - NEWERORSAME
       - SAME

b) Program returns 255 if <condition> is true, 128 if <condition> is false.
   Note all other codes are below 128.



(* // ---------- "chrono.doc" ---------- // *)


Q&D Chrono v1.0c by Philippe Guiochon

Syntax : CHRONO <command> [parameter]...

a) Note only DOS format (8+3) filenames are supported.
b) <command> is first run as an external command, then as an internal one.
c) Program returns <command> error code.



(* // ---------- "CHRYZO.doc" ---------- // *)


Q&D Chryzo v0.9 par Philippe Guiochon

Syntaxe : CHRYZO [angle [points_sur_circonférence [multiplicateur [délai]]]]

Angle          : 270 par défaut, (0=e, 90=s, 180=ouest, 270=n)
Points         : 6 par défaut, [1..360]
Multiplicateur : 3 par défaut, [1..100]
Délai          : 0 par défaut, [0..50]



(* // ---------- "columns.doc" ---------- // *)


Q&D Columns Processor v1.1 by Philippe Guiochon

Syntax : COLUMNS <command> <first> <last|*> <source> [target] [option]...

This program deletes or keeps text from <first> column to <last> column,
or it adds values found in specified column range after triming.

  -d[t]   delete (-dt = -d -t)
  -k|e[t] keep (-kt = -k -t = -et = -e -t)
  -a      add decimal LONGCARD values
  -ai     add decimal LONGINT values
  -af[f]  add decimal LONGREAL values (-aff = -af -us)
  -s[g]   show each subtotal when <first..last> is empty (-sg = -s -g)
  -z[g]   show each subtotal when out of <first..last> changes (-zg = -z -g)
  -i      insert subtotals in <source> dumped to standard output
  -g      show grand total
  -c      see <last> value as a count, not as an absolute position (default)
  -t:#    tabulation width ([1..64], default is 8)
  -r      do not expand tab into spaces, interpreting it as a raw single space
  -t      test mode (dump result to screen without changing file)
  -o      overwrite existing <target>
  -v      verbose (slower)
  -us     when adding, delimit fractional part with "." (default is ",")
  -f[f]   when adding, format total (-ff = -f -us)
  -l      disable LFN support even if available

a) Maximum line length is 4096 characters.
b) In command line, "*" marker stands for End of line.
c) Without [target] specification, a .BK! backup will be created.
d) Note program defaults to tab expansion, unless -r is specified.
e) When adding, each substring is filtered to [0..9+-,.] character set.
f) With -a and -ai, any character from [ ,.] set is a valid cosmetic separator.
g) .BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH files will be ignored.
h) Program will handle up to 250 files.
i) Warning : when adding, invalid data will lead to weird and wrong results !
   With -af, double check decimal separators and cosmetic separators !



(* // ---------- "concat.doc" ---------- // *)


Q&D Concatenate files v1.0t by Philippe Guiochon

Syntax 1 : CONCAT <mainfile> <file>... [option]...
Syntax 2 : CONCAT <mainfile> <file_specification> [option]...

This program appends specified file(s) to <mainfile>.

  -l[l]   separate individual files with "//" (-ll = M2 form)
  -f[f]   separate individual files with "//"+filename (-ff = M2 form)
  -n      do not add CR+LF separator after each concatenated file
  -k      do not create backup for existing <mainfile>
  -s      do not update existing <mainfile> date/time stamp
  -d      delete <file>... when copy is done
  -o      ignore read-only status
  -c      create a new <mainfile> instead of appending data to existing one
  -z      do not filter out Ctrl-Z (ASCII code 26 = $1A) from files
  -b      binary mode (forced : -n and -z ; ignored : -l[l], -f[f] and -k)
  -m      ignore missing file(s)
  -a      sort filenames alphabetically before processing
  -y      sort filenames chronologically before processing
  -z:[$]# process only files # bytes long ("$" prefix for hexadecimal)
  -p|-t   preview matching files processing order (no action taken)
  -x      disable LFN support even if available

a) Unless -b option was specified, these extensions will not be processed :
   .BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH
b) When filtering out Ctrl-Z, <mainfile> will lose its trailing Ctrl-Z only.
c) -a option ignores both case and accentuation.
d) Syntax 1 does not support jokers, while syntax 2 does.
e) Syntax 2 will process files in directory order (unless -a was specified) ;
   it will not process more than 200 matching files.
f) Note program does not check for collisions between target and source files.

Examples : CONCAT -f -s -m all one.txt two.txt three.txt
           CONCAT -a all.txt *.asc
           CONCAT -b -d all.bin *.tex -z:295360



(* // ---------- "crlf.doc" ---------- // *)


Q&D CRLF v1.1n by Philippe Guiochon

Syntax : CRLF <file(s)> [option]...

This program performs various operations related to CR ($0d) and LF ($0a).

  -n     replace single character end-of-line (CR or LF) with CRLF (default)
  -r     remove CRLFCRLF sequences
  -p     pack all CRLF sequences
  -pp    leave only first CRLFCRLF sequence
  -l     filter out each empty line
  -ll    same as -l but leaving first CRLFCRLF sequence (first empty line)
  -w     replace CRCRLF sequences with CRLF
  -ww    replace CRCRLF sequences with CRLFCRLF
  -a[!]  append CRLF at end of file if sequence does not exist
  -aa[!] change existing single CRLF at end of file to CRLFCRLF
  -aaa   apply -a option then -aa option
  -z[!]  remove trailing Ctrl-Z ($1a)
  -zz    replace trailing Ctrl-Z ($1a) with CRLF
  -!     list files requiring a change (-a[a] and -z only)
  -q     quiet mode (forced with -a[a[a]])
  -x     disable LFN support even if available

a) .BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH files will be ignored.
b) For user safety, each original file is kept with .BK! extension.
   However, note -a[a[a]] and -z[z] options do not create any backup.
c) -l[l] assumes each line is not longer than 4096 characters.
d) CRCRLF sequences are often found in HTML files.



(* // ---------- "cs.doc" ---------- // *)


Q&D CheckSum v1.3t by Philippe Guiochon

Syntax 1 : CS <file(s)> <-c|-m|-$|-z|-s> [-l-n-g-t[-x[x]|-e|-j]-u-q-w]
Syntax 2 : CS <log[.LOG]> <-v[cm$zs]> [-p-u-q-w-b]
Syntax 3 : CS <log1[.LOG]> <log2[.LOG]> <-k[cm$zsd]> [-d-y-i-u-q-w]
Syntax 4 : CS <log[.LOG]> <-r[r]> [-p-u-q-w]

This program computes checksums (syntax 1), verifies checksums (syntax 2),
compares two logs (syntax 3), or rebuilds data for each log entry (syntax 4).

-c    compute CRC 32 checksums (default)
-m|-$ compute MD5 or SHA-1 message digests (-d forced with syntax 3)
-z    quick unsafe mode (for each file, only filesize is tracked)
-s    do not process files but subdirectories (-x forced and -n ignored)
-v[?] verify log previously created with redirected ouput (128=FNF, 129=#)
-k[?] compare two logs, assuming oldest is reference (-kd = -k -d)
-r[r] rebuild data from log (method header assumed, -rr keeps no backup)
-!    ignore filesize check for MD5 or SHA methods
-b    store relative paths (default is to store canonical paths)
-l    disable LFN support even if available
-n    do not include subdirectories (default is to include subdirectories)
-d    store indexes on disk instead of RAM
      (slower but allowing more than 10000 entries, forced with -k[m$] -m|-$)
-g    exclude method header (default is to include method header)
-t    use tab as a separator
-x[x] ignore entries listed in CS.INI, if any (-xx = -x but still ignoring
      "*\386spart.par", "*\win386.swp", "*\pagefile.sys")
-e    reverse search order for CS.INI
-j    force select mode for CS.INI entries (default is exclude mode)
-u    paths in uppercase (default is lowercase)
-p    ignore path in log entries (ignored if log was created with -s)
-y    use "Deleted   ! ", "Added     ! " and "Modified  ! " long prefixes
      (default is "-- ", "++ " and "## " short prefixes)
-i    add final report
-q    quiet redirected mode (no eyecandy)
-w    audio warning

a) Headerless logs can be processed using -<v|k><cm$z> option variants.
b) CS.INI may contain up to 100 entries (syntax 1 only)
   specifying files to be excluded (default) or selected (with -j option) :
   it is first searched for in current directory, then in executable directory.
c) With syntax 1, output, if redirected, should not belong to scanned domain.
d) Syntax 3 cannot process more than 10000 entries in a valid log, unless
   -d option is specified to create temporary files in directory specified by,
   in that order, TMP, TEMP, TMPDIR, TEMPDIR environment variables
   (if none of these variables is defined, current directory will be used).
e) Program returns 255 if Escape key was used to abort syntax 1 or syntax 2 ;
   but for log integrity, Escape key is disabled if output is redirected.
f) Whatever the operation, lines beginning with ";" will be ignored.
g) Even if LFN support is available, log(s) must be specified in DOS format.



(* // ---------- "curves.doc" ---------- // *)


Q&D Curves 320x400x256 v1.0f by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax : CURVES [option]...

-c:# number of control points ([2..100], default=20)
-s:# number of segments ([2..50], default=10)
-t:# number of trails ([1..50], default=20)
-m:# color mode (0=fixed, 1=random, 2..7=fading, default=2)
-p:# RGB paper color (default=$000000)
-i:# RGB ink color (default=$FFFF00 if m[0,2], else random)
-f:# RGB ink to fade to color (default=$AF0000 if m[0,2], else random)
-l:# lower speed ([1..50], default=5)
-u:# upper speed ([1..50], default=10)
-w:# wait ([0..50], default=0)
-x   if m[3..6], use 16 colors palette for brightest (default=256 colors)
-a   if m[3..6], use all 16 or 256 colors for brightest (default=bright only)
-d:# if m[3..6], divisor shift for dimmest ([1..4], default=1)
-r:# if m[3..6], number of rounds before color change (0=none, default=40)
-n:# if m[4..6], increment for color RGB component fade ([1..15], default=2)
-q:# if m[4..6], probability of change for n if it is 0 ([0..100], default=50)
-o:# if m[4..6], probability of motion reverse if is # 0 ([0..100], default=20)
-k:# if m[4..6], average dimmest RGB color component ([$00..$3F], default=$10)
-z   abort not only on keypress but on mouseclick too

"+" and "-" keys increment/decrement the number of trails,
"F2" and "F1" keys increment/decrement the number of control points,
"F4" and "F3" keys increment/decrement the lower speed,
"F6" and "F5" keys increment/decrement the upper speed.
Each color component SHOULD be in the [$00..$3F] range.
Not too ugly results for m=3..6 require some tweaking of options. ;-)



(* // ---------- "daymonth.doc" ---------- // *)


Q&D Day Month v1.1l by Philippe Guiochon

Syntax 1 : DAYMONTH <*|date> [option]...
Syntax 2 : DAYMONTH <-z[z]:$> [-x]

This program displays any birthday or event which occurred on specified date.
The data files should be considered public domain, for they were gathered from
many contradictory and unchecked sources, filled with duplicates and errors.

-k      paging (ignored if output redirected)
-w[w]   wait for final keypress (ignored if output redirected, -ww = -k -w)
-n      add a newline (CR+LF) in order to beautify display (useful with PEXEC)
-ni:#   normal ink [0..15] -- default is cyan
-np:#   normal paper [0..15] -- default is black
-hi:#   hilighted ink [0..15] -- default is yellow
-hp:#   hilighted paper [0..15] -- default is black
-b      monochrome BIOS output (no colors)
-fr     display date and program texts in French
-s      sort output by year
-nb     ignore birthdays
-nd     ignore deaths
-ne     ignore events
-a      use all entries found (including "b", "d" and "s" prefixes)
-e      personal data only (DAYM_EGO required)
-p[p]   pagan calendar (DAYM_CAL required, -k ignored)
-m[m]   saints calendar (DAYM_KTO required, -fr forced unless -mm)
-d:$    alternate daily calendar (default extension is ".DM")
-z[z]:$ show date matching specified string, then terminate (DAYM_KTO required)
-l      add Latin date (-p option only, -pp = -p -l)
-x      use extra huge ".DMX" files instead of normal ".DM" files
-f:#    frame type (0=none, 1=single, 2=double, 3=raw), default is 2
-w:#    set line width, default is screen width
-??     verbose help, including data file format

a) Date may be specified as "*" for today (system date), or
   as "day-month", "day/month" or "day month", the month being either a number
   in the [1..12] range or the first three letters of its name.
b) All "*.DM" and/or "*.DMX" files must be located in DAYMONTH.EXE directory :
   DAYM_<???|##> for the 12 months, DAYM_EGO for personal data (optional), and
   DAYM_CAL for pagan data (optional). LFNs are not supported.
c) Options irrelevant to selected display will be ignored.
d) Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
   Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.
e) These options were added for Martine : -m[m] (hence the name !) and -z[z]:$.
   This is why their display defaults to French for her (-m[m]x = -m[m] -x).
f) -z[z]:$ option ignores any option except -x option (-z[z]x:$ = -z[z]:$ -x).
   Only letters and M2 jokers ("?"=any single char, "*"=sequence) are checked.
g) With a DOS such as DR-DOS 6.0 or Novell DOS 7.0, DAYMONTH can be called
   after each external command by setting SET PEXEC=path\DAYMONTH.EXE * -n
   and PROMPT $x$p$g

(* DAYM_??? and DAYM_EGO file format *)

Lines beginning with ";" are treated as remarks and ignored.
Date format is specified using either "*ddmmyyyy" or "*mmddyyyy".
First character is a code : "B" (birth), "S" (event) or "D" (death).
-a option forces lines beginning with a lower case code to be displayed.

    Example :

    *mmddyyyy
    S1231     Last day of the year
    *ddmmyyyy
    B19 31928 Patrick McGoohan, acteur

(* DAYM_CAL and -d:$ file format *)

Lines beginning with ";" are treated as remarks and ignored.
Each line is in "ddmm:text" format (ddmm must be unique).
If dd < 10, a leading "0" is required. "\n" stands for a newline.

    Example :

    0101:Kalends of January, New Year's Day\n\nNew year's day.

(* DAYM_KTO file format *)

Lines beginning with ";" are treated as remarks and ignored.
Each line is in "ddmm:<nom>[<,|;> nom]..." format (ddmm must be unique).
If dd < 10, a leading "0" is required. "\n" stands for a newline.
Each "nom" may have a prefix or a suffix for these special cases :
"!" stands for a female saint, "@" for an event,
"=" for an epicene name, $" for a celebrated first name.

    Examples :

    0101 : @Jour de l'An
    2607 : Anne*=, Joachim
    2903 : Gwladys*, Gladys$



(* // ---------- "dclock.doc" ---------- // *)


Q&D dClock v1.1g by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax : DCLOCK [option]...

  -v:#     video mode (0=320x240, 1=VESA 640x480, 2=VESA 800x600, default is 0)
  -m       terminate program on mouseclick too (if mouse present)
  -x       force use of default sprites, ignoring DCLOCK.DAT if any
  -i:#     infos mode (0=none, 1=time, 2=date, 3=time and date)
  -t:#     time format (0=##:##:##, 1=##h ##mn ##s)
  -d:#     date format (0=longFR, 1=shortFR, 2=longUS, 3=shortUS, 4=#FR, 5=#US)
  -r       reverse display (HMS from outer to inner instead of standard SMH)
  -p:#     palette ([0..4])
  -p       disable palette rotation at one minute interval
  -c       use alternate marks for seconds
  -a       audio tick
  -t       show hour transition according to minutes (ignored with -m:2)
  -e       show each second mark
  -c:#     mode for circles (0=all but outer and inner, 1=all, 2=none)
  -z       do not show marks for seconds
  -s:#     mode for seconds (0=single dot, 1=dots, 2=trail)
  -m:#     mode for hours and minutes (0=single dot, 1=dots, 2=trail)
  -a:#     mode for hours, minutes and seconds (0=single dot, 1=dots, 2=trail)
  -k:#     background paper color ([0..15], default is 0)
  -f       no page flipping (mode X only)
  -w       do not wait for video retrace
  -dots    shortcut for -s:1 -m:1
  -trails  shortcut for -s:2 -m:2
  -trailz  shortcut for -s:2 -m:2 with added trails
           (day in month, month in year, day in year)
  -y[y[y]] shortcut for -dots, -trails, -trailz
  -$[$]    shortcut for -yy[y] -i:3 -c:2 -e -p:2 -v:1
  -!       create default DCLOCK.DAT in current directory then terminate

DCLOCK.DAT may contain replacement sprites :
it is searched for in current directory first, then in executable directory.
While program is running : TAB = next palette, L = toggle legend.



(* // ---------- "dcomp.doc" ---------- // *)


Q&D Directories Compare v1.0p by Philippe Guiochon

Syntax : DCOMP <directory1> <directory2> [option]...

This program compares two directories filenames.

-c[c] list filenames common to both directories
      (-cc = add DEL prefix and format display for batch)
-u    list filenames unique in each directory
-l[l] list filenames from <dir1> without match in <dir2>
      for later use by Novell DOS or DR-DOS XCOPY or MOVE commands
      (-ll = list filenames without directory prefix)
-z    match using filesizes too (default is to match using filenames only)
-z:#  -z with # percent tolerance relative to <directory1> files
-n[n] list <dir1> files newer than <dir2> files (-c forced, -nn = -n -b)
-b[b] list <dir1> files bigger than <dir2> files (-c forced, -bb = -b -n)
-p:#  increase filesize of <directory1> files by # percent (-b required)
-d:#  add # value to filesize of <directory1> (-b required)
-i    inverse match result
-a    alternate filename display (DOS only)
-w:#  padding formatting value
-v    verbose listing
-p    prefix filenames with directory
-x    disable LFN support even if available

a) Default options : -c -u.
b) -p:# and -d:# options require -b option, and # cannot be 0.
c) -b:# option is a shortcut for "-b -p:#" options.
d) -i option does require caution !

Examples : DCOMP c:\bat f:\backup\bat /u
           DCOMP c:\z\newbat c:\bat /c /n /b
           DCOMP c:\z\converted c:\z\original /b /p:10



(* // ---------- "dd.doc" ---------- // *)


Q&D xDir xDel xDeltree v1.2c by Philippe Guiochon

Syntax 1 : DD [[-d]|<-f>] <filespec>... [option]...
Syntax 2 : DD <-k|-z[z]> <filespec>... [option]...
Syntax 3 : DD <-@> <[@]filelist[.LST]> [option]...

-d[?][?]  list entries (default, -dd = -d -m:D!, -ddd = -dds = -d -m:D! -s)
-f[f]     list matching files (-s -c forced, <[u:]filename> format required)
-k[y]     delete files (-ky = -k -y)
-z[e][y]  delete files then remove empty subdirectories except <filespec> root
-zz[e][y] same as -z but removing <filespec> root (note any "." forces -z)
-e        do not delete files, just remove empty subdirectories (-z[z] only)
-@        assume parameter is a list of files to be deleted (-k forced)
-s        recurse subdirectories (forced with -z[z])
-f<:$|?>  format (def="¨a$z  ¨f$a  ¨e$t  ¨c$l  ¨b$c") or predefined ([dtcmslv])
-i        inverse selection (-s not recommended, one <filespec> recommended)
-r|-o     delete read-only files
-n        do not prompt before deleting each file or directory
-y        really delete files and subdirectories (default is preview/test mode)
-t|-y-    reset preview/test mode
-c[c]     show final statistics (-cc = do not list files)
-v[v]     show parameters (-vv = show parameters and terminate)
-p[p][-]  paging (-d only, ignored if output redirected, -p- = disable paging,
          -pp[-] = -p[-] but dividing screen count of rows by 2)
-x|-a     ignore existing DD.INI (-x = protection, -a = colors)
-xp       ignore entries specified in DD.INI (-i ignored)
-swaps    do not default to swapfiles protection
          ("*\386spart.par", "*\win386.swp" and "*\pagefile.sys")
-w        warn about files without match instead of silently ignoring them (-d)
-s<?>[-]  sort listing (-sn = name, -sz = size, -sd = date, -se = extension)
-j|-u     force lower (-j) or upper (-u) case (-d only)
-&        use "," coma as number separator (default is "." dot)
-g[g]     directory header (-gg = display even without any <filespec>... match)
-d:$      filter according to specified "lower[:|..]upper" date range
          ("*"=today, "$"=same date, "[*]:$"=before or on, "$:[*]"=on or after)
-z:$      filter according to specified "lower[-|:|..]upper" size range
          ("#"=same, "[*]:#"=smaller or equal, "#:[*]"=greater or equal)
-m:$      filter according to specified attributes (<DRHSA>[-|+|?|!|x]...)
-a<?>[?]  set individual attribute filter (<DRHSA>[-|+|?|!|x])
-b        monochrome BIOS output (no color)
-xdir[s]  shortcut for -d -c -m:D! [-s]
-xdel[s]  shortcut for -k -n -r -c [-s]
-deltree  shortcut for -z -n -r -c
-!        filter files using operating system jokers (see infra)
-q        force LFN enclosing with double quotes for $d, $b, $n, $e, $f, $y
-$        disable ESCape polling (may be necessary with Win9X/WinXP)
-l        disable LFN support even if available
-m        do not beep on unexpected choice
-mem      ignore any Storage.ALLOCATE() error (unwise !)
-??[?[?]] (even) more (and more) help (to be read at least once !)

a) When in preview mode, each operation has ";-) " prefix as a reminder.
b) -y option can be set as default with DD=Y environment variable ;
   preview mode can still be reset from command line with -t or -y- options.
c) Without -! option, "?" and "*" jokers do NOT work the DOS or Win9X way :
   "?" matches exactly one character, "*" matches any sequence of characters.
d) Note joker matching includes extension if extension is omitted.
e) Jokers are not allowed in directory part of <filespec>, nor in a list.
f) Up to 64 entries (M2 jokers supported) may be protected against deletion,
   if they are specified in DD.INI file located in executable directory.
   If such a file does not exist, these entries are protected by default :
   "*\386spart.par", "*\win386.swp" and "*\pagefile.sys".
   Note protection is supported by -k and -z[z] options ONLY :
   files deleted from a list (-@ option) are NOT protected by this feature.
g) Up to 16 entries (M2 jokers supported) may be ignored
   if they are specified in DD.INI file located in executable directory.
   This option may be necessary with WinXP.
h) Up to 64 extension colors may be user-defined in DD.INI file
   located in executable directory. Format is ".extension=¨?^?".
i) String -f:$ format may be predefined using DDFMT="$" environment variable.
j) For safety, -m:$ option should be defined for each of "DRHSA" attributes.
   [-]=off, [][+]=on, [?][!][x]=on or off. -f, -k and -z[z] options force D-.
k) With -f[f] option, each "[u:]filename" <filespec> becomes "[u:]\filename",
   and ".*" is appended to any legal <filespec> without an extension (128=FNF).
l) Case-insensitive sort is global for directories but local for files.
m) Undocumented -- option forces a terser display while processing files.
n) -z:# supports multiples of 1024 (Kb, Mb, Gb) and of 1000 (K, M, G).
   Lower and upper range values will be swapped if necessary.
o) DD.INI was found in executable directory :
   protection against deletion is available for its entries (unless -x).

Tokens allowed in list mode format are :

$i|$z        raw or formatted filesize, or "<DIRECTORY>"
$a           file attributes
$t|$j|$w     file date (dd-MMM-yyyy, dd-mm-yyyy or yyyy-mm-dd)
$h|$o|$l|$v  file time (hh:mm:ss or hh:mm, hh being padded with " " or "0")
$u           unit
$d|$b        directory with or without trailing "\"
$n           file
$e           extension
$f           file.extension
$r|$g        right-aligned or left-aligned file.extension forced to DOS format
$c           shortcut for $u$d$f (enclosed with double quotes if LFN)
$x           shortcut for $u$d$f (forced to DOS format)
$y           shortcut for $u$d (files) or $u$d$f (directories)
$#           auto-incremented ##### decimal number starting from 00001
$?           auto-incremented ???? string starting from "AAAA"
$m|$s|$k     MD5/SHA-1/CRC32 (Win<92|98|XP> swapfiles automagically skipped)
($q = double quote, $_ = newline, $p = percent, $$ = dollar, $! = tabulation)

Use of $q token is highly recommended in order to avoid unexpected side effects
(only $c token automagically encloses LFN with double quotes ;
-q option is required to force this behavior for $d|$b|$n|$e|$f|$y tokens).

Color tokens allowed in list mode format are :

Sequence "¨[0..f]" changes ink, sequence "^[0..f]" changes paper.
Sequence "¨¨" resets default ink, sequence "^^" resets default paper.
Dark (0=black, 1=blue, 2=green, 3=cyan, 4=red, 5=magenta, 6=brown, 7=gray)
Bright (8=gray, 9=blue, a=green, b=cyan, c=red, d=magenta, e=yellow, f=white)

Here is an example of DD.INI file :

[ProtectedFromDelete]

; These entries will be protected against /k and /z[z] but NOT against /@.
; M2 jokers are allowed :
; "?" matches exactly one character, "*" matches any sequence of characters.
; Entries may be enclosed with double quotes if necessary.
; Swap files should always be protected against "delete" commands :
; the One and Golden Rule of Indifference should always rule.

*\386spart.par
*\win386.swp
*\pagefile.sys

?:\
c:\dos\*
"c:\windows\*"
"*\index.dat"
*\desktop.ini
"?:\program files\*"

[NotProtectedFromDelete]

; These entries will NOT be protected whatever in [ProtectedFromDelete].

c:\windows\temp\*
*.c
*.cpp

[IgnoredByDirAndDel]

; These entries will be ignored if -xp option is specified.

c:\recycled\*
*\assembly\*
?:\system volume information\*

[Colors]

; "¨" = $f9 = tréma (may look like a dot), "^" = $5e = accent circonflexe.

".exe=^1"
.com=^1
.bat=^1
.zip=¨d
.arj=¨d
.dll=^2¨a
.vxd=^2¨a



(* // ---------- "ddc.doc" ---------- // *)


Q&D Display Data Channel infos v1.0c by Philippe Guiochon

Syntax 1 : DDC <-show|-view>
Syntax 2 : DDC <-dump|-write>
Syntax 3 : DDC <-test|-check>
Syntax 4 : DDC <file> [-list]

This program displays monitor DDC data (syntax 1),
saves monitor DDC data to DDC.DDC file (syntax 2),
tests DDC support (syntax 3), or list data from a saved file (syntax 4).

a) Note most accurate results require running from real-mode DOS.
b) With syntax 3, program returns an error code :
    - 128 (DDC and EDID supported) ;
    - 192 (DDC supported but not EDID) ;
    - 255 (DDC not supported).



(* // ---------- "delb.doc" ---------- // *)


Q&D Delete but... v1.1j by Philippe Guiochon

Syntax : DELB [file specification]... [option]...

  -l[n|e] list files to be deleted (DIRBUT)
  -x[n|e] list files NOT to be deleted (DIRONLY)
  -a      take hidden and system files into account
  -u[u]   force uppercase (-u) or original case (-uu) filenames display
          (default is lower case)
  -r      delete read-only files
  -d      delete without query
  -t[t]   terse listing (-tt = list with full path)
  -xp     do not show DOS name (LFN only)
  -n      sort by name (-l or -x only)
  -e      sort by extension (-l or -x only)
  -q      do not show program activity (-l or -x only)
  -o      older prompt to delete
  -k|p    paging (-l or -x only ; ignored if output is redirected)
  -!      disable ESC polling
  -f      disable LFN support even if available

a) Illogical options will be flagged, irrelevant ones will be ignored.
b) By design, this command applies to files in current directory ONLY.
c) Unless -! option was specified, ESCape key aborts current operation.



(* // ---------- "DELIMS.doc" ---------- // *)


Q&D Delimited Text Extractor v1.0a by Philippe Guiochon

Syntax : DELIMS <file(s)> [option]...

This program extracts delimited text from a file.

    -dq      use double quotes as delimiters (default)
    -sq      use single quotes as delimiters
    -k[f|k]  use "<" and ">" as delimiters (-kf = -k -f)
    -n       show line number
    -f       filter out delimiter
    -c       do not filter control characters [$00..$1f]
    -u:??    case sensitive user-defined delimiters
    -<i|r|-> reverse filter
    -t       show filename
    -x       disable LFN support even if available

a) Program will not process files with any of these extensions :
   .COM,.EXE,.DLL,.OVR,.OVL,.DRV,.VXD,.BIN,.ZIP,.ARJ,.LZH for safety.
b) Note user-defined delimiters are case sensitive.
c) -n and -i options are mutually exclusive.
d) This program only supports these line separators :
   CRLF sequence ($0d$a), LF character ($a).

Examples : DELIMS -n *.MOD
           DELIMS -u:"&;" *.htm
           DELIMS -k *.htm



(* // ---------- "dirbat.doc" ---------- // *)


Q&D Directory to Batch v1.2o by Philippe Guiochon

Syntax 1 : DIRBAT <filespec>... [option]... <"batch command">
Syntax 2 : DIRBAT -list <filespec>... [option]...

This program lists files (-list) or creates a PROCTHEM.BAT (default) batch.

  -n      list only normal files (H and S excluded, default is -n -z)
  -z      list only special files (H or S required, default is -n -z)
  -d      list only directories (H or S included)
  -d:$    filter entries according to specified "lower[:|..]upper" date range
          ("*"=today, "$"=same date, ":$"=before or on, "$:"=on or after)
  -z:$    filter entries according to specified "lower[-|:|..]upper" size range
          ("#"=same size, ":#"=size less or equal, "#:"=size equal or more)
  -l[a]   list mode (-la = -l -a)
  -ll[a]  list mode including supported archives using archive extension
  -lll[a] list mode including supported archives ignoring extension
  -ls     list mode prepending short filename to each LFN entry (-a forced)
  -s      include subdirectories (valid if only one filespec was specified)
  -u      force filenames to uppercase (list mode only)
  -a      alternate file display (list mode only, no effect with LFNs)
  -t      filenames only terse listing (list mode only)
  -c      do not alter original archive filename case (list mode only)
  -p      paging (list mode only, and ignored if output is redirected)
  -k      force filenames to lowercase in batch file
  -e      begin batch with "@ECHO ON" (default is "@ECHO OFF")
  -w      begin batch with "@PAUSE"
  -b:$    specify alternate batch filename (default extension is .BAT)
  -m      do not overwrite existing batch file but append commands to it
  -v[v]   (very) verbose (in list mode, include final file stats)
  -i[i]   immediately run batch file (-ii = delete batch after run)
  -lfn    disable LFN support even if available (token replacement ONLY !)
  -dir[s] shortcut for -l -t [-s]
  -??     more help

a) Even if LFN support is available, <filespec> MUST be in f8e3 DOS form.
b) With -ll[l] command, archive contents is highlighted with "++" marker
   (archive contents is entirely listed, without any filter).
c) Supported archive formats are ZIP, ARJ, LZH and pre-5.0 RAR.
d) Note LFN support is limited to display (token replacement ONLY !).
e) Batch tokens for "batch command" (double quotes required) are :

  $_  newline
  $p  percent character
  $$  dollar character
  $u  unit
  $d  directory
  $b  directory without trailing "\"
  $n  file
  $e  extension (without dot)
  $f  file.extension
  $c  shortcut for $u$d$f (any LFN automagically becomes $q$c$q)
  $x  shortcut for $u$d$f (forced to DOS format even with LFN support)
  $q  double quote
  $#  auto-incremented ##### decimal number starting from 1
  $?  auto-incremented ??? string starting from "AAA"

f) Though auto-incrementation is global, it should not be used with -s option.
g) If LFN support is available, and if -lfn option was NOT specified,
   program will replace each original f8e3 token with its matching LFN form :
   in list mode, each LFN is automagically enclosed with double quotes ;
   in batch mode, by design, this is NOT the case, so careful use of $q token
   is highly recommended in order to avoid unexpected side effects
   (note only $c token automagically encloses LFN with double quotes).

Examples : DIRBAT *.tmp -s "DEL $u$d$n.$e"
           DIRBAT c:\bat\*.exe c:\tools\*.exe "COPY $u$d$n.$e G:\tmp"
           DIRBAT c:\*.* -s -z:0 "DEL $c"
           DIRBAT c:\*.* -s -d:* "COPY $c %TMP%"
           DIRBAT -l *.exe *.com -d:1/2/1993
           DIRBAT \ /s /ll
           DIRBAT \windows /s /i "echo $c ::: $x"
           DIRBAT *.zip "MD $q$n$q$_CD $q$n$q$_PKUNZIP $q..\$n$q$_CD ..$_"



(* // ---------- "dirweird.doc" ---------- // *)


Q&D Weird entries lister v1.1g by Philippe Guiochon

Syntax 1 : DIRWEIRD <[u:]\[path]>... [option]...
Syntax 2 : DIRWEIRD <[u:]\[path]>... <-azfbwcdj> [option]...
Syntax 3 : DIRWEIRD <[u:]\[path]>... <-o> <-u:$> [option]...
Syntax 4 : DIRWEIRD <[u:]\[path]>... <-n:#|-e:#> [option]...
Syntax 5 : DIRWEIRD <[u:]\[path]>... <-g> [-n] [-t]
Syntax 6 : DIRWEIRD <[u:]\[path]>... <-!>

-h        entries with Hidden attribute set
-s        entries with System attribute set
-v        entries with Volume attribute set
-r        entries with Read-Only attribute set
-a        entries containing chars not found in [A..Z]
-z|-aa    entries containing chars not found in [A..Z0..9]
-f|-aaa   entries containing chars not found in [A..Z0..9_-$!(){}]
-b|-aaaa  entries containing chars not found in [A..Z0..9_-$!(){} ]
-w|-aaaaa entries containing chars not found in [A..Z0..9_-$!(){} ',;+.]
-o[:$]    entries containing chars found in -u:$ string (-o:$ = -o -u:$)
-c[c]     entries whose name does not fit ????????.??? f8.e3 DOS pattern
-d[d]     entries whose name fits ????????.??? f8.e3 DOS pattern
-j        entries containing chars found in [a..z] (-k forced)
-g        entries with unconvertable Unicode characters shown as "_"
-!        find longest LFN pathname, LFN filename, LFN path, DOS path
-u:$      user-defined allowed characters (may be enclosed with double quotes)
-n:#      entries whose name's length is equal to or longer than value
-e:#      entries whose extension's length is equal to or longer than value
-k        do not force allowed character sets and filenames to lowercase
-y        alternate default processing to lowercase keeping accents
-u        display filenames in uppercase (ignored for LFNs)
-t        terse mode (list matching filenames only)
-n        scan specified directory only (no recursion)
-i        inverse results
-x|-lfn   disable LFN support even if available (display ONLY !)

a) If no attribute is specified, scanning defaults to -h -s -v options.
b) With -<a|z|f|b|w|c|d|j|o> options, all files are scanned
   whatever their attributes, including directories.
c) Unless -k option was specified, character matching ignores
   both case and accentuation ("e"="E"="é"="è", etc.).
d) Both name and extension are scanned.
e) This program will not process more than 5000 directories.
f) Note LFN support is limited to display.
g) With Novell DOS 7, -v option lists all files kept by DELWATCH.
h) -cc and -dd options prevents space from being considered a valid DOS char.
i) -g option ignores any option except -n and -t.
   255 is returned if any matching entry (file or directory) was found.
j) From Win9X, matching directory entries may be listed more than once.

Example : DIRWEIRD \ /a /u:_-$!@~[]



(* // ---------- "dllfind.doc" ---------- // *)



Q&D DLL Finder/Lister v1.1r by Philippe Guiochon

Syntax : DLLFIND <filespec|@filelist[.LST]> [option]...

This program finds and lists (almost) all modules required by a Win<16|32>
executable (be it DLL, EXE, DRV, 386, SCR, FON, etc.).
It can also check for executable type. Please note it *NOT* an EXE dumper.

  -d[d]    list only DOS executables (-dd = include DOS .COM format programs)
  -w[w]    list only Win16 executables (-ww = -w -i)
  -p[p]    list only Win32 executables (-pp = -p -i)
  -z       list only Win64 executables
  -f[f[f]] show useful Win32 PE data (-ff = -f -q ; -fff = -f -q -n)
  -e[e]    list only executables (-ee = -e -t)
  -x       list only non-executables (-t forced, -i ignored)
  -n[n]    alternate display, keeping CRLFs to a minimum (-nn = -n -t)
  -t[t]    alternate display, triming leading spaces (-tt = -t -n)
  -*       -f[f[f]] Win32 PE terse display (-*f[f[f]] = -* -f[f[f]])
  -q       do not list import libraries
  -i[i|k]  show import libraries location (-ii = -ik = -i -k)
  -k       disable KERNEL search for KRNL386, KRNL286 and KERNEL32 aliases
  -s       list path(s) searched in when -i option is specified, then terminate
  -![!]    create default DLLFIND.INI in current directory then terminate
           (-!! = overwrite existing DLLFIND.INI, if any)
  -l       disable LFN support even if available

a) Note the list may not be complete, for a Windows executable
   can dynamically load a DLL not registered in import list.
b) A filelist should contain either canonical pathnames,
   or mere filenames to be searched for in current directory.
   Jokers are not allowed in filelist.
c) -i option searches for import libraries in current directory,
   then in directories specified in PATH environment variable,
   then in directories specified in DLLFIND.INI
   if such a file is located in DLLFIND.EXE directory.
   Duplicate directories are filtered out.
   ".*" is appended to any module name without an extension.
d) DLLFIND.INI format is one directory per line :
   entries enclosed with double quotes are used with LFN support only,
   entries not enclosed with double quotes are used for DOS only.
e) If module name is KERNEL and if -i option was specified,
   program searches for KRNL386, KRNL286 and KERNEL32,
   unless -k option was specified too.
f) Experimental -f[f[f]] option may help patching a Win32 PE executable :
   OS version is obvious, characteristics bit 14 handles single CPU mode
   ("OR $4000" = single CPU required, "AND $BFFF" = multiple processors OK),
   "ORed" affinity mask handles allowed CPUs ($01 = CPU0, $0F = CPUs 0,1,2,3).
   Please note affinity mask entry is not always defined.
g) For obvious reasons, program will not try and analyze files matching
   *.SWP, *.PAR and *\PAGEFILE.SYS specifications.



(* // ---------- "dt.doc" ---------- // *)


Q&D Date & Time v1.1d by Philippe Guiochon

Syntax : DT [string] [option]...

This program prints current or filename date and time.
Date format can be user-specified. Discordian calendar is supported.

-f:$     format string (tokens listed in -?? help screen)
         French default is "$dd !d $mm $yyyy à °0hh °0mmn °0ss"
         English default is "$dd, $mm $d, $yyyy at °0h:°0m:°0s"
         Discordian default is "#d\n\n#h\n\n#s"
         Discordian short default is "#e\n\n#i\n\n#s"
         Discordian alternate default is "#f\n\n#j"
         French without day of week is "!d $mm $yyyy à °0hh °0mmn °0ss"
         English without day of week is "$mm $d, $yyyy at °0h:°0m:°0s"
-fr      French (default)
-us      English
-i:#     ink [0..15] -- default is white
-p:#     paper [0..15] -- default is black
-t:#     tab width (default is 4)
-b       monochrome BIOS output (no colors)
-n[n]    dump a cr+lf newline (-n = after output, -nn = before & after output)
-![!]    beautified output (-i:# and -p:# options recommended, -!! = -! -c)
-c       centered output (one-liner only or beautified output)
-x:#     horizontal position i.e. htab (one-liner only)
-y:#     vertical position i.e. vtab (one-liner only)
-n:$     use date and time from f8e3 or LFN filename instead of PC clock
-jma:$   use date specified as jj/mm/aaaa or jj-MMM-aaaa (default is sysdate)
-mdy:$   use date specified as mm/dd/yyyy or MMMdd,aaaa (default is sysdate)
-e[e[e]] display Discordian date (-eris = -yold = -kallisti = -ddate = -e)
-hail:#  dump the whole Discordian year (check 1900, 2000, 1960, 1963, etc.)
-??[?]   more help (to be read at least once !)

Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.

a) String, if specified, should be delimited with double quotes.
b) Default program behavior is to append date and time to string,
   unless string contains "\h", which stands for date and time.
   Other special substrings are "\p" for "%", "\n" for CRLF, and "\t" for TAB.
   Note mixing any of "\t", -c, -!, -x:# and -y:# may have unexpected results.
c) Year is [1583..3000] : change from julian to gregorian was on Oct 15, 1582
   in the Western world, although a few countries waited until Sep 14, 1752.
d) -jma:$ and -mdy:$ options modify date display but time is still system time.
e) -n:$ option expects a filename (directory names are not supported).
f) For obvious reasons, Discordian calendar defaults to English. ;-)
g) By design, Discordian date and holyday formats cannot be modified.
   Alternate formats are available with -ee and -eee options.
h) Note DDATE Unix utility does not compute leap years correctly,
   while DT does : 1900, for example, is common, not leap.
   Hail Eris ! Kallisti ! Hail Discordia ! Praise "Bob" ! Fnord ! ;-)

Examples : DT
           DT "Date et heure actuelles : "
           DT -us ***\n\t\h\n***
           DT -f:"!d.$m.$yyyy"
           DT -f:"$0d-$0m-$yyyy"
           DT -f:"Roman date : $!"
           DT -f:"$d $m $yy $0d $0m $yyyy $dd $mm °h °m °s °0h °0m °0s !d !0d"
           DT -n:C:\WINDOWS\USER.DAT -us "Previous USER.DAT access was "
           DT -e!! -i:14 -p:4 -jma:1/2/1963
           DT -mdy:2/1/1963 -us -i:14 -p:4 -! -t:12
              -f:"Gregorian\t$0d-$0m-$yyyy\nDiscordian\t#d\n\t#h\n\n\t#s"

Tokens allowed in format string are :

$dd     lundi..dimanche / monday..sunday
$d      1..31 (ordinal)
$0d     01..31
$mm     janvier..décembre / january..december
$m      1..12
$0m     01..12
$yyyy   ####
$yy     00..99
!d      1er..31 (cardinal)
!0d     1er..31
°h      0..23
°0h     00..23
°m      0..59
°0m     00..59
°s      0..59
°0s     00..59

$!      Latin date

$f      reference filename

°n      CRLF
°q      double quote

#d      default Discordian date
#h      default Discordian holyday
#e      terse Discordian date
#i      terse Discordian holyday
#f      alternate Discordian date
#j      alternate Discordian holyday
#s      Discordian slogan

#o      1st..73rd or 1er..73e Discordian ordinal (0=St Tib)
#c      1..73 Discordian cardinal (0=St Tib)
#z      Discordian season ("?"=St Tib)
#y      #### Discordian year
#w      Discordian day of week ("?"=St Tib)
#a      terse Discordian season ("?"=St Tib)
#x      terse Discordian day of week ("?"=St Tib)

Gregorian calendar    Discordian calendar   Holyday
====================  ====================  ====================
January 5             Chaos 5               Mungday
February 19           Chaos 50              Chaoflux
February 29           Saint Tib's Day       Saint Tib's Day
March 19              Discord 5             Mojoday
May 3                 Discord 50            Discoflux
May 31                Confusion 5           Syaday
July 15               Confusion 50          Confuflux
August 12             Bureaucracy 5         Zaraday
September 26          Bureaucracy 50        Bureflux
October 24            The Aftermath 5       Maladay
December 8            The Aftermath 50      Afflux



(* // ---------- "dtchk.doc" ---------- // *)


Q&D Date/Time Check v1.0j by Philippe Guiochon

Syntax : DTCHK [reference_file] [option]...

-c    do not update system clock with reference date/time stamp
-s    do not update reference date/time stamp with current date/time
-a    do not ask confirmation before system clock update
-i    interactive d/t change if current d/t is earlier than reference d/t
-f[f] force interactive d/t change (-ff : use system d/t as base d/t)
-w    audio warning
-t    terse
-r    ignore file read-only status
-d:$  origin dd-mm-yy[yy] system clock date (default century is 1900)
-t:$  origin hh:mm[:ss] system clock time
-f:$  format ("$[0]<d|m>", "$dd", "$mm", "$yy", "$yyyy", "%[0]<h|m|s>")
-o    older display
-i:#  ink [0..15] -- default is white
-p:#  paper [0..15] -- default is black
-iw:# warning ink [0..15] -- default is red
-pw:# warning paper [0..15] -- default is white
-ii:# ok ink [0..15] -- default is cyan
-pp:# ok paper [0..15] -- default is dark blue
-b    monochrome BIOS output (no colors)

a) Default origin system clock date and time is 01-Jan-1980, 00:30:00.
b) Default format string is "$0d-$0m-$yyyy, %0h:%0m:%0s".
c) If -d:$ is specified and -t:$ is not, -t:00:00:00 is assumed.
d) If -t:$ is specified, -d:$ must be specified too.
e) -i and -f options enable -r option, while ignoring -c, -s and -a options.
f) If not specified, reference file is searched for in executable directory
   first as DTCHK.INI then as DTCHK.EXE itself ;
   if specified, file must exist ; if specified in 8+3 format (without a path),
   it is searched for first in executable directory, then in current directory.
g) Unfortunately, Windows XP will cancel any change made using -f[f] option.
h) Program returns code 128 if everything went fine, else 255.

Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.

With DR-DOS 6.0 or Novell DOS 7.0, DTCHK can be called after each
external command by setting SET PEXEC=path\DTCHK.EXE -w and PROMPT $x$p$g



(* // ---------- "dths.doc" ---------- // *)


Q&D Unit/Track/Head/Sector v1.3k by Philippe Guiochon

Syntax 1 : DTHS <unit> <R|W|C> <block> <file[.BIN]> [option]...
Syntax 2 : DTHS <unit> <R|W|C> <track> <head> <sector> <file[.BIN]> [option]...
Syntax 3 : DTHS <unit> [P] [-a|-w] [-x] [-j[j]]
Syntax 4 : DTHS <unit> <V[V]> [-m] [-p[:#]] [-x] [-j[j]]

A) <unit> may be $8<0|1|2|3> or 8<0|1|2|3>H (hard disk),
   $00 or 00H (first floppy disk), $01 or 01H (second floppy disk).
B) For compatibility and compiler reasons, <unit> access requires
   512 bytes <sector>, DWORD <block>, WORD <track>, WORD <head>, WORD <sector>.
C) IMPORTANT : should best factorization fail, -j would be silently forced.

R|S     read|save sector(s) to <file> (dump to screen if <file> is "*")
W|U     write|update sector(s) with <file>
C       compare sector(s) against <file>
        (return code is 255 if any mismatch was found)
P|I     display <unit> parameters and BIOS interrupt $13 informations
V[V]    verify all <unit> blocks
        any error is reported to DTHS.LOG log ; if ESCape was hit to abort,
        DTHS.DAT is created to allow resuming from last checked block
        (VV = restart from block 0 ignoring existing DTHS.DAT if any)

-m      while verifying all <unit> blocks with V[V] command,
        report blocks containing $aa55 word magic signature to DTHS.LOG
-p[:#]  profile sector reading (V or R command required)
        -p:# sets threshold to report slow sector (default is 600, V only)
-t      test mode (existing data is not modified by <W|U>)
-c:#    count of sectors to read (default is 1)
-o[o]   overwrite any existing <file> (-oo = -o -r)
-r      ignore read-only status of existing <file>
-q      do not display any mismatch found
-a|-w   audio warning
-s      save unmodified data to DTHSDATA.SOS (default) backup
        (DTHSUNDO.BAT, created in current directory, WILL require editing)
-n:$    new backup name (default is DTHSDATA.SOS)
-d      alternate display
-yes    do not ask for confirmation
        BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
-x      ignore BIOS interrupt $13 extensions even if available
-ths    factorize blocks count ignoring unexpected values for TxHxS
-u      ignore fatal errors (most UNWISE and most UNSAFE !)
-j[j]   if rebuilding TxHxS is needed, instead of finding best factorization,
        force headcount=255 (-j) or headcount=240 (-jj)
-ah     assume int $1301 returns last operation status in AH (default is AL)
-dyn    use a dynamic buffer (default is to use a fixed buffer)
-??|-hh more help

a) -yes and -x options should NOT be used and are NOT recommended.
b) For safety, -s option is HIGHLY recommended.
c) -u option reports problems to DTHS.ERR log (created if necessary).
d) -p[:#] option is experimental (besides, its results may vary).
   Only tick ranges with non-zero sector count are reported.
   If specified, threshold is rounded to nearest lower multiple of 100.
   Even when resuming, the list of slow blocks is reinitialized :
   check DTHS.LOG log for previous report.
   Tick counter overflow is reported as 65535.
e) -ah option is forced if DTHS.AH exists in executable directory.
f) By design, DTHS handles only one block at a time :
   it is therefore not suited to fast floppy disk imaging.
g) LFNs are not supported.
h) Undocumented -chk option checks fixed buffer page boundaries.
i) These undocumented options perform their task ignoring any other option :
   -doc shows DTHS.DOC file, -<c|v>ga sets 25|50 lines text mode,
   -reboot!!! reboots PC, -off!!! turns PC off (APM BIOS required).
j) Cosmetic separator characters "." and "_" will be filtered out.
k) This DOS program was written with J.P.I. TopSpeed Modula-2 compiler.

Examples : DTHS $80 read 0 0 1 mbr -o
           DTHS $80 r 0 -c:63 track0
           DTHS $80 write 0 track0 -s
           DTHS -off!!!



(* // ---------- "dtsync.doc" ---------- // *)


Q&D Date/Time/Attributes Synchronizer v1.1f by Philippe Guiochon

Syntax 1 : DTSYNC <source> <target(s)|@filelist[.LST]> [option]...
Syntax 2 : DTSYNC <*|date> <*|time> <target(s)|@filelist[.LST]> [option]...
Syntax 3 : DTSYNC [-d:$] <target(s)|@filelist[.LST]> [option]...
Syntax 4 : DTSYNC <-m:$> <target(s)|@filelist[.LST]> [option]...
Syntax 5 : DTSYNC <-t:[+|-]$> <target(s)|@filelist[.LST]> [option]...

This program stamps file(s) with <source> date and time (syntax 1)
or with specified date and time (syntax 2) ; synchronizes file(s) to same date
while incrementing time from 00:00:00 to 23:59:58
in directory or filelist order (syntax 3) ; changes attributes (syntax 4) ;
increases or decreases date and time stamp by specified time value (syntax 5).

  -d:$  base date (dd-mm-yyyy format, default is 1-Feb-2063)
  -m:$  set attributes (<DRHSA>[-|+|?|!|x]...)
  -t:$  modify original time stamp by specified value
  -q    terse display
  -v    verbose display
  -r    process read-only files instead of skipping them (forced with -m:$)
  -c    add 2000 to year [0..79] and add 1900 to year [80..99]
        (default is to add 1900 to year [0..99])
  -i:#  auto increment ([2..600] seconds, default is 2)
  -b|-u create undo ROLLBACK.BAT batch
  -y[y] actually update data (-yy = -y -b)
  -x    disable LFN support even if available

a) Unless -y[y] was specified, program will NOT actually update data.
b) Date format is dd-mm-yy[yy], time format is hh:mm[:ss], "*" means now.
c) A filelist should contain either canonical pathnames,
   or mere filenames to be searched for in current directory.
   Jokers are not allowed in filelist entries.
d) "*.SWP", "*.PAR", "*\PAGEFILE.SYS", "*\ROLLBACK.BAT" will not be processed.

Examples : DTSYNC *.* -t:+01:00:00
           DTSYNC reffile.dat *.*



(* // ---------- "duplines.doc" ---------- // *)


Q&D Duplicate Lines Finder v1.0i by Philippe Guiochon

Syntax 1 : DUPLINES <range> <list[.LOG]> [-option]...
Syntax 2 : DUPLINES <-d> <list[.LOG]>

This program reads entries from previously sorted <list>,
filtering out duplicates using specified <range> columns interval.

    -e keep case
    -p remove path indication from analyzed portion of line
    -a do not favor first duplicate
    -r reverse display, showing unique lines
    -t left-trim each line before processing
    -k alternate display (-a ignored, -d forbidden)
    -c deeper check using filesize and filename extension
    -d process DIRBAT (v1.2h or better) sorted listing built from DOS or /lfn
       (using date/time)
    -x disable LFN support even if available

a) <range> is either <first[..last]> or <first[,count]> :
   <first> column is 1-based ; [last] or [count] may be "*" for End Of Line.
b) Empty lines and lines beginning with either ";" or "#" are ignored.
c) Tabs are not expanded. Lines should not be greater than 4095 characters.
d) Should comparison match, -c option performs a safety check outside <range> :
   it tries and locates a filesize (allowed characters : [0..9], dot, coma)
   and a filename extension so it can flag any mistmatch. The process is slow.

Examples : DUPLINES -p 23 cs.log
           DUPLINES -a 31..43 chkdata.log
           DUPLINES 31,13 chkdata.log
           DUPLINES 1..* prenoms



(* // ---------- "eeval.doc" ---------- // *)


Q&D Expression Evaluator v1.0e enhanced by Philippe Guiochon

Syntax : EEVAL [option]... <expression>

a) Valid tokens in <expression> are :

   [0..9]             digits (only base 10 numbers are supported)
   "." ","            decimal separator
   " " "(" ")"
   "+" "-" "*" "/"
   "\"                integer division
   "%"                modulo
   "^"                power (from WinXP console please use "~" instead)

b) Legal suffixes for currency operations are :

   "F"                francs (default)
   "E"                EU occupation AMGOT-like currency

   John Walker was right about EU : it *is* Yet Another Evil Empire.

c) Options can appear anywhere in line. They are :

   "="                format result as currency
   "!"                force American decimal format (default is French)
   "@"                do not beautify results
   "#[#[#[#]]]"       force fix 0, 4, 6 or 8 (default is fix 2)

d) Note this program is merely one of JPI TS M2 examples with many enhancements
   so it is now a small real-world tool (a command line calculator)
   instead of a useless small piece of source code :
   as such, it may still contain quirks from the original average parser
   which was designed for positive numbers handling and basic operations
   (negative numbers can still be handled if specified as "(0-number)").

Examples : EEVAL 1963*10000+2*100+1
           EEVAL = ! 1000f+2e
           EEVAL (0-4)*4+16
           EEVAL ### 355/113



(* // ---------- "EGACLOCK.doc" ---------- // *)


EGAclock v1.0g (c) PhG

Syntaxe : EGACLOCK [option]...
                                                           par défaut
/S:n Motif (0..5)                                        |   2
/O:n Séquence (0=prédéfinie, 1=aléatoire)                |   1
/W:n Rayon extérieur du motif                            |  10
/R:n Rayon intérieur du motif                            |   8
/P:n Couleur du fond                                     |   0
/I:n Couleur du motif                                    |  10
/F:n Police (0..2)                                       |   0
/M:n Animation (0=non, 1=oui, 2=OUI)                     |   1
/B:n Beep (0=non, 1=oui ou sans effet)                   |   0
/N:n Nombre d'étapes dans une animation                  |  20
/D:n Temporisation                                       |   1
/Z:n Souris (0=non, 1=oui)                               |   1



(* // ---------- "elapsed.doc" ---------- // *)


Q&D Elapsed v1.0g by Philippe Guiochon

Syntax : ELAPSED <message> <first_set> [second_set] [option]...

This program computes interval between two date/time sets.

-fr   French
-us   English (default)
-c    century is 2000 if year is less than 100 (default is 1900)
-ut   ignore any existing U.T. environment variable (DELTATU or POUR_TU)
-w    append a reminder about [second_set] compared with <first_set>
-!    append another reminder about [second_set] compared with <first_set>
-@    append yet another reminder about [second_set] compared with <first_set>
-v    display <first_set> and [second_set] date/time sets
-i:#  ink [0..15] -- default is white
-p:#  paper [0..15] -- default is black
-b    monochrome BIOS output (no colors)

Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.

<message> should be enclosed with double quotes. Supported tokens are :
"$d" (days), "$h" (hours), "$m" (minutes), "$s" (seconds),
"$f" (D H M), "$z" (D H M S), "$_" (CRLF), "$w" (-w), "$!" (-!), "$@" (-@).
Integer values are rounded. Any token (except "$_") can appear only once.

<first_set> and [second_set] format is <dd-mm-yyyy> <hh:mm:ss>.
Date separator is "-" or "/", time separator is ":" (seconds can be omitted).
If year is less than 100, 1900 century is assumed (unless -c was specified).

If omitted, [second_set] defaults to current date and time :
Universal Time (U.T.) is then assumed for system clock,
unless DELTATU or POUR_TU (in this order) environment variables are defined
(-ut option forces program to ignore them).

Examples : ELAPSED "You are $d old, Master !" 1/2/63 19:45
           ELAPSED "$d$_$h$_$m$_$s$_$f$_$z$_$_$w" 1/2/63 19:45
           ELAPSED "$f" 1/2/63 19:45 9-6-1987 12h00m00



(* // ---------- "esf2htm.doc" ---------- // *)


Q&D ESF to HTM v1.1c by Philippe Guiochon

Syntax : ESF2HTM <ESF95_directory> [-all]

  -all do not delete useless empty files

This program reads ESF95.SRC located in specified directory
then creates HTML files in current directory, making entries consultation
more pleasant than with brain-damaged original interface.

Exemples : ESF2HTM K:\
           ESF2HTM C:\TMP
           ESF2HTM .

a) Only original ESF 95 v1.0 CDROM is supported :
   ESF95.SRC should be 12.296.607 bytes long and Aug 11, 1995 dated.
b) Created HTML files will require approximately 11 Mb of storage space.
c) Entries in INDEX.HTM master index, although correct and complete,
   will not be sorted : this is left as an exercise for user
   using any good text editor and/or any good sort utility. ;-)
d) This program, for now, only retrieves text dictionary entries :
   this is by design, as other data were found without any interest.
   Back to ASCII without any pictures ! AALIB for ever ! ;-)
e) A newer ESF is now freely available online, but online only :
   both printed and CDROM older editions still have the great advantage
   of being readable OFFLINE without any need for useless Internet access.
f) Incidentally, kudos to John Clute, Peter Nicholls et alii :
   ESF is a GREAT work.



(* // ---------- "ev.doc" ---------- // *)


Q&D Environment variable v1.0c by Philippe Guiochon

Syntax 1 : EV -s [-v] [-t] [-q] [-a] <variable>
Syntax 2 : EV <*> [-q] [-r]
Syntax 3 : EV -e [-v] [-t] [-q] [-a] <variable>
Syntax 4 : EV -i [-v] [-t] [-q] [-a] [-u] <variable> <value>

  -s  show environment variable value (default)
  -e  if environment variable exists, return code 128, else return code 255
  -i  if environment variable=value, return code 128, else return code 255

  -a  search for environment variable is case sensitive
  -u  search for environment variable value is case sensitive
  -t  trim environment variable value
  -q  delimit environment variable value with double quotes
  -r  raw display of all variables (similar to SET command)
  -v  verbose (-vv = very verbose)

With WinXP, values returned may not match those shown by SET command.



(* // ---------- "evenodd.doc" ---------- // *)


Q&D EvenOdd v1.1b by Philippe Guiochon

Syntax 1 : EVENODD <-s> <source> [<evenfile> <oddfile>] [option]...
Syntax 2 : EVENODD <-c> <target> [<evenfile> <oddfile>] [option]...
Syntax 3 : EVENODD <-i> <file>

    -s[s[s]] split (-ss = -so = -s -o ; -sss = -sor = -soo = -s -o -r)
    -c[c[c]] create (-cc = -co = -c -o ; -ccc = -cor = -coo = -c -o -r)
    -i       show split file header infos

    -o       overwrite (-oo = -o -r)
    -r       ignore read-only attribute
    -z       create headerless split files
    -y       ignore header check (-c[c[c]] only)
    -v       verbose
    -a       alternate final display
    -x       disable LFN support even if available

This program saves <source> even and odd bytes to split files (syntax 1),
creates <target> merging even and odd bytes from split files (syntax 2),
or shows split file header infos if any (syntax 3).

a) Default split files are <source.0> and <source.1> (syntax 1),
   or <target.0> and <target.1> (syntax 2).
   If specified, <evenfile> and <oddfile> have .0 and .1 default extensions.
b) <source> or <target> cannot be more than 2Gb long.
c) This program is best used to process compressed and/or encrypted files
   for added security when sending data in two seperate operations.
d) The same executable run to split file must be used in order to rebuild it !

Examples : EVENODD -s c:\z\foo.bin
           EVENODD -s foo.bin pair.dat impair.dat
           EVENODD -c foo.bin
           EVENODD -c foo.bin f:\tmp\pair f:\tmp\impair
           EVENODD -i odd.dat



(* // ---------- "EVERYN.doc" ---------- // *)


Q&D Every N v1.0 by Philippe Guiochon

Syntax 1 : EVERYN [-s] <count> <source> [option]...
Syntax 2 : EVERYN [-c] <basename> [option]...
Syntax 3 : EVERYN <-f> <basename> <target> [option]...
Syntax 4 : EVERYN <-i> <file>

    -s[s[s]] split (-ss = -s -o, -sss = -s -o -r)
    -c[c[c]] create (-cc = -c -o, -ccc = -c -o -r)
    -f[f[f]] create (-ff = -f -o, -fff = -f -o -r)
    -i       show split file header infos

    -o[o]    overwrite (-oo = -o -r)
    -r       ignore read-only attribute
    -n       do not restore original date/time stamp (-c and -f only)
    -x       disable LFN support even if available

This program saves <source> content to <count> split files (syntax 1),
rebuilds source from split files (syntax 2 and syntax 3),
or shows split file header infos if any (syntax 4).

a) Split files extension is .!## where ## goes from 01 to <count>.
b) <basename> is filename of split files without extension.
   target name comes from either header (syntax 2) or command line (syntax 3).
c) By design, split files and target are created in current directory.
d) This program is best used to process compressed and/or encrypted files.
e) Should raw data be necessary, it starts at this address : $0116 (278).
f) Please note rebuilding source from split files is slow a process.
g) The same executable run to split files must be used in order to rebuilt it !

Examples : EVERYN 16 c:\z\foo.bin
           EVERYN foo
           EVERYN -i foo.!00



(* // ---------- "explode.doc" ---------- // *)


Usage #1 : EXPLODE
Usage #2 : EXPLODE <color> <drops> <density> <randomness>
                   <eternity> <gravity> <brightness>

    [*]=reset defaults, [R|G|B]=color, [Home|End]=density, [A|C]=randomness,
    [M|E]=eternity, [+|-|PageUp|PageDown]=number of drops, [D|I]=brightness
    [Left|Right|Up|Down] to change gravity

    Color is Red, Green or Blue, and default is Red
    Drops range is from 1 to 10000, default is 2000
    Density range is from 0 to 1, default is 1
    Randomness (for explosion origin) range is from 0 to 1, default is 1
    Eternity range is from 0 to 1, default is 0
    Gravity range is from 0 to 5000, default is 10
    Brightness range is from 0 to 1, default is 0



(* // ---------- "factoriz.doc" ---------- // *)


Q&D Factorize v1.0c by Philippe Guiochon

Syntax : FACTORIZ <number>... [option]...

   -p   (very slowly) check <number> found to be prime with alternate method
   -l   show one factor per line
   -r   do not beautify factors
   -ths try and build TxHxS from <number>
   -d   show divisors
   -e   do not poll keyboard for Escape

This program (slowly) factorizes specified <number> or shows its divisors.
<number> must belong to [0..4294967295] range.
[.,] characters are filtered out from <number>.

Examples : FACTORIZ 16,481,808 20,016,864
           FACTORIZ -ths 160,086,528
           FACTORIZ -p 01.02.1963
           FACTORIZ -d 360



(* // ---------- "FBENCH.doc" ---------- // *)


FBENCH (J.P.I. TopSpeed v3.1 Modula-2 compiler for DOS)

Syntax : FBENCH [iterations]

a) This is John Walker's FBENCH program (found at fourmilab.ch Web site)
   quickly ported by Philippe Guiochon to J.P.I. TopSpeed v3.1 Modula-2 compiler for DOS.
b) Default value for iterations is 1000.
c) Please note program should be run for about 300 seconds :
   considering timer accuracy, rather high an iteration count is recommended,
   especially on faster systems.
d) This program was compiled with INTRIG constant set to FALSE.
e) Reference results from a run on Microsoft Quick BASIC on the IBM PC/AT :

   Marginal ray          47.09479120920   0.04178472683
   Paraxial ray          47.08372160249   0.04177864821
Longitudinal spherical aberration:        -0.01106960671
    (Maximum permissible):                 0.05306749907
Offense against sine condition (coma):     0.00008954761
    (Maximum permissible):                 0.00250000000
Axial chromatic aberration:                0.00448229032
    (Maximum permissible):                 0.05306749907



(* // ---------- "FBENCHX.doc" ---------- // *)


FBENCH (J.P.I. TopSpeed v3.1 Modula-2 compiler for DOS)

Syntax : FBENCH [iterations]

a) This is John Walker's FBENCH program (found at fourmilab.ch Web site)
   quickly ported by Philippe Guiochon to J.P.I. TopSpeed v3.1 Modula-2 compiler for DOS.
b) Default value for iterations is 1000.
c) Please note program should be run for about 300 seconds :
   considering timer accuracy, rather high an iteration count is recommended,
   especially on faster systems.
d) This program was compiled with INTRIG constant set to TRUE.
e) Reference results from a run on Microsoft Quick BASIC on the IBM PC/AT :

   Marginal ray          47.09479120920   0.04178472683
   Paraxial ray          47.08372160249   0.04177864821
Longitudinal spherical aberration:        -0.01106960671
    (Maximum permissible):                 0.05306749907
Offense against sine condition (coma):     0.00008954761
    (Maximum permissible):                 0.00250000000
Axial chromatic aberration:                0.00448229032
    (Maximum permissible):                 0.05306749907



(* // ---------- "fcomp.doc" ---------- // *)


Q&D Binary/Text File Compare v1.3j by Philippe Guiochon

Syntax 1 : FCOMP <spec1> <spec2> [option]...
Syntax 2 : FCOMP <-c[c]> <list>

-c[c]   check <list> created with DUPLINES (-cc = create DELTHEM.BAT)
-m:#    maximum mismatch count (0=unlimited, default is 10)
-z      force comparison (shorter size is taken as reference)
-i      return error code 255 if two existing files are identical
-t      force text lines comparison instead of default binary (-v forced)
-k      case-sensitive (-t required)
-w      take tabs and spaces into account (-t required)
-l[a|l] list <spec1> files with identical matching <spec2> files (-ll = -l -a)
-d[a|d] list <spec1> files with different matching <spec2> files (-dd = -d -a)
-a      list all matching files in both <spec1> and <spec2> (-l or -d required)
-del    prefix files with "DEL" (-cc, -l[l] or -d[d] required)
-copy   prefix files with "COPY" (-l[l] or -d[d] required)
-kill   prefix files with "DD -k -y -r" (-cc, -l[l] or -d[d] required)
-pcopy  prefix files with "PCOPY -p -o" (-l[l] or -d[d] required)
-u:$    prefix files with user command (-l[l] or -d[d] required)
-bat    create batch file based on prefix operation (-db[a|b], -kb[a|b])
-s      process subdirectories
-v      verbose (slower display, forced with -t)
-n      alternate display (names without paths)
-lfn    disable LFN support even if available
-mem    ignore any Storage.ALLOCATE() error (unwise !)

a) If specification contains any joker, program assumes it applies to files.
   Directory specification should have a trailing "\".
   <spec2> file part must match one of "$.$", "*.*", "$.*" or "*.$" forms.
b) Each <list> entry is a line matching "<#|;>< ><digest>< ><path>" format.
c) About -t option (DOS ASCII) : older file is taken as reference ;
   temporary files are created in directory specified by, in that order,
   TMP, TEMP, TMPDIR, TEMPDIR environment variables
   (if none of these variables is defined, current directory will be used).
   .COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH files are ignored.
d) About -n option : in default mode, listing is terser ;
   in list mode (-l or -d options), path is removed from <spec1> source ;
   this option is ignored with -ll, -dd and -t options.
e) To be effective, all prefix commands require that output is redirected.
f) A few aliases exist : -<d|k>b[a|b] = <-del|-kill> <-bat> [-all] ; -@ = -c.
g) About -c[c] option (syntax 2) : successes are not reported ;
   an entry <path> can be relative but matching "?:\*" pattern is SAFER ;
   -c[c] returns error code 96 if groups contain identical files, else 64.
   -ccc and -cck are shortcuts (-cc -k).
h) Note joker matching includes extension if extension is omitted.



(* // ---------- "FENTROPY.doc" ---------- // *)


Q&D File Entropy 1.0 by Philippe Guiochon

Syntax : FENTROPY <filespec> [option]...

  -f:# precision digits (valid range is [1..10], default is 6)
  -us  American decimal separator (default is French decimal separator)
  -x   disable LFN support even if available

This program computes <filespec> entropy.
Results should match CCOUNT -ent mode.



(* // ---------- "fibo.doc" ---------- // *)


Q&D Fibonacci function v1.0b by Philippe Guiochon

Syntax 1 : FIBO <number>... [option]...
Syntax 2 : FIBO <first..last> [option]...

  -r   force recursion algorithm (default is linear algorithm)
  -u   use American digits separator (defaut is to use French digits separator)
  -a   alternate display
  -p:# ESCape polling interval ([1..32], default is 16)

With syntax 1, this program computes Fibonacci function for <number> ;
with syntax 2, it does so for a range of numbers.

a) With LONGCARDs, valid range was [0..47] ; with LONGREALs, it is [0..87].
b) Recursion may look more elegant, but it is very slow.
c) -p:# option may be useful, should Win9X freeze while recursing (-r option).



(* // ---------- "filter.doc" ---------- // *)


Q&D Filter v1.2 by Philippe Guiochon

Syntax : FILTER <source> <target> [list[.LST]] <-r|-f|-k|-d|-z> [option]...

    -t|-d filter out (delete) matching lines (default)
          read each line from <source> and write it to <target>
          only if it does not contain any verbatim entry from list.
    -r[j] replace tokens
          read each line from <source>, perform replacements
          using token pairs found in list, then write line to <target>.
    -f[j] replace strings
          read each line from <source>, perform replacements
          using strings found in list, then write line to <target>.
    -k    substitute string to code
          read each line from <source>, perform verbatim replacements
          using code-string pairs found in list, then write line to <target>.
    -z    keep only lines made of user-defined allowed characters
          read each line from <source>, then write it to <target>
          only if all its characters belong to user-defined allowed set.

    -c    case-sensitive filter (-t, -r, -f, -d and -z only)
    -i    inverse (-t|-d|-z = filter, -r = swap tokens, -f = swap strings)
    -u    do not filter out undefined codes (-k only)
    -c:#  column (1 upwards, -r and -f only)
    -j    allow Modula-2 jokers in original line (-f[j] and -r[j] only)
    -o    overwrite existing <target>
    -q    quiet (no eyecandy)
    -v    verbose (show final summary)
    -x    disable LFN support even if available

a) Up to 500 128-chars entries can be defined in list (default is FILTER.LST).
   Search order for list is current directory first, then executable directory.
b) -t, -r and -z options support the following codes in their definitions :
   "°n" = $0d0a, "°p" = "%", "°q" = double quote, "°[°-/'%]" = symbol,
   "°[$|x]#[°]" = hex/dec value ($00 value not allowed).
c) Replacement substrings must be checked as to avoid unwanted side effects.
d) With -f[j] option, list format is line pairs :
   one line for original, one line for replacement.
   Empty lines are ignored unless they're enclosed with double quotes.
e) With -z option, list format is (quoted) lines or hex/dec values.
f) With -j option, matching original line becomes replacement line.
   Search is not case-sensitive : -c and -c:# options are thus ignored.
g) The following remarks apply to -k option only : <source> may be binary ;
   list format is (hexa)decimal code in [$00..$ff] range or quoted character,
   then separator, then (quoted) string or hexadecimal string ;
   code will be filtered out if string is empty unless -u option is specified.
h) Results are unpredictable if list contains lines longer than 128 chars.



(* // ---------- "findhidn.doc" ---------- // *)


Q&D Search "hidden" words v1.0e by Philippe Guiochon

Syntax : FINDHIDN <textfile> <-w:word> [-l:#] [-u:#] [-r]

This program *slowly* searches "hidden" words in a DOS ASCII text file,
provided file has *already* been processed with PREPHIDN (un)utility,
another FINDHIDN companion (un)utility with SHOWHIDN.
The three programs have been written in order to confirm
the nonsense of "hidden" words in the Bible or in any long text.

    -w:$ word to find
    -l:# lower count of characters to skip (default is 1)
    -u:# upper count of characters to skip (default is 50)
    -lim use EMS/LIM memory if present
    -a   audio warning for each entry found
    -v   verbose eyecandy
    -z   show position as 0-based (default is 1-based)
    -sa  do not sort filenames alphabetically

a) Please remember <textfile> *must* have been preprocessed with PREPHIDN !
b) Please remember this program is *slow*.
c) Note position of any match found in text file is 1-based
   unless -z option has been specified.
d) Note word is first searched verbatim then reversed.
e) EMS/LIM is about five times SLOWER than conventional memory
   (at least with a true DOS). It SHOULD be safer anyway.
   Besides, this option gives a sorted output.
f) Using conventional memory, output will have to be sorted later.
   Moreover, buffer overflow is likely to happen for big intervals.
   Use the divide and conquer approach by searching small intervals.

Examples : FINDHIDN *.t -w:PHIL -u:666
           FINDHIDN test -w:HELL



(* // ---------- "fire.doc" ---------- // *)


Q&D Particles Fire demo v1.0c by Philippe Guiochon

Syntax : FIRE [option]...

  -a    show palette until keypress or 10 seconds
  -z    end on mouseclick too
  -p:#  color palette (0..3=rRGB1230, 8=system palette, default is 0)
  -n:#  number of particles (500..30000, default is 15000)
  -c    coarser resolution
  -l:#  lower number of particles
  -u:#  upper number of particles
  -r:#  rounds (1..1000)
  -w:±# wind effect (0..10, default is 0)
  -d    enable double buffering
  -s    SoundBlaster sound (experimental : ¨ feature !)

  Sound requires a SoundBlaster Pro (or compatible) board !

[rRGB1230]-palette, [c]-coarseness, [d]-buffering, [Left|Right]-wind
[PageUp|PageDown|Home|End]-particles, [Space]-pause, [Escape|Enter]-end



(* // ---------- "firebees.doc" ---------- // *)


Q&D Fire Bees demo v1.0e by Philippe Guiochon

Syntax : FIREBEES [option]...

  -a    show palette until keypress or 10 seconds
  -z    end on mouseclick too
  -p:#  color palette (0..11=rRGB$/*1230, default is 0, 11=system palette)
  -w:#  number of wasps (1..10, default is 1)
  -b:#  number of bees (1..4000, default is 500)
  -wa:# wasp maximum acceleration (1..20, default is 3)
  -wv:# wasp maximum velocity (1..20, default is 6)
  -ba:# bee maximum acceleration (1..20, default is 2)
  -bv:# bee maximum velocity (1..20, default is 3)
  -wb:# wasp minimum distance from border (0..20, default is 2)
  -t:#  threshold proba for a bee to focus on a wasp (0..11, default is 4)
  -n:#  threshold proba for a bee to target a new wasp (0..11, default is 0)
  -r:#  bee motion randomizer when focusing on a wasp (0..20, default is 0)
  -s:#  smoothing rounds (0..10, default is 1)
  -d:#  number of waits for vertical retrace (0..20, default is 0)
  -l    draw lines instead of dots (bees only)
  -s    no smoothing
  -c    clear history
  -m    alternate motion mode
  -q    do not show parameters at program exit

Here are keys available while program is running :
[rRGB$/*1230]-palette  [c]-toggle history  [s]-toggle smoothing
[PageDn|PageUp]-number of bees  [Left|Right]-bees step  [AZ]-number of wasps
[Home|End]-focusing threshold  [IO]-motion randomizer  [m]-toggle motion mode
[Up|Down]-new wasp targeting threshold  [l]-toggle dot mode
[Space]-pause  [Escape|Enter]-exit



(* // ---------- "FIXPE.doc" ---------- // *)


Q&D fix PE executable v1.0a by Philippe Guiochon

Syntax : FIXPE <file> [option]...

This program shows a few "interesting" values in a PE 32-bits executable.
It can also modify them so patched binary *MAY* run on older Win OSes :
Win98SE (sometimes with the excellent KernelEx libraries) or WinXP.
Beware ! Running a patched "newer" binary on an "older" O.S. may *NOT* work.

  -v          view <file> interesting values (default)
  -c:#        set characteristics flag
  -s          set "single CPU required" ("OR $4000" in characteristics flag)
  -m          set "multiple CPUs allowed" ("AND $BFFF" in characteristics flag)
  -m:#        set processor affinity mask
  -p:#[,#]... allow specified processor(s) (CPU range is [0..31], *=all)
  -<n|o>:#.#  set NT OS version
  -<w|s>:#.#  set Win32 subsystem version
  -<a|i>:#.#  set application image version
  -v:#        set Win32 version value

  -a          alternate display (similar to DLLFIND -fff display)
  -n          keep CRLFs to a minimum
  -r          update read-only <file>
  -c          create a new FIXPE.LOG instead of appending data to existing one
  -l          prevent operations from being reported to FIXPE.LOG log
  -d          update <file> date/time stamp (default is not to update it) 
  -x          disable LFN support even if available

a) When patching, filename jokers are not supported : this is by design.
b) PE+ Win64 executables are not supported : this is by lack of interest.
c) Please note "affinity mask" field is not always defined : this is NOT a bug.
d) ".0" is appended to version if specified without ".#" part.
e) Number parsing handles "$#", "0x#", "H#" and "#H" forms for hexadecimal,
   "B#" and "#B" for binary.
f) Modifications are written to FIXPE.LOG log in current directory :
   this allows easy undoing of any change.
   Note -l option can be forced if FIXPE.CD exists in executable directory.
g) Please note creating a backup of original file is *STRONGLY* advised.
h) For obvious reasons, program will not try and analyze files matching
   *.SWP, *.PAR and *\PAGEFILE.SYS specifications.
i) This DOS program was written with J.P.I. TopSpeed Modula-2 compiler.

Examples : FIXPE calc.exe -single -p:0
           FIXPE ribbons.scr -n:4.0
           FIXPE c:\windows\system\*.* /a



(* // ---------- "FLIP.doc" ---------- // *)


Q&D Flip File Contents 1.0a by Philippe Guiochon

Syntax : FLIP <source> <target> [option]...

  -l line mode (default is binary)
  -o overwrite existing <target>
  -z remove ASCII code 26 (Ctrl-Z)
  -n append CRLF at end of <target>
  -t shortcut for -z -n
  -x disable LFN support even if available

This program flips <source> contents.

a) Maximum line length supported by -l option is 24576 characters.



(* // ---------- "fmtmdlog.doc" ---------- // *)


Q&D Format Message Digest Log v1.1b by Philippe Guiochon

Syntax : FMTMDLOG <source_file> <target_format> [option]...

    -c ignore safety checks (identical formats and relative to absolute paths)
    -l force lowercase for MD5 fingerprint (default is to force uppercase)

This program converts a MD5 logfile from one format to another.

a) <source_file> is a DOS filename.
b) Output should be redirected to a file.
c) Unix "/" path separator will be changed to DOS/Win "\" path separator.
d) Format    Program                 Target format
   ========  ======================  ========================
   CS        CS                      Full Path
   CSB       CS -b                   Full Path without "?:\"
   CSRAW     CS -g                   Full Path
   CSBRAW    CS -b -g                Full Path without "?:\"
   FSUM      FSUM or MD5SUMMER       Full Path without "?:\"
   SUMMER    FSUM or MD5SUMMER       Full Path without "?:\"
   SUM       MD5SUM or MD5SUMS -u    Full Path
   NIRSOFT   HASHMYFILES             source format only



(* // ---------- "fonttool.doc" ---------- // *)


Q&D FON <-> TXT Font Tool v1.0e by Philippe Guiochon

Syntax 1 : FONTTOOL <-b> <binary_font[.FON]> [option]...
Syntax 2 : FONTTOOL <-r> <text_definition[.DAT]> [option]...
Syntax 3 : FONTTOOL <-s> <binary_font[.FON]> <target> [option]...
Syntax 4 : FONTTOOL <-g> <binary_font[.FON]> [option]...

This program builds a text definition file from a binary font (syntax 1),
rebuilds a binary font from a text definition file (syntax 2),
creates a squashed version of specified font (syntax 3)
or saves character set to a PCX file (syntax 4).

    -p[#] allow partial set of characters (-p2 = 25 lines, -p5 = 50 lines)
    -a    automatically adjust font height if different from 8 or 16
    -m#   squash method [1..6]
    -i:#  ink ([0..255], default is 10)
    -p:#  paper ([0..255], default is 0)
    -g:#  grid color ([0..255], default is same as paper)
    -x[x] increase character width by 1 or 2 (-xy = -x -y)
    -y[y] increase character height by 1 or 2 (-xy = -x -y)
    -o    overwrite
    -v    verbose

a) Options irrelevant to one syntax are silently ignored.
b) Only DOS names are supported.
c) -i:#, -p:#, -g:#, -x[x] and -y[y] options require -g option.
   Note ink, paper and grid values are default 320x200x8 palette colors.
d) -g option briefly sets 320x200x8 video mode, hence the brief black screen.



(* // ---------- "fortune.doc" ---------- // *)


Q&D Fortune Cookies v1.2 by Philippe Guiochon

Syntax : FORTUNE [file[.TXT]] [option]...

  -n:#   display cookie or tagline number # whatever its state (updated anyway)
  -i     reinit *.NDX index file (no cookie will be displayed twice in a cycle)
  -x[x]  show index statistics (-xx = alternate display)
  -t[t]  test for single character separator at start and at end of file
  -f:#   frame type (0=none, 1=single, 2=double, 3=ascii, 4=raw), default is 0
  -w[w]  wait for keypress or mouseclick (-ww = -w -m)
  -m     ignore mouse if present
  -p[p]  -w[w] with French prompt
  -n     add a newline (CR+LF) in order to beautify display (useful with PEXEC)
  -t:#   tab width [1..64], default is 8
  -i:#   ink [0..15], default is cyan
  -p:#   paper [0..15], default is dark blue
  -b     monochrome BIOS output (no colors)
  -o     reverse 8+3 format directory search sequence (current then executable)
  -w:#   set line width, default is screen width
  -s[s]  screensaver mode, next = Enter, quit = Escape (-ss = -s -c)
  -s:#   in screensaver mode, pause [0..30] in seconds per line, default is 1
  -m:#   in screensaver mode, minimum pause [0..30] in seconds, default is 10
  -z     in screensaver mode, next = left click, quit = right click
  -r     in screensaver mode, randomize position, default is center
  -c     in screensaver mode, do not clear screen at exit
  -13    apply ROT13 to each line
  -y     copy raw text to Vindoze clipboard if available (ignored by -s option)
  -lfn   disable LFN support even if available

a) Default data file is "FORTUNE.TXT".
   File specification should be unambiguous. Jokers are allowed.
   "." and "*" specifications are replaced with "*.TXT".
   If specified without path, data file is searched for
   first in executable directory, then in current directory.
   If data file's first line is not a single character separator,
   tagline mode (single line entries) is assumed.
   Data file's last line must be the single character separator
   (unless, of course, lines are taglines). Entries beyond 65533rd are ignored.
   If data file comes from *n*x world, it WILL require preprocessing :
   CRLF utility will change LF to CR+LF ; if file contains fortune cookies,
   the required single character separator must be prepended to file.
b) Program will handle up to 200 files, always excluding from processing files
   matching *<.BK!,.COM,.EXE,.BAT,.DLL,.OVR,.OVL,.DRV,.SYS,.BIN,.NDX,.DEX>.
c) -y option tries and converts text from DOS ASCII to Win OEM character set.
d) -n:* will display most recently dumped cookie or tagline.
e) Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
   Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.
f) With DR-DOS 6.0 or Novell DOS 7.0, FORTUNE can be called after each
   external command by setting SET PEXEC=path\FORTUNE.EXE -n and PROMPT $x$p$g
g) NEVER forget Murphy's Law : "If anything CAN go wrong, it WILL !" ;-)



(* // ---------- "fountain.doc" ---------- // *)


Usage #1 : FOUNTAIN
Usage #2 : FOUNTAIN <density> <wind> <gravity> <drops> <brightness>
Usage #3 : FOUNTAIN <density> <wind> <gravity>
                    <minDrops> <maxDrops> <stepDrops> <rounds> <brightness>

    [R|G|B] to change color, [*] to reset defaults, [D|I] to change brightness,
    [+|-|PageUp|PageDown] to change number of drops, [W|X|C|V] to change wind,
    [Left|Right|Up|Down] to change gravity, and [Home|End] to change density

    Density range is from 0 to 1, default is 0
    Wind range is from -500 to 500, default is 0
    Gravity range is from 1 to 1000, default is 7
    Drops range is from 1 to 10000, default is 2000
    StepDrops is from 1 to 50



(* // ---------- "fu.doc" ---------- // *)


Q&D File Usage v1.1b by Philippe Guiochon

Syntax : FU <u:...|path> <-d[d]|-e[e]|-y[y]|-i[i]|-f[f]|-v|-m[m]> [option]...

-d[d] by directory (default), -dd = by root directory
-f[f] by path (-d[d] forced accordingly, case-insensitive, accents ignored)
-v    by directory filecount
-e[e] by extension (use yearly total or just extension)
-y[y] by year (use yearly total or just year)
-i[i] by case-insensitive initial (-ii = sort by count instead of character)
-m[m] by filesize distribution
      (-mm = decrease upper limit by 1 except for 0 and "*" 4Gb alias)
-f:$  file mask (????????.??? format, default is *.*)
--    reverse order
-s    do not show sum of all sizes and counts for specified files
-c    do not show count of files
-p    show percentage of used file space
-g[g] show bar graph (-gg = -g -t)
-a[a] do not use graphics separator lines (-aa = -a -t)
-t    do not use graphics characters in bar graph
-n    list only normal files (H and S excluded, default is -n -z)
-z    list only special files (H or S required, default is -n -z)
-u    paths and extensions in uppercase (real DOS or -l required)
-w    shorten paths according to columns count (-d[d], -f[f] or -v required)
-r|-j do not recurse
-k    paging (ignored if output redirected)
-l    disable LFN support even if available
-b    monochrome BIOS output (no colors)

a) If program is run without any parameter, command line will be read from
   FU.INI, searched for first in current, then in FU.EXE directory.
   Note a single line containing "$" separator is required after command line.
b) Note R and A attributes are always ignored when building the list of files.
c) -e[e] option does not support extension more than 16 characters long.
d) -m[m] option ignores irrelevant options.
e) Warning : results will NOT be significant for CD-ROM and network drives.
f) FU.INI file format (comments may start with any of ";#")
   -- optional command line if program is run with an empty command line
   -- required "$" line separator
   -- up to 50 upper limit(s) in decimal or hexadecimal ("$" prefix)
      supported inner cosmetic separators are any of ",._" ;
      supported suffixes for multiples of 1000 are K, M, G ;
      supported suffixes for multiples of 1024 are Kb, Mb, Gb ;
      supported alias for 4Gb MAX(LONGCARD) is "*" ;
      lower limit is previous upper limit +1 (default = 0 unless 0 defined) ;
      if defined, 0 forces count of empty files.
   -- required "$" line separator



(* // ---------- "gematria.doc" ---------- // *)


Q&D Gematria v1.0f par Philippe Guiochon

Syntaxe 1 : GEMATRIA <table> [fichier(s)] [option]...
Syntaxe 2 : GEMATRIA <-l[l]>

Ce programme calcule des valeurs numérologiques à partir de lignes
extraites d'un fichier, ou saisies au clavier.

-l[l] afficher la liste des tables (-ll = ne pas afficher les commentaires)
-t    afficher une table (option recommandée pour tout diagnostic !)
-u[u] convertir les textes en haut de casse (-uu = avec signes diacritiques)
-v[v] mode verbatim respectant les signes diacritiques (-vv = signes et casse)
-s    afficher la réduction du résultat à l'intervalle [0..9]
-a    sélectionner l'ancienne présentation
-x    sélectionner la présentation sur une seule ligne (-e automatique)
-e    ne pas afficher les étapes intermédiaires
-r    ne pas réorganiser la table
-d    ne pas autoriser les redéfinitions
-f    ne pas convertir les formules
-k    ne pas convertir "æ" et "Æ" en "ae" et "AE"
-n    ne pas ajouter la session interactive au fichier journal GEMATRIA.LOG
-g    créer un fichier GEMATRIA.DAT standard dans le répertoire en cours
-y    raccourci pour -s -u -d
-lfn  ne pas utiliser les fonctions LFN même si elles sont disponibles
-??   afficher un écran d'aide plus détaillé

a) Les tables figurent dans le fichier GEMATRIA.DAT
   (recherché dans le répertoire en cours puis dans celui de l'exécutable).
b) Le programme exploite le jeu ASCII PC, et non le jeu Windows OEM.
c) Par défaut, le programme convertit les données vers l'ensemble [a..z0..9].
d) En droite "logique", le recours à l'option -u devrait être systématique. ;-)
e) Attention ! Seuls les caractères définis sont pris en compte.
f) Le programme traitera jusqu'à 200 fichiers.
g) Les options dénuées de sens avec une commande sont ignorées.
h) L'option -l[l] ignore tous les paramètres et options.
i) Par défaut, les redéfinitions sont autorisées : l'option -d les interdit.

(* Format du fichier GEMATRIA.DAT *)

Une ligne commençant par ";" ou "#" sera ignorée.

En-tête : "::: nom ::: [description]"
Entrée  : caractère, chaîne ou ensemble, puis séparateur, puis formule.

Les guillemets signalent une chaîne de caractères (exemple : "ch").
Les crochets signalent un ensemble de caractères (exemple : [ij]).
Le suffixe "*" signale une chaîne à chercher en début de mot (exemple : "ch*").
Le préfixe "*" signale une chaîne à chercher en fin de mot (exemple : "*s").

L'option -r respecte l'ordre des définitions sans les réorganiser.
En droite logique, l'ordre devrait être : chaînes à chercher en début de mot,
chaînes à chercher en fin de mot, puis chaînes verbatim
(les chaînes étant énumérées par ordre de longueur dans chaque catégorie).

Les codes utilisables vont de 32 à 255,
mais "*", "[" et "]" devraient être évités.

Sans l'option -k, le programme convertit les codes "æ" et "Æ" en "ae" et "AE".
L'option -v préserve les signes diacritiques (accents et cédille).
L'option -vv préserve les signes diacritiques et la casse.
L'option -u convertit les textes en haut de casse sans signes diacritiques.
L'option -uu convertit les textes en haut de casse avec signes diacritiques.

Dans une formule, "%" correspond au code ASCII de la lettre.
Dans une formule, "!" correspond au code ASCII de la lettre en haut de casse.
Dans une formule, "°" correspond au code ASCII de la lettre en bas de casse.
Dans une formule, "$?" correspond au code ASCII de la lettre qui suit.
L'option -f évite aux formules d'être converties comme les textes.

Les résultats seront conformes au degré d'attention prêté aux options ! ;-)



(* // ---------- "GLYPHES.doc" ---------- // *)


Q&D Glyphes v1.0 par Philippe Guiochon (à partir de TOOLSKY v1.5c)

Syntaxe : GLYPHES <taille du point>

Ce programme permet de visualiser les glyphes Q&D AstroTools.



(* // ---------- "GOTOHELL.doc" ---------- // *)


Q&D Try And Overwrite Deleted Entry Names v0.9 by Philippe Guiochon

Syntax : GOTOHELL <[@]dirlist> <count> [basename] [option]...

This program creates <count> files named ####basename
for each directory specified in <[@]dirlist>,
then deletes them all unless instructed no to.
Yet Another Useless Idea. ;-)

    -k[e|k] keep created files instead of deleting them (-ke = -k -e)
    -e[k|e] create 0-byte files instead of 1-byte files (-ek = -e -k)
    -x      disable LFN support even if available

a) Each entry in <[@]dirlist> must be a valid directory in canonical form.
b) <count> must belong to [1..9999].
c) Default LFN basefilename is "GoAway!GoAway!GoAway!.tmp" ;
   default DOS basefilename is "DIE!.TMP".

Example : GOTOHELL list.lst 500 _tryandoverwriteme.$$$



(* // ---------- "gridrun.doc" ---------- // *)


Q&D GridRun v1.0b by Philippe Guiochon

Syntax : GRIDRUN [option]...

-p:#  paper [0..7], default is 0
-i:#  ink [8..15], default is 10
-s:#  speed [0..31], default is 1
-m    exit on mouseclick too (default is on Escape or Return keys)
-b    block characters (default is BIOS dots)
-f?   use private redefined VGA font (fd=dots, fs=squares)
      mode must be 80x25, 80x50, 80x28 or 80x43
-t:#  trail mode (0=normal, 1=long normal, 2=pulse, 3=small dot, 4=big dot)
-f:#  percentage filled [0..100], default is 50
-v:#  upper velocity [1..8], default is 2
-s    background filled with spaces
-o    random colors
-r    reset cursor at program exit (probably useless and valid with -f option)
-k    do not fix cursor shape
-2    force 25 lines mode
-5    force 50 lines mode
-v    show parameters at program exit

[Space]-step, [Escape|Return]-exit
[PageUp|PageDown]-speed, [+|-]-percentage, [C]-color, [T]-trail

Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.



(* // ---------- "hdfree.doc" ---------- // *)


Q&D free space on hard disk(s) v1.0l by Philippe Guiochon

Syntax : HDFREE <u[u]...>:... [option]...

This program shows free space left on specified hard disk(s).

-i    show unit(s) geometry
-w    add warning to report
-q    quiet mode (no percentage bar graph)
-s    do not show sum of all disks
-a[a] do not use graphics separator lines (-aa = -a -t)
-t    do not use graphics characters in bar graph
-u    show used space instead of free space
-k[k] show rounded kilobytes (-kk = -rk = mathematical kilobytes)
-m[m] show rounded megabytes (-mm = -rm = mathematical megabytes)
-g[g] show rounded gigabytes (-gg = -rg = mathematical gigabytes)
-e    english group and decimal separators (default is french separators)
-x    disable FAT32 support even if available
-b    monochrome BIOS output (no colors)

a) If program is run without any parameter, command line will be read from
   HDFREE.INI, if such a file exists in HDFREE.EXE directory.
b) From Win 9X, program will call DOS interrupt $21 with AX=$7303 ;
   if -x option was specified, it will be with regular AH=$36.
c) From Win XP, program will abort (required DOS functions are not available).
d) Results include lost clusters and DELWATCHed files (DR-DOS and Novell DOS).
e) Warning : results will not be significant for CD-ROM and network drives.



(* // ---------- "hilite.doc" ---------- // *)

HILITE v1.42 (c) by Philippe Guiochon

Syntax : HILITE <command> [filename[.DEF]]

<command> /TSR loads program as a TSR (!)
          /UNLOAD unloads program from memory
          /ON enables program
          /OFF disables program
          /STATUS shows program's current status

<filename> is the definition file (default name is HILITE.DEF)

Toggle key to enable or disable program is <Ctrl-F10>.

Each line in the definition file can be :
<#<ink> on <paper>> : black, blue, green, cyan, red, magenta, brown, white
                      {grey, light blue, light green, light cyan,
                      light red, light magenta, yellow, bright white}
<directive>         : <REMARK>, <CONSTANT>, <STRING>, <TYPED>, <DEFAULT>,
                      <NUMBER>
<keyword>           : keyword to be highlighted


(* // ---------- "hilitem2.doc" ---------- // *)

HILITEM2 v1.44 for JPI TopSpeed Modula-2 (c) by Philippe Guiochon

Syntax : HILITEM2 <command> [filename[.DEF]]

<command> /TSR loads program as a TSR (!)
          /UNLOAD unloads program from memory
          /ON enables program
          /OFF disables program
          /STATUS shows program's current status

<filename> is the definition file (default name is HILITEM2.DEF)

Toggle key to enable or disable program is <Ctrl-F10>.

Each line in the definition file can be :
<#<ink> on <paper>> : black, blue, green, cyan, red, magenta, brown, white
                      {grey, light blue, light green, light cyan,
                      light red, light magenta, yellow, bright white}
<directive>         : <REMARK>, <CONSTANT>, <STRING>, <TYPED>, <DEFAULT>,
                      <NUMBER>
<keyword>           : keyword to be highlighted


(* // ---------- "HMS.doc" ---------- // *)


Q&D Time Converter v1.0 by Philippe Guiochon

Syntax 1 : HMS [*] [[hh] mm] ss
Syntax 2 : HMS [*] value[s|m|h]

This program converts from HH:MM:SS to seconds (syntax 1)
or from specified value to HH:MM:SS (syntax 2).

a) Syntax 1 is either "hh mm ss", "mm ss" or "ss".
   By design, values are not limited to standard ranges.
b) Syntax 2 supports "h", "m" and "s" (default) suffixes.
c) If first parameter is "*", padding character will be "0" (default is " ").

Examples : HMS 11 59 59
           HMS 30 00
           HMS 3600
           HMS * 60m



(* // ---------- "htm2asc.doc" ---------- // *)


Q&D HTML to ASCII v1.2k by Philippe Guiochon

Syntax 1 : HTM2ASC <file[.HTM]> [option]...
Syntax 2 : HTM2ASC <-c[c]> <file[.HTM]>
Syntax 3 : HTM2ASC <-ns[u]> <file[.HTM] [-u]>

This program converts HTML to ASCII, ignoring all formatting (syntax 1) ;
tries and checks basic HTML validity (syntax 2) ;
or filters out scripts in HTML files (syntax 3).

   -c[c]  check basic HTML conformity (all other options ignored)
   -ns[u] filter out scripts (all other options ignored except -u)
   -p     convert <P> to a CR+LF sequence
   -t     convert <P> to a CR+LF+TAB sequence
   -hr    convert <HR> to a tilde+CR+LF sequence
   -tr    convert <TR> and </TR> to a CR+LF sequence
   -oem   convert entities and sequences to Windows ANSI OEM
   -wp    keep <B>, <I>, <EM> and <STRONG> text attributes for word processing
          (find and replace $b_..._b$, $i_..._i$, $e_..._e$, $s_..._s$ codes)
   -i     keep <IMG*> references (-ii = insert <[i]> marker)
   -f     filter out CRs and LFs found in HTML codes
   -o     overwrite existing target
   -r     reverse processing (dump HTML codes, ignoring script code if any)
   -d     while processing, dump HTML codes to screen
   -s     dump script code (if any) with text
   -y     dump style code (if any) with text
   -k     create target in current directory instead of source directory
   -u     update date/time stamp (-ns[u] option only)
   -w     disable ESCape polling (may be necessary with Win9X/WinXP)
   -etajv undocumented special processing
   -x     disable LFN support even if available

a) .INI,.BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH files are ignored.
b) HTM2ASC.INI file must exist in executable directory :
   it contains up to 500 HTML entities and up to 500 sequences.
c) Created files will have the following extensions (according to options) :
   ".ASC" (DOS), ".TXT" (Windows) and ".KOD" (codes).
   -ns[u] option keeps original files with ".BK!" extension.
d) -c[c] option checks the following pattern :
   "<html*>*<head*>*</head>*<body*>*</body>*</html>" (*=any string).
   It returns code is 255 if there was at least one mismatch, 128 if none.
   -cc alternate option does not display successes.
   Note filenames with unexpected characters cannot be opened :
   check will then fail even if file is valid.
e) This simple program was not meant to try and keep HTML formatting :
   result may not be pretty and will almost always require editing,
   especially with newer HTML complicated files
   (many of which requiring preprocessing for character conversion).
   A better tool could then be HTMSTRIP by Bruce "Wayne Software" Guthrie,
   although it unfortunately crashes on many newer HTML files. :-(



(* // ---------- "iago.doc" ---------- // *)


Q&D Iago v1.04 by Philippe Guiochon 1984 (Apple ][), 1998 (VGA mode X)

(public domain Mode X v1.04 library by Matt Pritchard)

Yet another useless weak 8x8 Othello game...

Syntax : IAGO [-c] [-a] [-m]

  -c confirm computer move with [Return]
  -a audio warning for computer move
  -m alternate color scheme

Note hints may vary, for identical scores are randomized.



(* // ---------- "isempty.doc" ---------- // *)


Q&D IsEmpty v1.0d by Philippe Guiochon

Syntax : ISEMPTY <directory> [-verbose] [-lfn] [-x]

-x option excludes floppy and CDROM units. Program returns an error code :
255 if <directory> is empty, 128 if <directory> is not empty,
64 if <directory> is not a directory, 32 if <directory> does not exist,
16 if <directory> does not refer to a valid unit.



(* // ---------- "ISOCASE.doc" ---------- // *)


Q&D Modula-2 ISO CASE checker v1.0 by Philippe Guiochon

Syntax : ISOCASE <source[.MOD]> [-![!]]

This program scans a TopSpeed Modula-2 source,
inserting the ELSE required by Modula-2 ISO for each CASE (if necessary).
Remarks and strings contents are ignored.

This mandatory ELSE for each CASE is useless and stupid
whether the real-world programmer has handled all possible cases or not.
The (censored) Modula-2 ISO academic committee has created the ternary BOOLEAN
requiring an ELSE in a CASE where both TRUE and FALSE are handled !
"The CASE against Modula-2 ISO" or "Modula-2 ISO considered harmful". ;-)

-@    dump fixed source to screen instead of modifying it
-![!] create default ISOCASE.INI in current directory then terminate
      (-!! = overwrite existing ISOCASE.INI, if any)
-b    append .ORG extension to source instead of replacing original extension
      (this option obviously does require LFN support)
-x    disable LFN support even if available

a) Source code is assumed to be correct (its compilation should be a success).
b) If ISOCASE.INI exist in either current or executable directory,
   the program will read four strings from it. Else, it will default to :

   ; verbatim strings can be delimited with double or single quotes
   ; 1. inserted ELSE statement with a reminder
   ;    (note a trailing space separator will be added if omitted here)
   "ELSE ; (* //ISO fixed silly requirement *)"
   ; 2. legal characters for first character of keyword
   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
   ; 3. legal characters for inner characters of keyword
   "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789"
   ; 4. comma-separated keywords requiring an END (except CASE itself)
   "FOR,IF,LOOP,MODULE,PROCEDURE,RECORD,WHILE"

c) For safety, original source will be kept with .ORG extension.
d) Any inserted ELSE will have this form :

   "ELSE ; (* //ISO fixed silly requirement *)"

e) By design, jokers are not supported.



(* // ---------- "joystick.doc" ---------- // *)


Q&D Joystick Check v1.0d by Philippe Guiochon

Syntax : JOYSTICK < <A|B|G|P> | <1|2|0|6> > [*]

A or B = normal procedures, 1 or 2 = safer procedures,
G or 0 = 4 buttons gamepad, P or 6 = 6 buttons gamepad
(with P, position polling may be erratic : use safer 6 instead).
With P and 6, E and F buttons are said pressed if B joystick position < 128.
Optional "*" second parameter disables device detection test.



(* // ---------- "keepuniq.doc" ---------- // *)


Q&D Keep unique lines v1.0e by Philippe Guiochon

Syntax : KEEPUNIQ <textfile1> <textfile2> [option]...

  -k case-sensitive
  -w take tabs and spaces into account
  -n keep empty lines
  -i invert operation (keep lines common to both files)
  -x do not modify <textfile1>
  -b do not create <textfile1>.BK1 and <textfile2>.BK2 backups
  -s do not update <textfile1> and <textfile2> date/time stamps
  -q quiet mode (no eyecandy)
  -v verbose (show parameters at start)
  -w force temporary files to be created in current directory
  -l disable LFN support even if available

This program removes text lines common to both <textfile1> and <textfile2>
(unless -i option is specified to keep only them instead).

a) Temporary files are created in directory specified by, in that order,
   TMP, TEMP, TMPDIR, TEMPDIR environment variables
   (if none of these variables is defined, or if -w option is specified,
   current directory will be used instead).
b) .BK!,.BK1,.BK2,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH are illegal.
c) DOS character set is assumed.
d) For compatibility reasons, these KEEPUNIQ32 v1.0a options
   are supported, although they will have no effect : -t and -c:#,#.
e) Note this program was not created with speed in mind : it is very slow. :-(
   Brute Force and Laziness ! ;-)



(* // ---------- "kgroup.doc" ---------- // *)


Q&D Keep Group v1.0a by Philippe Guiochon

Syntax 1 : KGROUP <source> <text> [option]...
Syntax 2 : KGROUP <source> <-d:#|-k:#>

This program shows groups of lines where at least one line contains <text> ;
it also deletes or keeps only groups of specified number of lines.

    -i   inverse filter
    -j   search for pattern containing jokers (default is verbatim search)
    -k   case-sensitive search
    -d:# delete groups of # lines
    -k:# keep groups of # lines

a) Output should be redirected to a file.
b) A group is one or more successive lines without an empty line.
c) Jokers may be "?" (any character) or "*" (any sequence, empty or not).
d) Accents are always ignored. Pattern search always ignores case.
e) Any option irrelevant to specified syntax is ignored.

Exemples : KGROUP dups.log "*patches\"
           KGROUP dups.log -k PatcheS
           KGROUP dups.log -j *patches*.zip?
           KGROUP -d:2 dups.log



(* // ---------- "l1.doc" ---------- // *)


Q&D L1 cache ON/OFF v1.1a by Philippe Guiochon

Syntax : L1 <on|off> [-override]

Note crash is almost guaranteed when disabling L1 cache with EMM386 !



(* // ---------- "lavalamp.doc" ---------- // *)


Q&D Lava Lamp v1.0f by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax 1 : LAVALAMP [-mouse] [-mode:#] [-cycles:#] [-center] [-speed:#] [-fast]
                    [-paper:#] [-red:#] [-green:#] [-blue:#]
                    [-rg] [-rb] [-gb] [-keep] [-external]

    -m   exit on mouse click
    -m:# video mode
         0=320x240 (default), 1=360x240, 2=640x480 (VESA), 3=800x600 (VESA)
    -c:# change color interval ([0..5000], default is 10)
    -c   centered display
    -s:# speed ([0..31], default is 4)
    -f   no page-flipping
    -p:# background color ([0..255])
    -r:# red component (-255..+255)
    -g:# green component (-255..+255)
    -b:# blue component (-255..+255)
    -rg  swap red and green
    -rb  swap red and blue
    -gb  swap green and blue
    -k   do not mutate colors
    -e   ignore EXE bagage if any

    Data priority is bagage (unless -e option is specified),
    then executable name with .BIN extension in current directory,
    then executable name with .BIN extension in executable directory.

    While program is running, interaction is possible using these keys :

    [F1|F2]-red  [F3|F4]-green  [F5|F6]-blue  [F9|F10|F11]-swap R,G,B colors
    [F8]-reset palette  [+|-]-speed  [Tab|C]-position  [Escape|Return]-quit

Syntax 2 : LAVALAMP <-build> [-x:#] [-y:#] [-overwrite] [-verbose]

    Build LAVALAMP.BIN from up to 1000 ###.PCX sequentially numbered files.
    000.PCX is background whose palette will be used for all pictures.

    -x:# picture left position (relative to background picture)
    -y:# picture top position (relative to background picture)
    -o   overwrite existing LAVALAMP.BIN

Syntax 3 : LAVALAMP <-list> [-overwrite]

    List files from LAVALAMP.BIN (redirected output is batch-ready).

    -o   append "-o" to XTRACT commands in redirected output

Note "C:\QD\LAVALAMP\LAVALAMP.EXE" includes binary data at $00007055.



(* // ---------- "lcount.doc" ---------- // *)


Q&D Line Counter v1.1f by Philippe Guiochon

Syntax 1 : LCOUNT <file(s)> [option]...
Syntax 2 : LCOUNT <-f[f]> [-v] <file(s)

This program counts lines in a text file (syntax 1)
or it finds the longest line (syntax 2), assuming at most 4096 characters.

-m     ignore Modula-2 comments between "(*" and "*)"
-b     ignore BASIC comments beginning with "REM" or "'"
-c     ignore C comments beginning with "//" or between "/*" and "*/"
-a     ignore Assembler comments beginning with ";"
-k     display count of comments instead of count of lines
-e     count empty or blanks lines too
-s[:#] count sorted lines according to character at column specified with -c:#
       (-s:# = -s -c:#)
-c:#   character column (-s required, default is 1)
-g[g]  show bar graph (-s required, -bb = no semigraphics)
-w:#   bar graph width (default is 25 characters)
-f:#   number field width (default is 9)
-v     verbose processing
-d     dump lines or comments verbatim to screen
-f[f]  find the longest line (-ff = show rough lines average length too)
-x     disable LFN support even if available

a) Language comments support is minimal... and will remain so. ;-)
b) With -f[f] option, any option other than -v will be silently ignored.
   Empty lines are not considered when computing rough lines average length.
c) Program will not process files with any of these extensions :
   .COM,.EXE,.DLL,.OVR,.OVL,.DRV,.VXD,.BIN,.ZIP,.ARJ,.LZH for safety.



(* // ---------- "LIFELEX.doc" ---------- // *)


Q&D Life Lexicon to VLIFE.DAT converter v1.0 by Philippe Guiochon

Syntax : LIFELEX <file[.TXT]>

This program extracts names and patterns from Life Lexicon by Stephen Silver.



(* // ---------- "loto.doc" ---------- // *)


Q&D Loto (France) v2.0e par Philippe Guiochon

Syntaxe 1 : [-g] [<grilles> [<numéros> [<numéros_chance>]]] [-tt]|-t:$]
Syntaxe 2 : <-c> <grille> [-t[t]|-t:$] [-p]
Syntaxe 3 : <-v> <fichier[.TXT]> [-t[t]|-t:$] [-p]
Syntaxe 4 : <-f> <fichier[.TXT]> [-p]
Syntaxe 5 : <-l>
Syntaxe 6 : <-s>
Syntaxe 7 : <-d> <fichier[.TXT]>
Syntaxe 8 : <-i[i]>

  -g     création de grilles (avec ou sans vérification dans un tirage)
         (par défaut, une grille de 5 numéros avec un numéro "chance" :
         grilles [1..2800], numéros [5..9], numéros_chance [1..10])
  -c     vérification de la <grille> spécifiée
  -v     vérification des grilles contenues dans le <fichier>
  -f     vérification des grilles contenues dans le <fichier>
         (la première ligne du <fichier> étant le tirage de référence)
  -l     liste des tirages (références et dates)
  -s     création de statistiques : LOTO.BIN (analyse de l'entropie),
         LOTO.DAT (répartition) et LOTO.INI (consultation).
  -d     vérification de l'unicité des grilles contenues dans le <fichier>
  -i[i]  représentation graphique de tous les tirages (-ii = numéros "chance")

  -t     vérification avec tous les tirages
  -tt    vérification avec le tirage le plus récent
  -t:$   vérification avec un tirage de référence (-t:* = -t:: = -tt)
  -p     affichage de tous les tirages, qu'ils soient gagnants ou non
  -u     après la création d'une grille, vérification de son unicité (-g)
  -m[m]  affichage (encore plus) sommaire (-g)
  -??[?] remarques puis mises et gains

***************************************************************
* Le loto est un impôt : sur la misère, sur le désespoir,     *
* sur l'ignorance en mathématiques, sur la sottise aussi.     *
* Mais c'est quand même un impôt volontaire :                 *
* il est donc moins immoral que tous les impôts forcés.       *
* Sur ce sujet, lire les pages décisives de Lysander Spooner. *
* Sur les statistiques, lire les excellentes pages            *
* du site "fourmilab.ch" de John Walker                       *
* (dont le programme ENT est fort instructif).                *
***************************************************************

a) Le fichier LOTO.CSV de la Française des Jeux est indispensable,
   qui sera cherché dans le répertoire en cours puis dans celui du programme.
   Si l'option -i[i]76 traite les données de l'ancienne formule du loto,
   aucune option n'existe pour traiter celles de la nouvelle formule 2017.
b) Une <grille> simple comporte 5 numéros appartenant à l'intervalle [1..49],
   ainsi qu'entre 1 et 10 numéros "chance" appartenant à lintervalle [1..10]
   (un numéro "chance" est signalé par l'un des caractères "+=*",
   mis en préfixe ou en suffixe).
   Une <grille> multiple comporte entre 6 et 9 numéros,
   ainsi qu'entre 1 et 10 numéros "chance"
   (toutes les combinaisons possibles ne sont pas autorisées).
c) La simulation (option -g) ne pourra attribuer un gain imaginaire
   à une combinaison gagnante qui n'avait pas été remportée.
d) Par défaut, le tirage de référence est le tirage le plus récent
   (sauf avec l'option -g).
e) Le "Joker+" n'est pas pris en compte.
f) Ce programme traitera au plus 28 années de tirages et 2800 grilles.
g) Les options dénuées de sens pour une commande donnée sont ignorées.
h) Avec -i[i], la touche TAB bascule l'affichage (réel ou proportionnel),
   et la touche "*" change le type de tri.
i) En manière de clin d'oeil, l'option -i[i] accepte le suffixe "76"
   pour traiter le fichier LOTO.76 (6 numéros avec un numéro complémentaire).

Exemples : LOTO -c 1 2 3 4 5 +6 7*
           LOTO -c 11 4 8 35 12 +3 -t:2008109
           LOTO -v 2BCHKED -t
           LOTO -g -u -mm 2800 /t:2008081

(* Mises : N = nombre de numéros par grille, C = nombre de numéros "chance" *)

 N    5    6    7    8    9
C
1     2   12   42  112  252
2     4   24   84  224
3     6   36  126  336
4     8   48  168
5    10   60  210
6    12   72  252
7    14   84  294
8    16   96  336
9    18  108
10   20  120

(* Gains : N = nombre de numéros gagnants, C = numéro "chance" gagnant *)

 C   oui          non
N
0    mise         rien
1    mise         rien
2    rang5+mise   rang5
3    rang4+mise   rang4
4    rang3+mise   rang3
5    rang1        rang2



(* // ---------- "mac2pc.doc" ---------- // *)


Q&D MAC2PC v1.0a by Philippe Guiochon

Syntax : MAC2PC InFile[.MAC] [-o] [-sp] [-sym]

-sp  Section and paragraph symbols are control characters
     in the PC ASCII set. Use this switch if you want MAC2PC
     to convert them to control characters in the PC ASCII
     set (default is converting them to a gremlin).
-sym Copyright, registered, trade mark and hyphen become
     "¨", "¨", "¨" and "-". Use this switch as to obtain "\(C)\",
     "\(R)\", "\TM\" and "\--\".

Characters which are illegal or without equivalent become "¿",
graphic characters of the PC ASCII set become "+",
LF are added to CR.

Converted file will have .ASC extension.



(* // ---------- "makedef.doc" ---------- // *)


Q&D Make DEF file from MOD file v1.1d by Philippe Guiochon

Syntax : MAKEDEF <file(s)[.MOD]> [option]...

This program builds .DEF and .IMP file(s) from .MOD file(s).

  -l|-i do not create .IMP importation list
  -r    keep remark just preceding PROCEDURE
  -p    pack lines (no CRLF between headers)
  -f    force program code to be parsed as if it was a module
  -w:#  specify IMPORT list width in characters (default is 70)
  -v    verbose PROCEDURE listing while working

a) This program can process up to 500 files at once
   (note files matching *.DEF and *.IMP are ignored).
b) Processing assumes each source file has correct Modula-2 syntax.
c) This tool was written for TopSpeed J.P.I. Modula-2 source code :
   hand-editing will still be required for elements such as
   constants, types, global variables, private procedures.



(* // ---------- "makepath.doc" ---------- // *)


Q&D Make Path v1.2f by Philippe Guiochon

Syntax 1 : MAKEPATH <directory>... [-b] [-l] [-q] [-w] [-d]
Syntax 2 : MAKEPATH <directory> <-i[i]> [-l] [-x] [-v]
Syntax 3 : MAKEPATH <directory> <-c[c]> [-l]
Syntax 4 : MAKEPATH <directory> <-k> [-l]
Syntax 5 : MAKEPATH <directory> <-g> [-q] [-l]
Syntax 6 : MAKEPATH <directory> <-t> [-q] [-l]

-b    build directory (default command)
-i[i] emulate ISEMPTY utility (-ii = -i -v)
-c[c] check if directory exists (-cc = -c -v)
-k    delete directory if empty
-g[g] make directory default only if it already exist (-gg = -g -q)
-t    test current directory against specified existing directory
-q    do not display message if directory already exists
-w    merely warn if directory does not exist (default is to create it)
-d    make last newly created directory default
-x    exclude floppy and CDROM units
-v    verbose
-l    disable LFN support even if available

a) Syntax 1 checks for a directory existence, creating it if required,
   merely warning about its absence. Multiple directories are allowed.
   Return code is 255 if unit was not a valid hard disk.
b) Syntax 2 emulates ISEMPTY utility. Return codes are :
   255 if <directory> is empty, 128 if <directory> is not empty,
   64 if <directory> is a file, 32 if <directory> does not exist,
   16 if <directory> does not refer to a valid unit.
c) Syntax 3 is obsolete and kept for legacy batches only. Return codes are :
   255 if <directory> does not exist, 128 if it does.
d) Syntax 4 deletes existing directory. Return codes are :
   255 if delete operation was a success, 192 if it was a failure.
e) Syntax 5 makes <directory> default only if it already exists.
   Note <directory> must be specified in canonical form ("[u:]\path[\]").
   Any return code above 127 flags an error or a problem.
f) Syntax 6 return codes are :
   255 if current directory is specified existing <directory>,
   240 if not (whatever the reason : not directory, not found, bad form).
g) <directory> should be specified in canonical form
   ("u:\path[\]") ; however, "[u:][\]path[\]" forms are supported.
   Note directory separator "/" is supported.
h) Other error codes are always below the smallest documented code.
i) Options specific to one syntax are ignored by the others.

Examples : MAKEPATH c:\fun\fortune
           MAKEPATH d:foo\bar
           MAKEPATH -ii c:\z
           MAKEPATH -k "c:\mes documents\mes images"
           MAKEPATH -t \



(* // ---------- "matrix.doc" ---------- // *)


Q&D AniMatrix (over-rated Z-movie !) v1.1g by Philippe Guiochon

Syntax : MATRIX [taglines_file[.DAT]] [option]...

-m:#  motion type (0=downwards, 1=upwards, 2=leftwards, 3=rightwards)
-p:#  paper [0..7], default is 0
-i:#  ink [8..15], default is 10
-s:#  speed [0..31], default is 1
-m    exit on mouseclick too (default is on Escape or Return keys)
-b:#  threshold for trail creation [0..100], default is 90
-t:#  threshold for twinkling [0..100], default is 20
-e:#  threshold for eraser [0..100], default is 80
-c:#  threshold for normal trail color [0..100], default is 50
-v:#  upper velocity [1..8], default is 4
-s    scroll
-l:#  lower character [0..255], default is 48
-u:#  upper character [0..255], default is 49
-u    upper case characters [65..90]
-l    lower case characters [97..122]
-d    digits case characters [48..57]
-b    binary [48..49] (default)
-a    ascii set [0..254], excluding (normally) invisible 255 code
-f[?] use private VGA font (mode must be 80x25, 80x50, 80x28 or 80x43)
      A=hebrew [0..26], B=runes [48..57], C=runes [65..90], D=kata [91..148],
      E=hebrew [151..177], F=dots [178..204]
-i[i] show current date and time (-ii = smaller blank border)
-t[t] show random tagline (-tt = smaller blank border)
-w:#  message persistence [1..30], default is 10 seconds
-c    centered message (default is random position)
-f:$  format string "$[0]<d|m>", "$dd", "$mm", "$yy", "$yyyy", "°[0]<h|m|s>"
      French default is "$dd !d $mm $yyyy à °0hh °0mmn °0ss"
      English default is "$dd, $mm $d, $yyyy at °0h:°0m:°0s"
-us   English (default is French)
-r    try and reset cursor at program exit (-f[?] option required)
-k    do not fix cursor shape
-2|-5 force 25 or 50 lines mode
-v    show current parameters at program exit
-lfn  disable LFN support even if available

a) Taglines file (default is "MATRIX.DAT") may contain up to 200 entries
   (valid set if -f[?] : "0123456789:abcdefghijklmnopqrstuvwxyzçâàéêèîûù,-'.").
   It will be searched for first in current then in executable directory.
b) [Space]-single step, [Escape|Return]-exit to DOS, [+-]-charset, [S]-scroll,
   [PageUp|PageDown]-speed, [Y]-toggle message, [I]-date and time, [T]-tagline,
   [C]-centered, [W]-border, [arrows]-motion, [^R]-restore F? factory settings,
   [F1]-ink, [F2]-paper, [F3]-trail normal color threshold,
   [F4]-upper velocity, [F5]-trail creation threshold,
   [F6]-twinkling threshold, [F7]-eraser threshold.
c) Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
   Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.



(* // ---------- "md5demo.doc" ---------- // *)


MD5 test suite



(* // ---------- "MISSING.doc" ---------- // *)


Q&D missing numbered entries detector v1.0f by Philippe Guiochon

Syntax : MISSING <specification> [option]...

This program detects missing entries in numbered files.

-w[w]:# build command to rename filenames with index padded to specified width
-p      process prepended number ("#*" pattern)
-a      process appended number ("*#" pattern)
-i      process first inner number ("*#*" pattern)
-d      process number alone ("#" pattern)

-m      show lower index, upper index and maximum index width then terminate
-k      show duplicate values
-v      verbose display (individual index instead of range)
-t      do not left- and right- trim filename (default is to trim filename)
-c      use COPY instead of RENAME (-w[w]:# only)
-n      do not show header (-w[w]:# only, -ww:# = -w:# -n)
-z      warn if target name does not fit DOS n8.e3 pattern (-w[w]:# only)
-!      disable ESC polling
-x      disable LFN support even if available

a) Only LONGCARD decimal numbers are supported.
b) Number formatting does not matter : value does
   ("1" = "01" = "001" etc.).
c) Please note -k option lists values and not strings ("1" = "01" = "001" etc.)
d) -m option requires any of -p, -a, -i or -d options.
e) -w[w]:# option requires only one of -p, -a, -i or -d options.
   It ignores -k and -v options. Indexes are padded with "0".
   Without -n option, redirected output will require editing.
   Note filenames will not have a path.
f) Filename extension is ignored.
g) Directories are ignored.
h) -z option is forced is LFN support is either unavailable or disabled.
i) Unless -! option was specified, ESCape key aborts listing.
j) -debug option shows list of processed files ; -list omits excluded files.



(* // ---------- "MOD2HTM.doc" ---------- // *)


Q&D Modula-2 source to HTML format v1.0 by Philippe Guiochon

Syntax : MOD2HTM <file(s)> [option]...

This program converts Modula-2 source code to HTML format.

  -i:$  specify alternate .INI file (default is MOD2HTM.INI)
  -t:#  specify tab stop ([1..32], default is 4)
  -t    do not expand tabulation character ($09) to space(s)
  -f    force each space to " " non-breakable space
  -k    ignore keywords case (default is case-sensitive)
  -y    casify keywords using MOD2HTM.INI lists (-k forced)
  -l[l] show line numbers (-ll = pad with "0"s instead of spaces)
  -a    alternate set of HTML formatting tags
  -c    assume source is a mere text file and thus do not try to parse it
  -dos  assume source is DOS ASCII (default)
  -oem  assume source is Windows OEM
  -o[o] overwrite existing target (oo = overwrite read-only target)
  -p    create target in source directory (default is in current directory)
  -r    create target without header nor trailer
  -q    no eyecandy
  -i    show active parameters
  -z    change default extension to ".*" (default is ".MOD")
  -x    disable LFN support even if available

a) .INI,.BK!,.COM,.EXE,.DLL,.ZIP,.ARJ,.htm,.HTM,.HT_,.HT! files are ignored.
b) Without -i:$ option, MOD2HTM.INI must exist :
   it is first searched for in current then in executable directory.
   Note various program limits are specified in original MOD2HTM.INI remarks.
   Any file specified with -i:$ option must exist.
c) Source code syntax is assumed to be correct
   (its compilation should be a success).
d) Source file cannot contain any $00 character ;
   each line should be smaller than 1024 characters.
e) With LFN support, ".htm" is appended to source filename.
   Without LFN support, extension becomes either ".HTM" or ".HT_"
   depending upon source has ".MOD" or ".DEF" extension ;
   any other source extension will be changed to ".HT!" extension.
f) -f option overrides any space redefinition in MOD2HTM.INI file.
g) -l[l] option inherits whatever current format is : this is by design.
h) This program was written for TopSpeed J.P.I. Modula-2 source code,
   but it should be useful for newer Modula-2 compilers.

Examples : MOD2HTM src\mod2htm.MOD /a /o
           MOD2HTM *.def /o /t:8 /y /i:xds.ini



(* // ---------- "morfmsg.doc" ---------- // *)


MorfMsg v1.0c par Philippe Guiochon

Syntaxe : MORFMSG [msgfile[.DEF]] [option]...
                                          par défaut
/S:# Motif (0..5)                       |    2
/W:# Rayon extérieur du motif           |    6
/R:# Rayon intérieur du motif           |    4
/P:# Couleur du fond                    |    0
/I:# Couleur du motif                   |   10
/N:# Nombre d'étapes dans une animation |   20
/D:# Temporisation (1/10s)              |   10
/A:# Ajustement automatique             |  oui

Le nombre maximal de points est 8000.

L'utilitaire BWBMPDEF permettra de créer un fichier .DEF
à partir d'une image monochrome au format BMP.



(* // ---------- "morse.doc" ---------- // *)


Q&D Morse v1.0b by Philippe Guiochon

Syntax : MORSE [option]... <quoted string>

  -f:#  frequency (default is 1000 Hz)
  -d:#  delay unit (default is 44 milliseconds)
  -n    no sound
  -v    verbose (-vv = very verbose)
  -t    terse
  -s    spell using international aviation code (-n is implicit then)
  -f    French alternate for -s
  -e    use data from external MORSE.DAT file

This is international Morse code. American Morse code is, of course, different.
Data file format is "character word" (undefined codes are shown as "<?>").

The characters that are most frequently used have the shortest code symbols,
and the characters that are infrequently used have the longer symbols :
therefore, international Morse code looks like a fixed Huffman tree.



(* // ---------- "movie.doc" ---------- // *)


Q&D Movie v1.0c by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax 1 : MOVIE -create <ini[.INI]> <picture[.PCX]> [-overwrite]

  Create MOVIE.BIN from *.PCX files using data found in initialization file.
  Each entry in initialization file must conform to this format :

      [$]
      File=$[.PCX]
      Rows=#
      Columns=#
      Rewind=#

  Section is required as a separator. File extension is optional
  (if specified, it will be replaced with .PCX).
  Picture without matching entry will abort program if -v was specified.
  Only 256 colors PCX files are supported.
  Processing pictures with the great PICLAB will help fix the border color.

Syntax 2 : MOVIE -list [-overwrite]

  List files from MOVIE.BIN. Redirected output will be in XTRACT format.

Syntax 3 : MOVIE [#] [-m:#] [-speed:#] [-random] [-buffered] [-mouse] [-saver]

  Show selected or random animation from MOVIE.BIN in required video mode :
  0=320x240 (default), 1=320x200, 2=640x480 (VESA), 3=800x600 (VESA).

  [Tab]-random animation  [+|-]-speed  [C]-center position  [R]-random position
  [F1|F2]-previous/next  [PageUp|PageDn]-previous/next  [Escape|Return]-quit

a) Options irrelevant to specified command will be ignored.
b) Note that .BIN data filename must match .EXE executable filename.
c) Data file is searched for in current directory then in executable directory.
d) LFNs are not supported.



(* // ---------- "mpause.doc" ---------- // *)


Q&D MousePause v1.0e by Philippe Guiochon

Syntax : MPAUSE [-wait:#] [-escape] [-mouse] [-terse] [message]

    -w:#  maximum pause in seconds ([1..900])
    -e    do not interpret right-click as Escape
    -m    ignore mouse if present
    -t    terse mode (display [message] without prompt)
    -tt   terser mode (display [message] without prompt then erase it)

This enhanced PAUSE command monitors keypresses and mouse clicks.
Optional message will be displayed verbatim. Try and keep it short !
Escape key forces return code 255, as right-click does (unless -e was used).
If maximum pause is outside valid range, it is set to minimum value.



(* // ---------- "MSABER.doc" ---------- // *)


Modula-2 Cipher Saber v1.0 by Philippe Guiochon

Syntax 1 : MSABER -e <original> <ciphered> [passphrase] [option]...
Syntax 2 : MSABER -d <ciphered> <original> [passphrase] [option]...

-e[?] encrypt (-ee = -e -@)
-d[?] decrypt (-dd = -d -@)
-cs2  newer CipherSaber-2 method (default, same as -p:20 -i:10)
-cs1  older CipherSaber-1 method (legacy, same as -p:1 -i:10)
-i:#  size of initialization vector ([0..127], default is 10)
-p:#  setup passes ([1..4096], default is 20)
-@|-f assume passphrase is plain text in specified passphrase file (see infra)
-s    secure entry of passphrase (do not betray length of passphrase)
-u    unwise (display passphrase)
-o[o] overwrite existing target file (-oo = -o -r)
-r    ignore existing read-only attribute when overwriting or erasing a file
-y    do not copy source date/time stamp to target
-x    disable LFN support even if available

This program implements Cipher Saber as designed by Arnold G. Reinhold.
Note Cipher Saber, though clever in a few ways, is not clever in all ways. ;-)

a) If omitted from command line, passphrase will be asked from keyboard.
b) Should spaces be needed, enclose passphrase with double quotes.
c) Passphrase *is* case-sensitive. It should be created with extreme care.
   The longer the better. Use at least one character of each group :
   lowercase letters, uppercase letters, digits and symbols.
   A DiceWare passphrase may be a good idea. TEXTGEN program can help too.
d) Compression prior to encryption is recommended.
e) Encrypted and decrypted files are created in current directory,
   whatever their source location (this behavior is by design).
f) Any file decrypted with an invalid passphrase will contain garbage.
g) With -@ option, actual passphrase is read from specified passphrase file :
   it will be first non-empty line found after left and right trimming
   (note it cannot be more than 256 bytes long).
   Should passphrase match _"*"_ pattern and thus be double quotes delimited,
   both outer _"_ will be removed.
h) Hexadecimal mode was not thought necessary : use XD utility instead.
i) Both sender and receiver are required to agree on these parameters :
   -p:#, -i:#, passphrase and original filename.

Examples : MSABER -d -cs1 -o diploma1.cs1 diploma1.gif ThomasJefferson
           MSABER -d -p:63 -i:19 diploma3.csx diploma3.gif Eris_1963
           MSABER -d -cs2 diploma4.csx diploma4.gif -f testpp.asc



(* // ---------- "newfont.doc" ---------- // *)


Q&D New VGA font v1.1g by Philippe Guiochon

Syntax 1 : NEWFONT <font> [-verbose] [-autolines] [-25|-50] [-squash]
Syntax 2 : NEWFONT <-preview|-pp> [-clear] [-25|-50]
Syntax 3 : NEWFONT <-reset> [-clear] [-25|-50]
Syntax 4 : NEWFONT <-file:font[.FON]> [-verbose] [-autolines]
Syntax 5 : NEWFONT <-binary>
Syntax 6 : NEWFONT <-256>

<font> is either [1..46] or a font name : COMPUTER, DIGITAL, OLDENGLISH,
GREEK, GREEKSANS, AWARD, ELEGANT, ROUND, MODERN, SANS, READABLE, DEFAULT,
IBM, VGA, CELTIC, HEBRAIC, ROMAN, ROMANL, TEKTITE, CLOUDS, SWISS, SWISSL,
CHERY, CHERYL, MODERNITY, MODERNITYL, BLOCKS, PLAIN, ISO, HELVETIC, HELVBOLD,
HAL, FAT, BLOOD, SERIF, HACKER, AMBASSAD, THIN, SCRIPT, ARIAL,
APPLE, APPLE2, WIN, NOVA, LEGIBLE, ALTSTD.

a) Internal VGA fonts are for 80x25 or 80x28 (not recommended) text modes.
b) Program will try and resize internal fonts if forced to set 50-lines mode :
   however, results will not be a pretty sight, except for these fonts :
   SANS, IBM, VGA, THIN, APPLE, APPLE2, WIN.
c) External VGA fonts may be 80x25, 80x28, 80x50 or 80x43 text modes.
d) -d<ul|ur|ll|lr> option adds one dot to space character
   (-dl = -dul -dll ; -dr = -dur -dlr>).
e) -m<1..6> option selects squashing method.
f) About syntax 4 : external font must be a valid DOS filename.
g) About syntax 5 : redirection to a logfile is recommended.



(* // ---------- "newline.doc" ---------- // *)


Q&D textfile line modifier/viewer v1.1s by Philippe Guiochon

NEWLINE utility may be called with the following options (-?? = more help) :

Syntax 1  : <-a|-append> [-t] [-f] [-n:#] [-f:#] [-k:#] <text> <file(s)>
Syntax 2  : <-p|-prepend> [-t] [-f] [-n:#] [-f:#] [-k:#] <text> <file(s)>
Syntax 3  : <-i|-insert> [-f] <-c:#> <text> <file(s)>
Syntax 4  : <-c|-change> [-e] [-c:#] <oldtext> <newtext> <file(s)>
Syntax 5  : <-r|-remove> [-e] [-c:#] <text> <file(s)>
Syntax 6  : <-d|-delete> [-e] [-c:#] [-j] <text> <file(s)>
Syntax 7  : <-k|-keep> [-e] [-c:#] [-j] [-b] <text> <file(s)>
Syntax 8  : <-v[v]> [-e] [-c:#] [-l] [-t] [-z[z][c]] [-j] [--] <text> <file(s)>
Syntax 9  : <-df|-dl|-vf|-vl> [-l] [-baseline:#] <count> <file(s)>
Syntax 10 : <-u|-unique> [-ignore:#,#] [-only:#,#] [-e] [-y] [--[-]] <file(s)>
Syntax 11 : <-m|-merge> [-c:#] [-t] [-tab] <datafile> <file(s)>
Syntax 12 : <-n|-reinject> <datafile> <file>
Syntax 13 : <-g[:#]|-untab[:#]> <file(s)>

The following options apply to all syntaxes :

  -x   disable LFN support even if available
  -s   allow processing of subdirectories
  -!   filter files using operating system jokers (read note infra)
  -dt  preserve original date/time stamp
  -w   disable ESCape polling (may be necessary with Win9X/WinXP)

a) For each processed file, original version is kept with .BK! extension.
b) Complex <text> specification should be delimited by double quotes ;
   note command line parsing prevents double quotes from being used in <text>.
c) "°n" = $0d0a, "°p" = "%", "°q" = double quote, "°b" = vertical bar ($7c),
   "°[°-/'%]" = symbol, "°[$|x]#[°]" = (hexa)decimal value ($00 not allowed).
d) Tabs are NOT expanded and line length should be less than 4096 characters.
e) Jokers may be "?" (any character) or "*" (any sequence, empty or not) :
   specify -SoL and/or -EoL not to automagically prepend/append "*" to <text>.
   -jj stands for -j -SoL -EoL, and [j[j]] can be appended to -d, -k or -v.
f) -quiet option suppresses final report. Hit ESC to abort when viewing data.
g) Without -! option, "?" and "*" jokers do NOT work the DOS or Win9X way :
   "?" matches exactly one character, "*" matches any sequence of characters.
h) .BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH files are not processed.

Syntax 1 or 2 : prepend or append exact <text> to each line.
 -force allows command to apply to empty or blank lines.
 -trim performs left or right triming preprocessing.
 -n:# specifies auto-incremented number prepended or appended to <text>.
 -f:# specifies auto-incremented number field width ([1..12], default is 4).
 -k:# specifies auto-incremented number increment ([1..100], default is 1).
Syntax 3 : insert <text> at specified <column> in each line.
 -force allows command to apply to empty or blank lines.
 -column:# (from 1 upwards) specifies column to insert <text> at.
Syntax 4 : replace <oldtext> with <newtext> in each line.
 -exact forces case-sensitive operation.
 -column:# (from 1 upwards, "*"=EOL) removes only one occurrence of <oldtext>.
Syntax 5 : remove <text> from each line.
 -exact forces case-sensitive operation.
 -column:# (from 1 upwards) removes only one occurrence of <text>.
Syntax 6 or 7 : filter out or keep each line containing <text>.
 -exact forces case-sensitive operation.
 -column:# (from 1 upwards) requires <text> to be at specified column.
 -joker specifies <text> to be a pattern searched for (read note supra).
 -b preserves empty lines (-keep only).
Syntax 8 : show each line containing <text>.
 -exact forces case-sensitive operation.
 -column:# (from 1 upwards) scans for <text> from specified column.
 -vv forces a display loosely similar to Borland GREP.COM utility.
 -line shows line number.
 -z prevents files with 0 match from being listed.
 -zz acts as -z option, also preventing matching lines from being displayed.
 -zc, -zzc, -cc and -ccc force display of matching lines count.
 -joker specifies <text> to be a pattern searched for (read note supra).
 -- reverses match condition, showing each line NOT containing <text>.
Syntax 9 : delete or show <count> first or last lines, or from specified line.
 If specified as "*", <count> is maximum number of lines.
 -line shows line number.
 -baseline:# (from 1 upwards) specifies line to begin from.
Syntax 10 : filter out duplicate lines, keeping the first occurrence (default).
 File(s) to process MUST be already sorted.
 Optional columns range is either "column,count" or "first..last" ("*"=EOL).
 -ignore:#,# ignores specified columns range.
 -only:#,# uses only specified columns range.
 -exact forces case-sensitive operation.
 -o prepends count of duplicates
 -strict|-y removes duplicate lines, including the first occurrence.
 --[-] reverses process, filtering out single lines (--- = DUPLINES format).
 -uu is a shortcut for -unique -strict|-y.
Syntax 11 : append lines from <datafile> to lines from <file>.
 -column:# (from 1 upwards) pads each line to specified column, if needed.
 -trim performs left and right triming preprocessing to each line.
 -tab uses a tab as separator (default is a space).
Syntax 12 : replace <file> lines with numbered <datafile> lines.
 <datafile> must have been dumped with -line option, <file> must be unique.
Syntax 13 : expand tabs (default tab width is 8 unless specified with -g:#).



(* // ---------- "newname.doc" ---------- // *)


Q&D Filename Modifier v1.3h by Philippe Guiochon

Syntax 1  : NEWNAME [-f] <string> <file(s)> [option]...
Syntax 2  : NEWNAME [-m] <oldstring> <newstring> <file(s)> [option]...
Syntax 3  : NEWNAME <-p[p[p]> <prefix|*> <file(s)> [option]...
Syntax 4  : NEWNAME <-s[s[s]> <suffix|*> <file(s)> [option]...
Syntax 5  : NEWNAME <-i[i[i]]:#> <insertion> <file(s)> [option]...
Syntax 6  : NEWNAME <-z> <substring> <file(s)> [option]...
Syntax 7  : NEWNAME <-c> <oldsubstring> <newsubstring> <file(s)> [option]...
Syntax 8  : NEWNAME <-lc[c]|-uc[c]> <file(s)> [option]...
Syntax 9  : NEWNAME <-n[n]> <prefix|*> <first> <file(s)> [option]...
Syntax 10 : NEWNAME <-t[#]> <file(s)> [option]...
Syntax 11 : NEWNAME <-b|-j> <file(s)> [option]...
Syntax 12 : NEWNAME <-trim|-blanks> <file(s)> [option]...

This program filters out characters from <string> (syntax 1) ;
remaps character(s) from <oldstring> using <newstring> (syntax 2) ;
processes prefixes (syntax 3), suffixes (syntax 4) and insertions (syntax 5) ;
removes substrings (syntax 6) ; changes <oldstring> to <newstring> (syntax 7) ;
changes LFN filenames case to lower or upper (syntax 8) ;
renumbers filenames (syntax 9) ; changes filenames to DOS form (syntax 10) ;
prefixes or suffixes LFN filenames with YMD_HMS datetime stamp (syntax 11) ;
trims spaces at right and left of filenames (syntax 12).

-f         filter out mode (default if two parameters were specified)
-m         remap mode (default if three parameters were specified)
-p[p[p]]   prefix mode (-pp = -d -p, -ppp = -pp deleting length of <prefix>)
-s[s[s]]   suffix mode (-ss = -d -s, -sss = -ss deleting length of <suffix>)
-i[i[i]]:# insert at specified 0-based column mode (-ii:# = -d -i:#)
-z         remove first substring (operation not recursive)
-c         change first oldsubstring to newsubstring (operation not recursive)
-<l|u>c[?] convert to lowercase or uppercase mode
           (-lc and -uc = keep accents, -lcc and -ucc = remove accents,
           -lcf[r] and -ucf[r] = keep French accents)
-az        remove accents while keeping original case
-n[n]      renumber mode (-nn = "-n *" syntax = do not use <prefix>)
-t[#]      truncate LFN format to DOS format mode ([1..8], default method is 1)
-<b|j>     prefix or suffix file datetime stamp to filename
-trim      trim spaces at right and left

-r[r]      do rename file(s) (-rr = create undo ROLLBACK.BAT)
-l         disable LFN support even if available
-??        more help (to be read at least once !)
-d[?]      delete prefix or suffix (-ds = -s -d, -dp = -p -d)
-a         take hidden and system files into account
-o         rename even if new name already exists (previous content lost)
-i         allow renaming to same name
-e         process extension (only when removing, remapping or converting)
-f:#       number field width ([1..12], default is 4)
-k:#       renumbering increment ([1..100], default is 1)
-s<?>[-]   sort when renumbering (n = name, e = extension, z = size, d = date)
-x         prepend renumbered value and <prefix> to <filename> (-n[n] only)
-<y|u>     try and make sure new filename is unique (-t[#] only)
-v         ignore character set validity check

Valid set (DOS) : "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-$!(){}~#&@[]"
Valid set (LFN) : "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-$!(){}~#&@[],;'.+%= "

a) By design, this program requires <file(s)> not to be a directory alone.
b) Any option irrelevant to specified mode command will be silently ignored.
c) Program will handle up to 65530 files. ROLLBACK.BAT name is reserved.
d) Note collisions cannot be previewed : use -r only when sure of results !
e) Auto-numbering "-s *" and "-p *" syntaxes use "_" as a separator.
f) -ppp, -sss and -iii:# options delete # first, last or middle characters,
   where # is length of specified <prefix>, <suffix> or <insertion>.
g) -t1 truncates characters from end of filename ;
   -t2 is -t1 but removes all characters preceding first "-" character if any ;
   -t3 is -t2 but keeps first char of filename ;
   -t4 is -t1 but does not try and preserve trailing digits
   (note -t1, -t2 and -t3 try and preserve trailing digits) ;
   -t4, -t5 and -t6 are identical to -t1, -t2 and -t3
   but they preprocess filenames by removing vowels.
   With all -t[#] options, file extension is just truncated to fit DOS format :
   -e option is therefore ignored.
   Note all -t[#] options ignore filenames already fitting DOS format.
h) Support for escape sequences is minimalist : "°[°-/'%]" inserts symbol,
   while "°[$|x]#[°]" inserts (hexa)decimal character value.
i) Note this program does not support any string joker.

EXamples : NEWNAME -t2 f:\data\pictures\*.*
           NEWNAME -n pic 1 -f:2 *.jpg
           NEWNAME -c iso pim *.mod
           NEWNAME -p m2_ src\*.mod
           NEWNAME -b *.obj



(* // ---------- "nowplus.doc" ---------- // *)


Q&D Now Plus v1.0b by Philippe Guiochon

Syntax 1 : NOWPLUS <days> <hours> <minutes> [-us]

    Add specified days, hours and minutes to current date and time.

Syntax 2 : NOWPLUS <date> <time> <days> <hours> <minutes> [-us]

    Add specified days, hours and minutes to specified date and time.
    Date separator is '-' or '/', and 'yyyy' can be shortened to 'yy'.
    Time separator is ':', and seconds can be omitted.

This program was written for eBayWatcher Vero Biddeuse :
it may be useful for other eBay customers.

a) Please note U.T. (Universal Time) is assumed.
b) Syntax 2 assumes French for D/M/Y format date parsing and messages :
   -us option forces American M/D/Y format date parsing and messages.
   1900 is added to Year if specified without century (i.e. [0..99]).

Examples : NOWPLUS 4 1 0
           NOWPLUS 1/2/63 19h45 12053 0 0
           NOWPLUS -us feb-1-1963 19:45:00 12053 0 0



(* // ---------- "oclock.doc" ---------- // *)


Q&D O'Clock v1.0d by Philippe Guiochon

Syntax : OCLOCK [option]...

    -k    abort on keyboard only
    -i?:# color of Hours/Minutes/Seconds hand
    -ia:# color of marks
    -p:#  color of paper
    -r:#  outer radius of clock (top of marks)
    -r?:# length of Hours/Minutes/Seconds hand
    -la:# length of marks
    -s:#  shape of hands
    -m:#  shape of marks
    -wh:# width of hands
    -wm:# width of marks
    -nb   no borders
    -ib:# border color
    -f    integer minutes hand
    -t    audio ticks
    -u    draw seconds, then minutes, then hours
    -e    emphasis on hours angles (0h, 3h, 6h and 9h)
    -s    skeleton (only borders)
    -c    force full screen refresh (older method, used if hands overlap marks)

Color [0..15], length [0..239], shape [0..2] (rectangle,diamond,triangle)



(* // ---------- "oldnew.doc" ---------- // *)


Q&D identifier/word/sequence replacer v1.1i by Philippe Guiochon

Syntax 1 : OLDNEW [option]... existing replacement infile(s)
Syntax 2 : OLDNEW [option]... existing replacement < infile > outfile
Syntax 3 : OLDNEW <-delete> [option]... existing infile(s)
Syntax 4 : OLDNEW <-delete> [option]... existing < infile > outfile
Syntax 5 : OLDNEW <-ASCII|-OEM>

  -w    process words instead of identifiers
  -r    process raw sequences
  -e    process only exact (case-sensitive) sequence matches
  -s    do not process strings (delimited with either single or double quotes)
  -d    delete any sequence match
  -n:#  upper limit of replacements (default is no limit)
  -v    verbose
  -p:?  replace specified character with "%" in existing and replacement
  -j:?  use joker (matching exactly one character) in existing string
  -f    process all files (default extension protection is ignored)
  -a[a] display ASCII reference set (-aa = decimal)
  -o[o] display Windows OEM reference set (-oo = decimal)
  -lfn  disable LFN support even if available

a) This program replaces a sequence of characters with another one.
b) An identifier starts with a letter, and contains only letters, numbers,
   or the underscore ("_") character.
c) A word is a sequence delimited by spaces, tabs, or control characters.
d) -s option prevents strings content from being modified ;
   note -s and -r options are mutually exclusive.
e) Here are supported escape sequences :
   "°n" = $0d0a, "°p" = "%", "°q" = double quote, "°b" = vertical bar ($7c),
   "°[°-/'%]" = symbol, "°[$|x]#[°]" = (hexa)decimal value
f) Please note CHR(0) character ($00 value) CANNOT be processed :
   it is therefore NOT allowed. Remember this is a TEXT processing utility.
g) For safety, all lines should end with a CRLF sequence.
h) .BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH files are not processed,
   unless -f option is specified.
i) Each original file will be backuped with .BK! extension.

Examples : OLDNEW i index *.MOD
           OLDNEW -r -e Dummy$ bozo$
           OLDNEW -r °$414243°d abcd



(* // ---------- "opgroup.doc" ---------- // *)


Q&D Operation on groups of lines v1.0h by Philippe Guiochon

Syntax 1 : OPGROUP <source> [-g] [option]...
Syntax 2 : OPGROUP <source> <-n> [-k]
Syntax 3 : OPGROUP <source> <string> [-z] [-m] [-x]
Syntax 4 : OPGROUP <source> <-p[p]> [-i] [-c[c]] [-u] [-f]
Syntax 5 : OPGROUP <source> <-s>

This program glues groups of lines for later processing with FCOMP (syntax 1),
inserts an empty line in order to separate groups of lines (syntax 2),
filters out groups not containing <string> (syntax 3),
packs trimmed identical lines keeping one entry prefixed with count
provided <source> has already been sorted (syntax 4),
or swaps first and last lines in DUPLINES generated groups (syntax 5).

    -g    glue groups of lines
    -n    seperate groups of lines
    -z    filter out lines
    -p[p] pack previously sorted identical lines (-pp = -p -f)
    -s    swap first and last lines in DUPLINES generated groups

    -t    glue components with tabulation (default is space)
    -e    enclose components with double quotes
    -r    keep components as remarks
    -b    batch mode (check error code forcing a pause if mismatch)
    -n[n] insert en empty line between groups of lines (-nn = -n -k)
    -k    convert text to lowercase before comparing arguments
    -m    process only groups with exact (case sensitive) <string> matches
    -x    reverse filter (-z only)
    -i    pack identical lines whatever case
    -c[c] pad prefixed count (-cc = pad with " " instead of "0")
    -u    do not add prefix if count equals 1
    -f    alternate prefix format

a) A group is two or more successive lines without an empty line.
   Single lines are ignored. A line can be up to 1024 characters long.
b) Syntax 1 output assumes FCOMP exists (-b option assumes MPAUSE exists too).
c) Syntax 2 creates groups based upon first argument in each <source> line,
   from first char to first space or tab (existing empty lines are preserved).
   This function is best used on lists created with "NEWLINE -u -- -o:1..33".
d) Syntax 5 requires DUPLINES generated groups.
e) Any option irrelevant to syntax is silently ignored.
f) Output should be redirected to a file (whether it is a batch or not).

Examples : OPGROUP dups.f -e -r
           OPGROUP dups.f -b



(* // ---------- "paspeek.doc" ---------- // *)


Q&D Pascal strings finder v1.1e by Philippe Guiochon

Syntax : PASPEEK <file> [<[$]start> <[$]end|L[=][$]length|*>] [option]...

This program extracts PASCAL counted strings found in <first>..<end> range.

-u    search for Unicode strings (default is to search for ASCII strings)
-v[v] show string address and character count (-vv = alternate format)
-q    show double-quoted strings (default is to show raw strings)
-m    more thorough search mode
-b    replace $07 code (bell) with a space
-f[f] fix control chars (except TAB, CR and LF) and CHR(255) (-ff = alt fmt)
-x    disable LFN support even if available

a) <start> is 0-based. <end> can be specified as "*" for "end of file".
   "N=" and "C=" are aliases for "L=".
b) If only <file> parameter is specified, [0..filesize-1] range is assumed.
c) Hexadecimal values are prefixed with "$".
d) Note specifying <start> <end|length> search range is HIGHLY recommended.
e) Length is [1..255] for an ASCII string, [1..65535] for a Unicode string.
f) -f replaces [0..31,255] codes (except 9,13,10) with "¿" CHR(168) ;
   -ff prepends 9 ($09), 13 ($0d), 10 ($0a) with "<TAB>", "<CR>", "<LF>"
   (note CR and LF codes are then dumped as CR+LF sequence for display).
g) If both -b and -f options are specified, -b is applied first.
h) While working, program can be aborted by pressing the Escape key.
i) -m option, however useful in certain cases, is NOT recommended :
   redirected output filesize can grow very large.

Examples : PASPEEK -v -ff wininit.exe 929 2061
           PASPEEK newspeak.exe $989a $bf27
           PASPEEK -u vtuner.exe $4a1c0 $4b4ff



(* // ---------- "PATMATCH.doc" ---------- // *)


Q&D Pattern Match v1.0g by Philippe Guiochon

Syntax : PATMATCH <pattern> [[minimum_]length [maximum_length]] [option]...

  -v[:$]   keep accents, ignore symbols, ignore case (-v:$ = -r -d:$)
  -e:$     alternate dictionary extension (default is ".FRA")
  -d:$     alternate dictionary
  -u       display matches in uppercase instead of default lowercase
  -s       display matches statistics
  -p       paging (-s ignored)
  -w|-pp   paging dividing count of rows by 2 (-s ignored)
  -f[f[f]] display matches according to approximate phonetics
  -z[z]    display matches according to vowels and consonants (-zz = packed)
  -x       disable LFN support even if available

This program scans dictionary entries as to find specified text pattern.

a) Any character of "?.-=_" set matches exactly one single character,
   while any character of "*!$&" set matches any sequence of characters
   (including none at all).
b) Trimmed dictionary entries must use [A..Z] character set only.
c) With any of -v or -v:$ options, dictionary must be DOS ASCII ;
   allowed symbols are "-'." ; allowed characters may be accentuated.
d) Unless specified with a path, dictionary is searched for
   first in current directory then in executable directory.
   "PATMATCH.FRA" is default dictionary.
e) -f = French phonetics, -ff = tweaked Soundex, -fff = original Soundex,
   -z = vowels and consonants, -zz = packed -z.
   -f[f[f]] and -z[z] options require <pattern> not to contain any joker.
   Please note these options are and will remain in beta stage,
   for they are very slow and worse, they are useless.

Examples : PATMATCH -p ad*tion 2 12
           PATMATCH -u ad*t?on 14 -d:english.dic
           PATMATCH -f etre



(* // ---------- "pc2mac.doc" ---------- // *)


Q&D PC2MAC v1.0a by Philippe Guiochon

Syntax : PC2MAC InFile[.ASC] [-o] [-sp] [-qm]

-sp  Section and paragraph symbols are control characters
     in the PC ASCII set. Use this switch if you want PC2MAC
     to convert them to normal characters in the Mac ASCII
     set (default is letting them as control characters).
-qm  Use this switch if you want PC2MAC to convert
     quotations marks to the special set used in Mac ASCII.

Characters which are illegal or without equivalent become "¿",
graphic characters of the PC ASCII set become "+",
LF are ignored.

Converted file will have .MAC extension.



(* // ---------- "pcopy.doc" ---------- // *)


Q&D Path Copy v1.3d by Philippe Guiochon

Syntax 1 : PCOPY <spec> [targetdir] [option]...
Syntax 2 : PCOPY <-@> <@list[.LST]> [targetdir] [option]...

-@        force list mode (thus assuming first parameter is a list)
-s[p|s]   recurse subdirectories (-ss = -sp = -s -p)
-t        test mode
-y|-t-    disable preview/test mode
-o[o][n]  overwrite existing target if any (-oo = overwrite read-only)
-f[n]     freshen existing target only (-fn = -f -n)
-n[o[o]]  do not overwrite target if source is "older or same date" (-o forced)
-j        force -n to check for "older only" instead of "older or same date"
-r[r]     try and automagically rename existing target if any (see infra)
-p[r|p]   do not recreate paths on target (-pp = -pr = -p -r)
-m[m]     move mode, erasing source at copy completion (-mm = erase read-only)
-mo[o][n] shortcut combining -m, -o[o] and -n (-mo, -moon, -mon, -moo)
-i[o|i]   ask user to confirm target overwriting (-ii = -io = -i -o)
-k        keep source RHS flags (default is to clear them)
-d:$      filter according to specified "lower[:|..]upper" date range
          ("*"=today, "$"=same date, "[*]:$"=before or on, "$:[*]"=on or after)
-z:$      filter according to specified "lower[-|:|..]upper" size range
          ("#"=same, "[*]:#"=smaller or equal, "#:[*]"=greater or equal)
-g        do not show copy percentage
-q        alternate display (do not report successful operations)
-u        alternate display (report successful operations only)
-w        list source entries found protected and therefore skipped
-x        ignore existing PCOPY.INI
-swaps    do not default to swapfiles protection
          ("*\386spart.par", "*\win386.swp" and "*\pagefile.sys")
-v[v]     show parameters (-vv = show parameters and terminate)
-!        filter files using operating system jokers (see infra)
-e        disable ESCape polling (may be necessary with Win9X/WinXP)
-l        disable LFN support even if available
-b        do not beep at unexpected choice
-a        audio beep
-copy     shortcut for -i -o -p
-move|mv  shortcut for -i -o -m
-cp       shortcut for -n -p
-xcp      shortcut for -n -s
-mem      ignore any Storage.ALLOCATE() error (unwise !)
-??[?]    (even) more help (to be read at least once !)

a) With syntax 1, this program is SIMILAR to COPY/MOVE/XCOPY/REPLACE.
   However, note that renaming source(s) using joker(s) is NOT supported :
   target destination MUST be a DIRECTORY (automatically created if necessary).
   Moreover, empty source subdirectories are NOT recreated.
b) With syntax 2, this program copies each canonical file found in <list>
   (jokers and directories not allowed) preserving path information
   (unless -p was specified) but obviously ignoring unit.
c) -p option (required for COPY-like mode) does NOT force -r automatically.
d) By design, -j option still requires -n option.
e) Without -! option, "?" and "*" jokers do NOT work the DOS or Win9X way :
   "?" matches exactly one character, "*" matches any sequence of characters.
f) Note joker matching includes extension if extension is omitted.
g) Up to 64 entries (M2 jokers supported) may be protected against access,
   if they are specified in PCOPY.INI file located in executable directory.
   If such a file does not exist, these entries are protected by default :
   "*\386spart.par", "*\win386.swp" and "*\pagefile.sys".
   Note protection applies to sources ONLY : targets are NOT protected.
h) Default display enables both -q and -u options ; redirection ignores them.
i) -t option can be set as default with PCOPY=T environment variable ;
   default mode can still be reset from command line with -y or -t- options.
j) "$DEL_ME$.TMP" filename is reserved when processing LFNs.
k) -r option tries and appends "(#" (DOS) or "(#)" (LFN),
   where "#" is in the [1..9999] range. Original DOS f8 may be truncated.
   Note -rr option is LFN-specific and appends "(####)" when renaming.
l) -z:# supports multiples of 1024 (Kb, Mb, Gb) and of 1000 (K, M, G).
   Lower and upper range values will be swapped if necessary.
m) -mem option may help with huge Win9X and WinXP directories,
   although all matching files will not be processed.
n) PCOPY.INI was found in executable directory :
   protection against access is available for its entries (unless -x).

Examples : PCOPY /oon /u @backup.lst f:\backup
           PCOPY c:\tools\*.exe c:\z /s /k /v /q /x
           PCOPY c:\txt\*.w51 g:\z\ /o /n /j

Here is an example of PCOPY.INI file :

   ;
   ; Entries matching these patterns will be ignored by Copy and Move.
   ; Note protection applies to sources ONLY : targets are NOT protected.
   ; M2 jokers are allowed :
   ; "?" matches exactly one character, "*" matches any sequence of characters.
   ; Entries may be enclosed with double quotes if necessary.
   ;
   ; Swap files should always be protected in this INI file :
   ; the One and Golden Rule of Indifference should always rule.
   ;
   *\386spart.par
   *\win386.swp
   *\pagefile.sys
   ;
   ?:\
   c:\dos\*
   "c:\windows\*"
   "*\index.dat"
   *\desktop.ini



(* // ---------- "pcx2bj.doc" ---------- // *)


Titre   : Q&D Impression d'un fichier PCX monochrome v1.0d par Philippe Guiochon

Syntaxe : PCX2BJ <fichier[.PCX]> <sortie> [option]...

Utilité : imprimer un fichier PCX monochrome sur une Canon BJ200 en mode LQ

Options : /a:#  nombre d'aiguilles (8 ou 24 -- 24 par défault )
          /d:#  densité (60, 80, 90, 120, 180, 240 ou 360 -- 180 par défaut)
          /x2   doublement des pixels en X
          /y2   doublement des pixels en Y
          /xy2  doublement des pixels en X et en Y
          /ch   centrage horizontal
          /cv   centrage vertical
          /c    centrage vertical et horizontal
          /lm:# marge de gauche en millimètres (4 par défaut)
          /tm:# marge du haut en millimètres (13 par défaut)
          /i    inversion des pixels monochromes
          /n    aucune demande de confirmation avant l'impression
          /e    éjection de la page après impression
          /j    éjection de la page avant impression
          /p    impression (sinon, simple analyse préliminaire de l'image)

Note 1  : Les modes légaux sont 8*60, 8*120, 8*240, 8*80, 8*90, 24*60, 24*120,
          24*90, 24*180 et 24*360, les seuls modes utiles sont 8*60 et 24*180.
Note 2  : La zone non-imprimable est de 4 mm à gauche, de 13 mm en haut.
Note 3  : En 640x480 et 800x600, les paramètres de l'exemple sont recommandés.
Note 4  : Seule l'imprimante LPT1 est officiellement prise en compte. ;-)

Exemple : PCX2BJ phg.pcx lpt1 /xy2 /c /a:24 /d:180



(* // ---------- "peek.doc" ---------- // *)


Q&D Peek v1.2f by Philippe Guiochon

Syntax : PEEK <file(s)> [option]...

This program tries and extracts strings from <file(s)>.

  -c       filter as to keep only seemingly C ($00 terminated) strings
  -d       filter as to keep only seemingly DOS/BIOS ("$" terminated) strings
  -i[i][n] filter as to keep only strings about program and copyright
           (-u forced, -ii = ignore "#.#[.#] and "#,[ ]#,[ ]#" patterns).
  -w[w]    search using Win16 character set (-ww = -w -y)
  -u[u]    search using Win32 Unicode character set (-uu = -u -y)
  -fr      use French character set tables
  -f       filtered character set producing less noise (not recommended)
  -y       remap output from OEM to ASCII (XLAT WIN2PC emulation)
  -z       remap output from ASCII to OEM (XLAT PC2WIN emulation)
  -m:#     minimum string length required [2..128], default is 3
  -s:#     maximum length of sequence [3..16384], default is 4096
  -p:#     minimum percentage of letters and digits required, default is 0
  -x       show string hexadecimal representation
  -s       show string type ("(A)" for ASCII, "(u)" for Unicode)
  -a[a]    display string offset in file (-aa = -a -s)
  -e       exact raw output (no CR added for very long sequences)
  -v       verbatim (no CR added at all)
  -q       enclose each string with double quotes
  -j       prepend <TAB>, <CRLF>, <CR>, <LF> or <BS> to matching sequences
  -t       terse mode
  -e:$     log file extension (default is "LOG")
  -o       overwrite any existing log file
  -r       try and avoid collisions by renaming results to ._## if possible
  -b       beep when finished
  -n       dump data to screen without creating log (-t forced)
  -lfn     disable LFN support even if available

a) Strings may contain CRs, LFs and TABs.
b) Program will scan for $?? and $?? $00 ($00??) Unicode characters.
c) Without -n option, program creates *.LOG logs in current directory.
d) -y and -z options emulate XLAT utility.
e) -i option keeps only strings containing these substrings :
   "copyright", "copr.", "(C)", "company", "revision", " by " ;
   "version", "ver.", "ver", "v.", "v" + any number of spaces +
   "#[.#[.#]]" (where # is any number of digits) ; "#.#[.#]", "#,[ ]#,[ ]#".
f) Paging with -n option can be handled by MORE filter command.
g) Note -c alone, -u alone and -c -u together may give different logs.
h) Note Unicode strings may look corrupt when they just have unexpected chars
   (the single quote character being coded as $2019 instead of $0027, etc.) :
   preprocess any such file with OLDNEW utility in binary mode.



(* // ---------- "pending.doc" ---------- // *)


Q&D Pending delete (delwatched) entries lister v1.0h by Philippe Guiochon

Syntax : PENDING <[u:]\[path]>... [option]...

  -c[c|v] count pending files (-cc = -c -v)
  -s      do it safe, NOT using alternate ND7 call (214E/214F with CX=$0088)
  -u      display filenames in uppercase
  -x      scan specified directory only (no recursion)
  -v      verbose

a) Program will not handle more than 16000 directories.
b) With -c[c|v] option, return code is 255 if no pending file, 128 if any.
   Any other code is not related to this option.
c) Program should only be run from real DOS by Digital Research or Novell.



(* // ---------- "pfire.doc" ---------- // *)


Q&D Plasma Fire demo v1.1b by Philippe Guiochon

Syntax : PFIRE [option]...

  -a   show palette until keypress or 10 seconds
  -z   end on mouseclick too
  -p:# color palette (0..9=rgbRGB1230)
  -i:# intensity
  -c   coarser resolution
  -l:# lower intensity
  -u:# upper intensity
  -r:# rounds
  -d   downwards

[rgbRGB1230]-palette, [d]-toggle direction, [c]-toggle coarseness
[PageUp|PageDown|Home|End]-intensity, [Space]-pause, [Escape|Enter]-end



(* // ---------- "picdims.doc" ---------- // *)


Q&D Show Pictures Dimensions v1.1 by Philippe Guiochon

Syntax : PICDIMS <pathspec> [option]...

This program tries and shows dimensions for the following formats :
GIF, PNG, JPG, PCX, BMP, TGA, DDS, WEBP, AVI, BIK and MP4.

  -f[f] pad "#### x ####" Width x Height dimensions using "0" instead of " "
        (-ff = no padding)
  -l    list all files (whether recognized or not)
  -ll   list files only if unrecognized format
  -lll  list files only if mismatch between extension and format
  -t    terse listing (-tl = -lt = -l -t)
  -b    batch-ready listing (-lllb = -blll = -lll -b)
  -#    list file only if one dimension is greater than specified screen size
        (320x[2]00  640x[4]80  800x[6]00  1024x[7]68  1280x[9]60  1600x[1]200)
  -s:#  list file only if filesize is greater than #
  -w:#  list file only if width is greater than # (-x:# = -w:#)
  -h:#  list file only if height is greater than # (-y:# = -h:#)
  -x?y  list file according to width compared to height
        (g = greater than, e = equal to, s = smaller than)
  -i[i] invert results for filter (-i = dimensions, -ii = filesize)
  -s    show filesize
  -z    ignore extensions not matching valid ones
        (.GIF,.PNG,.JPG,.PCX,.BMP,.TGA,.DDS,.JPEG,.WEBP,.AVI,.BIK,.MP4)
  -c[z] show DIV 8 + delta values (-cz = show only if both deltas equal 0)
  -k[z] show DIV 2 + delta values (-kz = show only if both deltas equal 0)
  -d[?] show only deltas (-dc = -d -c, -dk = -d -k)
  -x    disable LFN support even if available

a) For obvious reasons, program will not try and analyze files matching
   *.SWP, *.PAR and *\PAGEFILE.SYS specifications.
   Files matching *.LST, *.RPT and *.BAT will be skipped too.
b) Dimensions formatting assumes both width and height are within [0..9999].
c) -b option requires -lll option and forces -t option.
   Output should be redirected to a file with one of skipped extensions.
   ".RAW" extension means file format was not recognized.
d) -s:# supports multiples of 1024 (Kb and Mb) and multiples of 1000 (K and M).
e) JPG, PCX, TGA, DDS, WEBP and MP4 support is limited : however unlikely,
   unexpected results may happen (especially with Adobe-generated files).
   MP4 files are not fully scanned : valid ones may not always be recognized.



(* // ---------- "picfind.doc" ---------- // *)


Q&D Picture Finder v1.0t by Philippe Guiochon

Syntax 1 : PICFIND <mode|*|$> <file> [option]...
Syntax 2 : PICFIND <-l>

-l   list compatible VESA modes (8 BPP and 32 BPP) then terminate
-s   safer and slower display (default is faster)
-m:# 16 or 32 bits color mode (default is 1)
     1=RGBA 8:8:8:8, 2=BGRA 8:8:8:8, 3=ARGB 8:8:8:8, 4=ABGR 8:8:8:8,
     5=RGB 8:8:8, 6=BGR 8:8:8, 7=RGB 5:6:5, 8=BGR 5:6:5,
     9=RGB 5:5:5, 10=BGR 5:5:5,
     11=RGBA 4:4:4:4, 12=BGRA 4:4:4:4, 13=ARGB 4:4:4:4, 14=ABGR 4:4:4:4,
     15=RGB planar, 16=BGR planar
-a:# palette mode (1=RGB, 2=BGR), default is 1
-x   fix palette dividing RGB components by 4 ([$00..$ff] --> [$00..$3f])
-p:# position in <file> [0..filesize-1]
-w:# window width [1..screenwidth], default is screen width
-h:# window height [1..screenheight], default is screen height
-k:# motion multiplier [1..128], default is 8
-d   half-window height motion (default is full window height)
-k   enable keyboard buffer
-e   assume big-endian Motorola data (default is little-endian Intel data)
-r   negative image
-f   flip image
-t   do not fix palette RGB components when saving to Targa 256 colors
-2   force 25 lines text mode
-5   force 50 lines text mode
-g   force text mode for help and hexadecimal dump (default is graphics screen)
-w   do not wait for video retrace when clearing text screen
-v   display current parameters at program exit
-n   disable LFN support even if available
-??  more help

a) This program does require a VESA BIOS... and a VERY fast processor.
b) VESA <mode> can be specified as a (hexa)decimal ("$" prefix) value
   or as WIDTHxHEIGHTxBPP. If specified as "*" or as "$",
   program will get mode from optional PICFIND.INI in executable directory.
c) Directory listings (DOS f8.e3 format) apply to current directory only ;
   due to FAT limitations, <file> will not be processed if longer than 2Gb.
d) Pictures and 768 bytes RGB palettes are saved to current directory :
   pictures as PIC*.TGA, palettes as PAL*.PAL.
e) All write operation parameters are appended to PICFIND.LOG logfile.
f) If graphics screen cannot fit 25*80 characters, -g option is forced.
g) When entering a value or shelling to DOS, text mode is forced.
h) Hexadecimal dump moves depend upon selected data size.
i) Endian toggling applies to 2 and 4 bytes pixel sizes only.
j) Planar mode viewing requires picture width and height to be correct.

Examples : PICFIND 800x600x32 beach /w:256 /h:256 /p:$69992d /m:2
           PICFIND $103 dungeon /w:256 /h:256 /p:$5488aa8

Here are keys available while viewing <file> :

[J][/][*][L] [alt-W] window width / specify new window width
[I][-][+][K] [alt-H] window height / specify new window height
[0][.] [PgUp][PgDn]  move one byte / move (half-)window height
[arrow_keys]         move # pixels/lines (shift=1)
[alt--][alt-+]       decrease or increase # count of pixels and lines
[Home] [End] [alt-P] start of file / end of file / enter new file position
[[shift-]Tab]        888A A888 888 565 555 444A A444 palette planar ([F1..F9])
[alt-G] [alt-O]      text mode (toggle) / text mode video retrace (toggle)
[B][W][Q] [1..9]     hexadecimal dump (bytes, words, double words) / percentage
[^R] [V] [X]         restore system pal / show pal / fix pal (RGB DIV 4)
[P][Delete] [)][=]   read or rewind 768 / read or rewind 1024
[Y] [U] [alt-Y]      read 768 & rewind 767 / read 1024 & rewind 1023 / user pal
[R] [^F] [^E]        negative (toggle) / flip (toggle) / endian mode (toggle)
[^V] [^B] [^N]       brightness (decrease / reset / increase)
[^S] [^P] [alt-L]    save window or 768 bytes RGB palette to file / user file
[^L] [F]             25|50 lines (toggle) / half|full window motion (toggle)
[?] [,] [^F10] [Esc] show help / show parameters / shell to DOS / quit to DOS



(* // ---------- "plasma.doc" ---------- // *)


Q&D Plasma v1.0a adapted by Philippe Guiochon

Syntax : PLASMA [-p] [-w] [-z] [-c:#]

  -p   show palette until keypress or 10 seconds
  -w   show world until keypress or 10 seconds
  -z   end on mouseclick too
  -c:# color palette



(* // ---------- "playwav.doc" ---------- // *)


Q&D PlayWAV v1.1f by Philippe Guiochon

Syntax : PLAYWAV <file[.WAV]> [option]...

  -p    display current SoundBlaster parameters then exit
  -i    display infos about specified file then exit without playing it
  -t    do not display infos about played file
  -lfn  disable LFN support even if available

a) This program requires a SoundBlaster Pro (or better) compatible card
   and it assumes BLASTER environment variable is correctly set.
b) Only 8-bits PCM data is supported for now... and for ever ! ;-)
c) In order to prevent computer freeze, no sound will be played from Windows.



(* // ---------- "popdir.doc" ---------- // *)


Q&D Pop Directory v1.0g by Philippe Guiochon

Syntax : POPDIR [-list|-zero|-keep]

This program goes back to latest saved drive and directory.

a) ~POPDIR.TMP companion data file will be located in directory
   specified by any of the following environment variables :
   PUSHPOP, TMP, TEMP, TMPDIR or TEMPDIR (in that order).
b) Note storage directory is assumed to exist.



(* // ---------- "poweroff.doc" ---------- // *)


Q&D Power OFF for Advanced Power Management BIOSes v1.0a by Philippe Guiochon

Syntax : POWEROFF <-yes|-test> [-override]

-y[y|o] do actually turn system off (safety measure)
-t      do not actually turn system off (test mode)
-o[o|y] enable APM BIOS functionality even if it is currently disabled

Note -y[y|o] and -o[o|y] options stand for "-y -o" command line.



(* // ---------- "prephidn.doc" ---------- // *)


Q&D "Hidden" words preprocessor v1.0c by Philippe Guiochon

Syntax : PREPHIDN <file[.TXT]> <-n|-l|-f|-e> [-o] [-v]

This program processes a Bible DOS ASCII file for later use
by these two companion (un)utilities : FINDHIDN and SHOWHIDN.
The three programs have been written in order to confirm
the nonsense of "hidden" words in the Bible or in any long text.
Note -k option expects a filtered Kasimirski French Alcoran file.

Here are processing steps : 1) each character is converted to lowercase
ignoring accents and diacritical signs ; 2) each "æ" is expanded to "ae" ;
3) each "*#:#" verset header pattern is removed ("#" being any number) ;
4) each character not belonging to the [a..z] set is filtered out.

Note processed files are no longer human readable.

    -n    create .NEW from a normal file (no verset header to remove)
    -l    create .LAT from a Latin Bible file ("#:#" header)
    -f    create .FRA from a French Bible file ("#:# "header)
    -e    create .KJB from an English Bible file ("*#:#" header)
    -k    create .COR from Kasimirski French Alcoran file ("#. " header)
    -o[o] overwrite existing target (-oo = overwrite read-only target)
    -v    verbose
    -sa   do not sort filenames alphabetically

Examples : PREPHIDN GENESIS -l -o
           PREPHIDN JOKES*.TXT -n -o -v



(* // ---------- "procdups.doc" ---------- // *)


Q&D Process duplicate files v1.2h by Philippe Guiochon

Syntax : PROCDUPS <specification>... [option]...

  -z:#  ignore file if its filesize is greater than #
  -z    quickest check using filesize only
  -q    quicker check using filesize, CRC32 and CRC32sigma
  -s    safest and slowest check using SHA-1
  -t    terse mode
  -e    force @ECHO OFF in batch file (default is @ECHO ON)
  -del  immediately delete duplicates without creating DELTHEM.BAT batch file
  -r    delete read-only files (provided -d was specified)
  -a    take hidden and system files into account
  -k    create KILLTHEM.BAT batch file, using DEL command
  -c    create COPYTHEM.BAT batch file, using COPY command
  -m[$] create MOVETHEM.BAT batch file, using MOVE command
  -l[?] create LISTTHEM.BAT batch file, using ECHO command (-e forced)
        (-lu = uniques, -lr = references, -ld = duplicates, -ll = -lr -ld)
  -u    display filenames in uppercase (LFNs are not affected)
  -o    do not try and favor first specification
  -x    disable LFN support even if available (result replacement ONLY !)

a) This command creates a batch file to delete/copy/move duplicate files.
b) Default check uses MD5 fingerprints.
c) Default is to delete duplicates except one copy of each unique file,
   while -k, -c and -m[$] options process all duplicates.
d) -l option lists all files ("!!" = reference duplicate, "==" = duplicate).
e) If LFN support is available, and if -x option was NOT specified,
   program will replace each f8e3 DOS result with its matching LFN form
   (LFN form will be automagically delimited with double quotes).
f) Should program be aborted with ESCape key, return code will be 255.
g) Prior to v1.2 and its "modern" dynamic storage, program was 7 times faster.



(* // ---------- "pulsar.doc" ---------- // *)


Q&D Pulsar demo v1.0a by Philippe Guiochon

Syntax : PULSAR [option]...

  -a   show palette until keypress or 10 seconds
  -z   end on mouseclick too
  -p:# color palette (0..7=rgbRGB*$)
  -d   diagonal cross fade (default is normal cross fade)
  -w:# wait ([0..50], default=0)
  -i:# RGB ink color (user palette) -- hex prefix is $
  -f:# RGB ink to fade to color (user palette) -- hex prefix is $
  -x   double smoothing

[nd]-normal/dithered smooth, [ot]-one/two passes, [Escape|Enter]-end



(* // ---------- "pushdir.doc" ---------- // *)


Q&D Push Directory v1.0e by Philippe Guiochon

Syntax : PUSHDIR [path] [-list|-zero]

This program saves current drive and directory,
then it tries and changes to optional path (if specified),
returning 255 error code if operation was not possible for any reason.

a) ~POPDIR.TMP companion data file will be located in directory
   specified by any of the following environment variables :
   PUSHPOP, TMP, TEMP, TMPDIR or TEMPDIR (in that order).
b) Note storage directory is assumed to exist.



(* // ---------- "qdtitle.doc" ---------- // *)


Q&D PCX Title v1.0d by Philippe Guiochon

Syntax : TITLE [source[.PCX]]

a) Source picture file must be a 320x200x256 PCX file ;
   it may be appended to executable using CONCAT utility in binary mode.
b) A pixel is on or off : its color is ignored ;
   for best effect, a black background is recommended.



(* // ---------- "quiz.doc" ---------- // *)


Q&D World's Smallest Political Quiz v1.0b

Syntax : QUIZ [-w:#] [-i:#] [-m:#] [-d:datafile[.DAT]] [-t] [-c:#]

  -w:# line width (default is 74)
  -i:# maximum pause for intro ([0..30], 0=infinite, default is 5)
  -m:# maximum pause for map ([0..30], 0=infinite, default is 0)
  -d:$ data file (default is QUIZ.DAT)
  -t   do not show graph (640x480x256 PCX background file with 16 colors)
  -c:# dot color

If needed, you may adjust score dot position with -x:#, -y:# and -k:# options.



(* // ---------- "quizyn.doc" ---------- // *)


Q&D Yes/No Quiz v1.0a by Philippe Guiochon

Syntax : QUIZYN [-d:datafile[.DAT]] [-l:logfile[+extLOG+]] [option]...

This is a computerized Yes/No quiz.

  -d:$ data file (default is QUIZYN.DAT)
  -l:$ log file (default is data file with .LOG extension)
  -o   do not shuffle questions
  -s   save results to log file file
  -r   resume using data from log file
  -w:# line width (default is 74)



(* // ---------- "REBOOT.doc" ---------- // *)


Q&D Reboot v1.0 by Philippe Guiochon

Syntax : REBOOT [-]<cold|warm|io>[!!!] [-yes|-!!!] [-grace:#]

a) For safety and by design, actual reboot requires -yes option or !!! form
   (return code is 255 is reboot was not performed).
b) Grace delay (in seconds) should belong to [0..30] range, default is 10.



(* // ---------- "REG2TXT.doc" ---------- // *)


Q&D Registry dump to text 1.0a by Philippe Guiochon

Syntax : REG2TXT <infile> <outfile>

a) <infile> must be a REGEDIT exported dump (Win9X format).
b) Note sections without value are ignored.



(* // ---------- "remmod.doc" ---------- // *)


Q&D M2 remarks and strings processor v1.0n by Philippe Guiochon

Syntax 1 : REMMOD <m2_source[.MOD]> [-q]
Syntax 2 : REMMOD <m2_source[.MOD]> <remarks_file>
Syntax 3 : REMMOD <m2_source[.MOD]> <@|-w>
Syntax 4 : REMMOD <m2_source[.MOD]> <!|-f>
Syntax 5 : REMMOD <m2_source[.MOD]> <$|-c>
Syntax 6 : REMMOD <m2_source[.MOD]> <#|-x[x]> [-k]
Syntax 7 : REMMOD <m2_source[.MOD]> <&|-s[s]> [-t] [-n]
Syntax 8 : REMMOD <m2_source[.MOD]> <=|-z>

    This program processes Modula-2 *.MOD files.

    It dumps all remarks enclosed or not (-q) with double quotes (syntax 1) ;
    replaces lines using edited remarks enclosed with double quotes (syntax 2)
    provided lines have been dumped using syntax 1 first ;
    dumps code removing "Who When What" history header (syntax 3) ;
    removes "Who When What" history header from source (syntax 4) ;
    warns about any data left after end of program code (syntax 5) ;
    remove all remarks from source (syntax 6),
    possibly keeping separation lines (-k) ;
    dumps all lines containing strings whether double- or single- quoted
    (syntax 7), possibly trimming lines (-t) or keeping only strings (-n) ;
    deletes all data left after end of program code (syntax 8).

a) Source code is assumed to be correct (its compilation should be a success).
b) Syntax 1 flags each dumped line with a marker in this priority order :
   "::" = code+remark ; "++" = remark ; "!!" = between remarks
c) Syntax 2 requires edited remarks to keep their line number and marker ;
   only text between outer double quotes may be changed (this is by design).
d) All syntaxes (except syntax 2) can process up to 200 files.
e) Syntax 4 keeps each original file with .ORG extension :
   other syntaxes (except syntax 2) dump processed source files to screen.
   Should more than one source file be processed, this separator is inserted :

   (* =========::: "$" *)

   where $ is source filename.
f) Syntax 6 can preserve separation lines remarks made only of "-" or "=".
g) Syntax 7 dumps any remark containing a string, including Modula-2 comments.
h) Whatever the syntax, -lfn option disables LFN support even if available.
i) Here are skipped extensions :
   .COM,.EXE,.DLL,.OVR,.OVL,.DRV,.VXD,.BIN,.ZIP,.ARJ,.LZH
j) Redirection, DIRBAT, WITH, and USERBRAIN utilities should help. ;-)
k) This program was written for TopSpeed J.P.I. Modula-2 source code,
   but it should be useful for newer Modula-2 compilers.



(* // ---------- "reserve.doc" ---------- // *)


Q&D Space Reserver v1.2b by Philippe Guiochon

Syntax 1 : RESERVE <size> <file> [value] [option]...
Syntax 2 : RESERVE <*> <file> [value] [option]...
Syntax 3 : RESERVE <[$]!> <file> [value] [option]...

  -o      overwrite existing <file>
  -v      verbose
  -ts     TopSpeed random library (default)
  -qd     Q&D Tools random library
  -n:[$]# create # files ([1..999] or [$1..$FFF]), syntax 1 only)
  -x      disable FAT32 support even if available
  -d      do no try and convert LFN path to DOS format (only with -l)
  -l[fn]  disable LFN support even if available (-ll = -l -d)

With syntax 1, <file> is created with specified <size>.
With syntax 2, <file> is created using free space size (up to 2 Gb).
With syntax 3, program creates as many files as needed to fill free space
(extension will be incremented from ".001" upwards, upper limit being
either ".999" for "!" command or ".FFF" for "$!" command).

a) Optional value specifies (hexa)decimal byte value filling created file(s),
   "*" or "?" specifying random values.
b) Unit is either default unit or unit specified in <file> name.
c) Maximum filesize is limited to 2147483647 bytes (2 Gb).
   Note <size> may have any of <Kb|Mb|Gb> suffixes (multiples of 1024),
   or <K|M|G> (multiples of 1000).
d) With -n:[$]# option, extension will be incremented from ".001".
   Upper limit is ".999" if # is a decimal number,
   or ".FFF" if # is a hexadecimal number with "$" prefix.
e) Should -l option be specified with a system supporting LFNs,
   user must specify a DOS-compatible <file> name
   (unless any of -d or -ll options was specified,
   program will try and convert <file> name to DOS f8e3 format,
   but user should not rely on this feature for path portion).
f) From Win 9X, program calls interrupt $21 with AX=$7303 ;
   if -x option was specified, it uses regular AH=$36 DOS call.

Examples : RESERVE 2048 filler.dat ? -qd
           RESERVE $8000 filler.hex $aa
           RESERVE * filler.bin 255
           RESERVE ! filler $ff
           RESERVE 1963Mb filler.1
           RESERVE -v -o 1963M delme.2
           RESERVE 1024 delme -n:200
           RESERVE $! filler $aa



(* // ---------- "restamp.doc" ---------- // *)


Q&D ReStamp v1.0b by Philippe Guiochon

Syntax : RESTAMP <filespec|@filelist[.LST]> [-d:$] [-y]

  -d:$ base date (dd-mm-yyyy format, * = today, default is 1-Feb-2063)
  -y   actually perform update

This program modifies date and time stamps of specified files :
time is renumbered from 00:00:00 to 23:59:58 with a 2 seconds increment,
following the original directory or filelist order.

A filelist should contain either canonical pathnames,
or mere filenames to be searched for in current directory.
Jokers are not allowed in filelist. Read-only attribute is ignored and lost.

In order to reset original stamps, redirect output to a file :
note some editing will be required (TOUCH or DTSYNC will be useful).



(* // ---------- "RLETOLIF.doc" ---------- // *)


Q&D RLE to LIF format converter v1.0 by Philippe Guiochon

Syntax : RLETOLIF [option]... <file[.RLE]>

This program creates a .LIF file from a .RLE file.

  -o overwrite .LIF target file
  -p replace #P with #C in target file
  -x disable LFN support even if available



(* // ---------- "rndgen.doc" ---------- // *)


Q&D Random Number Generator v1.1f by Philippe Guiochon

Syntax 1 : RNDGEN <lower> <upper> [-g:#] [-v[v]]
Syntax 2 : RNDGEN <lower> <upper> <length> <file> [-g:#] [-o] [-pi] [-m]
Syntax 3 : RNDGEN <-t[t]|-y[y]|-u[u]> [-g:#] [-x]

This program returns a random number in errorlevel (syntax 1),
creates a DOS <file> of specified <length> filled with random bytes (syntax 2),
or shows an unscientific randomgram for specified random generator.
Generated random number will belong to [<lower>..<upper>] range.

  -a    create an ASCII file (-pi ignored, default file is binary)
  -t[t] 320x200x4 display (-t = immediate color, -tt = progressive color)
  -y[y] 640x480x4 display (-y = immediate color, -yy = progressive color)
  -u[u] 320x200x8 display (-u = immediate color, -uu = progressive color)
  -g:#  random generator ([1..6] range, default is 1)
  -v[v] (very) verbose (-v forced with syntax 2)
  -o    overwrite existing <file> if any
  -pi   compute PI value
  -m    show missing byte values
  -fix  force xmax and ymax to 255 if larger
  -p:#  palette ([0..7], default is 0)

a) Please note program always returns 0 after an error or after help screen.
b) Without -a option, <lower> and <upper> values must belong to [0..255] range.
   Note with -a option, <length> specifies the count of entries to create.
c) "." and "," characters, if any, are removed from <length> parameter.
d) Random generators : 1 = TopSpeed, 2 = shuffled TopSpeed,
   3 = Knuth (additive congruential), 4 = Marsaglia,
   5 = Lehmer (linear congruential), 6 = Jenkins (I.S.A.A.C.),
   7 = JSF32, 8 = JSF16, 9 = JSF8.
   Note code for 3..4 and 6..9 seems correct but has not been fully checked.
e) If conflicting options are specified (random generator, display, palette),
   program will use the last specified one.
f) -t[t], -y[y] and -u[u] displays respectively use 16, 16 and 256 colors.
   Any key exists -t[t], -y[y] and -u[u] displays.
   Note -fix option is required for 8 bit random generators.
g) One useless option exists for compatibility with RNDGEN prior to v1.0b :
   -w uses older value for random generator warmup.



(* // ---------- "roman.doc" ---------- // *)


Q&D Roman Numerals Converter v1.0 by Philippe Guiochon

Syntax 1 : ROMAN <number>... [option]...
Syntax 2 : ROMAN <first..last> [option]...

With syntax 1, this program converts a number from decimal to roman numerals
and from roman numerals to decimal. With syntax 2, it converts a range,
provided it is a valid one.

   -l show output roman as lowercase roman (default is uppercase)
   -u show input roman as uppercase (default is lowercase)

a) Note valid range for roman numerals is [1..3999].

Examples : ROMAN -l 1963 3888
           ROMAN -u mcmlxiii mmmdccclxxxviii
           ROMAN 1..3999



(* // ---------- "SEGCRC.doc" ---------- // *)


Q&D Segmented CRC32 v1.1 by Philippe Guiochon

Syntax 1 : SEGCRC [-b] <file>... [option]...
Syntax 2 : SEGCRC [-b] [-@] <[@]filelist> [option]...
Syntax 3 : SEGCRC <-c> [option]...

This program builds (syntaxes 1 and 2) or checks (syntax 3) a log file
(default is SEGCRC.LOG) containing CRC32s for segmented portions of file(s).

  -b    build log file (default command)
  -c    check log file (default is SEGCRC.LOG)
  -l:$  user-specified log file (".LOG" highly recommended)
  -s:#  segment size from 1 to 1024 Kb (default is 2)
  -@    force list mode (thus assuming first parameter is a filelist)
  -n    compute normal unsegmented CRC32 for whole file (-s:# ignored)
  -o    overwrite existing log file (-oo = overwrite read-only)
  -v    verbose processing
  -w    display filenames in lowercase
  -u    display filenames in uppercase
  -a    audio warning
  -x    disable LFN support even if available

a) This program processes files (log and data) in current directory only.
b) When building a log file, any file specification without match is ignored.
c) Any option irrelevant to command (-build or -check) is ignored.
d) With syntax 2, this program processes each entry found in <filelist>
   (jokers and directories not allowed, but paths are).
e) The following patterns are always ignored :
   *.LOG,*.TMP,368SPART.PAR,WIN386.SWP,PAGEFILE.SYS,HIBERFIL.SYS



(* // ---------- "setvmode.doc" ---------- // *)


Q&D set video text mode (VGA or VESA) v1.0k by Philippe Guiochon

Syntax 1 : SETVMODE < 80x25 |  80x28 |  80x30 |  80x43 |  80x50 >
           SETVMODE < 80x60 | 132x25 | 132x43 | 132x50 | 132x60 >
           SETVMODE <  $108 |   $109 |   $10a |   $10b |   $10c >

Syntax 2 : SETVMODE <[$|0x]mode[h]> [-c|-c:start,end]

Syntax 3 : SETVMODE <-i[vbe2] [-v[v[v]]] [-x] | -v:[$|0x]mode[h]>

Syntax 4 : SETVMODE <-list>

Syntax 5 : SETVMODE <-c:start,end>

a) Note that a VESA text mode may be available, and yet be unsupported by BIOS.
b) Standard VGA BIOS is used for [$00..$ff], VESA BIOS for [$100..$1ff,$81ff].
c) Cursor redefinition may need experimentation for start and end values ;
   it is not permanent, for SETVMODE is not a TSR.



(* // ---------- "shademo.doc" ---------- // *)


SHA-1 test suite



(* // ---------- "showhidn.doc" ---------- // *)


Q&D Show "hidden" words v1.0c by Philippe Guiochon

Syntax : SHOWHIDN <textfile> [-a:lines] [-s:offset] [-c:count] [-u]

This program shows "hidden" words in a DOS ASCII text file
provided file has *already* been processed with PREPHIDN (un)utility.
Required values should have been found using FINDHIDN (un)utility.
The three programs have been written in order to confirm
the nonsense of "hidden" words in the Bible or in any long text.

    -a:# number of lines to align display on
    -s:# starting offset (1-based)
    -c:# count of characters to skip
    -u   uppercase
    -sa  do not sort filenames alphabetically

a) Note offset is 1-based : position 1 is thus first byte in file.
b) -a:# should be searched word length.

Example : SHOWHIDN TEST -s:13 -c:3



(* // ---------- "shuttle.doc" ---------- // *)


Title  : Q&D Shuttle v1.0 by Philippe Guiochon

Usage  : Yet another useless demo...

Syntax : SHUTTLE



(* // ---------- "sigfind.doc" ---------- // *)


Q&D Signature Finder v1.1s by Philippe Guiochon

Syntax 1 : SIGFIND [option]... <filespec> <$Hex_String|Dec_Value|String>...
Syntax 2 : SIGFIND <-n:#>...
Syntax 3 : SIGFIND <-s:$>...

-d    duplicate each output line
-i    case-insensitive strings
-w    convert searched string to Win16 set
-u    convert searched string to Win32 (Unicode) set
-t    display ASCII data after file offset
-x    old output format with "$" hexadecimal prefix (-t and -z[z] ignored)
-b    beep when done
-c    force hexadecimal values to uppercase (default is lowercase)
-f:#  fix file offset if data was found ("[+|-][$|0x]<digit>..." format)
-e:#  scan for data at exact file offset ("[$|0x]<digit>..." format)
-l[l] list filename only if sequence searched for exists (sequence not dumped)
-z[z] break each hexadecimal line by 8 (-z) or 16 bytes (-zz) ignoring -t
-v    verbose mode (progression information but slower display)
-n:#  convert (hexa)decimal LONGCARD value (any other option ignored)
-s:$  show hexadecimal (possibly single- or double-quoted) string equivalent
-a[a] display ASCII reference set (-aa = decimal)
-o[o] display Windows OEM reference set (-oo = decimal)
-lfn  disable LFN support even if available

a) Any option must be specified BEFORE <filespec>.
b) In hexadecimal strings, "??" sequence stands for any value ;
   in strings, "?" stands for any character.
c) Here are escape sequences supported in strings :
   "°p"="%" (percentage), "°q"='"' (double quote), "°s"="'" (single quote),
   "°[?°]"=symbol.
   Note string parsing may still require single or double quotes delimiters.
d) From DOS, strings containing "%" require particular care.
e) These options ignore any other option : -a[a], -o[o], -n:# and -s:$.
f) "." cosmetic separator is allowed in hexadecimal string.

Examples : SIGFIND win.com $CD21
           SIGFIND -i win.com "windows"
           SIGFIND -n:1963 -n:$7ab
           SIGFIND -ll -e:0 *.dat DDS > dds.lst
           SIGFIND -i tsmod.txt °q°p?°q?
           SIGFIND -z -t win.com $cd.21.??



(* // ---------- "solarsys.doc" ---------- // *)


Q&D Solar System v1.1f par Philippe Guiochon

Calcul de positions planétaires [1600-2200]

Syntaxe 1 : SOLARSYS <dé= fi= h= i=> [planète]... [paramètre]...
Syntaxe 2 : SOLARSYS <d= h=> [planète]... [paramètre]...

  <dé>part=      date de départ au format jj-mm-aaaa
  <fi>n=         date de fin au format jj-mm-aaaa
  <i>ntervalle=  intervalle en jours ou au format HH:MM
  <d>ate=        date au format jj-mm-aaaa (*=date actuelle)
  <h>eure=       heure T.U. au format HH:MM (*=heure actuelle)
  planète(s)     nom de(s) planète(s) (par défaut : toutes)
                 <so>leil, <lu>ne, <me>rcure, <vé>nus, <ma>rs,
                 <ju>piter, <sa>turne, <ur>anus, <ne>ptune, <pl>uton

  coordonnées    <astro>, <lambda>, <alpha> ou <lbr> (par défaut : <astro>)
  affichage      FMTLONG=[0]<HMS|DEGMIN|DEG> (par défaut : 0DEG = ###,##°)
                 FMTLAT=[+][0]<DEGMIN|DEG> (par défaut : 0DEG = ##,##°)
                 ("0" ou espace, HMS DDDMM DDDdd, "+" ou espace, DDMM DDdd)
  séparateur     CSV=<ESPACE|POINTVIRGULE|TABULATION> (par défaut : ESPACE)

Exemples : SOLARSYS d=* h=*
           SOLARSYS d=1/1/2400 h=0h /u /alpha
           SOLARSYS de=1/1/1900 fi=31/12/1900 h=0h i=15 me alpha
                    fmtlong=hms fmtlat=+0°'

Dans les paramètres, les accents sont évidemment ignorés.

La variable d'environnement POUR_TU, si elle est définie, contient
la correction requise pour passer de l'heure système à l'heure T.U.
Cette correction est appliquée si et seulement si les date et heure
sont toutes deux spécifiées avec *.

L'option /UNSAFE permet d'ignorer la restriction à l'intervalle [1600..2200],
en faveur de l'intervalle [0..*]. Le recours à cette option est déconseillé
en raison des limites de la théorie Van Flandern et Pulkkinen (1979).



(* // ---------- "sound.doc" ---------- // *)


Q&D Sound v1.0 by Philippe Guiochon

Syntax : SOUND [<frequency> <delay> <pause>]...

Specify frequency in Hertz, and delay and pause in milliseconds.



(* // ---------- "spiro.doc" ---------- // *)


Q&D Spirolatères v1.1e par Philippe Guiochon

Syntaxe : SPIRO [<répétitions|*> <rotation> <déplacement>...] [option]...

  -v[v[v]]  mode vidéo (v=640x480, vv=800x600, vvv=1024x768)
  -e:#      échelle [1..500] (par défaut : 15)
  -a        algorithme original (par défaut : algorithme corrigé)
  -o        centrage automatique du motif désactivé (par défaut : activé)
  -n        nouveau motif aléatoire
  -t:#      couleur du texte [0..15] (par défaut : 14)
  -c:#      couleur de l'encre [0..15] (par défaut : 15)
  -p:#      couleur du papier [0..15] (par défaut : 0)
  -d:#      délai d'affichage de chaque rotation [0..100] (par défaut : 10)
  -d        mode démonstration automatique
  -??       aide complète

a) Le nombre de répétitions est fixé à 500 s'il est spécifié avec "*".
b) Les fichiers SPIRO*.PCX contiennent les écrans sauvegardés,
   dont les valeurs sont enregistrées dans le fichier journal SPIRO.LOG.
c) Seule la sauvegarde des écrans sur fond noir est garantie !

Voici quelques exemples :

  SPIRO 4 90 1 3 2 -1 -2
  SPIRO 4 60 1 3 2 -1 -2
  SPIRO 4 90 1 2 3
  SPIRO 4 90 1 2 3 4 5 6 7 8 9
  SPIRO 5 72 2 3 4 5
  SPIRO 5 108 1 2 3 4
  SPIRO 5 36 2 -2 1

Voici les fonctions disponibles pendant l'affichage d'un motif :

Touche(s)       Fonction

[F1|?|,|F12]    afficher l'aide (vous y êtes !) ou quelques exemples
[F2|!]          afficher les valeurs actuelles (bascule)
[Ctrl-Q|Echap]  sortir du programme (Maj obligatoire, par sécurité)

[+|$]           augmenter de 1 le nombre de répétitions (de 10 avec Maj)
[-|*]           diminuer de 1 le nombre de répétitions (de 10 avec Maj)
[Ctrl-+|Alt-I]  mettre au minimum le nombre de répétitions
[Ctrl--|Alt-A]  mettre au maximum le nombre de répétitions

[Page Haut]     augmenter de 1 l'angle de rotation (de 10 avec Maj)
[Page Bas]      diminuer de 1 l'angle de rotation (de 10 avec Maj)

[Entrée]        entrer de nouveaux paramètres
                [Droite|Gauche|Fin|Début]-déplacer, [Entrée]-valider,
                [Echap]-annuler, [Ctrl-X]-mettre à zéro, [Del|Suppr]-effacer
                Les paramètres hors de l'intervalle autorisé seront ignorés.

[Début]         augmenter de 1 l'échelle (de 10 avec Maj)
[Fin]           diminuer de 1 l'échelle (de 10 avec Maj)

[a|A]           choisir l'algorithme original ou corrigé (bascule)

[Haut]          diminuer de 10 la coordonnée de départ en Y (de 1 avec Maj)
[Bas]           augmenter de 10 la coordonnée de départ en Y (de 1 avec Maj)
[Gauche]        diminuer de 10 la coordonnée de départ en X (de 1 avec Maj)
[Droite]        augmenter de 10 la coordonnée de départ en X (de 1 avec Maj)

[c|C]           centrer le motif
[o|O]           centrer automatiquement le motif (bascule)
[Ctrl-N]        créer aléatoirement un nouveau motif
[Ctrl-D]        mode démonstration automatique
                (pour arrêter, appuyer sur [Echap])
[t|T]           afficher toutes les rotations possibles de +0° à +360°
                (pour arrêter, appuyer sur [Echap])
[F3|F4]         changer le délai d'affichage (de 10 avec Maj)
[r|R|Espace]    redessiner le motif étape par étape
                (pour finir le motif, appuyer sur [Echap])

[F5|F6]         changer la couleur du texte
[F7|F8]         changer la couleur de l'encre
[F9|F10]        changer la couleur du papier

[Ctrl-S]        sauvegarder l'écran en noir et blanc
                (attendre la fin des signaux sonores)
[Ctrl-V]        sauvegarder l'écran en couleurs
                (attendre la fin des signaux sonores)



(* // ---------- "splines.doc" ---------- // *)


Q&D PSPLINE v1.0a by Philippe Guiochon

Syntax : PSPLINE B|C|P|S|* /S:# /P:# /L:# /U:# /L

    B=BernsteinBezier, C=CatMullRom, P=ParabolicSpline, S=BSpline, *=all
    /S=segments, /P=points, /L=lowervelocity, /U=uppervelocity, /L=linesonly



(* // ---------- "SSORT.doc" ---------- // *)


Q&D Slow Sort v1.0b by Philippe Guiochon

Syntax : SSORT <file> [option]...

  -z       Heap sort method (default is Quick sort method)
  -d[d]    ignore accents and case (-dd = -d -w)
  -l[l]    sort by line length
  -w[w]    force internal conversion from Win OEM to DOS ASCII (-ww = -w -d)
  -r|-i    reverse sort order
  -o:#[,#] use only specified columns range (-c:#[,#] = -o:#[,#])
  -i:#[,#] ignore specified columns range
  -f       ignore <file> read-only attribute
  -b       keep <file> backup (default is to overwrite <file>)
  -c       force temporary files to be created in current directory
  -v       verbose
  -x       disable LFN support even if available

This program slowly sorts <file> DOS ASCII text lines.

a) Temporary files are created in directory specified by, in that order,
   TMP, TEMP, TMPDIR, TEMPDIR environment variables
   (if none of these variables is defined, or if -c option is specified,
   current directory will be used instead).
b) .BK!,.BAK,.COM,.EXE,.DLL,.ZIP,.ARJ,.LZH,.7Z are ignored.
c) A line cannot be longer than 4095 characters.
d) Note whatever the original line separator, it will become cr+lf ($0d0a).
e) -b option creates a backup with ".BK!" extension.
f) Range for -o:#[,#] and -i:#[,#] options is 1-based.
   It can be specified as "column,count" or "first_column..last_column".
   Default count or last_column is "*" for "end of line".
g) Please note this program does not handle any form of redirection.
h) Safety requires free disk space to be about 3 times the size of <file>.



(* // ---------- "stamp.doc" ---------- // *)


Q&D Stamp v1.0f by Philippe Guiochon

Syntax 1 : STAMP [-k] <dd-mm-yyyy|*> [hh:mm[:ss]] [-c]
Syntax 2 : STAMP <-r> [-q]
Syntax 3 : STAMP <-s> [-t] [-f]
Syntax 4 : STAMP <-e> [-t] [-f]
Syntax 5 : STAMP <-z[z]>
Syntax 6 : STAMP <-v[v]>

This program changes current date/time (syntax 1),
restores changed date/time stamp (syntax 2), starts a chrono (syntax 3),
ends started chrono (syntax 4), resets program state (syntax 5),
or checks if any data file used by program exists (syntax 6).

-k       set new date/time (default)
-r       restore from saved STAMP filestamp
-s[s|t]  start chrono (-ss = -st = -s -t)
-e[e|t]  end chrono and show elapsed time (-ee = -et = -e -t)
-z[z]    reset program state then terminate
-v[v]    check if any data file used by program exists then terminate

-q       when restoring, query to change system date/time (use with caution !)
-c       when parsing date, add 2000 to year [0..79] and 1900 to year [80..99]
         (default is add 1900 to year [0..99])
-t       terse mode (syntax 3 and syntax 4 only)
-f       prefix -s and -e with "; "

a) DOS 3.2 or later is required.
b) Date separator is "-" or "/". Time separator is ":" or "H".
   "*" means now (current date or time), thus allowing chrono-like function.
c) Program uses STAMP.C!, STAMP.R! and STAMP.B! data files
   (located in executable directory, and all deleted by -z option).
d) -z[z] and -v[v] options ignore any other option or parameter ;
   both options return 255 if no data file exists, else 192
   (-zz and -vv are verbose forms of -z and -v options, showing return code).
e) Note this DOS program is mono-user and mono-task by design :
   running several instances of STAMP is not recommended,
   for date and time conflicts are sure to happen.



(* // ---------- "stars.doc" ---------- // *)


Q&D Twinkling Stars demo v1.0a by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax : STARS [stars] [option]...

  -k    end on keypress only
  -s:#  speed ([1..100], default is 10)
  -x    360x240 video mode X (default is 320x240)
  -p    show palette until keypress or 10 seconds
  -v    verbose

Number of stars belongs to [1..1000] interval, default is 200.

[PgUp|PgDn|*]  [Space]  [Escape|Enter]



(* // ---------- "storm.doc" ---------- // *)


Q&D Storm Simulation v1.0e by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax : STORM [option]...

    -z   abort not only on keypress but on mouseclick too
    -f:# persistence of flash (default is 6)
    -i:# persistence of lightning after strike (default is 24)
    -l:# maximum number of lightnings (default is 2)
    -r:# lightnings probability range (default is 32 for 1/32)
    -b   bold lightning
    -c   allow children forks
    -v   skyline
    -n:# skyline rebuild frequency for monitor safety (default is 1000)
    -p:# sky color (default is black)
    -k:# divisor for maximum height of buildings (default=screen height / 5)
    -a   twinkling lights
    -s   SoundBlaster sounds (experimental : ¨ feature !)
    -t   no background sound (thunder sound only)

    Sound requires a SoundBlaster Pro (or compatible) board.



(* // ---------- "textgen.doc" ---------- // *)


Q&D Text Generator v1.1l (4Kb) by Philippe Guiochon

Syntax 1 : TEXTGEN [datafile[.TX]] [option]...
Syntax 2 : TEXTGEN <-list> [datafile(s)[.TX]]

  -l     show first title line in datafile(s) (default pattern is "*.TX")
  -n:#   count
  -k     remove space from space+{;:!?} sequences
  -f:#   frame type (0=none, 1=single, 2=double, 3=raw), default is 0
  -w[w]  wait for keypress or mouseclick (-ww = -w -m)
  -m     ignore mouse if present
  -p[p]  -w[w] with French prompt
  -n     add a newline (CR+LF) in order to beautify display (useful with PEXEC)
  -g     glue output data (no newline added if count > 1 and -f:0)
  -i:#   ink [0..15], default is cyan
  -p:#   paper [0..15], default is dark blue
  -b     monochrome BIOS output (no colors)
  -w:#   set line width, default is screen width
  -s     screensaver mode, end on Escape or Return
  -s:#   in screensaver mode, pause [0..30] in seconds per line, default is 1
  -m:#   in screensaver mode, minimum pause [0..30] in seconds, default is 2
  -z     in screensaver mode, next = left click, quit = right click
  -r     in screensaver mode, randomize position, default is center
  -c     in screensaver mode, do not clear screen at exit
  -y     copy raw text to Vindoze clipboard if available (ignored by -s option)
  -x     disable LFN support even if available
  -??[?] verbose(r) help, including file format and an example

a) Unless it is specified with a path or with -list option,
   datafile (default is "TEXTGEN.TX") is searched for
   first in current directory, then in executable directory.
b) This program does not handle all language exceptions.
c) For syntax 2, a legal title line can be "; //", "  ; :::" or "; (* ... *)".
   Note -list option only displays the first matching title line.
d) -y option tries and converts text from DOS ASCII to Win OEM character set.
e) Any file with any of the following extensions will be ignored :
   .BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH,.OBJ
f) Dark [0..7] : black, blue, green, cyan, red, magenta, brown and gray.
   Bright [8..15] : gray, blue, green, cyan, red, magenta, yellow and white.
g) With DR-DOS 6.0 or Novell DOS 7.0, TEXTGEN can be called after each
   external command by setting SET PEXEC=path\TEXTGEN.EXE -n and PROMPT $x$p$g
h) Note this program was compiled for 4Kb maximum text output.

DATA FILE FORMAT :

   ~class{variant|...}
   {variant|...}entry{variant|...}

   Use "\class" to include a class in a class definition.
   Use "\class/?" to invoke a "\class" with a "/variant id letter".

a) A category is a unique string (up to 32 chars) beginning with a "~" marker,
   with an optional suffix : a set of variants between "{}",
   each variant being identified by a single letter. Case is ignored.
   Last category defines the final output. Program can handle 500 categories.
   A category beginning with "$" instead of "~" defines a global variable
   whose value, once defined at first call, will remain constant. ;-)
b) Each category entry is on its own line, with optional variants specified
   between "{}" and separated with inner "|"
   according to "{[0][|1][|#]...}" pattern (note first letter variant is 1 ;
   note, too, categories are NOT supported in variants).
   "(#)" prefix duplicates the entry # times.
   Please remember each category entry is stored verbatim.
   Should an empty string category entry be required, use "" form.
   Note a verbatim two double quotes entry, if needed, will have to be built.
c) A long paragraph can be built from individual lines ending with "\+" marker
   until a line without ending marker.
d) "\" prefix includes a category, an optional variant being specified with "/"
   followed by its single letter ID ("/&" forces use of calling variant).
   Forward references are supported.
e) "\!" forces a newline, "\&" glues together two text units verbatim,
   "\@" forces next word initial to upper case ("\$" to lower case).
f) If last character of "?\' ?" sequence belongs to [AEIOUYH] set,
   first character and space will be replaced with a single quote (French).
   Sequence " de\= le " becomes " du " and sequence " à\= le " becomes " au ".
g) If last character of "A\- ?" sequence belongs to [AEIOU] set,
   the article "a" will be replaced with the article "an" (English).
h) Should entry first character belong to [~$\;#(] reserved set,
   prefix it with "(1)" ; should an inner character be "\", use "\\" instead ;
   "\(" and "\)" stand for "{" and "}". Alt-255 is an unbreakable space.
i) -dump, -steps and -chkmem options may be of some use for diagnostics.
j) Check companion *.TX datafiles to see what can be done using TEXTGEN !

EXAMPLE 1 :

; // this is a mere test for Latin
; nominatif,vocatif,accusatif,génitif,datif,ablatif SINGULIER = abcdef
; nominatif,vocatif,accusatif,génitif,datif,ablatif PLURIEL   = ghijkl
~radixRosa
ros
poet
~radixDominus
domin
amic
~declRosa{abcdefghijkl}
{|a|a|am|ae|ae|a|ae|ae|as|arum|is|is}
~declDominus{abcdefghijkl}
{|us|e|um|i|o|o|i|i|os|orum|is|is}
~nom{abcdefghijkl}
\radixRosa\declRosa/&
\radixDominus\declDominus/&
~test
\@\nom/a amat \nom/c
(2)\@\nom/i \nom/g amant
\!\!\@this is a mere test for Latin\!\!

EXAMPLE 2 :

~doublequote
"

~emptystringVerbatim
\doublequote\doublequote

~emptystringSymbol
""

~rand
A
B
C
D

$varname
; will remain constant in script once defined at first call
; note only literal strings are allowed here :
; calling a class will not work
FOO
BAR
FOOBAR
FOOBARBAZ

$constant
\varname

# class definition                 : ~* or ~*{?|?|...}
# fixed variable definition        : $*

; entry count                      : (#)*

; comment1                         : ;
; comment2                         : #

; class call                       : \* or \*/? or \*/&

; escaped sequences
; antislash                        : \\
; newline                          : \!
; initial caps                     : \@
; initial lows                     : \$
; suffix                           : \&
; elision FR                       : \'
; elision US                       : \-
; concatenate                      : \+

~firstchars
(1)~ tilde
(1)$ dollar
(1)( open parenthesis
(1); comment
(1)# comment
(1)\ backslash

~anywhere
\\foo\\~$;#(/&°\(|\)

~escaped
\@upper \$LOWER A\&B\!\+
-- ANTISLASH \\\+
-- FRENCH : la\' art la\' science -- ENGLISH : a\- letter a\- alien\+

~test
Char at first position : \firstchars "\~$;#("\!\+
Char anywhere          : \anywhere\!\+
Escaped chars          : \escaped\!\+
\!\+
If entry first char belongs to "~$(;#" then prefix entry with "(1)"\!\+
If "\" char is needed in an entry then use "\\\\"\!\+
\!\+
\varname = \varname = \varname = \constant\!\rand is not necessarily \rand

; note supra "\\\\" in source will become "\\" when displayed



(* // ---------- "TEXTTOOL.doc" ---------- // *)


Q&D Text Tool v1.1j by Philippe Guiochon

Syntax 1 : TEXTTOOL <source> <-l[l]> [-r]
Syntax 2 : TEXTTOOL <source> <-b> [-u]
Syntax 3 : TEXTTOOL <source> <-x>
Syntax 4 : TEXTTOOL <source> <-t> <tokens> [extension_suffix] [-e[e]] [-c] [-a]
Syntax 5 : TEXTTOOL <source> <-i> <include_file> [-g:$] [-!]
Syntax 6 : TEXTTOOL <source> <-d:#[..#]|-k:#[..#]> [-m]
Syntax 7 : TEXTTOOL <source> <-y[#]> [-a]

This program sorts <source> lines by length (syntax 1) ;
converts a raw list of reserved words to Boxer 7.0a format
so result can be merged into Boxer DEFAULT.CFG file (syntax 2) ;
explodes a file by line length (syntax 3) ;
explodes a file by tokenized length (syntax 4) ;
includes a file into <source> at specified marker position (syntax 5) ;
removes or keeps all lines of specified length or range (syntax 6) ;
indexes sorted <source> using # first letters (syntax 7).

  -l[l]     sort by line length (-ll = -l -r)
  -b[b]     sort according to Boxer 7.0a for DOS format (-bb = -b -u)
  -x        explode by line length
  -t[t[t]]  explode by tokenized length (-tt = -t -e, -ttt = -t -ee)
  -i        include <include_file> into <source> at specified marker position
  -d:#[..#] delete all lines of specified length or range
  -k:#[..#] keep only lines of specified length or range
  -y[#]     index dictionary ([1..4] first letters, default is 2)

  -r        reverse order (-l only)
  -u        convert each keyword to uppercase (-b only)
  -e[e]     prepend binary header (-t only)
  -c        create hash table (-t only)
  -a        alternate fixed-strings format (-t and -y[#] only)
  -g:$      redefine marker string (3 symbols required, default is "$*!")
  -!        enclose <include_file> with "(* ::: //INCLUDED from "~" file *)"
  -m        trim line before processing (-d:#[..#] and -k:#[..#] only)
  -lfn      disable LFN support even if available
  -??[?]    (even) more help (to be read at least once !)

a) Whatever the syntax, maximum string line or keyword length is 256 chars.
   The following limit apply to syntaxes 1 and 2 :
   <source> cannot contain more than 1024 lines or keywords.
b) For safety, original <source> is kept with .BK! extension.
c) With syntax 2, <source> must contain either one keyword per line,
   or several keywords separated by "," delimiters.
   Result is in format expected by Boxer 7.0a for DOS's .CFG file.
d) With syntaxes 3 and 4, target files have .## extension
   where ## is line or tokenized length, both in [1..96] range.
e) With syntax 4, <source> is a list of words (only one word per line).
   <tokens> file contains up to 255 strings sorted by decreasing length
   (token length should belong to [1..5] range).
   Tokens and words should be in lower case.
   Optional <extension_suffix> is a single char appended to .## extension.
   Enclosing double quotes will be removed from <source> and <tokens> files.
   Optional -e header is SHORTCARD(tokenized_length) repeated ## times
   while -ee form writes only a CARDINAL(tokenized_length) header.
   Optional -c hash tables will have ._## extension ;
   they are built applying TopSpeed Lib.HashString() to each original entry,
   range being (MAX(CARDINAL)-1).
f) With syntax 5, program expects marker to be alone on its own line.
   File to be included is merged verbatim : trailing Ctrl-Z is no filtered.
g) With syntax 6, should range be illogical, values will be swapped.
   Note range maximum value can be "*" for "end of line".
   Lines are dumped verbatim, even if trimming was on for length test.
h) With syntax 7, indexing uses # first letters ([1..4], default is 2).
   Entries should be in lower case. Enclosing double quotes will be removed.
   Up to 16000 sequences are allowed. Index will have .NDX extension.

Examples : TEXTTOOL -t lex.fra c.fra C
           TEXTTOOL -i -! source.mod disclaimer.txt -g:$*!
           TEXTTOOL -d:78..* dico.txt
           TEXTTOOL -y2 lex.fra

(* .00? file format *)

List of <tokens> is built from a dictionary using WCOUNT, QSORT and a brain.
Once best tokenization list is found, the list must be sorted by length
(from longest to shortest, for obvious reasons).

A token code is a byte belonging to [0..254] ([$00..$fe]) range.
Token code 0 ($00) is reserved : it means next byte will be used verbatim.

Syntax 4 creates a binary file with .00? extension containing table of tokens.
First entry is a SHORTCARD containing last token index (from 1 to 255),
followed by an array of tokenEntryType according to format :

    tokenEntryType = RECORD
        tokenLen : SHORTCARD;
        tokenStr : ARRAY OF CHAR;            (* variable length *)
    END;

    tokenEntryType = RECORD
        tokenStr : ARRAY [0..7] OF CHAR;
    END;

(* .NDX file format *)

Syntax 7 creates a binary index with .NDX extension.
First entry is a CARDINAL containing last initial sequence,
followed by an array of initialEntryType according to format :

    initialEntryType = RECORD
        initialFpos  : LONGCARD;             (* position in text dictionary *)
        initialCount : LONGCARD;             (* number of entries *)
        initialLen   : SHORTCARD;
        initialStr   : ARRAY OF CHAR;        (* variable length *)
    END;

    initialEntryType = RECORD
        initialFpos  : LONGCARD;             (* position in text dictionary *)
        initialCount : LONGCARD;             (* number of entries *)
        initialStr   : ARRAY [0..3] OF CHAR;
    END;

(* .DIC file format *)

Syntax 8 creates a binary file.



(* // ---------- "total.doc" ---------- // *)


Q&D Total v1.1b by Philippe Guiochon

Syntax : TOTAL <directory> [option]...

  -d    list cumulative results for each subdirectory from <directory>
  -x    exclude subdirectories, analyzing only current directory
  -n    list only normal files (H and S excluded, default is -n -z)
  -z    list only special files (H or S required, default is -n -z)
  -e    list only empty subdirectories
  -p    sort by path
  -a    do not use graphics characters in separator lines
  -u[u] display paths in uppercase
  -k[k] display paths in lowercase
  -c[?] shorten paths according to columns count (-cu = -c -u ; -ck = -c -k)
  -t[t] terse mode showing total only (-tt = alternate terser display)
  -w    show "wasted" space when analyzing root directory
  -f    english group separator (default is french group separator)
  -l    disable LFN support even if available
  -b    monochrome BIOS output (no colors)

a) Program will not handle more than 16000 directories.
b) -w option results will not be significant with FAT32 or 2Gb+ drives.
c) -e option return one of the following codes :
   128 (at least one empty directory) or 255 (no empty directory).
d) -u and -k options try and preserve accents, -uu and -kk do not.
e) Results will be unreliable (i.e. weird and wrong) with NFTS.



(* // ---------- "trim.doc" ---------- // *)


Q&D Trim v1.2a by Philippe Guiochon

Syntax 1 : TRIM <file(s)> [option]...
Syntax 2 : TRIM <file(s)> <-j> [-x]
Syntax 3 : TRIM <file(s)> <*|minimum_length> <*|maximum_length> [-o] [-x]

This program removes trailing, leading or embedded spaces and tabs,
encloses each line with double quotes, removes enclosing double quotes,
filters out lines without any probable text string, fixes files,
prepends or appends auto-incremented ###### number or ???? string to each line,
or outputs to ".###" target(s) all same-length strings in specified range.

-r      remove trailing spaces and tabs (-b = -r -ll)
-l      remove smallest possible number of leading spaces and tabs
-ll     remove all leading spaces and tabs (-b = -r -ll)
-t:#    tabulation width ([1..256], default is 8)
-n      replace internal spaces and tabs with a dot for filenames (-b forced)
-nn     remove spaces and tabs preceding a dot for filenames (-b forced)
-e[e]   enclose each line with double quotes (-ee = -b then -q)
-q[q]   remove enclosing double quotes from each line (-qq = -b then -q)
-p      remove empty lines (forced by -s[s|a])
-j      remove leading or trailing double quote only if its count is odd
-p<n|s> prepend output line with auto-incremented ###### number or ???? string
-a<n|s> append output line with auto-incremented ###### number or ???? string
-c:?    pad character for ###### number (default is "0")
-id:$   specify pattern for auto-incrementation ([0..16] characters)
-k      ignore opening/closing match check when removing double quotes (-q[q])
-s[s|a] filter out lines without any probable text string (-ss = -sa = -s -a)
-a      show line number before any line containing a probable text string
-o[o]   overwrite existing .### target (-oo = overwrite read-only target)
-x      disable LFN support even if available

a) If no option is specified, program defaults to "-r -l".
b) With -l[l] option, leading tabs are expanded to spaces.
c) Note -e and -q options will process lines only when necessary.
d) A probable text string is delimited by single or double quotes.
   Note false positive detection may happen in programming comments.
e) -s[s|a] option forces -p option for obvious reasons.
f) -j option (syntax 2) ignores any option except -x option :
   tabs, leading and/or trailing blanks, if any, are left unmodified.
   This option was created in order to fix fortune cookies files.
g) If specified, -p<n|s> and -a<n|s> options apply to processed output lines.
   Number base is "000001", string base is "aaaa",
   default pattern is " :::~::: " where "~" is auto-incremented portion.
h) About syntax 3 : output files will be created in current directory ;
   they will have ".###" extension. No preprocessing is done.
   <minimum_length> and <maximum_length> must belong to [0..255] range.
   If specified as "*", <minimum_size> is 1 and <maximum_size> is 64.
i) .BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH files will be ignored.
j) As a safety, backups (with .BK! extension) are always created.



(* // ---------- "TSTISAAC.doc" ---------- // *)


Q&D Test Bob Jenkins' I.S.A.A.C. v0.9 by Philippe Guiochon

Syntax 1 : TSTISAAC
Syntax 2 : TSTISAAC <count> <basename> [passphrase] [option]...

This program is a slightly enhanced port of READABLE.C source code
created by Bob "I.S.A.A.C." Jenkins who generously made his PRNG public domain.
Syntax 1 should output the same data as RANDVECT.TXT and Rosetta Stone example.
Syntax 2 creates target files filled with <count> random values
(either LONGCARDs or BYTEs) so they can be compared using randomness tests
(each file is created with a different export method).

  -s do not seed generator from pool
  -p pad seed pool with repeated passphrase (default is to pad with $00 value)
  -x init seed pool with an array of LONGCARDs instead of a string
  -t create text files (default is to create binary files)
  -d show dice results
  -m show missing byte values

a) Syntax 1 ignores all options.
b) With syntax 2, program can be aborted by pressing almost any key.
   Note <count> will be adjusted to the nearest multiple of 1024.
   Existing target files will be overwritten. <basename> cannot be a LFN.
   Passphrase, if not specified, is a random string created by program ;
   -x option creates an array of LONGCARDs instead of a string.
c) Here are syntax 2 experimental methods (here, abcd is 32 bit ISAAC random) :
     A = abcd
     B = dcba
     C = abcd MOD 255
     D = abcd MOD 256
     E = abcd DIV $1000000
     F = abcd right-shifted by 24
     G = LONGREAL(abcd) / LONGREAL(MAX(LONGCARD))*256
     H = LONGREAL(abcd) / LONGREAL(MAX(LONGCARD)+1)*256
     I = LONGREAL(abcd) / LONGREAL(MAX(LONGCARD))*255
     J = abcd DIV (MAX(LONGCARD) DIV MAX(SHORTCARD))
   Most methods are bad (C, I, J) and/or give same results (E=F=G=H, I=J).
   Check TSTISAAC.MOD source code for more details.
d) Note CCOUNT utility can be of some help analyzing binary data.



(* // ---------- "tvoff.doc" ---------- // *)


Q&D TV off v1.1 by Philippe Guiochon

This program clears VGA text screen in a way similar to old TV sets.

Syntax : TVOFF [[-|/]<0..6>]

0  persistence of hline, bright white twinkling (default)
1  grey twinkling
2  smoother motion (wand effect), persistence of hline, bright white twinkling
3  smoother motion (wand effect), grey twinkling
4  same as 0 with a cross effect
5  same as 1 with a cross effect
6  same as 0 in 320x200 graphics mode



(* // ---------- "tvstatic.doc" ---------- // *)


Q&D Static TV screen v1.0b by Philippe Guiochon

Syntax : STATIC [elements] [option]...

  -l    low resolution (320x200) mode
  -l:#  percentage of lines in static noise [0..100], default is 1
  -p:#  palette [1..6], default is 1
  -m:#  noise mode [1..2], default is 1
  -d:#  delay in milliseconds [0..100], default is 0
  -u    synchro bar upwards (default is downwards)
  -b    disable synchro bar
  -s    slow static noise fade at exit
  -k    ignore mouse click
  -v    verbose
  -x    just turn screen off ;-)

Number of elements belongs to [1..30000] interval, default is 5000.

Keys while running : [Return|Escape], [PageUp|PageDn], [+|-], [M], [C]



(* // ---------- "txtfmt.doc" ---------- // *)


Q&D Text Reformatter v1.2b by Philippe Guiochon

Syntax 1 : TXTFMT <file(s)> [-t:#] [-t] [-g:$] [-s] [-q] [-z]
Syntax 2 : TXTFMT <file(s)> <-w:#> [-t] [-g:$] [-s] [-q]
Syntax 3 : TXTFMT <file(s)> <-p:#> [-c:#] [-i] [-c] [-s] [-q]
Syntax 4 : TXTFMT <file(s)> <-u[:#]> [-s] [-q]
Syntax 5 : TXTFMT <file(s)> <-f[f]> [-a] [-s] [-q]

This program reads an ASCII file then builds paragraphs from lines (syntax 1),
breaks paragraphs into lines (syntax 2), skips lines/columns (syntax 3),
expands tabs (syntax 4), or processes a fortune file (syntax 5).

  -z     force a new paragraph if line begins with a space or a tabulation
  -w:#   break paragraphs into lines counting at most # characters
  -p:#   page length (lines to keep together)
  -u[:#] expand tabs (default tab width is 8 unless specified with -u:#)
  -f[f]  process fortune file (-ff = start each paragraph with a tabulation)
  -t:#   tab width (default is 8)
  -t     syntax 1 and 2 : reformat text even between marker strings
         (marker string is a toggle and it must be on its own single line)
  -g:$   redefine marker string (3 symbols required, default is "$*!")
  -c:#   count of lines to skip after page length (default is 1)
  -c     process columns instead of lines
  -a     start a paragraph for author (line beginning with "-" or "--")
  -i     inverse selection written to file
  -s     send output to screen instead of file (test mode)
  -q     quiet processing
  -lfn   disable LFN support even if available

a) Files with any of these extensions will not be processed :
   .BK!,.COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH,.7Z
b) Each original file will be backuped with .BK! extension.



(* // ---------- "uclone.doc" ---------- // *)


Q&D Unit Clone v1.1s by Philippe Guiochon

Syntax 1 : UCLONE <-c[c]> <source> <target> [block_range] [option]...
Syntax 2 : UCLONE <-b[b]> <source> <target> <block_range> <block> [option]...
Syntax 3 : UCLONE <-v[v]> <unit> [block_range] [option]...
Syntax 4 : UCLONE [-p|-i] <unit> [unit [block_range [block]]] [option]...
Syntax 5 : UCLONE <-![!]|-*[*]|-$[$]>

-c[c]   clone <source> unit to <target> unit (-cc = -c -k)
-b[b]   copy <source> unit <block_range> to <target> <block> (-bb = -b -k)
-v[v]   verify <unit> (-v = really read data, -vv = standard verify)
-p|-i   display <unit>(s) geometry
-![!]   show data about available units and primary partitions ([$80..$81])
-*[*]   show data about available units and primary partitions ([$80..$83])
-admin  ignore safety checks (<target> same as <source> for -c, overlap for -b)
-z      automagically adjust block range to smallest of <source> and <target>
-n:#    modify Windows XP disk ID serial number when cloning is done
        ("+++" or "---" = "incr" or "decr" = modify current serial number)
-k      retry one block at a time if buffer could be read but not written
        (-c[c]|-b[b]), or if buffer was not successfully verified (-v[v])
-parano if <target> buffer was successfully written,
        reread it and compare it with <source> buffer (ignored if no -apply)
-d      alternate display
-e      do not show percentage of completion
-t      show only percentage of completion
-a|-w   audio warning
-apply  really WRITE to <unit> (default is to READ, as shown by " ;-)" trailer)
        BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
-yes    do not ask for confirmation
        BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
-ths    factorize blocks count ignoring unexpected values for TxHxS
-u      do not abort on fatal errors (forced fully by -v[v], partially by -k)
-l      prevent operations and errors from being reported to UCLONE.LOG log
-r      reset <unit> using int $130D (default is not to reset)
-f[f]   use fixed buffers (-ff = check page boundaries)
-j[j]   if rebuilding TxHxS is needed, instead of finding best factorization,
        force headcount=255 (-j) or headcount=240 (-jj)
-ah     assume int $1301 returns last operation status in AH (default is AL)
-off    turn PC off if no error was found after any of -c[c], -b[b] or -v[v]
-boot   reboot PC if no error was found after any of -c[c], -b[b] or -v[v]
-??[?]  more (and more) help (to be read at least once !)

a) Assumed : BIOS interrupt $13 extensions support for IDE (AH=$42,$43,$44).
b) Assumed : DWORD <block>, WORD <track>, WORD <head>, 512 bytes WORD <sector>.
c) <unit> is {$8<0|1|2|3>,8<0|1|2|3>H,HD_<A|B|C|D>,HD_<0|1|2|3>} hard disk.
d) 0-based <block_range> is <first_block..last_block> or <first_block,count>.
e) IMPORTANT : should best factorization fail, -j would be silently forced.
f) -backup is an "advanced" (i.e. less restrictive and more dangerous) -clone :
   as it gives more responsability to user, it does not support -z option.
g) -l option is forced if UCLONE.CD exists in executable directory.
h) -ah option is forced if UCLONE.AH exists in executable directory.
i) -c[c], -b[b] and -v[v] commands can be aborted with ESCape key.
j) Buffers, whether dynamic (default) or fixed (-f[f]), are 63 blocks long.
k) These options require extreme caution : -u, -l, -z, -klonit, -dupme.
   BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
l) Three options rely on BIOS *not* lying about its EDD v2.1+ $134E support :
   -pio, -dma and -pf, which respectively try and force
   maximum PIO mode, interrupt $13 DMA maximum mode, and prefetch mode.
m) Any option irrelevant to specified command is ignored without notice.
   Note -n:# option does require -c[c] option.
n) -p option does not read Master Boot Record (MBR), while -![!] option does.
o) -admin option allows <target> to be identical to <source> for -c[c] command.
   It also ignores overlap safety check for -b[b] command.
   If specified as "*" or "=", <target> will be identical to <source>.
   BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
p) -klonit option is a shortcut for -c -k -apply -u -yes (-dupit = -klonit -e).
q) -off option requires an Advanced Power Management BIOS.
r) -off and -boot options will wait 10 seconds so disk cache can flush data.
s) Any error at program exit will cancel -off and -boot options.
t) These undocumented options perform their task ignoring any other option :
   -doc shows UCLONE.DOC file, -<c|v>ga sets 25|50 lines text mode.
u) Cosmetic separator characters "." and "_" will be filtered out.
v) This DOS program was written with J.P.I. TopSpeed Modula-2 compiler.

- BIOS interrupt $13 extensions must be available.
- This program should be run in real mode DOS from a writeable floppy unit
  or writeable RAM disk with enough free space for UCLONE.LOG log 
  (unless -l option was forced directly or through UCLONE.CD existence).
  Running from <source> unit with log enabled is not recommended,
  although UCLONE.LOG log is written only at program exit (for data safety).
- Both <source> and <target> should be verified prior to cloning.
- WARNING ! Any bad block prevents remaining of data buffer to be processed.
  How illogical ! Using -k option should help reduce unexpected data loss.
- Speed and reliability depend upon UDMA, memory manager, processor and BIOS.
  Unlikely problems should be solved by lowering these settings from BIOS :
  "UltraDMA" and/or "maximum sectors transferred".
- While this program supports IDE units only, it CAN use S-ATA and USB devices.
  Any modern BIOS setup should allow S-ATA devices to emulate IDE units ;
  it should also see USB devices plugged in when turning PC on as IDE units.
  No USB DOS driver was tested but this could work... with a little luck.
- Brain-damaged Windows XP will not boot if several units have the same ID :
  once cloning process is done, target <unit> should be disconnected,
  unless -n:# option was specified to change its Master Boot Record.
  Should target <unit> stay plugged in PC, VITAL utility should be used
  in order to hide backup partitions from any rogue operating system
  (VITAL can also change Windows XP disk ID).
- For added safety, MD5 and/or SHA digests should be kept for each file
  (and possibly CRC32 as to help check collisions, however unlikely).

Examples : UCLONE -c $80 $81 -n:$19.63.02.01
           UCLONE -v $81 0,63
           UCLONE -p $80
           UCLONE -b $80 $81 0..62 10.000



(* // ---------- "UNAPPLE.doc" ---------- // *)


Q&D Apple ][ DOS 3.3 disk image to PC files extractor v1.0a

Syntax 1 : UNAPPLE <disk_image[.DSK]> [-lfn]
Syntax 2 : UNAPPLE <-list> <tokenized_program>

With syntax 1, this program extracts files from an Apple ][ DOS 3.3 disk image.
With syntax 2, it converts a tokenized Applesoft BASIC program to ASCII.



(* // ---------- "unmbox.doc" ---------- // *)


Q&D MBOX to TXT converter v0.9c by Philippe Guiochon

Syntax : UNMBOX <source> [option]...

This program reads Thunderbird MBOX files, removes any attachement
then tries and converts messages to DOS ASCII.

  -d    dump converted data to screen without creating matching text file
  -w    preprocess "=##" form to OEM Windows (default is DOS ASCII)
  -r    leave message text as is without any character conversion
  -o    overwrite existing matching target text file (default is to skip it)
  -n    rename existing matching target text file
  -p    create .MSG target in <source> directory (default is in current)
  -x    disable LFN support even if available

a) Note source date and time stamp is copied to .MSG target.
b) Files matching *.MSG will not be processed.
c) UNMBOX.INI must exist.
   It is first searched for in current then in executable directory.
d) As of v0.9c, note a few HTML files can produce garbage.
   Do not forget this program is still a work in progress i.e. in BETA stage !



(* // ---------- "unpath.doc" ---------- // *)


Q&D Unpath v1.2 by Philippe Guiochon

Syntax 1 : UNPATH <*|width> <file> [option]...
Syntax 2 : UNPATH <file> [option]...

With syntax 1, this program reformats each line in <file> :
it extracts filename from trailing path, pads it to <width>,
then prepends it to original path portion with separator (default is " +++ ").
With syntax 2, it rebuilds original path from <file> created with redirection.

    -s:$ user-defined separator (up to 16 characters)
    -l   pad filename left (defaut is right)
    -k   keep remarks (lines beginning with either ";" or "#")
    -t   remove trailing "\" from path part
    -d   remove double quotes

a) Except in remarks, lines not matching "*\*" pattern are filtered out.
b) If first parameter is "*", program will use longest length.
c) If filename is longer than specified <width>,
   original line is dumped with "::: " prefix.
d) If original path was delimited with double quotes, split parts will be too.
   Note program expects lines to be enclosed by two double quotes or none.
e) Extensions are not beautified.
f) Each line entries should not be longer than 1024 characters.
g) Rebuilding requires the same separator used to reformat.
h) LFNs are not supported : use regular 8+3 DOS filename instead.



(* // ---------- "unrtf.doc" ---------- // *)


Q&D RTF to TXT converter v0.9a by Philippe Guiochon

Syntax : UNRTF <source[.RTF]> [option]...

This program tries and retrieves raw text data from RTF files,
ignoring any formatting.

  -p    replace "\par " with 4 spaces instead of one TAB $09 character
  -d    dump converted data to screen without creating matching text file
  -o    overwrite existing matching text file (default is to skip overwriting)
  -![!] create default UNRTF.INI then terminate (-!! = -! -o)
  -x    disable LFN support even if available

a) Matching .TXT text files are created in current directory.
b) Output is DOS ASCII.
c) \'## sequences will be translated only if UNRTF.INI exists
   in executable directory. Else, they will be written as undefined.
d) -![!] option ignores any other option (except -o) or parameter.
   UNRTF.INI is created in executable directory.
e) Note this program is still in alpha stage : output is ugly. :-(



(* // ---------- "vclock.doc" ---------- // *)


Vision Clock (mode X) v1.0f par Philippe Guiochon

(bibliothèque Mode X v1.04 mise dans le domaine public par Matt Pritchard)

Syntaxe : VCLOCK [option]...
                                                                    par défaut
/F:# Police (0..2)                                                    |   1
/M:# Animation (0=non, 1=oui, 2=OUI)                                  |   2
/B:# Beep (0=non, 1=oui ou sans effet)                                |   0
/N:# Nombre d'étapes dans une animation (2..500)                      |  25
/Z:# Souris (0=non, 1=oui)                                            |   1
/C:# Secondes multicolores (0=non, 1=oui)                             |   0
/G:# Graduation des secondes (0=non, 1=oui, 2=OUI)                    |   0
/H:# Couleur des heures ([0..4]=bleu, rouge, vert, cyan, jaune)       |   1
/S:# Couleur des secondes ([0..4]=bleu, rouge, vert, cyan, jaune)     |   2
/T:# Couleur des graduations ([0..4]=bleu, rouge, vert, cyan, jaune)  |   1
/A:# Autres couleurs (0=non, 1=oui)                                   |   1

Les touches + et - changent la figure utilisée (option /M:2 requise).



(* // ---------- "vectors.doc" ---------- // *)


Q&D Vectors demo v1.0b by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax : VECTORS [option]...

  -k    end on keypress only
  -o:#  object ([0..14], default is 0)
  -p:#  palette ([0..5], default is 0)
  -f    flat 2D dots

[P][+]-next palette  [O][PgDn]-next object  [F]-flat 2D  [Space]-single step
[Escape|Enter]-exit

This code, although greatly cleaned, rewritten and enhanced, was based upon
very rough QuickBASIC code (VBOB1.BAS) found in an old Simtel SWAG archive.



(* // ---------- "viewpcx.doc" ---------- // *)


Q&D View PCX file v1.0b by Philippe Guiochon

Syntax 1 : VIEWPCX [-vesa] <source[.PCX]> [-infos] [-pause]
Syntax 2 : VIEWPCX [-vesa] <source[.PCX]> <target[.PCX]> [-infos] [-overwrite]

This program *slowly* displays a PCX file (2 or 256 colors).
Use -v to try and set VESA 640x480x256 video mode (default is VGA 320x200x256).



(* // ---------- "vital.doc" ---------- // *)


Q&D Vital Data Manager v1.4h by Philippe Guiochon

Syntax 1 : VITAL <unit> <R|W|C> <u:[\directory\]...> [option]...
Syntax 2 : VITAL <unit> <Z> [-yes] [-apply]
Syntax 3 : VITAL <unit> <B|B1|B2|B3|B4> [-apply]
Syntax 4 : VITAL <unit> <T> [-t:#,#] [-apply]
Syntax 5 : VITAL <unit> <N> [-n:#] [-apply]
Syntax 6 : VITAL <unit> <I[NVISIBLE]|V[ISIBLE]> [-apply]

R|S     read|save current data to V_*.* files
W|U     write|update data from V_*.* files
C       compare current data with reference data from V_*.* files
Z       fill track 0 with $00 (existing MBR sector will remain unmodified)
B       report boot flag status for each primary partition
B#      clear all primary partitions boot flags then activate selected one
T       show O.S. indicator code for each partition
N       show Windows XP disk ID serial number
I|V     make unit invisible or visible

-i      process <unit> organization (<R> or <W -s> required)
-c[:#]  process CMOS data (-c:# = -c -z:#)
-m[m|g] process MBR sector (-mm = -mg = -m -g)
-t      process track 0
-p      process partition data (-i automagically forced)
-z:#    specify CMOS size (64, 128, 256 or 512, default is 128)
-e:$    set data file(s) extension (default is .SAV)
-o[o]   overwrite any existing data file (-oo = -o -r)
-r      ignore read-only status of existing data file
-t:#,#  modify O.S. indicator code (#,# = "partition index","new ID")
        ("#,and$ef" or "#,or$10" = "#,unhide" or "#,hide" = (un)hide partition)
-n:#    modify Windows XP disk ID serial number
        ("+++" or "---" = "incr" or "decr" = modify current serial number)
-q      do not display individual mismatch found
-g      when restoring, overwrite existing MBR primary partition table
        (default is to leave MBR primary partition table unmodified)
-s      backup unmodified data to *.SOS in current directory
-apply  REALLY apply any requested modification to existing data
        BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
        (default is to fake requested modification, as shown by " ;-)" trailer)
-yes    do not ask user for confirmation
        BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
-x      ignore BIOS interrupt $13 extensions even if available
-ths    factorize blocks count ignoring unexpected values for TxHxS
-j[j]   if rebuilding TxHxS is needed, instead of finding best factorization,
        force headcount=255 (-j) or headcount=240 (-jj)
-e      assume track 0 sector count is S (as found in TxHxS) if smaller than 63
-n      force sector count to 63 and head count to 255 (unless -j[j])
-![!]   create default VITAL.INI in current directory then terminate
        (-!! = overwrite existing VITAL.INI, if any)
-??[?]  more help (to be read at least once !)
-d      alternate display (unbeautified numbers)
-k      show full canonical path in successful operations
-io:#   delay after each CMOS access operation ([50..50000], default is 250)
-dyn    use dynamic buffers (default is to use fixed buffers)
-a|-w   audio warning
-ah     assume int $1301 returns last operation status in AH (default is AL)

a) <unit> may be $8<0|1|2|3> or 8<0|1|2|3>H.
b) Program defaults to processing CMOS, MBR, track 0 and partition data
   unless told to process a specific set of data (-i, -c, -m, -t, -p).
c) When comparing, {[$00..$09],$0C,$32,$3F} CMOS data is considered volatile ;
   when restoring, {[$00..$09],$0C} CMOS data is considered volatile
   (unless VITAL.INI exists in executable directory to override defaults).
d) Unless -e is specified, track 0 is assumed to be exactly 63 sectors long.
e) Data location is "." (current), u: ([A..Z] range), or u:\[directory\]...
f) For compatibility and compiler reasons, <unit> access requires
   512 bytes WORD <sector>, DWORD <block>, WORD <track>, WORD <head>.
g) IMPORTANT : should best factorization fail, -j would be silently forced.
h) -yes, -x, -j[j], -e and -n should NOT be used and are NOT recommended.
i) For safety, -s option is HIGHLY recommended.
j) For safety, any write command does NOT really update data
   unless any of -apply, -doit or -really options is specified.
k) -t:#,# option requires a partition index as listed by T command.
   Hiding applies "AND $ef" (%11101111) to existing partition code,
   while unhiding applies "OR $10" (%00010000) to existing partition code.
   Use with caution if partition code is not supported by DOS or Windows.
l) When comparing data, return code is 255 if any mismatch was found.
m) Experimental -z:# option MUST be specified when saving (R|S) ;
   it is ignored when restoring (W|U) or comparing (C).
n) Experimental INVISIBLE command relocates MBR to first empty block in track 0
   then zeroes original MBR in order to make unit appear unformatted.
   Experimental VISIBLE command restores original MBR from relocated block
   (itself then rezeroed) in order to make unit visible again.
o) Each line in VITAL.INI is a single value in [0..CMOSsize-1] range.
   "+" prefix forces value to be restored.
p) -ah option is forced if VITAL.AH exists in executable directory.
q) As VITAL.INI exists in executable directory,
   CMOS values volatile status will be decided using its content.
r) Undocumented -chk option uselessly checks buffers page boundaries.
s) IMPORTANT : WinXP may silently dare and change partition ordering ;
   it may even change original partition boot sector, too :
   safety requires to hide everything from this rogue operating system !
   Later M$ OSes may do the same.
t) Please note LFNs are not supported : only "????????.???" DOS paths are.
u) These undocumented options perform their task ignoring any other option :
   -doc shows VITAL.DOC file, -<c|v>ga sets 25|50 lines text mode,
   -reboot!!! reboots PC (APM BIOS required), -off!!! turns PC off.
v) This DOS program was written with J.P.I. TopSpeed Modula-2 compiler.

Examples : VITAL $80 SAVE . -e:DAT
           VITAL $80 RESTORE a: -apply
           VITAL $80 B2
           VITAL $81 T -t:2,$16
           VITAL $81 N -n:$01021963

(* long O.S. indicator codes *)

$00     Empty partition-table entry
$01     DOS FAT12
$02     XENIX root file system
$03     XENIX /usr file system (obsolete)
$04     DOS FAT16 (< 32M)
$05     DOS 3.3+ extended partition
$06     DOS 3.31+ Large File System (FAT16, >= 32M)
$07     8-ung ! QNX, OS/2 HPFS, Windows NT NTFS, Advanced Unix, or unknown
$08     8-ung ! OS/2 (v1.0-1.3 only), AIX bootable partition, SplitDrive, Commodore DOS, or DELL partition spanning multiple drives
$09     8-ung ! AIX data partition, or Coherent filesystem
$0a     8-ung ! OS/2 Boot Manager, OPUS, or Coherent swap partition
$0b     Windows95 FAT32
$0c     Windows95 FAT32 (using LBA-mode INT $13 extensions)
$0e     logical-block-addressable VFAT (same as 06h but using LBA-mode INT $13)
$0f     logical-block-addressable VFAT (same as 05h but using LBA-mode INT $13)
$10     OPUS
$11     OS/2 Boot Manager hidden FAT12 partition
$12     Compaq Diagnostics partition
$14     8-ung ! (resulted from using Novell DOS 7.0 FDISK to delete Linux Native part), or OS/2 Boot Manager hidden < 32M FAT16 partition
$15     hidden DOS 3.3+ extended partition
$16     OS/2 Boot Manager hidden >= 32M FAT16 partition
$17     8-ung ! OS/2 Boot Manager hidden HPFS partition, or hidden NTFS partition
$18     AST special Windows swap file ("Zero-Volt Suspend" partition)
$19     Willowtech Photon coS
$1b     hidden Windows95 FAT32 partition
$1c     hidden Windows95 FAT32 partition (using LBA-mode INT $13 extensions)
$1e     hidden LBA VFAT partition (PowerQuest specific ?)
$1f     hidden LBA VFAT extended partition
$20     Willowsoft Overture File System (OFS1)
$21     8-ung ! officially listed as reserved, or Oxygen FSo2
$22     Oxygen Extended
$23     officially listed as reserved
$24     NEC MS-DOS 3.x
$26     officially listed as reserved
$31     officially listed as reserved
$33     officially listed as reserved
$34     officially listed as reserved
$36     officially listed as reserved
$38     Theos
$3c     PowerQuest PartitionMagic recovery partition
$3d     Hidden Netware
$40     VENIX 80286
$41     8-ung ! Personal RISC Boot, PowerPC boot partition, or PTS-DOS Linux / DR DOS
$42     8-ung ! SFS (Secure File System) by Peter Gutmann, or PTS-DOS Linux Swap / DR DOS
$43     8-ung ! Alternative Linux EXT2fs, or PTS-DOS DR DOS
$45     EUMEL/Elan
$46     EUMEL/Elan
$47     EUMEL/Elan
$48     EUMEL/Elan
$4a     ALFS/THIN filesystem for DOS
$4d     QNX
$4e     QNX
$4f     8-ung ! Oberon boot/data partition, or QNX
$50     OnTrack Disk Manager (read-only partition)
$51     8-ung ! OnTrack Disk Manager (read/write partition) or NOVELL
$52     8-ung ! CP/M, or Microport System V/386
$53     OnTrack Disk Manager (write-only partition ?)
$54     OnTrack Disk Manager (DDO)
$55     EZ-Drive
$56     GoldenBow VFeature
$5c     Priam EDISK
$61     SpeedStor
$63     8-ung ! Unix SysV/386 (386/ix), Mach (MtXinu BSD 4.3 on Mach), or GNU HURD
$64     8-ung ! Novell NetWare 286, or SpeedStore
$65     Novell NetWare (3.11)
$66     Novell Netware 386
$67     Novell
$68     Novell
$69     Novell
$70     DiskSecure Multi-Boot
$71     officially listed as reserved
$73     officially listed as reserved
$74     officially listed as reserved
$75     PC/IX
$76     officially listed as reserved
$78     XOSL
$7e     F.I.X.
$80     Minix v1.1-1.4a
$81     8-ung ! Minix v1.4b+, Linux, or Mitac Advanced Disk Manager
$82     8-ung ! Linux Swap partition, Prime, or Solaris (Unix)
$83     Linux native file system (ext2fs/xiafs)
$84     OS/2-renumbered type 04h partition (related to hiding DOS C: drive)
$85     Linux EXT
$86     FAT16 volume/stripe set (Windows NT)
$87     8-ung ! HPFS Fault-Tolerant mirrored partition, or NTFS volume/stripe set
$93     Amoeba file system
$94     Amoeba bad block table
$98     Datalight ROM-DOS SuperBoot
$99     Mylex EISA SCSI
$9f     BDSI
$a0     Phoenix NoteBIOS Power Management "Save-to-Disk" partition
$a1     officially listed as reserved
$a3     officially listed as reserved
$a4     officially listed as reserved
$a5     FreeBSD, BSD/386
$a6     OpenBSD
$a7     NextStep
$a9     NetBSD
$aa     Olivetti DOS FAT 12
$b0     BootStar
$b1     officially listed as reserved
$b3     officially listed as reserved
$b4     officially listed as reserved
$b6     8-ung ! officially listed as reserved, but Windows NT mirror set (master) FAT16 file system
$b7     8-ung ! BSDI file system (secondarily swap), or Windows NT mirror set (master) NTFS file system
$b8     BSDI swap partition (secondarily file system)
$bb     8-ung ! Hidden PTS BootWizard, or Acronis
$bc     Acronis
$be     Solaris boot partition
$c0     8-ung ! DR-DOS/Novell DOS secured partition, or CTOS
$c1     DR DOS 6.0 LOGIN.EXE-secured FAT12 partition
$c2     DR DOS 7
$c3     DR DOS 7
$c4     DR DOS 6.0 LOGIN.EXE-secured FAT16 partition
$c6     8-ung ! DR DOS 6.0 LOGIN.EXE-secured Huge partition, corrupted FAT16 volume/stripe set (Windows NT), or Windows NT mirror set (slave) FAT16 file system
$c7     8-ung ! Syrinx Boot, corrupted NTFS volume/stripe set, or Windows NT mirror set (slave) NTFS file system
$c8     DR DOS 7
$c9     DR DOS 7
$ca     DR DOS 7
$cb     Reserved for DR-DOS secured FAT32
$cc     Reserved for DR-DOS secured FAT32 (LBA)
$cd     DR DOS 7
$ce     Reserved for DR-DOS secured FAT16 (LBA)
$cf     Reserved for DR-DOS extended secured FAT16 (LBA)
$d0     Multiuser DOS secured FAT12
$d1     Old Multiuser DOS secured FAT12
$d4     Old Multiuser DOS secured FAT16 (< 32M)
$d5     Old Multiuser DOS secured extended partition
$d6     Old Multiuser DOS secured FAT16 (>= 32M)
$d8     CP/M-86
$db     8-ung ! CP/M, Concurrent CP/M, Concurrent DOS, or CTOS (Convergent Technologies OS)
$de     Dell FAT16
$e1     SpeedStor FAT12 extended partition
$e2     DOS read-only (Florian Painke's XFDISK 1.0.4)
$e3     8-ung ! DOS read-only, or Storage Dimensions
$e4     SpeedStor FAT16 extended partition
$e5     officially listed as reserved
$e6     officially listed as reserved
$eb     BeOS BFS (BFS1)
$ed     Spryt*x
$ee     GPT protected MBR (faking whole disk partition)
$ef     UEFI system partition (ESP)
$f1     Storage Dimensions
$f2     DOS 3.3+ secondary partition
$f3     officially listed as reserved
$f4     8-ung ! SpeedStor, or Storage Dimensions
$f5     Prologue
$f6     officially listed as reserved
$fd     reserved for FreeDOS
$fe     8-ung ! LANstep, or IBM PS/2 IML (Initial Microcode Load) partition
$ff     Xenix bad block table

(* most common short O.S. indicator codes *)

$00     Empty
$01     FAT12
$04     FAT16
$05     Extended (primary) --- EBPR (logical)
$06     FAT16B
$07     NT NTFS
$0b     FAT32
$0c     FAT32X
$0e     FAT16X
$0f     ExtendedX (primary) --- EBPRX (logical)
$11     Hidden FAT12
$14     Hidden FAT16
$15     Hidden Extended (primary) --- Hidden EBPR (logical)
$16     Hidden FAT16B
$17     Hidden NT NTFS
$1b     Hidden FAT32
$1c     Hidden FAT32X
$1e     Hidden FAT16X
$1f     Hidden ExtendedX (primary) --- Hidden EBPRX (logical)
$78     XOSL
$ee     GPT MBR

(* MBR *)

$1b8     4 BYTEs    Windows XP disk ID serial number

$1be    16 BYTEs    partition record for partition 1
$1ce    16 BYTEs    partition record for partition 2
$1de    16 BYTEs    partition record for partition 3
$1ee    16 BYTEs    partition record for partition 4
$1fe    WORD        signature, AA55h indicates valid boot block

(* partition record *)

$00     BYTE        boot indicator (80h = active partition)
$01     BYTE        partition start head
$02     BYTE        partition start sector (bits 0-5)
$03     BYTE        partition start track (bits 8,9 in bits 6,7 of sector)
$04     BYTE        operating system indicator (* partition code *)
$05     BYTE        partition end head
$06     BYTE        partition end sector (bits 0-5)
$07     BYTE        partition end track (bits 8,9 in bits 6,7 of sector)
$08     DWORD       sectors preceding partition
$0C     DWORD       length of partition in sectors

(* DOS boot record *)

$000    3 BYTEs     jmpCode               (* eb ?? 90 or e9 ?? ?? *)
$003    8 CHARs     OEMname               (* $00 terminated *)
$00b    CARDINAL    bytesPerSector        (* 512 *)
$00d    SHORTCARD   sectorsPerCluster     (* power of 2 : 1,2,4,...,128 *)
$00e    CARDINAL    reservedSectors       (* 1, starting at 0 *)
$010    SHORTCARD   numberOfFATs          (* 2 *)
$011    CARDINAL    numberOfRootEntries   (* 512 *)
$013    CARDINAL    numberOfTotalSectors  (* 0 if BIGDOS i.e. > 32Mb *)
$015    SHORTCARD   mediaDescriptor       (* $f8 *)
$016    CARDINAL    sectorsPerFAT
$018    CARDINAL    sectorsPerTrack
$01a    CARDINAL    numberOfHeads
$01c    LONGCARD    hiddenSectors         (* ignore high if dos < 4.0 - is first sector of partition *)
$020    LONGCARD    bigTotal              (* if numberOfTotalSectors was 0 *)
$024    SHORTCARD   physicalDriveNumber   (* $80 or $81 *)
$025    BYTE        dirtyflag             (* reserved *)
$026    BYTE        extBRsignature        (* $29 *)
$027    LONGCARD    volumeSerialNumber
$02b    11 CHARs    volumeLabel           (* $00 terminated *)
$036    8 CHARs     fileSystemID          (* padded with blanks *)
$03e    448 BYTEs   xcode
$1fe    CARDINAL    magic                 (* $aa55 *)

(* Win boot record *)

$000    3 BYTEs     jmpCode               (* eb 58 90 *)
$003    8 CHARs     OEMname               (* $00 terminated *)
$00b    CARDINAL    bytesPerSector        (* 512 *)
$00d    SHORTCARD   sectorsPerCluster     (* power of 2 : 1,2,4,...,128 *)
$00e    CARDINAL    reservedSectors       (* 33, starting at 0 *)
$010    SHORTCARD   numberOfFATs          (* 2 *)
$011    4 BYTEs     rsvd
$015    SHORTCARD   mediaDescriptor       (* $f8 *)
$016    CARDINAL    sectorsPerFAT
$018    CARDINAL    sectorsPerTrack
$01a    CARDINAL    numberOfHeads
$01c    LONGCARD    hiddenSectors         (* ignore high if dos < 4.0 - is first sector of partition *)
$020    LONGCARD    bigTotal              (* if numberOfTotalSectors was 0 *)
$024    LONGCARD    bigSectorsPerFAT
$028    SHORTCARD   activeFATs            (* attrExt *)
$029    SHORTCARD   FSversionMajor
$02a    CARDINAL    FSversionMinor
$02c    LONGCARD    firstClusterOfRoot    (* 2 *)
$030    CARDINAL    FSinfoSector          (* 1 *)
$032    CARDINAL    FSbackupBootSector    (* 6 *)
$034    12 BYTEs    rsvd2
$040    SHORTCARD   physicalDriveNumber   (* $80 or $81 *)
$041    BYTE        rsvd3                 (* for NT *)
$042    BYTE        extBRsignature        (* $29 *)
$043    LONGCARD    volumeSerialNumber
$047    11 CHARs    volumeLabel           (* $00 terminated *)
$052    8 CHARs     fileSystemID          (* padded with blanks *)
$05a    418 BYTEs   xcode
$1fc    LONGCARD    magic                 (* $aa550000*)



(* // ---------- "vlife.doc" ---------- // *)


Q&D Life 320x200x256 v1.2c by Philippe Guiochon

Syntax : VLIFE [option]...

  m:#     mouse (0=no, 1=yes, default is 0)
  w:#     wrap (0=no, 1=yes, default is 1)
  z:#     speed ([0..50], default is 1)
  p:#     birth probability ([1..100], default is 10)
  u:#     rule random birth probability ([1..100], default is 70)
  c:#     cycle colors (0=yes, else [1..15], default is 0)
  s:#     cell size (0 or [1..16], default is 2)
  b:#     box (0=no, 1=yes, default is 1)
  s[s]    show infos while in view mode (-ss = with S/B/? reminder)
  t:#     initial delay in milliseconds ([0..30000], default is 5000)
  d:#     refresh delay in milliseconds ([0..5000], default is 0)
  g:#     last generation before restart (0=unlimited, default is 10000)
  i:#     initial pattern found in VLIFE.DAT (0=random, default is 0)
  r:$     rule (Survival/Birth[/RandomBirth] : Conway's is 23/3)
  f:$     initial pattern found in specified file (text .LIF format)
  n:$     alternate databank (default is VLIFE.DAT, default extension is .DAT)
  c       ignore "#P" command (-f:$ and single pattern only)
  r       ignore any of "#R" or "#N" commands (-f:$ only)
  i       show current parameters and wait until keypress or 15 seconds
  l       show pertinent infos then terminate
          (list of available patterns, or -f:$ specified file parameters)
  pcx[:#] save up to # VL_* PCX steps (default is 100)
  x       disable LFN support even if available
  ?[?]    (more) help

a) An option can be specified with or without "/" or "-".
b) Only the last of repeated options is taken into account.
c) With -l option, any other option is ignored.
d) With -i:# option, VLIFE.DAT is first searched for in current directory,
   then in executable directory.
e) With -n:$ option, -f:$ option is ignored.
f) With -f:$ option, -i:# option is ignored ;
   any of "#R" or "#N" commands override default and -r:$ rules (unless -r) ;
   ".LIF" file extension is assumed if omitted ;
   -s:0 option is recommended ; initial positions out of screen are ignored.
g) Supported aliases are -ff[f]:$ = -f:$ -i [-s:1] ; -ii[i]:$ = -i:# -i [-s:1].
h) Display restarts at last generation or if no change has been detected.
i) Here are a few interesting rules :
   /2  01245678/34  245/368  1358/357  125/36  23/36  238/357  235678/378
   125678/367  45678/3  /234  12345/3  235678/3678  5678/35678
j) -z:# option uses vertical retrace, while -d:# option uses a timer.
k) Note delays may not be accurate when program is not run from real DOS.
l) [SPACE]-step  [-+]-speed  [TAB]-color  [s]-infos  [$]-reset  [*]-init

File format example 1 :

   #Life 1.05
   ; rule is specified as survival/birth, #N is an alias for #R 23/3
   #R /234
   **
   **

File format example 2 :

   #D This is a comment
   #C This is another comment
   #N
   ; x,y position is relative to screen center
   #P -2 -1
   *...*
   *.*.*
   *...*

File format example 3 :

   #R /2
   -11 1
   -10 0
   -13 0
   -8 -1
   -8 -2
   -12 -1
   -9 -3



(* // ---------- "voxel.doc" ---------- // *)


Q&D Voxel demo v1.0d by Philippe Guiochon

Syntax : VOXEL [option]...

    -p   show palette until keypress or 10 seconds
    -w   show world until keypress or 10 seconds
    -s:# sky color (default is black)
    -a   absolute altitude (do not stick to ground)
    -h:# initial altitude above ground (default=100)
    -r   random autopilot
    -z   end on mouseclick too
    -c:# color palette
    -f   smoother (but ugly) display

This program is a poor man's Comanche demo ;-)
By the way : the Novalogic Comanche series was excellent.

left/right, up/down=forwards/backwards, pgUp/pgDn=altitude, /=toggle smoothing
*=toggle absolute_altitude/stick_to_ground, r=toggle auto, Space, Escape/Enter

This code, although greatly cleaned, rewritten and enhanced, was based upon
very rough MODULA-2 code found in XTDLI104.ZIP archive created by
a Marco van de Voort, who himself had ported PASCAL code by a Bas van Gaalen.



(* // ---------- "warp.doc" ---------- // *)


Q&D Stars demo v1.0d by Philippe Guiochon

(public domain Mode X v1.04 library by Matt Pritchard)

Syntax : WARP [stars] [option]...

  -k    end on keypress only
  -c    colored stars
  -b    starry background
  -s:#  speed ([1..200], default is 10)
  -x    320x240 video mode X (default is 360x480)
  -r    random hyperdrive
  -t:#  threshold percentage for random hyperdrive ([1..1000], default is 5)
  -n:#  trails ([0..128], default is 64)
  -o    use concentration
  -a:#  concentration factor ([1..89], default is 45)
  -d    fake depth effect
  -v    verbose

Number of stars belongs to [1..3500] interval, default is 300.

[PgUp|Home|PgDn] [Left|Down|Right] [Space] [Del] [c] [o] [b] [d] [Escape]



(* // ---------- "wcount.doc" ---------- // *)


Q&D Word/n-gram Counter v1.1c by Philippe Guiochon

Syntax : WCOUNT <file(s)> [option]...

This program reads tokens from specified text file(s) then builds frequencies.
The "divide and conquer" approach is highly recommended !

-g    n-gram counter mode (default mode is word counter)
-l:#  n-gram lower length ([1..100], default is 1)
-u:#  n-gram upper length ([1..100], default is 2)
-e:#  n-gram exact length ([1..100], shortcut for -l:# -u:#)
-d    allow [A..Z0..9] (default is [A..Z])
-c    ignore case
-a    ignore accents
-f    do not expand "æ" to "ae" nor "Æ" to "AE"
-b    set of token separators is [$00..$20]
-k    set of token separators is [$00..$20] + " (),=+-*<>/\[]^:;." + quotes
-p|-w pattern analysis mode (-b forced, -g -d -c -f ignored)
-y    parse individual tokens in quoted strings (-p option only)
-n    line mode with CR ($0d) and LF ($0a) as only valid separators
-u:$  user-defined remapping string (upper, lower, digit, symbol, space)
-i    individual processing for each file (default is cumulative process)
-o[o] output raw data to video screen without storing to RAM
      (-q forced, -oo = -o -x -t -s)
-m    make an analysis using sorted output file (only -t taken into account)
-x    do not show header
-l    do not show list
-t    do not show frequency table
-s    do not show summary
-z    include D field (D=C-N)
-q    no processing eyecandy
-lfn  disable LFN support even if available

a) Note program may abort on a few files after creating an ERRORINF.$$$ file,
   for deep recursion may force a stack overflow even though stack is 64 Kb.
   Here is a workaround : first run program with -o option and redirect output,
   then run program with -m option on previously redirected sorted output.
b) L is token length, N is occurrences count, C is ( L * N ), D is C-N.
c) Unless -b or -k options, ^[A..Z] is default set of token separators.
d) Files should end with a CRLF sequence.
e) Pattern analysis mode may be useful in order to check passwords.
   Each token character is translated according to this rule :
   "U" = uppercase letter, "c" = lowercase letter,
   "#" = digit, "!" = symbol, "_" = space.
   -p option ignores leading and trailing quotes, whether double or single.
   Without -y option, quoted strings are parsed as a single token
   (note leading and trailing double and single quotes are removed).
   Without -a option, accentuated letters are treated as symbols.
f) -pp = -py = -yy = -p -y
g) If program was aborted using Escape, return code is 255.
h) Program will not process files with any of these extensions :
   .COM,.EXE,.DLL,.OVR,.OVL,.DRV,.VXD,.BIN,.ZIP,.ARJ,.LZH,.RPT for safety.



(* // ---------- "whatlfn.doc" ---------- // *)


Q&D What LFN v1.0a by Philippe Guiochon

Syntax : WHATLFN <path>...

This program shows DOS and LFN forms for specified path(s).



(* // ---------- "WIPECMOS.doc" ---------- // *)


Q&D Zero CMOS Data v1.0 by Philippe Guiochon

Syntax : WIPECMOS [size] [option]...

This program overwrites CMOS memory using specified byte pattern
(default pattern is "$00").

-apply REALLY apply any requested modification to existing data
       (default is to fake requested modification, as shown by " ;-)" trailer)
       BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
-yes   skip keyboard confirmation (unwise !)
       BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
-b:$   byte pattern (default is "$00")
-a     use alternate random number generator
-io:#  delay after each CMOS access operation ([50..50000], default is 500)
-doc   show WIPECMOS.DOC file then terminate

a) For safety, program does NOT really overwrite data
   unless any of -apply, -doit or -really options is specified.
b) Optional CMOS [size] is : 64, 128, 256, 512 (default is 128).
c) -b:$ option accepts a string with one hexadecimal value :
   first "$" is mandatory as a reminder whatever data follows ;
   "??" = one random byte.
d) -yes option should NOT be used and is NOT recommended.
e) -yesIdo and -dwIm options are shortcuts for -yes -really : use with caution.
f) This DOS program was written with J.P.I. TopSpeed Modula-2 compiler.

Examples : WIPECMOS 64 -b:$aa
           WIPECMOS -b:$?? -yes



(* // ---------- "WIPEFILE.doc" ---------- // *)


Q&D Zero File Data v1.0 by Philippe Guiochon

Syntax : WIPEFILE <file(s)> [option]...

This program overwrites file(s) data using specified byte pattern
(one byte per pass, default pattern is "$00").

-apply REALLY apply any requested modification to existing data
       (default is to fake requested modification, as shown by " ;-)" trailer)
       BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
-yes   skip keyboard confirmation (unwise !)
       BE SURE TO KNOW WHAT YOU ARE DOING ! USE THIS OPTION AT YOUR OWN RISK !
-b:$   byte pattern (default is "$00")
-p     perform all passes one file at a time
-a     use alternate random number generator
-esc   disable ESCape polling (unwise but may be necessary with Win9X/WinXP)
-s     recurse subdirectories
-x     ignore existing WIPEFILE.INI
-swaps do not default to swapfiles protection
       ("*\386spart.par", "*\win386.swp" and "*\pagefile.sys")
-w     do not process read-only files (default is to ignore read-only status)
-k     delete file once its data have been overwritten
-j     filter files using operating system jokers (read note infra)
-l     disable LFN support even if available
-mem   ignore any Storage.ALLOCATE() error (unwise !)
-doc   show WIPEFILE.DOC file then terminate
-??    more help (to be read at least once !)

a) For safety, program does NOT really overwrite data
   unless any of -apply, -doit or -really options is specified.
b) -b:$ option accepts a string with one hexadecimal value per pass :
   first "$" is mandatory as a reminder whatever data follows ;
   values can be either concatenated or separated with " ", "." or "," ;
   "??" = one random byte, "**" = a 16384-bytes repeated random buffer,
   "@@" = a 16384-bytes unique random buffer (slower). Passes range is [1..48].
c) Without -e option, program allows the ESCape key to abort.
   Overwriting is not reversible : data already overwritten is lost forever !
d) Without -j option, "?" and "*" jokers do NOT work the DOS or Win9X way :
   "?" matches exactly one character, "*" matches any sequence of characters.
e) -mem option may help with huge Win9X and WinXP directories,
   although all matching files will not be processed.
f) -yes, -esc, -x and -mem options should NOT be used and are NOT recommended.
g) -yesIdo and -dwIm options are shortcuts for -yes -really : use with caution.
h) Data overwriting takes very long a time, especially with multiple passes :
   program may be best left unattended for hours while working.
   Note "@@" regularly recreates random buffer and is therefore very slow.
i) Up to 64 entries (M2 jokers supported) may be protected against overwriting,
   if they are specified in WIPEFILE.INI file located in executable directory.
   If such a file does not exist, these entries are protected by default :
   "*\386spart.par", "*\win386.swp" and "*\pagefile.sys".
   Note this safety is not required if program is run from an alternate OS.
j) WIPEFILE.INI was found in executable directory :
   protection against overwriting is available for its entries (unless -x).
k) This DOS program was written with J.P.I. TopSpeed Modula-2 compiler.

Example : WIPEFILE -s -e c:\SRC\*.cpp -b:"$de ad BE EF"

Here is an example of WIPEFILE.INI file :

   ;
   ; Entries matching these patterns will NOT be overwritten.
   ; M2 jokers are allowed :
   ; "?" matches exactly one character, "*" matches any sequence of characters.
   ; Entries may be enclosed with double quotes if necessary.
   ;
   ; Vindoze swap files should always be protected in this INI file,
   ; unless program is run from another OS such as a DOS boot disk.
   ;
   *\386spart.par
   *\win386.swp
   *\pagefile.sys
   ;
   "*\index.dat"
   *\desktop.ini



(* // ---------- "WITH.doc" ---------- // *)


Q&D With v1.2e by Philippe Guiochon

Syntax : WITH <filespec>... [option]... <"command">

  -n    auto-expand only normal files (H and S excluded, default is -n -z)
  -z    auto-expand only special files (H or S required, default is -n -z)
  -d    auto-expand only directories (H or S included)
  -0|-o process 0-length entries only (-o is supported for obvious reasons)
  -j    process current day's entries only
  -s    include subdirectories (valid if only one filespec was specified)
  -a    ask confirmation (Yes/No/Always/Escape)
  -e    expand jokers and pass each file individually (forced by any of nzd0oj)
  -v[v] (very) verbose (default is -v)
  -q    quiet
  -lfn  disable LFN support even if available (token replacement ONLY !)
  -t    test mode (-q ignored, forced with redirected output)
  -??   more help

a) This program applies <command> to specified file(s) ; in default joker mode,
   it will not try to run <command> if no files matches <filespec>.
b) Even if LFN support is available, <filespec> MUST be in f8e3 DOS form.
c) For safety, -n, -z, -d and -0 options automagically force -e option.
d) Note LFN support is limited to display (token replacement ONLY !).

Command tokens are :

  $_  newline
  $p  percent character
  $$  dollar character
  $u  unit
  $d  directory
  $b  directory without trailing "\"
  $n  file
  $e  extension (without dot)
  $f  file.extension
  $c  shortcut for $u$d$f (any LFN automagically becomes $q$c$q)
  $x  shortcut for $u$d$f (forced to DOS format even with LFN support)
  $q  double quote
  $#  auto-incremented ##### decimal number starting from 1 (-e advised)
  $?  auto-incremented ??? string starting from "AAA" (-e advised)

a) Though auto-incrementation is global, it should not be used with -s option.
b) Unlike DIRBAT utility, this program is single-line oriented by design :
   "$_" token will be ignored except in test mode or with redirected output.
c) This program will not process more than 5000 directories,
   and no more than 10000 files per directory, whatever available RAM.
d) For safety, any command line longer than 122 characters will be skipped.
e) If LFN support is available, and if -lfn option was NOT specified,
   program will replace each original f8e3 token with its matching LFN form :
   $q token is highly recommended in order to avoid unexpected side effects
   (note only $c token automagically encloses LFN with double quotes).

Examples : WITH *.tmp -s "DEL $u$d$n.$e"
           WITH c:\bat\*.exe c:\tools\*.exe "COPY $u$d$n.$e G:\tmp"
           WITH *.C *.H *.CPP "del $f"
           WITH -q -e *.thm "RAPPORT $f"
           WITH -e \mesdoc~1\*.* "dir $c"
           WITH -e \mesdoc~1\*.* "dir $q$u$d$f$q"



(* // ---------- "wobbler.doc" ---------- // *)


Q&D Wobbler v1.0 adapted by Philippe Guiochon

Syntax : WOBBLER [seed] [option]...

  -w:# number of waits for screen retrace ([0..10], default is 1)
  -m   end on mouseclick too
  -p   show palette until keypress or 10 seconds
  -n   do not normalize individual byte seed components to [$00..$07]
  -c:# palette number

Without seed, program will chose a random one [$000000..$FFFFFF].
Best results require individual byte seed components to be smaller than 8.
[i|r|g|b|s|Tab]-palette, [PageUp|PageDn]-waits, [n]-normalize, [Del]-seed,
[F1..F6]-adjust individual byte seed components, [Space], [Return|Escape].



(* // ---------- "WOLFRULE.doc" ---------- // *)


Q&D Wolfram Rule v1.0b by Philippe Guiochon

Syntax : WOLFRULE [file[.RUL|.TXT]] [option]...

-r:#   8 bits bitmask
-w:#   initial cellular automaton width (default is 1)
-i:$   initial binary pattern
-n     do not force at least one bit on in initial pattern
-b     black and white mode (default is color mode)
-v     wait for screen vertical retrace
-t[:#] testmode (-t:# = -t -r:#)

a) If no bit is on in initial pattern, background will be red.
b) Note wrapping is enabled for first and last cellular automaton cells.
c) -r:# bitmask assumes 111 110 101 100 011 010 001 000 order ;
   it can be expressed as a $hexadecimal, decimal or %binary number.
d) While program is running, [Space] = pause, [Return] = quit.
   In test mode, "+" = increment rule, "-" = decrement rule.
e) -t option requires -r:# option.
f) -r:# less uninteresting displays seem to be :
   18 22 26 30 45 60 75 82 86 89 90
   101 102 105 110 124 126 129 135 137 146 149
   150 153 154 161 165 167 169 181 182 193 195 210 218 225.
g) Here is an example of rule file (Wolframm's Rule 30) :

   ; line 1 : each of the 8 possible patterns
   ; line 2 : new center cell state
   ; optional line 3 : initial pattern (-w:# ignored)
   ; without optional line 3, initial pattern is randomly created
   111 110 101 100 011 010 001 000
    0   0   0   1   1   1   1   0
   1
   ; alternate characters are "." for 0 and "x" for 1
   ; "?" will randomly return either "0" or "1"
   ; undefined patterns will force "0" for new center cell state



(* // ---------- "xchoice.doc" ---------- // *)


Q&D Extended Choice v1.0d by Philippe Guiochon

Syntax : XCHOICE [option]... [message]

  -c:$    user-defined choice keys (default is "YN")
  -n      do not display choice keys and "?" after message
  -s      make choice keys selection case-sensitive (accents still ignored)
  -t:?,#  default to specified choice key after # seconds pause ([1..900])
  -w:?,#  shortcut for -t:?,# -v
  -tt:?,# shortcut for -t:?,# -v
  -v      show countdown
  -e:?    assume specified choice key if Escape key was pressed
  -r:?    assume specified choice key if Return key was pressed
  -a      alternate prompt format (" ? " instead of M$ default "?")
  -i      input mode (default is keypress mode)
  -q      do not beep on unexpected choice
  -z      do not show selected key after message

This program emulates CHOICE utility.
ERRORLEVEL is set to the 1-based offset of the key pressed by user.
Optional message must be specified after options (if any) :
as it will be displayed verbatim, it should best be kept short
so that message and prompt together still fit screen line width.
Though it is not an obligation, message should be enclosed with double quotes
(thus allowing it to begin with either "-" or "/" characters).



(* // ---------- "xclock.doc" ---------- // *)


Xclock (mode X) v1.0l par Philippe Guiochon

(bibliothèque Mode X v1.04 mise dans le domaine public par Matt Pritchard)

Syntaxe : XCLOCK [option]...
                                                           par défaut
/F:# police (0..3)                                       |   0
/M:# animation (0=aucune, 1=partielle, 2=complète)       |   2
/B:# bip (0=non, 1=oui ou sans effet)                    |   0
/N:# nombre d'étapes dans une animation (2..500)         |  30
/Z:# souris (0=non, 1=oui)                               |   1
/S:# figure (1..12)                                      |   1

Les touches + et - changent la figure utilisée (option /M:2 requise).



(* // ---------- "xcsv.doc" ---------- // *)


Q&D Expand CSV v1.0b by Philippe Guiochon

Syntax XCSV <file[.CSV]> [separator] [option]...

    -p    alternate field parsing
    -f    split each line by CSV field
    -s    do not insert original separator between CSV fields
    -m    insert " ::: " between CSV fieds instead of original separator
    -a[a] display ASCII reference set then terminate (-aa = decimal)
    -o[o] display Windows OEM reference set then terminate (-oo = decimal)
    -lfn  disable LFN support even if available

This program either splits each <file> line by CSV field or expands it
so each CSV field is padded with spaces to longest relevant CSV field.

a) A line cannot be more than 24576 characters long.
b) Number of fields should not be greater than 100.
c) Default field separator is ";" : if specified, it must be
   either a single character (possibly delimited with double quotes)
   or a value in decimal ([0..255]) or hexadecimal ([$00..$ff]).
   Values belonging to {0, 10, 13, $00, $0a, $0d} set are illegal.
   Should a character force a problem ([0..9-/$]), use its value instead.
d) Output should be redirected to a text file then carefully edited.
e) By default, field separator is assumed to be unique ;
   -a option tries and parses single- and double-quoted strings.

Examples : XCSV abyss.csv ";"
           XCSV abyss.tab $9
           XCSV abyss.txt 9



(* // ---------- "xd.doc" ---------- // *)


Q&D Extended Dump v1.2j by Philippe Guiochon

Syntax 1 : XD [option]... <source> [target]
Syntax 2 : XD -c [option]... <source> <target>
Syntax 3 : XD -p [option]... <source> <target>
Syntax 4 : XD -i[i] [option]... <target> <[$]offset> <:> <data>...
Syntax 5 : XD -x [option]... <[$]segment:offset> <[$]count>

-c    create <target> from <source> data, ignoring addresses (if any)
-p    patch <target> with <source> data (addresses are required !)
-i[*] patch <target> at file <offset> using <data> (-ii, -i$[$], -ii$[$])
-x    examine memory ("$" is hexadecimal prefix, implicit for offset)

-#    number of bytes per line : 4, 8, 16, 24 or 32 (default is 16)
-d    assume data is decimal format (default is hexadecimal)
-$[$] assume data is a DOS string (trimmed left and right, -$$ = 0-terminated)
-n    do not display ASCII data after (hexa)decimal data
-r    do not display addresses
-o    overwrite existing target when dumping a <source> or creating a <target>
-u    hexadecimal data in upper case
-m[m] hexadecimal Modula-2 display (-mm = add structure prototype to target)
-a[?] 64 columns ASCII-only display (-aa = -af = -a -f)
-e[?] 64 or 96 columns ASCII-only display (-ee = -ef = -e -f)
-v    verbose
-k    no paging (forced if target specified or if output redirected)
-s    when patching, update date and time stamps
-f    filter out {0,8,9,10,12,13,255} ASCII codes instead of {0..31,255}
-y    remap output from OEM to ASCII (XLAT WIN2PC emulation)
-z    remap output from ASCII to OEM (XLAT PC2WIN emulation)
-j    filter out $00 character in any ASCII display
-b    monochrome BIOS output (no colors, -f ignored when dumping to screen)
-2    insert binary data display (-4 option highly recommended)
-w    display data as words (default is bytes)
-b:#  new base address for dump (default is 0)
-p:#  initial file position for dump ([0..filesize-1], default is 0)
-t    do not wait for video retrace when paging
-lfn  disable LFN support even if available
-??   more help

a) With -c and -p, specified (hexa)decimal format must match <source> data.
   -c option handles hexadecimal data as individual or concatenated bytes.
b) With -i, default format is hexadecimal, unless -d option is specified.
c) With -p, "*" or "/" are treated as the end of <source> data file.
   .COM,.EXE,.DLL,.OVR,.OVL,.DRV,.ZIP,.ARJ,.LZH <source> files are ignored.
d) With -x, address display format is not segment:offset but linear.
e) -p:# and -b:# options handle decimal or hexadecimal ("$" prefix).
f) -m[m], -a and -e options override and/or ignore any conflicting option.
g) For obvious reasons, <source> should not be more than 2Gb long. ;-)
h) This program does NOT create any backup copy, and it does NOT handle jokers.

Examples : XD -p patch.pat test.exe
           XD -i test.exe 0 : 00 00
           XD -i -$ test.exe 0 : "PhG"
           XD -2 -4 test.exe
           XD -x $40:4A 256

Here are keys available while dumping :

[PageDown][Enter]     move one screen down
[PageUp]              move one screen up
[Down][Right][Space]  move one line down
[Up][Left]            move one line up
[Home][End]           position to start or end of file
[1]..[9]              position to percentage of filesize
[alt-P]               enter new file position
[F9][F10][F12]        display address + data + ASCII (16 bytes per line)
[F8][F11]             display address + ASCII (64 bytes per line)
[X]                   toggle base (hexadecimal or decimal)
[W]                   toggle mode (bytes or words)
[F]                   toggle filter character set (default or less filtered)
[U]                   toggle hexadecimal case (lower or upper)
[P]                   toggle address display
[I]                   toggle binary display
[D]                   toggle data display
[A]                   toggle ASCII display
[N][O][S]             XLAT mode (none, ASCII to OEM, OEM to ASCII)
[J]                   toggle $00 character filtering out in any ASCII display
[F1]..[F6]            4, 8, 16, 32, 64 or 96 bytes per line
[H][?]                help screen
[Esc]                 return to DOS



(* // ---------- "xemem.doc" ---------- // *)


Q&D XMS/EMS Memory v1.0 by Philippe Guiochon

Syntax 1 : XEMEM <xms|ems> <grab> <Kb>
Syntax 2 : XEMEM <xms|ems> <release> <handle>
Syntax 3 : XEMEM <xms|ems> <status>

XEMEM.LOG contains successful grab or release results.



(* // ---------- "xlat.doc" ---------- // *)


Q&D Xlat v1.4a by Philippe Guiochon

This program transcodes characters from one set to another.

Syntax 1 : XLAT [-r] [-u] [-z] [-debug] <glossary> < infile > outfile
Syntax 2 : XLAT [-r] [-u] [-z] [-debug] <glossary> <filespec> [destfile[.XLT]]
Syntax 3 : XLAT <-list|-l>
Syntax 4 : XLAT <-gen|-!>

    -f:$ user-specified glossary (default is XLAT.GLO)
    -r   no redefinition allowed (default is to allow redefinitions)
    -u   no undefinition allowed (default is to allow undefinitions)
    -z   allow character to string assignment (default is char to char)
    -l   list available glossaries
    -!   create XLAT.TST test file in current directory
    -k   keep original date and time stamp
    -x   disable LFN support even if available

a) Program will not process files with any of these extensions :
   .BK!,.COM,.EXE,.SYS,.DLL,.OVR,.OVL,.DRV,.VXD,.BIN,.ZIP,.ARJ,.LZH for safety.
b) Each original file is saved with .BK! extension ([destfile] is not).
c) Glossaries are defined in XLAT.GLO file, located in executable directory
   (note -f:$ allows a user-specified glossary).
   A glossary section is between "[_[_" and "_]_]", without blanks.
   Definition format is "<source> <target> [operand]",
   where both elements can be a string, a quoted string,
   a decimal number (#), a hexadecimal number ($#) or a range ([#..#]).
   Target can also be any of the following self-explanatory tokens :
   ~IDEM~,~NIL~,~RESET~,~BIT7OFF~,~BIT7ON~,~PLUS1~,~MINUS1~,~NL~,~CRLF~.
   These tokens require an operand value :
   ~PLUS~,~MINUS~,~INC~,~DEC~,~XOR~,~AND~,~OR~.
   Tokens are not case-sensitive.
   If -z option was specified, target can be a string ([1..16] characters).
d) Glossaries (XLAT.GLO and user-specified) must use DOS ASCII character set.
e) Lines beginning with either ";" or "#" are comments :
   should these characters be redefined, enclose them with double quotes.



(* // ---------- "xor.doc" ---------- // *)


Q&D XOR v2.1 by Philippe Guiochon

Syntax 1 : XOR <source> <target> <passphrase> [option]...
Syntax 2 : XOR <-f> <source1> <source2> <target> [-o[o]]

  -f          perform XOR between two files
  -o[o]       overwrite existing <target> (-oo = overwrite read-only)
  -p:#<,|..># specify start,count or start..end file positions range
  -f:#        process <source> from specified file position (0-based)
  -l:#        process <source> for specified length
  -q          quiet mode

With syntax 1, <target> is <source> XORed with <passphrase>.
With syntax 2, <target> is <source1> XORed with <source2>.

a) <passphrase> is either a hex string (with "$" prefix) or a text string.
b) Text string can contain the following metacharacters :
   "°n" for $0d0a, "°p" for "%", "°q" for double quote,
   "°[°-/'%]" for symbol, "°[$|x]#[°]" for hex/dec value.
   Note $00 value is not allowed.
c) Range can be specified in either decimal or hexadecimal ("$" prefix).
d) If range is specified, <target> size will match extracted portion.
e) With -f option, <target> length is the smallest of <source1> and <source2>.

Examples : XOR src dst $11223344 /f:$8 /l:4
           XOR src dst foobar
           XOR -o -f src1 src2 dst



(* // ---------- "xosldump.doc" ---------- // *)


Q&D XOSL data dump v1.0b by Philippe Guiochon

Syntax : XOSLDUMP [ itemsFile[.XDF] [ dataFile[.XDF] ] ] [-z] [-v]

  -z truncate strings at CHR(0) (default is to show CHR(0) as "¨")
  -a dump all O.S. entries (defined or not)
  -x do not show user settings

This program dumps XOSL v1.1.5 infos about O.S. entries and user settings
(default files are "C:\BOOTITEM" and "C:\XOSLDATA").



(* // ---------- "xtract.doc" ---------- // *)


Q&D File Data Extractor v1.2k by Philippe Guiochon

Syntax : XTRACT [option]... <source> <target> <start> <end|count>

  -o    overwrite existing <target>
  -t[t] create text <target> formatted for XD (-tt = -t -8)
  -8    output 8 hexadecimal bytes instead of 16 (-t[t])
  -n    do not display data in ASCII alongside data in hexadecimal (-t[t])
  -u    hexadecimal data in uppercase
  -q    quiet (no eyecandy)
  -r    rename existing <target>, if any
  -b    do not create backup (only if <target> was specified as "*" or "=")
  -z    abort data extraction at first encountered $00 byte (C-style string)
  -lfn  disable LFN support even if available

a) <start> and <end> are either a 0-based file position ("#"),
   the last position in file ("*") i.e. filesize minus one,
   or a file position relative to filesize ("*[-#]" where "*" means filesize).
   <count> is an absolute value ("<L|N|C>[=]#").
   Although nonsensical, the following forms are supported for ease of use :
   "L=*" and "L*" mean "up to last file position",
   "L=0" and "L0" allow creation of an empty file.
b) Hexadecimal values are prefixed with "$" ;
   supported inner cosmetic separators are any of ",._" ;
   supported suffixes for multiples of 1000 are K, M, G ;
   supported suffixes for multiples of 1024 are Kb, Mb, Gb.
c) By design and for obvious reasons, <source> cannot be a 0-length file.
d) If <target> is specified as any char in "*=!", it will become <source>.

Examples : XTRACT -t c:\win31\system\user.exe guesswho $29e2c L30
           XTRACT xpsp3.nrg xpsp3.iso 307200 *-156



(* // ---------- "yiking.doc" ---------- // *)


Q&D Yi King v1.0c by Philippe Guiochon

Syntax 1 : YIKING <s|c> [-w] [-r]
Syntax 2 : YIKING <hexagram> [hexagram] [-w] [-r]

This program casts (syntax 1) and/or explains (syntax 2) a Yi King hexagram.
With syntax 1, "S" stands for yarrow sticks toss, and "C" for coins toss.

-w  do not wait for keypress
-r  do not create YIKING.RPT report file in current directory

Of course, this computerized method cannot replace real yarrow sticks ! ;-)

Examples : YIKING s
           YIKING c -w
           YIKING 63 -r
           YIKING 42 3



(* // ---------- "yingyang.doc" ---------- // *)


Q&D Ying-Yang v1.0a by Philippe Guiochon

Syntax : YINGYANG [pause] [paper]

"pause" waits [0..100] milliseconds when drawing a line, default is 8.
"paper" is [A..P], default is A.



(* // ---------- "YT2SRT.doc" ---------- // *)


Q&D YT transcription to SRT format converter v1.0e by Philippe Guiochon

Syntax : YT2SRT <source> [-f] [-w:#] [-t] [-m] [-o]

  -f   create ".SRT" target (default is dumping to screen)
  -w:# subtitle line width (default is 66, 0=as is)
  -t   keep text only
  -m   allow multiline
  -o   overwrite existing ".SRT" target

This program tries and converts <source> YT transcription to SRT format.

a) <source> is made of one or more two-lines sets :

      [#:]#:#
      $

   where "[#:]#:#" is time in [hh:]mm:ss format, and "$" a line of text.
b) Note "[music]" and "[applause]" are filtered out.
c) Target will be created in current directory.
d) -t option omits numbering and time ; it forces ".TX" extension.



(* // ---------- "zigzag.doc" ---------- // *)


Q&D Zigzag demo v1.0i by Philippe Guiochon

Syntax : ZIGZAG [option]...

  -a   show palette until keypress or 10 seconds
  -z   end on mouseclick too
  -p:# color palette (0..14=rgbRGB$*/!=1230)
  -d   diagonal cross fade (default is normal cross fade)
  -i   independant lines (default is chained lines)
  -s   splines (default is lines)
  -o   softer splines (-t:1 recommended)
  -q   quix
  -b   blobs (circles)
  -f   blobs (disks)
  -t   spiros
  -x   autocenter (spiros only), default is random
  -c:# number of control points ([2..100], default is 20)
  -s:# number of segments ([2..50], default is 10)
  -t:# number of trails ([1..50], default is 10)
  -l:# lower speed ([1..50], default is 5)
  -u:# upper speed ([1..50], default is 10)
  -w:# waits for video retrace ([0..50], default is 0)
  -i:# RGB ink color (user palette) -- hex prefix is $
  -f:# RGB ink to fade to color (user palette) -- hex prefix is $
  -m:# minimum color index when drawing lines (default is 112)
  -m   alternate smoothing
  -y   do not show parameters at program exit

Here are keys available while program is running :
[rgbRGB$/*!=1230]-palette, [nd]-normal/dithered, [+-]-trails,
[ic]-independant/continuous lines, [F1|F2]-control points or spiro count,
[lsoqpft]-lines/splines/softsplines/quix/circles/disks/spiros,
[PgUp|PgDn]-wait for video retrace, [x]-spiro autocenter, [m]-smoothing,
[F3|F4]-lower speed, [F5|F6]-upper speed, [Escape|CR].




(* === 7. _LICENSE_ === *)

The whole QDTOOLS.ZIP archive content (Q&D Tools programs
and their source code, documentations and texts) are *freeware*
(*costless*), but they are definitely NOT public domain
and NOT even GPL (only companion data files,
sometimes adapted -- heavily or not -- from data found
on the Internet, are to be considered public domain).

Therefore, there are some restrictions about their (unlikely)
distribution. In a nutshell : no one is allowed to include the
Q&D Tools in a shareware or freeware compilation, whether
commercial or not, whatever the medium, unless there exists a
prior written negotiated consent by, and agreement with, the
author to do so. Only two distribution methods are allowed :
the copy of the original archive on any suitable medium
(floppy disks, CDR, etc.) by individuals (from one person
to another)), or the download from an *authorized* Internet site.

In all cases, no amount of money (beyond a very reasonable fee
to cover media price -- such as floppy disks or CDR -- and possibly
the price of a coffee or of a soda) will be charged for the Q&D Tools,
and all the original files must be kept together,
without *any* alteration. I really do not like all those commercial
shareware/freeware resellers who are the only ones to make money
from programs whose authors, almost always, don't get any cent
for their work (a fact which is almost always not entirely
undeserved <g>). I also don't like those Web sites who dare
and require a registration before user can download freewares
or drivers. And I really don't like so-called "improved"
source code either (unless it's a complete rewrite such as
VOXEL.MOD) : source code is provided here just in case
the user would need to fix a bug and/or enhance a feature
for his own usage, or just in case the user would like
to be sure the program does not contain anything malicious.
Use provided source code as a base for your own programs if you want,
but do NOT release altered versions, and do NOT misrepresent it
as "yours" either ! (That's why the author has removed
the Who When What history headers.) As said supra, I value
my time and (limited) skills as highly as anyone does :
"freeware" means costless, nothing more and nothing less ;
it does not mean (entirely) worthless, nor the "public domain"
so appreciated by people who have never created anything.

Modula-2 Web sites, Simtel, Garbo, FreeDOS, UBCD and Clonezilla sites,
and they alone, because of their real work, are authorized
(should they care to do so) to include the Q&D Tools online or
on the CDs they sell or distribute, whatever the (absence of) price.
Any other Web site willing to offer my programs,
whether online or not, MUST ask for permission FIRST.
For obvious reasons, only the most recent QDTOOLS.ZIP archive
(or any of its sub-archives) must be offered to the public,
older ones being *discarded*.

As a convenience for users, any authorized Internet site may
offer for download the individual unmodified sub-archives found in
QDTOOLS.ZIP, containing all original files (i.e. an
executable, its documentation, its data files and its source
code if applicable) provided the original full QDTOOLS.ZIP package
is available from the same source too. Here are two examples :
original MATRIX.ZIP archive may be offered alone
for download if its original QDTOOLS.ZIP source archive
is available for download from the same source.
A newly created TEXT.ZIP archive containing several
text processing utilities and their companion files
in the original unmodified archives (for example : NEWLINE.ZIP,
LCOUNT.ZIP and XLAT.ZIP) may be offered
for download if the download page also offers
the original QDTOOLS.ZIP source archive.
All relevant source code, modules and libraries (QD_*.*,
MODEX.OBJ if applicable, etc.) must be included
so that recompilation is feasible (in other words,
pertinent library archive whether for Modula-2, PowerBASIC
or VisualBASIC must be included in any compilation).
All companion files must be included too (this is the proof
the programs do work !). All repackaged archives must contain
this README.TXT file. For obvious reasons, QDTOOLS.ZIP archive
MUST remain unmodified and intact, with all files listed
in QDTOOLS.LOG : it must pass CHKEM test without any problem.

If you feel this policy is too restrictive, this just means
you've never seen your work (ab)used by unscrupulous individuals...
(that means : programs, sources and papers in computer magazines).
Among other oddities, I've even seen a bozo dare and write
he's the author of one of my older Apple ][ utility (ignoring
it was a subpart of my Apple ][ operating system). And many other
bozos copied my astrology program published in Micro-Systèmes
computer magazine instead of using the bibliography I provided
so anyone could write their own program.

Using these binaries and sources is very unlikely nowadays
(and the computing world does not really needs them,
though a few of my tools have unique functions),
but it should be done the Right Way. To me,
"Freeware" means *free* (*costless*) distribution,
*free* (*costless*) use, but nothing more :
once again, it's definitely NOT "public domain" nor "GPLed" code.


(*

2012 note : a few Web sites offer portions of QDTOOLS.ZIP archive
without being allowed to do so. Of course, adding insult to injury,
they don't even answer when asked to stop their ILLEGAL distribution
of my work : shame on them ! I guess this is yet another side-effect
of GPL-like licensing scheme, leading too many dishonest people
to dare and believe everything is public domain even when it is NOT !
Do you hear me, "findthat*.com", among others ?
Once again, QDTOOLS.ZIP is NOT public domain, and its distribution
policy is clear : only ALLOWED Web sites can offer them,
and source alteration is not to be made public nor "reattributed"
to anyone else pretending to "improve" my code (as one used to say
in the 1980s, "write your own instead !").

2013 note : as of 2013, only Modula-2 Web sites, Simtel, Garbo,
FreeDOS, UBCD and Clonezilla Web sites are authorized, provided they use
the latest revision : others Web sites are NOT unless
allowed to do so by me.

*)

Although their author has created and has been using various
Q&D Tools implementations for years now (back from 1980, in many
languages using many compilers such as 6502 assembler
(the Merlin years...), Applesoft BASIC, Forth, Turbo Pascal,
C (yuck ! whether Turbo, Quick or a few others), PowerBasic and
TopSpeed Modula-2, for many operating systems,
these programs come without any warranty, except
this one and only statement : Q&D Tools components will take
some space on your hard disk, and, when run, they will use
some of your CPU computing power. In other words, the author
does as everyone does today : he accepts no responsibility
at all. ;-)

The author will not be available for
praises/flames/comments/reports : he no longer has an Internet
account, considering the current signal/noise ratio... And he
doesn't believe in job-finding through the Internet. ;-)

Use these tools and source code if you find them useful,
do NOT use them if you don't find them useful. Period.



                  "Command line for ever !"



            "Tout finit bien, puisque tout finit."



                        "Game Over"



              (* END OF Q&D TOOLS README FILE *)



(* //------------------------------------------------------------// *)
(* //------------------------------------------------------------// *)
(* //          (* === 8. CHRONICLES AND RAMBLINGS === *)         // *)
(* //------------------------------------------------------------// *)
(* //------------------------------------------------------------// *)



- As a last tribute to Gary Kildall
- L'avenir de l'intelligence
- Le bluff du futur
- L'orthodoxe et l'hérétique
- La prédominance du crétin
- Tabula Rasa
- Imperium
- Pour un ultime hommage à Gary Kildall
- En hommage à Karl Kraus
- Fixing a classic : Buerg's LIST.COM and DOS directory selection
- Fun with XOSL installer
- XDS vs ADW vs PB

(* //------------------------------------------------------------// *)


           As a last tribute to Gary Kildall


   A specter is haunting Chicago, the specter of CP/M...


Who still remembers this ancestor of DOS called Control
Program for Microcomputers ? No one, except the actors and
spectators of past, and great times.

Why this nostalgic evocation ? Because Gary Kildall died a
few days ago, and we feel it as a duty to honor him, for we
unfortunately know, as Gilbert K. Chesterton did know it
too, that journalism mainly consists of telling readers about
Lord Jones' death, when those readers did not even know the name
of Lord Jones -- incidentally, we will not discuss here
whether the numerous Lord Jones journalists tell us about
are always worth this honor or this waste of time.

So, Gary Kildall was the founder of Intergalactic Digital
Research. A genius programmer (much more than William H.
Gates III is supposed to be by those who dare believe he
wrote Basic and DOS code) and a true visionary (again, much,
much more than Gates), he developed in 1974 the first real
operating system for 8 bits (and later 16 bits) processors.
His CP/M-80 showed a clever conception, elegant and
efficient, with its kernel written in PL/M (a high level
language) and its device drivers written in assembly
language. It was an immediate success and quickly became a
de facto standard : even though the O.S. was a spartan one,
it was God's gift to programmers and engineers, for it
remedied most incompatibilities from a product to another.
For those times were, already, abundant with new products.

CP/M went into oblivion, for it was not immediately
associated with IBM's Personal Computer. Mere bad luck : it
was a clone, Seattle Computer's QDOS, which prevailed upon
the original standard. Written by Tim Paterson, QDOS (for
Quick and Dirty Operating System) was to be as compatible as
possible with CP/M-80 v1.4. The product is widely known
under another name : MS-DOS 1.0. But that is another
story...

What's the relation with Chicago, code-name of the future
Windows 4.0 ? CP/M was happy with a few kilobytes, while
the full installation of the OS/2 ersatz produced by Microsoft
requires about 38 megabytes. Yet, in its code, there are certainly
many invisible traces of CP/M structures, a fact which may
be seen as a warning to these young generations for
which computing history begins with Windows and C++ :
precursor geniuses (Kildall, Wozniak and many others, almost all
forgotten now) have shaped our present as they have shaped our future.

Without men like Gary Kildall, microcomputing would _not_ be
what it is now ; and with people like Gary Kildall,
microcomputing would not _either_ be what it is now.


(* //------------------------------------------------------------// *)


                     L'avenir de l'intelligence


	"Le chameau est un cheval mis au point par un comité." :
Jacques Bergier aimait à citer cette jolie formule, dont il
attribuait la paternité à Churchill. Dans sa terrible
concision, elle explique non seulement la qualité des
applications modernes mais aussi l'étonnant anonymat de
leurs (ir)responsables.

	Il est révolu, le temps où le logiciel était naturellement
associé à son ou ses créateurs - Visicalc à Dan Bricklin et
Bob Frankston, Flight Simulator à Bruce Artwick, 1-2-3 à
Mitch Kapor et Jonathan Sachs... Avec les Easter eggs, ces
anodines facéties dissimulées dans les programmes, les
signatures sont devenues furtives et honteuses, parfois même
soucieuses de commercialisation (c'est l'exacte traduction,
due à Roger Minne, de marketing). Aujourd'hui, une
application doit évoquer une entreprise ou mieux, un
"C.E.O." réputé génial et visionnaire. Ainsi, Windows, c'est
Microsoft, et Microsoft, c'est William Gates.

	L'illégitime supériorité conférée aux hommes de gestion sur
les hommes de production (voire sur ceux de connaissance)
n'est pas l'apanage de l'industrie informatique ; elle y
scandalise seulement davantage, tant l'écriture d'un
logiciel est affaire de style, et personnel.

	Les oeuvres collectives des grands éditeurs font perdurer
des erreurs historiques, et ne sauraient allier, sinon par
accident, l'élégance à l'efficacité : ces qualités restent
l'apanage de projets menés par des créateurs solitaires - ou
presque. Ainsi d'Oberon, le système d'exploitation
remarquablement novateur mis au point par Niklaus Wirth et
Jurg Gutknecht. Ainsi, dans une certaine mesure, du premier
Linux, décidé par Linus Torvalds, qui suivait les traces de
Dennis Ritchie et Ken Thompson (les créateurs d'Unix), avant
de rallier à sa cause de nombreux programmeurs bénévoles
(peut-être au détriment de la cohérence d'ensemble).

	La même passion et la même rigueur animent ces hérétiques,
qu'ils rompent avec une tradition ou qu'ils en prolongent
une autre (ayant fait ses preuves sur quelque 20 ans). Hors
des églises Windows, ils incarnent la résistance au Nouvel
Ordre Logiciel. Leur existence est un heureux présage : il y
a toujours un avenir pour l'intelligence.


(* //------------------------------------------------------------// *)


                          Le bluff du futur


	"Depuis près d'un demi-siècle, l'explosion technologique se
trouve à la veille de révolutionner la vie quotidienne.
Demain, un courant d'information généralisée dissipera les
nécessités et les monotonies d'une existence à la fois trop
alternative et trop continue. Ce flux de bonheur
communicatif illuminera tous les foyers, sans distinction de
classe ou de revenu. Branchés par fil téléphonique au
mystère informatique, les ménages informatisés seront reliés
aux bibliothèques de documentation et aux banques
juridiques, aux universités pédagogiques et aux commerçants
avertis. Et rien ne sera plus jamais comme avant. Demain."

	Si ces quelques mots ironiques n'étaient rédigés dans une
langue trop claire et trop précise pour être contemporaine
ou journalistique, ils sembleraient avoir été écrits en
réponse aux thuriféraires et panégyristes d'Internet, alors
que leur auteur, l'humoraliste Georges Elgozy, s'attaquait
simplement aux futurologues, "prospectivistes",
"prévisionnaires" et autres "prophétionnels" toujours
prompts à célébrer un avenir d'autant plus radieux
qu'il est incertain.

	Vingt ans après la publication du Bluff du futur, le même
esprit critique (dont l'étymologie rappelle qu'il est
d'abord esprit d'examen) reste nécessaire, à considérer les
nouveaux topoi en vogue : l'éloge des "autoroutes de
l'information" et le culte d'Internet - religion qui compte
pour l'heure plus de prêtres que de fidèles. Quel magazine,
au reste, n'a pas repris avec complaisance les articles
enthousiastes parus dans la presse américaine pour célébrer
la prétendue "Nouvelle Frontière Electronique" et le
mal-nommé "CyberEspace" ?

	Sans méconnaître l'intérêt du réseau mondial, force est
pourtant de constater que le rapport signal / bruit des
threads de messages est trop souvent proche de zéro, et que
l'essentiel d'Internet est concentré dans les quelques
CD-ROM qui rassemblent programmes et textes de type F.A.Q.
(Frequently Asked Questions).

	Une mode récente entend magnifier l'extraordinaire quantité
d'informations accessibles après quelques invocations faites
à l'adresse des divinités modernes de l'espace virtuel,
appelées Gopher, Archie, Veronica ou Mosaïc. C'est oublier que le
plus grand obstacle à l'emploi des connaissances, c'est leur
abondance même : avec une centaine d'informations, on peut
tisser un filet, un réseau, une trame de cohérences ; avec
un millier, c'est un tissu d'incohérences que l'on obtient.
Notre époque tire un sentiment illégitime (et illusoire)
de sa supériorité à partir du volume des données dont elle dispose :
elle devra bien admettre que le véritable critère porte sur le
degré auquel l'esprit maîtrise ces informations.


(* //------------------------------------------------------------// *)


                     L'orthodoxe et l'hérétique


	Windows 95 est encore une "réalité virtuelle" (oxymore qui
bénéficie d'ailleurs d'une faveur à la mesure de son
absurdité !) que deux ouvrages sont consacrés au système
d'exploitation ayant la prétention de signer l'arrêt de mort
du couple DOS-Windows - couple dont Microsoft n'a
curieusement jamais tant souligné les failles...

	Dans Inside Windows 95, Adrian King fait entendre la voix
de ses maîtres avec un manque de style que la traduction
française a d'ailleurs scrupuleusement respecté (par force
plutôt que par choix délibéré). Cette biographie officielle
est comparable aux (trop) nombreux articles déjà consacrés au sujet :
c'est le texte sans ordre d'un camelot aux ordres,
célébrant Windows 95 de manière laborieuse autant que maladroite.
Les exagérations et omissions d'un auteur qui fait le maximum
de son minimum sont un affront systématique à l'intelligence
du lecteur, car l'orthodoxe King n'est pas un Debord,
capable d'écrire son Panégyrique avec brio.

	Avec Undocumented Windows 95, Andrew Schulman anéantit le
discours des "évangélistes" de Microsoft. Le tour de force est
d'autant plus admirable que l'hérétique Schulman, loin de
dénigrer Windows 95, en révèle la vraie nature : un système
d'exploitation à part entière... malgré les compromis qui,
justement, garantissent son succès. Le futur fleuron de
Microsoft ne résulte pas d'une refonte complète et il
exploite toujours des parties de code 16 bits non-réentrant
(DOS, en un mot). Avec ce texte brillant, Schulman donne une
magistrale leçon d'analyse rétrotechnique et de
révisionnisme contre les vérités prétendues évidentes.

	Microsoft a bien compris que dans la "société du
spectacle", le discours l'emportait sur les faits. Pourtant,
quelle importance, que Windows 95 soit une évolution logique
plutôt qu'une révolution technologique, et que ses rouages
internes montrent plus d'ingéniosité que d'élégance ? Tant
qu'il fonctionne correctement...

	"M..., Provençal, qui a des idées assez plaisantes, me
disait, à propos de rois et même de ministres, que la
machine étant bien montée, le choix des uns et des autres
était indifférent : "Ce sont, disait-il, des chiens dans un
tourne-broche ; il suffit qu'ils remuent les pattes pour que
tout aille bien. Que le chien soit beau, qu'il ait de
l'intelligence ou du nez, ou rien de tout cela, la broche
tourne, et le souper sera toujours à peu près bon."

	Ce mot d'un moraliste du XVIIIe siècle décrit toujours
aussi bien les mécanismes au coeur des logiciels comme des
entreprises. Rien là qui soit si terrible, du moins tant que des
hérétiques comme Schulman découvriront le dessous des
cartes... et le communiqueront librement.


(* //------------------------------------------------------------// *)


                      La prédominance du crétin


	Virtuoses de l'ironie, les écrivains et journalistes
Fruttero et Lucentini constataient que l'unité secrète de
leurs meilleurs textes tenait à ce fait : nous vivons sous
le règne de la bêtise triomphante. Comment nier, en effet,
que le stultus, grâce aux progrès de toutes sortes (à
commencer par celui de l'ignorance), a toujours plus
d'occasions d'agir, de parler, de se manifester - en un mot
qui lui est cher, de se "réaliser" ?

	Dès lors, La prédominance du crétin s'imposait comme titre
de leur première anthologie, offerte en hommage aux "tristes
et lucides compagnons épars et précieux d'une résistance
que - malgré tout - il faut bien faire".

	Cette allusion littéraire, insolite, certes, dans les pages
d'un magazine consacré aux joies contestables de
l'informatique, s'impose, à considérer l'annonce, aux
Etats-Unis, d'un nouveau produit signé Microsoft, BOB,
produit dont l'objectif est simple : vaincre les réticences
du grand public encore allergique aux bienfaits du
micro-ordinateur imposé dans les foyers. La technologie
employée, moins originale qu'il y paraît, exploite la
métaphore de la maison. Chaque membre de la famille organise
sa pièce avec les "objets" (entendre ici : les applications)
dont il a l'usage, et accomplit ses tâches guidé par des
animaux de dessin animé qui prodiguent leurs conseils à
grand renfort d'effets sonores et phylactères.

	A en croire les experts, BOB (ou ses dérivés destinés à
l'infinie classe des "clueless") serait promis à un bel
avenir. Certes, il n'est pas pour Eux, membres de l'élite
technicienne technophile, mais quel merveilleux concept pour
ces Autres dont le faible entendement ne conçoit pas même le
double-clic...

	Les connaisseurs (ou prétendus "bons techniquement") ont
beau jeu de se moquer avec condescendance de BOB, destiné à
ce grand-public rétif à tout effort intellectuel, plus porté
à se passionner qu'à s'instruire : lui sont-ils si
supérieurs, pourtant, quand ils réclament, eux, toujours
plus d'Assistants (paradoxalement utiles pour accélérer des
opérations déjà maîtrisées, non pour les apprendre !) ou
quand ils espèrent un jour "programmer sans programmer" ? Se
croyant à l'Avant-garde, ils ne sont que les éclaireurs d'un
troupeau de lemmings. La bouleversante révolution
informatique débouche dans la pharmacie de M. Homais. Autant
dire, avec Fruttero et Lucentini, "sur les vastes horizons
de Néanderthal".

	A moins qu'éditeurs et constructeurs ne soient grands
philosophes, au sens où l'entend Hubert Monteilhet dans ses
Pavés du diable : "Le vrai philosophe a le plus grand
respect des imbéciles : ils forment à la fois une clientèle
et une majorité".


(* //------------------------------------------------------------// *)


                             Tabula Rasa


	Windows 95 est encore à l'état de promesse que déjà la
presse spécialisée le compare à son rival OS/2 3.0
Warp - bien réel, lui. Au reste, le vainqueur de cette
confrontation artificielle ne fait aucun doute
car le "marché" - c'est un fait reconnu par tous les commentateurs
autorisés à formuler une opinion dans les journaux - ne saurait se
tromper.

	Pourtant, chez Microsoft comme chez IBM, les divisions
chargées de la commercialisation et de l'évangélisation
semblent vouloir ignorer ce résultat prévisible et
persistent à prêcher les convertis avec des sermons en forme
d'arguments techniques irréfutables et de mesures
indiscutables, qui célèbrent la supériorité de leur
champion. Des stratèges plus au fait des questions
militaires auraient choisi de reconnaître les qualités de
l'adversaire pour magnifier leur victoire... mais la réclame
et la subtilité font rarement bon ménage.

	En tout cas, il faut saluer les développeurs qui, dans l'un
et l'autre camp, s'ingénient tant bien que mal à concilier
le poids du passé avec les exigences du futur. Quel que soit
le prochain système d'exploitation bureautique dominant, il
sera par nature imparfait à cause de ce fatum nommé
"compatibilité historique" qui interdit toute véritable
révolution. Au mieux, l'évolution la plus probable donnera
raison à l'apocryphe malédiction chinoise : "Puissiez-vous
vivre à une époque de transition entre deux plateformes
imparfaitement incompatibles".

	La surabondance des couches, standards et protocoles censés
résoudre la majorité des problèmes informatiques évoque ces
excès de maquillage qui accentuent les années qu'ils
prétendent dissimuler. Les évidentes limites des
architectures matérielles et composants logiciels
contemporains donnent le signal d'une révision déplaisante,
coûteuse mais nécessaire, au bénéfice de la simplicité comme
de l'élégance. Si le futur requiert vraiment un système
d'exploitation réseau orienté objet, multitâche,
multithread, multiprocesseurs et indépendant de la
plateforme matérielle, la réponse n'est sans doute ni OS/2
ni même Windows NT. Xerox a tout inventé en
micro-informatique : un nouveau Palo Alto Research Center
devrait saisir ce kairos et recommencer.

	L'innovation radicale est plus souvent saluée qu'adoptée :
malgré les discours, le mythique "marché" (utilisateurs,
constructeurs, éditeurs et même programmeurs) n'apprécie
guère les produits trop atypiques. S'il persiste dans son
immobilisme, il n'aura pas le droit de se plaindre. Il devra
du passé faire table rase ou continuer à en connaître les
ombres.


(* //------------------------------------------------------------// *)


                              Imperium


	Deux articles parus cette année dans la presse américaine
portent un regard particulièrement critique sur l'empire
Microsoft. Leur originalité tient à ce que, pour une fois,
les jugements semblent bien argumentés, ne devant rien à la
passion (qu'elle soit favorable ou hostile).

	Dans son numéro d'août, le magazine Upside consacrait un
dossier à l'enquête menée par la Federal Trade Commission,
cet organisme officiel censé chercher à savoir si le
monopole de fait exercé par l'entreprise de Bill Gates est
ou non le fruit de pratiques dites déloyales.

	Parmi les experts consultés figurait une personnalité
pourtant bien connue pour avoir, en diverses occasions,
défendu Microsoft contre ses nombreux détracteurs. Ce témoin
avait découvert dans plusieurs composants de Windows des
portions de code générant un message d'erreur alarmant
lorsque l'environnement graphique était lancé sur un DOS
concurrent -- l'erreur étant, bien sûr, de faire confiance à
un autre éditeur que Microsoft. Malgré son incrédulité, il
avait dû se rendre à l'évidence : le géant mondial du
logiciel avait recours à des procédés mesquins autant
qu'indignes. L'article évoquait aussi des manoeuvres
commerciales pour le moins douteuses (déjà évoquées dans
l'intéressant ouvrage de Robert X. Cringely intitulé Accidental
Empires).

	En septembre, dans le Dr Dobb's Journal, les développeurs
découvraient un exposé fort documenté, rédigé par notre déçu
du microsoftisme : les preuves étaient là, irréfutables,
présentées par Andrew Schulman, un des co-auteurs du célèbre
"Undocumented DOS" ("Les coulisses du DOS"), qui analysait
magistralement le fichier WIN.COM. Le code incriminé, dont
Microsoft avait bien dû reconnaître l'existence sur
certaines préversions, était non seulement repris mais
encore dissimulé dans la version commercialisée. Il y semble
neutralisé, mais la modification d'un octet suffit à le
ranimer : alors décrypté, il tente de déjouer les débogueurs
et affiche un message d'erreur s'il détecte DR-DOS ou Novell
DOS. Et si d'autres (mauvaises) surprises similaires se
dissimulaient dans les suites d'instructions ?

	A l'évidence, Microsoft n'entend pas trop respecter les
lois du marché et de la concurrence, non plus que sa
clientèle. Ses responsables n'ont-ils pas affirmé avec un
aplomb admirable que Double Space, le programme de
compression intégré à MS-DOS 6 (et programme étrangement
comparable à Stacker, soit dit en passant), fonctionnait
parfaitement ? Pourtant, une version 6.2 apporte des utilitaires
conçus pour remédier à un problème pourtant nié
avec une belle énergie -- à défaut de conviction et surtout d'honnêteté.

	A long terme, l'ambition de Bill Gates n'est pas seulement
de contrôler le marché des applications, mais aussi
l'électronique, la domotique et les réseaux à l'échelle de
la planète -- tous les domaines où le logiciel aura son mot
à dire. Dans cette perspective, presque tous les moyens sont
bons -- qui sont peut-être efficaces, mais au mépris de
toute morale élémentaire : il est vrai que les lois du
commerce comme celles de la guerre ne valorisent que la
victoire à tout prix.

	Avoir atteint une situation élevée n'est jamais tout à fait
le résultat du hasard, quoi qu'en puissent penser les
concurrents, les envieux, les esprits chagrins et même
les réalistes qui ne méconnaissent pas le rôle de la déesse Alea
dans certains destins. Et Microsoft n'est pas une grande entreprise
simplement parce que ses rivaux seraient tous de moindre envergure.
L'explication serait trop simple, qui ferait bon marché
d'une loi (peut-être exagérément optimiste) qu'aimait à
rappeler Lincoln : "On peut tromper tout le monde quelque
temps ; on peut tromper quelques personnes tout le temps ;
mais on ne peut pas tromper tout le monde tout le temps".

	Si Bill Gates est devenu l'une des premières fortunes des
Etats-Unis, et si Microsoft fait figure de référence
dans l'industrie logicielle, c'est en raison de qualités
commerciales (à défaut d'être techniques) réelles que nul
n'entend ici songer à contester -- quand bien même la
perspective de dépendre d'un seul fournisseur pourrait
susciter quelque inquiétude, au nom de la liberté de choix
et de l'indépendance. Point ne faudrait aussi oublier que
Bill Gates, dans ses entreprises contestables (en tout cas
aussi contestables que celles exposées dans un vieil ouvrage
consacré à l'empire I.B.M.), n'est pas dépourvu de ces complices
qu'on appelle aussi... des clients.

	Néanmoins, dans le cadre de cette lutte entre les grands
éditeurs de logiciels pour relever les défis de la fin du
siècle, Microsoft devra peut-être comprendre que l'autorité
et la puissance ne sont pas séparables du sens des
responsabilités et même du fair-play : tels seraient le fardeau
et la gloire de l'Empire que Bill Gates compte bien bâtir.


(* //------------------------------------------------------------// *)


          Pour un ultime hommage à Gary Kildall

      Un spectre hante Chicago, le spectre de CP/M...


    Mais qui se souvient encore de l'ancêtre du DOS, appelé
Control Program for Microcomputers ? Personne, sinon les
acteurs et spectateurs d'une autre, et grande époque.

    La raison de cette évocation nostalgique ? Le récent décès
de Gary Kildall, auquel nous entendons rendre hommage
ici - tant il est vrai que le journalisme, "c'est apprendre que
Lord Jones est mort à des lecteurs qui ignoraient jusqu'au
nom de Lord Jones" (Chesterton).

    Gary Kildall, donc, avait fondé Intergalactic Digital
Research. Programmeur génial (plus que William Gates)
et visionnaire (là aussi, plus que William Gates), il
développa en 1974 le premier système d'exploitation pour
micro-ordinateurs 8 (et plus tard 16) bits. Intelligemment
conçu, alliant l'élégance à l'efficacité, CP/M-80 se
composait d'un noyau rédigé en PL/M (un langage de haut
niveau) et de pilotes de périphériques (écrits en
assembleur). Le succès fut immédiat : s'il était d'une
sobriété spartiate, le nouveau standard rassurait les
programmeurs et les constructeurs en remédiant aux
incompatibilités d'un matériel à l'autre. Et ces temps
étaient - déjà - fertiles en nouveautés.

    CP/M est tombé dans l'oubli, faute d'avoir été immédiatement
associé à l'IBM Personal Computer. Pure malchance : c'est un
clone, le QDOS de Seattle Computer, qui l'a emporté sur le
standard original. Tim Paterson l'avait mis au point
dans l'urgence (QDOS signifie Quick and Dirty DOS),
avec un impératif catégorique : une compatibilité aussi parfaite
que possible avec... CP/M-80 v1.4. Le produit est plus connu
sous un autre nom : MS-DOS 1.0 -- mais c'est une autre histoire,
qu'il faudra bien raconter un jour...

    La relation avec Chicago, le futur Windows 4.0 ? CP/M se
contentait de quelques kilo-octets, quand l'installation
complète de l'OS/2 signé Microsoft prend
sensiblement 38 méga-octets. Dans son code, sans doute,
perdurent d'invisibles vestiges de CP/M, comme un rappel
aux jeunes générations pour qui l'histoire commence avec
Windows et le C++ : des génies précurseurs (Kildall,
Wozniak et d'autres, tous presque ignorés aujourd'hui),
ont modelé notre présent comme notre futur.

    Sans des hommes comme Gary Kildall, la micro-informatique ne
serait pas ce qu'elle est aujourd'hui ; avec des hommes
comme Gary Kildall, la micro-informatique ne serait pas non
plus ce qu'elle est aujourd'hui.


(* //------------------------------------------------------------// *)


En hommage à Karl Kraus


	Pourquoi rédiger le banc d'essai des bancs d'essai
consacrés à DR-DOS 6.0 ? Le produit a fait l'objet d'articles
dans tous les leaders de la presse micro-informatique,
dans un laps de temps relativement court (deux mois). Sa nature
même imposait des procédures de test plus rigoureuses encore qu'à
l'ordinaire, s'agissant d'un système d'exploitation
compatible DOS. Il n'était donc pas inintéressant d'examiner
de quelle manière les journalistes de la presse spécialisée
en ont su rendre compte.

	Deux points nous semblent à préciser : d'une part, nous
n'avons aucun lien avec la société Digital Research (les
erreurs que nous relevons ne sont d'ailleurs pas toujours à
l'avantage de DRI). Et, d'autre part, aucune des remarques
que nous avons pu formuler ne nous semble hors de la portée
de tout utilisateur un tant soit peu compétent, et ayant
_réellement_ utilisé le produit pendant deux petites heures.


Remarques liminaires

	De manière évidente, pour un système d'exploitation, il
fallait installer le logiciel sur plusieurs configurations
matérielles, de l'XT de base jusqu'au 486, et pour chaque
machine tester plusieurs configurations de DR-DOS même
(choix des stratégies d'installation, par exemple).

	Cette procédure d'évaluation, pourtant élémentaire dans sa
logique et sa rigueur, n'a été mise en oeuvre dans AUCUN des
bancs d'essai examinés.

	En outre, dans la mesure où DR-DOS 6.0 se pose en rival de
MS-DOS 5.0 (un point qui est implicite dans tous les
articles), la comparaison s'imposait avec le produit de
Microsoft, notamment pour la gestion mémoire et les utilitaires
fournis.


Eléments relevés dans les différents comptes rendus


	Magazine : Science & Vie Micro de décembre 1991
	Auteur : Christophe Chatillon

	- Mention en ouverture de l'article d'une "nouvelle
commande"... qui n'en est pas une : DELQ, qui existait déjà
sur la version 3.41 de DR-DOS.

	- Aucune hiérarchisation des éléments qui constituent le
système d'exploitation : l'auteur met sur le même plan un
défragmenteur classique, qui n'est d'ailleurs pas à la
hauteur des utilitaires existants (Speedisk de Symantec,
Compress de Central Point Software, ou FastTrax de Mark
Elfield), avec le rudimentaire interpréteur PostScript
livré avec DR-DOS 6.0.

	- Mention d'un "logiciel d'économie d'énergie qui met en
veilleuse le microprocesseur (sic !) et la mémoire vive
durant les phases d'inactivité", élément délirant qui provient
d'une mauvaise lecture du dossier de presse.

	- L'auteur ne parle nulle part des deux caractéristiques
les plus importantes de DR-DOS 6.0 : la compression des
données par le driver SSTOR, ainsi que la gestion de la
mémoire disponible.

	- L'auteur sait aller à l'essentiel, qui signale une
amélioration décisive de la commande DIR : l'option /2, qui
permet d'afficher la liste des fichiers sur 2 colonnes.
Consacrer trois lignes à ce point mineur, quand l'article
est déjà fort court, relève d'un sens curieux des
priorités...

	- L'auteur mentionne la présence de "divers bogues" dans
DR-DOS, sans en fournir un seul exemple précis (sinon un,
sur l'affichage des labels de disque, que nous n'avons, pour
notre part, jamais rencontré).


	Magazine : L'Ordinateur Individuel de décembre 1991
	Auteur : Guillaume de Brébisson

	- L'efficacité d'un cache-disque est quantifiable de
manière précise : il est donc plaisant de voir l'auteur
affirmer à propos de SuperPC-Kwick qu'il est "généralement
considéré comme le plus puissant du genre". Il commet ainsi
deux erreurs graves : ne pas avoir testé effectivement
l'utilitaire, et surtout avoir repris des éléments
d'information (lus dans la presse américaine) déjà anciens,
qui ne sont plus justifiés aujourd'hui. En effet, s'il est
vrai que jusqu'à une date récente, SuperPC-Kwik était le
"meilleur" cache-disque du marché, le Norton Cache (dans sa
version 6.0) lui est légèrement supérieur (il aurait suffit
à l'auteur, à défaut de faire les essais lui-même, de consulter
les forums des utilisateurs sur le serveur américain CompuServe
pour le vérifier à peu de frais).

	- Prétendre que le logiciel de compression SSTOR permet de
doubler la capacité de stockage du disque dur montre que
l'auteur n'a pas une seule fois  consulté l'option "Stats" du
programme SSTOR : il aurait alors vu que le taux réel de
compression est généralement de l'ordre de 1,5:1, et non de
2:1, avec un disque dur "standard" (applications, sources
ASCII, images, archives ZIP). Le taux de compression
effectif étant très dépendant, pour d'évidentes raisons, de
la nature des fichiers présents sur le disque. Le doublement
annoncé (et affiché) est donc théorique.

 	- Erreur essentielle : à en croire l'auteur, "Il [le
logiciel SSTOR] peut être désinstallé sans dommage. Ainsi,
si l'on décide de changer de disque dur et que l'on souhaite
récupérer les données non compressées, on pourra revenir en
arrière." Il est effectivement possible de désinstaller
SSTOR sans avoir, à la suite de cette opération, à "changer"
de disque, mais les données compressées sont alors
irrémédiablement perdues, comme le précise d'ailleurs
l'option "Supprimer (une partition SSTOR)". Les raisons, là
encore, sont évidentes, pour que l'opération de compression
ne soit pas réversible sur le même disque : avec la
meilleure volonté du monde, faire tenir quelque 30 ou 40 Mo de
données décompressées sur un disque de 20 Mo tiendrait du
miracle... L'auteur n'a peut-être pas saisi qu'il fallait
d'abord faire une sauvegarde des données sur un autre
support, avant de supprimer la partition SSTOR ?

	- Les chiffres qui indiquent la quantité de mémoire
conventionnelle disponible semblent reprendre les éléments
fournis par Digital, les donnant pour "normaux", quand
l'éditeur lui-même, plus prudent, les donne comme un gain
maximum : ainsi, on ne peut obtenir 627 Ko sur un simple 286
(sinon avec certains circuits "Chips and Technologies"). De
même, sur un XT, il n'est possible d'obtenir 612 Ko de
libres qu'en disposant de mémoire paginée.

	- La conclusion est savoureuse, qui énonce que "DR-DOS ne
propose toutefois pas assez de nouveautés pour être acheté
en plus du système d'exploitation de Microsoft"... Comme si
la question se posait d'acquérir les DEUX systèmes, quand
ils remplissent la même fonction ! De manière analogue, quel
utilisateur "normal" irait acheter à la fois Lotus Windows
ET Excel 3.0 ? ou WordPerfect 5.1 ET Word 5.5 ?

	- Le prix indiqué (750 Fht) diffère du prix mentionné dans
tous les autres magazine (mauvaise lecture du dossier de
presse ?).


	Magazine : Soft & Micro de novembre 1991
	Auteur : Patrick Paolin (Claude Marson)

	- Remarque valable pour l'ensemble du texte : l'auteur
mentionne (pour augmenter son compte de feuillets, comme à
sa déplorable habitude) force détails qui ne sont d'AUCUN
intérêt dans un banc d'essai (par exemple, le fait que la
touche F10 permet de sortir du SETUP, que la combinaison
Alt-X sert à quitter le défragmenteur, la syntaxe même de
certaines commandes, etc.).

	- L'auteur fait preuve d'un sens certain des priorités,
qui, dès le début de l'article, traite du défragmenteur
DiskOpt, avec un luxe de détails gratuits ("chaque petit
losange représentant un cluster", etc.), quand il n'est
mentionné nulle part que cet utilitaire est simpliste, par
rapport à des outils comparables.

	- Là encore, "l'utilitaire SuperPC-Kwik de MultiSoft a la
réputation d'être l'un des plus performants du marché"... Si
c'est vrai, c'était quantifiable par des tests (voir
remarque pour le banc d'essai de L'Ordinateur Individuel).
De surcroît, les paragraphes qui prétendent expliquer le
fonctionnement d'un cache-disque sont confus : ainsi, "un
bon score [le "cache-hit"] s'établit à 90%, voire 95%" :
c'est ignorer que les performances d'un cache ne se mesurent
pas à ce seul indicateur (ainsi, lancer plusieurs fois de suite
le même programme fera vite monter le "cache-hit" à 100%
pour d'évidentes raisons !).

	- L'auteur annonce des taux de compression mirobolants
(allant jusqu'à 8:1 -- curieusement noté 8,1 !), ignorant
manifestement qu'un tel compactage n'est atteint que pour
une infime minorité de fichiers (en fonction de leur taille
comme de leur nature : à défaut de réflexion, il lui suffisait
d'utiliser XDIR pour le vérifier).

	- Remarque désopilante : TaskMax peut faire tourner jusqu'à
une vingtaine d'applications "à condition d'avoir de la
place"... Au reste, dans la pratique, Taskmax n'est utilisable
qu'avec au plus trois ou quatre sessions.

	- Si la gestion mémoire sous DOS pouvait déjà apparaître
comme complexe, voire compliquée, elle en devient encore plus
incompréhensible pour le commun des mortels, avec
l'apparition d'une mémoire que nous appellerons "mobile" :
l'auteur place la mémoire haute tantôt après les premiers
640 Ko de mémoire conventionnelle ("elle ne peut disposer de
suffisamment de mémoire haute, parmi les 384 Ko situés
au-dessus des 640 Ko de mémoire conventionnelle.", page 73),
tantôt à sa véritable place ("les 64 Ko au-dessus du premier
méga-octet", page 74).

	- Le switch /P (pour COMMAND.COM) n'est en rien une
"importante extension".

	- Pour l'auteur, ViewMax "n'a pas changé par rapport à sa
version 5.0" : c'est ignorer les effets "en relief" qui ont
été ajoutés à ce shell graphique.

	- Dans ses "quelques conseils PRATIQUES pour utiliser
DR-DOS avec Windows", l'auteur affirme que "Windows est
incompatible avec l'utilitaire de compression SuperStor" :
ce qui est inexact, quel que soit le mode de fonctionnement
de Windows 3.0 (lire infra notre remarque sur la future
version de Windows 3.1).


	Magazine : Info PC de novembre 1991
	Auteur : Thierry Pigot

	- Une fois de plus, SSTOR "double" la capacité du disque
dur...

	- Erreurs diverses sur la gestion mémoire avec MS-DOS 5.0
(exploitation de la mémoire haute).

	- Libération de 631 Ko "en moyenne", quand Digital Research
n'annonce, dans le meilleur des cas, que 628 Ko sur un 286.

	- On ignorait que la fonction d'un gestionnaire de mémoire
cache fût de charger plus vite une interface graphique...
A quoi sert alors le cache présent dans de nombreux microprocesseurs ?

	- L'auteur affirme que le guide HyperText DOSBOOK est
complet, alors qu'y manquent, entre autres, les commandes
utilisables dans les fichiers CONFIG.SYS et AUTOEXEC.BAT. De
surcroît, ce guide est censé être "instantanément
disponible", quand il suffit de l'avoir utilisé sur un
286-12 (pour ne pas mentionner un XT gonflé à 8 Mhz) pour le
trouver inutilisable en raison d'une lenteur qui en assimile
la consultation à un véritable chemin de croix. Une documentation
électronique n'est pas un substitut acceptable pour
une documentation imprimée.

	- Comme dans les articles précédents, il n'est précisé
nulle part que le driver SSTOR prend (au pire) quelque 40 Ko
de mémoire conventionnelle (nombre qui peut tomber à une
vingtaine de Ko en utilisant, sur les systèmes qui le
permettent, la commande HIDEVICE).


	Magazine : Micro Systèmes de novembre 1991
	Auteur : Marcel Baugé (Jérôme Coulomb)

	- Contrairement à ce qu'affirme l'auteur, TOUS les utilitaires
ne marchent pas avec SuperStor : ainsi de l'actuelle version de FastTrax
(le meilleur défragmenteur disponible à l'heure actuelle).

	- Une fois de plus, le cache est "probablement" le
meilleur... sans élément de test.

	- L'auteur a découvert une nouvelle catégorie, sans nul
doute destinée à une grande fortune auprès des
professionnels de la sécurité informatique :
"[L']utilisateur malveillant [qui] a oublié son mot de
passe..."

	- "Il appartient à chacun de faire son choix [entre MS-DOS
5.0 et DR-DOS 6.0]. Pour ma part, j'ai installé sur mon PC
le DR DOS 6.0 de Digital Research." : la conclusion, toute
justifiée qu'elle peut être, rend hommage à l'objectivité
qu'on peut attendre de la part d'un ingénieur qui
est employé par Digital Research... Ce détail n'est évidemment
pas cité dans l'article, la presse française n'ayant
pas la décence d'imiter Byte, qui mentionne presque toujours
les informations de ce genre.


En guise de conclusion...

	D'une manière générale, on repère aisément dans presque
tous les articles de graves erreurs factuelles, une
concentration excessive sur des détails sans importance,
ainsi qu'un total manque de discernement dans l'évaluation
des éléments importants du produit. Trop souvent aussi, les
auteurs reprennent des informations sans se donner la peine
de les vérifier, allant jusqu'à les déformer et à leur
attribuer une portée qu'elles n'ont pas dans leurs sources.
Manquent, de manière générale, des indications chiffrées :
par exemple, alors que tous les articles mettent en avant
les gains de mémoire et la compression des données, aucun
d'eux n'indique la place effective prise en mémoire par le
driver SSTORDRV.SYS.

	A aucun moment, il n'y a de synthèse donnant au lecteur les
éléments d'information nécessaires pour savoir quel système
d'exploitation adopter, de MS-DOS 5.0 ou de DR-DOS 6.0,
préférant s'en tenir à des considérations générales
relatives aux stratégies de leurs éditeurs respectifs.
Ainsi, ne figure nulle part un simple tableau récapitulatif
des fonctions assurées par l'un et l'autre produits.

	L'impression d'ensemble qui découle de ces bancs d'essai
est celle de l'impressionnisme, du manque de méthode, voire
de l'incompétence (à voir certaines confusions sur des
notions essentielles) : autant de traits typiques des
collaborateurs de la presse micro, quand ils ne sont pas
surveillés par un véritable professionnel.


A titre d'information...

	Pour avoir essayé les versions française (qui comporte
d'ailleurs quelques jolies facéties de traduction) et
anglaise de DR-DOS 6.0, nous n'avons relevé que deux
véritables problèmes : d'abord, le verrouillage en écriture
d'une partition SSTOR, auquel le lancement de DISKOPT a
remédié sans qu'on en puisse voir clairement la raison.
Ensuite, la lenteur inhabituelle et surtout inadmissible des
accès aux disquettes, dont rien ne peut raisonnablement
rendre compte sinon l'incompétence d'un programmeur système
de chez DRI.

	Signalons aussi que le défragmenteur FastTrax désorganise
totalement une partition SSTOR, au point de rendre
nécessaire l'utilisation de la commande RECOVER (et le
recours à un Backup pour récupérer nombre de fichiers). Au
nombre des ennuis mineurs, l'utilitaire CURSOR, qui est à
l'origine de plantages aléatoires sur les portables équipés
d'un écran LCD (en sont victimes aussi bien des logiciels de
communication que le vénérable Word 5.5) : il convient donc
de ne PAS l'utiliser. SCRIPT, quant à lui, refuse
obstinément de s'installer en mode TSR pour le port LPT1 (de
même qu'il dédaigne d'utiliser l'alternative PRN:), ce qui
contraint donc à "ruser" en assignant le port LPT2 au port
LPT1. Quant à l'utilitaire CHKDSK, il indique
systématiquement une valeur erronée pour le nombre d'octets
libres, quand on le consulte pour une partition SuperStor.

	Si DR-DOS 6.0 fonctionne parfaitement avec Windows 3.0, il
n'en va pas de même avec Windows 3.1 (dont nous disposions
dans une version bêta). Aux Etats-Unis, notamment sur
CompuServe, la rumeur voudrait que les programmeurs de
Micro$oft se soient "amusés" à tester si Windows tourne sur
DR-DOS et, dans l'affirmative, à faire planter le programme.
Une petite malpropreté qui n'aurait rien d'étonnant quand on
connaît un peu l'histoire de la firme dirigée par le sieur
William H. Gates, III. Nul doute que ce point d'importance
fera l'objet d'intéressants développements ultérieurs.

	Deux lacunes, à notre sens, dans DR-DOS 6.0 : il faudrait
un petit interpréteur (ou mieux, un compilateur) BASIC ou
PASCAL, toujours pratique pour l'utilisateur qui maîtrise un
peu sa machine ; et surtout un gestionnaire de fichiers
genre Xtree, AZ ou Pctools 4.3, qui remplacerait
avantageusement ViewMax, dont l'INintérêt est remarquable.

Paris, le 28 janvier 1992

(* //------------------------------------------------------------// *)


    Fixing a classic : Buerg's LIST.COM and DOS directory selection


        As every DOS user, I've known Vernon Buerg's classic LIST utility
for very long a time. It was among the few tools which should have been
included with every DOS version from the very beginning. I remember
Borland including a tiny LIST-like tool in many products in order to check
display their readme file. I still wonder why no one seems to have written
such a tool for any Vindoze version when there are so many excellent
Norton Commander adaptations (such as FreeCommander).
        Although I was not a user (for years, I've been using
PC Magazine's customized tiny BROWSE utility as a TYPE replacement,
and my own XD for hex viewing and patching, together with
a port of my primitive Apple ][ VIEW program ; besides,
for philosophical reasons, I favor freeware against shareware
whether limited or not), I've recommended LIST to DOS users
so many times I would be a little richer
if I had gotten one dollar per recommendation <g> -- it was like
my telling people to perform regular backups while I did not do so myself,
which led me to write CS, VITAL and UCLONE after disaster stroke...
but that's another story.
        I had lost trace of LIST revisions around 1994
and I had almost forgotten it. In 2004, I suffered an attack
of older DOS nostalgia (at the time, I was almost always running
Win98SE for a few DirectX games, before I went back to running
real DOS half the time I was in front of my PCs), and I wasted
a few hours on the Internet in order to check whether
there were still DOS and LIST users in our Win* and *n*x times.
        I found LIST had its Website and I downloaded LISTEVAL.ZIP archive
in order to see how the program had evolved. I immediately found
a "feature" which could either be a normal shareware limitation
or a bug : directory selection, whether from main menu
or from Path command, had not effect.
        As that weird behavior was not mentionned in the manual
(the shareware limitation seemed the classical 30 days evaluation period),
I first thought new LIST did not like Novell DOS 7
(there were a few compatibility quirks with a few programs,
mainly because of ND7 EMM386) : I rebooted with MS DOS 6.22,
only to discover the "feature" -- i.e. the problem -- still existed.
        For the sake of completeness, I also rebooted with Windows 98SE...
and the problem was no longer here, whether from the DOS box
or from the "raw" MS DOS 7.
        I dared think LIST Enhanced Plus behavior could be... a bug.
Unfortunately, I had too much time to waste, enough to disassemble
the .COM file. I then unarchived Ralf Brown's latest Interrupt List files,
and I looked for references to all possible culprits int $21 calls,
i.e. 2147 (GET CURRENT DIRECTORY), 210E (SELECT DEFAULT DRIVE),
2119 (GET CURRENT DEFAULT DRIVE), 213B (SET CURRENT DIRECTORY)
and 21713B (Windows 95 - LONG FILENAME - CHANGE DIRECTORY).
It took me a few coffees and ZD86 runs to locate the problem :

        21C1:417D 833EA4033A    CMP w[03A4h],3Ah
        21C1:4182 744B          JE  41CFh
        21C1:4184 803EA30300    CMP b[03A3h],00
        21C1:4189 7444          JE  41CFh
        21C1:418B BAA303        MOV DX,03A3h
        21C1:418E B83B71        MOV AX,713Bh
                                             ; // Buerg's bug : missing STC !
        21C1:4191 CD21          INT 21h
        21C1:4193 733A          JNC 41CFh    ; // always taken !
        21C1:4195 B43B          MOV AH,3Bh
        21C1:4197 CD21          INT 21h
        21C1:4199 7334          JNC 41CFh

        The programmer had chosen to first call MS DOS 7 $21713B
then try "old" $213B call. Now, with a plain vanilla DOS,
error was never trapped, because Vernon Buerg had forgotten
to set carry flag before the call to MS DOS 7 $21713B !
        I had myself encountered this problem when programming
my Modula-2 QD_LFN library : thanks to Ralf Brown's Interrupt list,
I had to take that damn quirk into account with a

        INCL(R.Flags,SYSTEM.CarryFlag); (* quirk *)

in my own code.
        Here's Ralf Brown's note : "for compatibility with DOS versions
prior to v7.00, the carry flag should be set on call to ensure
that it is set on exit".
        As I was not in the mood (nor in the need)
of trying to reassemble LIST code with a fix, I just checked
I was right by patching LIST.COM calling DOS first, then Win9X.
If DOS call fails, carry is set for Win9X call...
and voilà ! Directory selection worked with regular DOS
as well as with MS DOS 7.
        It was quite amusing to spot a fatal mistake
in such a legendary tool written by one of the most well-known and
respected names in this industry !
        I wrote to Vernon Buerg circa May 26, 2004 with this subject :
"LIST Enhanced Plus (evaluation version) bug report... and fix".
        On June 9, 2004, I got a personal reply from which
I extract this small quotation :

        "Thank you very much, Philippe, for the nice letter
        and the bug report. That is indeed a problem
        that has been reported, but I haven't been able to fix it.
        I'll put in your fix now! I'll replace the LISTEVAL file,
        and I'll also email you a registered copy."

        More than eight months later, I had still not received
any registered LIST copy (which I did not miss, for although
it would have been nice, I did not really need it), but there was much,
much worse in my opinion : I was not thanked (nor even mentionned)
in the history revision file when LIST was later silently fixed
thanks to my bug report *and* fix.
        LIST's author had not "merely" forgotten *his* message,
for when I sent him a (kind) reminder, he just did *not* answer.
        Of course, I could not resist telling many former colleagues
about my fixing a fatal bug obvious when LIST was run
from a true DOS... and my being a little hurt for not being thanked
in the LIST history file (I must admit I would have liked that kind
of immortality : fixing such a classic is not so common, after all).
        One of them told me he would call me
on next day with an amusing fact if he could find back a file
in his archives (he was known for downloading and *keeping* hundreds
of programs each month from BBSes and Internet...
and yet he almost never tried more than a dozen of them !).
        Indeed, next day, he called me in order to tell me
he had found in his indexed download collection
many older evaluation archives of LIST, one of which was probably
bugged too according to his memories (it was among the few archives
he had actually looked into and tested). After I grabbed the floppies
he gave me, I took a few minutes to check each LIST.COM
in order to create this report (STAMP utility was invaluable here) :

        Binary     Size     Date       Time    Version

        LIST.COM   42 361   24.05.01   12:30 ; 2.4d   -- no bug
        LIST.COM   42 361    3.03.02   18:22 ; 2.4d   -- no bug
        LIST.COM   41 983   11.09.03   13:10 ; 2.4t   -- // bug here !
        LIST.COM   41 823   17.10.03   16:12 ; 2.4u   -- // bug here !
        LIST.COM   42 127    9.03.04   17:56 ; 2.4u   -- // bug here !
        LIST.COM   42 289   19.02.05    3:27 ; 2.4y   -- bug fixed
        LIST.COM   42 227   23.12.05   22:53 ; 2.4y1  -- bug fixed

        LIST.COM   28 211   28.05.01   20:45 ; 9.6d   -- no bug
        LIST.COM   28 209   12.08.01   17:23 ; 9.6c   -- no bug
        LIST.COM   27 603    5.04.03   19:23 ; 9.6s   -- no bug
        LIST.COM   27 603   29.09.03   23:15 ; 9.6s   -- no bug
        LIST.COM   27 785   29.07.04   16:26 ; 9.6x   -- no bug
        LIST.COM   27 809   23.12.05   22:49 ; 9.6y1  -- no bug

        LISTEVAL.ZIP packages after June 9, 2004 were downloaded by me
in order to complete the ones given by my former colleague.
        Ordinary List had always been bugfree while List Enhanced Plus
(something of a flagship product, yet, it seems) had been affected
for several *months* by the fatal bug I had found
and fixed in a few hours without the program source code.
        When in a true DOS, *no* directory change from a DOS *file*manager*.
Really. Tsk tsk...
        (I still wonder by what miracle there are still paying customers
to buy software without source code nor adequate and immediate support.)
        I guess that gifted Vernon Buerg no longer checked Ralf Brown's
masterpiece and worse, that he no longer tested his sources modifications
for his excellent DOS utility on a real plain vanilla true DOS but only
on a Win98 or WinXP DOS box, hence the error (an error I can understand :
I must admit I did the same mistake once when I added joker expansion
to CONCAT utility without checking "useLFN" boolean was set *before*
"expandMe()" call... but *I* write freeware, *I* provide source code...
and *I* fix my programs immediately when I find any quirk).
        Everyone -- and I do mean : *every* *one* -- should be reminded
of this excellent piece of advice each morning, a piece of advice
I was given by one of the most clever men I've met :
"Aujourd'hui comme hier et comme demain,
ne fais pas le malin même si tu l'es" (roughly translated,
this would become in English : "Today as yesterday
and as tomorrow, don't think you're so smart even if you are").
        What is amusing is that many modern programmers do so
in the game industry : I've found many patches for Win98 games
requiring WinXP in order to merely install (and many times, even worse,
the patched executable would require newer WinXP too instead of original
Win98 !), because code kiddies seem to leave default compiler options
for the most recent operating system... and don't check
any of their packages on the real "older" original target system
(this is, among too many examples, how patched complete
Neverwinter Nights DVD reedition crashes on Win98
but runs flawlessly on WinXP... while the original Win98 patched
Win98 CD ran without any problem on the very same PC with same
hardware and same drivers !). What are multiboot tools for, then ?
It's like those weirdoes running DOS emulations instead of true DOS
(considering the insane power required to emulate a mere 486,
this is almost obscene). It's more rational to keep an old DOS PC.
        Well... I guess there a few lessons to draw
from that entertaining (I hope) and true (alas) story, but well...
no other comment now.

(* //------------------------------------------------------------// *)


                       Fun with XOSL installer

        From the beginning of my DOS days, I've used several
operating systems on my PCs, carefully hiding primary partitions from
each other (and sometimes even logical partitions), thanks to VITAL utility
first versions.
        In the past years, I have *bought* three commercial boot managers :
Select-It (pure crap !), System Commander and Partition Magic.
I felt cheated by all three, for no one did work as it was supposed to :
worse, they created weird problems (unit letters shifting
without reason from one boot to another while disk organization
was *NOT* changed, partitions no longer seen at boot, etc.).
        I've also tried many other boot managers among the freeware
and open-sourced ones (GRUB, LILO, YouNameIt...) : *none* was able to do
everything I needed, i.e. partition masking and easy modifications.

        None except XOSL, which is still the very BEST of all :
simple and effective.

        Yet, XOSL has a few nasty quirks no one cared to address
in the Great Collective Mind known as Open Source geniuses
code enhancers -- and no, I do not care to address them myself,
for these two excellent reasons : a) I hate C ;
b) I've discovered a temporary fix.

        Here is how : a few years ago, a friend of mine
bought a laptop with Vista crap preinstalled (and taking,
of course, all of hard disk space on a single huge NTFS partition).
She quickly became fed up with Vista, but she did not want
to buy yet another machine. The laptop remained in a closet,
until she had the idea of "downgrading" to WinXP
(transferred the O.S. from an older desktop PC of hers,
a PC which had became useless because of hardware problems)
while preserving Vista for the principle.

        I won't go into the gory details, but forcing Vista
to really reduce its footprint on the hard disk was a major pain :
its built-in tool would not want to shrink Vista partition
by more than a few megs, and no freeware defragmenter
would relocate hidden NTFS system files (at the times :
this may have changed now). It took many a reboot,
many a configuration change (hiding, marking as active, etc.),
many a dangerous trick with swap file, many a repair
with original Vista DVD (it's fortunate my friend had followed
my advice and *demanded* the missing DVD from the vendor !)
and many tools in order to create enough room for a new WinXP FAT32
primary partition, and a new FAT32 extended partition,
leaving enough unallocated disk space
so UCLONE could save XP system to free blocks on the same disk.

        Alas, the laptop was floppyless... How could I install XOSL ?
I first tried booting from a USB key created with the excellent
Rufus program. From BIOS, the FreeDOS USB key was set
as first boot device. Now, try and guess what happens once
FreeDOS has booted. Yes, USB key is seen as $80 unit
and hard disk as $81 unit ! Letters are assigned for
recognized filesystems : USB is C: and newly created
empty FAT32 for later WinXP install is D: (glad it was not NTFS).
Now comes the XOSL quirk : when asked to install itself to D:,
XOSL correctly copies its files to $81 but IPL is written to...
hard-coded $80 MBR, i.e. USB key MBR !
        Key is no longer bootable and neither the hard disk.
So much time wasted...

        Second major try was with a "Hiren recovery CD"
I had never used till this day : here, XOSL would freeze
at install while reading disk structure. I must admit this was
the first time I noticed how infos for installing
were NOT technical enough about units, partitions, labels, etc.
(I've even seen the NTFS partition size displayed as a negative number !).
And hard-coded target device for MBR... how great !

        Even an excellent product without very careful design
can *look* like crap at times, when you encounter
a non-standard situation -- which always happens at the worst time.

        Third try was done using a boot CD created with Nero
and a floppy image created with my good old P233. Now, once booted,
FreeDOS would not even let us call interrupt $13 for disk access !
Yet another try was done with floppy formatted by Win98SE.
Everything seemed to go fine this time, but at next reboot,
XOSL is lost in space !
        OK, we clean XOSL, we "reinstall" it then reboot
yet another time with PS/2 mouse disabled just in case
(at this time, I was ready to try *anything*, however unlikely
and illogical). Now, XOSL cannot find its own FAT32 files
and requires the emergency password, claiming error is critical.
Password bypass is a no-no. Incidentally, silly WinXP id serial number
was trashed while installing. Of course. It was fortunate
VITAL utility can show, save and restore this info,
among its other features.

        The fourth major try worked, but prevented creating
the DOS partition I wanted to add, for XOSL was
installed on a dedicated partition left free for it
(I *never* had to do so before on any system,
and I've installed dozens of XOSL multiboot for family members,
friends and acquaintances, not counting my own hard disks reconfigurations).
Now, the boot manager would work as usual, after too many hours wasted.

        It's fortunate good old DOS would allow easy creation
of a RAM drive, so MBR backup would work, and it's fortunate
booting from a CD made XOSL think it was run from a A: floppy,
thus seeing $80 unit correctly at last as dreaded "C:".
It's fortunate VITAL runs on DOS, too.

        I guess linuxians will tell us it would have been more
simple with their tools, but it's so easy for them to pretend
every problem has its Linux solution : considering many Linux (l)users
I've met, I have strong doubts about that point.

        Now, what's the use of having the source code for *years*
if no one cares enough to fix the XOSL installer by adding
better designed options so backup is optional,
so all units can be seen and selected ?
(This was checked with the two slightly modified
XOSL : apart from MBR backup, installation was a no-no too).

        XOSL boot *manager* is excellent. Its installer
should be fully rewritten to address these problems.

        By the way, checking *dozens* of Internet pages
using my friend's main PC (ironically, I spent hours
trying to avoid hours of time wasted with tries and retries !)
was of absolutely *no* use, whether the pages were written
by so-called "experts" or by mere bozos.
        The same applies to Vista shrinking, by the way.

        I guess there are design, technical and psychological
lessons to draw from these wasted hours. ;-)

(* //------------------------------------------------------------// *)


                          XDS vs ADW vs PB

Now, at last, I've spent a few hours adapting the same source
of a small DOS program using three Win32 compilers :
Excelsior XDS M2/C (freeware), StonyBrook ADW M2 (freeware),
and PowerBASIC 5 console compiler (commercial).
The two freeware M2 compilers were considered
for obvious reasons : *Modula-2* first, *freeware* second
(thanks to StonyBrook and Excelsior for freeware status, by the way).
PBCC compiler was considered as a honest comparison
with modern BASIC ; besides, I wanted to have another look at Bob Zale's
work since "good" old DOS PowerBASIC days (I already checked it
a few years ago but I was reluctant to such a language downgrade).
I've been able to check a newer PBCC using a friend's copy
for a few hours' evaluation at her home in order to avoid temptation
of grabbing the compiler by "other" means : when it's not freeware,
I always favor original software bought with original floppies or CDs,
for I hate dematerialized tools and Steam-like malware
transforming software into remote spying and *renting* schemes.
Incidentally, that's why I no longer buy new games (and no, I don't even
try to grab their pirated versions), merely replaying older games
(those who deserve replaying, of course) which have a standalone CD
not requiring any wicked activation nor Internet : the financial
loss is for the publishers who dare think anyone would comply to
their control madness (would you let anyone enter your house
and control everything you own ? I would not).
About any software, this industry taught me the hard way
to no longer buy *anything* from publishers' promises and/or lies,
from poor reviews (I've been a senior editor for many leading French
computing magazines and I know all the dirty tricks devised
in order to cheat the readers and please the advertisers
while pretending not to do the latter) or from a crippled demo.
Pascal compilers, whether commercial or not, were not considered,
for I wanted Modula-2 (besides, I'm not fond of projects created
by unreliable huge programming teams with an update a week
or nearly so, a fact which does not exactly speak for reliable code).
My time is too limited to delve into FreeThis, PureThat
or anything like it. No flavor of Unix/Linux with GNU M2/C mix
was considered either, for I no longer have time to waste
with anything related to C, whatever the obvious and well-known virtues
of any "superior" *n*x operating system variation (OK, I'm getting
very old and very tired : besides, life is really becoming too short now).

Sources and compiled executables are in TSTW32A subdirectories :
TS is the base TopSpeed DOS code, PBCC the PBCC Win32 code,
ADW the StonyBrook Win32 code, and XDSTS the XDS Win32 code
using the TopSpeed Compatibility Pack (native XDS was not tried
beyond a few minutes for reasons listed infra). The following
quick remarks are, of course, *NOT* meant to be a review
(besides, who would care about a real deep review ? <g>),
but they were inspired by my few hours of *real* work
with the three Win32 products (note only PBCC runs on Win98SE,
while the two M2 compilers unfortunately and uselessly required
WinXP -- without any good reason in my opinion). It's just
a first look on code adaptation, but please keep in mind that
although I'm not "hacker extraordinaire", I'm still a decent
program designer... as far as TopSpeed Modula-2 for DOS and command line
are concerned at least (this whole archive does prove it). I may look
(and feel) like a pre-Win32 dinosaur, but I'm an experienced
pre-Win32 dinosaur (just look for
"Fixing a classic : Buerg's LIST.COM and DOS directory selection"). :-)
And let it be clear that I'm able and willing
to recognize the extraordinary amount of work required
for creating the compilers tested (unless being paid for this game,
I wouldn't even start thinking about writing a Win32 compiler,
although I've created a Forth in my old Apple ][ days) :
yet, they're far from perfect from a user's point of view,
especially compared to many better-designed older similar products
(one fact says it all : JPI TS M2, language syntax
and language extensions were so good I *never* had to run
the VID debugger, while many C programmers I've met
know their debugger by heart because they *have* to !).
Incidentally, note I'm definitely command-line oriented :
creating Vindoze programs may be another story with the tools tested...
although I strongly doubt it.


ROMANTS.MOD for DOS TopSpeed : It's a stand-alone
version of ROMAN.MOD found in Q&D Tools archive.
It can convert from decimal numbers to roman numerals
and from roman numerals to decimal numbers.
This is a small console *real*world* program,
not a useless code snippet nor a skeleton.
It's the smallest binary executable, of course (ADW comes second
at almost three times the size, PBCC comes a close third,
while XDS comes last, being much bigger than the others).

ROMANPB.BAS for PBCC : Going back to BASIC,
after years of programming in Modula-2,
was conceptually a huge step backwards,
especially considering PowerBASIC "idiosyncrasies"
(such as constants which cannot be defined in procedures,
for they must be global !), not to say "quirks"
or even sometimes "brain-damaged features"
(such as the insane amount of useless functions
with sometimes confusing "enhanced" syntax supposed
to avoid almost any programming to the programmer
in a way similar to PHP ugly syntax and libraries :
one could easily waste more time looking for a function
and learning its syntax than coding it directly !).
After a few minutes reading a few chapters
of the (excellent) help files,
I was ready to port DOS M2 code to Win32 PBCC
without too much effort, noticing Win32 really forces
the use of 32 bits LONGs when mere 16 bits CARDINALs
or 8 bits SHORTCARDs would do (and yes, I know RAM is cheap :
this is not a substitute for efficiency anyway).
The text editor is correct. The code generator seems fine,
and it is really fast. But the parser is not military-grade,
probably because of BASIC's inherent design flaws : for example,
it will not always catch overlapping cases, it won't correctly
flag a string without final "_" concatenating operator symbol,
it will not clearly flag missing or excessive parameters
in a function, etc. Many error messages are misleading (a fact
confirmed by the friend who allowed me to use her copy of PBCC
she is a good advocate of, anyway, for rather good reasons).
All libraries may not have been fully debugged :
I've tried using console colors and this sometimes
led to screen corruption by previous screen attributes
whether from real text mode or from a windowed console
(unless it's the Radeon driver ? Nowadays, "Who knows
what evil lurks in the hearts of computers ?").
Language syntax is still... BASIC, whatever the real numerous
enhancements found in the product. It's still not even Pascal
because of too much compatibility with older BASIC revisions
and legacy syntax. Win32 API support seems excellent
(fortunately, anyway, I did not have to really use it
for my little test), yet I've had the same weird impression
as with the first C compilers for Windows, when one had to program
almost to the bare metal and thus waste
too much time on *minor* implementation design quirks
and *minor* housekeeping (not to mention the interface elements).
Now, if only Bob Zale had dumped BASIC in favor of Modula-2,
I'm sure he would have written a *great* compiler. This will be
my first and last try with PBCC, even though ROMANPB.BAS works.
While using PBCC, I missed Modula-2's elegance too much
(it has nothing to do with "yet another new language" :
last year, I've programmed a big PHP application for a friend,
while knowing nothing about PHP crap before I was asked
to write unique code with it). This decision has all to do
with language, not with the compiler (for the parser,
that's another story : in my experience, it seems ugly languages
such as BASIC and PHP also have fuzzy parsers unable to clearly
locate and flag problems).

ROMANADW.MOD for StonyBrook : Porting was rather quick
although it required many, many "compile, edit and fix" runs.
I've discovered I really dislike ISO "standard" which does not seem
thought for real-world programming but for (ahem)
academic entertainment (it's Pascal before Turbo Pascal,
for those who remember those days ; it's Orca versus Merlin,
for those who understand the reference). I don't care about
language wars (C against anything else...), I don't care about
operating systems wars (*nix against anything else beginning
with "Win" and ending with "Dows"...), I don't care about
standards wars (PIM against ISO...), but among other nuisances,
I've hated warnings about "missing" ELSE in a CASE structure,
as I've hated poorly designed libraries (and the function names...
if you decide "WrStr" will be "WriteString",
why don't you use "WriteLine" instead of "WriteLn", eh ?
One wants to avoid typing a few characters only sometimes
when everything else is too verbose and even verboser ?
These choices are not coherent !). I've hated, too,
the compiler preventing me from appending a CHAR to a string
without complaining (at this point, it's no longer strictness :
it's Ada fascism !). There was an excellent idea in JPI TS editor :
autocase for reserved words (even if, unfortunately,
it was not disabled when editing a string) : of course,
this essential feature does not exist
(at least, I did not find the relevant option in the settings,
as for missing multiple backups management). I've found
the development and especially the project environment
overcomplicated without good reason nor benefit (and yet,
I ordinarily love to delve into code generator settings,
which allowed me to discover that setting Options/Linker/Win32/Console
was *required* for ROMANADW to run : with default compiling options,
the program did nothing at all !), up to the point
of being reminded of... newer modern C compilers project management.
Useful reference help is almost absent, forcing the user to bother
reading .DEF files in order to precisely learn what functions
are available in libraries, both "standard" and "non-standard" ones.
And demo programs are poorly programmed -- I've seen better code
even from micro$oft code kiddies ! The least software publishers
could do to demonstrate their products should be to provide
real world programs, not useless samples (see how TS PROG8.MOD
became more useful EEVAL.MOD). Last but not least, the compiler
is very slow, at least compared to PBCC (ok, it's an "old" 2005
single CPU P4 but this is not an excuse since PBCC was *very* fast
on the same hardware). Here is another amusing point :
I did not get the same warnings
for the same ISO structures from ADW and XDS compilers
while function prototypes were identical...
There's worse : although display is correct when dumping to screen
all roman numerals from 1 to 3999, redirected output always stops
at 3996 (executable was run on three different PCs,
one running Win98SE and two running WinXP) ! I don't want
to waste more time trying to find who the ultimate culprit is :
the compiler or the operating system or the phase of the moon.
To me, as it is, ADW is a definite no-no,
whatever its potential qualities (and maybe there's a reason
for ADW compiler no longer being available as of this writing).

ROMANXD.MOD for XDS : As for ADW, I've hated the overcomplicated
(read : uselessly complicated) XDS project system
(I could not even organize my directories as I really wanted to),
as I've hated the silly ISO restrictions forcing me to work
on syntax quirks instead of working on code (if I favor
a Modula-2 compiler, I don't expect to learn yet another
language version or worse, yet another full language :
I've done that last year to the point of being able to write
complex PHP code after checking only the reference help
found in EasyPHP : this reminded me of all the good practical
reasons against C). As Rivarol once said it, he who knows
several languages just has several different words
for the same reality these very words refer to :
this has no intellectual interest, whatever the buzz
about "word vision" and the like.
Eh, it's Modula-2, not Ada ! Frankly, forcing the use of *octal*
for character constants if one wants to concatenate them later
(nl=cr+lf; !)... these ISO guys can't be serious !
"Standard" purists are as a nuisance as puritans are.
Yet, the compiler seems rather good, and
the TopSpeed Compatibility Pack (i.e. options and support
for *most* of TopSpeed libraries) is a good idea,
and is mostly useable on plain (not real-world, I guess) M2 code
without interrupt calls nor ModeX library calls
(in 2005, I even had my LIFE program run correctly
in a window with the TopSpeed layer, but I did not even
thought of porting MATRIX or DCLOCK code) : yet, porting code
required too many "compile, edit and fix" runs
even using OLDNEW from console in order to replace identifiers
in source (it's fortunate I've written this tool !).
And there are weird design errors... such as removing
Lib.SetReturnCode() without providing an equivalent
such as ExitProcess() : you have to delve yourself
into Win32 API files in order to discover then code the function.
As with ADW, the editor does not provide autocase for reserved words
(at least, I did not find the relevant option,
as for missing multiple backups management). Help about libraries
is slightly better than ADW help : well, at least, it exists.
But I still wonder what influence the ISO standard creators
were under when I see the useless functions they have defined...
while omitting real world tools of practical use.
Another quirk : I did not install XDS to default "C:\XDS" but to
"C:\Program files\XDS" (keeping sources in a SRC subdirectory
located in application directory, as I've always done for easy
backup). Now, guess what happens when you select a file
with project browse command, if pathname contains spaces ?
Yes, you have to edit project by *hand* and add double quotes
to pathname in order to avoid compiler complain about,
for example, "C:\Program" being not found !
(Incidentally, many InstallShield installers have this bug
preventing from removing software without manual intervention
in the Vindoze registry or in shortcuts properties !)
I even had to edit by hand redirection file so .OBJ could be found
for compilation to proceed ! And there's worse :
I've had too many GPFs (yes, yes, I know this is older designation)
per session, almost always just after rebuilding the test program
(and this was checked on two PCs with different hardware
configurations !). This is amateurism, as shown, too,
by the few demo programs. I was so disappointed
I did not even try to port ROMANXD.MOD to native XDS
(i.e. without the TopSpeed Compatibility Pack).
I fear the result would not have changed anyway : as for ADW,
XDS is a definite no-no to me, whatever its potential qualities.


From this quick *first*look*, I may conclude that I cannot see
any real advantage to ISO conformity and to using overcomplicated
environments created by (ahem) wizards trying to have the user
believe they "perfectly" know several *complicated* platforms
(Win32, *nix and Mac) when it's already hard to be
the real master of one (even JPI did not succeed that much
with their OS/2 support). DOS TopSpeed Modula-2 implementation,
editor and project system had set a "de facto" standard
in spite of a few quirks : should I have wished to design
a Win32 Modula-2, I would have taken and improved
many of TopSpeed ideas (and language extensions,
whether approved by any "standard" committee or not)
while keeping their simplicity (Win32 code generator and nothing more,
in fact, apart from a resource editor required for any GUI program).
Newer compiler manuals are not even on a par with TopSpeed's older ones
(once read in two or three hours, aeons ago,
I never had to go back to them : they were just *that* good,
especially King's excellent book). I may be too old for new tricks
(or more exactly : less interested in learning newer things
just in order to perform older well-known and proven tricks),
but I did not expect learning a new syntax and silly ISO design choices
just in order to compile *elementary* code
(I don't even want to think of more elaborate code and Vindoze code !).
If I'm for a full rewrite because of memory management, OS calls,
and sometimes design, I want to be sure it's worth my limited time :
neither XDS nor ADW gave me the impression I was not wasting my time.
I guess it's a T.A.N.S.T.A.A.F.L. effect.

Again, please note I do *not* underestimate the fine work done
by Excelsior and StonyBrook programmers : other users
surely find their products excellent, especially in the (ahem...)
educational community... but then, I'd really like
to see their *non-trivial* *real-world* programs
(or Win32 versions of CS, PCOPY, DD, FCOMP, VITAL and UCLONE,
among others, just to show ISO M2 standard is good for real code
and programs -- HHOS !). Until now, I haven't seen any real world
software with any of these compilers. Anyway, ADW and XDS
(and PBCC for different reasons) compilers are not for me.
What I expected was something like a PowerModula-2.
Unfortunately, there's none (ironically,
the closest product is PBCC... but now I'm hooked to Modula-2,
I no longer can stand BASIC which was just useful, in prehistoric times,
for prototyping and floating point astronomical programs). I guess
I'll have to stick to DOS for Modula-2, and if I have enough time
in the future, I fear I'll have to check other compilers
for Win32... :-( Maybe I'll be lucky enough to be dead
before I really have to... :-) I'm an old M2 programmer,
and I just love this language (even more than Oberon,
in spite of the latter excellent design) :
if newer M2 compilers cannot convince me to use them,
it may be *they* have a problem, not *I*.

I've never had a problem with anyone (including me) being (very)
negative, provided it's justified by facts and experience.
Yet, I've given the compilers listed supra a last chance, as seen
in TSTW32B subdirectories with FACTORIZ.MOD code ports
(another small real-world code with intensive computations) :
my conclusions did *not* change, as I discovered even more quirks
and/or bugs in *all* the compilers tested (PBCC parser being unable
to clearly flag many problems, ADW still hating redirection,
and XDS being, well... XDS). The most funny part of this last try
(besides size of each binary file) was probably execution times
with default compiling options. Here are the results
of the small test batch (run twice !) written to check
both results and times :

compiler        execution time
==========      ====================
TS              0h 25mn 10s
PBCC            1h 49mn 56s
ADW             0h  2mn 48s
XDSTS           0h  1mn 42s

PBCC slowness is beyond any explanation (yes, it *is* one hour,
forty-nine minutes and fifty-six seconds), for its BASIC source code
is almost identical to M2 source code.



                              (* END *)



(* //------------------------------------------------------------// *)
(* //------------------------------------------------------------// *)
(* //                 (* === 9. ASTROTOOLS === *)                // *)
(* //------------------------------------------------------------// *)
(* //------------------------------------------------------------// *)



                Q&D AstroTools v1.71 pour DOS

          Ultime distribution "freeware" autorisée

         Copyright (C) par Philippe Guiochon 1980-1992, 2000-2002



                 (* === AVANT-PROPOS === *)
             (* === CONFIGURATION REQUISE === *)
                 (* === INSTALLATION === *)
             (* === REMARQUES IMPORTANTES === *)
                  (* === UTILISATION === *)
               (* === PERSONNALISATION === *)
                   (* === GARANTIE === *)
                    (* === LICENCE === *)
              (* === PROBLEMES EVENTUELS === *)
                    (* === ANNEXES === *)



                 "Verum index sui et falsi"

 ("Le vrai est la pierre de touche de lui-même et du faux")



(* === AVANT-PROPOS === *)

     Mon intérêt pour le discours et l'art astrologiques
remonte à 1980 : il se concrétisa immédiatement par Thème
Astral, l'adaptation (jugée hérétique par nombre d'amis,
relations et connaissances) d'un logiciel d'éphémérides
astronomiques que j'avais conçu en 1979 pour la calculatrice
programmable Texas Instruments TI-58 puis pour l'Apple ][.
     Avec le temps, Thème Astral et les outils Q&D AstroTools
(baptisés ainsi, avec une remarquable originalité, en 1987)
allaient être développés pour d'autres environnements :
Sinclair ZX-81 en 1981, Apple ][+ en 1982, Tangerine Oric-1
en 1983, Apple //e en 1985 et I.B.M. PC en 1991. Les langages
utilisés furent d'abord différentes variétés de BASIC
(toujours avec des modules rédigés, selon le cas, en
Assembleur 6502 ou 80x86, pour l'affichage comme pour
l'impression), puis finalement le Modula-2, préféré aux C et
C++ pour de nombreuses et excellentes raisons dont l'exposé
serait, ici, certainement inutile autant que polémique.
     Ces outils, destinés à mon seul usage (et parfois à
celui de quelques amis, relations et connaissances), ont été
créés sans aucun souci commercial, puisque je n'ai jamais
appartenu à la corporation des innombrables boutiquiers de
l'astrologie, jugés par Raymond Abellio avec une sévérité
méritée (l'écrivain et philosophe disait d'ailleurs fort bien
ne pas croire les astrologues, mais pratiquer l'astrologie),
comme je l'ai pu vérifier par les épisodiques contacts que
j'ai eus dans ce milieu (ou Milieu), qu'il s'agisse
d'amateurs ou de "grands professionnels" autoproclamés.
     Pour en donner un seul exemple, et terriblement
représentatif : voici quelques années, certaine sympathique
"vedette" de la profession, alors au sommet de sa carrière,
était assez imprudente pour me confier, dans une lettre,
qu'elle venait juste de découvrir, à l'occasion d'une
démarche administrative, que son heure de naissance
(information évidemment essentielle pour tout astrologue)
était grossièrement inexacte (23 heures de décalage !), ce
qui modifiait considérablement son ciel natal... La même
commerçante avisée, fidèle à un procédé cher aux marchands
d'astrologie, révisait les interprétations et prévisions
successives qu'elle consacrait aux vedettes médiatiques (et
notamment à certain couple princier) en fonction des
événements survenus dans leur vie a posteriori. Enfin, elle
avouait aussi, sans honte aucune, qu'elle aurait aimé un
logiciel d'auto-plagiat pour satisfaire plus rapidement
encore ses éditeurs, ses lecteurs et ses élèves : son souhait
n'était pas entièrement facétieux, s'il était manifestement
inutile, à considérer le caractère naturellement répétitif de
sa production imprimée (le stellionat et le démarquage sont
d'ailleurs pratiques ordinaires dans l'édition, et pas
seulement astrologique). Exemplaire, en vérité...
     Très récemment, le sieur Patrice Guinard, directeur du
C.U.R.A., me fournissait un exemple supplémentaire
d'astrologue malhonnête (voir la section ANNEXES, infra).
     Cet humoriste avait raison, qui écrivait : "Les
astrologues se répartissent en deux catégories : les
marchands, et les autres. Je n'ai jamais rencontré les
autres.".

     En 1983, un "grand" magazine consacré aux joies
contestables de la micro-informatique publia une version
abrégée d'un des outils Q&D AstroTools (calcul et carte du
thème natal) : à cette époque, j'entendais ainsi éviter aux
astrologues l'achat de logiciels commercialisés à des prix
sinon astronomiques, du moins disproportionnés avec leurs
qualités de précision, d'ergonomie et de richesse en
fonctions. J'espérais aussi, et surtout, voir les amateurs
d'astrologie s'intéresser un peu aux lois de la mécanique
céleste, lois qui sont à la base de leur art. Au reste, dans
le domaine des calculs comme dans celui de l'interprétation,
mieux vaut être son propre maître, à savoir programmeur et
astrologue : la rationalité y gagne ce que le commerce
(entendu ici en ce qu'il peut présenter de moins noble :
merx, ce mot dont certain philosophe contemporain assurait
qu'on le pouvait prononcer comme on voulait) y perd.

     En 1992, j'ai cessé tout vrai travail sur les outils
Q&D AstroTools pour PC, qui comportaient alors quelque 45500
lignes de code Modula-2 (sans les commentaires) : la révision
1.31, issue d'une longue expérience pratique et du
développement et de l'astrologie, me semblait définitive, au
moins pour mon usage. Cette ultime version offrait, entre
autres possibilités, un module d'aide à l'interprétation
(cette marque d'ailleurs si paradoxale des logiciels
commerciaux à prétentions "professionnelles", c'est-à-dire,
trop souvent, destinés à fournir des pages et des pages de
textes adaptés à 95% des clients potentiels !), la haute
résolution graphique 800x600 en 16 couleurs, plusieurs
représentations à la fois claires et parfois originales du
ciel natal (mode classique, mode horizon local, mode
domitudes, mode héliocentrique, mode tableau des aspects,
mode éphémérides annuelles, mode signaux émis ou reçus), la
détermination des aspects avec ou sans la latitude des
planètes, et surtout une interactivité enviable même en
comparaison des environnements graphiques qui commençaient à
être en vogue sur les ordinateurs personnels de type PC.
     De 1992 à 2000, les quelque 45500 lignes de code source
en Modula-2 allaient bénéficier d'améliorations mineures
(optimisation de procédures, réorganisation de modules, et
surtout correction des erreurs, parfois étonnantes, présentes
dans les bibliothèques du compilateur TopSpeed), alors
qu'aucune nouveauté décisive n'était ajoutée aux programmes
eux-mêmes -- quelques fonctions sans véritable intérêt
n'étant intégrées qu'à titre de YACWOT (Yet Another Complete
Waste Of Time).

     En 1999, une lointaine connaissance, membre du
C.E.D.R.A., m'ayant offert le CD-ROM édité en février 1998
par cette association d'astrologues, j'ai pu constater sans
étonnement excessif que l'amateurisme (au pire sens du terme)
continuait de sévir dans les réalisations comme dans les
évaluations (à peine dignes d'un mauvais fanzine), et que les
seules applications vraiment dignes d'attention et d'estime
étaient deux logiciels en "freeware", c'est-à-dire gratuits,
et sous DOS : Astrolog de l'Américain Walter D. Pullen et
Astrolabe du Français Jean-Christophe Vitu. L'un et l'autre
auteurs avaient su éviter le piège de la méprisable facilité
marchande qui consiste, pour des programmeurs occasionnels ou
pseudo-professionnels, à faire payer très cher des
compétences généralement très limitées en QuickBASIC, en
Turbo Pascal, en C, en Delphi ou pire, en Visual Basic 3.0
(voire en Visual Basic 2.0, comme c'était encore le cas en
1998 pour certaine "usine à gaz" commerciale au prix
astronomique !).
     L'examen de quelques versions récentes converties pour
profiter de la manne commerciale Windows 9x n'incite
d'ailleurs pas à modifier ce jugement dicté par une longue
expérience : le niveau général des logiciels astrologiques
dit assez celui de la clientèle prête à payer, l'irréflexion
des acheteurs valant bien l'incompétence des auteurs, dans ce
domaine comme dans d'autres. Comme l'écrivait ironiquement
Roger X. Cringely dans Accidental Empires : "Astrology
software, anyone ?".

     Les outils Q&D AstroTools, malgré le double inconvénient
de leur relative ancienneté et surtout de leur ergonomie
spartiate (liée à leurs conditions de développement ainsi
qu'à mes préférences et habitudes) rivalisaient encore
honorablement, sur quelques points, avec les programmes
Astrolog et Astrolabe, tous deux remarquables par leur(s)
qualité(s) comme par leur gratuité.

     C'est pourquoi j'avais décidé de mettre en "freeware" un
sous-ensemble des outils Q&D AstroTools (une distribution
"light", voire "lite", comme on dit en bas-français
contemporain), avec le souhait que ces programmes soient
aussi profitables aux praticiens de l'astrologie qu'ils
l'avaient été pour moi depuis 1980, afin de "jouer le jeu"
astrologique à titre personnel, quelles qu'en soient les
conclusions, au reste nuancées. C'était aussi manière
d'illustrer la jolie forgerie inventée par les amateurs
américains de science-fiction, to gafiate ("to get away from
it all"), et donc aussi, pour reprendre le beau titre de
l'autobiographie de Robert Graves, manière de dire Goodbye to
all that : "Adieu à tout cela".

     Ainsi, ces derniers mois, quelques distributions en
"freeware" des outils Q&D AstroTools ont vu le jour,
numérotées (sans véritable raison) 1.3x, 1.40 et 1.5x -- la
distribution 1.50 tenant compte des voeux d'une amie
astrologue, savoir l'intégration du module de recherche.
Cette amie était à l'origine, pour la distribution 1.40, de
l'intégration du module RET, et surtout de la réactivation de
quelques fonctions involontairement et sottement oubliées
lors de la recompilation du code source de tous les
programmes pour la distribution "freeware" : de fait, les
dizaines de directives de compilation témoignent de la forte
et continuelle pression de mon entourage, favorable à
l'exploitation commerciale de mes programmes, et ce dès leurs
premières versions en 1980.
     Les différences entre les distributions en "freeware"
concernaient le nombre d'outils fournis, les fonctions
disponibles, l'atlas, la base de naissances et la
documentation.
     La volonté de faire tenir, autant que possible,
l'archive contenant cette distribution "freeware" sur une
simple disquette PC 1,44 Mo justifie l'absence (par rapport
à ma version complète personnelle 1.31) de quelques modules,
au reste beaucoup trop adaptés à mes préférences de
recherches : aide à l'interprétation (aide d'ailleurs plus
ingénieuse que dans la majorité des programmes commerciaux
"professionnels"), recherche de configurations spécifiques,
langage de macros astrologiques, et graphismes en très haute
résolution (modes VESA 800x600 et 1024x768 ajoutés en 1995).
Incidemment, ces derniers modules ne seront pas mis en
"freeware", encore moins commercialisés : les outils
Q&D AstroTools ne sont pas un piège marchand de type
"shareware" ou "version de démonstration".
     La documentation créée pour la distribution 1.32 (la
première distribution publique) a été un peu révisée
(quelques coquilles y peuvent toutefois subsister), l'atlas
a été complété, et une base de naissances plus ou moins
célèbres a été ajoutée, quand bien même ces "notoriétés
spectaculaires" ne présentent, à de rares exceptions près,
aucun réel intérêt : de fait, l'amateur d'astrologie sera
mieux inspiré de concentrer son attention sur les thèmes,
aisément vérifiables, de ses proches et sur ceux de quelques
individus exceptionnels, plutôt que d'aller perdre un temps
précieux à examiner les thèmes des pauvres vedettes du
Spectacle (évidemment entendu ici au sens que lui donnait
l'excellent Guy Debord).
     Avec la distribution 1.60, le format des fichiers .THM
a changé, qui exigera le recalcul des thèmes générés par les
distributions précédentes (1.3x, 1.40 et 1.5x).
     La présente distribution 1.71 ne sera plus révisée :
elle fera donc office d'ultime distribution publique et
surtout, autorisée.
     L'exploitation et la diffusion des distributions
antérieures est évidemment interdite : ce point concerne tout
particulièrement la distribution 1.70, diffusée de manière
aussi illégitime qu'illégale par le malhonnête Patrice
Guinard, directeur du C.U.R.A. (voir la section ANNEXES,
infra).
     Pour d'évidentes raisons, les informations contenues
dans l'atlas et dans la base de naissances, toutes compilées
au fil des ans à partir de multiples sources (oubliées autant
qu'oubliables), relèvent du domaine public et sont proposées
sans garantie aucune : elles ont rarement été vérifiées, et
n'ont aucun "copyright" -- au reste impensable, voire
délirant sur ce type de données, même si certains marchands
croient déjà avoir des "droits" sur l'évidente représentation
de l'horizon local (pourtant connue de tous les astronomes
amateurs), comme d'autres, philosophes à leur insu,
s'imaginent avoir découvert le réseau des relations possibles
entre l'Un, le Duo/Duel et le Multiple, le Sujet et l'Objet,
voire entre l'Etre et le Monde...

     Les outils Q&D AstroTools, conçus pour les calculs
astrologiques, ne sont liés à aucune école astrologique, et
ils ne comportent aucune publicité clandestine, généralement
insérée sous la forme d'une bibliographie généraliste ou
spécialisée, "neutre" (autrement dit, éclectique, au nom de
l'irréflexion et/ou du commerce), ou pire : plus ou moins
ouvertement favorable à une école ou à certain commerçant
amoureux des paysages plats et dont les talents surestimés
sont manifestement transmissibles par mariage et par
hérédité.
     Au reste, les manuels d'astrologie "pratique" se
répartissent presque tous en deux catégories : les mauvais,
et les pires.

     Je dois néanmoins mentionner ici quelques noms ayant
d'incontestables titres à la reconnaissance des astronomes et
de leurs "frères séparés", les astrologues : Jean Meeus
d'abord, pour ses irremplaçables ouvrages classiques
consacrés à la mécanique céleste ("Astronomical Formulae for
Calculators", 1979 et "Astronomical Algorithms", 1991).
     Si les créateurs de logiciels d'astronomie lui rendent
presque toujours l'hommage qu'il mérite, rares sont les
auteurs de programmes d'astrologie qui ont cette élémentaire
élégance : sans doute ces boutiquiers croient-ils mieux
assurer leur emprise sur la clientèle en gardant secrètes les
sources qu'ils ont pillées... sans d'ailleurs nécessairement
les bien comprendre, comme le démontrent de nombreuses
documentations où le mensonge le dispute au grotesque (je
pense notamment à l'auteur de certain programme commercial
exploitant, sans la nommer, une théorie planétaire
strictement limitée à l'intervalle 1600-2200, auteur qui ose
prétendre que "ses" calculs restent "très performants" hors
de cet intervalle, alors que l'erreur est très rapidement de
plusieurs degrés, surtout pour Pluton !).

     Ensuite, l'ingénieux ingénieur John Walker, auteur du
magnifique programme Home Planet, indispensable à tous les
amateurs d'astronomie : incidemment, cette grande figure
(trop méconnue) de l'univers informatique a créé un site
Internet aussi passionnant qu'intelligent, dont la devise
pourrait être : "De rebus variis", "A propos de tout".

     Ensuite encore, Jean-Pierre Nicola, dont les théories
novatrices (sinon dans les faits, du moins en apparence,
grâce à un très habile jargon), si elles n'emportent pas
systématiquement l'adhésion paradoxalement inconditionnelle
que semble trop souvent souhaiter le créateur de l'école
conditionaliste, sont toujours dignes d'intérêt, et d'estime
parfois (estime et intérêt qui ne sauraient d'ailleurs
concerner les disciples et camelots diffuseurs de la pensée
conditionaliste, lesquels démontrent combien Nietzsche avait
raison d'assimiler les disciples à autant de zéros).
     De fait, en 1980, après avoir programmé Thème Astral,
songeant à y ajouter une fonction d'aide à l'interprétation
(autant par paresse que par esprit de système), n'aurais-je
pas découvert La condition solaire et Pour une astrologie
moderne, que j'aurais presque certainement cessé d'accorder
quelque importance au discours des astres, tant les ouvrages,
théoriques ou pratiques, consacrés au sujet incitaient tout
lecteur rationnel à l'amusement, voire au mépris (sentiment
dont on sait qu'il ne doit être dépensé qu'avec économie, "à
cause du grand nombre de nécessiteux", catégorie dont
relèvent volontiers les marchands).
     Jean-Pierre Nicola (dont j'allais apprendre plus tard
qu'il avait collaboré avec André Barbault avant de s'en faire
le plus féroce ennemi) m'avait permis de découvrir une
approche rationnelle, en tout cas intellectuelle, de
l'astrologie, loin des gouchonnades et autres barbaulteries
(pour ne pas même mentionner les délires spiritualistes,
karmiques et assimilés).

     A la réflexion, un autre nom s'impose ici, mais à la
reconnaissance de tout lecteur, intéressé ou non par le
discours des astres (ou par le discours sur les astres) :
celui de Jacques A. Bertrand, auteur d'une délicieuse
typologie humoristique qui parodie avec un talent digne des
meilleurs Jalons certain célèbre traité, prétendu pratique,
d'astrologie. Tristesse de la Balance et autres signes a
d'ailleurs su "inspirer" les tristes et maladroits Jean-Luc
Hennig et Patrick Besson.

     J'ai déjà mentionné les excellents logiciels Astrolog
(par Walter D. Pullen) et Astrolabe (par Jean-Christophe
Vitu) ; je leur associerais bien Planet Dance (par Jean
Cremers), si ce programme, de fort bonne facture, n'était pas
commercialisé à un prix excessif, que son excellent "Astro
Basic" (un langage spécialisé dans les calculs astrologiques,
étonnant et hérétique mélange de C, de Pascal et de BASIC) ne
justifie pas -- à mon sens. Cet "Astro Basic" affranchit
l'astrologue de toute dépendance vis-à-vis des marchands de
logiciels astrologiques, en ce qu'il permet au premier venu,
ou presque, de programmer facilement des modules pour la
présentation des données, l'interprétation ou même la
recherche statistique.
     Incidemment, ce remarquable outil, conceptuellement
supérieur aux logiciels commerciaux les plus onéreux et les
plus diffusés sur le marché, en France comme aux Etats-Unis,
semble évidemment avoir échappé à la vigilance des "experts"
autoproclamés de l'évaluation de programmes astrologiques :
mais qui s'en étonnerait, ces "experts" étant manifestement
très liés au <m|M>ilieu et notamment à certains éditeurs...

     Une mode récente obligerait presque à faire l'éloge de
cet Internet censé être, à en croire les marionnettistes
maîtres de l'époque, une inépuisable source d'informations
essentielles, qu'elles soient commerciales ou non. La
pratique inciterait plutôt à juger surestimées, dans tous les
domaines, les ressources disponibles dans le si mal -- ou si
bien -- nommé "CyberEspace", inepte et barbare forgerie qui
affiche clairement la volonté de piloter, de gouverner, et
certainement pas de manière virtuelle, puisque l'InterNet et
le Word Wide Web proclament ouvertement l'un sa nature de
filet, l'autre sa nature de toile. Le spectacle aura changé
de scène, non de nature, qui restera celle d'un encadrement
révolutionnaire, et dans ce Village prétendu "virtuel", je ne
donne pas cher des numéros qui voudront jouer les hommes
libres.
     La vraie nature d'Internet (le mot semble encore trop
long, puisque l'époque lui préfère l'encore plus pauvre
abréviation "Net"), Georges Elgozy l'avait exposée par
anticipation, dès 1975, et de manière parfaite : "Depuis près
d'un demi-siècle, l'explosion technologique se trouve à la
veille de révolutionner la vie quotidienne. Demain, un
courant d'information généralisée dissipera les nécessités et
les monotonies d'une existence à la fois trop alternative et
trop continue. Ce flux de bonheur communicatif illuminera
tous les foyers, sans distinction de classe ou de revenu.
Branchés par fil téléphonique au mystère informatique, les
ménages informatisés seront reliés aux bibliothèques de
documentation et aux banques juridiques, aux universités
pédagogiques et aux commerçants avertis. Et rien ne sera plus
jamais comme avant. Demain." (Le bluff du futur)
     C'est pourquoi les outils Q&D AstroTools ne sont
associés à aucun site Internet, même parmi les rares sites
autorisés à diffuser, de manière contrôlée et limitée, ces
programmes. Incidemment, c'est de manière aussi illégitime
qu'illégale que la distribution 1.70 des outils
Q&D AstroTools a été, est peut-être encore, diffusée par le
site du C.U.R.A.

     Pour le principe, tout mercenaire que je suis, je tiens
à souligner cette évidence, "insolite et inadmissible" pour
l'époque (le grand Boucher de Perthes aimait à citer, avec
ironie, cette expression de bêtise administrative), à savoir
qu'aucune considération commerçante, directe ou indirecte,
n'entre en ligne de compte dans l'offre des outils
Q&D AstroTools.
     Enfin, pour reprendre approximativement la formule chère
à certain critique surestimé qui officiait dans cet étrange
monstre, l'hebdomadaire intellectuel de télévision, "ça va
sans dire, mais ça va mieux en le disant" (citant d'ailleurs
d'inexacte manière, et probablement sans le savoir, une
formule de Talleyrand en des circonstances autrement plus
décisives) : la mise en "freeware" des outils Q&D AstroTools
n'a nullement pour objet d'engager de longues correspondances
plus ou moins (in)utiles, plus ou moins (in)intéressantes. Au
cas fort improbable où je les recevrais (par télépathie ?),
d'éventuels compliments comme de probables critiques
ir<aie|o>nt vers le périphérique /dev/null, faute de temps,
d'énergie et de ressources à leur consacrer. Les suggestions
(modifications, améliorations, réclamations, etc.) subiraient
évidemment le même sort.
     Dans son étrange roman, La guerre du Graal, Charles
Williams fait parler ainsi un personnage qui apporte un texte
à un éditeur : "[...] je ne crois vraiment pas avoir une
sollicitude particulière pour ce manuscrit. Que vous le
publiiez ou non, que quiconque le publie ou non, peu m'en
chaut. Je me sens obligé à quelques démarches pour le faire
éditer, car je crois honnêtement que les idées en sont
bonnes. Mais là s'arrête ma responsabilité.".

     Mutatis mutandis, cette indifférence, c'est la liberté
que peut revendiquer à bon droit celui qui n'a rien à vendre.

     Comme aimait à le répéter, avec le plus grand sérieux,
certain journaliste aussi vénal qu'incompétent (ces deux
caractéristiques répandues, ainsi que sa sociabilité
superficielle, l'ont d'ailleurs mené au poste de rédacteur en
chef) : ''Le secret de ma carrière, c'est d'avoir toujours
répondu "Combien ?" quand on me disait "Bonjour !"''.
     S'il le faut préciser : je suis évidemment hostile aux
pratiques commerciales qu'illustrent de trop nombreux
astrologues et autres marchands d'astrologie(s), et non à
l'astrologie, et pas même au commerce (Commerce fut
d'ailleurs le titre d'une revue intellectuelle d'assez bonne
tenue). "Who is John Galt ?"...
     Au reste, le commerçant n'est-il pas, à sa manière et
selon ses capacités, grand philosophe... au sens où
l'entendait Hubert Monteilhet dans Les pavés du diable : "Le
vrai philosophe a le plus grand respect des imbéciles : ils
forment à la fois une clientèle et une majorité".



(* === CONFIGURATION REQUISE === *)

     Les outils Q&D AstroTools pour I.B.M. PC (ou compatible)
exigent au minimum les caractéristiques suivantes :

- environ 5 Mo d'espace disque ;
- un processeur de type Intel 80486DX ou supérieur (avec
coprocesseur mathématique intégré) ;
- 640 Ko de RAM ;
- une carte VGA (nécessaire seulement pour les modules de
visualisation graphique) ;
- le système d'exploitation DOS version 3.3 (qu'il soit signé
Microsoft, I.B.M., Digital Research, Novell ou Caldera).

     D'évidente manière, plus le processeur est rapide, plus
l'utilisation des outils Q&D AstroTools est agréable : un
processeur de type Intel Pentium cadencé à 100 MHz ou plus
est donc recommandé. Néanmoins, un simple processeur Intel
486 de type DX cadencé à 33 MHz est... exploitable.



(* === INSTALLATION === *)

     Les outils Q&D AstroTools sont rassemblés dans une
archive appelée QDASTRO, ayant pour extension ZIP (archive
compactée avec PKZIP), LZH (archive compactée avec LHA) ou
ARJ (archive compactée avec ARJ) : l'utilisateur qui ne
saurait pas comment en extraire les fichiers peut
immédiatement renoncer aux outils Q&D AstroTools, qui exigent
un minimum de familiarité avec le DOS et sa ligne de
commandes.
     De fait, l'installation des outils Q&D AstroTools
consiste simplement à décompacter l'archive QDASTRO dans un
répertoire (C:\QDASTRO ou C:\SKYTOOLS, par exemple) : c'est
pourquoi aucun programme sophistiqué d'installation ne
s'imposait ici. De plus, la distribution sous la forme d'une
simple archive de format répandu (LZH, ZIP, ARJ ou autre)
permet à l'utilisateur paranoïaque (ou simplement prudent) de
connaître le contenu de l'application qu'il souhaite
installer, et surtout de procéder très facilement à une
éventuelle vérification antivirus, alors que cette précaution
est presque impossible à effectuer (sauf à être un "hacker"
assez compétent) sur les gigantesques programmes
d'installation (exécutables compactés et parfois cryptés) qui
sont de mise aujourd'hui, programmes d'installation qui
exigent de l'utilisateur une incroyable confiance et/ou une
totale inconscience, et qui le dépossèdent toujours un peu
plus du contrôle qu'il devrait, par principe, exercer sur son
ordinateur personnel.
     L'éventuelle désinstallation des outils Q&D AstroTools
exige simplement la suppression des fichiers présents dans le
répertoire de destination puis celle du répertoire lui-même.

     L'exploitation ultérieure des outils Q&D AstroTools pour
DOS se fera à partir de leur répertoire, que la commande
CHDIR (ou CD) permet d'atteindre préalablement à toute
session de travail. L'écriture d'un petit fichier "batch"
situé dans un des répertoires mentionnés dans la variable
PATH est vivement recommandée. Par exemple, en supposant que
les outils Q&D AstroTools sont dans le répertoire C:\QDASTRO,
l'appel de ce fichier ASTRO.BAT pourra inaugurer toute
session de travail :

@ECHO OFF
C:
CD \QDASTRO
REM à modifier si nécessaire !
SET POUR_TU=-1h
ECHO.
ECHO Outils Q&D AstroTools pour DOS
ECHO.

     La variable d'environnement POUR_TU permet de corriger
l'heure système du PC afin d'obtenir l'heure en Temps
Universel. Elle est analogue à (mais différente de) la
variable d'environnement TZ exploitée par les systèmes de
type Unix.

     L'ajout du répertoire des outils Q&D AstroTools dans la
variable PATH est évidemment envisageable, mais cette
procédure est déconseillée, car la recherche par le DOS des
commandes et programmes en serait légèrement, mais
inutilement ralentie. Au reste, même avec cette méthode, la
variable d'environnement POUR_TU serait toujours à définir,
soit dans un "batch" spécifique, soit dans le fichier
AUTOEXEC.BAT.

     Le répertoire des outils Q&D AstroTools contiendra ces
fichiers :

SYNTAXE  TXT ; bref rappel de la syntaxe des programmes (format ASCII DOS)
LIRE     COM ; visualisation d'un fichier texte (utilitaire du domaine public)
ATLAS    EXE ; recherche d'une ville dans l'atlas
ATLAS    RSC ; liste de villes (une version plus complète est disponible séparément)
TU       EXE ; recherche d'une correction horaire (France)
TU       RSC ; liste de corrections horaires (France)
THEME    EXE ; calcul d'un thème
RAPPORT  EXE ; génération d'un rapport "traditionnel"
RET      EXE ; génération d'un rapport "conditionaliste"
TRANSITS EXE ; calcul de transits
SIGNAUX  EXE ; calcul de transits
COMPARER EXE ; comparaison de deux thèmes
CARTE    EXE ; affichage d'un thème natal
CARTETR  EXE ; affichage des transits sur un thème natal
CARTECO  EXE ; affichage de deux thèmes
LISTE    EXE ; liste des fichiers .THM
CHERCHER EXE ; filtrage d'un ensemble de thèmes
MODIFIER EXE ; modification d'un fichier .THM
SETMODE  BAT ; détermination des paramètres de fonctionnement
FCOMP    EXE ; utilitaire requis par SETMODE.BAT
SETVAR   BAT ; détermination de la correction horaire
EV       EXE ; utilitaire requis par SETVAR.BAT
SKYTOOLS RSC ; paramètres en cours
STANDARD RSC ; paramètres traditionnels
RET      RSC ; paramètres conditionalistes
SKYTOOLS STD ; exploitation des paramètres traditionnels
SKYTOOLS RET ; exploitation des paramètres conditionalistes
PREVOIRB BAT ; calcul de transits avec la latitude
PREVOIR  BAT ; calcul de transits sans la latitude
EXEMPLES BAT ; thèmes dignes d'intérêt
DIVERS   BAT ; autres thèmes dignes d'intérêt
TOUS     BAT ; "notoriétés spectaculaires" sans (grand) intérêt
*        THM ; quelques thèmes précalculés
DEMO     BAT ; démonstration des outils Q&D AstroTools
DEMOENG  BAT ; démonstration pour les anglophones
CHKEM    EXE ; vérification antivirus
CHKEM    LOG ; données de vérification antivirus
LISEZMOI RTF ; instructions
LISEZMOI TXT ; instructions (format ASCII DOS)
README   RTF ; très brève présentation pour les anglophones
README   TXT ; très brève présentation pour les anglophones
XLAT     EXE ; utilitaire de transcodage
XLAT     GLO ; table de conversion pour XLAT
WITH     EXE ; utilitaire de traitement par lot
HTM2ASC  EXE ; utilitaire de conversion HTML --> ASCII
HTM2ASC  INI ; table de conversion pour HTM2ASC
FORMATS  BAT ; démonstration des principaux formats acceptés
ERRATA   RTF ; éventuelles corrections de dernière minute
ERRATA   TXT ; éventuelles corrections de dernière minute
DAT2THM  TXT ; écran d'aide de DAT2THM.EXE
DAT2THM  EXE ; aide à la conversion des fichiers .DAT d'Astrolog
GARC2THM TXT ; écran d'aide de GARC2THM.EXE
GARC2THM EXE ; aide à la conversion des "archives Gauquelin" (séries 1 et 2)
GAM2THM  TXT ; écran d'aide de GAM2THM
GAM2THM  EXE ; aide à la conversion des fichiers .GAM
RND2THM  TXT ; écran d'aide de RND2THM
RND2THM  EXE ; génération de thèmes aléatoires
SOLARSYS TXT ; écran d'aide de SOLARSYS
SOLARSYS EXE ; génération d'éphémérides
SYMBOLES GIF ; table des symboles en français
SYMBOLS  GIF ; table des symboles en anglais
ASTRO    BAT ; exemple de "batch" pour inaugurer une session AstroTools
DEBORD   DOS ; positions calculées par Astrolog
DEBORD   OEM ; positions calculées par Astrolog
DEBORD   WIN ; positions calculées par Astrolog
*        TXT ; syntaxe des fichiers exécutables

     Les fichiers de type THM sont évidemment des thèmes.

     Le fichier "batch" DEMO.BAT illustre les fonctions des
principaux modules. Quelle que soit la méthode choisie pour
installer les fichiers, l'exécution de cette rapide et
sommaire démonstration s'impose, autant que la consultation
des fichiers LISEZMOI.TXT (ou LISEZMOI.WRI) et probablement
l'impression du fichier texte SYNTAXE.TXT.

     Le fichier "batch" SETMODE.BAT permet de choisir des
paramètres (orbes, rubriques, etc.) "traditionnels" (commande
SETMODE N) ou conditionalistes (commande SETMODE R).
     L'appel par un CALL de la commande SETMODE.BAT devrait
évidemment figurer dans le fichier "batch" recommandé supra
(ASTRO.BAT) pour inaugurer une session de travail avec les
outils Q&D AstroTools.

     Les outils CARTE, CARTETR et TRANSITS exploitent la
variable d'environnement POUR_TU, si elle existe. Sa
définition, facultative, sera ordinairement faite dans le
fichier AUTOEXEC.BAT sous la forme "POUR_TU=-xxH" ou
"POUR_TU=+xxH", xxH étant la correction requise pour obtenir
l'heure en Temps Universel à partir de l'heure système
(généralement calée sur l'heure légale en vigueur). Par
exemple, POURTU=-2h signalera aux trois modules concernés
qu'ils doivent soustraire deux heures à l'heure système (en
mode ligne de commandes et/ou en mode interactif).
     La variable d'environnement TZ, souvent déjà définie
pour les utilitaires Unix sous DOS ou pour le programme PGP,
n'est pas prise en compte.

     Le fichier "batch" SETVAR.BAT permet d'affecter à la
variable d'environnement POUR_TU la valeur -1h (correction
"normale" pour la France) ou -2h ("heure d'été" pour la
France), en tapant soit la commande SETVAR N, soit la
commande SETVAR ETE.

     Les fichiers PREVOIRB.BAT et PREVOIR.BAT rendent (un
peu) plus facile le lancement du programme TRANSITS : le
premier tient compte de la latitude, le second non (comme le
font, à tort, trop d'astrologues). In case you'd like to
know, "B" suffix stands for "¨".

     Les fichiers CHKEM.EXE et CHKEM.LOG servent à vérifier
l'intégrité de la distribution originale des outils
Q&D AstroTools, et peuvent être effacés si nécessaire pour
regagner un peu d'espace sur le disque (quand bien même ce
souci réactionnaire n'a plus de sens, maintenant que presque
tous les utilisateurs croient acceptables les démentielles
exigences de Windows).
     A l'installation, l'exécution de ce programme est
indispensable, afin de vérifier que les fichiers n'ont pas
été modifiés.

     Les textes générés par les outils Q&D AstroTools
utilisent le jeu de caractères ASCII du PC : leur
consultation à partir de l'environnement Windows exige
évidemment une conversion au jeu de caractères souvent appelé
"OEM Windows", conversion que le programme XLAT (avec la
table définie dans le fichier WIN2PC.GLO) pourra assurer, si
nécessaire (la syntaxe est "XLAT WIN2PC fichier", qui garde
par sécurité une copie du fichier original avec l'extension
.BK!).

     L'utilitaire WITH permet de traiter en une seule fois un
ensemble de fichiers (à l'image de la commande FOR du DOS).
Par exemple, la génération du rapport correspondant à chaque
thème présent dans le répertoire actuel pourra se faire avec
la commande : WITH -q -e *.thm "RAPPORT $f" (les guillemets
sont obligatoires ici).

     L'utilitaire HTM2ASC permettrait de récupérer sous forme
d'un fichier texte l'essentiel de la documentation, si elle
venait à être fournie sous la forme d'un fichier HTML (ce qui
est improbable, sans être impossible).

     L'utilitaire RND2THM, qui permet de générer des thèmes
aléatoires, présente un certain intérêt pour l'établissement
de statistiques.

     Les utilitaires DAT2THM, GARC2THM et GAM2THM pourront
éventuellement aider à récupérer, dans la mesure du possible,
les informations déjà enregistrées sous ces trois formats :
le format .DAT d'Astrolog (l'excellent "freeware" de Walter
Pullen), le format des archives Gauquelin (séries 1 et 2), et
le format .GAM. Leur exploitation ne devrait poser aucun réel
problème aux utilisateurs qui savent lire un écran d'aide.

     L'utilitaire SOLARSYS est un programme d'astronomie
permettant de calculer les positions planétaires et de
générer des éphémérides.



(* === REMARQUES IMPORTANTES === *)

     La maîtrise de la ligne de commandes du DOS est
indispensable. L'utilisateur (en tout cas le programmeur) qui
y serait résolument allergique pourrait assez facilement
rédiger un programme de type "shell", sous DOS ou sous
Windows, qui ferait office d'intégrateur pour les différents
outils Q&D AstroTools. Pour ma part, je n'en vois pas la
réelle utilité.

     La nature DOS de ces programmes interdit évidemment
toute "aide en ligne contextuelle" : ne sont disponibles que
le rappel de la syntaxe et, le cas échéant, celui des
affectations de touches. La seule documentation consiste en
ce fichier LISEZMOI, rapidement rédigé pour cette
distribution "freeware" (les quelques rares utilisateurs des
distributions précédentes ayant évidemment bénéficié, eux,
d'une session de démonstration... de quelques minutes, bien
suffisantes pour maîtriser les programmes). L'examen attentif
du fichier DEMO.BAT devrait logiquement répondre à toutes les
éventuelles questions sur l'exploitation des différents
programmes.

     La théorie utilisée pour les calculs (théorie mise au
point par T. C. Van Flandern et K. F. Pulkkinen, 1979,
publiée dans The Astrophysical Journal) garantit, pour un
intervalle allant de 1600 à 2200, que les positions seront
exactes à une minute d'arc près pour toutes les planètes sauf
pour Pluton, dont la position sera exacte à quinze minutes
d'arc près. La théorie dite VSOP87 ("Variations Séculaires
des Orbites Planétaires", par P. Bretagnon et G. Francou,
1987), plus récente, est bien plus précise (quelques secondes
d'arc) et donne des résultats fiables sur un plus grand
intervalle de temps : elle avait été intégrée, à titre
expérimental et non sans mal (à cause du compilateur "DOS
mode réel" utilisé), dans la version 1.2 des outils
Q&D AstroTools, mais son usage avait été écarté, car les
calculs étaient alors de six à huit fois plus lents qu'avec
la théorie Van Flandern et Pulkkinen. Les incontestables
avantages de la théorie VSOP87 ne compensaient pas sa
lenteur, inacceptable dans les modules de visualisation
graphique et interactive (en tout cas avec le matériel
disponible jusqu'en 1992, qui n'était pas très rapide au
regard des machines d'aujourd'hui, d'une surpuissance presque
indécente à considérer leurs utilisateurs). Les mêmes
réserves s'appliquent à d'autres théories de mécanique
céleste, comme la récente théorie DE404 du Jet Propulsion
Laboratory, qui serait plus précise encore que la théorie
VSOP87.
     Au reste, l'ultime compilateur employé pour créer ces
programmes, l'excellent TopSpeed Modula-2, atteignait
malheureusement ses limites avec l'intégration des très
nombreuses données numériques requises par la théorie
VSOP87 : seul un compilateur "moderne" (C/C++ ou, à la
rigueur, Pascal/Delphi) permettrait de supprimer ces limites
(grâce au "mode protégé" sous DOS, ou directement sous
Windows ou sous Unix), mais ce serait au prix,
intellectuellement, d'un véritable retour en arrière, que je
n'entends pas m'infliger pour le seul amour d'Uranie.
     La précision (en tout cas sur une longue période) a donc
été volontairement sacrifiée à la vitesse, mais elle reste
amplement satisfaisante dans les limites de son domaine de
validité, d'autant que les outils Q&D AstroTools ont d'abord
été créés pour calculer et étudier des thèmes de l'époque
contemporaine, les seuls dont l'heure de naissance est
raisonnablement vérifiable. La précision du moteur de calculs
est donc suffisante, et surtout : exploitable. Avant de
condamner ce choix, les amateurs (maniaques et autres
virginiens) de positions à la seconde d'arc près devraient
d'ailleurs réfléchir un peu aux conditions ordinaires
d'exercice de l'astrologie : imprécision habituelle des
heures de naissance (trop souvent arrondies à 15, voire 30
minutes) et parfois même des dates, fantaisies dans les
sources consacrées aux coordonnées géographiques et aux
corrections horaires, orbes très généreuses (Furetière admet
les deux genres) généralement admises pour déterminer les
aspects (lesquels sont d'ailleurs presque toujours, par
routine et irréflexion, calculés sans prendre en compte la
latitude). Autant de points qui devraient faire réfléchir les
astrologues imaginant avoir besoin d'une précision digne du
Jet Propulsion Laboratory, croyant sans doute y trouver une
légitimité et une caution "scientifiques".
     Incidemment, à ma connaissance, aucun savant n'a jamais
été convaincu de l'intérêt de l'astrologie au motif que les
positions planétaires étaient calculées avec une seconde
d'arc de précision.
     Les astrologues ayant réellement besoin d'étudier des
thèmes situés hors de l'intervalle allant de 1600 à 2200
pourront toujours avoir recours soit aux excellents
programmes gratuits Astrolog et Astrolabe, soit à la
procédure expliquée infra (au lecteur attentif de la
découvrir !), qui permettra de calculer, au parfait mépris du
réel astronomique et donc sans garantie aucune, des thèmes
hors de la période de validité assurée par la théorie Van
Flandern et Pulkkinen. Le faut-il souligner ? Cette fonction,
ajoutée avec réticence pour la distribution 1.70 des outils
Q&D AstroTools, est aussi contestable que dangereuse, et elle
donnera des résultats imprécis, voire aberrants, aussi bien
pour les positions planétaires (de Pluton, surtout) que pour
le calendrier : j'en déconseille évidemment l'abus... et même
l'usage. En tout cas, pour reprendre le mot du sage Henricus
Barbatus : "Ecce pactum. Id cape aut id relinque."

     J'ai assez souligné que cet ensemble de programmes
correspondait à ma pratique de l'art astrologique... et de
l'astronomie d'amateur : c'est pourquoi la détermination des
aspects peut prendre en compte, de manière rationnelle et
logique, la latitude des planètes, c'est aussi pourquoi
certaines fonctions inessentielles brillent par leur absence,
ou par leur présence très symbolique (vestiges de versions
antérieures des programmes : affichage éventuel de certaines
facéties sans utilité réelle comme les aspects mineurs, les
révolutions du Soleil et de la Lune, etc.).
     En effet, comme le jugeait Raymond Abellio, de
nombreuses méthodes, qu'elles soient réputées
"traditionnelles" ou "modernes", servent surtout à multiplier
les signes et à brouiller les clairs signaux du système
solaire, permettant au premier sophiste venu de justifier
tout et n'importe quoi, a priori comme a posteriori (à
l'image des maîtrises sur les cuspides, par exemple). Je
n'irai pas même mentionner les "analyses" plus ou moins
farfelues, voire bouffonnes (comme "Astroléade" du malhonnête
Patrice Guinard).
     Au reste, dans mon expérience, outre son intérêt pour le
philosophe (intérêt dont l'exposé ne s'impose nullement ici,
d'autant que je résiste depuis longtemps à l'insistante
pression des amis, relations et connaissances qui
souhaiteraient que j'écrive enfin mon Bref traité
d'astrologie situationniste <wry and weary smile>), l'art
astrologique ne semble véritablement digne d'attention que
dans deux domaines : l'étude du caractère, d'abord, à
condition de prendre aussi en compte les conditionnements
terrestres, comme dans les études sur les capacités
intellectuelles (sur ce sujet, The Bell Curve, par Richard
Herrnstein et Charles Murray, est décisif). Encore cette
étude sert-elle surtout, comme le notait lucidement Raymond
Abellio, "à gagner du temps", sans vraiment favoriser de
décisives découvertes psychologiques.
     L'autre domaine est évidemment l'analyse des relations
intersubjectives, qui rend compte, avec une assez surprenante
exactitude, des relations d'empathie, d'indifférence et
d'antipathie (ainsi, j'ai commencé à m'intéresser vraiment à
l'astrologie quand j'ai constaté que presque tous mes auteurs
de prédilection étaient fortement marqués par Pluton et/ou
Uranus).

     Une parenthèse : comme le constataient déjà, en d'autres
temps, des esprits lucides comme Léopardi ou Tocqueville, "le
plus froid de tous les monstres froids" prétend imposer
universellement un ordre collectiviste et marchand, au nom de
cet "idéal" décrit par Zamiatine comme par Huxley et Orwell,
savoir "le terrorisme tempéré par le bonheur, le bonheur de
chacun à sa place". De manière cohérente, à tous les niveaux,
le Léviathan favorise donc le caractère anonyme et
interchangeable des rouages de la machine sociale, qu'ils
soient marionnettes ou marionnettistes, au profit de cette
tripartition bien européenne : bergers, chiens et moutons.
Quant aux loups, évidemment...
     C'est pourquoi l'ordre social moderne ne tolère aucune
réserve, parce qu'il y devine une certaine puissance,
humiliante pour lui, de mépris et même d'indifférence : les
figures de Martin Venator et de René Dorlinde lui sont
insupportables.
     Comment expliquer alors l'étonnante méconnaissance, par
le Pouvoir, d'un art qui, convenablement exploité, lui
permettrait de détecter et d'éliminer au plus tôt ses ennemis
naturels, ces mauvais esprits -- presque toujours marqués par
Pluton et/ou Uranus -- dont le ciel natal dit assez
clairement qu'ils seront naturellement rétifs au
conditionnement comme au contrôle, qu'ils refuseront aussi
bien d'être vils (à l'image des maîtres) qu'avilis (à l'image
des esclaves), et qu'ils n'iront jamais adhérer à l'ordre du
monde tel qu'il est ? Car en ce millénaire de fer, nul ne
devrait avoir l'audace d'énoncer, ou simplement de
comprendre, cette fière déclaration : "I will not be pushed,
filed, stamped, indexed, briefed, debriefed or numbered. My
life is my own.".

     L'auteur de certain Véridique Rapport avait raison,
quand il démontrait que les maîtres de l'époque n'étaient
pas, intellectuellement, à la hauteur de leur puissance. Ce
manque d'intelligence, Thucydide l'avait noté en une phrase
pleine à la fois de sagesse et de mépris : "Les esprits les
plus moyens sont les plus qualifiés pour s'occuper du
gouvernement".

     L'Astrologue auxiliaire de Police, quelle belle figure
de roman ! <wry smile>

     C'est sans doute le moment opportun pour rappeler que
tout philosophe tenant un discours sur les astres est
suspect, car il est, peut-être, comme tout philosophe, un
sophiste, un philosophiste, voire un logocrate (pour
reprendre un mot de Steiner à propos de Boutang). Et si l'on
considère que l'astrologie, comme la psychologie, est surtout
effet de discours... et manière de passer le temps, aussi.

     Pour en revenir au logiciel : les fonctions suivantes
sont sans valeur aucune, qui sont indéfendables en pratique
comme en théorie (sauf, évidemment, à être un bon sophiste ou
un commerçant habile dans l'art d'ignorer le réel, comme
certain amoureux du paradoxe qui prétend vouloir gagner à une
astrologie moderne rebaptisée "naturelle" les partisans
d'astrologies plus "traditionnelles" en ajoutant à son
logiciel force fonctions parfaitement irrationnelles,
prétendues "traditionnelles") : "parts", directions
symboliques, directions primaires, directions secondaires,
révolutions solaires, révolutions lunaires, aspects mineurs,
aspects avec les étoiles, planètes hypothétiques (que la
"Science officielle", évidemment, ignore ou dissimule),
astrocartographie et autres thèmes composés de mi-points.
Quant aux fantaisies féministes (Lilith) ou karmiques (noeuds
lunaires)...
     Plus facétieux que je ne le suis, j'irais bien suggérer
aux ardents défenseurs de ces "méthodes" délirantes
(étymologiquement : sorties du sillon de la droite raison) la
prise en compte cohérente des révolutions de Mercure et des
autres planètes, ainsi que du second foyer de l'orbite de
chaque planète, et même pour certains, dans l'esprit de
Jacques Sternberg quand il inventait le joli "Nous Trois : le
magazine du couple moderne", la comparaison simultanée de
trois thèmes (avec les étranges mi-points qui en
découleraient (il)logiquement !).
     J'y pense, à l'instant : qui nous dira les mystérieux
éléments orbitaux de la planète Moronia, dominante
incontestable dans les thèmes de tant de nos contemporains,
qu'ils soient vendeurs ou consommateurs d'astrologie(s) !
     Plus sérieusement, même le thème d'âge tel que
l'exposent Jean-Pierre Nicola et ses trop serviles disciples
(doués pour les seuls démarquage et stellionat) me semble
d'efficacité contestable, du moins avec les cycles moyens
dont l'exploitation est paradoxale, contraire qu'elle est à
la réalité astronomique rationnellement prônée par l'école
conditionaliste -- incidemment, la vérification attentive de
l'exemple du général de Gaulle (dans Le grand livre des
prévisions de Jean-Pierre Nicola), censé illustrer
d'éclatante manière cette technique prévisionnelle, réserve
quelques moments de franche perplexité, voire hilarité, aux
lecteurs qui ne seront pas bornés à feuilleter une
hagiographie du Général : le Mauriac sous de Gaulle de
Jacques Laurent est ici un indispensable contrepoison, autant
que les "révélations" plus ou moins posthumes sur François
Mitterrand qui contredisent les trop nombreuses complaisances
et inexactitudes exposées dans Sous le ciel de Jarnac rédigé
par Richard Pellard, adroit astrologue de gauche, dont
certains autres textes valent heureusement (un peu) mieux que
le pathétique panégyrique cité supra ne le laisserait penser
ou craindre.

     La réintégration de la théorie VSOP87 (que justifierait,
c'est vrai, la puissance des ordinateurs modernes),
l'intégration d'une autre théorie moderne (DE404, par
exemple), la conversion, voire la refonte des outils
Q&D AstroTools pour un autre système d'exploitation, qu'il
soit ludique (Windows 95/98, MacOS) ou sérieux (Linux et,
dans une moindre mesure, Windows NT) ne sont pas envisagées
pour l'instant, en tout cas certainement pas pour l'amour de
l'art... même astrologique.
     Au reste, les quelques bonnes idées incontestables
présentes dans les outils Q&D AstroTools se retrouveront
certainement dans de futurs logiciels d'astrologie,
commerciaux ou non : déjà en 1983, le listing publié avait su
"inspirer" quelques commerçants avisés, dont deux au moins
avaient respecté jusqu'aux numéros des lignes du programme
(alors rédigé en simple Basic), quand ils auraient pu
exploiter directement les ouvrages de mécanique céleste
mentionnés dans la bibliographie de l'article (et dans celle
d'un autre article, consacré, lui, aux éphémérides
astronomiques) !
     Les outils Q&D AstroTools n'existent qu'en version
(espérée) française : aucune traduction n'est disponible, que
ce soit en bas-français ou en bas-anglais.

     Pour mémoire : les outils Q&D AstroTools sont un
"freeware" à prendre en l'état, mais ils ne sont pas dans le
"domaine public".

     Le lancement des outils Q&D AstroTools est possible dans
une session DOS Windows 3.1 ou Windows 95/98 : dans l'un et
l'autre cas, l'exécution des programmes est évidemment bien
plus lente que sous DOS, comme le pourra expliquer tout
développeur compétent. Aucun essai n'a été effectué avec
d'autres environnements : autrement dit, les outils
Q&D AstroTools peuvent ne pas fonctionner, ou mal, avec les
émulations DOS proposées par les différentes révisions de
Linux.
     Dans une session DOS Windows 95/98, le seul format
accepté pour les noms de fichiers est le classique 8+3.



(* === UTILISATION === *)

     Tous les outils fonctionnent en ligne de commandes :
dans la syntaxe, la forme "<...>" signale un paramètre
obligatoire, tandis que la forme "[...]" signale un paramètre
facultatif. Des exemples illustreront la manière d'appeler
les programmes.
     Les modules graphiques (CARTE, CARTETR et CARTECO) sont
interactifs : dans leur texte d'aide, chaque touche est mise
entre crochets. Par exemple, "[M]=motifs" signifie que la
touche "M" permet de changer le motif des aspects (traits
pleins ou pointillés). Dans les combinaisons de touches, le
caractère "^" désigne la touche "Ctrl", quand "Alt"
désigne... la touche "Alt" : ainsi, "[^R]" signifie que la
prochaine révolution solaire est calculée par une pression
simultanée sur les touches "Ctrl" et "R" ; "[Alt-Z]" que
l'affichage des zones conditionalistes bascule par une
pression simultanée sur les touches "Alt" et "Z".
     En règle générale, les touches et combinaisons de
touches ont été choisies de manière aussi rationnelle que
possible, et sont presque toujours identiques d'un module à
l'autre. Pendant l'exécution, les touches et les combinaisons
de touches sans action sont signalées par un léger bip
sonore.
     L'examen, au moins occasionnel, des informations
accessibles par les touches "?" et "!" est vivement
recommandé.
     Enfin, pour tous les outils Q&D AstroTools, les dates
antérieures au 15 octobre 1582 appartiennent au calendrier
julien. L'utilisateur devra prendre garde aux pays qui, pour
des raisons irrationnelles ou historiques (deux adjectifs qui
sont parfois synonymes), n'ont adopté le calendrier grégorien
qu'à partir d'une autre date (mois de septembre 1752, entre
autres exemples).

     La liste des programmes est donnée par ordre probable
(en tout cas : logique) d'utilisation, avec la syntaxe et
quelques indications plus ou moins utiles.



Outil ATLAS.EXE

Titre   : Q&D Atlas v1.0j (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : ATLAS <ville|département|numéro de département>... [option]...
Utilité : si possible, trouver dans l'atlas ATLAS.RSC une correspondance
          exacte ou approchée pour chaque <ville>, <département> ou
          <numéro de département>
Options : /t pour trouver toutes les correspondances, exactes ou non
             (la recherche utilise alors la phonétique et les codes Soundex)
          /d pour ne plus filtrer les entrées strictement identiques
             (la comparaison est limitée aux 500 premières entrées)
          /lh pour afficher la longitude en heures, minutes et secondes
          /ld pour afficher la longitude en degrés et minutes
Note 1  : Pour les villes de France, attention aux éventuelles variations :
          L', La, Le, Les, sur, sous, Saint, Sainte, etc.
Note 2  : La recherche d'une ville peut exploiter les caractères génériques :
          ? correspond à un seul caractère, * à aucun ou plusieurs de suite.
Note 3  : Pour d'évidentes raisons, certaines villes peuvent figurer
          dans l'atlas sous deux formes : française et anglaise.
Note 4  : Les coordonnées géographiques fournies sont indicatives ! ;-)
Exemple : ATLAS Paris 42 "Saint Etienne" Londres London "Paris Mairie VIII"

     Le fichier ATLAS.RSC contient des coordonnées
géographiques de provenances diverses, saisies manuellement
ou converties au fil des ans, normalisées en tout cas. Le
fichier est en ASCII DOS, prêt au réemploi sans scrupules
(mais pourquoi en avoir sur des informations qui
appartiennent au domaine public ?) par tout commerçant avisé.
     Aucun effort n'a été fait pour filtrer les doublons pour
une raison simple : d'une source à l'autre, les positions
géographiques divergent toujours quelque peu, qui auraient
exigé de trop nombreuses, et illusoires, vérifications.
D'aucuns se croient, à l'évidence, une forme assez risible de
"copyright" sur de simples coordonnées géographiques (qu'ils
ont généralement "empruntées" à d'autres atlas), comme
d'autres, au reste, s'imaginent des droits financiers et/ou
moraux sur des coordonnées de naissance (dont la
vérification, quand elle est possible, réserve parfois des
surprises).
     Quant aux inévitables erreurs de saisie, elles
justifient une fonction appréciable et originale du module
ATLAS, à savoir la recherche d'une correspondance exacte ou
approchée (en ayant recours à la phonétique, aux codes
Soundex, voire aux caractères génériques). Attention : tout
nom composé comprenant des espaces devra être encadré par des
guillemets. Pour la seule France, un numéro de département
donnera les coordonnées de la préfecture.
     Sur une machine lente, la recherche peut prendre
quelques dizaines de secondes (l'utilisateur impatient pourra
toujours sortir du programme en appuyant sur la touche
Echap). Le recours à un utilitaire de type "grep" (Unix) ou
encore à un script Perl (Unix, encore et toujours) sera
certainement plus rapide, mais probablement moins efficace.
     L'atlas fourni avec la distribution originale (ASTRO171)
est limité à la France, afin que l'archive tienne sur une
disquette 1,44 Mo (limite aussi arbitraire que presque
sentimentale) ; l'atlas fourni dans l'archive supplémentaire
ATLAS171 est mondial.

     Autres exemples :

ATLAS "Saint Germain en Laye"
ATLAS 94
ATLAS s*ger*en*la* /t
ATLAS bezanson /t



Outil TU.EXE

Titre   : Q&D T.U. (France) v1.0e (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : TU <date> <heure légale> [longitude]
Utilité : si possible, trouver la correction horaire requise pour obtenir
          l'heure en Temps Universel (T.U.) à partir de l'heure légale
Exemple : TU 20/9/16 7h

     La date est au format jj/mm/aaaa (aa pour notre siècle :
1900 sera ajouté automatiquement), l'heure légale au format
hhHmm, et la longitude au format hhHmmMssE ou hhHmmMssW.
     Quelques autres formats sont autorisés, qui sont
recensés dans le fichier FORMATS.BAT : jj-mm-aaaa et
jj.mm.aaaa pour la date ; hh:mm pour l'heure ; dddEmm,
dddWmm, ddd°mmE, ddd°mmW, ddd,ddE et ddd,ddW pour la
longitude.
     Cet outil, limité au régime horaire de la France,
signale clairement le piège posé par les naissances qui ont
lieu dans une période de chevauchement des heures légales
(piège ignoré, sauf erreur ou inattention de ma part, par
tous les autres logiciels commerciaux ou non). Les futurs
bouleversements, probables autant qu'inutiles, infligés à
l'inepte heure d'été par les incontrôlables fonctionnaires de
Bruxelles ne sauraient évidemment être pris en compte (sauf
à modifier le fichier TU.RSC, dont le format est facile à
déterminer).
     Quant à la détermination de la correction pour obtenir
l'heure T.U. avec d'autres régimes horaires, elle exigera la
consultation des ouvrages spécialisés... qui sont utiles,
mais pas infaillibles (ce n'est pas un hasard si certains
astrologues américains pratiquent une astrologie étonnante
qui ne se soucie pas de l'heure de naissance !), et dont les
éditions successives ne corrigent pas toujours toutes les
erreurs et omissions, quand elles n'en ajoutent pas de
nouvelles -- une mauvaise habitude qu'on aurait voulu penser
réservée au domaine informatique (parmi tant d'autres
illustrations envisageables, celle-ci : la conversion du
format WordPerfect 5.1 pour DOS vers le format Write pour
Windows 3.1 est mieux assurée par l'antédiluvienne version
2.0 de Word que par ses versions ultérieures).

     Autre exemple :

TU 26/9/82 2h30



Outil THEME.EXE

Titre   : Q&D Thème v1.2e (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : THEME <date> <heure légale> <correction horaire>
          <latitude> <longitude> <fichier[.THM]> [renseignements] [option]...
Utilité : calcul des positions planétaires et domifications
          (théorie Van Flandern et Pulkkinen, 1979)
Options : /o pour remplacer l'éventuel fichier existant
          /r pour renommer automatiquement le fichier s'il existe déjà
Note 1  : L = correction locale (longitude), P = correction pour Paris.
Note 2  : Les renseignements (ville,pays,nom,genre,remarque) sont regroupés
          dans une chaîne. Le séparateur doit appartenir à l'ensemble [,;_/$\].
          Les éventuels prénoms doivent précéder le nom de famille.
Exemple : THEME 20/9/16 7h -1H 45n26 0h17M35e PB "42,F,PB,H,Philosophe"

     La date est au format jj/mm/aaaa (aa pour notre siècle :
1900 sera ajouté automatiquement), l'heure légale au format
hhHmm, la correction horaire au format hhH ou -hhH (ou encore
L pour la longitude, ou P pour la longitude de Paris), la
latitude au format ddNmm ou ddSmm, et la longitude au format
hhHmmMssE ou hhHmmMssW.
     Quelques autres formats sont autorisés, qui sont
recensés dans le fichier FORMATS.BAT : jj-mm-aaaa et
jj.mm.aaaa pour la date ; hh:mm pour l'heure ; +hhH, +hhHmm
et -hhHmm pour la correction horaire ; dd°mmN, dd°mmS, dd,ddN
et dd,ddS pour la latitude ; dddEmm, dddWmm, ddd°mmE,
ddd°mmW, ddd,ddE et ddd,ddW pour la longitude.
     Les renseignements sont facultatifs, qui seront placés
entre guillemets dans une chaîne au format suivant :
"ville,pays,nom,genre,remarque" (le genre étant H, F ou N).
La ligne de commandes du DOS étant généralement limitée à un
peu moins de 128 caractères (et pour les puristes : "your
mileage may vary"), l'outil MODIFIER (voir infra) permettra
de modifier ces renseignements a posteriori. Ces
renseignements gagneront à être concis, dans la mesure où les
outils Q&D AstroTools n'ont jamais eu vocation à rivaliser
avec des logiciels spécialisés dans les bases de données.
     Une bonne pratique consiste à garder les coordonnées de
naissance dans un fichier de type "batch", pour les recréer
si nécessaire (voir les fichiers EXEMPLES.BAT, DIVERS.BAT et
TOUS.BAT). L'option /r est très utile afin d'éviter
l'écrasement d'éventuels fichiers ayant le même nom que le
thème à générer.
     Les thèmes créés avec l'option /i:$ sont destinés au
seul affichage des données calculées par le programme
Astrolog 5.40 de Walter Pullen : cette fonction n'est utile
que pour les thèmes situés hors de l'intervalle 1600..2200,
et son usage est déconseillé ("it's an unsupported feature",
as they say). Le fichier contenant les données à importer
aura été généré par "File/Save Chart Text Output..."
(Astrolog 5.40 pour Windows), "File/Save Chart Positions..."
(Astrolog 5.40 pour Windows), ou "ASTROLOG /i data > results"
(Astrolog 5.40 pour DOS). Attention : l'importation ne
dispense pas de fournir les coordonnées du thème !
     Je laisse à l'utilisateur, en guise d'exercice, le soin
de trouver, parmi ces trois possibilités, celle qui génère un
fichier inexact à cause d'un bug dans Astrolog.
     Les options /la:# et /lo:# permettent génèrent, en plus
du fichier .THM de base, un fichier RELOC.BAT qui permet de
créer les thèmes "relocalisés" (bien que l'intérêt de cette
facétie soit contestable, et même probablement nul : le sieur
Guinard me l'avait réclamée avec insistance, avançant même
d'étrange manière qu'elle était fort lucrative). Au moins un
intervalle de "relocalisation" doit être différent de 0.
L'usage du Temps Universel est fortement recommandé.

     Autres exemples :

theme -o 28/12/31 17:00 0h 48n50 0h9m21e debord
(avec, éventuellement, ces sobres renseignements :
"Paris,France,Guy-Ernest Debord,H,subversif officiel")
theme -o 4/11/1957 22h20 -1h 48n51 0h9m21e guinard
(avec, éventuellement, ces sobres renseignements :
"Paris,F,Patrice Guinard,H,astrologue paranoïaque et
malhonnête (C.U.R.A.)")



Outil RAPPORT.EXE

Titre   : Q&D Rapport v1.2e (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : RAPPORT <thème[.THM]> [rapport[.RPT]] [option]...
Utilité : création du rapport correspondant à un thème
Options : /o pour remplacer l'éventuel rapport existant
          /i pour ajouter les éléments d'interprétation
          /w pour forcer UseTabs à Yes et LineWidth à 0
          /l pour forcer UseBetaForTexts à No (interprétation des aspects)
          /b pour forcer UseBetaForTexts à Yes (interprétation des aspects)
          /pg pour forcer UseAltOrbesNatal à No (orbes par groupe)
          /po pour forcer UseAltOrbesNatal à Yes (orbes par objet)
          /e pour forcer un rapport exhaustif avec toutes les rubriques
          /d:# pour forcer le type de domification
               ([1..6]=Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée)
          /a:# pour ajouter la valeur # aux orbes
          /f:$ pour spécifier le fichier des interprétations (.RSC, .RSX)
Exemple : RAPPORT PIERREB af /a:-1

     Ce module génère un fichier texte ASCII DOS contenant
les données du thème spécifié. Les rubriques sont
personnalisables (dans une certaine mesure) en modifiant les
fichiers SKYTOOLS.RSC, STANDARD.RSC et RET.RSC (voir infra).
Les paramètres relatifs à l'interprétation seront sans effet.

     Autre exemple :

RAPPORT boutang /o /w



Outil CARTE.EXE

Titre   : Q&D Carte v1.6f (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : CARTE <thème[.THM]> [image[.PCX]] [option]...
Utilité : représentation graphique d'un thème
Options : /m pour afficher immédiatement le ciel des date et heure actuelles
          /tu:±hhH[mm] pour définir la correction donnant l'heure T.U.
          /d:# pour forcer le type de domification
               ([0..6]=Néant/Placidus/Placidus/Koch/Campanus/Regio/Ptolémée)
Note    : La variable d'environnement POUR_TU, si elle est définie, contient
          la correction requise pour passer de l'heure système à l'heure T.U.
          L'option /tu: l'emporte en priorité sur la variable d'environnement.
          En mode interactif, cette correction est systématiquement appliquée
          pour calculer le ciel des date et heure actuelles (touche "*").
Clavier : Touches utilisables (bascules) pendant la visualisation d'un thème
          [N]=normal, [H]=local, [U]=domitudes, [X]=hélio, [V]=vue, [$]
          [^J]=année entière (flèches=1,10,100), [J]=grille, [Alt-J]=lignes
          [Tab|Maj-Tab]=mode, [R]=infos, [K]=traits coudés, [Alt-O], [<][^O][>]
          [Droite][Gauche]=1mn (15 avec [Maj]), [Bas][Haut]=1h (6 avec [Maj])
          [-][+]=1 jour, [PageBas][PageHaut]=10 jours, [Début][Fin]=100 jours
          [^Gauche][^Droite]=1s de longitude (30 avec [Maj])
          [^R]=prochaine révolution solaire, [^L]=prochaine révolution lunaire
          [^Haut][^Bas]=1' de latitude (15 avec [Maj]), [O], [W]=latitudes
          [C]=couleurs/N&B, [I]=inversion vidéo, [D]=dominantes, [Z]=zones RET
          [L]=aspects avec/sans ¨, [^U], [^H], [^E]=écliptique, [^T]=équateur
          [F]=aspects avec les angles et les planètes fictives, [?|,|!]=aide
          [P]=format des positions, [^S|Alt-W]=sauvegarde, [Maj-Alt-F]=fichier
          [T]=taille des symboles, [M]=motifs, [G]=grille locale, [Alt-Z]
          [0]-[6]=Néant/Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée
          [8]=affichage de l'AS et du MC, [Alt-A], [Alt-E], [Alt-T], [Alt-M]
          [9]=affichage du Descendant et du Fond du Ciel, [¨]=points fictifs
          [F1]=Soleil, [F2]=Lune, [F3]=Mercure, [F4]=Vénus, [F5]=Mars
          [F6]=Jupiter, [F7]=Saturne, [F8]=Uranus, [F9]=Neptune, [F10]=Pluton
          [F11] et [F12] activent et désactivent toutes les planètes
          Avec [Maj], [F1] à [F12] (dés)activent le mode "planète privilégiée"
          qui affiche uniquement les aspects reçus par la planète sélectionnée
          Avec [^], [F1] à [F5] basculent ainsi l'affichage des aspects :
          conjonction, opposition, carré, trigone, sextile
          [^F11] et [^F12] agissent sur ces cinq aspects majeurs
          Avec [Alt], [F6] à [F9] basculent ainsi l'affichage des aspects :
          semi-carré, semi-sextile, quinconce et sesqui-carré
          [Alt-F11] et [Alt-F12] agissent sur ces quatre aspects mineurs
          [*] et [/]=ciel aux date et heure T.U. actuelles ou natales
          [Q|Espace|Echap]=retour au DOS
Exemple : CARTE PIERREB af

     A l'usage, c'est certainement le module le plus ludique
des outils Q&D AstroTools. Les actions accessibles par les
touches du clavier assurent un confort appréciable pour
rectifier une heure de naissance (en temps ou en localisation
géographique), pour examiner la valeur des différents
systèmes de domification, et pour avoir une vision du thème
natal conforme à la réalité astronomique (mode local, mode
domitudes, mode héliocentrique, et surtout prise en compte de
la latitude dans les aspects). Dans le mode "éphémérides
annuelles", la Lune, bien trop rapide, ne sera pas prise en
compte, et les modifications de date n'affecteront pas les
autres modes du programme.
     Le choix des date et heure actuelles (touche "*")
exploite l'heure système en lui appliquant la correction
spécifiée dans la variable d'environnement POUR_TU, si elle
existe (par exemple, si POUR_TU=-1H, le programme ôtera une
heure à l'heure système pour obtenir l'heure en Temps
Universel ; si POUR_TU n'existe pas, aucune correction ne
sera appliquée).
     Les cartes un peu complexes gagneront à être examinées
en supprimant certaines planètes, ou en affichant seulement
les aspects avec une planète (mode "planète privilégiée"). Le
passage d'une représentation à l'autre permettra aussi de
mieux apprécier les réalités astronomiques : ce point
justifierait, à lui seul, les quelques minutes nécessaires à
l'apprentissage des touches du clavier.
     La commande Ctrl-S sauve l'écran au classique format PCX
(un léger bip signalera la fin de l'opération) ; la commande
Alt-W, elle, génère un fichier thème (.THM) et un fichier
"batch" (.BAT) qui correspondent aux paramètres en cours
(cette fonction ne présente d'intérêt que pour garder une
éventuelle rectification jugée satisfaisante).
     La sélection interactive d'un fichier thème passe par la
commande Maj-Ctrl-F (cette combinaison de touches devrait
être difficile à taper par mégarde).

     Autre exemple :

CARTE balzac



Outil TRANSITS.EXE

Titre   : Q&D Transits v1.2h (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : TRANSITS <date|*> <heure|*> <thème[.THM]> [rapport[.TXT]] [option]...
Utilité : calcul des transits sur un thème natal
Options : /o pour remplacer l'éventuel rapport existant
          /i pour ajouter les éléments d'interprétation
          /w pour forcer UseTabs à Yes et LineWidth à 0
          /l pour forcer UseBetaForTexts à No (interprétation des aspects)
          /b pour forcer UseBetaForTexts à Yes (interprétation des aspects)
          /pg pour forcer UseAltOrbesNatal à No (orbes par groupe)
          /po pour forcer UseAltOrbesNatal à Yes (orbes par objet)
          /n pour afficher l'interprétation des transits dans l'ordre normal
             (les émetteurs seront énumérés dans l'ordre du système solaire,
             des plus rapides aux plus lents)
          /e pour forcer un rapport exhaustif avec toutes les rubriques
          /d:# pour forcer le type de domification
               ([1..6]=Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée)
          /a:# pour ajouter la valeur # aux orbes
          /f:$ pour spécifier le fichier des interprétations (.RSC, .RSX)
          /rs pour calculer la prochaine révolution solaire
          /rl pour calculer la prochaine révolution lunaire
          /tu:±hhH[mm] pour définir la correction donnant l'heure T.U.
Note 1  : * correspond à la date du jour ou à l'heure T.U. actuelle.
Note 2  : La variable d'environnement POUR_TU, si elle est définie, contient
          la correction requise pour passer de l'heure système à l'heure T.U.
          Cette correction est appliquée si et seulement si les date et heure
          sont toutes deux spécifiées avec * (TRANSITS * *).
          L'option /tu: l'emporte en priorité sur la variable d'environnement.
Exemple : TRANSITS * * debord

     Ce module génère un fichier texte ASCII DOS contenant
les transits pour les date et heure indiquées. Les rubriques
sont personnalisables (dans une certaine mesure) en modifiant
les fichiers SKYTOOLS.RSC, STANDARD.RSC et RET.RSC.
     Le choix des date et heure actuelles (séquence de
paramètres "* *"") exploite l'heure système en lui appliquant
la correction spécifiée dans la variable d'environnement
POUR_TU, si elle existe (par exemple, si POUR_TU=-1H, le
programme ôtera une heure à l'heure système pour obtenir
l'heure en Temps Universel ; si POUR_TU n'existe pas, aucune
correction ne sera appliquée). Les paramètres relatifs à
l'interprétation seront sans effet.

     Autre exemple :

TRANSITS 1/1/2001 12h daninos



Outil CARTETR.EXE

Titre   : Q&D Carte des transits v1.6f (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : CARTETR <date|*> <heure T.U.|*> <thème[.THM]> [image[.PCX]]
Utilité : représentation graphique des transits sur un thème natal
Options : /tu:±hhH[mm] pour définir la correction donnant l'heure T.U.
          /d:# pour forcer le type de domification
               ([0..6]=Néant/Placidus/Placidus/Koch/Campanus/Regio/Ptolémée)
Note 1  : * correspond à la date du jour ou à l'heure T.U. actuelle.
Note 2  : La variable d'environnement POUR_TU, si elle est définie, contient
          la correction requise pour passer de l'heure système à l'heure T.U.
          Cette correction est appliquée si et seulement si les date et heure
          sont toutes deux spécifiées avec * (CARTETR * *).
          L'option /tu: l'emporte en priorité sur la variable d'environnement.
          En mode interactif, cette correction est systématiquement appliquée
          pour calculer le ciel des date et heure actuelles (touche "*").
Clavier : Touches utilisables (bascules) pendant la visualisation des transits
          [*] et [/]=transits aux date et heure T.U. actuelles ou natales
          [Droite][Gauche]=1mn (15 avec [Maj]), [Bas][Haut]=1h (6 avec [Maj])
          [-][+]=1 jour, [PageBas][PageHaut]=10 jours, [Début][Fin]=100 jours
          [E]=superposition des thèmes, [N]=thème natal, [A]=ciel actuel, [$]
          [^A]=thème d'âge réel, [X]=héliocentrique, [V]=vue, [Tab|Maj-Tab]
          [^J]=année entière (flèches=1,10,100), [J]=grille, [Alt-J]=lignes
          [^Y][^B]=trimestre ([+][-]=E ou R, [Droite][Gauche]=trimestre)
          [^T]=orbes (ciel actuel), [Alt-O]=orbes par groupe/objet, [<][^O][>]
          [C]=couleurs/N&B, [I]=inversion vidéo, [O]=orientation, [R]=infos
          [D]=dominantes, [Z]=zones RET, [Alt-Z], [L]=aspects avec/sans ¨
          [^R]=prochaine révolution solaire, [^L]=prochaine révolution lunaire
          [F]=aspects avec les angles et les planètes fictives, [?|,|!]=aide
          [P]=format des positions, [^S]=sauvegarde écran, [Maj-Alt-F]=fichier
          [T]=taille des symboles, [M]=motifs, [K]=traits coudés, [W]=latitudes
          [0]-[6]=Néant/Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée
          [8]=affichage de l'Ascendant et du Milieu du ciel, [Alt-A], [Alt-M]
          [9]=affichage du Descendant et du Fond du Ciel, [¨]=points fictifs
          [F1]=Soleil, [F2]=Lune, [F3]=Mercure, [F4]=Vénus, [F5]=Mars
          [F6]=Jupiter, [F7]=Saturne, [F8]=Uranus, [F9]=Neptune, [F10]=Pluton
          [F11] et [F12] activent et désactivent toutes les planètes
          Avec [Maj], [F1] à [F12] agissent sur les planètes du thème natal
          Avec [Ctrl], [F1] à [F5] basculent ainsi l'affichage des aspects :
          conjonction, opposition, carré, trigone, sextile
          [^F11] et [^F12] agissent sur ces cinq aspects majeurs
          Avec [Alt], [F6] à [F9] basculent ainsi l'affichage des aspects :
          semi-carré, semi-sextile, quinconce et sesqui-carré
          [Alt-F11] et [Alt-F12] agissent sur ces quatre aspects mineurs
          Pour le thème d'âge, [^E]=aspects entre planètes, [^Z] et [^P]=orbes
          [Q|Espace|Echap]=retour au DOS
Exemple : CARTETR 27/6/1998 12h pierreb

     A l'usage, c'est certainement l'autre module ludique des
outils Q&D AstroTools. Les actions accessibles par les
touches du clavier assurent un confort incomparable pour
examiner de manière dynamique les transits sur le thème natal
spécifié. Incidemment, le thème d'âge est dressé ici non avec
les cycles moyens des planètes (voir supra), mais avec les
élongations réelles des planètes : les résultats sont donc
assez différents des exemples données par Jean-Pierre Nicola
et ses disciples dans le Grand Traité d'Astrologie
Conditionaliste publié sous tant de titres différents (encore
une fois, cette remarque critique autant qu'amusée, et
surtout assez facile à démontrer, ne vise évidemment en rien
l'oeuvre de Jean-Pierre Nicola, qui partage avec Raymond
Abellio ce don appréciable : faire croire aux gens
intelligents qu'ils sont un peu plus intelligents qu'ils
n'osaient le penser).
     Dans les modes "éphémérides annuelles" et "aspects
formés par un astre émetteur au cours d'un trimestre" (deux
représentations réalisées dès ma version pour Apple ][ et qui
sont, à ma connaissance, aussi originales que claires), la
Lune, bien trop rapide, ne sera pas prise en compte, et les
modifications de date n'affecteront pas les autres modes du
programme.
     Le choix des date et heure actuelles (touche "*")
exploite l'heure système en lui appliquant la correction
spécifiée dans la variable d'environnement POUR_TU, si elle
existe (par exemple, si POUR_TU=-1H, le programme ôtera une
heure à l'heure système pour obtenir l'heure en Temps
Universel ; si POUR_TU n'existe pas, aucune correction ne
sera appliquée). La même remarque est valable pour la ligne
de commandes, si les calculs doivent être effectués pour les
date et heure actuelles (séquence de paramètres "* *"").
     La sélection interactive d'un fichier thème passe par la
commande Maj-Ctrl-F (cette combinaison de touches devrait
être difficile à taper par mégarde).

     Autre exemple :

CARTETR * * debord /o



Outil COMPARER.EXE

Titre   : Q&D Comparaison v1.2c (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : COMPARER <thèmeA[.THM]> <thèmeB[.THM]> [rapport[.ASC]] [option]...
Utilité : comparaison de thèmes
Options : /o pour remplacer l'éventuel rapport existant
          /i pour ajouter les éléments d'interprétation
          /w pour forcer UseTabs à Yes et LineWidth à 0
          /l pour forcer UseBetaForTexts à No (interprétation des aspects)
          /b pour forcer UseBetaForTexts à Yes (interprétation des aspects)
          /pg pour forcer UseAltOrbesNatal à No (orbes par groupe)
          /po pour forcer UseAltOrbesNatal à Yes (orbes par objet)
          /e pour forcer un rapport exhaustif avec toutes les rubriques
          /d:# pour forcer le type de domification
               ([1..6]=Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée)
          /a:# pour ajouter la valeur # aux orbes
          /f:$ pour spécifier le fichier des interprétations (.RSC, .RSX)
Exemple : COMPARER guy alice

     Ce module génère un fichier texte ASCII DOS contenant
les éléments de comparaison entre les deux thèmes spécifiés.
Les rubriques sont personnalisables (dans une certaine
mesure) en modifiant les fichiers SKYTOOLS.RSC, STANDARD.RSC
et RET.RSC (voir infra). Les paramètres relatifs à
l'interprétation seront sans effet.



Outil CARTECO.EXE

Titre   : Q&D Comparaison v1.4d (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : CARTECO <premier thème[.THM]> <second thème[.THM]> [image[.PCX]]
Utilité : comparaison graphique de deux thèmes
Option  : /d:# pour forcer le type de domification
               ([0..6]=Néant/Placidus/Placidus/Koch/Campanus/Regio/Ptolémée)
Clavier : Touches utilisables (bascules) pendant la visualisation des thèmes
          [E]=thèmes [A] et [B] superposés, [U]=domitudes A et B, [V]=vue
          [Tab|Maj-Tab]=mode, [R]=infos, [K]=traits coudés, [Alt-O], [<][^O][>]
          [C]=couleurs/N&B, [I]=inversion vidéo, [O]=orientation (A|B|0)
          [^A] [^B] [^F]=orientation sur l'Ascendant A, B ou fixe
          [D]=dominantes, [Z]=zones RET, [Alt-Z], [L]=aspects avec/sans ¨
          [F]=aspects avec les angles et les planètes fictives, [?|,|!]=aide
          [P]=format des positions, [^S]=sauvegarde, [Maj-Alt-F/G]=fichier A/B
          [T]=taille des symboles, [M]=motifs, [W]=latitudes
          [0]-[6]=Néant/Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée
          [8]=affichage de l'Ascendant et du Milieu du ciel, [Alt-A], [Alt-M]
          [9]=affichage du Descendant et du Fond du Ciel, [¨]=points fictifs
          [F1]=Soleil, [F2]=Lune, [F3]=Mercure, [F4]=Vénus, [F5]=Mars
          [F6]=Jupiter, [F7]=Saturne, [F8]=Uranus, [F9]=Neptune, [F10]=Pluton
          [F11] et [F12] activent et désactivent toutes les planètes
          Avec [Maj], [F1] à [F12] agissent sur les planètes du thème natal
          Avec [Ctrl], [F1] à [F5] basculent ainsi l'affichage des aspects :
          conjonction, opposition, carré, trigone, sextile
          [^F11] et [^F12] agissent sur ces cinq aspects majeurs
          Avec [Alt], [F6] à [F9] basculent ainsi l'affichage des aspects :
          semi-carré, semi-sextile, quinconce et sesqui-carré
          [Alt-F11] et [Alt-F12] agissent sur ces quatre aspects mineurs
          [Q|Espace|Echap]=retour au DOS
Exemple : CARTECO guy alice

     Ce module permet évidemment la comparaison visuelle de
deux thèmes.
     La sélection interactive du premier thème passe par la
commande Maj-Ctrl-F ; celle du second par Maj-Ctrl-G (ces
combinaisons de touches devraient être difficiles à taper par
mégarde).



Outil CHERCHER.EXE

Titre   : Q&D Recherche v1.1k (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : CHERCHER <thèmes[.THM]|/f:liste[.LST]> [option]... <filtre>
Utilité : recherche des thèmes qui correspondent à un filtre
Options : /f:$ pour spécifier un fichier contenant une liste de thèmes
          /r:$ pour spécifier un thème natal de référence
          /i pour afficher les thèmes qui ne correspondent pas au filtre
          /n pour indiquer seulement le nom du sujet
          /t pour ne pas indiquer l'identité du sujet (fichier seulement)
          /s pour supprimer l'affichage de la liste
          /l pour forcer la non-prise en compte de la latitude dans les aspects
          /b pour forcer la prise en compte de la latitude dans les aspects
          /pg pour forcer UseAltOrbesNatal à No (orbes par groupe)
          /po pour forcer UseAltOrbesNatal à Yes (orbes par objet)
          /d:# pour forcer le type de domification
               ([1..6]=Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée)
          /a:# pour ajouter la valeur # aux orbes
Note 1  : Les options /l, /b et /d: l'emportent en priorité sur les valeurs
          UseBetaForTexts et FavoriteHouse définies dans la section [Report].
Note 2  : Le programme n'examinera pas plus de 8191 fichiers.
Note 3  : La spécification d'une liste annule toute spécification de fichiers.
Note 4  : Chaque entrée d'une liste devant être dans le répertoire en cours,
          toute éventuelle spécification de chemin sera ignorée.
Note 5  : La redirection de l'affichage permet de sauvegarder la liste.
Note 6  : Un filtre est composé d'un à vingt critères réunis par ET ou OU,
          chaque critère étant alors entre parenthèses.
Note 7  : Les critères sont "objet signe...", "objet [m[aison]][ ]#...",
          "objet d[o]mitude][ ]#...", "objet z[one][ ]#...",
          "objet c[odominante]", ou "objet1 aspect... objet2...".
          La spécification des objets et des signes est le nom complet, ou
          les deux ou trois premières lettres. Les groupements possibles sont :
          cardinal, fixe, mutable, feu, terre, air, eau, masculin, féminin,
          printemps, été, automne, hiver, jour, nuit, occident, orient
          (les quatre derniers sont à éviter avec les domifications 2 et 6).
          Maisons et domitudes vont de 1 à 12, en chiffres arabes ou romains.
          Les zones légales sont 1 (AS), 2 (MC), 3 (DS), 4 (FC) ou 0 (neutre).
          La spécification des aspects est la valeur numérique, le nom complet,
          ou les deux ou trois premières lettres. Les regroupements sont :
          N(eutre)={0}, H(armonique)={120,60} ou D(issonant)={90,180}.
Note 8  : Avec l'option /r:$, la recherche est évidemment limitée aux aspects,
          l'objet1 étant celui du thème de référence.
Exemple : CHERCHER /f:liste (pluton zone 1 2) et (uranus zone 1 2)

     Ce module permet d'afficher la liste des thèmes qui
correspondent ou non à un filtre. Il sert notamment à
vérifier les empathies et antipathies de tel ou tel sujet
avec telle ou telle notoriété du Spectacle (toujours entendu
au sens debordien du terme).
     Plus sérieusement, il facilite la recherche des
dominantes intéressantes (Uranus et/ou Pluton, évidemment <ah
ah, only serious !>), des positions remarquables (Mercure en
Capricorne) ou encore des rencontres astrales de type "Mars
de l'un en conjonction avec Vénus de l'autre", rares mais
réputées si déterminantes dans les rubriques astrologiques
des magazines féminins (quand d'ailleurs "Vénus de l'un en
conjonction avec Jupiter de l'autre" semble bien plus
efficace dans la réalité). Cet outil n'a évidemment d'utilité
qu'à partir de quelques dizaines, voire centaines de thèmes.
     A titre d'information, sur une machine équipée d'un
archaïque processeur Intel Pentium II cadencé à 233 MHz,
l'exploration de quelque 2000 thèmes pour trouver les thèmes
qui répondent à un critère unique prend environ deux minutes.
     L'exploitation de ce module à des fins statistiques
exige évidemment un peu d'ingéniosité (connaissance des
commandes du DOS, exploitation d'utilitaires Unix, cerveau en
état de marche, etc.) : donner plus de détails reviendrait,
comme le point d'ironie ou les "smileys", à nier tout crédit
à l'éventuel utilisateur.

     Autres exemples :

CHERCHER * (plu codominante) ou (ura c) > thebest.txt
CHERCHER * /r:guesswho (ven 0 ven mar) et (mar 0 mar ven)
CHERCHER *.thm (sol air) ou (lune terre) > friends.rpt
CHERCHER * /r:guesswho (ven 0 h jup) ou (jup 0 h ven)



Outil RET.EXE

Titre   : Q&D Rapport R.E.T. v1.1d (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : RET <thème[.THM]> <hiérarchie> [rapport[.RPT]] [option]...
Utilité : création du rapport conditionaliste correspondant à un thème
Options : /o pour remplacer l'éventuel rapport existant
          /i pour ajouter les éléments d'interprétation conditionaliste
          /t pour ajouter les éléments d'interprétation traditionnelle
          /m pour intégrer les éléments d'interprétation traditionnelle aux
             éléments d'interprétation conditionaliste (dominantes et aspects)
          /w pour forcer UseTabs à Yes et LineWidth à 0
          /l pour forcer UseBetaForTexts à No (interprétation des aspects)
          /b pour forcer UseBetaForTexts à Yes (interprétation des aspects)
          /pg pour forcer UseAltOrbesNatal à No (orbes par groupe)
          /po pour forcer UseAltOrbesNatal à Yes (orbes par objet)
          /e pour forcer un rapport exhaustif avec toutes les rubriques
          /d:# pour forcer le type de domification
               ([1..6]=Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée)
          /a:# pour ajouter la valeur # aux orbes
          /f:$ pour spécifier le fichier des interprétations (.RSC, .RSX)
Note 1  : La détermination de la hiérarchie est laissée à l'astrologue !
          En présence d'angulaires, valoriser l'ordre AS, MC, DS, FC. Utiliser
          la proximité à l'angle, le rang R.E.T. et l'arc diurne. Chercher les
          planètes liées aux angulaires. Valoriser l'aspect (0, 180, 90, 120,
          60), le rang R.E.T. et l'arc diurne. Classer les amas proches des
          angles. Valoriser les aspects reçus et l'arc diurne.
          En l'absence d'angulaires, privilégier les astres les plus hauts sur
          l'arc diurne, puis les amas.
Note 2  : La hiérarchie exige évidemment l'énumération des 10 planètes.
          Voici les abréviations admises : L S M V J MA SA U N P, ## ou ###
Note 3  : La zone conditionaliste est redéfinissable par un suffixe facultatif.
          En l'absence d'un suffixe, la zone sera déterminée par le programme.
          Voici les seuls suffixes admis : 1=AS, 2=MC, 3=DS, 4=FC, 0=neutre
Note 4  : Modèle R.E.T. (C) Copyright par Jean-Pierre Nicola.
Exemple : RET vangogh ma ve ne so lu ju me pl ur sa /o /i /m /a:+4

     Ce module, presque identique au module RAPPORT, génère
un fichier texte ASCII DOS contenant les données du thème
spécifié. Les rubriques sont personnalisables (dans une
certaine mesure) en modifiant les fichiers SKYTOOLS.RSC,
STANDARD.RSC et RET.RSC (voir infra). Les paramètres relatifs
à l'interprétation seront sans effet.
     Son nom le dit assez : ce module est réservé aux seuls
adeptes de la secte conditionaliste (cum grano salis ! <wry
smile> et <ah ah, only serious !>), puisque le rapport généré
est d'inspiration conditionaliste, qui permet de tester
quelques pondérations exposées dans les révisions successives
des principaux ouvrages rédigés par Jean-Pierre Nicola et
Richard Pellard, en évitant de fastidieux calculs manuels.
     L'activation des paramètres conditionalistes (fichier
RET.RSC) est évidemment recommandée, grâce au fichier "batch"
SETMODE suivi du paramètre R, RET ou JPN. Incidemment, les
valeurs qui figurent dans le fichier de configuration
RET.RSC, empruntées aux meilleures sources, sont probablement
trop généreuses, qu'il s'agisse des orbes ou même de la
détermination des zones (manifestement dérivée des secteurs
Gauquelin) : avec les valeurs actuelles, certaine actrice
connue, aussi piètre que fade, se trouve dotée d'une riche et
forte personnalité ourano-plutonienne (mais c'est une
présentation classique dans cette psychologie de Monoprix,
rayon soldes, que prise tant la presse, aussi bien féminine
qu'astro(il)logique).
     En droite logique conditionaliste, la domification sera
de type Placidus.
     L'astrologue prend la responsabilité de spécifier la
hiérarchie planétaire qu'il juge, ou qu'il croit, la
meilleure : en l'absence d'une méthodologie à la fois stable,
efficace et surtout systématique, le programme ne se risquera
pas à suggérer cette hiérarchie. Au reste, au gré de ses
complications successives, le Grand Traité d'Astrologie
Conditionaliste ne s'y risque pas vraiment davantage, qui
laisse (ou qui laissent, aurait sans doute écrit Jules
Renard), à mon sens, une trop large part à l'art et à
l'expérience, voire paradoxalement à l'évidence... et à
l'intuition. Le comble, à considérer le discours parfois
lourdement hypothético-déductif du "Maître" et surtout de ses
perroquets !
     A titre d'information et de rubrique "IMPORT
Disclaimer;" : l'auteur n'est pas affilié à l'école
conditionaliste, il n'en connaît personnellement aucun
représentant (qu'il soit gourou ou disciple camelot placier),
mais il n'entend évidemment pas enfreindre les droits
intellectuels, "même légaux", de Jean-Pierre Nicola sur le
modèle R.E.T. (d'ailleurs déposé à l'Institut National de la
Propriété Industrielle). Le module R.E.T. des outils
Q&D AstroTools n'a donc l'aval ni du créateur de l'école
conditionaliste ni du C.O.M.A.C., et il ne saurait en rien se
réclamer des vigilants gardiens de la foi conditionaliste.
     Au reste, l'écriture d'un véritable logiciel d'aide à
l'analyse conditionaliste (et de son module d'affichage qui
devrait s'appeler, en guise de "private joke", CARTERET)
exigerait la collaboration de Jean-Pierre Nicola, lequel
semble malheureusement avoir déjà accordé sa confiance à un
programmeur occasionnel amoureux de Visual Basic pour
Windows : ce piètre "langage" est évidemment très en vogue
chez les marchands d'astrologie(s) informatisée(s), surtout
en France, parce qu'il donne à ces médiocres programmeurs
opportunistes, au moins autant qu'à leurs sots clients,
l'illusion de la qualité, et même de la qualité
internationale depuis que Visual Basic est censé faciliter la
production de versions en différentes langues -- l'inutile et
pléthorique nomenklatura de Bruxelles est peut-être une
clientèle visée, qui serait sans doute ravie par un programme
unique rédigé dans cet euranglais affectionné par les
banquiers et les boutiquiers, tous évidemment incapables de
comprendre et de pratiquer la belle langue de Wilde, de Saki,
de Bierce et de Mencken.
     De fait, les vendeurs de textes apprécient surtout le
moteur du S.G.B.D. Access, moteur qui permet d'enregistrer
aisément leur prose plus ou moins originale sous forme de
paragraphes interchangeables (une version qualifiée de
"professionnelle" n'est fondamentalement qu'une version
capable de produire des dizaines de pages d'interprétation).
Est-ce d'ailleurs un hasard si les modestes talents de ces
auteurs semblent toujours hésiter à se mesurer au simple
compilateur Delphi, ce Pascal (inutilement) orienté "objets"
probablement déjà trop complexe pour eux ?



Outil SIGNAUX.EXE

Titre   : Q&D Signaux v1.0g (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : SIGNAUX <départ> <fin> <heure T.U.> <intervalle>
          <thème[.THM]> [rapport[.CSV]] [option]...
Utilité : tableau des transits sur un thème natal
Options : /o pour remplacer l'éventuel rapport existant
          /w pour forcer UseTabs à Yes et LineWidth à 0
          /e pour forcer un rapport exhaustif avec toutes les rubriques
          /d:# pour forcer le type de domification
               ([1..6]=Placidus/Placidus/Koch/Campanus/Regiomontanus/Ptolémée)
          /a:# pour ajouter la valeur # aux orbes
Note    : L'heure est en Temps Universel, l'intervalle en jours.
Exemple : SIGNAUX 1/1/1998 31/12/1998 0h 4 pierreb

     Ce module génère un fichier texte ASCII DOS contenant
les transits sur le thème natal spécifié entre les dates de
début et de fin (au format jj/mm/aaaa). Contrairement à de
nombreuses représentations graphiques, la présentation
spartiate du tableau généré par SIGNAUX présente l'intérêt de
montrer clairement la durée (et donc, pour ceux qui veulent
y croire, l'éventuelle "influence") des transits sur les
planètes du thème natal. Les rubriques sont personnalisables
(dans une certaine mesure) en modifiant les fichiers
SKYTOOLS.RSC, STANDARD.RSC et RET.RSC (voir infra).



Outil LISTE.EXE

Titre   : Q&D Liste v1.1a (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : LISTE <spécification>[.THM] [texte] [option]...
Utilité : liste des thèmes
Options : /f pour trier la liste sur le nom de fichier
          /n pour trier la liste sur les 32 premiers caractères du nom
             (les éventuels prénoms précédant le nom de famille seront ignorés)
          /c pour trier la liste sur les 32 premiers caractères du champ "nom"
          /p pause
          /x:# pour créer le fichier d'exportation EXPORT.TXT
               (# est le code ASCII du séparateur : 9=<tab>, 44=",", 59=";")
          /o pour remplacer l'éventuel fichier EXPORT.TXT existant
Note 1  : La liste peut être filtrée pour ne prendre en compte que les thèmes
          dont la chaîne de renseignements (ville, pays, nom, genre, remarque)
          contient la sous-chaîne [texte], la casse étant alors indifférente.
          Les caractères génériques sont autorisés :
          ? correspond à un seul caractère, * à aucun ou plusieurs de suite.
Note 2  : Les champs exportés dans le fichier EXPORT.TXT par l'option /x:#
          correspondent aux données exactes spécifiées pour créer les thèmes.
Exemple : LISTE * /f

     Ce module affiche en regard de chaque nom de fichier
thème (limité à 8 caractères) le nom de la personne qui
figure dans la chaîne de renseignements. Le tri sur le nom
considère que les éventuels prénoms précèdent le nom de
famille. Les résultats avec les particules nobiliaires ou les
noms composés pourront étonner.

     Autres exemples :

LISTE *
LISTE a*.thm /n
LISTE * paris



Outil MODIFIER.EXE

Titre   : Q&D Modification v1.0f (C) Copyright par Philippe Guiochon 1980-1992
Syntaxe : MODIFIER <thème[.THM]>
Utilité : modification des renseignements d'un thème
Exemple : MODIFIER debord

     Ce module permet l'éventuelle modification, interactive
mais spartiate, des renseignements contenus dans un fichier
thème. L'ensemble de ces renseignements gagnera à rester
concis, en utilisant autant que possible des abréviations ou
des codes, dans la mesure où le champ "remarque", notamment,
n'a jamais eu vocation à contenir des éléments biographiques
mais tout au plus quelques codes de type profession et
source, voire un identificateur unique lié à une véritable
base de données.



(* === PERSONNALISATION === *)

     Aucun programme interactif n'a été conçu pour changer
les paramètres contenus dans les fichiers SKYTOOLS.STD,
SKYTOOLS.RET, STANDARD.RSC et RET.RSC, fichiers dont la
modification manuelle (avec n'importe quel éditeur de texte)
est réservée aux utilisateurs expérimentés (ou simplement
attentifs), qui sauront évidemment déduire du nom (parfois en
anglais, parfois en français, parfois même en un sabir
hybride cher aux développeurs) de chaque paramètre son mode
d'emploi.
     Au reste, la création d'éventuels nouveaux fichiers de
paramètres ne devrait pas être trop difficile, après examen
du format, assez évident, des fichiers de configuration.
     Des copies de sécurité s'imposent évidemment pour
revenir, le cas échéant, aux réglages de départ, qui
devraient, en droite logique, convenir à la majorité des
"improbables mais peut-être néanmoins existants" utilisateurs
de ces outils (d'étonnante manière, ces utilisateurs
existent, et plus nombreux que je ne l'aurais pensé en créant
ces distributions "freeware").
     Ces copies de sécurité seront nécessaires pour mettre à
jour les fichiers de configuration d'une éventuelle nouvelle
distribution des outils Q&D AstroTools (avec quelques
opérations de type Copier/Couper/Coller).
     Pour reprendre l'admirable expression rendue populaire
par Robert Heinlein dans The Moon is a harsh mistress :
T.A.N.S.T.A.A.F.L. ! There Ain't No Such Thing As A Free
Lunch ! Les outils Q&D AstroTools, pour les nombreuses
raisons exposées passim, vont donc à l'encontre des habitudes
d'une époque trop souvent prompte à confondre facilité,
puissance et ergonomie.
     Et la franchise commande de l'admettre : l'explication
détaillée de tous les paramètres serait très fastidieuse...
qui ne serait d'ailleurs peut-être utilisée par personne, ou
pire : par des utilisateurs inattentifs.



Paramètres du fichier SKYTOOLS.RSC

     Ce fichier est en fait la copie par le fichier "batch"
SETMODE d'un de ces fichiers : SKYTOOLS.STD (paramètres
"traditionnels" contenus dans STANDARD.RSC) ou SKYTOOLS.RET
(paramètres d'inspiration conditionaliste contenus dans
RET.RSC).
     Les seuls paramètres modifiables pour de vraies bonnes
raisons concernent la présentation des données. Chaque module
est clairement identifié par un nom de section : [Report]
concerne RAPPORT, [ReportRET] RET, [Transits] TRANSITS,
[Compare] COMPARER, [Signals] SIGNAUX, [Map] CARTE,
[MapTransits] CARTETR et [MapCompare] CARTECO. Il en va de
même pour les fichiers STANDARD.RSC et RET.RSC. Dans chaque
section, PadChar est le caractère de remplissage (un espace
" " ou un zéro "0"), PadSign est le caractère signalant une
valeur positive (un espace " " ou un signe plus "+"), PadComa
est le caractère correspondant à la virgule (une... virgule
"," ou un point "."), UseTabs autorise ou non l'emploi du
caractère de tabulation ("y" pour oui, "n" pour non), Decimal
signale l'utilisation du mode décimal ("y" pour oui, "n" pour
non) et LineWidth correspond au nombre de caractères par
ligne (0=aucun saut de ligne).
     Les quelques paramètres relatifs à la présentation des
interprétations seront évidemment sans effet (que d'éventuels
"hackers" et astrologues n'aillent pas y perdre un temps
précieux : pour la distribution "freeware", le moteur
d'interprétation a été complètement retiré des programmes
concernés).



Paramètres des fichiers STANDARD.RSC et RET.RSC

     Voici quelques explications sommaires sur les principaux
paramètres compris dans les fichiers STANDARD.RSC et RET.RSC,
dont les paramètres les plus ésotériques ne seront pas
documentés, conformément aux règles qui régissent les
"Undocumented Features" et autres "Easter Eggs"...
D'ailleurs, les éventuels mécontents voudront bien prendre en
compte ce fait, avant de se tourner vers leurs habituels
fournisseurs commerciaux : les outils Q&D AstroTools sont un
"freeware", dont je n'ai rien à espérer, n'ayant jamais été
un marchand -- ni même, diront les plus venimeux, un
astrologue encarté.
     Ordinairement, quand un commentaire (ligne précédée par
un point-virgule ";") donne les valeurs possibles pour un
paramètre (par exemple pour les domifications), mieux vaut ne
pas en choisir d'autres, car les résultats seraient alors
imprévisibles ("Safety belt NOT included").
     Comme avec le fichier SKYTOOLS.RSC, les paramètres de
type booléen (activation/désactivation) acceptent les valeurs
"y" (pour "oui") et "n" (pour "non").
     Par défaut, les rapports générés par les outils RAPPORT,
TRANSITS, COMPARER, RET et SIGNAUX ne comportent pas toutes
les rubriques possibles. L'utilisateur activera ou
désactivera, si nécessaire, les rubriques de son choix en
modifiant les valeurs booléennes qui figurent dans les
sections concernées. Spécifiée au lancement des outils qui
génèrent un rapport, l'option /e, qui active toutes les
rubriques, permettra d'obtenir un (inutile) déluge
d'informations.
     Dans la section [Info], OrbeAngulaire correspond à
l'orbe acceptée pour déterminer si une planète angulaire est
dominante ou non, quand UseAltOrbesNatal indique la manière
dont les orbes d'un thème natal sont déterminées : soit par
groupe d'objets, soit par objet (en utilisant alors les
valeurs contenues dans la section [AltOrbesNatal]).

     En règle générale, quelle que soit la section,
FavoriteHouse correspond à la domification par défaut :
1=Placidus, 2=Placidus, 3=Koch, 4=Campanus, 5=Regiomontanus,
6=Ptolémée (en fait, des maisons égales centrées sur
l'Ascendant, mais de nombreuses autres versions existent dans
la littérature consacrée au délicat sujet de la domification,
sujet qui, au reste, ne m'intéresse que modérément).
InTrueHouse correspond à l'affichage des domitudes. Les
variables qui contiennent la sous-chaîne WithBeta
correspondent évidemment à l'emploi de la latitude dans la
détermination des aspects (c'est la valeur par défaut pour
les représentations graphiques, qui me semble logique,
conforme aux réalités astronomiques).
     Dans la section [Compare], les variables contenant la
sous-chaîne Same concernent les aspects identiques, Analog
les aspects de même nature et Balanced les aspects qui
s'équilibrent d'un thème à l'autre.
     Dans la section [Signals], UseGraphics autorise ou non
l'emploi de caractères semi-graphiques pour encadrer les
tableaux, et Condensed conditionne la présentation des
données (en clair ou en condensé).
     Chaque variable de la section [ObjectRank] détermine le
nouveau numéro d'ordre assigné aux planètes et points
fictifs : le bouleversement de l'ordre naturel du système
solaire ne s'impose véritablement que pour les disciples de
Jean-Pierre Nicola.
     Chaque variable de la section [ObjectWeight] indique le
coefficient affecté à chaque planète pour les pondérations
"traditionnelles".
     Chaque variable de la section [ObjectGroup] indique à
quel groupe (de 1 à 3) appartient la planète considérée :
cette répartition en groupes (qui a ma préférence depuis de
nombreuses années) évite d'avoir à manipuler un trop grand
nombre de valeurs pour les orbes.
     Les sections [Orbe#-#] précisent les orbes admises pour
chaque aspect entre les planètes du premier groupe et celles
du second. Sont donc à spécifier les aspects entre les
groupes 1 et 1, 1 et 2, 1 et 3, 2 et 2, 2 et 3, 3 et 3.
     Les orbes définies dans les fichiers semblent les plus
généralement acceptées, quelles que soient les écoles (pour
repérer facilement les aspects qui sont en limite d'orbe, les
modules de visualisation offrent la possibilité d'augmenter
ou de réduire les orbes degré par degré, la commande Ctrl-O
permettant de revenir aux valeurs par défaut). Les
astrologues conditionalistes seront probablement désireux
d'utiliser les paramètres définis dans le fichier RET.RSC,
activés par la commande SETMODE JPN.
     Si la variable UseAltOrbesNatal de la section [Info] est
à y, les informations de la section [AltOrbesNatal] seront
exploitées, qui contiennent, pour chaque objet, les orbes
acceptées pour chaque aspect, dans cet ordre (une virgule
faisant office de séparateur) : conjonction, opposition,
carré, trigone, sextile, semi-carré, semi-sextile, quinconce
et sesqui-carré. Une valeur égale à 0 désactivera l'éventuel
aspect considéré.
     Dans la section [Patterns], les valeurs affectées à
chaque aspect correspondent au motif graphique (sur 16 bits).
     Dans la section [Colors], les assignations à chaque
variable doivent appartenir à cette liste : paleblue,
palegreen, palecyan, palered, palemagenta, brown, gray,
black, blue, green, cyan, red, magenta, yellow ou white (les
intitulés en français sont à déduire).
     Chaque aspect de la section [TransitsAspectCategory] est
la catégorie de l'aspect, savoir 1, 2 ou 0 (dans ce dernier
cas, l'aspect sera ignoré dans les transits).
     Les sections [TransitsWithCategory1] et
[TransitsWithCategory2] déterminent l'orbe admise pour le
transit de chaque objet en fonction de la catégorie.
     Les sections [Emettors] et [Receptors] concernent les
astres émetteurs et récepteurs pris en compte dans le tableau
généré par le module SIGNAUX.
     La section [GraphGreek] sert à remédier à d'éventuels
problèmes d'affichage dans les modes graphiques, lorsque les
modules CARTE, CARTETR et CARTECO sont exploités à partir
d'une des trop nombreuses variétés de Windows ou lorsque les
polices ont été redéfinies sous DOS. Les variables
AlphaString, DeltaString, LambdaString et BetaString
concernent évidemment les quatre caractères de l'alphabet
grec d'usage courant en astronomie (pour l'ascension droite,
la déclinaison, la longitude et la latitude). Dans
l'environnement DOS, LambdaString gagnera à rester "lambda"
pour des raisons faciles à comprendre au vu du jeu de
caractères du PC.



(* === GARANTIE === *)

     L'époque étant ce qu'elle est, savoir sottement
procédurière (et presque toujours pour de mauvaises causes),
voici la seule garantie offerte par les outils
Q&D AstroTools : les fichiers (programmes et données)
prendront une certaine place sur un dispositif de stockage
(disquette classique, disquette ZIP, disque dur, CD-ROM,
etc.) et les exécutables, quand ils seront lancés,
consommeront une partie de la puissance du processeur. Aucune
autre garantie n'est fournie par l'auteur, qui sur ce point
est obligé de se conformer aux scandaleuses règles en vigueur
dans l'univers informatique. L'utilisateur exploite donc les
outils Q&D AstroTools à ses risques et périls, sans recours
possible contre l'auteur, pour quelque raison que ce soit.
     Aucun service après-vente ne sera assuré, pour d'assez
évidentes raisons. Au reste, l'auteur n'a plus d'adresse
Internet, ce qui règle définitivement la question -- d'autant
que la mise en "freeware" des outils Q&D AstroTools n'a,
encore une fois, nullement pour objet d'engager de longues
correspondances plus ou moins (in)utiles, plus ou moins
(in)intéressantes.

     Quoi qu'il en soit, cet ensemble de programmes existe et
fonctionne sous différentes versions depuis 1980 (à
l'exception, évidemment, des outils de conversion, écrits en
2001).

     Voici une autre garantie, en forme d'Easter Egg pour les
outils THEME, TRANSITS, SIGNAUX, CARTE, CARTETR et TU : ces
programmes offrent une option /UNSAFE (abrégée en /U), qui
autorise les calculs pour des dates situées hors de
l'intervalle normal de validité (allant de 1600 à 2200
seulement). Cette option favorise toutefois très vite des
résultats dénués de sens, au mieux imprécis, au pire
aberrants (surtout pour les planètes lentes car l'erreur
atteint rapidement plusieurs degrés). Le recours à l'option
/UNSAFE est à éviter, pour les raisons exposées supra ("Cette
fonction, ajoutée avec réticence, est aussi contestable que
dangereuse, et elle donnera des résultats imprécis, voire
aberrants, aussi bien pour les positions planétaires (de
Pluton, surtout) que pour le calendrier : j'en déconseille
évidemment l'abus... et même l'usage.").



(* === LICENCE === *)

     Seule la distribution à titre individuel, de personne
physique à personne physique, est autorisée sans accord
préalable avec l'auteur, à condition de respecter les règles
habituelles en vigueur pour les logiciels mis en "freeware" :
autrement dit, sous forme compactée (avec de préférence un
outil en "freeware" tel que l'excellent LHA développé par
Haruyasu Yoshizaki) ou non, le produit doit être fourni avec
tous les fichiers de la distribution originale sans
modification ni ajout, et l'éventuelle compensation
financière pour les frais de diffusion doit rester
raisonnable (en droite logique, le prix des disquettes et,
peut-être, celui d'un café). Au nom de la rationalité,
l'archive devrait être diffusée sous sa forme originale :
QDASTRO.
     Aucune personne physique et aucune organisation
(commerciale ou non) n'ont l'autorisation de distribuer les
outils Q&D AstroTools par quelque autre moyen que ce soit
(notamment, mais pas exclusivement, sur un support, quelle
qu'en soit la nature, contenant des logiciels en "shareware"
ou en "freeware", ou par un site Internet) sans un accord
écrit préalable négocié et signé avec l'auteur : autrement
dit, personne n'est autorisé à tirer un profit (financier ou
autre) des outils Q&D AstroTools... sinon, très
éventuellement, leur auteur.
     Dans le cas particulier d'un "site Internet", seul un
lien vers un site habilité par l'auteur à diffuser les outils
Q&D AstroTools est autorisé. Cette autorisation est
révocable.
     Depuis le 16 janvier 2002, le site Internet du C.U.R.A.
n'est plus autorisé à diffuser les outils Q&D AstroTools,
quelle que soit la distribution (1.60, 1.61, 1.62, et encore
moins la 1.70 diffusée illégalement alors qu'elle a été
retirée du monde du "freeware" et que cette interdiction
formelle a été signifiée à plusieurs reprises au malhonnête
Patrice Guinard). De même, l'exploitation publique,
commerciale ou non, des fichiers générés par les outils
Q&D AstroTools (données, cartes et tableaux) est strictement
interdite au malhonnête Patrice Guinard.
     Les autorisations de diffusion accordées pour les
distributions 1.3x, 1.40, 1.5x, 1.6x et 1.70 sont
définitivement annulées.
     Seule la distribution définitive 1.71 peut désormais
être diffusée, en respectant évidemment les conditions
énoncées supra.
     D'évidente manière, ces outils sont conçus pour la
recherche et un usage personnels et privés : ils ne sauraient
donc en aucun cas (sauf autorisation préalable écrite
négociée avec l'auteur), ni directement ni indirectement,
être exploités dans un cadre public, encore moins commercial
(qu'il s'agisse des données générées, des cartes ou des
tableaux).
     Cette limitation ne s'applique évidemment pas aux
coordonnées géographiques et aux coordonnées de naissance,
qui doivent toutes être logiquement considérées comme
relevant du "domaine public" (elles sont d'ailleurs fournies
sans garantie aucune, qui comportent certainement de
nombreuses erreurs, en raison de leurs multiples sources,
oubliées comme oubliables) : c'est la raison pour laquelle
toutes ces informations sont disponibles "en clair", prêtes
au réemploi. Ce qui vient d'Internet doit y revenir, et pour
adapter ironiquement certain adage bien connu des
informaticiens : "Garbage Out, Garbage In".

     Les outils Q&D AstroTools sont mis en "freeware", mais
ils ne sont nullement mis dans le "domaine public" :
autrement dit, l'auteur garde tous ses droits moraux et
(même) légaux sur cet ensemble de programmes, et notamment
ceux de modification, adaptation, conversion, développement
voire improbable commercialisation, pour le principe.



(* === PROBLEMES EVENTUELS === *)

     Un faux problème tient au caractère spartiate des outils
Q&D AstroTools : au début, leur exploitation risque de
dérouter l'utilisateur contemporain habitué au confort
(d'ailleurs très relatif puisqu'il tient, comme tout, à de
simples habitudes) des environnements de type WIMP (Window,
Icon, Menu, Pointing device), avec leurs fenêtres, icônes,
menus et dispositifs de pointage. Que cet utilisateur, trop
souvent rétif au moindre effort (attitude paradoxale mais
prévisible, en des temps qui confondent le mouvement et
l'agitation), veuille néanmoins songer par exemple au
passage, inutilement pénible, des conventions de Windows 3.1
vers celles de Windows 95/98 "pour toujours plus de
convivialité" (à en croire les journalistes, plus souvent
incompétents même que stipendiés, dans ce cas comme en
général), ou encore aux nombreuses incohérences dans
l'ergonomie de Windows 9x (quant aux incompatibilités
partielles d'une version à l'autre, notamment pour les
pilotes...) : il devra convenir qu'à l'usage viennent les
automatismes. C'est vrai avec une interface graphique comme
avec une interface en ligne de commandes.

     Dans certaines circonstances (Windows, encore et
toujours...), l'affichage, et seulement l'affichage, de
certains caractères (lettres accentuées, lettres de
l'alphabet grec) risque d'être apparemment aberrant aussi
bien dans les rapports générés que dans les représentations
graphiques.

     A l'origine, les cartes sont sur fond noir non seulement
pour des raisons d'esthétique, mais aussi pour des raisons de
développement. De fait, avec les outils Q&D AstroTools et la
bibliothèque graphique signée par TopSpeed, l'adoption d'une
couleur de fond autre que le noir perturbe fâcheusement la
sauvegarde des cartes au format PCX (sauf, évidemment, si
l'utilisateur a recours à un logiciel de capture d'écran,
sous DOS ou sous Windows) : la palette devient partiellement
aberrante, et seul un changement a posteriori de la palette
de 16 couleurs remédie à cette inquiétante étrangeté.
     Les cartes en noir et blanc ne souffrent pas de ce
problème.
     Aucune raison logique dans le code source n'explique
véritablement ce phénomène, vraisemblablement lié à
l'initialisation du mode graphique VGA 16 couleurs, aux
changements de palettes, voire aux phases de la Lune. Sa
résolution a donc été renvoyée aux calendes grecques : après
tout, les outils Q&D AstroTools ne sont pas un "shareware"...
     Au reste, l'adoption de la couleur noire pour le fond
interdit à cette bizarrerie de même survenir. ;-)
     On en finirait presque par croire au malicieux démon
Hilarion, qui incarne si bien les lois de Finagle et les lois
de Murphy : il pourrait faire figure de saint patron pour les
informaticiens.

     Un vrai problème, heureusement rare mais malheureusement
aléatoire, avait été constaté lorsque les outils
Q&D AstroTools étaient lancés dans une session DOS Windows
3.1 ou Windows 95 sur un PC équipé d'un processeur Intel
Pentium II (en effet, le problème en question n'avait jamais
été observé avec un processeur Intel 486DX, et ne l'a jamais
été avec un processeur Intel Pentium de la première
génération, ou avec un processeur AMD). Dans cette
configuration logicielle et matérielle, le coprocesseur
mathématique était susceptible d'illustrer cette jolie
formule de Lichtenberg : "Inventer de nouvelles erreurs". Il
signalait donc parfois, d'imprévisible manière, un problème
qui, pour être imaginaire, n'en provoquait pas moins
l'interruption intempestive et prématurée du programme en
cours d'exécution (en guise d'ultime salut ante mortem, un
fichier ERRORINF.$$$ était créé, qui contenait la cause
présumée de l'interruption).
     Conformément aux lois absurdes qui régissent aujourd'hui
le développement de logiciels, la détermination des raisons
exactes de ce dysfonctionnement, imprévisible autant
qu'irrationnel, a été impossible en raison de la complexité
des interactions entre tous les composants concernés : le
processeur Intel Pentium II (manifestement "imparfaitement
incompatible" avec ses incarnations antérieures), la
bibliothèque de fonctions mathématiques MATHLIB de TopSpeed
(conçue seulement pour le DOS natif et pour OS/2),
l'intégrateur graphique Windows 92 (alias Windows 3.1) et son
successeur en forme de système d'exploitation hybride 16/32
bits (alias Windows 9x).
     Quoi qu'il en soit, les outils Q&D AstroTools
comprennent maintenant plusieurs mesures logicielles pour
remédier, autant que possible, à ce problème rare mais réel :
ces mesures semblent efficaces puisque, lancés de manière
automatique à plusieurs centaines de reprises sous Windows
95, les programmes en cause n'ont plus connu d'interruptions
prématurées. La sagesse commande néanmoins d'exploiter les
programmes dans leur environnement naturel : pour des outils
DOS, le DOS (de même que des programmes conçus pour Windows
3.1 devraient être exploités sous Windows 3.1, et pas
uniquement parce que Windows 95 exécute les programmes de
type Win16 deux fois plus lentement que Windows 3.1, pour ne
pas même parler de l'exécution des applications DOS).
     Au reste, l'utilisateur doit bien garder à l'esprit que
pour d'évidentes raisons, en des temps voués au gaspillage
inutile comme à la consommation forcée entretenue ad
infinitum nauseamque, les marchands de logiciels n'ont aucun
véritable intérêt à assurer une compatibilité parfaite ou
même simplement correcte avec les systèmes jugés "anciens"
("legacy operating systems" comme ose le dire certaine
entreprise peu reconnaissante)... même si leurs applications
fonctionnent encore parfaitement (la rouille du logiciel,
"software rot", étant un concept qui relève du seul folklore
des informaticiens, contrairement à ce que croient trop
d'utilisateurs naïfs, si délicieusement prompts à suivre les
ordres de leurs maîtres et fournisseurs de logiciels,
soucieux de transformer une vente en une rente : "Buy the
newest version !").
     Encore une fois, bien que l'exploitation des outils
Q&D AstroTools soit parfaitement possible dans une session
DOS Windows 3.1 ou Windows 95/98, mieux vaut sans doute
amorcer le système avec une disquette DOS (Microsoft, I.B.M.,
Digital Research, Novell ou Caldera) ou sur une partition DOS
sélectionnée avec un utilitaire de type "multiboot" comme
System Commander, Partition Magic ou Select-It.



            (* === FIN DU FICHIER LISEZMOI === *)

                (31 mars 2002, 4 avril 2002)

           "Tout finit bien, puisque tout finit."