

APPLE IIGS
STYLEWRITER PRINTER DRIVER
CURRENT AND PREVIOUS RELEASE NOTES
BEN KONING   x45806   KONING.BEN   ben@apple.com
408/738-1763





-----





System disk 6.0 ships here.





F26		8-Jan-92		D63 system disk build

Removed WaitCursor/InitCursor calls from status message routines.  Most applications
put up their own (wait) cursors anyway, and our WaitCursor call was causing problems
with applications such as HyperCard which do cursor animation with hi-bit-set
cursor record pointers.





F25		18-Dec-91		D62 system disk build

Removed BRK #$88 breakpoint.

Random $1B09=illegal font size error from DrawPicture fixed by fix in font manager
tool027.  This is because SetPurgeStat was getting $1B09 because it got bogus data
from an earlier InstallWithStats call (this is inside the rLineOrText routine in
QDAux/DrawPicture).  In the font manager's InstallWithStats call's MakeCurrent,
there was a BCS-if-error to an RTS immediately after InflateTextBuffer call.  The
problem is that whoever called MakeCurrent (AddScaledFont, from InstallFont) had
already left the current grafport's font handle in a purgable state, and thus when
InflateTextBuffer fails with $0201=out of memory, its memory manager calls have
already managed to purge the current grafport's font.  The fix is to install the
current system font handle, ID, face, size upon InflateTextBuffer tool error.  Also,
this error now gets propagated from outside of AddScaledFont.  Thus now upon a memory
error the system font is tried, without disposing the current font handle.

