Table Of Contents

1.0 Kit installation instructions
2.0 Project information
3.0 Keeping in touch
4.0 About loading packages
5.0 Appendix A - Win32 and Unix beginners
6.0 Appendix B - Procmail project files
7.0 Appendix C - Perl project files
8.0 Appendix D - Other projects


1.0 Kit installation instructions

1.1 Briefly

$Id: README.html,v 2.13 2003/11/17 22:54:42 jaalto Exp $

[The Sourceforge Public Summary] Emacs Tiny Tools is a collection of libraries and packages, which are designed to be OS and X/Emacs platform independent. E.g. configure load-path automatically, URL handler, easy-delete, mail complete and many more. This file is README.txt included in Emacs Tiny Tools kit. It contains instructions how to install a cross platform Emacs/XEmacs/ Unix/Win32 compatible utilities for wide variety of tasks: diff/patch; searching, replacing, caching files, automatic load-path setup and more.

1.2 Unpacking

In Win32 use Winzip found at <http://www.winzip.com/> and in Unix use unzip available at <http://www.info-zip.org/pub/infozip/>. Extract the kit and it will create directory according to the version number: emacs-tiny-tools.YYYY.MMDD. The kit build method is only for your convenience and it is not necessary to run the build command in order to use the Emacs Lisp files or to read the documentation under /doc.

      % mkdir -p $HOME/elisp/packages/
      % cd $HOME/elisp/packages/
      % gzip -dc ~/tmp/download/emacs-tiny-tools*.gz | tar xvf -
    

1.3 Quick install – personal

1.3.1 Activating tiny tools

