










LJVGA:  VGA Print Screen Utility

Version 2.00

Copyright  1991-1993 Ares Technologies.  All Rights Reserved.

























This document was produced in Microsoft Word for Windows 2.0 and
typeset on an HP LaserJet III.


We use only high-quality Maxell brand diskettes.


VGA is a trademark of International Business Machines
Corporation.
Hewlett-Packard, HP, and HP LaserJet are registered trademarks of
Hewlett-Packard Corporation.
Microsoft, Windows, and Word for Windows are registered
trademarks of Microsoft Corporation.
Maxell is a registered trademark of Maxell Corporation.
All other trade names mentioned in this document are the property
of their respective holders.

INTRODUCTION

LJVGA is Terminate-and-Stay-Resident (TSR) program that allows
you to print any VGA or Super VGA screen to an HP Laserjet or
compatible printer.  With a memory overhead of only 9k minimum,
you can print anything you can display on your VGA card -
graphics, text, even hi-res text and 256-color screens!

LJVGA is simple to use.  Just run the command LJVGA, and you're
ready to print anything!  Hitting the Print Screen key (PrtSc)
will activate LJVGA, causing it to print your current screen to
the printer.  Text screens print just like they look, with lines
and other special characters you don't usually get.  Graphics
screens are automatically scaled to the resolution and page you
choose.

There are no special tricks to remember, no special hot-keys to
memorize.  LJVGA does not interfere with the way you normally
work, it simply waits in memory until you hit the Print Screen
key.  Nothing could be simpler!


FEATURES

LJVGA is without a doubt the best value available in print screen
software.  The small memory requirements provide you with
tremendous power and flexibility.  Just look at the options you
get!

   + Fast printing of any screen, graphics or text, at any
     resolution, in any orientation,

   + Support for the new HP LaserJet 4,

   + 7 varieties of dithers, contrast and brightness controls,
     and more for unprecedented image control,

   + Robust printer control including 4 orientation printing,
     support for multiple page sizes, and more,

   + Intelligent screen support, including the ability to print
     any user-defined rectangular area,

   + Advanced algorithms for page-fill and image aspect
     correction,

   + Color plane control for printing color separations,

   + Load into UMB's to save precious memory,

   + Complete TSR control - enable, disable, enable, and more,

   + And much, much more!


WHAT'S NEW?

LJVGA has been completely rewritten for this release.  The result
is a program that is leaner, faster, and much more capable!  If
you have used LJVGA before, you will notice a greatly expanded
option set.  These new options give you much greater flexibility
than ever before.

Many parts of the program have changed, but most of the changes
should be transparent to you.  There are some points you should
be aware of, however.

   + The options are now case sensitive.  "-a" is different from
     "-A".  This change was necessary to support the expanded
     option set.

   + Options are now "sticky."  This means that once you set an
     option, it will not change until you tell it to, no matter
     how many times you run LJVGA!

   + LJVGA now has a highlight bar to show you how the print is
     progressing.

   + You can now print any user-defined rectangular screen
     portion.


LJVGA FILES

The following files are part of LJVGA.  Depending on how you
received LJVGA, you may have slightly different files, and you
may receive the files either compressed or on diskette.

     INSTALL.BAT*   The automatic installation batch file.
     STAMP.COM*     The registration stamping utility.  Use this
                    file to register new copies of LJVGA.
     LJVGA.COM      The LJVGA program file.  This is the main
                    program.
     LQVGA.COM      The LQVGA program file.  This is the
                    companion utility for dot-matrix printers.
                    See LQVGA.TXT for more information.
     LJVGA.TXT      The LJVGA manual.
     LJVGA.PCL*     The LJVGA manual in HPPCL format.  Copy this
                    file to your printer for a high-quality
                    printed manual.
     LQVGA.TXT      The LQVGA manual.  Read this manual for more
                    information on LQVGA.
     REGISTER.TXT   The registration file.  Complete this file
                    and send it in to register a new copy of
                    LJVGA.
     SYSOP.TXT      The sysop and distributor registration form.
                    Complete this form and send it in if you are
                    a shareware distributor.
     DISTRIB.TXT    The distributor list.  This file lists public
                    distributors of Ares Technologies products.
     README.TXT***  This file contains information about the
                    latest changes to LJVGA.
     CHANGES.TXT*** This file contains the updated release
                    history for LJVGA.
     DESC.SDI**     This is an information file for BBS systems.
     FILE_ID.DIZ**  This is an information file for BBS systems.
     LJVGA???.ZIP*  This is the shareware version of LJVGA.
                    Upload this file to your favorite on-line
                    services.
     LQVGA???.ZIP*  This is the shareware version of LQVGA.
                    Upload this file to your favorite on-line
                    services.

   * These files are only available with the diskette version.
  ** These files are only available with the compressed version.
 *** These files are present only if needed.


REQUIREMENTS

LJVGA is very flexible and runs on most PC compatible systems.
However, you must have the following requirements to run LJVGA:

    An 8086 or better CPU.
    DOS 3.0 or later.
    A VGA or SuperVGA video adapter.
    An HP LaserJet, LaserJet 4, DeskJet or compatible printer.
    9-30k memory depending on the options selected.

LJVGA cannot print Windows screens or screens created by many
popular games.  These programs capture control of the computer so
that LJVGA cannot function.  Note that no harm will result if you
attempt to print while running such programs, however, LJVGA will
never activate and cannot print.


INSTALLATION

Installation of LJVGA is quick and easy.  You must have the
diskette version of LJVGA to use the automatic installation.
Just insert your diskette in your A: drive and type

     a:install a: c:\ljvga

This will install LJVGA to the LJVGA directory on your C: drive.
If you have different installation requirements, use the
following command:

     d:install d: <destination>

where d is the drive containing the installation diskette, and
<destination> is the directory where you want to place the LJVGA
files.

INSTALL will copy the program files onto your hard disk and run
the registration stamping utility to customize your copy of
LJVGA.  If you are installing LJVGA for the first time, you will
be asked to enter your name.  Enter the name your software is
registered under - either your name or your company's name.
After you do this, your copy of LJVGA will be customized for you.

