Here's what I've come up with, in case anyone else needs a solution to this problem. If the printer is not connected or is off, the user is asked to check the connection, and if there is a live printer connected and it is not the one currently chosen in the print preferences panel then the user is asked to select the printer to use.

Scripts appear below (watch linewraps). The getActivePrinter() function will need adjusting to cope with all the possibilities for printer names and other USB device types, but this setup is now working on my system -- it will break, however, if all non-printer USB devices are not filtered out, so this will need some error-checking.

Again, anyone know the significance of the number after the "@" character in the shell("ioreg") results? It looks like a hex value. Port number? Or something specific to the device type?

-- Peter

Peter M. Brigham
[email protected]
http://home.comcast.net/~pmbrig

----------

-- before any printing, insert this snippet, eg,:
-- at the start of a "print" button handler

if not checkPrinter() then
   uChoosePrinter
end if

----------

-- the following handlers go in the stack script
-- or a library script

function checkPrinter
   put getActivePrinter() into tLivePrinter
   --  DeskJet 845C
   put getDefaultPrinter() into tDefaultPrinter
   --  HP DESKJET 845C
   return tLivePrinter is in tDefaultPrinter
end checkPrinter

on uChoosePrinter
   put getActivePrinter() into tActivePrinter
   if tActivePrinter = empty then
put "You are not connected to any active printer. Please check that" && \ "your printer is turned on and connected properly." into tPrompt
      answer tPrompt as sheet
      exit to top
   else
      put "You appear to have changed printers. Please select" && \
             "the printer you are now using." into tPrompt
      answer tPrompt as sheet
      set the systemprintselector to true
      answer printer
   end if
end uChoosePrinter

function getDefaultPrinter
   put word 4 of shell("lpstat -d") into tDefaultPrinter
   --   shell returns:  system default destination: HP_DESKJET_845C
   replace "_" with space in tDefaultPrinter
   return tDefaultPrinter
end getDefaultPrinter

function getActivePrinter
   put shell("ioreg") into tList
   filter tList with "*IOUSBDevice*"
   --  result:
   --  | |   |   +-o DeskJet 8...@1d100000  <class IOUSBDevice, \
   --          registered, matched, active, busy 0, retain 8>
   --  | |   |   +-o IR recei...@5d100000  <class IOUSBDevice, \
   --          registered, matched, active, busy 0, retain 8>
   --  | |   |   +-o Apple Internal Keyboard / track...@5d200000  \
-- <class IOUSBDevice, registered, matched, active, busy 0, retain 10>
   --  | |   |   +-o iousbwirelesscontrollerdev...@1a100000  <class \
-- IOUSBDevice, registered, matched, active, busy 0, retain 10>
   --  | |   |   +-o wireless laser notebook mo...@1a200000  <class \
-- IOUSBDevice, registered, matched, active, busy 0, retain 8>
   --  | |   |   +-o Built-in isi...@fd400000  <class IOUSBDevice, \
   --          registered, matched, active, busy 0, retain 9>
   filter tList without "*Keyboard*"
   filter tList without "* IR *"
   filter tList without "*Wireless*"
   filter tList without "*mouse*"
   filter tList without "*iSight*"
   --  do we need more filters to exclude other devices?
   repeat for each line d in tList
      put offset("+-o",d)+4 into startChar
      put offset("@",d)-1 into endChar
      put (char startChar to endChar of d) & cr after newList
   end repeat
   delete char -1 of newList
   --  tList should actually be just one line at this point
   --  DeskJet 845
   if the number of lines of newList > 1 then
      --  catch unfiltered devices for refining
      answer "Error in filtering USB devices:" & cr & newList as sheet
      exit to top
   else
      return newList
   end if
end getActivePrinter

-----------


On Nov 20, 2009, at 6:40 AM, JosepM wrote:


I'm very glad that this will be usefully for you. As I say, the only
problem is convert the printer name to use "_". I preparing my own
stack printer options to print using the shell commands.

Here you can found more info with more deep.

http://www.cups.org/doc-1.1/sum.html

When I have something visible I send you for if can be usefully.


Salut,
Josep

El 20/11/2009, a las 6:14, Phil Davis-5 [via Runtime Revolution]
escribió:

This is the best so far!

Phil Davis



JosepM wrote:

Hi,

Also you can use from the shell:

lpstat -p --> to see the available printers
lpstat -d --> to know the default printer name

and to send directly to the printer:

lpr -P <name of the printer> -o page-ranges=1 -o landscape <path
to the file
to print>

If you check the lpr command in CUPS manual you can see a lot of
options to
control the job sended to the printer. The question is capture the
name of
the printer or class.
The name use "_" for spaces, assigning the name directly don't
work, almost
for me.


Salut,
Josep


--
Phil Davis

PDS Labs
Professional Software Development
http://pdslabs.net

_______________________________________________
use-revolution mailing list
[hidden email]
Please visit this url to subscribe, unsubscribe and manage your
subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


View message @ 
http://n4.nabble.com/knowing-if-a-printer-is-connected-tp624188p624409.html
To unsubscribe from Re: knowing if a printer is connected, click here.



--
View this message in context: 
http://n4.nabble.com/knowing-if-a-printer-is-connected-tp624188p624552.html
Sent from the Revolution - User mailing list archive at Nabble.com.
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to