                   ___________
                  |           |
                  |___     ___|  ___        ______
                      |   |___  /  /______ /  __  \
                      |   |\  \/  /|  __  \| |__> |
                      |   | \    / | |__> || _____/
                      |   |  >  /  |   ___/\ \____
                      |___| /  /   |  /     \_____|
                           /__/    |  |
                                   |__|
                      Version 2.03      by Martin Bazley

            This text is best viewed at a wrapwidth of 77 columns.
      For interactive contents, do a 'List of Found' search for '==='.

_____________________________________________________________________________

=== 1 == Introduction ==

Welcome to Type - the first public programming release from Martin Bazley
You have probably noticed that that's because I'm not the world's best
programmer, but that's beside the point...

Type loads a text file and mocks typing it on the screen - it plots each
character with a 'tapping' noise.

Aside from the text file, you can customise other aspects of the program
too.  The font, sound, background colour and line and character spaces are
all fully configurable.

Type should run perfectly from read-only media (CD-ROM, SparkPlug, etc.),
although you won't be able to alter the message, sprites or other settings
and TypeConf will not work.

Have fun!

_____________________________________________________________________________

=== 2 == Quick guide ==

Run program.

Change 'Message' file to alter message on screen.

Type is a very basic program!

_____________________________________________________________________________

=== 3 == Changing the message ==

=== 3.1 == Basics ==

There are two ways of altering the message that Type displays.  One is to
alter the message path - detailed later.  The other is to alter the
'Message' file.

This is located in the application root directory, meaning that access can
be gained to it by SHIFT-double-clicking on the !Type icon and then double-
clicking on the file marked 'Message'.

Using your text editor, you can change this message to anything you want.

Hardwrapping (line feeds at the end of each line) is neither necessary or
recommended.

=== 3.2 == Supported characters ==

Because Type works by plotting sprites, this means that every character in
your message must have a corresponding sprite in the 'Letters' file.  All
the common ones and some of the uncommon ones are provided with the
application, but it is still very possible that your message will contain a
letter which is not supported.

To help you, here is a complete list of all the character sprites supplied
with Type:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m
n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 ! "  $ % ^ & * ( ) - + = : ; ,
. ? / ' @

=== 3.3 == Widths and heights ==

Character spacing and line spacing can both be made bigger or smaller
according to taste.  Thus these figures are by no means a complete guide.

The standard height of line spacing is 8 OS units (4 pixels).  Letters are
32 OS units (16 pixels) high, meaning that the space between one line and
the next is 40 units.  You can fit 24 of these lines onto the screen at any
one time.

Letter widths are more difficult, because, with kerning switched on, they
are very variable.  Lower-case Is are only 2 pixels wide, with capital Ms
being 12 pixels wide.  The standard width in non-kerned characters is 20 OS
units (10 pixels), with standard character spacing being 4 OS units (2
pixels).  Thus 53 non-kerned characters can fit onto the same line, but with
kerned characters, this amount is almost always more.

Remember this when you put large pieces of ASCII art into your text: 53
characters across and 24 lines down is the maximum.

If you do put in strings of characters more than 53 letters across, without
a full stop, comma, space or hyphen, some *very* odd effects will occur.
The first characters of the string will all appear on separate lines, and
the rest will be plotted properly once it has been reduced to 53 or less
characters.  Not at all desirable.

=== 3.4 == To kern or not to kern? ==

