Subject: Printing (closure?) [addendum]
To: None <netbsd-users@netbsd.org>
From: Richard Rauch <rauch@eecs.ukans.edu>
List: netbsd-users
Date: 03/08/1999 09:13:19
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---310298026-1836659685-920905999=:14962
Content-Type: TEXT/PLAIN; charset=US-ASCII

Brett Slager had a follow-up which he emailed to me privately, unsure if
the content had already been discussed.  To my knowledge, it hadn't passed
through the conversation, and is certainly worth including.

The short of it is: The default lpt?/lpa? devices initialize the port
(minor flag 64 controls this; see lpt(4)), with the default MAKEDEV.  So,
when a new parallel-port print-job starts up, the printer is
reinitialized, damaging/ruining both the completing & new print-jobs.

See Brett's pr 7101 in the NetBSD bug report database.  (The two that I
filed yesterday are 7099 and 7100, relating to lpr & lprm.)

---

The long of it:

This contradicts, and corrects, my assumption that GhostScript was
emitting ``agressive'' printer-reset codes.  (I probably should have
actually examined the GhostScript output stream, or read the appropriate
sources---I _do_ have the LQ-850 printer manual, and could readily have
determined the meanings of the codes; I was lazy; mea culpa.)

The FIX: Make a new set of device nodes with the ``no prime'' option
(minor flag 64) set, and direct any parallel printers to use this.  Using
/dev/MAKEDEV as a model, I added an entry to /dev/MAKDEV.local which
defines /dev/lptnp? and /dev/lpanp?, where ``?'' is in {0,1,2}.  These are
modeled after the lpt? and lpa? devices in MAKEDEV, with 64 added to the
minor number to turn off the reset pin.  I offer my /dev/MAKEDEV.local at
the end, without any promises of correctness.  ``I am only an egg.''

(Brett dubbed his lpt?np and lpa?np, for reference.  As far as I know, the
name makes no difference, and I prefered to have the device-unit trail the
name, rather than having the name prefixes match as closely as possible.)

After that, redirect your /etc/printcap entry (or entries) to use the new
parallel device node(s).

I now have my printer's buffer re-enabled (though it makes no difference
in performance, that I can see).  Brett's solution is cleaner, however,
for at least two reasons:

A) It is independant of the printer---it may not be that every printer has
   its buffer as readily disabled as my LQ-850.

B) I do not know for certain what would happen if a printer-reset occurs
   while the printer is in the middle of printing a line (_that_ much of
   a buffer may be impossible to avoid).  Some printers may not even
   have a concept of a ``line''.  I assume that at least some
   printers would always have the danger of being reset if the parallel
   port is allowed to send a reset everytime it is opened.


Of course, this little exercise has taught me one other thing: If I ever
need to do a printer-reset, I should be able to do so by simply opening &
closing /dev/lpt0.  That is a potentially valuable tidbit.


