CHANGES

Summary

Maintainability
Test Coverage
-*- Text -*-
Changes from version 2.0 of the toolkit.

Due to a loss of source control for a time, not all changes are
represented in detail here.   However, the significant changes are
covered.  Changes are divided into External and Internal.  External
changes are those that affect a user of the toolkit.  Internal changes
are those that affect someone programming using the toolkit library.

Summary of External Changes
Toolkit setup:  A new configuration procedure is in place.  Edit the
    file urt.config (read README.conf for instructions) to
    configure the toolkit for your local installation.  
    Configuration files for some machines are included.

(Almost) all tools:
[-o outfile] option for explicit specification of output file.
    outfile='-' means send to standard output.
Input file name may be '-' for standard input.
If enabled (NO_OPEN_PIPES not defined in configuration file), a file
    name starting with '|' will be executed as a (sh) command.  If
    an input file, the output of the command will be read by the
    tool.  If an output file, the output of the tool will be sent
    to the standard input of the command.
If enabled, (NO_OPEN_PIPES not defined), a file name ending in ".Z"
    (and not starting with '|') will be decompressed (for input)
    or compressed (for output) using the unix compress command.
Most tools will process files containing multiple concatenated images.
    The exceptions are noted below and in the individual manual
    pages.  The only 'get' program that handles multiple images is
    getx11, and none of the 'cnv' programs handle multiple images.
Most tools add to a "HISTORY" comment in the RLE header.  The
    exception is rleaddcom.

Individual tools:
applymap    Now handles files with multiple images.  

avg4        Now handles files with multiple images.  

crop        New -b flag means to compute the bounding box (ala
        rlebox).  Input cannot come from a pipe if -b is
        given.  Now handles multiple images (even with -b).

fant        -o (origin) flag changes to -p (position).  New -o
        flag used for output file name.  Now handles files
        with multiple images.  Major changes by Jamie Painter,
        U of Utah -- inner loop rewritten in fixed point, gets
        from 50% to 500% speedup depending on hardware.  New
        -b flag uses filtering algorithm by Painter that is a
        little blurrier, but leaves fewer artifacts when the
        image has small features (e.g., lines).

mcut        Now handles files with multiple images.  -D flag
        (dither) changed to -d.  -d colors (number of colors
        to use) changed to -n colors.

mergechan    Now handles files with multiple images.  Each input
        file is viewed as a stream of images that are merged
        to produce a stream of output images.

pyrmask        Now handles files with multiple images.  

repos        Now handles files with multiple images.  Changed
        [-i xinc yinc] (incremental positioning) to 
        [-P xinc yinc].

rleaddcom    Now handles files with multiple images.  Adds the same
        comment(s) to all images.  Changed [-f infile] to 
        [infile].  Added -i for "in place" comment
        modification.  Works like the 'into' program -- writes
        the output to a temp file and then renames it onto the
        original.  Even works with compressed images.

rleaddeof    New program to add an end-of-image marker to images
        generated by programs that don't do so.

rlebg        Generates HISTORY comment.  [outfile] changes to 
        [-o outfile].

rlebox        Now handles files with multiple images.  

rlecomp        Name changed from 'comp' to avoid conflict with MH
        mail handling system.  Now handles files with multiple
        images (Two streams of input images merge into one
        stream of output images.)  The command line syntax
        changed to 'Afile op Bfile' from '-o op Afile Bfile'.
        There is no default operation now.  The new -o flag
        indicates the output file name.

rledither    New program.  Dithers an image against a given
        colormap using Floyd-Steinberg dithering.  Handles
        files with multiple images.

rleflip        Handles files with multiple images.

rlehdr        Now accepts multiple files and files with multiple images.

