saul.pw/ software writing art links crosswords

ANSI Art and TheDraw

PsychoNet BBS banner from iCE pack 1994/02

In 1994, when I was a senior in high school, TheDraw was the de facto ANSI art editor:

TheDraw is a text editor for MS DOS to create ANSI and animations as well as ASCII art. […] The last public version of the editor was version 4.63, which was released in October 1993.

TheDraw was one of the first ANSI editors that supported ANSIs longer than 25 rows. The limit in the latest available version is still 100 rows. Other editors, such as ACiDDraw are able to support ANSIs larger than 100 lines for a single ANSI/ASCII (ACiDDraw supports 1,000 lines).

This last bit might seem like a strange detail for the Wikipedia to include, but at the time it was something of a big deal. Artists drew vertical banners for BBSes which would scroll by at 9600 baud when you logged in. But the trend was towards longer and longer murals: the banner to the right for PsychoNet BBS (released in the iCE pack from February ’94), is 390 lines tall. Only being able to edit 100 lines at a time meant artists had to manually stitch together multiple files. But this was a limitation of DOS, which ran in real mode and thus had 64k memory segments. At 160 bytes per line, 64k can only store 409 lines.

DarkDraw v0.72 (first release, April 1994)

My good friend Doug was involved with an ANSI art group called HaVoK. Between school and rehearsals for the spring play, I wrote DarkDraw, entirely in assembly, with Doug acting as project manager. DarkDraw was distributed in the May ’94 HavoK art pack, along with HavokView (HV.COM), an ANSI art viewer, that I had also written entirely in x86 real-mode assembly.

DarkDraw was able to use all the memory available to real mode, supporting over 3000 lines in 480k, which was still a healthy amount of memory in 1994. It managed this feat with some real mode segment arithmetic, which was clever but almost immediately obsolete. DarkDraw also contains some of my experiments with self-modifying code and steganography.

You can play with DarkDraw or HavokView yourself; all you need is DOSBox and DARKDRAW.COM (a 14k DOS executable .com file). Use Alt-L to load any .ANS file (like NB-POFT.ANS by Nightbreed, the first and only user to register the software); Alt-V will display it in VGA mode. Alt-Z for the help screen, ESC for menu. See docs (below).

DarkDraw v1.00 (final release, October 1994)

The following text files are from the original “1.00” release of DarkDraw:


DARKDRAW.DOC

                             DarkDraw v1.00
                   The only ANSI editor with 3k lines

Requirements for DarkDraw:

        80386 with 64k
        Extended (101 key) keyboard
        VGA (for VGA viewing and iCEcolor)
        Mouse (if VGA editing is wanted)


DarkDraw uses its own custom keyboard driver, which takes over the BIOS
interrupt entirely.  If you are using DarkDraw under Desqview, you
should set the Keyboard Conflict to the highest rating (F).  Side
effects of this include the disappearance of several normal keyboard
functions, including CapsLock, NumLock, Pause, PrintScreen, and
Alt-Keypad.

Because of DarkDraw's custom keyboard driver, several people
have complained about not being able to use the extended arrows
correctly.  Keyboards that are not IBM compatible may not send the
correct press/release sequence, and so DarkDraw cannot interpret it
properly.

Registered users with this problem have received custom-made copies of
DarkDraw for their systems, but a universal solution is being sought.

First, a description of the layout of the screen.  Many people have
suggested that the status line be unobtrusive and as small as possible,
so it occupies only 1 line of the screen.  The upper 24 lines are a
window to your picture, and the bottom line is the status and message
line.