If you want LJVGA to load every time you start your computer, you
will need to modify your AUTOEXEC.BAT.  Using any text editor,
open your AUTOEXEC.BAT file (located in the root directory of
your boot disk) and add the following lines to the end of the
file.

     SET LJVGA=
     C:\LJVGA\LJVGA

If your LJVGA is located in a directory other than C:\LJVGA,
modify the above lines appropriately.  Save the file and reboot
to load LJVGA!  If, once you have used LJVGA, you discover that
you use certain options frequently, you can edit your
AUTOEXEC.BAT and place the options at the end of the line that
reads "SET LJVGA=".  Then these options will take effect every
time you run LJVGA!

To print the formatted manual (registered versions only), change
to your LJVGA directory and enter the following command.

     copy /b ljvga.pcl lpt1:


USING LJVGA

Using LJVGA is simple.  To load LJVGA into memory, just enter the
command

     LJVGA

from the directory where LJVGA is located (usually C:\LJVGA).
LJVGA will load with its default options, and is ready for use.
Now whenever you press the Print Screen key, LJVGA will activate,
producing a high-quality of your computer screen.

You can modify the default options by using a combination of
command-line switches, either the first time you run LJVGA, or
later to modify the options already loaded in memory.  LJVGA
cannot be loaded twice.  If you run LJVGA after it has been
loaded, it will update the copy already in memory.

If you need to remove LJVGA from memory after you have loaded it,
enter the following command from the directory where LJVGA is
located.

     LJVGA -u

If no other TSR's have been loaded after LJVGA, it will unload
itself, releasing any resident memory and returning Print Screen
control to your system BIOS.

LJVGA supports several different command-line switches.  These
can be entered alone or as a group to change the default behavior
of LJVGA.  Be aware that LJVGA retains any options you set until
you unload it from memory, or until you turn the computer off.
Therefore, if you set any special temporary options, you must
remember to reset them when you are done.  See the next section
for a complete description of the available options.


LJVGA ENVIRONMENT VARIABLE

If you have any options which you use every time you run LJVGA,
use the DOS environment variable "LJVGA" to set these options
permanently.  Each time LJVGA loads, it will search the
environment for this "LJVGA".  If you have set this variable,
LJVGA will process any options set before processing the command-
line.  Thus in effect you create new defaults for LJVGA.

For example, if you commonly use Floyd-Steinberg dithering with
the brightness set to 10%, you may find yourself entering the
command

     LJVGA -a2 -b10

very frequently.  Instead, set the "LJVGA" environment variable
in your AUTOEXEC.BAT as follows.

     SET LJVGA=-a2 -b10

Enter the options just like you would on the command-line.  Now,
every time you run LJVGA, it will use these options by default!
Note, however, that you can override these options either by
using the "-I" option to ignore the environment settings, or by
overriding the particular option on the command-line.  For
instance, the command

     LJVGA -b20

will still choose Floyd-Steinberg dithering as specified in the
environment, but it will set the brightness to 20%.  The option
entered on the command-line replaces the matching option in the
environment.


OPTION REFERENCE

LJVGA supports a rich set of options which allow you to alter its
behaviour to suit your needs.  This section lists those options,
what they do, and how to use them.  By using a combination of
these options, you can tailor LJVGA to almost any print screen
task.

All LJVGA commands follow the syntax

     LJVGA [switches]

where [switches] is optionally any combination of the options
listed in this section.  Each option must be separated from the
others by a space, and must have no spaces in it.

Most options are "sticky", i.e. once you set them, they remain in
effect until you explicitly reset them, unload LJVGA, or turn off
the computer.  Some options are only effective the first time
LJVGA is loaded and cannot be used to modify a previously loaded
version.  These options are noted in their descriptions.

Note also that all options are case sensitive.  In other words, "-
a" is different from "-A".  This is necessary because of the
large number of options LJVGA supports.  Be careful when you are
entering options.  If you enter an option in the wrong case, you
may get unexpected results!

The following conventions are observed for the options presented
in this section.  Note that when an option requires an argument,
you should not type any space between the option letter and its
argument.

     -V   Simple options are presented as you should enter them.
          These options take no arguments.

     -h  Options marked with the  symbol accept either the "-"
          or "+" characters as arguments.  Use "-" to turn the
          option off, and "+" to turn it on.  You may also turn
          the option on by omitting the argument.  (No argument
          is the same as "+".)

     -Yx  Options with the "x" symbol accept a single letter as
          an argument.  The possible arguments will be listed for
          you under each appropriate option.

     -Fxxx     Options with the "xxx" symbol accept a string of
          characters as an argument.  This form is commonly used
          for file names, etc.

     -aN  Options with the "N" symbol accept a number as an
          argument.  Only whole numbers are allowed.

     -sx,x     Options with a comma indicate a list of arguments.
          The arguments themselves will be of another type listed
          here.  When you encounter this form, you may enter a
          list of arguments of the appropriate type with commas
          between them.  Do not include any spaces!  Typically,
          you can omit parts of the list by leaving the value
          blank - but make sure you still include the leading
          commas.  You may also usually omit the end of the list
          and any trailing commas.

     !    Important comments are marked by a flag.  You should
          take should take special note of any information in
          these sections.

The options are grouped according to four major categories.  The
Operational Group contains options which affect the way LJVGA
loads, unloads, and runs.  The Image Control Group contains
options which affect the way LJVGA renders the screen image.  The
Printer Control Group contains options which affect the way LJVGA
handles printing.  Finally, the Screen Control Group contains
options which affect the way LJVGA handles the VGA hardware.


Operational Group

These options affect the way LJVGA loads, unloads, and runs.
Various informational options are contained in this group.

-?        Print synopsis.

          This option prints a copyright notice and a short
          summary of options.  No other action is taken if you
          use this option.

