(FILECREATED " 8-Jul-86 12:37:19" {ERIS}<LISPUSERS>KOTO>SETDEFAULTPRINTER.;1 5599   

      changes to:  (FNS \sdp.set.printer)

      previous date: "24-Mar-86 16:35:53" {ERIS}<LISP>KOTO>LISPUSERS>SETDEFAULTPRINTER.;1)


(* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT SETDEFAULTPRINTERCOMS)

(RPAQQ SETDEFAULTPRINTERCOMS ((* * the regular DEFAULTSUBITEMFN modified to recognize EVAL as a key 
				   to EVAL the CADR of the list to get the subitems)
				(FILES DEFAULTSUBITEMFN)
				(* * the setdefaultprinter functions)
				(FNS \sdp.get.printer \sdp.menu.subitems \sdp.set.printer)
				(* * SDP.PRINTERINFO is the place to look up things like printer 
				   location, it also looks on the name of the printer for a LOCATION 
				   property)
				[INITVARS (SDP.PRINTERINFO NIL)
					  (\\sdp.read.table (COPYREADTABLE (QUOTE ORIG]
				(* * the variables that signal recreating the menu subitems)
				(VARS (\\sdp.known.printers)
				      (\\sdp.menu.subitems))
				(* * insinuate self into background menu)
				[ADDVARS (BackgroundMenuCommands ("Set Default Printer"
								   (\sdp.set.printer (\sdp.get.printer
										       ))
								   
		"Asks for (new) default printer name.  <cr> without entering name aborts change."
								   (EVAL (\sdp.menu.subitems]
				(* * reset the background menu so our change takes effect, and remove 
				   space from the separators when reading printer names)
				(P (SETQ BackgroundMenu)
				   (SETSYNTAX 32 (QUOTE OTHER)
					      \\sdp.read.table))))
(* * the regular DEFAULTSUBITEMFN modified to recognize EVAL as a key to EVAL the CADR of the 
list to get the subitems)

(FILESLOAD DEFAULTSUBITEMFN)
(* * the setdefaultprinter functions)

(DEFINEQ

(\sdp.get.printer
  [LAMBDA NIL                                                (* N.H.Briggs "24-Mar-86 16:24")
                                                             (* TBigham " 2-Dec-85 07:48")
    (DECLARE (GLOBALVARS LASTMOUSEX LASTMOUSEY \\sdp.read.table))
    (LET* ((font (DEFAULTFONT (QUOTE DISPLAY)))
	   (prompt "Enter printer name: ")
	   (window (CREATEW [MAKEWITHINREGION (CREATEREGION
						    LASTMOUSEX LASTMOUSEY
						    [WIDTHIFWINDOW
						      (IPLUS (STRINGWIDTH prompt font)
							       (ITIMES 40 (CHARWIDTH
									   (CHARCODE M)
									   font]
						    (HEIGHTIFWINDOW (FONTPROP font (QUOTE
										    HEIGHT]
			      NIL NIL T)))
          (RESETLST (RESETSAVE (OPENW window)
				   (BQUOTE (CLOSEW , window)))
		      (SETQ input (PROMPTFORWORD prompt NIL NIL window NIL NIL (CHARCODE EOL)))
		      (AND input (CAR (NLSETQ (READ (OPENSTRINGSTREAM input (QUOTE INPUT))
							    \\sdp.read.table])

(\sdp.menu.subitems
  [LAMBDA NIL                                                (* N.H.Briggs "24-Mar-86 16:09")
    (if (AND \\sdp.menu.subitems (EQUAL \\sdp.known.printers DEFAULTPRINTINGHOST))
	then \\sdp.menu.subitems
      else (SETQ \\sdp.known.printers (COPY DEFAULTPRINTINGHOST))
	     (SETQ \\sdp.menu.subitems (NCONC1 [for printer inside \\sdp.known.printers
						      collect
						       (LIST printer (LIST (QUOTE 
										 \sdp.set.printer)
									       (KWOTE printer))
							       (OR (GETPROP (U-CASE printer)
										(QUOTE LOCATION))
								     (CDR (ASSOC (U-CASE 
											  printer)
										     SDP.PRINTERINFO]
						   (LIST "Other..." (QUOTE (\sdp.set.printer
										 (\sdp.get.printer))
									       )
							   
		"Asks for (new) default printer name.  <cr> without entering name aborts change."])

(\sdp.set.printer
  [LAMBDA (printer)                                          (* N.H.Briggs " 8-Jul-86 12:29")
    (LET ((canonicalprintername (CANONICAL.HOSTNAME printer)))
         (if [AND printer (NOT (STRING-EQUAL canonicalprintername
						     (CANONICAL.HOSTNAME (CAR (SETQ 
									      DEFAULTPRINTINGHOST
										    (MKLIST 
									      DEFAULTPRINTINGHOST]
	     then [SETQ DEFAULTPRINTINGHOST (CONS printer
							(SUBSET DEFAULTPRINTINGHOST
								  (FUNCTION (LAMBDA (x)
								      (NOT (STRING-EQUAL
									       (CANONICAL.HOSTNAME
										 x)
									       canonicalprintername]
		    (PROMPTPRINT "default printer set to " printer)
	   else (PROMPTPRINT "default printer not changed")))
    NIL])
)
(* * SDP.PRINTERINFO is the place to look up things like printer location, it also looks on 
the name of the printer for a LOCATION property)


(RPAQ? SDP.PRINTERINFO NIL)

(RPAQ? \\sdp.read.table (COPYREADTABLE (QUOTE ORIG)))
(* * the variables that signal recreating the menu subitems)


(RPAQQ \\sdp.known.printers NIL)

(RPAQQ \\sdp.menu.subitems NIL)
(* * insinuate self into background menu)


(ADDTOVAR BackgroundMenuCommands ("Set Default Printer" (\sdp.set.printer (\sdp.get.printer))
							  
		"Asks for (new) default printer name.  <cr> without entering name aborts change."
							  (EVAL (\sdp.menu.subitems))))
(* * reset the background menu so our change takes effect, and remove space from the 
separators when reading printer names)

(SETQ BackgroundMenu)
(SETSYNTAX 32 (QUOTE OTHER)
	   \\sdp.read.table)
(PUTPROPS SETDEFAULTPRINTER COPYRIGHT ("Xerox Corporation" 1985 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1757 4641 (\sdp.get.printer 1767 . 2847) (\sdp.menu.subitems 2849 . 3814) (
\sdp.set.printer 3816 . 4639)))))
STOP