files/examples/luasocket/lpr.lua
local lp = require("socket.lp")

local function usage()
  print('\nUsage: lua lpr.lua [filename] [keyword=val...]\n')
  print('Valid keywords are :')
  print(
     '  host=remote host or IP address (default "localhost")\n' ..
     '  queue=remote queue or printer name (default "printer")\n' ..
     '  port=remote port number (default 515)\n' ..
     '  user=sending user name\n' ..
     '  format=["binary" | "text" | "ps" | "pr" | "fortran"] (default "binary")\n' ..
     '  banner=true|false\n' ..
     '  indent=number of columns to indent\n' ..
     '  mail=email of address to notify when print is complete\n' ..
     '  title=title to use for "pr" format\n' ..
     '  width=width for "text" or "pr" formats\n' ..
     '  class=\n' ..
     '  job=\n' ..
     '  name=\n' ..
     '  localbind=true|false\n'
     )
  return nil
end

if not arg or not arg[1] then
  return usage()
end

do
    local opt = {}
    local pat = "[%s%c%p]*([%w]*)=([\"]?[%w%s_!@#$%%^&*()<>:;]+[\"]\?\.?)"
    for i = 2, table.getn(arg), 1 do
      string.gsub(arg[i], pat, function(name, value) opt[name] = value end)
    end
    if not arg[2] then
      return usage()
    end
    if arg[1] ~= "query" then
        opt.file = arg[1]
        r,e=lp.send(opt)
        io.stdout:write(tostring(r or e),'\n')
    else
        r,e=lp.query(opt)
        io.stdout:write(tostring(r or e), '\n')
    end
end

-- trivial tests
--lua lp.lua lp.lua queue=default host=localhost
--lua lp.lua lp.lua queue=default host=localhost format=binary localbind=1
--lua lp.lua query queue=default host=localhost