Line layout right-clipping bug (BeagleWrite, Medley) is apparently due one or both
of the TextWidth calls not reporting the correct width under Spx/Chx infuence.
Tested and confirmed that line layout code is accurate within 2 printer pixels for
all cases not involving application Spx/Chx influence (ie, they're 0).  Added a
"fix" immediately after the wanted width calculation which simply multiplies the
wanted width by a fixed-point constant slightly less than 1.





B24		12-Dec-91

NOTE: This version has a brk #$88 to catch DrawPicture errors other than $0201.

Shieldcursor/Hypercard cursor stickyness traced and seems to work OK.  Notified
testing to be on the lookout for this.

InstallWithStats limit to only shaston if low memory attempted; didn't help.

If there is a DrawPicture-time error, it can say either "Rendering error" or
"Insufficient rendering memory".

Reduced the number of lines the patched stdpixels processes at a time in its own
banding scheme from 32 to 12 to work better for low memory situations in Hypercard,
also improves speed because of more accurate censoring clipping granularity.

Better behavior if cancelling out from the unsupported features dialog.  The dialog
and PrError setting is now done after all the setup stuff, rather than near the
beginning.





B23		11-Dec-91		D61 system disk build and developer release

Low memory warning may now appear *before* setup or job dialog; changed wording to
suggest going to 180 dpi.

Increased European A4 paper X size from 133 to 136 80-dpi-pixels as per French
3rd-party developer customer request.

Fixed bug in QDAux where playback-time font install requests of > 255pt were being
made, resulting in the pt size mod 256 being requested to InstallWithStats.

Fixed bug where we were not returning error properly from DrawPicture.  Added
additional status message for this (plus, AWGS pthen puts up its own error dialog
because it detected the error because we passed it back correctly this time).





B22		6-Dec-91

Current copy being printed message could flash by quickly.  Made more robust by
making a subroutine to handle page/copy status that is called from multiple places,
including after printer error dialog.  If there is an error dialog and OK is hit
multiple times without correction of the error, then page/copy status message will
toggle.

CompactMem now being called again at the beginning of band buffer malloc routine.

Lowered threshold for when low-memory warning comes up to RealFreeMem > 768K.  This
seems to not present the warning for Draw Plus on a 2M machine but it will for
HyperCard and AppleWorksGS on a 2M machine.  Changed wording to say that text and
pixelmaps (because we need memory for our 640-mode antidither preprocessing) are
affected (it said "text and other objects" before).  The message now doesn't care
which 180|360 dpi mode we're in.





B21		27-Nov-91		Beta

Crashing problem found to be lack of error propagation from InflateTextBuffer.

Line layout error distribution among spaces now more accurately tracks the ratio
of spextra to chextra that the application is asking for while still applying the
corrections we need.  However, when SpaceExtra is required to be >255.0 (this may
happen if there are large space gaps in fully-justified text), things still don't
line up properly.

Workaround coded for SpaceExtra > 255.0 bug: the number of spaces that the string
contains is repeatedly doubled in a temporary buffer while the SpaceExtra value
is halved until it is acceptable.  If error doing this process (ie, not enough buffer
space), then it is just done the old way.

DrawPicture is now being called with the actual "unused" ("unused" because we do
our own PICT definition data storage/retrieval with the spooling routines) handle
from OpenPicture and passed to KillPicture.  Safer this way.

Added indicator of current copy being processed in the status box.  ONLY if the
number of copies requested is 2 or greater, whenever the "Rendering page image"
message is not up, then EITHER the "Printing a copy of page: x" OR a new message
"Printing copy number: x" appears (the two messages alternate).

Job Dialog box tabbing now works like it's supposed to, and saved 86 bytes.

Added spooling of the current page (one page only, of course) PICT definition to
memory/disk, by adding the (tested) spooling routines from the ImageWriter driver.
This is necessary to make Hypercard stacks work, with their myriad memory-consuming
bitmaps.

Finally fixed communications bug that was in there all along: we were pinning the
received buffer-space from the printer to a maximum (8K), but this was the wrong
approach.  If a buffer-space inquiry returned a value below the maximum but above
the drain-minimum (ie, everything totally peachy) then this value would be stored
into our counter of how much space left and we could then proceed to transmit that
many bytes, all the way to our-counter=0, which would correspond to printer-space=0,
with no slop space whatsoever, even though we thought we were getting 2K or more of
slop!  Fixed by *subtracting* about 2K from every buffer-space inquiry result (pinned
to 0 if negative).  This works so well that the retry delay has been reduced from
4 sec to 0.5 sec.  This has been tested for up to 200 copies/180 dpi/transwarp/two
vertical lines down the entire length of the page (maximum print time with minimum
data buffer emptying speed, with maximum host output).

Removed code that checked against "CommDevBufferDrainLimit" since it really is the
same thing as the subtract above.  The code now simply checks if there is enough
room for the write request after having updated the our-counter value as above,
and if there *still* is now enough room then it waits (1 sec) and loops back.

Removed code which performed a timeout in the communications module if the amount
of printer-buffer space dropped below a special low limit for more than a certain
amount of time.  This is no longer necessary with the new communications error
handling code introduced many releases ago.  The problem is that this was causing
communcations code timeout errors erroneously when we're generating data too fast
for the printer.





A20		30-Oct-91

Pixmap 640 dithering ugliness fixed by patching out StdPixels (this may be disabled
by setting wDev bit 12) and doing some of the work ourselves if 640 mode.  We do the
horizontal scaling ourselves into our own buffer, and then call the real StdPixels
to do the vertical scaling and transfer into the destination pixel map with all of
the other work it normally does (tranfer modes, region clipping, etc).  This is done
in a banded way, necessary because of lack of memory, and censoring clipping is
performed by comparing the location of the current StdPixels-band with the location
of the current rendering-band.  This is only being done for high quality (360 dpi)
mode; in low quality (180 dpi) mode, StdPixels is called normally as before,
resulting in the familiar gray splotches at sharp black/white boundaries.  It may
also be disabled by a new wDev bit, and it may disable itself if there is not enough
memory to hold a slice of the interim pixel buffer.

Added wDev bit 12 to allow disable of special 640 pixelmap handling.





A19		18-Oct-91

Fixed Platinum Paint error $0001 after printing all the time.  Stupid bug where
around the KillPicture call the error, if any, from ClosePicture was being stored
in errNo.  But with the new, post HP-driver program flow, other, normal, code paths
could drop into this case!  Eliminated this poor excuse for error storing code.

Fixed problem with colored text showing a rectangle around it (caused by the fix
for descender clipping.  We were substituting the text mode notBIC; this has been
changed to modeForeCopy ($0004).  Again, it's not always the right thing to do;
hopefully this will be more compatible.

Line layout code has been improved so that full justification works.  The main
problem is that we were not considering the fact that Spx/Chx actually affects
the *TextWidth* calculation as well as actual text drawing!  The application's
SpaceExtra/CharExtra is now unscaled (only if Better mode) by a divide by two to
undo the apparent QD Spx/Chx-not-being-scaled-with-picture-bug workaround that all
work processing apps seem to do.  Then we compare the (thus now true) TextWidth
that the app wants with a new *zero*-SpaceExtra/CharExtra (ie, "virgin") TextWidth
call.  This thus yields a true delta with rigorous consideration of Spx/Chx, at
least as far as the *entire* string length is concerned (there is still room for
future improvement: the relative proportion of Spx to Chx should be proportional
to the relative proportions of Spx to Chx that the application requested, so that
tabs within a string line up with lines above and below).  Since the application's
true Spx/Chx, as well as our necessities of font manager 5x->4.5x and QD face
modifiction error, are all taken into consideration, there is no need to do a
*delta*: our final computed Spx/Chx is simply stored, not added, before drawing,
and then of course restored afterward.  Also moved the line layout disable fragment
to a different place and tested.  Also space/readability-optimized the code.

wDev bit 12 to allow disable of special 640 pixelmap handling is already included
even though the 640 pixelmap code still under development is currently disabled.

Much improved 320 mode grayscale handling, because of new ImagerSetGrays routine.
Instead of 3, there are now 11 distinct shades of gray in addition to black/white.

Added new Imager call "ImagerSetGrays" instead of always calling the pixel
conversion table precalculation routine at the end of every ImagerSetLocInfo call.
ImagerSetLocInfo now no longer causes the table to be set up.  Allows for fast
operation even though ImagerSetGrays is increasing in sophistication and time
consumption and more control.  ImagerSetGrays must be called in all cases when
setting up the imager for use.

ImagerSetGrays call improved and lowest-level pixel conversion loop modified
(no change in speed) to use two parallel pixel conversion tables.  For 640 mode,
they are initialized to be identical; for 320 mode, alternate nibbles are converted
from alternate tables.





A18		7-Oct-91

Changed some alert window icons: Printer errors now use Stop icon; Can't-Establish
Communcation error now user Stop icon; other dialogs still use Caution icon or
Note icon as appropriate (Note icon for "messages" such as insert-manual-sheet,
Caution icon for "warnings" such as unsupported-feature and low-memory).

Printer-reported-error status alert window for the fatal error case's OK button is
now a default button (while maintaining the nice code structure).

If not disabled by new wDev bit, and text transfer mode is $0000 only, then we now
force the text transfer mode to $8003 (notBIC).  This causes characters to be painted
nondestructively and thus eliminates the descender clipping problem, but perhaps
at the expense of some programs not printing fully correctly if they rely on using
the white rectangle around text to erase things.

Added wDev bit 13 to allow disable of forcing of text mode described above.

Added Steve Stephenson to credits in about box because I'm using a clever idea
of his in the new line layout code.

New line layout code in which the application's charextra/spaceextra values are
scaled properly, and then added to with a preturbation which achieves the twin
goals of 10% reduction (as with the old line layout code) as well as dealing with
inexact font dimensions based on point sizes (ie, if a string of Times 10 is 100
pixels then the same string in Times 20 is not necessarily 200 pixels).  This
addresses the line layout fine-tuning problem, the bold/italic/outline/shadow text
face clipping problem, and *most* the AWGS full-justification problem.

As before, setting wDev bit 14 still disables line layout.

Added StdPixels patch for special 640 pixelmap handling in the near future.

Added new source file "patchprocs.a" to contain things like our StdText patch,
our InstallWithStats patch, etc.  These used to be in "printloop.a".  This provides
for smaller source files, a better logical split, and me not having to mess around
with the "printloop.a" file while debugging the bottleprocs.





A17		15-Sep-91

Added key equivalents to Setup/Job dialog boxes: [Command]-H,h toggles the height
setting (Normal/Vertical Condense); [Command]-M,m toggles the paper feed setting
(Automatic/Manual).





A16		13-Sep-91

Several no-brainer improvements because Bob is so picky.  The main remaining issues
are: 1) line layout; 2) 640-dithering ugliness in pixelmaps; 3) speed improvement
for font scaling in the font manager.

