---------------------
| Table of Contents |
---------------------

        1.0  Why DOS?
        1.1  Why assembly?
        1.2  Why NASM?
        1.3  Why free?
        1.4  Why bother?

        2.0  Requirements
        2.1  Screen Shot
        2.2  Help Screen
        2.3  Features/Usage
        2.4  Wishful Thinking

        3.0  Archive List
        3.1  Converting to Other Assemblers
        3.2  Reassembling

        4.0  Program Status
        4.1  Acknowledgments
        4.2  Contact Info
        4.3  History

-----------------
| 1.0  Why DOS? |
-----------------

        With the arrival of Win95/98, DOS has lost most of it's
        commercial viability. So what? Lots of people still use DOS for
        lots of stuff, especially now that most DOS software is free
        (and sadly, the same isn't quite true for Windows). Besides,
        in many ways, DOS is the simplest way to get your point across,
        especially when you want your program to work with older DOS
        computers. Why not Linux? Maybe in a year or two, but not now.

----------------------
| 1.1  Why assembly? |
----------------------

        1). it's fast, even on slower computers
        2). you know exactly what's going on
        3). there are quite a few free assemblers
        4). the program is small, making it a
            faster download
        5). it's often the language of choice
            for DOS lovers (although it definitely
            makes development much slower)

------------------
| 1.2  Why NASM? |
------------------

        The Netwide Assembler (NASM) is a great free assembler. Ever
        since 0.94, when macros were introduced, I began using it. It
        has quickly gained popularity with many users, mainly because of
        it's many output formats, portability, and free ANSI C source.
        Every version of this program was written with NASM except this
        one. I wrote this one in TMA (a nice assembler), but I know NASM
        is better and the choice of more people, so I've converted the
        code to it. If you want to reassemble this with another
        assembler, see the converting section below. I've ignored using
        macros or local labels just for this purpose.

------------------
| 1.3  Why Free? |
------------------

        Look at the emulation scene: if you want something accomplished,
        you'll need help. And you can't get that with money. Five years
        ago, no one would've even imagined MAME ever becoming reality.
        But, it happened. MAME now supports 854 games and several
        platforms because someone was smart enough to release the source.

        I love free software, it's always the best. So, since this the
        best free dir lister (in my opinion), it must be free. Nagware
        never works, and shareware is almost always nagware. In fact, I
        no longer will try anything that's shareware, mainly because
        there's always a free alternative. Well, sometimes I will
        compromise a little bit and use ad-ware, no-nag shareware, or a
        reduced (i.e. "lite") version on occasion. Such programs are
        usually quite nice too (i.e. GoZilla or Juno). I'll be glad when
        people finally realize they can't sell everything. Or maybe they
        should realize I can't afford everything.  :-)

--------------------
| 1.4  Why bother? |
--------------------

        Because no one else did, and no one else ever will. Okay,
        well, VLA did, but their program wasn't very feature-rich.
        Plus, it's TASM-specific code was sloppy (no, not as sloppy as
        some of my earlier versions).  :-)   There are millions
        of dir listers, so why has no one ever released the source?
        If you don't release it, what will happen if your computer
        crashes? Everyone loses, and you have to start all over again.
        At worst, releasing the code will be redundant, or maybe someone
        will fix a few of your bugs. A helpful user, how horrible!  :-)

---------------------
| 2.0  Requirements |
---------------------

        You'll need the following to use this software:

        a). probably MS-DOS 2.0+ or compatible
        b). probably at least a 286
        c). a monitor capable of 80x25 textmode 3

        I have tested this extensively on a P-166 w/ Win95 (MS-DOS
        7.00). In fact, this release (2.01) is just a quick fix to make
        it more numb to misuse. If it doesn't work, please tell me what
        DOS you're using. I can only assume DR DOS 7.02 will work, and
        I'm pretty sure FreeDOS beta1 (Orlando) will work (although
        without the file redirection ability).

        http://www.caldera.com  (DR DOS, free for private use)
        http://www.freedos.org  (free to all)

--------------------
| 2.1  Screen Shot |       dw c:\program\zip\dirwide /i >> dirwide.txt
--------------------

c:\program\zip\dirwide\*.*

.                   [dir]              ..                  [dir]              
dirwid19.zip        17,628             dirwid18.zip        15,364             
dw10.zip            4,864              dw13.zip            6,144              
dw14.zip            12,228             dw15.zip            20,781             
dirwid20.zip        21,508             yo100.zip           11,003             
yo200.zip           24,188             yo210.zip           12,868             
dirwid16.zip        23,149             dirwid17.zip        13,394             

14 items: 2 dirs; 12 files totaling 183,119 bytes
Fri Nov 06,1998 03:46am; 737,542,144 bytes free

--------------------
| 2.2  Help Screen |
--------------------

DirWide 2.01 - anthonyw@dibbs.net
Usage:  dw [*.*] [options]

/b bare mode (fname,fsize)
/d dirs only
/f files only
/h this help screen
/i misc info after listing
/l no filespec printing
/p no pausing
/r goto textmode 3 (80x25)
/s script mode (fname)
/t: print/write date and time
/u keep filenames uppercase
/v verbose file info
/z: aligning options

-----------------------
| 2.3  Features/Usage |
-----------------------

        1). multiple options are supported, either by themselves or
            following the /Z: option
        2). most options when used twice will cancel themselves out
            and can then be turned back on by an additional use
        3). /F and /D will cancel each other out, since they aren't
            meant to be used together
        4). /S, /B, and /V are not meant to be used together either, so
            only the first one typed will be used
        5). spaces are ignored completely when checking for options, but
            you can't type a slash followed by a space and then the
            letter of your option, for it will be considered part of the
            user-specified filespec
        6). the two most common errors return errorlevels to DOS
            (see TEST.BAT)
        7). some messages are non-redirectable (error messages, like the
            invalid path or no files found messages), and /T is not
            redirectable (use /T:file.txt instead)
        8). /T: will not write to any file without a .TXT extension (for
            safety reasons)
        9). when redirecting output to a file, pausing is
            automatically turned off and cannot be toggled back on by /P
        10). options can be placed before, in between, or after the
             user-inputed filespec


    Examples:

        "dw /i" is the same as "dw /f /d /i" or "dw /z:fdi"
        "dw /b /f" is the same as "dw /z:dbdf"
        "dw /s /i /s" is equal to "dw /i" also
        "dw /z:bvs" is equal to "dw /b" because /B came first
        "dw c:\windows\*.mid /p >> midi.txt" doesn't need /P
        "dw /?" is the same as "dw /h" or "dw    /H"
        "dw *.exe /v /l" is the same as "dw /l /v *.exe"
        "dw /t" won't write to a file but will print the time and date
        "dw /t:blah.txt" will work but "dw /t:info.dat" will not

-------------------------
| 2.4  Wishful Thinking |
-------------------------

        a). dynamic color filenames, depending on file extension
        b). sorting via time, date, size, etc.
        c). detect hard drives larger than 2 gigs
        d). add /W: option for pseudo-redirection
        e). fix all occurences of '..\' in filespec

---------------------
| 3.0  Archive List |             ../msdos/dirutl/dirwi201.zip  (Simtel)
---------------------

DIRWIDE.TXT                       documentation, ASCII textfile
DIRWIDE.ASM                       commented assembly source code
DW.COM                            MS-DOS .COM file (main program)
FILE_ID.DIZ                       short description (any BBSes left?)
TEST.BAT                          errorlevel-testing example batch file