-D       Enable debugging kernel

          This option will cause LJVGA to print additional
          debugging information.  This option must be specified
          the first time LJVGA is loaded to enable debugging
          support.  Thereafter it can be disabled with the "D-"
          option or re-enabled with the "D+" option.

          When debugging is enabled, LJVGA will produce an extra
          page containing information about the state of your VGA
          card each time you press the Print Screen key.  This
          option should be used on the advice of Ares
          Technologies personnel to assist in resolving printing
          problems.

          -D+  Enable debugging.
          -D-  Disable debugging (does not free up the additional
               memory).

-H        Load into high memory

          This option will cause LJVGA to load into upper (UMB)
          memory if enough memory is available.  If LJVGA cannot
          load itself into high memory, it will print a warning
          and load in lower memory.

       !  It is recommended that you use this option instead of
          utilities such as "LOADHIGH".  LJVGA has an advantage
          over such programs in that it only installs its
          resident portion into high memory.  Third-party
          utilities attempt to place all of LJVGA in high memory
          and may fail.

-I        Ignore environment settings

          This option causes LJVGA to ignore any options set in
          the "LJVGA" environment variable.  Only command-line
          options will be processed.

-Q        Quiet (no load messages)

          This option causes LJVGA to load without displaying any
          messages or errors.

-V        Verbose (load messages)

          This option causes LJVGA to print a summary of options
          in effect after loading.

-Yx       Conserve memory

          This option controls the amount of memory allocated to
          LJVGA.  Normally LJVGA allocates as much memory as it
          requires for any possible print job.  This option
          allows you to reduce the memory assigned to LJVGA by
          sacrificing the dither buffers.  This prevents you from
          using the advanced dithers.

          2    Normal memory.  All dithers are available.
          1    Medium memory.  Only the halftones and Floyd-
               Steinberg dithering are available.  (dithers 0-2).
          0    Small memory.  Only the halftones are available.
               (dithers 0 and 1).

       !  The conserve memory option is only valid when LJVGA is
          first loaded.  This option cannot be changed once LJVGA
          is loaded.

          DEFAULT:  -Y2

-Z        Reset default options

          This option resets all internal LJVGA settings to their
          defaults.  If this option appears anywhere on the
          command-line, the internal settings are reset before
          processing any new environment and command-line
          settings.

-d        Disable

          This option will cause LJVGA to return control to the
          previously loaded print-screen routines (usually in the
          system BIOS).  This option does not remove LJVGA from
          memory.

-e        Enable

          This option will enable LJVGA if it has been previously
          disabled.  LJVGA will regain control with the settings
          it had when it was disabled.

-n        Instant print (non-resident)

          This option will cause LJVGA to immediately print the
          current screen without becoming resident.  This option
          can be used to run LJVGA from batch files, and could be
          used to create a primitive file printing program.  This
          option will cause LJVGA to ignore any previously loaded
          copy, and will use only default options and options set
          on the command-line.

-h       Enable highlight bar

          LJVGA normally displays a highlight (progress) bar when
          processing a graphics screen.  This bar lets you know
          the progress of the print screen.  This option allows
          you to disable the progress bar.

          -h+  Enable highlight bar.
          -h-  Disable highlight bar.

          DEFAULT:  -h+

-q        Query current setting
-qx       Query options

          This option serves two roles.  When specified with no
          argument, this option will cause LJVGA to display a
          summary of the current settings.  This is the same
          summary available with the Verbose option (-V).

          This option is also used to display help on the other
          options.  To get help on an option, specify the option
          letter as an argument to the "-q" option.  For example,
          to get help on the available dither algorithms (option
          "-a"), specify the option "-qa".

       !  When this option is specified, no other processing
          occurs.  Processing does occur when the Verbose option
          (-V) is set.

-u        Unload from memory

          This option will disable LJVGA and remove it from
          memory.  LJVGA will return Print Screen control to the
          previously loaded print-screen routines (usually in the
          system BIOS).  LJVGA will only unload if it is the last
          TSR loaded.


Image Control Group

This group contains options which affect the way LJVGA renders
the screen image.  Brightness, contrast, dither, and color
controls are contained in this group.

-Cxxx     Set color mask

          This option allows you to specify which of the RGB
          color planes to print.  This option can be used for
          advanced screen manipulation, or for printing RGB color
          separations.

          To set the color planes to print, specify any
          combination of the letters "R", "G", and "B".  For
          example, set the option "-CR" to print only red, or "-
          CRGB" to print all colors.

          DEFAULT:  -CRGB

-aN       Set dither algorithm

          This option allows you to select the method LJVGA uses
          for creating the output image.  The "dither" is the
          method by which LJVGA determines the pattern of dots to
          print to simulate different colors.  The different
          algorithms produce different results and are useful for
          different types of applications.  Experiment with these
          options to see which works best for you.  Possible
          values for N are listed below.

          0    Halftone.  This is the fastest dither pattern.
               This pattern produces different size dots
               resulting in an image similar to the pictures in a
               newspaper.

          1    Bayer algorithm.  This is a good, fast general-
               purpose algorithm and is characterized by cross-
               hatch patterns in the output.

          2    Floyd-Steinberg algorithm.  This dither method is
               slower than the Halftone and Bayer algorithms, but
               produces much better output for continuous-tone
               images.  This is the same algorithm used in the
               original versions of LJVGA.

          3    Burkes algorithm.  This dither method is superior
               to the Floyd-Steinberg algorithm, but is slower
               and requires more memory.

          4    Sierra algorithm.  This dither method is superior
               to the Burkes algorithm, but is slower.

          5    Jarvis algorithm.  This dither method is superior
               to the Sierra algorithm, but is slower.

          6    Stucki algorithm.  The Stucki and Jarvis
               algorithms are approximately equal in quality and
               speed.  Stucki produces slightly different results
               than Jarvis, and thus may be suitable for
               different applications.

          DEFAULT:  -a0

-bN       Set image brightness

          This option allows you to change the percentage of
          brightness of the printed output.  The output can be
          made "blacker" or "whiter" with this option.  Possible
          values for N range from -100 to 100.  Negative values
          increase the black level, with -100 corresponding to a
          completely black image.  Positive values increase the
          white level, with 100 corresponding to a completely
          white image.  0 is the default and results in no
          adjustment.

       !  At 300 DPI and above on most laser printers, the black
          dots tend to overwhelm the white space, resulting in
          fairly dark images.  Certain dither algorithms
          aggravate this problem.  This can be compensated by
          increasing the brightness.  Good results can usually be
          achieved by increasing the brightness by 10-25%.

          DEFAULT:  -b0