Changed icon Stop to Caution in printer-reported error dialog box.  Changed
icon Note to Caution for low-memory warning dialog box.

Changed "Cancel" string in button to "OK" in the printer-reported-error dialog
box only if the error is fatal (such as "A serious problem has occurred" message).
A problem, however: the OK button is not a default button.  Fix this later.

A dialog box now appears for if ImagerOpen fails.  This means that if the user
has the wrong printer or if the printer is not connected or if the printer is
off then this dialog appears in addition to the "Device communication error" in
the status box.





A15		13-Aug-91

Changed "Rasterizing page image" back to "Rendering page image".

Added a warning dialog box if an application starts the printing loop after
having set a nonsupported feature (such as Landscape Orientation) in the print
record by itself (Designer Prints does this, for example).  The user either
continue at their own risk or cancel out.  Check to make sure cursor handling
with new error alerts (and the old manual feed alert) works ok; many changes
(added subroutines) have been made so that the code wouldn't grow too much.

Now storing zeros in our-picframe X1 and Y1 before we allow the user-supplied rect
(if any) to be copied in.  This fixes a potential problem where the caller could
have supplied a custom rect and then ask to use the default rect, and then the old
user's X1 and Y1 would still be in there.  This fix will be retrofitted to IW/LQ.

Fixed Designer Prints bug in 320 mode where it would freeze instead of printing.
Designer Prints apparently sets the Better bit to 0 just before calling PrOpenDoc.
Our metrics routines maintain a new field for the quality setting; however, this
setting was not being updated in this case (because GetQuality/SetQuality was
never called) and when GetImagingSize needed to know the quality, it got it wrong.
Thus, we would get into a situation where the Imager and source rectangle believed
the quality was set to 180 dpi, while the destination rectangle assumed that the
quality was set to 360 dpi.