Kerning is completely togglable (if that's a word).  While fixed-width
sprites are just that - all the same width - kerned widths vary wildly.
This generates a better-looking output, but it has the same disadvantages of
viewing ASCII art in Google - characters just don't line up.

In fixed-width mode, however, you can think of everything as being plotted
strictly in adherence to a regular grid.  And as in a grid, all the
characters on all the lines are perfectly aligned, so you want fixed-width
for including tables and diagrams and things like that.

Kerning looks better for documents containing nothing but text, and fixed-
width should be used for tables and diagrams and things like that.

At any rate, kerned and fixed documents look almost the same when case
support is turned off.

ASCII art, by the way, is not recommended unless you are prepared to design
more characters.  Those not supported include the backslash (\) and
underscore (_).  For this reason you cannot set Type to display this help
file.  This is intentional, because this file is hardwrapped to a width
greater than the maximum number of characters Type can fit across the screen
(see previous section) and the text comes out completely mangled.

=== 3.5 == Other things ==

As you might have noticed, case support can be toggled on and off, preferably
via TypeConf. If it is turned off, the message will come out entirely in
upper case, because it would look rather funny if it was in lower case.

If a blank line is detected, the program waits for half a second.  This, and
the delay between plotting characters (10 centiseconds) are fully
customisable.

The default text in the 'Message' file, by the way, is an extract from Enid
Blyton's book 'The Naughtiest Girl in the School'.  I don't think it's
particularly well known, and I'd appreciate it if you'd refrain from asking
how I came to have such a passion for the book in the first place...!

_____________________________________________________________________________

=== 4 == Designing your own font ==

=== 4.1 == Where to look ==

While the supplied font is quite readable, one aspect of it is all too
obvious - it's rubbish.  In fact, I was so lazy designing it I couldn't even
be bothered to go to the trouble of designing 10x16 characters - I drew 5x8
ones and enlarged them.

The most likely reason for your wanting to alter the characters is that you
want to include an unsupported character in your message.  To do this, you
need to alter the 'Letters' and 'LettersK' files inside the application root
directory.

It is just possible that you do want to design your own, rather better,
font, in which case I have another thing to say to you: DON'T try to do it
all at once!

=== 4.2 == 'Letters' and 'LettersK' ==

Well spotted - there are two letters sprite files, one called 'Letters' and
the other called 'LettersK'.

The reason there are two is for kerning support.  'Letters' sprites are all
the same width (10 pixels), while 'LettersK' sprite widths vary according to
how wide the character itself is - an 'I' is narrower than a 'Z', for
example.

These are both completely independent sprite files, and so you will need to
be careful to modify them in parallel.  Otherwise, when you switch to or
from kerning via 'TypeConf', you will get a completely different display.

The widths of the sprites in the 'Letters' file must not be altered (unless
you're prepared to alter the width of every single one of them!), but you
can make any sprite in the 'LettersK' file any width you please.

=== 4.3 == Palettes and that ==

All sprites should be in 256 colours (8-bit).  Apart from that, there are no
rules governing your colourscheme - there is no restriction in the program on
even a pink frilly font, although I can't say I wasn't sorely tempted!

No sprite should have a mask - sprites are not plotted with masks, and the
cursor is rubbed out by having the letter plotted over it to avoid
flickering.  Solid backgrounds only, please.

Palettes are not necessary, and add unnecessary size to the sprite file.
Custom-made palettes aren't supported anyway.

=== 4.4 == Sprite sizes ==

All the fixed-width sprites should be 10 pixels across by 16 pixels up.
There, that was easy, wasn't it?

Kerned sprites should also remain at 16 pixels up.  Widths, however, can be
as wide or narrow as you like.

=== 4.5 == Names ==

Each sprite should have a one-character name consisting of the character it
represents.  Thus the exclamation mark sprite is called !, the ampersand
sprite is called & and the bracket sprites are called ( and ).  If you were
to design a new sprite for the backslash, you would call it \.

The exceptions to the rule are the letter sprites.  Sprite files only
support lower case characters (goodness knows why), and so the capital A is
called a, the capital B is called b, and so on.  The lower case letters have
the | (pipe) symbol in front of them, so the small c is called |c, the small
d is called |d, and so on.

Why not the other way round?  The capital letter sprites were there first,
that's why.  Anyway, until someone invents some new letters of the alphabet,
you won't have to worry about creating these!

IMPORTANT: Type only checks for characters between &61 and &7A for lower
case characters.  This means that accented characters are not supported - if
you are going to add these, they can either be all lower case, all upper
case, or a mixture, but not both at once.  If you want to put in accents,
your best bet would be to turn case support off.

=== 4.6 == Colourschemes ==

Another sprite file called 'BGrounds' inside the application root directory
contains three more sprites.  These are all 1 pixel by 1 pixel.

The colour of the 'bg' sprite determines the background colour for Type's
display.  The 'line' sprite colours line spacing, and the 'space' sprite
colours character spacing.

Note that the latter affects the tiny spaces between the sprites Type plots
on the screen, NOT ASCII value &20, the space character itself - alter the
'blank' sprite in 'Letters' or 'LettersK' if you want to change those.

If you find 1x1 too tiny to work with, you will just have to zoom in very
far.  The sprite size must not be altered - not unless you're prepared to
manually increase the size of the sprite area.

=== 4.7 == Other 'special' sprites ==

The remaining two sprites in the 'Letters' and 'LettersK' files are called
'caret' and 'blank'.

'blank' is a, not surprisingly, blank sprite used for rubbing out the caret
when spaces are plotted or a newline is encountered.  You could alter it to
the background colour to make the spaces seem transparent, or you could even
draw something in it - perhaps a little centred dot, Arthur Ransome-style.

'caret' is the sprite used for the, erm, caret.  This can be altered as you
please, to maybe an I-shape or an underscore, unless (like me) you prefer
block carets.

Both 'caret' and 'blank' must remain at 10x16 in the fixed-width file.  They
theoretically could be reduced/increased in width in 'LettersK' (untested),
although you shouldn't make them too narrow - you'll get bits of letters left
over at the ends of lines.

_____________________________________________________________________________

=== 5 == The sound module ==

=== 5.1 == The 'tap' sound ==

The file called 'Tap' in the application root directory is played every time
a letter is plotted.  You may have noticed that it doesn't sound much like a
keypress - it was the only vaguely appropriate sound I could procure, since
I don't currently own a program to make a module-format sample.  (Update: I
do now, but I don't suppose for a moment it makes 32-bit compatible code.
Who needs expensive software when you've got a big brother? :-> )

As a matter of fact, it's the laser sound from an ancient game called
Battlefield by Dougie Frior.

=== 5.2 == Replacing the module ==

If you have a better one, you're welcome to replace it with another sample
module called 'Tap'.  The only alteration necessary is to change the title
string.

If, for example, your module is called 'KeyPress', your best bet is to do a
search in your text editor for 'KeyPress'.  When you've found it, change it
to 'Tap'.  The remaining bytes in the name should be set to ASCII value &00.

Thus, the final name ASCII values should be:

5461700000000000

In StrongED !Dump mode, you can do this via the second column of the ASM
display.

=== 5.3 == Testing ==

The best way of testing your new sample is to type

*RMLoad <Type$Dir>.Tap
*ChannelVoice 1 Tap

at the command line.  Press Ctrl-G to hear your sample.  To set the beep
back to normal, type

*RMKill Tap
*ChannelVoice 1 1

afterwards.

_____________________________________________________________________________

=== 6 == TypeConf ==

=== 6.1 == Changing advanced settings ==

The 'Settings' file in the application root directory contains some less
obvious settings in the program, from the speed at which it runs to the
amount of character spacing. It can be altered by hand, but using TypeConf is
recommended.

TypeConf is a BASIC program supplied with Type, and located (surprise,
surprise) in the application root directory.

This section of the manual provides detailed instructions on how the various
settings work.

=== 6.2== Line colouring method ==

The first question you will be asked is which line space colouring method
you want.

There are three different methods to choose from.  All of them involve
colouring the spaces between the lines of text Type displays in the selected
line colour.  The line colouring method controls how much of the line is
coloured in.

The first method is to colour the line space from the left-hand edge until
the end of the line of text above.  This is the default.

The second method works the same, but colours up to the end of the line of
text below.

The third method colours in the whole line space across the entire width of
the screen.

To alter the colour of the line spacing, see section 4.6.

=== 6.3 == Case support ==

The second question you will be asked is if you want to enable case support
or not.  This is a lot simpler.  If you answer no, the entire message will
be displayed in capital letters.  If you answer yes, both upper and lower
case characters will be recognised.  Note that, to achieve the same effect,
you could leave case support on and type your message all in upper/lower
case.

=== 6.4 == Kerning support ==

Again, a very simple question.  Answer yes to kern characters, answer no for
fixed-width.

Kerning works by plotting letter sprites that vary in width, instead of
being all in the same width.  This means a completely different sprite file
is loaded, so watch you keep them the same.

See section 3.4 for more on kerning.

=== 6.5 Sound on/off ==

If you answer yes to this question, the file will be printed in time to a
sort of tapping sound.  If you answer no, the display will be silent.

Note that if you answer no, the 'Tap' module will not actually be loaded.


For each of the following questions, pressing Return without typing anything
will set them to the default.

=== 6.6 == Message path ==

The default text file Type displays its message from is <Type$Dir>.Message,
or the 'Message' text file inside the application root directory.  You can
change this if you wish.

For example, set this to ADFS::4.$.!Boot.Resources.!Fonts.!Help to display
the !Help file for your !Fonts directory.

Make sure this is a valid path, or you will get some very nasty errors.

=== 6.7 == Character spacing ==

By default, there is a gap of 4 OS units between each character.  You can
enlarge or shrink this as you please.

Don't make this too big, if you want your text to be readable.  You might
want to experiment with a space of 0 - it generates an *interesting*
effect...

To colour in the spaces between the characters, load the 'BGrounds' file and
open the 'space' sprite.  This is a 1x1 pixel sprite which is used to
determine the colour of the spaces between each character.  Alter the colour
of it to, say purple, and you will get lots of little purple lines between
each character (including space characters).

=== 6.8 == Line spacing ==

Between each line, there is a gap.  Via TypeConf, you can make this as big
or small as you like.  Although going below 4 units is not recommended,
because this will cause the space-plotter to go into the minuses, and you
will lose parts of your characters.

The 'line' sprite in 'BGrounds' controls the colour of these spaces.  Alter
it to any colour you like and watch the effect on the display.

=== 6.9 == Character interval ==

After each character is plotted, there is an interval of 10 centiseconds.
TypeConf lets you change this.  Note that intervals below 1 are not possible.

=== 6.10 == Blank line interval==

If Type detects a blank line, there is a further interval of 50
centiseconds, or half a second.  Again, this can be changed, and again, it
cannot be set to below 1.

_____________________________________________________________________________

=== 7 == Format of 'Settings' ==

The default 'Settings' file looks like this:

0
0
0
0
<Type$Dir>.Message
4
8
10
50
@

The first line is the line colouring method.  0 for below text, 1 for above
text, 2 for across whole screen.

The second line is for case support.  0 for on, 1 for off.

The third line is for kerning support.  0 for on, 1 for off.

The fourth line turns the sound on and off.  0 for on, 1 for off.

The fifth line is a path to the file Type reads its message from.

The sixth line is the number of OS units between characters.

The seventh line is the number of OS units between lines.

The eighth line is the number of centiseconds' wait between characters.

The ninth line is the number of centiseconds' wait on a blank line.

The last byte in the file must ALWAYS be the character @.  If it isn't, Type
will perceive the file as incomplete and use the settings hard-coded into
the program.  This is a safeguard against people who panic when they run
TypeConf and press Escape before it's finished.

_____________________________________________________________________________

=== 8 == Common problems ==

=== 8.1 == No sprite exists for character ==

Type has just run up against a character in your message which doesn't exist
in the letters file.  Make one.

=== 8.2 == Sound voice must be in the range 0-32 ==

Your 'Tap' module does not have the title string 'Tap' - see section 5.2 for
instructions on how to alter it.

=== 8.3 == Handle is either illegal or has been closed ==

Your selected message path is invalid.  See section 6.6.

=== 8.4 == No room for this DIM ==

You have managed to inflate the letters sprite file to such a size there is
no longer any room in the Wimpslot for it.  Increase the Wimpslot in the
!Run file.

=== 8.5 == Invalid line space colouring method ==

The line space colouring method number in the 'Settings' file is not 0, 1 or
2.  You should only get this one if you've been fiddling with the file
itself (rather than using TypeConf), which is something you shouldn't do!

=== 8.6 == Unknown or missing variable ==

(1) The 'Settings' file cannot be found.  It should be <Type$Dir>.Settings -
if it isn't, use TypeConf to create a new one.

(2) Either 'Letters' or 'LettersK' does not exist.

=== 8.7 == File 'Tap' not found ==

Self-explanatory really.

_____________________________________________________________________________

=== 9 == Known quirks / To do ==

   The wrapping code is a bit glitchy, sometimes leading to the loss of a
    few characters.
   The scrolling code sometimes produces zombie half-cursors.
   Should the space and caret sprites be moved into 'BGrounds'?
   Perhaps implement multiple font support.  Configuration screen, anyone?
   I should probably put in support for some 'special' commands in the
    'Message' file - generating highlighted text, extra delays, etc.

_____________________________________________________________________________

=== 10 == Version history ==

=== Version 1.00 == 16th February 2006 ==

   First version.

=== Version 1.01 == 17th February 2006 ==

   Added Wimpslot.
   Reduced sprite size about 65%, by removing unnecessary palettes.
   Speling coorrections.
   Added a note about the half-second delay, which had accidentally been
    left out.
   Amended various other parts of the help file.

=== Version 1.02 == 19th February 2006 ==

   Hardwrapped help file to a width of 77 columns.
   Amended start to show this.
   Replaced old 'Tap' module with a 32-bit compatible one.  The application
    should really work on the Iyonix now.  And this time I've tested it, so
    there.
   Assorted helpfile changes.
   Increased sprite area and Wimpslot.

=== Version 1.03 == 8th May 2006 ==

   Added coloured background support.
   Fixed bug causing 'End of file' after text had finished.
   Thus possibility of the last word being left out is now eradicated
    (hopefully).
   Removed some dead code and elderly, redundant checks (such as making
    sure the cursor wasn't off the left-hand edge of the screen).
   Removed some unnecessary statements (a whole host of THENs and surplus
    MOVE commands).
   Amended help file.

=== Version 1.04 == 27th May 2006 ==

   D'oh!  Background colouring now actually takes notice of the tint
    (thanks Chris).
   Now uses OS_SpriteOp 41 instead of plotting the sprite and using POINT
    to determine the colour.
   Added another 1x1 sprite to the 'Letters' file, for colouring letter
    spacing.
   More helpfile stuff.
   Altered the small sprite.

=== Version 2.00 == 26th September 2006 ==

   NEW!  TypeConf and the Settings file have arrived - they bring the
    following new features with them:
     - Variable character spaces.
     - Variable line spaces.
     - Different methods of colouring line spaces.
     - Case support.
     - Kerning support.
     - Variable message path.
     - Proper-ish system beep resetting.
     - Variable character delays.
     - Variable blank line delays.
   Type will use settings hard-coded into the program if the file is
    incomplete.
   Line colouring is now configurable.
   New 'LettersK' file for kerned letters.
   Comments added.
   Fixed error handler to check for open files before closing them.  A
    crash will no longer occur if the files haven't been loaded!  Moved
    error handler back to the beginning of the program.
   Can now press Escape without causing an error.
   The size of the sprite area is now calculated automatically.  This
    avoids the previous need to alter the program itself when the sprites
    got too big.
   This is very ugly, involving fiddling with the CSD using a program by
    Jeffrey Lee.
   A comma now counts as a word-splitter in the wrapping code - useful for
    things such as very, very big numbers.
   Wrapping code now calculates the length of the next word in OS units
    rather than letters, with the help of a new function and OS_SpriteOp 40.
   Changes to the cursor-rubbing out stuff.
   You should no longer erroneously get leading spaces at the beginning of
    a line - for example, when the text wraps immediately after a full stop.
   New procedure PROClinecol, which handles line colouring.
   The error handler now belatedly contains an error handler!
   Minor grammatical corrections to the default message.
   Redesigned some sprites (most notably the capital N), and added a
    dollarsign sprite.
   Rewrote the entire help file from scratch.
   Had a nice long lie down.

=== Version 2.01 == 23rd October 2006 ==

   Completely reworked sound system:
     - The tapping sound is now produced through channel 2, instead of
       channel 1.
     - Therefore the system beep voice is left alone, meaning it can be
       easily restored.
     - So the 'sound to return to' entry in the 'Settings' file is gone.
     - Sound setting-up has been moved from !Run into !RunImage.  (!Run still
       loads/kills the 'Tap' module.)
   Followed the forehead-slappingly obvious solution to the spritefile
    size-detector and put the <Type$Dir> in the *string*, rather than the
    SWI...  Removed 'GetCSD' dependence!
   Moved 'bg', 'space' and 'line' into a separate file.  This is loaded in
    via a second, fixed, sprite area, so you can no longer increase the
    sprites in size.
   Globally replaced message handle handle% with the more sensible message%.
   Replaced local variables in FNsprlength with global ones.  The 'No sprite
    exists' error should now actually report the offending character, rather
    than the previous one!
   Said error now gives the ASCII value of a character (to distinguish
    between, say, spaces (&20) and hard spaces (&A0).
   Fixed strange mistake where lower case 'l' was a different shade of green
    to all the other characters!
   More commenting.
   More helpfile stuff.

=== Version 2.02 == 3rd May 2007 ==

   Refined the sound implementation further.  The 'tap' is now completely
    independent of the system beep (uses Sound_Control instead of VDU 7)
    thereby resolving issues with pitch and volume which have recently
    cropped up.
   Moved all sprite-details calculating stuff into PROCsprlength (which
    replaces the function of the same name).  The main benefit of this is
    that the very dirty set-up duplicating most of the functionality in the
    main program is eliminated.  Note: due to a side-effect of this change,
    the program might actually now report unsupported characters several
    bytes in the file before they're actually plotted!
   Moved blank-plotting routine into another new procedure.
   Replaced dirty (and no longer properly functioning) RECTANGLE FILL
    commands at linefeeds with the above.
   Slight alteration to avoid waiting half a second at *every* linefeed (not
    just blank ones)!
   Changed internal corrupted-settings configuration to actually be
    consistent with the TypeConf defaults.
   A few syntax alterations in TypeConf and a fix to the error handler.
   Fixed hard-coded settings safeguard; previously it crashed when it
    encountered a blank file.  Since a blank file is the result of exiting
    TypeConf on startup, this was understandably not the most desirable
    effect!

=== Version 2.03 == 26th May 2007 ==

   Replaced Tap module again.  Type should now work on RISC OS 6.
   Just in case it doesn't, added a new command to the 'Settings' file
    allowing the user to enable/disable sound.  If sound is disabled, the
    module is not even loaded.
   Changed format of 'Settings'.  Now a 0 means on, and 1 means off -
    beware!  This is part of a change which makes the configuration loading
    slightly neater.
   Moved module loading commands into the !RunImage to allow me to blend
    them with the configuration loading.
   Replaced historical *Echo command in the hardcoded configuration with a
    more conventional PRINT.  I had hoped it would allow me to display the
    warning in a window, but it doesn't.
   Updated manual.

_____________________________________________________________________________

=== 11 == The boring bits ==

=== 11.1 == Thanks and credits ==

Type was entirely (well, almost) created, designed, documented and
programmed by Martin Bazley.

My sister Harriet had a hand in debugging some of the earlier versions.

A big round of applause goes to Chris Bazley, who also did some of the
features in the early (and not!) versions, and who has kindly agreed to host
Type on his website.

And finally, the 'Tap' sound comes from Dougie Frior's elderly game
Battlefield.

=== 11.2 == Legal stuff ==

Type is completely free software.  You may distribute, hack, improve, copy
and otherwise mutilate it in any way you please, but do NOT release
anything incorporating any part of this program (except the parts that
weren't written by me!) without giving me any credit and/or without my
permission.

You use this program at your own risk, and I will not accept liabilities for
any damage resulting from use/misuse of this program.  If you're going to
burn Type to CD and then poke yourself in the eye with it, that's your
problem, not mine.

If you're going to review or mirror this program, I'd appreciate knowing
about it!  (Especially if you're going to give it a good review. :-> )

=== 11.3 == Contact ==

All bug reports, congratulations, pleading requests and flames should be
sent to:

 mailto:martin@bazleyfamily.co.uk

Spammers, please use this alternative address:

 mailto:eternal@damnation.hell

Please be patient!  I can only gain access to my email account every two
weeks or so, so don't expect immediate replies.

If you're a real technophobe, there's always snail mail:

Martin Bazley
Flat 8
349 North End Road
Fulham
London
SW6 1NN
ENGLAND

=== 11.4 == And finally... ==

Please visit http://swirlythingy.deviantart.com and view my (limited)
artistic talent.  Firefox is recommended, but Netsurf will work fairly well.
WebsterXL is a joke.

Christopher's website is at http://kingfishercorner.eu :

Items by him include ScreenGrabber (screenshot-taking module), BSP (front-
 end for the Doom BSP nodes builder) and Grab II (save current ROM, RAM or
 tool sprites to disc).
Items by Harriet include Textseek (locate ASCII text in multiple files),
 Switch (freestanding version of Director's manipulate-open-windows facility)
 and Wimpdrain (allows you to close any files that may have been left open).
Items by me include a selection of good Asylum and Doom levels, and a
 utility to count down the time until next Christmas.  Oh yes, and you can
 get Type on there as well!

Thanks for downloading Type!  (And a pat on the back to anyone who's managed
to read through this entire file in one go!)

_____________________________________________________________________________
Martin Bazley
26th May 2007

=== End