rlehisto    Handles files with multiple images (outputs
        concatenated histogram images.  For multiple channel
        images, the individual channel histograms are now
        overlaid on each other.  A new -c (cumulative) flag
        produces a cumulative histogram.  The -b flag causes
        the program to ignore the background color when
        computing the histogram scaling.  The default image
        size is changed to 256x256. (Some of these changes are
        courtesy of Gregg Townsend, University of Arizona).

rleldmap    Handles files with multiple images (but the colormap
        to be loaded is determined only once, and used for all
        images in the input file).

rlemandl    Creates a history comment.

rlenoise    Handles files with multiple images.

rlepatch    Handles files  with multiple images -- The set of
        files is treated as a collection of parallel image
        streams.  The n'th image in the first stream is patched
        with the n'th image in each of the patch streams.  The
        program exits as soon as one stream terminates.

rleprint    New program.  Prints all the pixel values (one pixel
        per line) in the input.  Not very useful because of
        the verbosity of its output.

rlequant    New program.  Quantizes images to a given number of
        colors using a variance-based algorithm written by
        Craig Kolb, Yale University.  Dithering code written
        by Rod Bogart, U of Michigan.

rlescale    Creates a history comment.

rlesetbg    Handles files with multiple images.

rleskel        Not really a program.  This source file provides a
        skeleton for a basic "filter" tool.  The program is
        not normally compiled and installed.  If it were, it
        would just copy its input to its output.

rlespiff    New program.  Uses a simplistic contrast enhancement
        process to "spiff up" an image.

rlesplice    New program.  Sticks two images together side by side
        or one above the other.  This can be accomplished with
        rlepatch, but this program is easier to use.  Written
        by Martin Friedmann, MIT Media Lab.

rlesplit    '-p prefix' changed to '-o output-file-name-prefix' to
        be consistent with the -o convention of the rest of
        the tools.  Always handled concatenated images.

rleswap        Handles files with multiple images.  Changed 
            -i input_channels to -f from_channels
            -o output_channels to -t to_channels
        Added     -o outfile

rlezoom        Handles files with multiple images.  The major change
        here is the addition of "floating point" zoom.  It
        uses a simple algorithm to super- or sub- sample the
        image for non-integral zoom factors.  It's a lot
        faster than fant, even if it doesn't look as good.  It
        could probably be faster if someone wants to rewrite
        the inner loop using all integer arithmetic.

smush        Handles files with multiple images.

to8        Handles files with multiple images.

tobw        Handles files with multiple images.

unexp        Handles files with multiple images.

unslice        No major changes.  Does not handle files with multiple
        images.

Conversion programs:

cubitorle    No major changes.  Creates a history comment.

dvirle        Updated to work with current McTeX distribution (not
        included, see the README).

giftorle    New program.  Converts a GIF image to RLE.  By David Koblas.

graytorle    No major changes.  Creates a history comment.

painttorle    Takes input from a file as well as stdin.  Creates a
        history comment.

rastorle    A number of bug fixes, so that it no longer produces
        pathological RLE files.  Handles 24 bit raster files.
        Creates a history comment.

rawtorle    New program.  Converts a variety of "raw" image
        formats to RLE.  From Martin Friedmann, MIT.

rletoabA60    New program.  Converts RLE to the Abekas A60 digital
        video disk format.

rletoabA62    New program.  Converts RLE to the Abekas A62 digital
        video disk format.

rletoascii    New program.  For making simple "line printer"
        pictures from RLE images.  Doesn't do any overprinting
        (if someone is serious about this output form, maybe you
        could add this enhancement).

rletogif    New program.  Converts a single channel RLE file to
        GIF.  Use rlequant, mcut, to8, or tobw to get a 1
        channel image from an RGB image.  By Bailey Brown, U
        of Michigan.

rletogray    Changed -p prefix to -o outprefix.

rletopaint    Change -i (invert) to -r (reverse).  Add -o outfile.

rletops        Color postscript output with -C flag.  50% speedup.
        The image is printed at the top of the page instead of
        the bottom.  A %%BoundingBox comment is now output.
        Most of these changes courtesy of Gregg Townsend, U of
        Arizona.

rletorast    New program?  Converts RLE to Sun RASTER (8 or 24 bit,
        depending on input).

rletoraw    New program. Convert RLE to simple RGBRGBRGB raw
        format.  By Martin Friedmann.

rletotiff    New program.  Convert (24 bit) RLE images to TIFF.
        Requires Sam Leffler's 'libtiff'.  See cnv/README.  By
        Bailey Brown, U of Michigan.

targatorle    No major changes.  Creates history comment.

tifftorle    New program.  Convert (24 bit) TIFF images to RLE.
        Requires Leffler's libtiff.  By Bailey Brown, U of
        Michigan. 

wasatchrle    No major changes.  Creates history comment.

Display programs:
get4d        New program.  Displays RLE files on a Silicon Graphics
        Iris 4D (or the new IBM RS6000 with the GL compatible
        graphics).

getX        Changed -l levels to -n levels.

get_orion    Changed -b (black & white) to -w (for consistency).

getap        Change -i (inverse) to -r (reverse video).

getbob        No major changes.

getcx3d        No major changes.

getfb        No major changes.

getgmr        No major changes.

getiris        No major changes.

getmac        Updated to use 32 bit quickdraw if present.  Still
        only runs under MPW (not even A/UX).

getmex        No major changes.

getqcr        No major changes.

getren        Works with devices other than hp98721.

getsun        Now forks into background.

gettaac        New program.  Displays on a TAAC1 under the SunView
        environment.

getx11        New program.  All-singing-all-dancing display program
        for X11.  Includes zoom and pan and a "movie mode".

read98721    New program.  Reads an image from a HP "Renaissance"
        display and writes an RLE file.


****************************************************************
Internal changes:
One of the most obvious changes is the new configuration procedure.
This should make it much easier to maintain the toolkit in a
heterogeneous environment.  The configuration files and makefiles are
designed so that you could maintain multiple binary trees from a
single source tree, simply by specifying different destination
directories (and 'making clean' when switching machines).  There are a
lot of configuration variables, but most systems require only a few
changes from the default.  The large number of variables give us the
best flexibility.

Another "cataclysmic" change is the change in function and data
structure names.  Rather than enumerate the changes, you should refer
to the 'sv.sed' file in the toolkit root directory.  To convert your
toolkit program to use the new headers and library, you simply
    sed -f sv.sed myfile.c | into myfile.c
(Of course, if you are at all paranoid, you won't do this on the only
copy.)  You should examine the output for bizarre comments (I have not
run into any code problems in our conversion, just mangled comments).
A common one is to find the word 'hdral' (used to be 'global'), as one
of the changes was to get rid of the term 'globals' when refering to
the RLE header structure.  All the 'sv_' prefixes on function,
variable, and structure field names went away or changed to 'rle_'.
Again, see sv.sed for the details.

A lot of work was put into cleaning the code and making it compatible
with as many C compilers as possible (including ANSI).

Now, to the more specific changes.

exit_status.h:    This distribution actually includes this file,
        required by getx11.

rle.h        This file used to be called "svfb_global.h".  It now
        includes full prototypes for almost all the library
        functions (a few are defined in rle_raw.h).  This
        header is C++ compatible (i.e., you can include it in
        C++ programs).  However, the toolkit will not, in
        general, compile with C++.  Byte order dependencies
        were removed (hurray!)

rle_code.h    Used to be called XtndRunsv.h.  Byte order and word
        size dependencies removed.

rle_put.h    Used to be called svfb.h.

rle_raw.h    Used to be called rle_getraw.h, but since in includes
        definitions for rle_putraw, the name was changed.
        Includes prototypes for ANSI and C++ compilers.

Runput.c    Used to be called Runsv.c.  Major change here is due
        to Mike Muuss, Ballistic Research Lab.  The code is
        now totally byte order and word size independent
        (well, it may assume that a short is at least 16
        bits).  This should make Cray users happy.  Another
        fix eliminates the random values that were written
        into unused bytes of the file.  You should now be able
        to 'cmp' two RLE files.

bstring.c    Conditional on NEED_BSTRING

cmd_name.c    NEW. A convenience routine to extract the "command name"
        from argv.  Used in error messages.

colorquant.c    NEW. Variance-based color quantization code from Craig
        Kolb, Yale Univ.

dither.c    ANSI compatibility.

getopt.c    Conditional on NEED_GETOPT.

rle_addhist.c    NEW. Add to the HISTORY comment.  From Andrew Marrot,
        Curtin U of Tech. (Australia).

rle_cp.c    NEW.  Copy the "rest" of an rle image from input to
        output.  To properly handle concatenated images, the
        process of copying got more complex.  Thus, it was
        encapsulated here.

rle_getraw.c    After the last line is read, but before it is
        returned, any data remaining in the image ("above the
        top") is skipped.  This makes it easier to process
        multiple-image files.  This change should be
        invisible.  Now byte order & word size independent.
        Thanks to Thomas Palmer (NCI supercomputer facility)
        and Mike Muuss for this.  

rle_getrow.c    Same skipping logic as above added.  Byte order and
        word size independence as above (thanks Mike!).
        Routines added to make error checking rle_get_setup
        easier.

rle_getskip.c    NEW.  Skip scanlines in the input.

rle_global.c    Name changed from svfb_global.c.  Global variable
        initialization.

rle_open_f.c    NEW.  Common file opening code.  Try to encapsulate
        common code (e.g., '-' for stdin/stdout, pipe
        semantics, compressed file interface) and system
        dependencies ('b' for binary IO on some systems).  Has
        nothing to do with RLE files, really.

rle_putraw.c    Changed from sv_putraw.c.  Byte order/word size
        dependencies removed.

rle_putrow.c    Was sv_putrow.c.  Byte order/word size dependencies
        removed.  sv_setup changed to rle_put_setup, and first
        argument removed.  Added rle_put_init function -- like
        rle_put_setup, but just initializes the header
        structure, doesn't do any I/O.  Useful for appending
        more scanline data to an existing image.

rle_rawrow.c    NEW.  Convert "raw" data to normal scanline data.

sVsetlinebuf.c    Conditional on NEED_SETLINEBUF

scanargs.c    More portable.

vaxshort.c    NEW.  Support for byte order/word size independence.


Local variables:
fill-prefix: "\t\t"
End: