AAA            SSSSSSSSSSSSSSS    CCCCCCCCCCCCCIIIIIIIIIIIIIIIII
              A:::A         SS:::::::::::::::SCCC::::::::::::C::::::II::::::::I
             A:::::A       S:::::SSSSSS::::::S:::::::::::::::C::::::II::::::::I
            A:::::::A      S:::::S     SSSSSSS:::CCCCCCCC::::C:::::IIII::::::II
           A:::::::::A     S:::::S         C:::::C      CCCCCC::::I    I::::I
          A:::::A:::::A     S:::::S        C:::::C           I::::I    I::::I
         A:::::A A:::::A     S::::SSSS     C:::::C           I::::I    I::::I
        A:::::A   A:::::A     SS::::::SSSSSC:::::C           I::::I    I::::I
       A:::::A     A:::::A      SSS::::::::SS::::C           I::::I    I::::I
      A:::::AAAAAAAAA:::::A        SSSSSS::::S:::C           I::::I    I::::I
     A:::::::::::::::::::::A            S:::::S::C           I::::I    I::::I
    A:::::AAAAAAAAAAAAA:::::A          S:::::S:::C       CCCCCC:::I    I::::I
   A:::::A             A:::::ASSSS     S:::::S::::CCCCCCCC::::C::::IIII::::::II
  A:::::A               A:::::A:::SSSSSS:::::SCC::::::::::::::C:::::II::::::::I
 A:::::A                 A:::::AS::::::::::SS  CCC::::::::::::C:::::II::::::::I
AAAAAAA                   AAAAAAASSSSSSSSSS       CCCCCCCCCCCCCIIIIIIIIIIIIIIII
                       __    ____  ____    ____  __    _____
\|/                   /__\  (  _ )(_  _)  ( ___)/__\  (  _  )               \|/
/|\                  /(__)\  )  (   )(     )__)/(__)\  )(_)(                /|\
                    (__)(__)(_)\_) (__)   (__)(__)(__)(___/\\
_______________________________________________________________________________
|  ___  _   _     ____ ____ _ _  _    _  _     _  _ ____ _    ____ _  _ ___   |
|  |__]  \_/  .   |___ |__/ | |_/     |_/      |  | |___ |    |__| |\ | |  \  |
|  |__]   |   .   |___ |  \ | | \_    | \_ .    \/  |___ |___ |  | | \| |__/  |
+-----------------------------------------------------------------------------+
|    *  mail: erik@erikveland.com  *  URL: /Ascii  *    |
+-----------------------------------------------------------------------------+
|          Created: Sunday 17.11.96 - Last Updated: Tuesday 22.04.97          |
| Some informations collected from Christopher Johnson's ASCII Art collection | 
| Other informations taken from the ASCII art FAQ by Jorn Barger              |
|_____________________________________________________________________________|
 
GENERAL INFORMATION:
 
Definition:
ASCII - 1) A 7 bit binary data code used in communications with most
minicomputers and personal computers. ASCII has 128 possible character
combinations. The extra bit in its 8-bit byte can be used as a parity bit or
for special symbols.
2) Also called TTY. A protocol that uses the ASCII code set. It provides very
little error checking.
Transmission as asynchronous: beginning with a start bit, followed up by a
number of data bits (usually five to eight), and a stop bit.
_______________________________________________________________________________
 