If you just want to install the package for your personal use, add following lines at the start of your Emacs initialization file. Lines will configure your Emacs to be aware of all lisp paths under $HOME/elisp or $HOME/lisp.

      ;; $HOME/.emacs
      ;; PLEASE READ DOCUMENTATION OF TINYPATH FOR MORE.

      ;; Load package "tinypath.el", drop the ".el" from command
      ;; The rest of the code can be anywhere in startup file.
      (load "/path/to/tinypath")


      ;; Next call auto configures most of the packages with defaults
      ;; See M-x tiny-setup-display and C-h f tiny-setup

      (require 'tiny-setup)
      (tiny-setup 'all)

      ;; Perhaps you would like to load some package immediately.

      (require 'tinymy)

      ;; End of example
    

1.3.2 What next? Where I put other lisp packages?

When the tinypath.el package is active, you can pretty much put packages or individual lisp files anywhere, provided that they reside under $HOME/elisp. you can create or delete directories and move files around to organize your lisp files. The only restriction is that you do not use any symlinks; not to directories or not to files (reason is explained in tinypath.el documentation). Let's suppose the hierarchy of lisp files look something like this:

      $HOME/elisp/
                  |
                  +-packages/
                  |         |
                  |         + emacs-tiny-tools-NNNN.NNNN/
                  |         + jdee-NN.NN/
                  +-other/
                  +-my/
    

Now, perhaps you see an utility.el in gnu.emacs.sources that you want to use. How do you install it? Just drop it in, say, $HOME/elisp/other/ directory and call M-x tinypath-cache-regenerate. After that Emacs knows the package now and in next Emacs sessions. You still have to add relevant lines to your Emacs startup files which activates the package. Look into utility.el and it's setup instructions, something like:

      # $HOME/.emacs

      <leave those tiny-package definitions here first>

      (load "utility")    ;; Start using the new file
      (utility-install)   ;; or whatever is needed to activate it

      # End of file
    

1.3.3 What tiny-setup installtion does?

The installation function tiny-setup logs actions made to Emacs into Messages or XEmacs Message-Log buffer. The output looks something like this with the default setting all. For more finer control for each individual feature, refer to C-h f tiny-setup. Messages that read "No options to configure" means that there is no default installation (yet) and you have to manually take the package into use by reading its documentation. The setup is very conservative: anything serious in existing emacs will not be overridden.

      TinySetup: tinyappend      configured with `bind'
      TinySetup: Key "C-c=" set to `tinyappend-end'.
      TinySetup: Key "C-c-" set to `tinyappend-beg'.
      TinySetup: Key "C-c_" set to `tinyappend-kill'.
      TinySetup: Key "C-c|" set to `tinyappend-yank'.
      TinySetup: tinybookmark    configured with `defalias'
      TinySetup: tinybuffer      configured with `bind'
      TinySetup: tinycache       configured with `autoload'
      TinySetup: tinychist       No options to configure.
      TinySetup: tinycomment     configured with `bind'
      TinySetup: Key [(meta 59)](M-;) set to `tinycomment-indent-for-comment' (FORCED).
      TinySetup: tinycompile     configured with `autoload'
      TinySetup: tinydesk        configured with `activate'
      TinySetup: tinydiff        configured with `autoload'
      TinySetup: `auto-mode-alist' now contains (\.diff\' . turn-on-tinydiff-mode)
      TinySetup: `auto-mode-alist' now contains (\.patch\' . turn-on-tinydiff-mode)
      TinySetup: tinydired       configured with `autoload'
      TinySetup: tinyeat         configured with `bind'
      TinySetup: Key (ESC DEL) already has has definition `backward-kill-word'. Not set to `tinyeat-erase-buffer'
      TinySetup: tinyef          configured with `autoload'
      TinySetup: tinygnus        configured with `autoload'
      TinySetup: tinyhotlist     configured with `autoload'
      TinySetup: tinyigrep       configured with `autoload'
      TinySetup: tinyindent      No options to configure.
      [And so on...]
    

1.4 Quick install – site wide

If you are Using PC or administrate Linux and you have both XEmacs and Emacs installations; plus you have lot of extra Emacs packages that are available form the Net, you need to tell the different locations where the installed lisp directories are. In this case, you have to set the tinypath-:load-path-root yourself. In previous personal installation example, this was automatically determined.

      ;;  Your lisp/site-start.el should contain this installation code.
      ;;  STILL, IN SITE-WIDE SETUP, THE CACHE IS STORED TO EACH USER'S
      ;;  HOME DIRECTORY.
      ;;
      ;;  List of ROOT directories where all Emacs lisp
      ;;  files are located. Update list according to your site.
      ;;  No need to optimize away non-existing directories,
      ;;  because they will be ignored.

      (setq tinypath-:load-path-root
        (list

          (if (boundp 'xemacs-logo)               ;; ROOT DIR ONE
              "Your-XEmacs-NN.NN/lisp"
            "Your-Emacs-NN.NN/lisp")

          (if (boundp 'xemacs-logo)               ;; ROOT DIR TWO
              "Your-XEmacs-site-list-directory"
            "Your-Emacs-site-list-directory")

          "~/elisp"                               ;; ... and so on
          "~/lisp"))

      (load "ABSOLUTE-INSTALLATION-PATH-HERE/tinypath")

      ;; End of example
    

After the code above, The site users can start configuring all the packages found in load-path. Appropriate startup code is needed for each user's $HOME/.emacs files to activate the packages, unless you include some site wide defaults.

1.5 Install from scratch – without prior elisp directory

1.5.1 Preconditions for Unix

If you don't have your private Emacs lisp directory yet, it's time to create one. Decide where you want to put future downloaded packages. Traditionally this has been $HOME/elisp. Run command:

      % mkdir $HOME/elisp
      % mkdir $HOME/elisp/config  # for configuration settings
      % mkdir $HOME/tmp           # Make sure this exists for temp files
    

1.5.2 Preconditions for Win32

In Windows operating system, there is no default HOME, so you have to choose one directory for your personal use. Emacs installation in Win32 might look like this:

      C:/emacs/emacs-19.34/       # your old Emacs
      C:/emacs/emacs-20.7.1/      # the new Emacs
      C:/emacs/emacs-21.2.2/      # more newer Emacs
      C:/home/elisp               # your private lisp package dir

      dos> c:
      dos> md \home
      dos> cd \home
      dos> md tmp
      dos> md elisp
      dos> md elisp\config
    

At minimum, you must add environment variable HOME and make your Win98/NT/W2K/XP have it visible at boot time. In Win9x, add this line to your c:\autoexec.bat:

      set HOME=c:\home
    

In other Windows versions, use Control Panel => System => Environment. Make sure you also create the directory to disk. Refer to NT Emacs FAQ at <http://www.gnu.org/software/emacs/windows/ntemacs.html> for more complete information about installing Win32 Emacs. After this line, you Emacs translates tilde(~) character into reference to the $HOME. Your Emacs startup file must reside at directory $HOME/.emacs which is the traditional way of saying "Emacs startup file is under HOME". In win32, this means that the location would be:

      c:\home\.emacs
    

1.5.3 Making Emacs aware of elisp packages

Emacs can't load additional packages if it doesn't know where they are located. The traditional way has been to add appropriate paths one by one to the load-path variable. Tiny Tools provides more versatile and easier path configuration as demonstrated below:

      ;; $HOME/.emacs -- Emacs startup file

      ;;  These two lines are not necessary, since tinypath.el will
      ;;  handle all this. It has been the traditional Emacs way
      ;;  to add paths in case you need to know
      ;;
      ;; (require 'cl)
      ;; (pushnew  (expand-file-name "~/elisp") load-path :test 'string=)

      (load "ABSOLUTE-INSTALLATION-PATH-HERE/tinypath")

      ;; End of $HOME/.emacs
    

The "old" method required you to track every change of Emacs paths and manually keep it up to date. It is much easier to let TinyPath to make all this path configuration automatic.

1.6 Make procedure

Note: YOU MUST CONFIGURE load-path.el in the kit if you compile the packages. Save your modified copy for next installation and use the -l switch for the perl makefile.pl. It is not strictly needed to compile anything. in fact the maintainer would prefer if you used non-compiled versions of the lisp files. Bug reports from compiled files are useless for tracking the cause of an error.

Due to platform independence, Perl has been chosen for all scripting tasks. It offers more expressive power than make(1) which is old Unix-only solution. The older make compatible "makefile.mak" method is no longer supported due to its vulnerable syntax (old time Makefile users know what a missing TAB causes). The old makefile.mak file is preserved for educational purposes which you can take a look if you need makefile example for programming languages like Java or C++.

You need Unix Perl 5.004+ in order to use the current build method Perl for Windows is included in Cygwin. To build the kit, change directory to bin/ and feed the makefile.pl to perl. In Win32 platform, add make directive unix2dos and in Unix add dos2unix which will fix the line endings. Substitute option emacs with xemacs if you're compiling for XEmacs.

      % cd bin/
      % perl makefile.pl --help
      % perl makefile.pl --binary emacs --verbose 2  dos2unix all
                         |                           +======= ===
        All command line options must                |
        come BEFORE build options                    |
                                                     |
                                Two build options here
    

In case everything does not compile right, due to missing lisp packages, modify load-path.el to include any additional directories. Make a copy of it to yourself for later updates and supply your version with added option. The "\" at the end of line means that the line continues. In Unix, you literally type that character, in Win32, you just type everything as one line.

      %  perl makefile.pl --binary emacs --verbose 2  \
         --load your-modified-copy-here/load-path.el  \
         dos2unix all
    

Gnus note: packages tinygnus.el and tinymail.el require the very latest development version of Gnus. Modify your copy of load-path.el to include path to the latest Gnus version.

1.7 Autoload files

If you choose not to use file tiny-setup.el and function tiny-setup, you could add following statements to your Emacs startup file in $HOME/.emacs. The autoload file provide "functions" that are immediately available in Emacs, but they do not load any packages. This is better than using require commands, because it makes your Emacs start faster.

      ;; $HOME/.emacs

      (load "ABSOLUTE-INSTALLATION-PATH-HERE/tinypath")

      ;;  These won't modify anything in your existing Emacs.

      (require 'tiny-autoload-loaddefs-tiny)
      (require 'tiny-autoload-loaddefs-other)

      ;;  Now, configure anything as you would like.
      ;;  Each feature must be taken into use separately.
      ;;  Read the documentation sections at the beginning of each file.

      ;; End of $HOME/.emacs
    

1.8 Minimum installation

If you are tight of space or otherwise do not need all the tools or if you're only interested in specific package, here are the instructions how you use minimum installation. The basic idea is to include libraries + package(s). Most of the packages require only four core libraries, but others may need more e.g. due to XEmacs compatibility.

      tinyliba.el     - autoloads
      tinylibb.el     - backward compatibility; Emacs version changes
      tinylibm.el     - macros and other low level forms
      tinylib.el      - main library
      tinylibxe.el    - XEmacs support library

      + NOW select packages that you're interested in.
    

Let's take an example how you find out what packages would you need for "White Paper Mode" tinytf.el.

1.9 Makefile.mak (obsolete)

The old makefile.mak from very early Unix-only releases has been included, but the makefile is not supported and no fixes are incorporated even if suggested. The file has been kept in the distribution, because it may have some educational value to learn makefiles in Unix.

1.10 Submitting bug reports

IT IS IMPORTANT THAT YOU USE NON-COMPILED FILES AND SUBMIT THE BACKTRACE Each lisp package has one or two contact functions. When you find an error, immediately contact maintainer with the bug report function. The XXX is prefix of the package, like tinyurl for tinyurl.el

      M-x load-library RET package.el RET             # load non-compiled
      M-x turn-on-emacs-debug RET                     # From tinyliba.el

      ...  repeat what you did until the point of error ...

      M-x XXX-submit-bug-report       << prefer this if it exists >>
      M-x XXX-submit-feedback

      ... and copy paste any relevant information, like the lisp
      ... error buffer *Backtrace* that might have been generated.
    


2.0 Project information

2.1 Project location

The file you're currently reading is supposed to be README.txt, included in the Tiny Tools distribution kit. The development happens at sourceforge and you can download the latest kit from there. To monitor the project, go to the project WWW page and select from "Latest File Releases" tile-box and "envelope" which reads Notes/Monitor. The Project WWW page and ftp download areas are below. Please point your web browser to these locations to see the latest news. The project pages contain links to all the rest of the pages.

2.2 Platform support

Note: Win32 XEmacs versions prior to 21.2 are buggy. Under Win32 don't try to use anything older than 21.2.20.

2.3 Library note

IF YOU HAVE OLD tiny*el FILES, DON'T MIX THEM WITH NEW KIT. DON'T EVER COPY INDIVIDUAL FILES AROUND. THAT WON'T WORK.

Functions may have been removed from the libraries due to rearrangements and new coding methods. The old versions normally won't work with the new kit. Please don't use the old versions. The maintainer concentrates to questions regarding only to the latest released kit.

2.4 Emacs plug-in module – TinyPgp project

Project is stalled/broken at the time of ing 2000-01-08. No fixes are planned in any near future.

Years back the coding of module TinyPgp started. Lot of nights and not-so-well sleep went by and there were over 300 versions made alone with the Pgp support. It was black and deep swamp: different MUAs (RMAIL, VM, Gnus – beta versions every week), different PGP versions, 2.6.x (had so-and-so command line support), PGP 5.x and 6.x (that were not designed at all Unix in mind; they had no good batch command line support), GPG, which only worked at Unix at the time, and there was no way to get it compiled in HP-UX, also no windows version were available at that time.

TinyPgp package offered integration to TM/SEMI to send PGP/MIME and supported lot of different re-mailers, direct management of re-mailer accounts, multiple key rings, multiple key-access methods to key servers and so on...

It all worked for some time, 2 years, but the variables in this soup were too many for the maintainer to be able to continue getting them all to work together. Maintaining a single package drained efforts from all other projects (perl, procmail and other Emacs tools)

For the time being, the TinyPgp project is in stall (perhaps not yet abandoned), and you can expect it to be non-functional. You can try it out, bug reports are welcomed, but no problems will be fixed in near future. All bug reports, will saved and addressed if time allows. There is vision to get once-excellent re-mailer support working again and get back to "anonymous" business in the spirit of pioneer anon.penet.fi. We'll see if the package is ever restored again. Please use http://mailcrypt.sourceforge.net/


3.0 Keeping in touch

3.1 ICQ Contact

Development location is in Europe, Finland UTC+2 and in case you use ICQ client from http://www.icq.com/ you can check online status with ICQ login "jari-aalto"/82313129. Visit <http://web.icq.com/wwp?Uin=82313129>.

Adrian Aichner mailto:adrian@xemacs.org #todo: http://www.xemacs.org/Documentation/packageGuide.html

3.2 Mailing list

There is no mailing list for the project. Please contact the maintainer directly.

3.3 Updates: Watching files

All the sourceforge projects can also be "watched" and make them send you an email whenever there is new release available. See the small "letter" or "paper" icon next to the the published kits at sourceforge /project/tiny-tools main page.

3.4 Updates: Automatic fetch method

It is best to use some general and easy update software which can periodically pull out the release. You may already be familiar with wget(1) whose binaries for Unix and Win32 can be found at: http://www.gnu.org/software/wget/wget.html

There exists a cross platform Perl script which offers similar capabilities, including a configuration file and ability to find newer releases from the download locations (wget only gets what you instruct). It may suit better for automatic retrieval of material with changing version numbers. Visit project <http://perl-webget.sourceforge.net/>. You can use the program like this:

      % mywebget.pl --help
      % mywebget.pl --new --overwrite --verbose HTTP-OR-FTP-FILE-LOCATION
    

Define your $HOME/config/mywebget/mywebget.conf file where you cache URLs that you want to retrieve periodically and add appropriate entries. Start by setting these variables and put them into your startup file:

      % mkdir -p $HOME/elisp/packages        # drop directory
      % mkdir -p $HOME/config
      % setenv MYWEBGET_CFG $HOME/config/mywebget/mywebget.conf
    

Next, add following contents to the configuration file:

      #  $HOME/conf/mywebget/mywebget.conf -- Configuration file

      ROOT  = $HOME
      ELISP = $ROOT/elisp
      EPKG  = $ELISP/packages

      tag1: my-emacs-lisp         # keep tag name prefix "my"

          lcd: $EPKG              # chdir to elisp/packages

          tag2: my-tiny-tools

              # This does not have to be the exact file name,
              # The name is used as template and newer fiel will be found

              ftp://download.sourceforge.net/pub/sourceforge/tiny-tools/emacs-tiny-tools-1999.0909.zip new:

      # end of configuration file
    

After putting the tags in place, you only have to remember the tag to pull off latest version of the package. Refer to Perl script for more. You probably want to do this bi-weekly to update your favorite programs by a cron. You do not have to update the "version name" in the file, the new: directive will automatically retrieve the latest version for you:

      % mywebget.pl -v -o -n -t tiny-tools
      % mywebget.pl -o -t tiny-tools          (or simply this)
    

3.5 What does prefix "tiny" mean

The first package made was tinyappend.el, a simple utility to gather selected areas of text somewhere convenient. Since then the prefix "tiny" has been preserved in front of every lisp file. The word has no other meaning.

3.6 Thank you section

The life with Emacs evolved in the direction called "Tiny Tools"; modules that got initially written in the past years starting with Emacs 19.28. The current code is aimed to be XEmacs/Emacs Unix/NT platform independent. The cross platform could not be possible without following testers that patiently kept reporting bugs and making improvement suggestions. Most sincere thanks to you all.


4.0 About loading packages

4.1 Dynamic byte compilation note

Please read these instructions with some salt, because the maintainer is not 100% sure of the accuracy of this explanation. Please feel free to suggest corrections to this text.

All the files in Tiny Tools kit turn on the dynamic byte compilation flag, which appeared in Emacs 19.29 and XEmacs 19.14. That's something you don't have to worry about, but I think you are would be interested in hearing, that it has some nice benefits over the normal compilation. If you say

      (require 'tinylibm)
    

the statement used to mean "load library tinylibm". All functions were imported into emacs in a whip. But that's different now with dynamically compiled files. Now it means "load STUBS from library tinylibm". The STUBS are pointers in a table to all the rest of the functions in the library. So, the functions are not actually loaded to your Emacs; neither does your Emacs suffer from sudden memory bloat.

When the actual function is called, Emacs automatically substitutes the STUB with the function definition by loading it from the library. Just that function, not the others. That's the benefit of the dynamic byte compilation in a nutshell.

By the way, if you happen to need some function from the libraries, don't do this:

      (require 'tinylimt)     ;; mail tools
    

Do not do this either, if you need something from the main library:

      (require 'tinylib)
    

The correct way to let your emacs know about all the existing library functions, is to load the m library. It will define all the necessary autoloads to rest of the function and you don't have to worry about the location of a particular function

      ;;  Define everything, publish interfaces. Defines
      ;;  backward compatibility functions, autoloads etc.
      (require 'tinylibm)
    

4.2 Use autoloads

When you install packages, try to avoid loading them from your $HOME/.emacs like this

      (require 'tinytab)  ;; TAB minor mode
    

Because it means that the whole package is loaded (or STUBS) if you do have many require commands, your Emacs startup time grows proportionally. You hate slow Emacs startup; right? Okay, there is much better way to load files; called autoload. It means that you tell Emacs; that "function exists in package xxx". When function or feature is called (and the autoload triggers), Emacs loads function from the package. Some day you don't use some feature in your emacs, sometimes you use, and Emacs grows and loads the packages when you happen to need them. No need to use require to have it all at once.

Now, if you read carefully the installation section from every package and prefer copying the autoload setup instead, you will have the most optimized way to install the package to your .emacs. If some package doesn't have autoload choice, complain immediately to the Author. The package writer should have thought the autoload possibility too. There may also be a note that package can't be autoloaded, so in that case there is no other possibility that to require it. For even more slicker and faster Emacs startup sequence, see package TinyLoad which you can uset to optimise lisp file loadings even more.

4.3 Customizing packages

New Emacs releases 19.34+ come with the package defcustom.el bundled. If you have limited lisp skills or if you want an easy interface to packages' variables, then you can customize the modules. The group is completed when you press tab key:

      M-x customize-group RET group RET
    


5.0 Appendix A - Win32 and Unix beginners

5.1 Prompt syntaxes

If you're just starting to use Windows or have never heard of Unix, here is a short course of the terms and lingo you see all the time in the documentation:

      %       MEANS: the command prompt where your cursor is
      $       MEANS: the command prompt as above, just different shell
      >       MEANS: the command prompt as above, again some other shell
    

5.2 Dos and Unix command equivalences

The shell (DOS in Win32) where you type the command does not usually matter, but the command you see may not be available in Win32. A crash course would be:

      Unix    In Windows
      -----   ------------------------------------------------------
      cp      MEANS  "copy" command
      mv      MEANS  move, which is combination of "copy" and "del"
      ls      MEANS  list, which is "dir"
      rm      MEANS  remove, which is "del"
      ln      MEANS  link, Sorry, you're out of luck in Win32.
                     --> do a complete tree or file "copy" to destination.
      chmod   MEANS  change modes, ignore these in Win32
      mkdir   MEANS  make directory, "md"
      --------------------------------------------------------------
    

Here is an example of one instruction, similar to what you can expect. The explanation has been "opened" for you to the right hand in double quotes.

      % cp file1.txt file2.txt    "Copy file1.txt to file2.txt"
    

5.3 Calling perl programs

In Win32, the perl file (.pl) must be called differently that in Unix. In Unix you must make the files executable first, then just type their names to run them.

      % chmod +x bin/*        "Make all files in bin/* executable"
      % cd /bin
      % ./makefile.pl --help  "Run the perl script t2html.pl in bin/"
    

In Windows, there is no such command as chmod and Windows does not know that perl scripts are runnable programs. You must prepend the perl interpreter in front of every call an possibly add -S to instruct to search the script along your PATH variable. The following calls would also work in any environment:

      dos> perl t2html.pl --help         (Notice "perl" at front)
      dos> perl -S t2html.pl --help      (If you put the script along PATH)
    

5.4 Changing environment settings

The environment variables in Unix are prefixed with dollar and written in all caps, like talking about $PATH. Read it like this:

      % echo $PATH         (in Unix, display variable's content)
      dos> echo %PATH%     (same in Win32 dos prompt)
    

If you're instructed to change any environment variables, you must open the c:\autoexec.bat in Win9x with some text editor and modify the contents. In WinNT/2000 you must edit the start => Control Panel => System => Environment. Windows Millennium uses that too. Reboot after changes to make windows star using the new settings. WinNT/2000 is smarter, press "Apply" button in "Environment" dialog and you're all set to proceed.


6.0 Appendix B - Procmail project files

Procmail development has been moved to sourceforge projects: pm-lib and pm-doc.


7.0 Appendix C - Perl project files

Perl development has been moved to sourceforge under projects: perl-text2html, perl-webget, perl-dyndns, cvs-tools.


8.0 Appendix D - Other projects

Javascript module library is under sourceforge project js-tools.

Copyright (c) 2003 by Jari Aalto. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/). Distribution of the work or derivative of the work for commercial purposes in any form is prohibited unless prior permission is obtained from the copyright holder. (VI.B LICENSE OPTIONS)

This file has been automatically generated from plain text file with Perl script t2html.pl v2003.0830
Document author: Jari Aalto
Url: http://tiny-tools.sourceforge.net
Contact: <jari.aalto@poboxes.com>
Last updated: 2003-09-12 15:45