There are many programs (AWGS, HyperCardGS) which treat each page as a whole new
document (to save memory).  This is a BIG problem because we do an immediate reset
at the beginning of each document (in PrOpenDoc), which in many cases would happen
right in the middle of printing the preceding page, thus making it impossible to
print multiple-page documents reliably.  The implemented solution for this problem
is to make PrOpenDoc not do the immediate reset nor reset the "currently printing
page: X" counter ONLY IF the current tick count - last tick count (saved by
PrCloseDoc) is less than an equated constant.  The PrCloseDoc->PrOpenDoc timeout
constant is set to 5 seconds.

Added bug fix in CommOpen/CommClose so that setting "Your Card" for the slot 1
(printer) or slot 2 (modem) does not cause crashing.

HyperCard multipage print jobs not aborting bug has been fixed.

A timeout/abort/out-of-sequence safety mechanism has been added to the
Communications module so that it will never lock up the CPU in cases of serious
internal errors and to make error handling possible.

Error handling has been added by means of a callback mechanism in the Communications
module.  Whenever the low-water mark is reached in CommWrite, the two status bytes
are read.  If there is an error, then a caller-installable proc is called with a
prioritized error code.  Printloop will have installed such a procedure which in
turn calls a routine in the Dialog module which displays a status dialog which
whooshrects out just like the manual feed dialog.  There are three different messages
which may appear: Out of paper, Ready light not on (ie, if in Manual Feed mode,
you put in the sheet, and hit return to get out of the manual feed dialog while
forgetting to press the Ready button first), and Serious Problem has occurred.  The
Serious Problem message happens in cases of pulling the serial cable, power cable,
manhandling the carriage, etc; it specifically happens if any of the following error
bits become asserted: Carriage Jam, Paper Jam, Bad Data Rectange, Buffer Overflow,
and Bad Self Test.  The Out of paper and Ready light on dialogs allow Cancel and
Continue; the Serious Problem dialog only allows Cancel.





A14		8-Jun-91

A few more no-brainers.  Fixed bug in OpenDoc if error on calling ImagerOpen: was
calling StatusMessageWait a second time without resetting A.  Also fixed appearance
(width) of textedit boxes.





A13		29-May-91

If wDev bit 15 is set to "1", then the print status box will not appear.  The manual
sheet feed dialog will still always appear as appropriate, however.  Cleaned up some
code in the process.