---------------------------------------
| 3.1  Converting to Other Assemblers |
---------------------------------------

        1). Netwide Assembler 0.97 (NASM):
                  a). no conversion needed

        2). ArrowASM 2.00c and Val (MASM/TASM compatible)
                  a). comment out "%define offset"
                  b). comment out "%define ptr"
                  c). uncomment the "code segment" line
                  d). uncomment the "assume cs:code,ds:code,es:code"
                      line
                  e). comment out "section .text"
                  f). comment out "section .data"
                  g). comment out "section .bss"
                  h). comment out the lines with "resb"
                      (these are NASM specific)
                  i). uncomment the "db 5 dup(?)"
                      lines
                  j). uncomment "code ends" at the end
                  k). uncomment "end Start" after that

        3). Tetrabyte Macro Assembler, July 17th w/ bugfix (TMA)
                  a). follow MASM/TASM instructions above (2)
                  b). change all "EQU" to an equal sign "="
                  c). put ".data" before the first "db 5 dup(?)"
                      line

        4). A86 4.02 (A86)
                  a). follow MASM/TASM and TMA instructions
                      above (2 and 3)
                  b). change all "0b"s to "0xB"s
                  c). change all "1b"s to "1xB"s

        5). Pass32 2.3 (Pass32)
                  a). I can get it to assemble after a few modifications
                      but the result is buggy because the assembler is
                      apparently buggy. So, don't try it. Or if you do
                      try it and figure out why the resulting .COM file
                      hangs/acts weird, please tell me.  :-)

---------------------
| 3.2  Reassembling |
---------------------

        You must actually have the assembler, and below are the
        homepages of the ones I've indicated. But, although ArrowASM is
        MASM 3.0 compatible, it is no longer supported. In fact, you may
        have trouble finding 2.00c, but 1.00 should work fine too. NASM,
        A86, ArrowASM 1.00 and Val, and an older version of TMA should
        be available at Simtel. Search http://www.filez.com if all else
        fails.

        http://www.simtel.net/simtel.net/msdos/asmutl.html
        ftp://ftp.simtel.net/pub/simtelnet/msdos/asmutl/

        NASM homepage   (http://www.cryogen.com/Nasm)
        ArrowASM        (http://www.freedos.org)
        TMA homepage    (http://www.devcon.net/~sven)
        A86 homepage    (http://www.eji.com)
        Pass32 homepage (http://www.geocities.com/SiliconValley/Bay/9159)

        1). nasm -o dw.com dirwide.asm
        2). asm dirwide;
            val /co dirwide;
            erase dirwide.obj
            ren dirwide.com dw.com
        3). tma dirwide.asm dw.com
        4). a86 +S dirwide.asm dw.com
        5). (don't bother)

-----------------------
| 4.0  Program Status |
-----------------------

        As you can probably imagine, after writing a program for so
        long, a person tends to get burnt out. Besides, I swear, I have
        no more ideas or skills to offer. I have waited a long time in
        writing this to make sure it was solidly-written and
        well-thought-out to prevent any more useless rewrites. I will
        continue to fix bugs (if possible, sheesh) and will be very
        grateful to hear of any conflicts with DOSes other than MS-DOS.

        This version, 2.01, is as strong, stable, bug free, and cleanly
        written as I could make it. It fixes a few quirks (which were
        minor and didn't become apparent unless you did something weird
        anyways). Please report any bugs or misfeatures to me that you
        find.

        It will be probably a month before Simtel gets this. Console
        yourself with the fact that it's public domain:  do anything
        you wish with it, especially including it in CD-ROMs, disks,
        web sites, snippets, with assemblers as an example program, etc.

-------------------------
| 4.1  Acknowledgements |
-------------------------

        Much thanks go out to all the programmers who have written free
        software in the past ten years and also to the web sites which
        offer such non-nagging software (NoNags) to us all. If you've
        ever received an e-mail from me thanking you for your work or
        have been linked to by me on my web site, I sincerely appreciate
        your efforts. This includes the staffs of Juno and Geocities
        (and Tripod, although my stay with them was short).

        But, more specifically (please tell me if I forgot your name):

              Thanks go out to the authors of NASM (Jules and
              Simon), ALAB (Kurt Inge Groenbech), ALINK (the other
              Anthony Williams), PMODE/Nasm (Thomas Pytel and Tuukka
              Toivonen), TMA (Sven Klose), Dos Controller (Soren
              Kragh), DJGPP (DJ Delorie), Tutordo (Marcello Vinci),
              Pass32 (Dieter Pawelczak), Hacker's View (Eugene
              Suslikov), Hexit (Mikael Klasson), Code Edit
              (Richard Alimi), ZipCentral (Johan Savas), Locate
              (Charles Dye), SJGplay (Steve Gray), Xenu (Tilman
              Hausherr), WS_FTP LE (John A. Junod), BASM286 (Kevin
              Diggins), F-PROT (Fridrik Skulason), HelpPC (David
              Jurgens), Pegasus E-mail (David Harris), ACD (A. Merckens),
              RVS (Raymond T. Kaya), TDE (Frank Davis), T-Secure (Tsahi
              Chitin), the authors of InfoZip, the authors of HTMLpad,
              the authors of EZpad, the authors of Free Agent,
              UFO (Ed T. Toton III), UCALC (Daniel Corbier), and GoZilla
              (Aaron Ostler).  :-)


              hey Simon, I said _thanks_  :-)