-cN       Set image contrast

          This option allows you to change the percentage of
          contrast of the printed output.  Areas of similar color
          can be blended or accentuated using this option.
          Possible values for N range from
          -100 to 100.  Negative values decrease the contrast,
          with -100 corresponding to 50% grey output.  Positive
          values increase the contrast, with 100 corresponding to
          an image with only pure black and white.  0 is the
          default and results in no adjustment.

          DEFAULT:  -c0

-g       Suppress background

          Some screens have large areas of background color that
          are not desirable to print.  This option suppresses the
          printing of those areas, instead printing white where
          the background appears.

       !  This option requires that the graphics program in use
          obey the VGA conventions for background color.  This is
          usually the case.  Also note, however, that the
          background color can be used as a valid color in the
          image itself.  LJVGA cannot detect this and will
          suppress the color anywhere it appears.

          DEFAULT:  -g-

-i       Invert image

          This option will invert the colors for graphics screens
          so that white on the screen will print as black and
          vice-versa.  Other colors are similarly reversed,
          printing a "negative" of the screen image.

          DEFAULT:  -i-

-sx,x     Set scaling

          This option allows you to control the size of the
          printed image.  LJVGA will normally scale the printed
          image to fill the page, but you can scale the size up
          or down with this option.

          This option takes a pair of numbers representing the x-
          and y-scaling respectively.  Each number represents the
          number of printed pixels that will be used to represent
          each screen pixel in the respective direction.  For
          example, -s3,3 means that for each pixel on the screen,
          LJVGA will print a box 3 pixels wide by 3 pixels long.

          You can also specify certain special sizing characters
          as shown below.

          f    Fill the page in the direction specified.

          m    Fill the page using an evenly divisible number of
               pixels.  By default LJVGA prints "partial" pixels
               in order to fill the page completely.  This is
               usually invisible to the eye, but may be
               undesirable in certain situations.  The "m" format
               prevents LJVGA from producing partial pixels.
               Partial pixels will be disabled in both directions
               if this format is used.

          d    Default.  Use this format to cause LJVGA to scale
               this direction to match the other.  This will
               preserve the correct aspect ratio.

          With this option, you can set the scaling for a smaller
          image or for a larger image.  If you specify a scaling
          factor greater than the maximum, the output image will
          be clipped to the dimensions of the page.

          You do not have to set both values.  If either number
          given is 0 or d, the scaling value for that direction
          will be determined from the value for the other
          direction in order to preserve the correct aspect
          ratio.  Setting both values to 0 will result in the
          default, maximum-size image.

          For your reference in determining the appropriate
          scaling values, LJVGA assumes that the output must fit
          on the page size selected, minus a small margin.  The
          number of output pixels that this represents varies
          depending on the resolution chosen.  Also, note that
          the x and y values correspond to screen dimensions, and
          thus may change depending on the page orientation
          selected.

          Here is a sample computation.  Most laser printers can
          print approximately 2450 pixels across at 300 DPI.  We
          want to represent 640 screen pixels across, so 2450 /
          640 = 3.83.  Since LJVGA only allows you to specify
          full pixels, you would enter 3 for the x value.  You
          would enter d for the y value to cause it to be
          computed from the x value to produce the correct aspect
          ratio on output.

          DEFAULT:  -sf,d


Printer Control Group

The options in this group affect the way LJVGA handles printing.
Printer and paper selection, output redirection, and print modes
are contained in this group.

-Fxxx     Print to file

          This option causes LJVGA to send its output to a file
          instead of the printer.  To use this option, simply
          specify the filename after the "-F".  For example, to
          send output to the file "screen.prn", use the option "-
          Fscreen.prn".  To cause LJVGA to print to the printer
          again, specify "-F" without a filename.

          -F<filename>   Print output to <filename>.
          -F        Print output to the printer ports.

       !  Use this option with care.  If the specified file
          already exists, LJVGA will overwrite it.

          DEFAULT:  -F

-Mxxx     Mask control characters

          When LJVGA prints a text screen, it attempts to
          faithfully reproduce the entire contents of the screen.
          Some printers, however, cannot correctly print all of
          the control or extended characters available on the
          screen.  This option can be used to prevent LJVGA from
          printing these characters.  Dots or spaces will be
          printed to preserve the screen spacing.  Use any
          combination of the options shown below.

          C    Do not print control characters.
          X    Do not print extended characters.
          .    Print dots in place of illegal characters.

          Enter "-M" with no options to print all characters.

          DEFAULT:  -M

-Pxxx     Select page size

          The option allows you to select the paper size for your
          printer.  This option is dependent on the printer
          selected.  Use the "-qP" option to list the page sizes
          available for your printer.  The definitions for the HP
          LaserJet and LaserJet 4 are shown below.  You can use
          either the number or the paper name.

          0, letter      American letter size paper.  (8.5" x 11")
          1, legal       American legal size paper.  (8.5" x 14")
          2, executive   Executive size paper.  (7.25" x 10.5")
          3, a4          A4 size paper.  (210mm x 297mm)

          DEFAULT:  Dependent on selected printer.
                    -P0 on the HP LaserJet and LaserJet 4.

-f       Form-feed page

          Normally, LJVGA will eject the page from the printer
          once it has finished printing the screen.  This option
          will cause LJVGA to leave the page in the printer until
          it is full.

       !  You may run out of memory while printing high-res
          graphics with this switch.  Make sure your printer has
          enough memory for the whole page!

          Also, LJVGA normally resets the printer options to
          produce the cleanest print possible.  It cannot do this
          while using the -f option.  If you experience problems
          printing with the -f option, manually reset your
          printer before printing.

          DEFAULT:  -f+