ASCII (ask'-ee) stands for "American Standard Code for Information Interchange"
This standard was developed by the American National Standards Institute.
It's basically a table of numbers and their corresponding symbols. We all know
that the only things computers send back and forth to each other are zeros and
ones.
 
Using this is standard, a computer can send a series of zeros
and ones in a certain order and the other computer will know that
it signifies a certain letter of the alphabet. ASCII covers letters,
numbers, special characters, and certain control codes. It doesn't
cover graphics.
 
Essentially, ASCII artwork denotes artwork that is 
created without using graphics at all. Its palette is limited to
the symbols that you have available to you on your computer keyboard.
 
This can be useful since most people's e-mail programs do not view graphics
files without the help of another program. Using ASCII characters to create
your picture will allow you to have a picture included on the screen with your
message.
 
REQUIREMENT: In order to get ASCII art to display correctly, you must display it
in a font that has uniform character width.
Courier is a good bet.
_______________________________________________________________________________
 
Justification: Ascii art will continue to be the appropriate,
populist technology for graphics on Internet, for some years to
come... so we might as well get good at it!  (There's still lots of
untapped potential...)
 
There's such a range of newsreading environments, that few of the
ideas offered here will work the same for everyone. If we want to do
this right, we need to get a sense of where these differences are
most serious.  (White-on-black displays vs b-on-w, for one...)
 
 
******************
 Contents of FAQ:
******************
 
- Samples of page-layout and animation
- The ASCII character set: problems and potential
- The line-draw character palette
- Line-draw ascii fonts
- Esthetics: texture, gesture
- Greyscale character palettes
- ASCII anti-aliasing
- An 'asciify' algorithm for anti-aliasing pbm bitmaps, with sample
 
This last topic may have the most *practical* utility-- it should
allow archives of GIFs and JPEGs to offer compact catalogs of
thumbnails *in the form of simple text files*.
 
Thruout the faq, I'll be raising questions about things I don't
know, that I'd like to be able to answer in future updates.
Feedback is *very* welcome.
 
 
Here's some samples of ascii page-layout:
 
 
              1 9 9 3
 
The central             |"|
bargraph shows >>>>>>>> |m| <    =---------
the total               |m| 1                  This rightmost bargraph,
number of      |"|      |m| <    .             turned sideways, shows
newsgroups,    | | <    |m| 2    .             the *distribution* of daily
log 10         | | 9    |m| <    .             volume for all newsgroups.
(groups_total) | | <    |m| 3    ]             (msgs_per_group)
(~5000)        | | <    |m| <    ]
               |m| 6    | | 4    ]]            Here, most newsgroups are
        >>>>>  |m| <    | | <    ]]            still way under 100 msgs
This leftmost  |m| <    | | 5    ]]]]          per day.  One group in ten
bargraph is    |m| 3    | | <    ]]]]]]]       tops this level.
a logarithmic  |m| <    | | 6    =---------
display of     |m| <    |_|      0  100  200
total Usenet   |m| 0            msgs/day/group
readership,    |_|
(subs_total)           5000 groups
(~1,000,000)  1 million readers
 
 
 
 1 9 8 8                    1 9 9 3                 1 9 9 8: the nightmare?
(wild guesses)
      |"|                       |"|                       |"|
      |m| <  =---------         |m| <  =---------         |m| < =---------
      |m| 1                     |m| 1                     |m| 1 ]
|"|   |m| <               |"|   |m| <  .            |"|   |m| < ]]
| | < |m| 2               | | < |m| 2  .            | | < |m| 2 ]]
| | 9 |m| <  .            | | 9 |m| <  .            | | 9 |m| < ]]
| | < | | 3  .            | | < |m| 3  ]            |m| < |m| 3 ]]
| | < | | <  .            | | < |m| <  ]            |m| < |m| < ]]]
| | 6 | | 4  ]            |m| 6 | | 4  ]]           |m| 6 |m| 4 ]]]]
| | < | | <  ]            |m| < | | <  ]]           |m| < |m| < ]]]]]]
|m| < | | 5  ]]           |m| < | | 5  ]]]]         |m| < | | 5 ]]]]]]]]
|m| 3 | | <  ]]]]         |m| 3 | | <  ]]]]]]]      |m| 3 | | < ]]]]]]]]]
|m| < | | 6  =---------   |m| < | | 6  =---------   |m| < | | 6 =---------
|m| < |_|    0  100  200  |m| < |_|    0  100  200  |m| < |_|   0  100  200
|m| 0      msgs/day/group |m| 0                     |m| 0
|_|                       |_|                       |_|
     500 groups               5000 groups                50,000 groups???
100,000 readers           1 million readers         100 million readers
 
 
Current editors/ word processors assume that you want your text
elements to hug the left margin, effectively a 'sideways gravity'
that must be carefully counteracted.  It's easy to screw up (which
the warlorders call 'tabdamage').  If your wp offers typeover-mode,
that's likely to work better than insert-mode, for preventing
tabdamage.
 
This protagonist is just a circle
with a heavy ascii lineweight, abstractly representing a character
named Joy Hoy:
 
            _+m"m+_
           Jp     qh
           O       O
           Yb     dY
            "Y5m2Y"
 
 
 
 
 