---------------------
| 4.2  Contact Info |
---------------------

        You can find me resting comfortably at Geocities. Of course,
        maintaining a web page is a lot of work, and I'm going to have
        to do some relaxing if I want to keep it going. To be honest,
        I've even considered moving from Geocities to some place else,
        or even just taking it down entirely. But I'm undecided at the
        moment. Feel free to swipe any of my pages, links, files, etc.
        and put them on your own sites because they may not stick around
        for too long. Then again, I may have a tough time trying to keep
        a local list of all the URLs I frequently visit. Either way,
        I'll most likely make up my decision within the year.

        As far as my Juno account, I haven't used it since I acquired a
        newer computer, so I assume it's no longer active, so please
        don't send any mail there, only e-mail me below. If that e-mail
        doesn't work or you don't get a response within a week, you can
        safely assume something has happened to me, or that I've given
        up computers entirely.  :-)

        http://www.geocities.com/SiliconValley/Peaks/6079
        anthonyw@dibbs.net

        NOTE: I am not the same Anthony Williams who wrote ALINK. You
        may wish to try his linker instead of VAL. His page is available
        at the address below:

        http://www.geocities.com/SiliconValley/Network/4311 (ALINK)
        anthony_w@geocities.com (Anthony from the UK)

----------------
| 4.3  History |
----------------

early June, 1996
  - began learning ASM, read 80xxx Fidonet echo via Byte Junction BBS
late August, 1996
  - received help on finding files in a directory from Randy Turner
middle September, 1996
  - wrote a crude and inefficient dir lister
early December, 1996
  - made it all blue instead of gray, no other improvements
    - I should've used int 10h, 13h but alas....
  - this version got added into the '96 80xxx Fidonet snippets
  - that probably explains why the '96 snippets are impossible to find  :-)
    - well, actually, you can find two very horribly archaic (and poorly
      written) programs in the snippets on Simtel but this program
      greatly supercedes them in quality, so Ms. Snippets Maintainer,
      please update your archives with this instead  :-)
  - Byte Junction goes down, got on Internet middle January, 1997
  - subbed to Van Halen mailing list