-kN       Print multiple copies

          This option allows you to print multiple copies of a
          screen.  N is number of copies you wish to print.  For
          example, if you want five copies of a screen, enter the
          option "-k5".

       !  Certain printers such as the HP LaserJet have the
          ability to print multiple copies of a single page.  If
          your printer has this capability, LJVGA will use it to
          print as fast as possible.  If your printer does not
          support this feature, LJVGA will manually produce the
          desired number of copies.

          DEFAULT:  -k1

-lx       Set printer port

          This option allows you to change the printer port LJVGA
          will print to.  Possible values for N are 1 for LPT1, 2
          for LPT2, or 3 for LPT3.  You can also set N to 0 to
          print to PRN:.  Note: Setting the printer port to 0
          will also force LJVGA into DOS print mode (explained
          below).

          DEFAULT:  -l1

-mN       Set print mode

          Set print mode.  This option allows you to change the
          method by which LJVGA sends data to the printer.  This
          is useful in cases where you are using some troublesome
          print redirectors or when you have a defective BIOS.
          Possible values for N are listed below.

          0    BIOS print mode.  All printing is done through
               calls to the system BIOS.  This is the default
               option and is the fastest print mode.  This option
               should be chosen except in special situations.

          1    BIOS print mode with DOS Signaling.  This print
               mode is intended for use with some network
               software.  When using this mode, LJVGA prints all
               data through the system BIOS, but also uses DOS to
               open and close a phantom print file.  This method
               can be used on some networks to signal the
               beginning and ending of a print job.

          2    DOS print mode.  When using this print mode, LJVGA
               prints all data through DOS calls.  This option is
               included for situations in which compatibility is
               a problem, or where output should be redirected to
               special DOS devices.  Printing is much slower in
               this mode.

          DEFAULT:  -m0

-ox       Set page orientation

          This option allows you to select the direction in which
          LJVGA prints graphics screens.  The possible values you
          can use for "x" are listed below.

          0, p Portrait (upright) orientation.
          1, l Landscape (sideways) orientation.
          2    Reverse portrait (upside-down) orientation.
          3    Reverse landscape (reverse sideways) orientation.

       !  LJVGA handles page orientation internally and can print
          any orientation on any printer.

          DEFAULT:  -op

-pxxx     Select printer type

          This option allows you to set the printer type for
          LJVGA to use.  Use the "-qp" option to list the
          available printer types.  The currently supported
          printers are listed below.  You can use the number or
          the name of the printer.

          1, laserjet    Selects the HP LaserJet and compatibles.
          2, lj4         Selects the HP LaserJet 4.

       !  Once you have selected a printer, you cannot change to
          a more capable printer without unloading and reloading
          LJVGA.  For example, if you originally selected the
          LaserJet, you cannot change to the LaserJet 4.
          However, if you originally selected the LaserJet 4, you
          can change to the LaserJet and later back to the
          LaserJet 4.  This limitation occurs because of the way
          LJVGA uses memory.  Accordingly, if you plan on
          switching printer type, always select the most advanced
          printer when first loading LJVGA.

          DEFAULT:  -p1

-rN,N     Set resolution

          This option allows you to set your printer's graphics
          resolution in dots-per-inch (DPI).  Resolutions
          available depend on the printer type selected.  Use the
          "-qr" option to list the resolutions available for your
          printer.  The resolutions available on the HP LaserJet
          and the HP LaserJet 4 are listed below.

          75   75x75 dpi
          100  100x100 dpi
          150  150x150 dpi
          200  200x200 dpi (LaserJet 4 only)
          300  300x300 dpi
          600  600x600 dpi (LaserJet 4 only)

          Choose the resolution you desire by setting either or
          both "N" values.  LJVGA will pick the closest match to
          the resolution you specify and select it on your
          printer.  Some printers, especially laser printers, can
          only print the same horizontal and vertical
          resolutions.  Only the first "N" value is required in
          this case.

          LJVGA will automatically scale graphics to the
          resolution you choose.

          DEFAULT:  The maximum resolution available on the
          chosen printer.


Screen Control Group

The options in this group affect the way LJVGA handles the VGA
hardware.  The only option you will commonly use in this group is
the screen window option.

-WN,N,N,N Set screen window

          This option allows you to select an arbitrary
          rectangular screen area to print.  The format for this
          option is "-W<x start>,<y start>,<x end>,<y end>.
          Coordinates are based on a "grid" system, where the
          coordinates represent a "grid" around the actual screen
          pixels.

          For example, the default coordinates for a 640x480
          screen are (0, 0, 640, 480).  The coordinates for the
          right side of the screen are (320, 0, 640, 480).

          LJVGA will automatically scale the selected rectangle
          to fill the printed page while preserving the correct
          aspect ratio.

          DEFAULT:  Print the entire visible screen.

-vN       Select VGA handling mode

          This option allows you to specify the way LJVGA
          communicates with the VGA card.  The possible values
          for N are listed below.

          0    BIOS-level support only.
          1    Direct register-level support.

          DEFAULT:  Dependent on the VGA card type selected.

-xN       Set VGA card type

          This option allows you to override the VGA board type
          selected.  The VGA card type is normally auto-detected
          and set, but you can override the default with this
          option.  The currently supported board types are listed
          below.

          0    Generic VGA.  This is the proper setting for all
               IBM and basic VGA boards.
          1    ATI chipset.
          4    Paradise chipset.

          DEFAULT:  Autodetected.



EXAMPLES

LJVGA           Load LJVGA into resident memory using the default
                options.

LJVGA -l2       Load LJVGA into resident memory and redirect
                output to LPT2:.

LJVGA -ol -a2   Load LJVGA into resident memory and choose
                landscape graphics with Floyd-Steinberg
                dithering.

LJVGA -r75 -n   Print the current screen at 75 DPI.  Do not load
                LJVGA into resident memory.

LJVGA -s1,1     Load LJVGA into resident memory and set the
                scaling so that each screen pixel is represented
                by one printer pixel.

LJVGA -sd,4     Load LJVGA into resident memory and set the
                scaling so that each screen pixel is represented
                by 4 printer pixels down and by an appropriate
                number of printer pixels across.

