(c)  Copyright 1989 Commodore-Amiga, Inc.   All rights reserved.
The information contained herein is subject to change without notice, and 
is provided "as is" without warranty of any kind, either expressed or implied.  
The entire risk as to the use of this information is assumed by the user.

                Changes to the Printer Device for V1.3
                --------------------------------------
                        by David Berezowski



One area of the Amiga system software that has been extensively revised
under the V1.3 Workbench is the printer drivers.  The purpose of this 
article is to summarize those changes. 


User Enhancements
-----------------


1. Speed - the V1.3 printer device is anywhere from 5 to 30 times faster
           than the V1.2 printer device.  The speed increase depends on a
           number of factors such as type of printer (ink-jet, dot matrix, 
           or thermal transfer), shade of picture (bw, grey-scale or color),
           aspect of picture (horizontal or vertical), amount of white-space
           and color in the picture, and the type of printer driver (V1.3 
           printer drivers are much faster than their V1.2 counterparts).
           In general the speed of printouts is now printer or IO bound and
           not CPU bound.

2. Center  - the printer device now automatically centers the picture if 
             the flag 'SPECIAL_CENTER' is turned on in io_Special or if 
             the user has turned on the Center gadget in Preferences. 

3. Density - graphics print density is now user selectable.
             All printer drivers support multiple densities if the
             printer has them.

4. Dithering - there are now three user selectable dithering modes.

5. Scaling   - the scaling method is now user selectable.

6. Smoothing - this provides smoothing of diagonal lines.

7. Left Offset - the left offset may now be exactly defined by the user.

8. Color Correction - this provides a closer matching of screen colors 
                      to printer colors.

9. Height and Width - printout height and width may now be exactly defined
                      by the user.

10. HAM pictures - these can now be printed from any valid starting x
                   position as as opposed to the previous limitation of
                   starting from an x position of 0.  Inverted HAM pictures
                   are now supported as well.

11. Preferences -  there are a new set of Preferences selections for the
                   printer device.  Refer to the article on V1.3 Preferences
                   for a detailed explanation.



Programmer Enhancements
-----------------------

1. Multi-pass    - printers which require multiple passes of the color info
                   (such as the CalComp_ColorMaster) are now supported via a
                   new ColorType of 'PCC_MULTI_PASS' and a new 'case 6' in
                   the render.c file.

2. Page Ejection - a new flag called 'SPECIAL_NOFORMFEED' has been added to
                   accommodate page oriented printers like the H-P LaserJet
                   and the CalComp_ColorMaster .  This flag allows the mixing
                   of text and graphics modes on the same page.

3. Density - a new flag called 'SPECIAL_NOPRINT' has been added to allow the
             calling program to see the effect of changing the density 
             without actually doing a dump.

4. PrintSize - a new flag called 'SPECIAL_NOPRINT' has been added to allow
               the calling program to see the final width and height (in
               printer pixels) of the printed picture without actually
               doing a dump.

5. Overflow - the error 'PDERR_DIMENSIONOVFLOW' is now obsolete.  In the 
              past if a dump was requested that was larger than the 
              printer's capabilities, this error would be returned.  Now the
              driver gives you a dump as large as possible while keeping it
              within the printer's capabilities.

6. Query status - a new command 'PRD_QUERY' has been added which returns the
                  IO status of the printer.  See the autodoc description at
                  the end of this article.



Bug Fixes
---------

1. There is no longer a memory loss when aborting - via AbortIO - an
   asynchronous printer request.  In particular, aborts from DPaint II 
   no longer lose any memory.

2. The rounding error in the MILROW/MILCOL calculations is corrected.

3. The printer device can now support very large source/destination sizes 
   and large dot densities.  This means that a 2048 x 2048 rastport could be
   dumped to a 8.0 x 10.0 inch picture with 600 x 600 dpi. (ie. 2048 x 2048
   source picture to a 4800 x 6000 destination size).

4. The calculation for the intensity of black on grey scale printouts was
   slightly in error.  It had 1/256 too much green and 1/256 too little
   blue in it.

5. The V1.2 release was limited to working with a maximum of 8 bitplanes.
   This release is now able to go up to 12 bitplanes which allows one
   to have a rastport with all of the 4096 colors in it.  We have
   successfully created and printed a 12 bitplane rastport here at CBM.

6. The alpha command 'word center' has been fixed.  This has never worked.

7. An IO bug which has been present since the V1.0 release has finally been
   fixed.  This bug occurred when an AbortIO/WaitIO was followed immediately
   by a DoIO or SendIO using the same IO request that was aborted.  The
   abort would never succeed and the DoIO or SendIO command would probably
   not get executed.  This is the final known bug with respect to aborting
   or canceling requests.

8. The aJFY3 (letter space justify) and aJFY1 (word fill / auto center)
   commands have never been sent to the printer.  They now are when
   all justification (left, right, or full) is off.

9. All printer drivers no longer issue a linefeed when told to initialize
   the printer.  This has been a bug since the original V1.0 software.

10. A 'case 5' render call is now made when the printer device is opened.
   This allows the printer driver to initialize the fields MaxXDots, MaxYDots,
   XDotsInch, YDotsInch, MaxColumns, etc. based on the density setting.



******* printer.device/Query ****************************************
*
*   NAME
*   Query - query printer port/line status
*
*   FUNCTION
*   This command returns the status of the printer port's lines and registers.
*   Since the printer port uses either the serial or parallel port for IO,
*   the actual status returned is either the serial or parallel port's status.
*
*   IO REQUEST
*   io_Message  mn_ReplyPort set if quick IO is not possible
*   io_Device   preset by the call to OpenDevice
*   io_Command  PRD_QUERY
*   io_Data     ptr to 2 UBYTES where result will be stored.
*
*   RESULTS
*     io_Data          BIT  ACTIVE  FUNCTION (SERIAL DEVICE)
*
*             LSB       0    low    reserved
*                       1    low    reserved
*                       2    low    reserved
*                       3    low    Data Set Ready
*                       4    low    Clear To Send
*                       5    low    Carrier Detect
*                       6    low    Ready To Send
*                       7    low    Data Terminal Ready
*             MSB       8    high   read buffer overflow
*                       9    high   break sent (most recent output)
*                      10    high   break received (as latest input)
*                      11    high   transmit x-OFFed
*                      12    high   receive x-OFFed
*                   13-15           reserved
*
*
*     io_Data          BIT  ACTIVE  FUNCTION (PARALLEL DEVICE)
*
*                       0     low    printer selected
*                       1     low    paper out
*                       2     hi     printer in busy toggle (offline)
*                       3      -     read=0, write=1
*                     4-7            reserved
*
*     io_Actual       1-parallel, 2-serial
*
**********************************************************************