Changed wDev bit: the line layout disable bit has been changed from 7 to 14, to avoid
conflict with an already-defined bit (LQ unidirectional) (oops).

Changed "Rendering page image" to "Rasterizing page image".





A12		24-May-91

Fixed a bug resulting from calling GetControlValue on every single control in
the setup/job dialog even if a control wasn't there.  One symptom: with Height set
to Normal, go into job dialog, click OK, and now Height is set to Condensed.
The actions resulting from both dialog settings needs to be retested carefully!





A11		23-May-91

Made combined PrStlDialog/PrJobDialog show only those controls which are relevant.
This means that the dialog box itself is now less tall in size.  The Sheet Feed and
Quality items actually appear in both dialogs, since they can be modified correctly
at either setup or job dialog time.  To make spacing aesthetics work our right, the
vertical condensed height control is now a pair of radio buttons.





A10		22-May-91

Changed requirements for about box appearance from shift-option-apple key down
to click in version number in the upper right hand corner.  Saves code space too.





A9		9-May-91

Added Dave Lyons to about box.

Line layout can now be disabled by setting bit 7 of wDev to "1".  [Now bit 14!!]

The "OK" button in the setup/job dialog box now has a title of either "Setup"
or "Print" as appropriate.  Changed the vertical positions of the controls slightly.

WhooshRect call usage upon appearance and disappearance of manual feed dialog.

Changed all delay loops to use the new System 6.0 WaitUntil system call, saving
some code space.

Added command-period as an additional key equivalent (other than ESC) for the
Page Setup / Print Job dialog box cancel button.





A8		10-Apr-91		Alpha: major and visible feature complete

Premature page-eject "communications bug" is supposed to be fixed.  Be on the
lookout.

Changed communications CommWrite routine to wait if the printer buffer is getting
close to empty; the wait-on-retry delay has been taken out since it would be
redundant.

Changed the CompressSendAddDataRle routine to not put $FF's in the data stream.
The all-white and all-black cases are now one byte shorter, because we now use
the opcodes which specifically take advantage of all-black or all-white bytes.
This results in taking $FF's out of the data stream and slightly more compression,
reducing the possibility of immediate command confusion and adding speed.

The CompressSendAddDataNor routine can still output $FF's, but never more than
two in a row (changing it to not output $FF's made no difference for the page-
ejecting bug).

Added NUL ($00) commands before and after return-buffer-space command sequence.

Put a standard delay before the read loop in CommReadByte, so that the printer has
a few dozen milliseconds to respond to immediate commands.

Fixed unnoticable off-by-one bug that prevented compressor from building data with
run sequences of the actual equated maximum length.

Debugging screen-writing, breakpoints, and total-scc-interrupt-disable removed.
There should be no more AppleShare interaction problems.

Added Bob Haven's name to about box.

Dialog box no longer does double update when first drawn.

LineEdit "From" box is still leaving residue when clicking in the "To" box under
certain circumstances under new system disk.  This will be looked at again when
Dave Lyons is done with LineEdit modifications.

Code removed for displaying error message for incorrect-device, since this driver
is not going to be checking for it (if error from imager is set (which it never
will be) then we just terminate the print loop).

Internal imager call ImagerReset is now called ImagerReady.

ImagerSetPaperType call removed since the printer doesn't know what type of paper
it has (size is defined solely by the DDR rectangles).

Printer is now given printer-command for manual or automatic sheet feed status.

All 5 paper types now supported: US Letter, US Legal, A4 European, B5 European,
and #10 US Envelope.  Added to menu and metrics and fixed imager to round
coordinates down to multiples of 8 pixels for the printer.

Manual sheet feed and envelope printing now works, although not all of the space
on a #10 envelope can be used.

Manual feed insert-next-sheet prompt is now an AlertWindow (saves space) and is
much bigger with detailed instructions.  It no longer shows the current page
number, since it was confusing anyway (*page* number as opposed to *copy* number).

If European B5 or Envelope #10 is selected, then manual-feed mode is forced.





D7		28-Mar-91

This version's communications code writes debug information to the top line of the
screen and contains several break points which should never happen.  These will
be removed in the next version.