LJVGA -d        Disable a previously loaded copy of LJVGA and
                return print-screen control to the system BIOS.

set LJVGA=-b10 -ol
LJVGA           Load LJVGA into resident memory and choose
                landscape graphics with brightness set to 10%.

set LJVGA=-ol -a4
LJVGA -a0       Load LJVGA into resident memory and choose
                landscape graphics.  Choose halftone dithering.
                (The command line option -a0 overrides the
                environment option -a4.)

LJVGA -plj4 -Pa4 -V  Load LJVGA into resident memory with HP
                LaserJet 4 support and A4 paper selected.
                Display a summary of the loaded options when
                done.

LJVGA -Y0       Load LJVGA into resident memory and make it as
                small as possible.  Only halftone and Bayer
                dithers will be allowed.


OPTION SUMMARY

This section summarizes the options you can use with LJVGA.

Operational Group                  
-D  Enable debugging kernel
-H   Load into high memory
-I   Ignore environment settings
-Q   Quiet (no load messages)
-V   Verbose (load messages)
-Yx  Conserve memory
-Z   Reset default options
-d   Disable
-e   Enable
-h  Enable highlight bar
-n   Instant print (non-resident)
-qx  Query options
-u   Unload from memory

Printer Control Group

-Fxxx   Print to file
-Mx     Mask control characters
-Pxxx   Select page size
-f     Form-feed page
-kN     Print multiple copies
-lx     Set printer port
-mN     Set print mode
-ox     Set page orientation
-pxxx   Select printer type
-rN,N   Set resolution

Image Control Group

-Cxxx   Set color mask
-aN     Set dither algorithm
-bN     Set image brightness
-cN     Set image contrast
-g     Suppress background
-i     Invert image
-sx,x   Set scaling

Screen Control Group

-Wxxx   Set screen window
-vN     Select VGA handling mode
-xN     Set VGA card type


HOW IT WORKS

LJVGA has two primary jobs - printing text and printing graphics.
Printing text is straightforward.  LJVGA simply reads the text
from the screen and sends it to the printer.  LJVGA has an
advantage over  built-in print screen routines, however, since it
knows how to control the laser printer.  Thus, LJVGA can set up
the printer to print the extended characters such as the line-
drawing characters.  It can also set up the printer to handle
special screen modes such as the 132x60 text modes available on
some SuperVGA cards.

Printing graphics is where LJVGA is most useful.  DOS has only
very basic graphics printing capability - and even then this
ability is only made available by loading large TSRs.  LJVGA
solves this shortcoming by providing high-quality printing in a
very small package - approximately 9k minimum.

The biggest problem faced by LJVGA is how to produce a
recognizable image of the screen, which can display up to 256
colors out of a palette of 262,144 colors, on the laser printer,
which has only 2 colors - black and white.  LJVGA solves this
problem by a method called dithering.  This is a method by which
a larger number of colors can be represented by using patterns of
dots chosen from a smaller number of colors.  In this case, this
allows up to 256 colors to be represented by different patterns
of only two colors.

Actually, colors images cannot be accurately reproduced on a
black-and-white printer (obviously!)  Therefore, LJVGA actually
produces a print that is based on the intensities of the colors
on the screen.  This is the same as saying that if you were to
convert the colors on screen to shades of grey, LJVGA produces an
approximation of the shades-of-grey screen.  This works because
the human eye is more sensitive to certain colors than to others,
thus these colors can be approximated by different grey shades.
Thus, by printing areas of dots of varying densities, LJVGA can
approximate these grey shades.  Printing just a few dots results
in bright areas, while printing more dots results in dark areas.

LJVGA uses two major varieties of dithering to produce these dot-
densities.  The first, fastest, method is known as ordered or
Bayer dithering and uses a predefined pattern to reproduce each
color.  This pattern contains a set of numbers representing color
threshold values.  As the image is generated, each screen pixel
is compared against the threshold value at the spot in the
pattern where that pixel will be plotted.  If the pixel color is
greater than the threshold value, a dot is printed.  Otherwise,
no dot is printed.  Thus the output image has a regular, ordered
appearance, because it is based completely on the original
pattern.

LJVGA uses two different patterns for this method.  The first is
a "clustered" pattern.  In this pattern, similar threshold values
are grouped closely together to produce large dots.  This pattern
generates an image which appears to be made up of different sized
dots, much like the pictures in a newspaper.  The second pattern
is a "dispersed" pattern which produces dots in a widely spread
pattern.  Because of the way this pattern is generated, it
produces a characteristic cross-hatched output.

The second variety of dithering is known as random dithering
because it produces dots in a seemingly random manner.  This
dither is also known as an error-dispersion dither because of the
way it produces dots.  This method works in two steps.  In the
first step, the current screen pixel is compared against a
predefined threshold value.  If the color is greater than the
threshold, a dot is printed, otherwise, no dot is printed.  The
second step compares what is actually printed against what should
be printed.  This produces an "error" value which is divided up
and added to the neighboring screen pixels.  This process is
repeated for every pixel in the image.  Thus if a dot is supposed
to be dark grey and we plot black, the error value generated
reduces the chance that the next pixel plotted will also be
black, ensuring that we get an area of "dark grey" on the output.

This method is slower than the ordered dithers because of the
math involved, but because it is based on the image itself, and
not on a predefined pattern, it significantly reduces the chances
of incidental patterns ("artifacts") emerging in the final
output.  LJVGA employs five of the most popular error-dispersion
patterns: Floyd-Steinberg, Burkes, Sierra, Jarvis, and Stucki.


ADDITIONAL NOTES

Printing graphics on a laser printer requires large amounts of
memory.  If you are planning on printing graphics screens at 300
DPI or above, you should have at least 1 megabyte of memory in
your laser printer.  512k should be sufficient for printing text
and graphics at lower resolutions.

LJVGA is only guaranteed to work with VGA screen modes that are
supported by video BIOS.  Most SuperVGA cards have extended BIOS
chips which support all of the vendor-defined modes and thus will
work with LJVGA.  However, some graphics packages such as PICEM
and VPIC can directly program VGA cards into modes not supported
by BIOS.  LJVGA is not guaranteed to work with these modes.