An example status line is shown below:
┌────────────────────────────────────────────────────────────────────────────┐
│                                                                            │
│     ( 1,  45) │  243/3808 lines │ B[#]F │  │ ─ ┌ ┬   ┐ ├ ┼ ┤   └ ┴ ┘       │
│                                                                            │
└────────────────────────────────────────────────────────────────────────────┘

        Going from left to right:

        The numbers in parentheses are an ordered pair, telling exactly
where in the ANSI your cursor is.  By standard Cartesian conventions,
the first number is the X coordinate, and the second, the Y coordinate.

        The second tidbit of information is after the divider (³),
showing how many lines the ANSI currently has (i.e. where the end of
ANSI marker is), and how many are possible.  The maximum number of lines
is controlled only by the amount of conventional memory available.
DarkDraw takes all available memory when it starts, but doesn't use any
extended or expanded memory.

        After the second divider is color and character information.
The B shows the background color, and the F shows the foreground color.
In between the brackets is the current character in the current color.

        The final half (third?) of the status line is the current
extended character set, shown in the current color.  For more
information, see below under "Character sets".


Moving the cursor around
------------------------

        The most common way to maneuver the cursor is by using the arrow
keys and cursor movement keys on the numeric keypad.  If you have a
close IBM compatible keyboard, the extended arrow keys (and other
functions) may also be used.  The Tab and Shift-Tab combinations will
also move the cursor forward or backward between tab stops at every 8
characters.

        The ANSI length starts at 120 lines--just enough for one page of
VGA viewing/editing.  Moving the cursor beyond this point, whether line
by line or page by page, will adjust the ANSI length accordingly.  If
you want to adjust the length (though ANSI saving ignores trailing blank
lines, binary does not), move to the end of the ansi and press Alt-End
on the numeric keypad.  WARNING:  If you do this before the end of the
ANSI, you will lose everything after the current page (the page being
viewed).

        You can also move to a specific line number within the picture,
by pressing Alt-G.  It will prompt you for a line number, which
corresponds to the Y coordinate on the status line.

        All cursor movement keys (except Pgup and Pgdn) may be used for
block commands as well.

Editing
-------

        The Backspace, Insert, and Delete keys are standard.

        You will notice that the last character to be placed on the
screen is also placed between the brackets on the status line.  It
becomes the current character, along with the current color.  To place
this character/color combination, press the 5 on the numeric keypad.

        Also important is the ability to make the color and character
under the cursor the currect color and character.  This can be done by
pressing Alt-/.

        See also below under "Character Sets".


      Specific documentation about commands available in DarkDraw
                                 -----

Help (Alt-Z) -  From the main ANSI editing screen, a single help screen
        is available.  All the keyboard commands are listed there on one
        page, organized somewhat according to function.

Character Sets - Most plotting will probably be done using these
        extended sets, built into DarkDraw.  Because DarkDraw uses its
        own keyboard driver, this is the only was to choose character
        with values over 128 (Alt-keypad is reserved for block moving).
        To change the current character set, use the grey + and - on the
        number pad.  The current character set is displayed, with the
        current color, on the status line in groups of four.  To plot an
        extended character, press the function key that corresponds to
        it.

        Character sets have been organized according to function; for
        instance, the math symbols are collected into one group, the
        spanish letters (forward accents and tildes) into another.  If,
        however, another configuration would be more convenient for you,
        the character sets may be changed for the current session.  Move
        the cursor onto the character that you want moved into the
        current character set, and press Alt-Fkey, where the Fkey is the
        key you would normally press to plot that character.  A blank
        set has been reserved as the last set for this purpose.

Color - Changing color can be done in two ways.  The simplest is to
        press Ctrl-Left or Ctrl-Right to adjust the foreground, and
        Ctrl-Up or Ctrl-Down to adjust the background.  The new color
        will show up on the status line.

        The second way is by number.  By pressing Alt-A, a small color
        chart will appear on the message line, and will prompt you to
        type in the number of the color for both foreground and
        background.  Note that background colors above sixteen are
        blinking without iCEcolor.

        To reset the color to the standard (dull--grey on black) color,
        press Ctrl-Center on the numeric keypad.

Loading -  Either choosing the Load option from the File menu or
        pressing Alt-L will bring up a list of files in the current
        directory. The directories are at the beginning of the listing,
        but the files are not sorted in any other way.

        Pressing <ENTER> will choose the hilighted file or directory,
        and <ESC> will exit file listing without doing anything.  At
        this time, only ANSI or ASCII files may be loaded; binary files
        may not.

        Alt-M will change the current file mask, and Alt-J will jump to
        a new directory.

Saving (Alt-S) -  There are three methods of saving files:  ANSI, ASCII,
        and Binary, which the program allows you to select when this
        option is chosen.

        ANSI files are saved in standard ANSI format, able to be TYPEd
        out at the DOS prompt, loaded back into DarkDraw, or viewed in
        any of several viewers, if scrollback is desired.  This is
        probably the most common format for saving files, as they can
        then be installed into a BBS to be sent over the modem to a
        remote computer to be displayed.

        Saving the picture in ASCII format saves it without regard to
        color, at 79 characters per line, with a CR/LF at the end.
        Files may be viewed in any of several popular programs, and also
        TYPEd out to the DOS prompt. The primary purpose of this would
        be for inclusion in FILE_ID.DIZ headers in .ZIP files;  BBS's
        often cannot handle the ANSI codes in the previous format in
        their file listings.

        Binary format saves the picture with 160 bytes per line, 2 bytes
        (color and character) for each pixel.  This format is useful for
        inclusion in programs, as it is the fastest and most easily
        accessible.

Block commands (Alt-B) -  When using the block commands, DarkDraw will
        first ask for the block to be manipulated.  If the block you
        want to use is already in memory (i.e. it was the last block
        used), then press "L"; otherwise, move the cursor (using the
        standard movement keys--see above) to the upper left corner of
        the block, and press <SPACE>.

        Then move the cursor to the lower right hand corner, and press
        <SPACE> again.  DarkDraw will copy the block to the block
        buffer, and now asks for the command to be performed on the
        block just marked.

Cut, Stamp, Fill, Xchange, Horizontal/Vertical invert (block commands):

        Cut:  Replaces the area under the block with the
                current color.

        Stamp:  Pastes the current block at the cursor position, as
                shown.

        Fill (Alt-F):  Fills the current block with either the current
                color, foreground, background, character, or all.

        Horizontal/Vertical invert:  Flips the current block either
        horizontally or vertically.  Also inverts the various half
        characters (Ü and ß, etc).

        Xchange:  Exchanges the current block with the information at
                the cursor.

VGA viewing (Alt-V) -  DarkDraw only views ANSIs in the 640x480x16 VGA
        mode, dithering the characters as closely as possible to achieve
        a correct look.  In this mode, DarkDraw will only display 120
        lines at a time, to allow space for the VGA editing functions
        (see below).  DarkDraw will also stop displaying the ANSI if a
        key is pressed.  To view more of the ANSI, press PgDn (and PgUp
        to go back up).  Alt-V or <ESC> exits VGA mode.

VGA editing -   VGA editing is directly accessable from the VGA viewing
        screen.  When viewing an ANSI in VGA mode, DarkDraw will display
        the first 120 lines on the screen as described above.  To edit
        in VGA mode, a mouse is required.  If a mouse driver is
        detected, two selection bars will appear after the first VGA
        page has displayed: the character palette and the color palette.

        When the mouse cursor is over the ANSI being displayed (the
        first 160 pixels), the left mouse button plots the current color
        and character on the ANSI.  Important: the program will plot
        beyond the end of the ANSI, and any work that has been there
        will be unable to be recovered in text mode.  To be sure your
        work is on the actual ANSI, first make sure the number of ANSI
        lines is 120 or greater.

        To change the current character, move the mouse cursor onto the
        character palette, and click the left mouse button on a
        character or space.  The current character will be displayed as
        the first character on the palette, separated from the others
        (which are in groups of four). The entire character palette is
        displayed in the current color.

        To choose a color to draw with, move the mouse cursor over the
        color palette.  Click the left mouse button to change
        foreground, and the right mouse button to select background.
        The first color is black, or color 0.

-----

That just about does it for the documentation for DarkDraw.  See the
REGISTER.DOC and FUTURE.DOC for further information on DarkDraw and how
to register.

                          End of Documentation

REGISTER.DOC

    To register DarkDraw, send a check or money order for $10 to:

                Paul Swanson
                160 S. Lombard Ave.
                Lombard, IL 60148-2750

    Please include your handle and the group that you draw ANSI for (if
any).  This information will be used to implement customized SAUCE
support.

    If you are the Sysop of a BBS, I will have someone upload the file
to you (make sure you tell me what account to use).  Or, if you don't
mind waiting a few days, I will mail a 3 1/2" disk to the address you
give.

    Registration benefits include a customized copy of DarkDraw,
complete with SAUCE support and the ability to change the default line
length for saving ANSIs.  Also included is the nice "buzz" you receive
for being legally and morally correct.

    You will receive the latest version of DarkDraw (released or not),
and additional registered updates are free to registered users.

9/22/94
Techie

FUTURE.DOC

The future of DarkDraw is undecided, as of now.  Numerous registrations
may (and probably will) convince me to continue work.  Among the
features planned for future releases are:

        - 320x200x256 VGA mode
        - Mouse support in text mode
        - Keyboard mouse driver (for using keyboard in VGA mode)
        - VGA BigBlocks
        - Animation mode
        - iCEcolor
        - Font support

Of course, any suggestions given by registered users will be seriously
considered and given the highest priority.  Bugs will be fixed
regardless of registrations (or the lack thereof), and bugfix versions
will be released.

Please send any suggestions/bugs for DarkDraw to the address given in
the registration text file (REGISTER.DOC).

Techie