Here is an alternate command-line user interface for the IJG JPEG software.
It is designed for use under MS-DOS, and may also be useful on other non-Unix
operating systems.  (For that matter, this code works fine on Unix, but the
standard command-line syntax is better on Unix because it is pipe-friendly.)

With this user interface, cjpeg and djpeg accept multiple input file names
on the command line; output file names are generated by substituting
appropriate extensions.  The user is prompted before any already-existing
file will be overwritten.  See usage.alt for details.

Expansion of wild-card file specifications is useful but is not directly
provided by this code.  Most DOS C compilers have the ability to do wild-card
expansion "behind the scenes", and we rely on that feature.  On other systems,
the shell may do it for you, as is done on Unix.

Also, a DOS-specific routine is provided to determine available memory;
this makes the -maxmemory switch unnecessary except in unusual cases.
If you know how to determine available memory on a different system,
you can easily add the necessary code.  (And please send it along to
jpeg-info@uunet.uu.net so we can include it in future releases!)


INSTALLATION
============

You need to have the main IJG JPEG distribution, release 6 or later.
Replace the standard cjpeg.c and djpeg.c files with the ones provided here.
Then build the software as described in the main distribution's install.doc
file, with these exceptions:

* Define PROGRESS_REPORT in jconfig.h if you want the percent-done display.
* Define NO_OVERWRITE_CHECK if you *don't* want overwrite confirmation.
* You may ignore the USE_SETMODE and TWO_FILE_COMMANDLINE symbols discussed
  in install.doc; these files do not use them.
* As given, djpeg.c defaults to GIF output (not PPM output as in the standard
  djpeg.c).  If you want something different, modify DEFAULT_FMT.

You may also need to do something special to enable filename wild-card
expansion, assuming your compiler has that capability at all.

Modify the standard usage.doc file as described in usage.alt.  (If you want
to use the Unix-style manual pages cjpeg.1 and djpeg.1, better fix them too.)


Here are some specific notes for popular MS-DOS compilers:

Borland C:
  Add "-DMSDOS" to CFLAGS to enable use of the DOS memory determination code.
  Link with the standard library file WILDARGS.OBJ to get wild-card expansion.

Microsoft C:
  Add "-DMSDOS" to CFLAGS to enable use of the DOS memory determination code.
  Link with the standard library file SETARGV.OBJ to get wild-card expansion.
  In the versions I've used, you must also add /NOE to the linker switches to
  avoid a duplicate-symbol error from including SETARGV.

DJGPP (we recommend version 2.0 or later):
  Add "-DFREE_MEM_ESTIMATE=0" to CFLAGS.  Wild-card expansion is automatic.


LEGAL ISSUES
============

This software is copyright (C) 1991-1998, Thomas G. Lane.
Terms of distribution and use are the same as for the free IJG JPEG software;
see its README file for details.

The authors make NO WARRANTY or representation, either express or implied,
with respect to this software, its quality, accuracy, merchantability, or
fitness for a particular purpose.  This software is provided "AS IS", and you,
its user, assume the entire risk as to its quality and accuracy.