I will MIME-attach my MAKEDEV.local; I'm sure that if I did anything
abominable, someone will correct me.  (But, for that, it may be best to
start a new thread on MAKEDEV...)  Naturally, I include my MAKEDEV.local
purely for reference; you are encouraged to thoughtfully modify your own
MAKEDEV.local rather than rely upon me...(^&

After running MAKEDEV.local with `all', I get the following:

# ls -l /dev/lp*
crw-------  1 root  wheel  16, 128 Jan 27 13:50 /dev/lpa0
crw-------  1 root  wheel  16, 129 Jan 27 13:50 /dev/lpa1
crw-------  1 root  wheel  16, 130 Jan 27 13:50 /dev/lpa2
crw-------  1 root  wheel  16, 192 Mar  7 17:25 /dev/lpanp0
crw-------  1 root  wheel  16, 193 Mar  7 17:25 /dev/lpanp1
crw-------  1 root  wheel  16, 194 Mar  7 17:25 /dev/lpanp2
crw-------  1 root  wheel  16,   0 Mar  7 13:54 /dev/lpt0
crw-------  1 root  wheel  16,   1 Jan 27 13:50 /dev/lpt1
crw-------  1 root  wheel  16,   2 Jan 27 13:50 /dev/lpt2
crw-------  1 root  wheel  16,  64 Mar  7 18:15 /dev/lptnp0
crw-------  1 root  wheel  16,  65 Mar  7 17:25 /dev/lptnp1
crw-------  1 root  wheel  16,  66 Mar  7 17:25 /dev/lptnp2

(Again, the ``np'' is for ``No Prime'', the version that does NOT reset my
parallel device whenever the port is opened.)


...I really don't need all of those; I just use /dev/lptnp0.  But it
mirrors the MAKEDEV constructions.  Symmetry tends to make things simpler
for me to understand.


Thanks again to Brett for pointing this out.  


  "I probably don't know what I'm talking about." --rauch@eecs.ukans.edu

---310298026-1836659685-920905999=:14962
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="MAKEDEV.local"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.04.9903080913190.14962@pink8.eecs.ukans.edu>
Content-Description: 
Content-Disposition: attachment; filename="MAKEDEV.local"

IyEvYmluL3NoIC0NCiMNCiMJJE5ldEJTRDogTUFLRURFVi5sb2NhbCx2IDEu
NSAxOTk3LzA3LzMxIDA0OjA4OjE1IHBlcnJ5IEV4cCAkDQojDQojIENvcHly
aWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv
ZiBDYWxpZm9ybmlhLg0KIyBBbGwgcmlnaHRzIHJlc2VydmVkLg0KIw0KIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQNCiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
DQojIGFyZSBtZXQ6DQojIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQojICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4NCiMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLg0KIyAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l
bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUNCiMg
ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50
Og0KIwlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk
IGJ5IHRoZSBVbml2ZXJzaXR5IG9mDQojCUNhbGlmb3JuaWEsIEJlcmtlbGV5
IGFuZCBpdHMgY29udHJpYnV0b3JzLg0KIyA0LiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycw0KIyAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCiMgICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQoj
DQojIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMg
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EDQojIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQ0KIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQ0KIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBS
RUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCiMgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwNCiMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMNCiMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQojIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUDQojIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkNCiMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KIyBTVUNI
IERBTUFHRS4NCiMNCiMJQCgjKU1BS0VERVYubG9jYWwJOC4xIChCZXJrZWxl
eSkgNi85LzkzDQojDQoNCiMgTG9jYWwgZGV2aWNlIE1BS0VERVYgc2NyaXB0
Lg0KDQpQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluDQp1bWFz
ayA3Nw0KZm9yIGkNCmRvDQpjYXNlICRpIGluDQoNCmFsbCkNCgkjc2ggJDAg
bGlzdF9vZl9hbGxfZGV2aWNlcw0KCXNoICQwIGxwdG5wMCBscHRucDEgbHB0
bnAyIGxwYW5wMCBscGFucDEgbHBhbnAyDQoJOzsNCmxwdG5wKnxscGFucCop
DQoJY2FzZSAkaSBpbg0KCWxwdG5wKikgbmFtZT1scHRucDsgdW5pdD0ke2kj
bHB0bnB9OwljaHI9MTY7CWZsYWdzPTY0OzsNCglscGFucCopCW5hbWU9bHBh
bnA7IHVuaXQ9JHtpI2xwYW5wfTsJY2hyPTE2OwlmbGFncz0xOTI7Ow0KCWVz
YWMNCglybSAtZiAkbmFtZSR1bml0DQoJbWtub2QgJG5hbWUkdW5pdAljICRj
aHIgJCgoJHVuaXQgKyAkZmxhZ3MpKQ0KCWNob3duIHJvb3Qud2hlZWwgJG5h
bWUkdW5pdA0KOzsNCiopDQoJZWNobyAiJDA6IHVua25vd24gZGV2aWNlIHR5
cGU6ICQqIg0KCTs7DQplc2FjDQpkb25lDQo=
---310298026-1836659685-920905999=:14962--