[fa.laser-lovers] Apple Laserwriter XON/XOFF problem

laser-lovers@uw-beaver (10/23/85)

From: Allan Hetzel  <SYSAL%UKCC.BITNET@WISCVM.arpa>

We are running several Apple Laserwriters connected to an IBM mainframe
running VM.  The connection is through RSCS and an IBM 7171 protocol
converter.  Line speed is 9600.  We are experiencing the XON/XOFF problem
which is described in the known problems section of the Postscript manual.
(The Laserwriter forgets to send an XON after sending an XOFF. The printer
times out and the job is flushed.)  The problem only occurs during long
documents, 50 pages or more.  Has anyone else experienced this problem
or have a possible circumvention for it?  Our local dealer has tried to
talk to Apple but nothing has been heard from them yet.

I know that this problem will supposedly be taken care of in the next ROM
upgrade (whenever that is), but that doesn't help much now.  I've experimented
with replacing the timeout error handler in errordict with one that sends an
XON but don't have anything which works yet.

Allan Hetzel
Computing Center
University of Kentucky

laser-lovers@uw-beaver (10/28/85)

From: joseph@SCRC-QUABBIN.arpa

    Date:         Tue, 22 Oct 85 12:34 EST
    From:           Allan Hetzel  <SYSAL%UKCC.BITNET@WISCVM.ARPA>

    We are running several Apple Laserwriters connected to an IBM mainframe
    running VM.  The connection is through RSCS and an IBM 7171 protocol
    converter.  Line speed is 9600.  We are experiencing the XON/XOFF problem
    which is described in the known problems section of the Postscript manual.
    (The Laserwriter forgets to send an XON after sending an XOFF. The printer
    times out and the job is flushed.)  The problem only occurs during long
    documents, 50 pages or more.  Has anyone else experienced this problem
    or have a possible circumvention for it?  Our local dealer has tried to
    talk to Apple but nothing has been heard from them yet.

I had to deal with this when I was working on LW support for the Symbolics
36xx product line.  The fix I finally got from Adobe was pretty gross, and
I can't swear that it has fixed all bugs of this class, but it helped a lot.
Basically the idea is to "whap upside the head" the FSM that reads tokens
from the serial port.  I think the FSM really would like to see the tokens
seperated by whitespace, but is prepared to accept unambiguous strings of
self-delimiting tokens.  When it encounters the latter, it gets nervous and
recalculates a lot of internal state, including the state involved in the
XOFF/XON calculations.  So, hit it often enough and it behaves.  [I wouldn't
advocate extending this technique beyond the LW, though.]

The "whap" for me was to insert a ()pop sequence after every string that
got shown, plus at a few other places.  I didn't have time to find out what
the minimal number of such sequences were.  The disadvantages of this 
technique are that you may waste storage storing the LW input (if you are
spooling raw LW bits) and you "waste" your serial bandwidth.  

Anybody know if there's a way to ask the LW what ROM version is running?

A different approach, suggested by a friend at Apple, is:
    
  ...if you know the LaserWriter is in this *wedged* state,
  you can get it out of said state by simply sending down a
  XON.  Because your end has received an XOFF and nothing since
  from the LaserWriter, it may be difficult to get the XON
  down the line, but if you can (says [...]) the LaserWriter
  will come to life again.
  
  But how do you detect that it's in the wedge-o-matic mode?
  Well, if you set a timeout that's just shorter than the LaserWriter's
  job timeout, than when your timeout goes off you can send the XON,
  restart the LaserWriter, and prevent the world from crashing.

    I know that this problem will supposedly be taken care of in the next ROM
    upgrade (whenever that is), but that doesn't help much now.  I've experimented
    with replacing the timeout error handler in errordict with one that sends an
    XON but don't have anything which works yet.

My source at Apple tells me these are "January ROMs" but I don't know whether
that's when Apple gets them from Adobe or they start to ship from Apple.  And
(as of early September) they hadn't gotten any from Adobe yet, so they couldn't
say whether the bug had been eradicated.

Joseph Goldstone
Symbolics Cambridge Research Center

FURUTA@WASHINGTON.ARPA (10/28/85)

