Subject: Re: a2ps and printer
From: gilles civario <[email-masked]>
To: [email-masked]
Cc: [email-masked]
Date: Wed, 14 May 2003 07:36:53 +0200

Igor Pechtchanski wrote:
> On Tue, 13 May 2003, gilles civario wrote:
> 
> 
>>Igor Pechtchanski wrote:
>>
>>>On Tue, 13 May 2003, gilles civario wrote:
>>>
>>>
>>>>>Gilles,
>>>>>
>>>>>I'm getting the same message ("lpr: The printer name is invalid") for the
>>>>>//server/printer syntax.  However, I've just verified that the
>>>>>'\\\\server\\printer' syntax works for me (i.e., use backslashes, and
>>>>>escape them *twice*).  Hope this helps,
>>>>>     Igor
>>>>
>>>>Igor,
>>>>I'd checked this syntax too. And the anther is :
>>>>
>>>>$ file gettime.c
>>>>gettime.c: ASCII C program text
>>>>$ lpr -P \\\\mimosa\\glaieul gettime.c
>>>>lpr: StartDocPrinter error
>>>>lpr: Le type de donne spcifi n'est pas valide.
>>>
>>>Gilles,
>>>
>>>No, no, no.  You didn't read what I said carefully.  I said the
>>>backslashes have to be escaped *twice*!  You missed the single quotes.
>>>The correct syntax would be
>>>
>>>$ lpr -P '\\\\mimosa\\glaieul' gettime.c
>>>
>>>(note the quotes).  That's what worked for me, and should work for you as
>>>well.  Alternatively,
>>>
>>>$ lpr -P \\\\\\\\mimosa\\\\glaieul gettime.c
>>>
>>>should also work.
>>
>>Yes, I'd well read you, but here are the results :
>>
>>$ lpr -P '\\\\mimosa\\glaieul' gettime.c
>>lpr: can't open '\\\\mimosa\\glaieul' for writing
>>lpr: Adresse rseau non valide.
>>
>>$ lpr -P \\\\\\\\mimosa\\\\glaieul gettime.c
>>lpr: can't open '\\\\mimosa\\glaieul' for writing
>>lpr: Adresse rseau non valide.
>>
>>Adresse rseau non valide => Invalid network adresse
>>
>>$ lpr -P \\\\mimosa\\glaieul gettime.c
>>lpr: StartDocPrinter error
>>lpr: Le type de donne spcifi n'est pas valide.
>>
>>$ lpr -P '\\mimosa\glaieul' gettime.c
>>lpr: StartDocPrinter error
>>lpr: Le type de donne spcifi n'est pas valide.
>>
>>Le type de donne spcifi n'est pas valide => Invalid data type
>>
>>So i don't know what append.
> 
> 
> Gilles,
> 
> I have to apologize.  The initial message contained the syntax for a2ps,
> which does need additional escapes.  For lpr itself you don't need to
> escape the backslashes twice, so your syntax ('\\mimosa\glaieul' or
> \\\\mimosa\\glaieul) should work.  Sorry for the misunderstanding.
> 
> Why not try initially to just
> 
> $ echo Testing^L | lpr -P '\\mimosa\glaieul'
> 
> ?  (The ^L is the actual Ctrl-L character, you can escape it with Ctrl-V
> in bash).
> 
> 
>>>>$ unix2dos gettime.c
>>>>gettime.c: done.
>>>>$ file gettime.c
>>>>gettime.c: ASCII C program text, with CRLF line terminators
>>>>$ lpr -P \\\\mimosa\\glaieul gettime.c
>>>>lpr: StartDocPrinter error
>>>>lpr: Le type de donne spcifi n'est pas valide.
>>>>
>>>>While tracing the process with strace, I seen this :
>>>>
>>>>  295  107178 [main] lpr 1428 fhandler_disk_file::open: 1 = fhandler_disk_file::open (d:\civario\tmp\gettime.c, 0x0)
>>>>  293  107471 [main] lpr 1428 open: 3 = open (gettime.c, 0x0)
>>>>  231  107702 [main] lpr 1428 _cygwin_istext_for_stdio: _cygwin_istext_for_stdio (3)
>>>>  231  107933 [main] lpr 1428 _cygwin_istext_for_stdio:  _cifs: get_*_binary
>>>> 3195  111128 [main] lpr 1428 writev: writev (2, 0x22E420, 1)
>>>>  400  111528 [main] lpr 1428 fhandler_console::write: 22E4B0, 5
>>>>  245  111773 [main] lpr 1428 fhandler_console::write: at 108(l) state is 0
>>>>lpr:   347  112120 [main] lpr 1428 fhandler_console::write: 5 = write_console (,..5)
>>>>  254  112374 [main] lpr 1428 writev: 5 = write (2, 0x22E420, 1), errno 0
>>>>  248  112622 [main] lpr 1428 writev: writev (2, 0x22E440, 1)
>>>>  236  112858 [main] lpr 1428 fhandler_console::write: 22E4D0, 21
>>>>  225  113083 [main] lpr 1428 fhandler_console::write: at 83(S) state is 0
>>>>StartDocPrinter error  310  113393 [main] lpr 1428 fhandler_console::write: 21 = write_console (,..21)
>>>>
>>>>I think (but I may be wrong) that the text file is seen as a
>>>>binary one by lpr.
>>>
>>>That shouldn't matter.  The lpr you're using is smart enough not to care
>>>too much.
> 
> 
> Actually, I've just tried the same command as you did, and it worked for
> me, even when the file was in DOS mode...  It even works if the file
> contains accented characters (in comments).  Strange...
> 
> Is your printer a postscript printer?  What is the driver?  What OS are
> you running?