LJVGA now has built-in hardware support for the ATI and Paradise
chipsets.  When boards utilizing these chipsets are detected,
LJVGA will switch to VGA register-level support to control them.
This allows LJVGA greater capability and accuracy than was
previously possible.

LJVGA can also now detect and support the 360x480x256 mode that
some programs such as PICEM use.


TIPS FOR MICROSOFT WINDOWS USERS

LJVGA can be used with Microsoft Windows to print DOS session
screens.  Only full-screen DOS sessions are supported; all
Windows applications and windowed DOS sessions are handled by the
Windows native print screen handler.

To use LJVGA with Windows, you must load LJVGA before entering
Windows.  You must also make a change to the PIF files used with
the applications you wish to print.  To make the required change,
run the Windows PIF Editor and load the appropriate PIF file.
Once you have loaded the PIF file, choose the "Advanced" button
at the bottom of the PIF editor window.  This will take you to
the Advanced Options window.  Near the bottom of this window is a
section titled "Reserve Short-cut Keys".  If you want to use
LJVGA with this application, make sure the "PrtSc" box is
checked.  Once you have checked this box, save your changes, and
you are ready to print your application screens!


CURRENT KNOWN PROBLEMS

LJVGA cannot print text screens with redefined character tables.
All text prints rely on the fonts built into the printers.
Redefined character tables allow you to create virtually
unlimited symbols on the screen, but since the printer does not
know about these characters, it cannot print them.  This problem
occurs with software such as the Norton Utilities for DOS.

LJVGA cannot print TrueColor (15 and 24 bit) graphics.  Currently
only palette-based graphics are supported.  LJVGA cannot handle
TrueColor graphics because the complete color information is
stored in the display memory and requires more processing to
reproduce.  TrueColor support is planned for a future version.


REGISTRATION STAMPING UTILITY

All registered copies of LJVGA come with a program called
STAMP.COM.  This program contains the registration information
for the registered user and can be used to register new versions
of the program which you receive from us or download from
bulletin boards.

When you register LJVGA, you can choose from three different
registration options: current version only, current and next
version, or Lifetime registration.  Your copy of STAMP contains
the information necessary to update new versions of LJVGA
according to the registration option you have chosen.  For
instance, if you registered version 1.50 of LJVGA for the current
version only, your copy of STAMP will work on any 1.xx version,
i.e. any version up to, but not including 2.00.  If you
registered for the current version and one upgrade, your copy of
STAMP will work on any 1.xx or 2.xx version.  A copy of STAMP
received with a Lifetime registration will work on any version of
LJVGA available.

To register a new version of LJVGA, place the new LJVGA.COM and
STAMP.COM in the same directory.  In DOS, change to the directory
where the files are located and enter the following command.

     stamp ljvga

The first time you run STAMP, it will prompt you for your name.
Enter the name your software is registered under.  STAMP will
place your registration information in the new copy of LJVGA and
will inform you when it is done.  If for some reason STAMP cannot
update LJVGA, such as if your registration has expired, you will
receive an error message telling you what is wrong.  Now your new
copy of LJVGA is registered and ready to use!


LJVGA RELEASE HISTORY

v2.00 (930628)

The loader has been completely rewritten.  The graphics engine
has been modified and extended to handle many new features.  See
the documentation for a complete explanation of the new features.

v1.80  (930222)  [Limited Release]

Added video mode to debugging info.
Corrected memory row-length calculations.
Added row-length to debugging info.
Added mode table search for ATI boards.

v1.78d  (930115) [Limited Release]

Added the ability to detect and print graphics screens with a
screen start offset.
Modified setup and page borders for A4 paper.

v1.77  (921215)  [Limited Release]

Due to continuing problems, support for interrupt 21 has been
disabled. (again)

v1.76  (921205)

Section headings have been added to the debug page.
A color table dump has been added to the debug page.
Added direct hardware reads for the screen size.  This solves
various problems with some SuperVGA adapters which do not report
the screen size correctly in high resolution modes.

v1.75  (921109)

Changed invert option.  Invert now inverts the color palette,
rather than the finished image.  This fixes the problems with
pure-white backgrounds and the brightness/contrast controls in
inverted mode.
Corrected a bug which prevented LJVGA from activating if DOS was
active.

v1.71  (920920)

This is a maintenance release which includes only minor changes
to the documentation.

v1.70  (920818)

Added full-page scaling.

v1.61  (920814)

Added two new Bayer dithers.
Modified to keep only one dither pattern in active memory.
Increased support for older networks.
Fixed a problem with the DOS print-logging flag in Dell machines.
Added color resolution checks for certain VGA adapters.
Added ATI-specific code.

v1.53  (920627)

Added use of DOS print-screen busy flag.
Made resident section more crash-proof.
Added serial numbering.

v1.52  (920608)

Corrected color mapping for 16-color modes.
Corrected control character printing.  This bug was only
     noticeable on non-HP printers.

v1.50  (920422)

Added instant print option.
Added print mode option.
Added page orientation option.
Added Bayer dithers.  Up to 30% faster than previous dither.
Added contrast option.
Added brightness option.
Added scaling option.
Added debugging option.
Fixed an error in the Floyd-Steinberg dithering option.  Output
     is now much improved.
Added better interrupt handling for improved safety and error
     control.
Fixed a bug which would allow LJVGA to load when using the
     enable/disable controls.
Fixed a bug which prevented LJVGA from finding a previously
     loaded copy in fragmented memory.
Fixed text print routine so that control characters are printed,
     not interpreted.

v1.30  (920304)

Fixed a bug with command-line parsing under MS-DOS 4.0/5.0.
Added invert option.
Added unload option.

v1.20  (910730)

Added suppress form-feed option.

v1.10  (910622)

Added the disable/enable options.

v1.00  (910326)

Added resolution option.
Added printer port option.
Added error detection for missing or off-line printers.
Added the ability to detect and update a previously loaded copy.

v0.50  (910307)

Initial release.


PROGRAMMING FOR LJVGA

