(FILECREATED "12-Dec-85 17:28:07" {IVAN}<TBIGHAM>LISP>CHANGEPRINTER.;11 12998  

      changes to:  (FNS CPN.SET.PRINTER)

      previous date: "12-Dec-85 16:36:52" {IVAN}<TBIGHAM>LISP>CHANGEPRINTER.;10)


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

(PRETTYCOMPRINT CHANGEPRINTERCOMS)

(RPAQQ CHANGEPRINTERCOMS ((FNS CPN.ADD.NEWPRINTER CPN.BUILD.SUBMENU CPN.CHANGE.DEFAULTPRINTER 
				 CPN.FETCH.DEFAULTPRINTER CPN.GET.NEW.PRINTER CPN.GET.PRINTER 
				 CPN.GET.PRINTERMENU CPN.INIT CPN.PARSE.PRINTER.LIST CPN.SET.PRINTER 
				 CPN.SET.DEFAULTPRINTINGHOST)
			    (* will initialize CPN.PRINTER.LIST to the value of DEFAULTPRINTINGHOST 
			       unless it has already has a value)
			    (INITVARS (CPN.PRINTER.LIST (COPY DEFAULTPRINTINGHOST)))
			    [VARS (CPN.PRINTER.MENU)
				  (CPN.EXAMPLE.PRINTER.LIST (QUOTE ((Rover (QUOTE Rover)
									   
								    "A&E 1st floor PRESS printer")
								    (Emperor (QUOTE Emperor)
									     
								    "A&E 2nd floor PRESS printer")
								    (Thud (QUOTE Thud)
									  
								    "A&E 3rd floor PRESS printer")
								    ("Moe:El Segundo:Xerox" 
									   "Moe:El Segundo:Xerox"
											    
							       "A&E 1st floor INTERPRESS printer")
								    ("Curly:El Segundo:Xerox" 
									 "Curly:El Segundo:Xerox"
											      
							       "A&E 2nd floor INTERPRESS printer")
								    ("Larry:El Segundo:Xerox"
								      (QUOTE Larry:El% Segundo)
								      
							       "A&E 3rd floor INTERPRESS printer"]
			    (P (CPN.INIT T))))
(DEFINEQ

(CPN.ADD.NEWPRINTER
  [LAMBDA (NEW.PRINTER)                                      (* TBigham " 2-Dec-85 07:48")

          (* * adds a new printer to DEFAULTPRINTINGHOST and CPN.PRINTER.LIST)


    (DECLARE (GLOBALVARS CPN.PRINTER.LIST DEFAULTPRINTINGHOST))
    (LET ((DPH (U-CASE DEFAULTPRINTINGHOST)))
         (SETQ NEW.PRINTER (U-CASE NEW.PRINTER))
         (if [AND (NOT (MEMBER NEW.PRINTER DPH))
		      (NULL (for P inside DPH thereis (AND (LISTP P)
								     (if (EQ NEW.PRINTER
										 (CADR P]
	     then (if (ATOM DEFAULTPRINTINGHOST)
			then (SETQ DEFAULTPRINTINGHOST (LIST DEFAULTPRINTINGHOST)))
		    (if (ATOM CPN.PRINTER.LIST)
			then (SETQ CPN.PRINTER.LIST (LIST CPN.PRINTER.LIST)))
		    (SETQ DEFAULTPRINTINGHOST (ATTACH NEW.PRINTER DEFAULTPRINTINGHOST))
		    (SETQ CPN.PRINTER.LIST (ATTACH NEW.PRINTER CPN.PRINTER.LIST])

(CPN.BUILD.SUBMENU
  [LAMBDA (ITEMS)                                            (* TBigham "12-Dec-85 16:35")
    (DECLARE (GLOBALVARS BackgroundMenu BackgroundMenuCommands))
    (PROG (BACKGROUND.LIST OLD.LIST)
	    (if ITEMS
		then [SETQ BACKGROUND.LIST
			 (LIST " Change Printer " (QUOTE (CPN.GET.PRINTER))
				 "Change primary printer"
				 (ATTACH (QUOTE SUBITEMS)
					   (for EACH inside ITEMS bind RV
					      collect (if (LISTP EACH)
							    then (SETQ RV (CADR EACH))
								   (if (STRINGP RV)
								       then
									(LIST (CAR EACH)
										(ATTACH
										  (QUOTE 
										  CPN.SET.PRINTER)
										  (LIST RV))
										(CADDR EACH))
								     else
								      (SUBST (ATTACH
										 (QUOTE 
										  CPN.SET.PRINTER)
										 (LIST RV))
									       RV EACH))
							  else (LIST EACH (LIST (QUOTE 
										  CPN.SET.PRINTER)
										      (KWOTE EACH]
		       [if (SETQ OLD.LIST (SASSOC " Change Printer " BackgroundMenuCommands))
			   then (DSUBST BACKGROUND.LIST OLD.LIST BackgroundMenuCommands)
			 else (SETQ BackgroundMenuCommands (REVERSE (ATTACH BACKGROUND.LIST
										    (REVERSE 
									   BackgroundMenuCommands]
		       (SETQ BackgroundMenu])

(CPN.CHANGE.DEFAULTPRINTER
  [LAMBDA (PRINTER DEFAULTPRINTER)                           (* TBigham "12-Dec-85 12:18")

          (* * moves the selected printer to the front of the DEFAULTPRINTINGHOST list to make it the default printer and 
	  sets the DEFAULTPRINTERTYPE)


    (DECLARE (GLOBALVARS DEFAULTPRINTERTYPE DEFAULTPRINTINGHOST))
    (LET ((NEW.PRINTER (U-CASE PRINTER)))                  (* for ease of comparison, make everything caps)
         (SETQ DEFAULTPRINTINGHOST (U-CASE DEFAULTPRINTINGHOST))
         (if (NEQ NEW.PRINTER DEFAULTPRINTER)
	     then                                          (* if the selected printer isn't the default printer 
							     then make it so)
		    (if (MEMBER NEW.PRINTER DEFAULTPRINTINGHOST)
			then                               (* the new printer is an atom and a member of 
							     DEFAULTPRINTINGHOST)
			       (SETQ DEFAULTPRINTINGHOST (ATTACH NEW.PRINTER (REMOVE 
										      NEW.PRINTER 
									      DEFAULTPRINTINGHOST)))
			       (SETQ DEFAULTPRINTERTYPE (PRINTERTYPE NEW.PRINTER))
			       (PROMPTPRINT "Default printer changed to " NEW.PRINTER)
		      else                                 (* for the case where the printer is in the standard 
							     Interlisp-D menu item format of 
							     (seen.text returned.value prompt.message))
			     (for PRINTER inside DEFAULTPRINTINGHOST
				do (if (AND (LISTP PRINTER)
						  (EQUAL (CADR PRINTER)
							   NEW.PRINTER))
					 then (SETQ DEFAULTPRINTINGHOST (ATTACH PRINTER
										      (REMOVE
											PRINTER 
									      DEFAULTPRINTINGHOST)))
						(SETQ DEFAULTPRINTERTYPE (PRINTERTYPE NEW.PRINTER)
						  )
						(PROMPTPRINT "Default printer changed to "
							       (CADR PRINTER])

(CPN.FETCH.DEFAULTPRINTER
  [LAMBDA NIL                                                (* TBigham " 3-Apr-85 15:12")
                                                             (* now accounts for the case where elemets in the 
							     DEFAULTPRINTINGHOST list may be a list themseleves 
							     e.g. ((FULLPRESS JEDI) Quake Expresso:))
    (DECLARE (GLOBALVARS DEFAULTPRINTINGHOST))
    (if (LISTP DEFAULTPRINTINGHOST)
	then (if (LISTP (CAR DEFAULTPRINTINGHOST))
		   then (CADR (CAR DEFAULTPRINTINGHOST))
		 else (CAR DEFAULTPRINTINGHOST))
      else DEFAULTPRINTINGHOST])

(CPN.GET.NEW.PRINTER
  [LAMBDA (PROMPTSTRING)                                     (* TBigham " 2-Dec-85 07:48")
    (DECLARE (GLOBALVARS LASTMOUSEX LASTMOUSEY))
    (LET* ((FONT (DEFAULTFONT))
	   [WIDTH (IPLUS (STRINGWIDTH PROMPTSTRING FONT)
			   (ITIMES 40 (CHARWIDTH (CHARCODE A)
						     FONT]
	   (PROMPTW (CREATEW [MAKEWITHINREGION (CREATEREGION LASTMOUSEX LASTMOUSEY
								   (WIDTHIFWINDOW WIDTH)
								   (HEIGHTIFWINDOW
								     (FONTPROP FONT (QUOTE HEIGHT]
			       NIL NIL T)))
          (RESETLST (RESETSAVE (OPENW PROMPTW)
				   (BQUOTE (CLOSEW , PROMPTW)))
		      (MKATOM (PROMPTFORWORD PROMPTSTRING NIL NIL PROMPTW NIL NIL (CHARCODE
						   EOL])

(CPN.GET.PRINTER
  [LAMBDA NIL                                                (* TBigham "12-Dec-85 14:58")

          (* * acquires a printer name from the value of DEFAULTPRINTINGHOST and moves it to the front of the list.
	  If a new name is entered, it's added to the value of DEFAULTPRINTINGHOST)


    (PROG (PRINTERCHOICE (CPN.MENU (CPN.GET.PRINTERMENU)))
	    (if (type? MENU CPN.MENU)
		then (SETQ PRINTERCHOICE (U-CASE (MENU CPN.MENU)))
		       (CPN.SET.PRINTER PRINTERCHOICE])

(CPN.GET.PRINTERMENU
  [LAMBDA (RESET.MENU)                                       (* TBigham "12-Dec-85 13:02")

          (* * either returns the cached menu or creates a new menu of items from the value of CPN.PRINTER.LIST)


    (DECLARE (GLOBALVARS CPN.PRINTER.LIST CPN.PRINTER.MENU PROMPTWINDOW))
    (LET (FULL.PRINTER.LIST ITEMS)
         (if (OR RESET.MENU (NULL CPN.PRINTER.MENU))
	     then (if (SETQ FULL.PRINTER.LIST (CPN.PARSE.PRINTER.LIST CPN.PRINTER.LIST))
			then [SETQ ITEMS (APPEND FULL.PRINTER.LIST
						       (LIST (LIST "Other..."
								       (KWOTE (QUOTE OTHER))
								       
							     "You will be prompted for a printer"]
			       (CPN.BUILD.SUBMENU ITEMS)
			       (SETQ CPN.PRINTER.MENU (create MENU
								  ITEMS ← ITEMS
								  CENTERFLG ← T))
		      else (printout PROMPTWINDOW T "CPN.PRINTER.LIST does not have any values.")
			     (printout PROMPTWINDOW T "  Call (CPN.INIT 'EXAMPLE) for a test case."))
	   else CPN.PRINTER.MENU])

(CPN.INIT
  [LAMBDA (USE.CPN.PRINTER.LIST)                             (* TBigham " 2-Dec-85 08:14")
    (DECLARE (GLOBALVARS CPN.EXAMPLE.PRINTER.LIST CPN.PRINTER.LIST CPN.PRINTER.MENU 
			     DEFAULTPRINTINGHOST))
    (PROGN (if (EQ USE.CPN.PRINTER.LIST (QUOTE EXAMPLE))
		 then (SETQ CPN.PRINTER.LIST (COPY CPN.EXAMPLE.PRINTER.LIST))
			(CPN.SET.DEFAULTPRINTINGHOST)
	       elseif USE.CPN.PRINTER.LIST
		 then (CPN.SET.DEFAULTPRINTINGHOST)
	       else (SETQ CPN.PRINTER.LIST (COPY DEFAULTPRINTINGHOST))
		      (CPN.SET.DEFAULTPRINTINGHOST))
	     (SETQ CPN.PRINTER.MENU)
	     (CPN.GET.PRINTERMENU T])

(CPN.PARSE.PRINTER.LIST
  [LAMBDA (ALL.PRINTERS)                                     (* TBigham "12-Dec-85 12:01")

          (* * parses any legal form of items in DEFAULTPRINTINGOST and items in CPN.PRINTER.LIST)


    (for PRINTER inside ALL.PRINTERS collect (if (LISTP PRINTER)
						       then (if (FMEMB (CAR PRINTER)
									     (QUOTE (FULLPRESS
											INTERPRESS 
											PRESS)))
								  then (CADR PRINTER)
								else PRINTER)
						     else PRINTER])

(CPN.SET.PRINTER
  [LAMBDA (PRINTERCHOICE)                                    (* TBigham "12-Dec-85 17:27")
    (DECLARE (GLOBALVARS CPN.PRINTER.LIST CPN.PRINTER.MENU DEFAULTPRINTERTYPE))
    (PROG [(DEFAULTPRINTER (U-CASE (CPN.FETCH.DEFAULTPRINTER]
	    (SETQ PRINTERCHOICE (U-CASE PRINTERCHOICE))
	    (if (EQ PRINTERCHOICE (QUOTE OTHER))
		then (SETQ PRINTERCHOICE (U-CASE (CPN.GET.NEW.PRINTER 
									"Printer (CR to abort): ")))
		       (SETQ CPN.PRINTER.MENU))
	    (if PRINTERCHOICE
		then (if (NEQ DEFAULTPRINTER PRINTERCHOICE)
			   then (CPN.ADD.NEWPRINTER PRINTERCHOICE)
				  (CPN.CHANGE.DEFAULTPRINTER PRINTERCHOICE DEFAULTPRINTER)
				  [CPN.BUILD.SUBMENU (APPEND (CPN.PARSE.PRINTER.LIST 
										 CPN.PRINTER.LIST)
								 (LIST (LIST "Other..."
										 (KWOTE
										   (QUOTE OTHER))
										 
							     "You will be prompted for a printer"]
			 else (PROMPTPRINT "Default printer is " DEFAULTPRINTER)))
	    (SETQ DEFAULTPRINTERTYPE (if (STRPOS ":" PRINTERCHOICE)
					   then (QUOTE INTERPRESS)
					 else (QUOTE PRESS])

(CPN.SET.DEFAULTPRINTINGHOST
  [LAMBDA NIL                                                (* TBigham " 1-Dec-85 16:00")
    (DECLARE (GLOBALVARS CPN.PRINTER.LIST DEFAULTPRINTERTYPE DEFAULTPRINTINGHOST))
    (PROGN [SETQ DEFAULTPRINTINGHOST (for PRINTER inside CPN.PRINTER.LIST
					    collect (if (OR (ATOM PRINTER)
								  (STRINGP PRINTER))
							  then PRINTER
							elseif (MEMBER (CAR PRINTER)
									   (QUOTE (FULLPRESS PRESS 
										       INTERPRESS)))
							  then PRINTER
							else (CAR PRINTER]
	     (SETQ DEFAULTPRINTERTYPE (PRINTERTYPE (CPN.FETCH.DEFAULTPRINTER])
)



(* will initialize CPN.PRINTER.LIST to the value of DEFAULTPRINTINGHOST unless it has already 
has a value)


(RPAQ? CPN.PRINTER.LIST (COPY DEFAULTPRINTINGHOST))

(RPAQQ CPN.PRINTER.MENU NIL)

(RPAQQ CPN.EXAMPLE.PRINTER.LIST ((Rover (QUOTE Rover)
					  "A&E 1st floor PRESS printer")
				   (Emperor (QUOTE Emperor)
					    "A&E 2nd floor PRESS printer")
				   (Thud (QUOTE Thud)
					 "A&E 3rd floor PRESS printer")
				   ("Moe:El Segundo:Xerox" "Moe:El Segundo:Xerox" 
							   "A&E 1st floor INTERPRESS printer")
				   ("Curly:El Segundo:Xerox" "Curly:El Segundo:Xerox" 
							     "A&E 2nd floor INTERPRESS printer")
				   ("Larry:El Segundo:Xerox" (QUOTE Larry:El% Segundo)
							     "A&E 3rd floor INTERPRESS printer")))
(CPN.INIT T)
(PUTPROPS CHANGEPRINTER COPYRIGHT ("TBigham, Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1566 12136 (CPN.ADD.NEWPRINTER 1576 . 2566) (CPN.BUILD.SUBMENU 2568 . 3998) (
CPN.CHANGE.DEFAULTPRINTER 4000 . 5922) (CPN.FETCH.DEFAULTPRINTER 5924 . 6583) (CPN.GET.NEW.PRINTER 
6585 . 7363) (CPN.GET.PRINTER 7365 . 7905) (CPN.GET.PRINTERMENU 7907 . 8984) (CPN.INIT 8986 . 9677) (
CPN.PARSE.PRINTER.LIST 9679 . 10224) (CPN.SET.PRINTER 10226 . 11445) (CPN.SET.DEFAULTPRINTINGHOST 
11447 . 12134)))))
STOP