Self-ID is now no longer checked at all; Steve Bischoff says that the Mac driver
could never get ID properly either.  So we don't try.  If the user wants to select
the StyleWriter driver and connect a different device, then they won't get an
error, but that's their problem.

Horizontal line layout implemented.  Will need some fine-tuning.  Text spacing
is successfully being reduced by 10% so as not to run off the page.

Speed #3: InstallWithStats patched out during much of ClosePage; when, during
DrawPicture, it is called and we think that the font being installed isn't
needed in the current band, then we censor the call by only having it install the
system font.  Makes MSGS "MegaFonts" actually print in a much more reasonable
(though still unacceptable) amount of time.

Speed #2: Usage of blank-raster and repeat-raster opcodes.  We encapsulate them as
entire graphics commands, which is still not fully efficient as if they were part of
the opcode stream itself, but that isn't possible given our one-transfer-command-
per-line architecture.  User-apparent paper slew speed is improved greatly for pages
with large areas of vertical blank space.  Most of the speed benefit from these
two changes comes from increased pipelining effect: the printer is able to print
longer from its buffer because the data is more compact, and so the print head does
not stop as much or often when the host is rendering the next band.  Slowness is now
virtually entirely dominated by QD/FMGR slowness, and these speed benefits will be
much more important if the latter is speeded up.

Added Lee's name to about box.

The 360 dpi quality mode setting is now the default.

Saved some cycles here and there in compressor.

Compressor speedup attempt using DP variables failed; we need another method,
such as doing a fast-diff-state-0 scan loop.

Longer-lasting status message if device communications error.





D6		7-Jan-91		Projectorized release

Installer scripts and project-build stuff is done.

"Tabasco" strings changed to "StyleWriter".

Note that all unresolved pending issues are now kept in the area above.

There is a communications bug that causes premature page ejects.  The only cure 
for now is a physical CPU system reset.  I request Alpha status when this is fixed.

Successful compressor speedup #1:  Improved performance of the compression encoding
algorithm by doing quicker scanning of runs (sameness bytes with state=2).

Bigger bands:  Fewer "Rendering Page Image" DrawPicture calls are being made due to
a strategy that allows taller bands if memory allows: 64K limit on QD band bitmap
lifted, and the try-smaller-band code tries a 25% reduction each time through the
loop instead of a 50% reduction (*3/4 instead of /2).  Speed improvement.

Communications problem: printer keeps going to error condition on simple documents
that require small amount of rendering time.  Problem is that printer was getting
overrun with space-status calls.  Implemented completely safe, no-performance-impact
heuristic solution:  When the write routine gets a request, it is first checked
against our counter.  If not ok, then the printer space status request is issued, and
the value is pinned to 8K and used to update our counter.  Then the write request
size is checked again.  If not ok, then we wait for X second(s) and then try again.
In practice, this wait happens usually near the beginning of a document as the
printer is feeding in paper.  The delay does not affect performance since it happens
only if the printer is not able to take any more data.  The delay simply lessens
the number of buffer-space-status queries.  This does not address the comm problem.

Metrics is correct 1/4" around all 4 edges of the paper--the printer pretty much
does this automatically.  Left new functional PrinterFormfeed routine in, even
though it isn't being called, perhaps for future blank skip optimizations.

Sometimes text was being clipped across the middle in high resolution mode, with
tall text fonts.  Bug in our-puttext-bottleproc in the clipping logic.  Rewritten.
The bug happened for a piece of text whose starting y coordinate was above the top
of the band buffer AND the ending y coordinate was below the bottom of the band
buffer; it was considered to be "outside" of the band, and thus was not drawn.
This bug also exists in the HP DeskJet PLUS printer driver.

PrPixelMap call now works: it opens the imager, does 180 dpi dump of the given
locinfo, does a form feed, and closes the imager.  This is the most useful thing it
can be expected to do, since it isn't possible to re-init the printer without form
feed and there is no way that the caller could possibly have enough memory to pass
a locinfo with an entire 360 dpi page.  So PrPixelMap is now just a simple screen
shot (or other locinfo graphics) dumper.

Got rid of unused CrWidth stuff (but historical value still stored in pr rec).