You can provide advanced screen printing for your own programs
with LJVGA!  LJVGA works by hooking into the standard print
screen interrupt vector, interrupt vector 5.  (If you have ever
seen your computer crash and begin print-screening madly, you've
experienced interrupt 5.  The microprocessor also uses interrupt
5 to signal an error.)  Therefore, make sure LJVGA is loaded into
memory before you run your program.  Then all you have to do to
invoke LJVGA from within your program is to generate an interrupt
5.  Sample instructions appear below.

In assembler,

     INT 5               ; call print screen routine

In Borland C/C++,

     geninterrupt(5);    /* call print screen routine */

That's all there is to it!

At the time of this writing, there is no simple way to adjust the
internal LJVGA settings from within your programs.  You can,
however, change the LJVGA settings by running it with the
appropriate options via a DOS shell or an EXEC call.  LJVGA will
locate the copy it has previously loaded and update it.  The
updated setting will remain in memory when the DOS shell exits.
Combine this use with the Quiet option (-Q), and your users will
never be aware that you have invoked a DOS shell!

Direct API support into LJVGA is planned for a future release.

Please note that you must have a special license to distribute
LJVGA with your programs.  Please contact Ares Technologies for
more information about a Reseller's license.


TECHNICAL SUPPORT

If you have any questions or comments about LJVGA, contact:

     Mail:      Ares Technologies
                243 Fairfax Rd.
                Blacksburg, VA  24060-6595

     Phone:     703-552-6273

     E-Mail:    CIS: [73237,1572]
                MHS: support @ ares
                Internet: support@ares.mhs.compuserve.com

When calling for technical support, please have the following
information available:

    the version of LJVGA you are using (use the -? option to
     find out)
    the make and model of VGA board you use
    the make and model of your printer
    the version of DOS you use


Ares Technologies is also available for custom programming
projects.  Please feel free to contact us if you would like to
discuss your programming needs.


CREDITS

LJVGA is the result of many hours of hard work and research.
What originally began as a simple program for my own use has
expanded into a full-featured commercial program.  I could not
have done it without the support of my users, and the many
positive comments I have received.  This credit belongs to all of
you who have supported my efforts and made this program possible.

Please, if you find this software useful, consider registering
it.  The Ares philosophy is that software should work well,
should be easily available, and should not cost a fortune.  I
believe that LJVGA meets these goals.  Your registration will
allow me to devote more of my time to producing LJVGA and other
quality programs.

A special thanks goes out to Don Slaymaker for his unending
patience and help in debugging the ATI-specific code sections.
To Johann Delago for yet more help in extending the ATI hardware
support, and many suggestions on additional hardware support.  To
David Wright & co. - my first mass reseller.  To Robert Everett &
co. for "pushing the envelope."  And finally to Tom Fasulo for
the best promotional support a shareware author could ask for.


REGISTRATION

If you find LJVGA useful and convenient, a registration of $10 or
more would be appreciated.

If you send $20 or more, you will receive a disk containing the
current version of the software.  You will also receive a disk
with the next major version when it becomes available.

For a fee of $50, you will receive a lifetime registration for
LJVGA.  This will entitle you to every major and minor version of
LJVGA as they are released.  These will be automatically sent to
you free of additional charge.

Site licenses are available for commercial and multiple user
organizations.  Please read the file REGISTER.TXT for more
information.

Reseller information is available for developers wishing to
bundle pre-registered versions of LJVGA with their own software.
Please contact Ares Technologies directly for more information.

Please state the current version of the software you are using.
Send check or money order to:

                        Ares Technologies
                         243 Fairfax Rd.
                   Blacksburg, VA  24060-6595


You can also order LJVGA from the Public Software Library with
your Visa, MasterCard, American Express, or Discover card at one
of the following numbers.  These numbers are for ordering only.
For all other information concerning LJVGA, please contact Ares
Technologies directly.

     PsL Product Number: #10515

     Mail:     PsL
               P.O. Box 35705
               Houston, TX  77235-5705

     Phone:    800-2424-PSL
               713-524-6394

     FAX:      713-524-6398

     E-Mail:   CIS [71355,470]


You can also register LJVGA on CompuServe in the SWREG forum.  If
you have a CompuServe account, logon and type "GO SWREG".  Follow
the instructions given to register your copy of LJVGA.  The
registration code for LJVGA is 227.  Once we receive notification
from CompuServe, your registered diskette will be sent to you
automatically.


SOFTWARE LICENSE AGREEMENT

LJVGA VGA Print Screen Utility
Copyright (c) 1991-1993 Ares Technologies.  All Rights Reserved.


Notice:  By using LJVGA, you agree to be bound by the terms of
this license.  If you do not agree with the conditions listed
herein, you may not use LJVGA.  If you have any questions
regarding your software license, please contact Ares Technologies
at the address listed elsewhere in this document.


You may use, copy, and distribute LJVGA for non-commercial
purposes only, provided the following conditions are met:

    No fees may be charged for its use or distribution.

    The program and accompanying documentation must be
    distributed in whole, unmodified form.

    Reverse compilation, reverse engineering, or any other form
    of code decomposition is expressly prohibited.

    Clubs, user groups, and shareware distributors may charge a
    nominal fee for expenses and handling for distributing LJVGA.
    Operators of electronic bulletin board systems may charge
    only normal membership fees, and may not require additional
    fees for specific access to LJVGA.  Distributors are
    encouraged to register with Ares Technologies.  See the file
    SYSOP.TXT for additional information.

Site and commercial licenses are available for LJVGA.  Please
read the file REGISTER.TXT, or contact Ares Technologies for more
information.




Ares Technologies hereby disclaims all warranties relating to
this software, express or implied, including without limitation
any warranties of merchantability or fitness for a particular
purpose.  Ares Technologies shall not be liable for any damages,
direct, consequential, or otherwise, suffered due to loss of data
or any other reason, even if Ares Technologies has been advised
of the possibly of such damage.  In no event shall Ares
Technologies' liability for any damages exceed the price paid for
the license to use the software, regardless of the form of the
claim.  The user of this software bears all risk as to the
quality and performance of the software.


