[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Hardcopy with TCP/IP? Sure thing.
Date: Sun, 13 Dec 87 22:13 EST
From: Robert W. Kerns <RWK@YUKON.SCRC.Symbolics.COM>
Your code seems to have been slightly mangled somehow;
your UNWIND-PROTECT has no cleanup-forms.
Date: Mon, 14 Dec 87 19:37:08 +0100
From: mcvax!jungfrau!ceb@uunet.UU.NET
So it made it through after all. Oh well.
Right you are about the cleanup form. It is
(when stream (send stream :close :abort))
Feel free to pass it on, or better yet, gadgets like this should be
part of the release (there wasn't much to it),
but it took me a few
hours of swimming through the lisp code to figure out what to do.
Others are writing lgpd servers (!).
Anyway, thanks for pointing out the error.
Date: Sat, 12 Dec 87 20:40:31 +0100
From: mcvax!jungfrau!ceb@uunet.UU.NET
Assuming that your unix machine's tcp software has an rexec deamon
(usually called /etc/rexecd), then the following will do the job. You
load this file into your Lisp machine and be sure it is saved into the
world.
Another thing you will have to do is add a service to the unix
machines host entry in the namespace. This service is
HARDCOPY <tcp-medium> UNIX-REXEC
where <tcp-medium> is whatever the medium string for TCP/IP is called.
I forget at the moment, and am at home. This one is set up to use a
special account, which is associated with an ersatz shell allowing only
lpr and a couple of other harmless commands (sort of like uucico).
This way, its password can be quasi-common-knowledge. I recommend you
follow this practice as well --- I tried it with passwords and the
user's machine account, but the incessant pop-up windows ran me bananas.
You may want to customize the command strings and the harunching around
of argument options, but this should be pretty easy to figure out.
Charles Buckley uucp: mcvax!ethz!ceb
earn: BUCKLEY@CZHETH5A
arpa: mcvax!ethz!ceb@uunet.uu.net
cb@sail.stanford.edu
Integrated Systems Laboratory
ETH-Zentrum
Postal Address:
Wiesgasse 9
CH-8304 Wallisellen
Tel: +411 256 52 45
---- cut here ----
;;; -*- Mode: LISP; Package: HARDCOPY; Base: 10; Syntax: Common-lisp -*-
;;
;; hardcopy-through-rexec.lisp
;;
;; C. Buckley
;; Integrated Systems Laboratory
;; Swiss Federal Institute of Technology
;; Zurich
;;
;; 13 October 1987
;;
;; Since there are no LGP servers for TCP on unix, we simulate
;; the same thing using the rexec service, and the lpr
;; command. Ugh. This version uses a special account called
;; lispm, with password conscarcdr, which can only print files.
;;
;;
;; We here define the protocol to generate the hardcopy
;; stream using rexec.
;;
(net:define-protocol :unix-rexec (:hardcopy :byte-stream)
(:desirability .8)
(:invoke (path)
(let* ((host (neti:service-access-path-host path))
(args (neti:service-access-path-args path))
(options (second args))
(plist (locf options))
(file-name (get plist :title))
(no-banner-page (not (get plist :print-cover-pages)))
(copies (get plist :copies))
(printer-name (string-downcase (send (send (first args) :name)
:string)))
(command-string
(string-append "lpr "
(if printer-name
(string-append "-P" printer-name " ") "")
(if file-name
(string-append "-J \"" (string file-name) "\" ")
"")
(if no-banner-page "-h " "")
(if (and (numberp copies) (> copies 1))
(format nil "-\#~d " copies) "")
"-C \"" (string host) "\""))
(stream (neti:get-connection-for-service path :characters nil)))
(unwind-protect
(progn
(send stream :string-out (string-to-ascii "0"))
(send stream :tyo 0)
(send stream :string-out (string-to-ascii "lispm"))
(send stream :tyo 0)
(send stream :string-out (string-to-ascii "conscarcdr"))
(send stream :tyo 0)
(send stream :string-out (string-to-ascii command-string))
(send stream :tyo 0)
(send stream :force-output)
(if (zerop (send stream :tyi))
(progn
(send stream :string-out (string-to-ascii "%!"))
stream)
(progn
(error "REXEC error from ~A: ~A" host
(ascii-to-string
(with-output-to-string (s)
(stream-copy-until-eof stream s))))
(send stream :close :abort)
nil)))))))