middle May, 1997
  - found out URL of Steel's programming page via IRC
  - installed DJGPP (thanks to Steel's nicely designed site)
2 June, 1997
  - a Georgia-based ISP (CSRA) abandons it's service in my town
    (goes bankrupt?) right after we payed the bill
21 June, 1997
  - finally get on the ISP that I suggested in the first place (DIBBS)

middle September, 1997 (YO 1.0)
  - rewrote the whole thing from scratch, still not very good

late September, 1997 (YO 2.0)
  - improved this version
  - tired of the VHML and most of it's posters
  - unsubbed from VHML because most of them are insane (ahem, Rex)
     - 14 digests a day was too much (and it wasn't even hardly about VH)
     - got a web page on Geocities (September 25th, Thursday)

middle November, 1997 (YO 2.1)
  - got frustrated at this version, made a small improvement
  - abandoned it knowing a new version from scratch would be written soon

late November, 1997 (DW 1.0)
  - rewrote the damn thing several times to the point that I could recite a
      simple dir lister from memory
  - finally, it's redirectable and much cleaner code (or so I thought)

middle January, 1998 (DW 1.3)
  - files now printed in lowercase for easier reading (only dirs are uppercase)
    - in my opinion, this is better than DOS's way of doing it
  - add time and date message at bottom of screen

early February, 1998 (DW 1.4)
  - cleaned up the code a little bit
  - fixed a weird bug I knew about but wasn't sure what was causing it
     - Prints now prints a NULL-ending string instead of a $-ending one
       (what buffoon agreed to let files use a $ in their names?)
     - used a makefile (GNU Make) to assemble it (bad idea)

middle February, 1998 (DW 1.5)
  - fixed macros to work better
  - made CRLF macro to help clean things up
  - made lots of jumps short
  - added filespec message at top of screen
  - added filespec message to "No files found" and "Invalid path" screens
  - abandoned makefile for good ol' .BAT
  - hid the cursor until printing is done to avoid flicker
  - checked for text mode 2 or 3, switches to 3 if not in either
  - renamed ESC to NULL to avoid ambiguity
  - 'dw c:\crap /n' now works just like 'dw c:\crap\*.* /n'
    - if intuitive filespec messes up, it tries the original unmodified one
  - wrote basic documentation
  - made it where it won't print volume label when doing 'dw c:\'
  - multiple options are now supported
  - /M option now supported

end of February, 1998 (DW 1.6)
  - fixed a small bug in the Scan proc
    - ('dw n:\' now works like 'dw n:')
  - implemented /V to print verbose file info
March 17, 1998
  - got the new VH album (great stuff, trust me)
April 18, 1998
  - reinstalled DJGPP (someone really needs to create an EZ-GCC for v2)
late April
  - watched the VH NewsDesk go down (and up again? huh?)

May 9 to May 25, 1998 (DW 1.7)
  - decided to update this abomination
  - rewrote everything from a dir lister skeleton I wrote on Friday the 13th
  - used no macros to keep it easy to convert (to MASM, A86, etc.)
  - used uninitialized space to reduce .COM file size
  - hopefully fixed filespec indicator to always have full path
    - "dw asm\test" should now tell you the full path
  - fixed leading space error
    - "dw/v" should work too
  - got rid of aligning options
    - "dw /vpi" will not work  (not really useful anyways)
  - fixed free space to correctly print according to drive being searched
    - "dw b:" should now report free space on drive b:
  - got a better bin2dec routine (written by Terje Mathiesen)
  - added commas to all numbers
  - made /I a default option
    - added "totaling --- bytes" to bottom info
      - this was extremely easy, and yet it seemed impossible at first
  - added /C (only disables commas in filesizes)
  - added /F and /D (basically, the same as "dir /a:-d" and "dir /a:d")
  - added /Z (needed it, sorta)
  - removed /M (useless anyways, don't you think?)
  - updated the documentation (well, duh)
  - probably some other stuff I can't remember

May 26 to 31, 1998 (DW 1.8)
  - recently fixed two filespec bugs
    - 'dw \stuff' should now print the correct filespec
    - 'dw ..' should now print the correct filespec as well
  - added /L  (don't print the blasted filespec)
  - updated documentation (well, of course)
  - by the way, I didn't mention before, but since 1.7, I've removed the
    part which hides the cursor
    - if you typed 'dw b:' and the drive wasn't ready, the cursor wouldn't
      be restored correctly, so I chunked that (mis)feature
  - backed up all the older versions on floppy; if you want to see an older
    version, for some demented reason, it's okay with me  :-)

sparse times in June, 1998 (DW 1.9)
  - fixed free space bug
    - it should now accurately report free space up to 2 gigs
  - no longer resets text mode to mode 3
    - if you aren't in text mode 2 or 3, it will set option /B and try
      to kludge around, but using /I when in other modes will look
      horrible :-)
      - if during your stay in the other video mode you decide to switch
        to text mode 3, just use option /T
  - filespec is now printed in all lowercase
  - /I now saves space by printing info on only two lines
  - when redirecting to a file, it should now be able to automatically
    figure this out, and therefore it will not pause the output
    - in other words, you can type "dw c:\windows /i > winfiles.txt"
      without having to worry about the /P option
  - added /M option (does not work with misc info at bottom)
    - this prints the month "Jul 04,1998" instead of "07-04-1998"
      - hopefully this will clear up any date format ambiguities
  - added /B option (prints filename and filesize only)
    - this is the same as option /V but doesn't print the filedate,
      filetime, or file attribute
  - added quotes " encapsulating of filespec
    dw "wgcb-???.*" -v      will now use 'wgcb-???.*' as filespec but
    dw wgcb-???.* -v        will not work
  - small optimizations to keep the .COM file small
    - 1.9 is only like 55 bytes bigger than 1.6, so I'm happy   :-)

July 15th to October 29th (DW 2.0)
  - began to learn some Irish (August 7th), not that that relates to
    this at all  :-)
  - reinstalled DJGPP yet again (August 27th)
  - figured out that 1.9 had one bug and one misfeature
    - the misfeature could be fixed, the bug could not (because, despite
      my efforts to keep the code clean, it became botched)
      - fixed misfeature with "dw /d /i" which printed misc info which
        wasn't needed
      - fixed bug with "dw /v" when the 15th, 16th, 17th, etc. file is
        a directory, which made it pause several times in succession
  - I realized that 2.0 would probably be expected to be a very
    well-done version with no bugs and many features...and clean code,
    of course, so I took my sweet time and now, several months later,
    it's released (soon to be uploaded to Simtel)
  - rewrote everything from scratch again except Terje Mathieson's
    bin2dec routine (which I don't want to rewrite)
    - the parser routine and all the parts of /V are majorly cleaned up
  - added timestamp option (/T:) which will only create or append to
    files with the .TXT extension (as a safety precaution)
  - added /S option (which acts just like DIR /B)
  - added /U in case you prefer all uppercase names
  - added returning of error codes 3 and 18 to DOS, so you can know via
    a batch file if the output wasn't redirected correctly
    - to help this purpose, some messages are printed via a
      non-redirectable approach to make sure the error is printed to the
      screen
    - changed /R to reset the text mode instead of acting like
      both /I and /P
    - it no longer autodetects the video mode or does anything about it
  - removed quote surrounding, so from now on, options must be preceded
    by a slash / and not a dash - (to avoid confusion)
  - /C isn't supported now because it was basically useless anyways
  - added /Z: to allow easier use of multiple options
    - "dw *.exe /z:ilpv" is easier than "dw *.exe /i /l /p /v"
      although both should work equally as well
  - made several changes in the appearance of the program
  - improved the documentation, renaming it to DIRWIDE.TXT to avoid
    confusion with Word docs (this is 100% ASCII, folks)
    - now includes Table of Contents and other useful sections

October 29th to present (DW 2.01, just a maintenance version)
  - fixed a few small quirks which only presented themselves when the
    wrong usage was used
    - "dw/?" now works
    - "dw ///" no longer invents weird invalid filespecs
    - shrunk the parser routine a bit
    - filespec now reports default drive even when the filespec itself
      is invalid