My printer is a poscript printer, HP Laserjet 5SiMx.
The driver is the one provided by Windows as "HP Laserjet 5SI/5SI MX PS".
My os is Win2000 5.00.2195 SP2.

> FYI, StartDocPrinter is a Windows function.  That lpr implementation is
> pretty simple-minded and sets the data type to "raw" unconditionally.
> Perhaps your driver doesn't recognize it (or is case-sensitive on data
> type specification)...
> 
> Since you can reproduce the problem, the best thing to try (given time, of
> course) would be for you to download the source of the cygutils package
> (through setup.exe); first compile lpr and see if it works, and then try
> to tweak little things (like the case of the datatype specification, or
> setting pOutputFile to NULL instead of "", as recommended by MSDN).  For
> reference, here's the relevant MSDN page:
> <http://msdn.microsoft.com/library/en-us/gdi/prntspol_33n6.asp>.  You
> could then contribute a patch (against the original sources) back to the
> project.
> 	Igor
>

Igor.
Excellent idea. I've download the lpr sources and change the di1.pDatatype
from "raw" to "RAW"... Miracle, it's work perfectly !
As the StartDocPrinter error message were saying, the data type was incorect.

Here is the output of a uname -a on my machine :
$ uname -a
CYGWIN_NT-5.0 hepatique 1.3.22(0.78/3/2) 2003-03-18 09:20 i686 unknown unknown Cygwin

And here is the diff betwwen the two lpr.c files :
$ diff -urN lpr.c.orig lpr.c
--- lpr.c.orig  2002-03-03 04:09:42.000000000 +0100
+++ lpr.c       2003-05-14 07:27:22.000000000 +0200
@@ -110,7 +110,7 @@

    di1.pDocName = docName;
    di1.pOutputFile = "";
-  di1.pDatatype = "raw";
+  di1.pDatatype = "RAW";

    if (StartDocPrinter(deviceHandle, 1, (LPBYTE) &di1) == 0)
      exitCode = error(1, "StartDocPrinter error");

Thanks a lot for the help.

Gilles.

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/