Cancelling status message stays up longer so it's readable when aborting.  There is
now StatusMessage and StatusMessageWait, which waits 1 second first.

We need to ship big fonts on the 6.0 disk.  Looks like there's enough space; but
making a 72pt font may not be straighforward due to font manager limitations.

Font smoothing algorithm attempted but discarded.

Obtained and tested with newest v0.98 ROM.





D5		16-Dec-90

Fixed rect error on 180dpi and cleaned up GetImagingSize: We weren't derefing from
ParamLongA during CvtRPageToImagingSize -X and -Y so 180dpi mode always had 360dpi
mode's dimensions.  Delay between reset and imaging really unnecessary; it just
seemed that way because of this bug.

Unidirectional for 360 dpi mode; bidirectional for 180 dpi mode; many issues still
exist: ambiguity over command for unidirectional, unacceptable bidirectional.  This
problem is supossedly fixed in later ROM-rev Tabasco units, we have to get pre-
production units and check bidirectional registration.  Command codes are now as
recommended in the latest specs ($75 for unidirectional).





D4		15-Dec-90		Developmental

Preliminary metrics work done; scaling is close but we haven't paid any attention
to different paper types yet.

Printer hanging on command-period cancel bug existed because we came right out of
filling rectangle (fix by doing ImagerReset before ImagerFormfeed in printloop).

Scaling for 180 dpi is 2.25 horizontal by 2.5 vertical, and for 360 dpi the scaling
is 4.5 horizontal by 5 vertical.  This make text come out almost-correctly as compared
to PostScript laser printer printouts.  ConvertRPageToImgSize code much simplified.

Dialog 180/360 dpi choice and its metrics/print record stuff implemented.





E3		13-Dec-90

Trivial imager modifications all done; it prints now.

Added built-in delay for all status messages which have a tendency to flash-by
quickly (there is now an additional StatusMessageWait call).

Communications routines improved to be interrupt-defensive.





E2		11-Dec-90

Feasability demonstrated; nonfunctional; planning for inclusion in 6.0.

A method of dealing with the Printer/Modem selection and having it reflect in
the dialogs has been implemented.

57.6K Baud communications method has been developed and printer protocol operation
verified: the printer is actually responding to all commands, thus proving
feasiblity of this project.

Communications routine suite finished and tested, featuring write with buffer
management and nonblocking read.





E1		19-Nov-90

If an error is ever returned from DrawPicture, the tool error from ClosePage
is set and the print loop error status (PrError) is set, causing print loop abort.
Retrofix from experience with the other dumb-printer-drivers' last-minute bugs.

Communications routines structure has been defined.

Scaling policy has been defined but not yet implemented.  We will scale to 4X, and
image normally without any bit dropping.  This will cause (640 app-assumed-pix-
always-horizontally * 4 scale-factor) / (360 dpi * 8 inch) = .8888889 error factor,
resulting in .8 inch unused area on the page, which we can turn into two .4 inch
left & right margins.  Alternatively, we might try scaling to 4.5X and see how
well QuickDraw/FontManager perform.





E0		17-Nov-90		Experimental

Tabasco driver implementation begins as investigation.  The nontrivial transistions
from the HP to Tabasco will occur in the following implementation order of priority,
each one of which must succeed in order for this project to stay alive:

(0) Bring over code from HP DeskJet driver and do trivial modifications
(1) Communicate reliably; develop s/w interface in file communications.a
(2) Trivial imager/compressor mods to cause printing, albeit out of scale
(3) Usage of AlertWindow for about box and insert-next-sheet; other cleanups
(4) No static copies of values from print record b/w OpenDoc-OpenPage
(5) Mods to imager/printloop/metrics and policies for correct scaling
(6) Add whiteskip/rept-vert-line to compressor and other speed improvements
(7) Smoothing algorithm, if possible
(8) Esoteric QuickDraw speed improvements
(9) Debugging for Beta status

Implementation will commence as a background project, due to other higher-priority
project responsibilities.  Targeted completion date for this driver is for System
Disk 6.0; targeted background calendar completion date around February 1991.

Brought over code from HP DeskJet PLUS driver, modified makefile and all source
files to use new naming conventions and eliminate obvious HP references.

Modifed about-box dialog code to use AlertWindow.