*************************
 The ASCII character set
*************************
 
The American Standard Code for Information Interchange supplies a
character-assignment for each number from zero to 127 (7F in
hexadecimal).  As I understand it, Internet protocols are optimized
for this seven-bit range--if you're trying to ftp an eight-bit-wide
file, you have to specially request 'binary' transmission.  (So the
opposite of binary, here, is *ASCII*.)
 
Only the numbers from 32 to 126 (20 to 7E hex) are defined as
*printable* characters (the others are defined as control codes):
 
    0 1 2 3 4 5 6 7 8 9 A B C D E F
  =--------------------------------
2 |   ! " # $ % & ' ( ) * + , - . /  <- <- <- 20 hex is the
3 | 0 1 2 3 4 5 6 7 8 9 : ; < = > ?           blankspace
4 | @ A B C D E F G H I J K L M N O
5 | P Q R S T U V W X Y Z [ \ ] ^ _
6 | ` a b c d e f g h i j k l m n o     7F is non-printing
7 | p q r s t u v w x y z { | } ~   <-  in the US ("rubout")
 
Unfortunately, this narrow standard ignored the needs of many other
cultures: the British 'pound' sign, letters with accents in French
and Scandinavian alphabets, etc., which led them to introduce slight
modifications to the standard, making the following symbols (at
least) non-universal:
 
   {^ `       { curly brace 1   ^ caret  ` backquote
    #| }       # hatch/hash mark   | pipe  } curly brace 2
     ~\         ~ tilde    \ backslash
    ]$[@      [square brackets]  $ dollarsign   @ at-sign
 
[The test-graphic is vaguely a woman with a rose in her teeth, on my
screen anyway...]
 
Furthermore, even within the US, different typefaces assign
significantly different shapes to some characters, for example:
 
"|" (C7)  is sometimes drawn as a continuous line, sometimes broken
in the middle.
                              ...@...     ...@...   (So this becomes a
"^" (5E) may be anything from ..@.@..  to ..@.@..   'Pinocchio' smiley:
                              .......     .@...@.        { ;^)
Similarly with "<" and ">".   .......     @.....@       (...doesn't it?))
 
Depending on your character set, any of these may be the blackest
black: @#%* (I'm often seeing people choosing "#", which on my
screen looks totally blotchy.)
 
Any of these may display at different heights: ~^*-=+
 
Lettershapes may have serifs or not, and ascenders and descenders
may be straight or curved. (Proportionally-spaced fonts, as opposed
to monospaced, are of course *hopeless*.  On the Mac, I favor Monaco
9, for its simplicity.  Courier is another normally-monospaced
family.)
 
Even monospaced fonts may display with different aspect ratios
(v:h), at least within GUIs, which can turn circles into ellipses
and squares into rectangles.  Different newsreaders may space the
lines differently, too, with the same outcome. (What was the IBM-
monochrome aspect-ratio?)
 
For Internet transmission, you can assume the display is 80
characters wide, although if you trim this a bit it will allow
images to be e-quoted without wrap-around. (If you use all 80, can
the CR cause wraparound in some pagers?)
 
Normal screen height is 24 or 25 lines, but when you're laying out a
page you should assume you'll use a control-L before and after each
screenful of text, to maintain the alignment, and this turns out to
limit the height to 22 lines.
 
 
 
*********************************************
 Line-draw vs. greyscale character palettes
*********************************************
 
Most ascii art so far has leaned almost entirely on less than twenty
of the available characters-- what might be called the 'line-draw'
character palette:
 
           / \ | - _ =
           . : ' ` " ~
           < > ( ) [ ]
 
Here's a cute example of the potential of this palette, a pastiche
that re-combines an incredibly cool self-portrait by Jonggu Moon and
a state-of-the-art dragon (off rec.games.mud, I think, but I got it
2ndhand and missed the credit).  Notice, though, how the lines are
mostly the same weight, creating a flatness:
 
                                      _   __,----'~~~~~~~~~`-----.__
                                   .  .    `//====-_             ___,-' `
                   -.            \_|// .   /||\\  `~~~~`---.___./
             ______-==.       _-~o~  \/    |||  \\           _,'`
       __,--'   ,=='||\=_    ;_--~/_-'|-   |`\   \\        ,'
    _-'        '    |  \\`.   '-'~7  /-   /  ||   `\.     /
  .'    //// ||     |   \\ \_    /  /-   /   ||      \   /
 / ____  O-O--=     |     \\.`-_/  /|- _/   ,||       \ /
,-'     ( ^ _/\_ --_ \     `==-/  `| \'--===-'       _/`
        /\~-\/  \   `-|      /|    )-'\~'      _,--~'
       /|`/ _ \_ \    '-~~\_/ |    |   `\_   ,~             /\
      / | : U_/  /         /  \     \__   \/~               `\__
      \(__:__ \_/      _,-' _/'\ ,-'~____-'`-/                 ``===\
        =@=====       ((->/'    \|||' `.     ~`-/ ,                _||
       |       |                 \_     ~\      `^---|__i__i__\--~'_/
      /   |   |                 __-^-_    `)  \-.______________,-~'
     /   /|   |                //,-'~~`__--^-  |-------~~~~~'
     |  | |  |                        //,--~~`-\
     |__| |__|
     /#_)  |#\
 
 
Tools for pasting clip-art *with appropriate 'hidden-line removal'*
do not exist, so one must settle, for now, for a word processor with
rectangular cut and paste. (Simple Text on the Mac, MS Word in recent
upgrades?)
 
The animation sample at the beginning of this FAQ uses mostly
linedraw, but also a bit of greyscale in the foreground (darker
lineweight) and in the far-background (lighter weight).  *Greyscale
ascii art normally assumes you're displaying dark letters on a light
background*.  This won't be true for many pc-monochrome monitors.
 
(Here's a page, again.  Notice also how a degree of 'random noise'
adds to the sense of realism, like avoiding using too-straight lines
or too-symmetrical shapes.)
 
 
==========================================================================
                       .
                       ::
                       :: .. :
                  .  .::::.: ::
               -  :. :':::::.::::           /-\_/-\_/-\_/-\_/-\_/-\_/-\_/
              |   :':'::.::::::.:         - .   ,       .      .     .
              |  \- - :''::':':::  ... _/  |  .  .   <^o^o^^o^>   .     .
              |   ]   \- -::'::'::.::/     |  .    <^o^^o^^o^^o^>     ,
              |       : ..\:::':'::/       | . .  <^^^^^^^^^^^^^^> .
              |   ]   : .. _ -=_           |    ,  H.:.//... ..:H   .   .
              |   ]   : ./       \         | . . . I://.//. //::I      ,
              |   ]   :/           \       | .     H:.://.//...:H ..
                  ]  / /           \ \     |    :. I.:/./ .//..:I  .:   .
           _+m"m+_ /  /               \    | .  ,  H:../////./::H  . ..
          Jp     qh        J888888888888h  | ., .  I./:/../ //.:I  ,  . ,
   ______ O       O  /    88 \\\  \ \ \ 88 |____;__H:.// //:/./:H_________
          Yb     dY      88 \\\\\\ \\\ \ 88
           "Y5m2Y"  /    8 \\\\\\\\\\ \\  8
 _________________  /   J888888888888888888h                    __________
    ______"______      8OO8XX [YBNNDY] XX8OO8 ==_======_====_===__________
==========================================================================
 
 
 
************************
 ASCII fonts (linedraw)
************************
 
Here's some ascii fonts that use only the linedraw palette.  (I'd
like to collect full alphabets for these.)  Notice that they all use
the underscore for the topline of the letters, so an almost-full
line of blank must be left above them:
 ___  _           _  _             _       _____
|   || |_  ___  _| ||_| ___  __  _| |_    /  ___\  ___  __ ___   ___
| | ||  .\/ ._\/.  || |/ ._\|  \|_   _|   | / __  / _ \ | /   \ / _ \
|___||___/\___/\___||_|\___/|_|_| |_|     | \_\ \ | __/ |  /\ | | __/
                                          \_____/ \___/ |_| |_| \___/
 _  __  __      __  _     __   ___  __  __  ___  _  _
| |/ / / _|    / _|| |   /  \ | __|/ _|/ _|| __|| \| |
|   ( ( (_    ( (_ | |_ | __ || __|\_ \\_ \| __||    |
|_|\_\ \__| [] \__||___||_||_||___||__/|__/|___||_|\_|

<-- Back