From: joseph@SCRC-QUABBIN.ARPA

    Date:         Tue, 22 Oct 85 12:34 EST
    From:           Allan Hetzel  <SYSAL%UKCC.BITNET@WISCVM.ARPA>

    We are running several Apple Laserwriters connected to an IBM mainframe
    running VM.  The connection is through RSCS and an IBM 7171 protocol
    converter.  Line speed is 9600.  We are experiencing the XON/XOFF problem
    which is described in the known problems section of the Postscript manual.
    (The Laserwriter forgets to send an XON after sending an XOFF. The printer
    times out and the job is flushed.)  The problem only occurs during long
    documents, 50 pages or more.  Has anyone else experienced this problem
    or have a possible circumvention for it?  Our local dealer has tried to
    talk to Apple but nothing has been heard from them yet.

I had to deal with this when I was working on LW support for the Symbolics
36xx product line.  The fix I finally got from Adobe was pretty gross, and
I can't swear that it has fixed all bugs of this class, but it helped a lot.
Basically the idea is to "whap upside the head" the FSM that reads tokens
from the serial port.  I think the FSM really would like to see the tokens
seperated by whitespace, but is prepared to accept unambiguous strings of
self-delimiting tokens.  When it encounters the latter, it gets nervous and
recalculates a lot of internal state, including the state involved in the
XOFF/XON calculations.  So, hit it often enough and it behaves.  [I wouldn't
advocate extending this technique beyond the LW, though.]

The "whap" for me was to insert a ()pop sequence after every string that
got shown, plus at a few other places.  I didn't have time to find out what
the minimal number of such sequences were.  The disadvantages of this 
technique are that you may waste storage storing the LW input (if you are
spooling raw LW bits) and you "waste" your serial bandwidth.  

Anybody know if there's a way to ask the LW what ROM version is running?

A different approach, suggested by a friend at Apple, is:
    
  ...if you know the LaserWriter is in this *wedged* state,
  you can get it out of said state by simply sending down a
  XON.  Because your end has received an XOFF and nothing since
  from the LaserWriter, it may be difficult to get the XON
  down the line, but if you can (says [...]) the LaserWriter
  will come to life again.
  
  But how do you detect that it's in the wedge-o-matic mode?
  Well, if you set a timeout that's just shorter than the LaserWriter's
  job timeout, than when your timeout goes off you can send the XON,
  restart the LaserWriter, and prevent the world from crashing.

    I know that this problem will supposedly be taken care of in the next ROM
    upgrade (whenever that is), but that doesn't help much now.  I've experimented
    with replacing the timeout error handler in errordict with one that sends an
    XON but don't have anything which works yet.

My source at Apple tells me these are "January ROMs" but I don't know whether
that's when Apple gets them from Adobe or they start to ship from Apple.  And
(as of early September) they hadn't gotten any from Adobe yet, so they couldn't
say whether the bug had been eradicated.

Joseph Goldstone
Symbolics Cambridge Research Center

laser-lovers@uw-beaver (11/01/85)

From: Allan Hetzel  <SYSAL%UKCC.BITNET@WISCVM.arpa>

The note posted to Laser-Lovers on Oct 28 by Joseph Goldstone of Symbolics
Cambridge Research Center was helpful but I didn't try his suggested fix
correctly and so I called Adobe.  They were very helpful (much more so than
Apple) and explained the problem and how to bypass it.

My apologies to Adobe if this not an accurate description of the problem.
The problem apparently is due to the PostScript interpreter getting confused
by what it thinks is an excess of white space characters.

The bypass is to place a special character (parenthesis, bracket, brace,
slash, etc.) to the right of some token, but without an intervening white
space character. As the PostScript scanner reads the token it also reads the
special character which acts as a delimiter. The scanner then has to back up
one character so that it can reprocess the special character after it has
processed the preceding token.  During this backing up process a number of
internal values are recalculated, including some pointer into the input buffer.
This causes the XON/XOFF protocol to work properly.  Doing this once per page
seems to keep everybody happy.

Each page in the PostScript file built by our word processing program is
surrounded by a "save restore" sequence. We changed the beginning save
sequence "/saveobj save def" to read "/saveobj save def() pop".
The "() pop" is effectively a no-op and we are assured that the necessary
recalculations are done on each page.  This seems to have corrected the problem
completely.

Allan Hetzel (sysal@ukcc.bitnet)