;;; -*- Mode:Common-Lisp; Package:PROFILE; Base:10; Fonts:(MEDFNT HL12B HL12BI) -*-

;;;                           RESTRICTED RIGHTS LEGEND

;;;Use, duplication, or disclosure by the Government is subject to
;;;restrictions as set forth in subdivision (c)(1)(ii) of the Rights in
;;;Technical Data and Computer Software clause at 52.227-7013.
;;;
;;;                     TEXAS INSTRUMENTS INCORPORATED.
;;;                              P.O. BOX 2909
;;;                           AUSTIN, TEXAS 78769
;;;                                 MS 2151
;;;
;;; Copyright (c) 1984- 1989 Texas Instruments Incorporated.  All Rights Reserved.

;1;;*
;1;; COMMON LISP GLOBAL VARIABLES*
;1;; *
;;;NOTES:  In the case where a displayed value's type or the input value's type 
;;;        must differ from the type a variable should REALLY have, you need to
;;;        define a PROFILE SPECIAL VARIABLE as a dummy go-between.  
;;;        For example:  FS:USER-LOGIN-MACHINE needs to be a host object at all times.
;;;                      Profile shouldn't really display a host object, and a user
;;;                      can only input strings that can be converted into pathnames.
;;;                 
;;;                      Solution:  Define a Profile special variable USER-LOGIN-MACHINE
;;;                                 that is of type STRING, and parse this string into
;;;                                 a host object and assign this value to 
;;;                                 FS:USER-LOGIN-MACHINE.
;;;
;;;        WARNING:   Whenever you make a dummy variable to represent another REAL 
;;;                   system variable, YOU MUST EXPLICITLY PUT THE REAL VARIABLE ON
;;;                   THE LOGIN INITIALIZATION LIST!!!!  Otherwise, you screw up a user
;;;                   by not "undoing" the customizations when he logs out.

;1;; CHANGE HISTORY:*
;;; 5/8/89 JLM Added support for TV:*INSPECT-PDL-SAFE*
;1;; 01/25/89 MAY Made 4 mail variables NOT load in development band when MAIL package does not exist.*
;1;; 01-25-89 DAB Removed references to zwei:*loaded-patches* from LOAD-PATCHES-AT-LOGIN. This was old CM junk.*
;1;; 01/18/89 MAY Removed zwei:*tab-width* (unsupported) and substituted *default-tab-width*.*
;1;; 10-24-88 MAY Changed doc on UCL::*SCROLL-PIXEL-INCREMENT* to disallow NIL as valid value.*
;1;;                  Also changed code in sys:ucl;universal-commands.lisp refering to same.*
;1;;*
;1;; To avoid a problem with the cvv-type of (:TYPEP (AND INTEGER (SATISFIES PLUSP)))*
;1;; we will use (:TEST 'POSITIVE-INTEGER) instead.*
;1;;*
(DEFUN POSITIVE-INTEGER (X) (AND (INTEGERP X) (PLUSP X)))

;;(DEFINE-PROFILE-VARIABLE *APPLYHOOK* (:COMMON :EVAL)
;;  :CVV-TYPE :FUNCTION :NAME "Apply Hook") 


(DEFINE-PROFILE-VARIABLE *BREAK-ON-WARNINGS* (:COMMON :EVAL)
  :CVV-TYPE :T-OR-NIL) 

;1;;*(define-profile-variable *default-pathname-defaults* (:common :file))


;;(DEFINE-PROFILE-VARIABLE *EVALHOOK* (:COMMON :EVAL)
;;  :CVV-TYPE :FUNCTION :NAME "Eval Hook") 

(DEFINE-PROFILE-VARIABLE *PRINT-STRUCTURE* (:COMMON :IMPORTANT)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE *LOAD-VERBOSE* (:COMMON :FILE)
  :CVV-TYPE :T-OR-NIL) 


(DEFINE-PROFILE-VARIABLE *PRINT-ARRAY* (:COMMON :DISPLAY)
  :CVV-TYPE :T-OR-NIL) 


(DEFINE-PROFILE-VARIABLE *PRINT-BASE* (:COMMON :DISPLAY :IMPORTANT)
  :CVV-TYPE (:ASSOC '(("Binary " . 2.) ("Octal " . 8.) ("Decimal " . 10.) ("Hexidecimal" . 16.)))) 


(DEFINE-PROFILE-VARIABLE *PRINT-CASE* (:COMMON :DISPLAY)
  :CVV-TYPE (:CHOOSE '(:UPCASE :DOWNCASE :CAPITALIZE))) 


(DEFINE-PROFILE-VARIABLE *PRINT-CIRCLE* (:COMMON :DISPLAY)
  :CVV-TYPE :T-OR-NIL) 


(DEFINE-PROFILE-VARIABLE *PRINT-ESCAPE* (:COMMON :DISPLAY)
  :CVV-TYPE :T-OR-NIL) 


(DEFINE-PROFILE-VARIABLE *PRINT-GENSYM* (:COMMON :DISPLAY)
  :CVV-TYPE :T-OR-NIL) 


(DEFINE-PROFILE-VARIABLE *PRINT-LENGTH* (:COMMON :DISPLAY :IMPORTANT)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL) 


(DEFINE-PROFILE-VARIABLE *PRINT-LEVEL* (:COMMON :DISPLAY :IMPORTANT)
  :CVV-TYPE
  :POSITIVE-FIXNUM-OR-NIL :DOCUMENTATION
  "If non-NIL, the maximim depth to which any list will be displayed.  Structures nested more deeply
 than this will be replaced by **.   Set this to NIL if you want to see all levels of a list.") 


(DEFINE-PROFILE-VARIABLE *PRINT-PRETTY* (:COMMON :DISPLAY)
  :CVV-TYPE :T-OR-NIL) 


(DEFINE-PROFILE-VARIABLE *PRINT-RADIX* (:COMMON :DISPLAY)
  :CVV-TYPE :T-OR-NIL) 


(DEFINE-PROFILE-VARIABLE *READ-BASE* (:COMMON :INPUT :IMPORTANT)
  :CVV-TYPE (:ASSOC '(("Binary " . 2.) ("Octal " . 8.) ("Decimal " . 10.) ("Hexidecimal" . 16.)))) 


(DEFINE-PROFILE-VARIABLE *READ-DEFAULT-FLOAT-FORMAT* (:COMMON :INPUT :COMPILE)
  :CVV-TYPE (:CHOOSE '(SHORT-FLOAT SINGLE-FLOAT DOUBLE-FLOAT LONG-FLOAT))) 


;1;;*
;1;; ZMACS VARIABLES*
;1;;*

(DEFINE-PROFILE-VARIABLE ZWEI::*ALPHABETIC-CASE-AFFECTS-SEARCH* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*APROPOS-SEARCH-OTHER-COMTABS* (:ZMACS)
  :CVV-TYPE (:CHOOSE '(:ALWAYS :NEVER :ASK))) 

(DEFINE-PROFILE-VARIABLE ZWEI::*AUTO-DIRECTORY-DISPLAY* (:ZMACS)
  :CVV-TYPE (:ASSOC '(("Never") ("Read" . :READ) ("Write" . :WRITE) ("Read or Write" . T)))) 

(DEFINE-PROFILE-VARIABLE ZWEI::*AUTO-FILL-ACTIVATION-CHARACTERS* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHAR-LIST) 

(DEFINE-PROFILE-VARIABLE ZWEI::*AUTO-PUSH-POINT-NOTIFICATION* (:ZMACS)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE ZWEI::*POINT-PDL-MAX* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*AUTO-PUSH-POINT-OPTION* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*BLANKS* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHAR-LIST) 

(DEFINE-PROFILE-VARIABLE ZWEI::*CASE-REPLACE* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*CASE-REPLACE-P* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*CENTER-FRACTION* (:ZMACS)
  :CVV-TYPE :SMALL-FRACTION
   :DOCUMENTATION
   "Where to recenter the window.  This is how far down in the window the point should be placed
when ZWEI recenters POINT in the window, as a fraction from 0.0 to 1.0.") 

(DEFINE-PROFILE-VARIABLE ZWEI::*CHECK-UNBALANCED-PARENTHESES-WHEN-SAVING* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*COMMENT-BEGIN* (:ZMACS)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE ZWEI::*COMMENT-COLUMN* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*COMMENT-END* (:ZMACS)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE ZWEI::*COMMENT-ROUND-FUNCTION* (:ZMACS)
  :CVV-TYPE :FUNCTION) 

(DEFINE-PROFILE-VARIABLE ZWEI::*COMMENT-START* (:ZMACS)
  :CVV-TYPE :ANY) 

(DEFINE-PROFILE-VARIABLE ZWEI::*CR-AFTER-LINE-MOUSE-YANK* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

;1;;CVV type changed in Profile 2.3*

(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-BASE* (:ZMACS)
  :CVV-TYPE
  (:ASSOC '(("Binary " . 2.) ("Octal " . 8.) ("Decimal " . 10.) ("Hexidecimal" . 16.)))) 

(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-MAJOR-MODE* (:ZMACS :IMPORTANT)
  :CVV-TYPE
  (:CHOOSE '(:COMMON-LISP :ZETALISP :TEXT :MACSYMA :MIDAS :TEX :ZTOP))
  :NAME "Zmacs Default Major Mode") 

;1;;Value of this variable is now a symbol instead of a package object (Zmacs uses a symbol) -Profile 2.3*

(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-PACKAGE* (:ZMACS)
  :CVV-TYPE
  (:MENU
    '(LIST* '("No Default Package" :VALUE NIL)
	    (MAPCAR
	     #'(GLOBAL:LAMBDA (X)
		 (LIST (PACKAGE-NAME X) :VALUE (INTERN (PACKAGE-NAME X) 'ZWEI)))
	     (SI:LIST-ALL-PACKAGES))))) 

(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-SAVE-MODE* (:ZMACS)
  :CVV-TYPE
  (:ASSOC '(("Ask" . :ASK) ("Always" . :ALWAYS) ("Never")))) 

(DEFINE-PROFILE-VARIABLE ZWEI::*DIRECTORY-LISTER* (:ZMACS)
  :CVV-TYPE :FUNCTION) 

(DEFINE-PROFILE-VARIABLE ZWEI::*DIRECTORY-SINGLE-FILE-LISTER* (:ZMACS)
  :CVV-TYPE :FUNCTION) 

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*DIRED-LINE-BOXING* (:ZMACS)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE ZWEI::*DISCARD-UNDO-INFO-ON-SAVING* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*EDIT-DEFINITION-IS-READ-ONLY* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*ELECTRIC-SHIFT-LOCK-XORS* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*FILE-VERSIONS-KEPT* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*FILL-COLUMN* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*FILL-EXTRA-SPACE-LIST* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHAR-LIST) 

(DEFINE-PROFILE-VARIABLE ZWEI::*FILL-PREFIX* (:ZMACS)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE ZWEI::*FIND-FILE-EARLY-SELECT* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*FIND-FILE-NOT-FOUND-IS-AN-ERROR* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*FIND-FILE-SAVE-MODE* (:ZMACS)
  :CVV-TYPE
  (:ASSOC '(("Ask" . :ASK) ("Always" . :ALWAYS) ("Never")))) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*FIND-PATCH-DEFINITIONS-TOO* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*FINISHED-AFTER-ENTIRE-MOUSE-YANK* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*FLASH-MATCHING-PAREN* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*FLASH-MATCHING-PAREN-MAX-LINES* (:ZMACS)
  :CVV-TYPE
  (:TEST 'POSITIVE-INTEGER))

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*HELP-PROMPTS-IN-OLD-STYLE* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*HISTORY-MENU-LENGTH* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*HISTORY-ROTATE-IF-NUMERIC-ARG* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*HISTORY-YANK-WRAPAROUND* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*INDENT-WITH-TABS* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*INITIAL-MINOR-MODES* (:ZMACS :IMPORTANT)
  :CVV-TYPE
   (:MULTIPLE-MENU `',(ZMACS-MODES-MENU-LIST :MINOR)) :NAME "Zmacs Initial Minor Modes"
   :DOCUMENTATION
   "These are the minor modes that are turned on by default in all new Zmacs buffers.
Minor modes provide minor customizations to Zmacs buffers.  [Clicking on this will display a menu of all minor modes]") 

;;;
;1;;Support for above variable*
;1;;*

(DEFUN ZMACS-MODES (&OPTIONAL (MAJOR-OR-MINOR :MINOR))
  "2Returns a list of the symbols representing all of the currently defined modes in Zmacs.
The optional argument can be :major, :minor, or :all, depending on whether major and
minor modes are desired.*"
  (LET ((MODES NIL))
    (do-local-symbols (sym 'ZWEI modes)
		      (WHEN (CASE MAJOR-OR-MINOR
			      (:MINOR (NULL (GET SYM 'ZWEI::MAJOR-MODE-P :NO-PROP)))
			      (:MAJOR (GET SYM 'ZWEI::MAJOR-MODE-P))
			      (:ALL (NEQ (GET SYM 'ZWEI::MAJOR-MODE-P :NO-PROP) :NO-PROP)))
			    (PUSH SYM MODES)))))
1;;mapatoms function is obsolete
;;    (MAPATOMS
;;     #'(LAMBDA (X)
;;*	1 (WHEN (CASE MAJOR-OR-MINOR
;;*		1     (:MINOR (NULL (GET X 'ZWEI::MAJOR-MODE-P :NO-PROP)))
;;*		1     (:MAJOR (GET X 'ZWEI::MAJOR-MODE-P))
;;*		1     (:ALL (NEQ (GET X 'ZWEI::MAJOR-MODE-P :NO-PROP) :NO-PROP)))
;;*	1   (PUSH X MODES)))
;;     'ZWEI ())
;;    MODES)) *

;1;;Corrected in Profile 2.3 to properly get doc strings via documentation function*
;1;;Profile 2.3 - Symbol-or-keyword designates whether the value is in the keyword or the Zwei package.*

(DEFUN ZMACS-MODES-MENU-LIST (&OPTIONAL (MAJOR-OR-MINOR :MINOR) (SYMBOL-OR-KEYWORD :SYMBOL))
  "2Returns a menu list for menus that will select one or more modes of Zmacs.*"
  (LOOP FOR MODE IN (ZMACS-MODES MAJOR-OR-MINOR)
        FOR DOC = (DOCUMENTATION (INTERN (STRING-APPEND "COM-" (SYMBOL-NAME MODE)) 'ZWEI)) 
        COLLECT (LIST (SYMBOL-PRETTY-NAME MODE) 
		      :VALUE
		      (CASE SYMBOL-OR-KEYWORD
			    (:SYMBOL MODE)
			    (:KEYWORD
			     (LET ((PNAME (SYMBOL-NAME MODE)))
			       (INTERN
				 (SUBSEQ PNAME 0
					    (SEARCH (THE STRING (STRING "-MODE")) (THE STRING (STRING PNAME))
						    :TEST #'CHAR-EQUAL))
				 'KEYWORD))))
		      :DOCUMENTATION
		      (LET ((FIRST-CR (POSITION #\NEWLINE (THE STRING (STRING DOC)) :TEST #'CHAR-EQUAL)))
			;1;Many mode have documentation which mentions how to turn the mode off ==>Remove that info.*
			(IF (AND FIRST-CR
				 (SEARCH (THE STRING (STRING "mode")) (THE STRING (STRING DOC)) :START2 FIRST-CR
					 :TEST #'CHAR-EQUAL))
			    (NSUBSTRING DOC 0 FIRST-CR)
			    DOC))))) 
			  

(DEFINE-PROFILE-VARIABLE ZWEI::*INDENT-NEW-LINE-INDENT-FUNCTION* (:ZMACS)
  :CVV-TYPE :FUNCTION) 

(DEFINE-PROFILE-VARIABLE ZWEI::*INDENT-NEW-LINE-NEW-LINE-FUNCTION* (:ZMACS)
  :CVV-TYPE :FUNCTION) 

(DEFINE-PROFILE-VARIABLE ZWEI::*KILL-INTERVAL-SMARTS* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*LISP-DEFUN-INDENTATION* (:ZMACS)
  :CVV-TYPE :ANY) 

(DEFINE-PROFILE-VARIABLE ZWEI::*LISP-INDENT-LONE-FUNCTION-OFFSET* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*MAX-RESET-FRACTION* (:ZMACS)
  :CVV-TYPE :SMALL-FRACTION
  :DOCUMENTATION
  "Where to recenter the window when you go off the top.  This is how far down in the window the point should be placed
when ZWEI moves the text in the window because you moved off the top.  It should be a fraction from 0.0 to 1.0.") 

(DEFINE-PROFILE-VARIABLE ZWEI::*MIN-RESET-FRACTION* (:ZMACS)
  :CVV-TYPE :SMALL-FRACTION
  :DOCUMENTATION
  "Where to recenter the window when you go off the bottom.  This is how far down in the window the point should be placed
when ZWEI moves the text in the window because you moved off the bottom.  It should be a fraction from 0.0 to 1.0.") 

(DEFINE-PROFILE-VARIABLE ZWEI::*NEXT-SCREEN-CONTEXT-LINES* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER)
  :NAME "Zmacs Next Screen Context Lines") 

(DEFINE-PROFILE-VARIABLE ZWEI::*ONE-WINDOW-DEFAULT* (:ZMACS)
  :CVV-TYPE
  (:CHOOSE '(:CURRENT :TOP :BOTTOM :OTHER)) :DOCUMENTATION
  "Controls which window is selected after the One Window command.
  :TOP means the uppermost window.  :BOTTOM the lowermost.
  :CURRENT the current window.  :OTHER some other window.") 

(DEFINE-PROFILE-VARIABLE ZWEI::*PAGE-DELIMITER-LIST* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHAR-LIST) 

(DEFINE-PROFILE-VARIABLE ZWEI::*PARAGRAPH-DELIMITER-LIST* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;:CVV-TYPE :CHAR-LIST) 

(DEFINE-PROFILE-VARIABLE ZWEI::*PERMANENT-REAL-LINE-GOAL-XPOS* (:ZMACS)
  :CVV-TYPE :NUMBER-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*PL1-INDING-STYLE* (:ZMACS)
  :CVV-TYPE :FIXNUM) 

(DEFINE-PROFILE-VARIABLE ZWEI::*REGION-MARKING-MODE* (:ZMACS :IMPORTANT)
  :CVV-TYPE
  (:CHOOSE '(:UNDERLINE :REVERSE-VIDEO)) :NAME "Zmacs Region Marking Mode") 

(DEFINE-PROFILE-VARIABLE ZWEI::*REGION-RIGHT-MARGIN-MODE* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*SEARCH-RING-MAX* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*SPACE-INDENT-FLAG* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*STICKY-MINOR-MODES* (:ZMACS)
  :CVV-TYPE
  (:MULTIPLE-MENU `',(ZMACS-MODES-MENU-LIST :MINOR))) 

(DEFINE-PROFILE-VARIABLE ZWEI::*TAB-BLINKER-FLAG* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

;1; may 01/18/89 This varibale is not-supported anymore. See *default-tab-width**
;(DEFINE-PROFILE-VARIABLE ZWEI::*TAB-WIDTH* (:ZMACS)
;  :CVV-TYPE :FIXNUM-OR-NIL) 

;1; may 01/18/89 Added to replace ZWEI::*TAB-WIDTH**
(WHEN (FBOUNDP 'ZWEI:DEFAULT-TAB-WIDTH)
  (DEFINE-PROFILE-VARIABLE *DEFAULT-TAB-WIDTH* (:ZMACS)
    :DECLARE-SPECIAL-P T
    :NAME "Default TAB Width"
    :DOCUMENTATION "Default TAB Width used in ZMACS edit buffers"
    :CVV-TYPE :FIXNUM
    :GET-VALUE (ZWEI:DEFAULT-TAB-WIDTH)
    :SET-EFFECT (ZWEI:DEFAULT-TAB-WIDTH *DEFAULT-TAB-WIDTH*)
    :FORM-FOR-INIT-FILE
    (LAMBDA (VAR)
      `(PROGN
	 (LOGIN-EVAL (ZWEI:DEFAULT-TAB-WIDTH ,(ZWEI:DEFAULT-TAB-WIDTH)))
	 (PROFILE-SETQ ,VAR (ZWEI:DEFAULT-TAB-WIDTH ,*DEFAULT-TAB-WIDTH*))))))

(DEFINE-PROFILE-VARIABLE ZWEI::*TEMP-FILE-TYPE-LIST* (:ZMACS)
  :CVV-TYPE (:LIST-OF :STRING))
;;  :CVV-TYPE :STRING-LIST) 

(DEFINE-PROFILE-VARIABLE ZWEI::*TYPE-HOG-ALIST* (:ZMACS)
  :CVV-TYPE :SEXP) 

(DEFINE-PROFILE-VARIABLE ZWEI::*UNDO-SAVE-SMALL-CHANGES* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*UPDATE-PLIST-ON-WRITE-OK* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*UNSTICKY-MINOR-MODES* (:ZMACS)
  :CVV-TYPE
  (:MULTIPLE-MENU `',(ZMACS-MODES-MENU-LIST :MINOR))) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*VIEWING-EXIT-CHARACTERS* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHARACTER-LIST) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*VIEWING-IGNORE-NON-COMMAND-CHARACTERS* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*VIEWING-RETURN-IF-NO-MORE-DEFAULT* (:ZMACS)
  :CVV-TYPE :T-OR-NIL) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*VIEWING-SCROLL-FORWARD-SCREEN-CHARACTERS* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHARACTER-LIST) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*VIEWING-SCROLL-BACKWARD-SCREEN-CHARACTERS* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHARACTER-LIST) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*VIEWING-SCROLL-FORWARD-LINE-CHARACTERS* (:ZMACS)
   :CVV-TYPE (:LIST-OF :CHARACTER))
;; :CVV-TYPE :CHARACTER-LIST) 

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*VIEWING-SCROLL-BACKWARD-LINE-CHARACTERS* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHARACTER-LIST) 

(DEFINE-PROFILE-VARIABLE ZWEI::*VSP* (:ZMACS)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE ZWEI::*WHITESPACE-CHARS* (:ZMACS)
  :CVV-TYPE (:LIST-OF :CHARACTER))
;;  :CVV-TYPE :CHAR-LIST) 

;1;; PRINTER VARIABLES*

(DEFINE-PROFILE-VARIABLE PRINTER::*DEFAULT-SCREEN-TO-PRINT* (:NETWORK)
  :CVV-TYPE (:CHOOSE '(:SCREEN :SCREEN-WITH-WHOLINE :WINDOW :FRAME))) 

(DEFINE-PROFILE-VARIABLE PRINTER::*DEFAULT-LINES* (:NETWORK)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE PRINTER::*DEFAULT-ORIENTATION* (:NETWORK)
  :CVV-TYPE (:ASSOC '(("BEST " . :BEST) ("PORTRAIT " . :PORTRAIT) ("LANDSCAPE " . :LANDSCAPE)))) 

(DEFINE-PROFILE-VARIABLE PRINTER::*DEFAULT-BLINKERP* (:NETWORK)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE PRINTER::*DEFAULT-PAGE-HEADING* (:NETWORK)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE PRINTER::*DEFAULT-HEADER* (:NETWORK)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE PRINTER::*DEFAULT-CPI* (:NETWORK)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))


;;;  The variables DEFAULT-PRINTER and DEFAULT-SCREEN-IMAGE-PRINTER are cases
;;;  where the displayed and input values don't really represent the system's way
;;;  of storing the information.  We really want to be changing the value of the 
;;;  functions (GET-DEFAULT-PRINTER) and (GET-DEFAULT-IMAGE-PRINTER).

(WHEN (FBOUNDP 'GET-DEFAULT-PRINTER)
  (DEFINE-PROFILE-VARIABLE DEFAULT-PRINTER (:NETWORK)
    :DECLARE-SPECIAL-P T
    :NAME "DEFAULT-PRINTER"
    :DOCUMENTATION "The name of the default printer to use when printing text."
    :CVV-TYPE (:MENU `',(LOOP FOR (PRINTER) IN (PRINTER:LIST-PRINTERS)
			      COLLECT PRINTER))
    :GET-VALUE (GET-DEFAULT-PRINTER)
    :SET-EFFECT (SET-DEFAULT-PRINTER DEFAULT-PRINTER)
    :FORM-FOR-INIT-FILE
    (LAMBDA (VAR)
      `(PROGN (LOGIN-EVAL (SET-DEFAULT-PRINTER ,(GET-DEFAULT-PRINTER)))
	      (PROFILE-SETQ ,VAR (SET-DEFAULT-PRINTER ,DEFAULT-PRINTER))))))

(WHEN (FBOUNDP 'GET-DEFAULT-IMAGE-PRINTER)
  (DEFINE-PROFILE-VARIABLE DEFAULT-SCREEN-IMAGE-PRINTER (:NETWORK)
    :DECLARE-SPECIAL-P T
    :NAME "DEFAULT-SCREEN-IMAGE-PRINTER"
    :DOCUMENTATION "The name of the default printer to use when printing screen images (bitmaps)."
    :CVV-TYPE (:MENU `',(LOOP FOR (PRINTER) IN (PRINTER:LIST-PRINTERS)
			      COLLECT PRINTER))
    :GET-VALUE (GET-DEFAULT-IMAGE-PRINTER)
    :SET-EFFECT (SET-DEFAULT-IMAGE-PRINTER DEFAULT-SCREEN-IMAGE-PRINTER)
    :FORM-FOR-INIT-FILE
    (LAMBDA (VAR)
      `(PROGN
	 (LOGIN-EVAL (SET-DEFAULT-IMAGE-PRINTER ,(GET-DEFAULT-IMAGE-PRINTER)))
	 (PROFILE-SETQ ,VAR (SET-DEFAULT-IMAGE-PRINTER ,DEFAULT-SCREEN-IMAGE-PRINTER)))))) 


;1;;======================*
;1;; Converse Variables*
;1;; ======================*

(DEFINE-PROFILE-VARIABLE ZWEI::*CONVERSE-APPEND-P* (:NETWORK :DISPLAY)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*CONVERSE-BEEP-COUNT* (:NETWORK :DISPLAY)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

;1;;Added in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE ZWEI::*CONVERSE-RECEIVE-MODE* (:NETWORK)
  :CVV-TYPE (:CHOOSE '(:NOTIFY-WITH-MESSAGE :NOTIFY :AUTO :SIMPLE))
  :DOCUMENTATION
    "What to do when you receive a new interactive message. :NOTIFY and :NOTIFY-WITH-MESSAGE
pop up a notification.  :AUTO enters Converse automatically. :SIMPLE asks you what to do.") 


(DEFUN MAKE-HOST-LIST (HOST-LIST)
  "Make a list of host objects from the valid host names in HOST-LIST."
  (LET ((VALUES NIL)
	(OBJECT-LIST NIL))
    (DOLIST (HOST HOST-LIST VALUES)
      (SETQ VALUES (CONS (FS:PARSE-HOST HOST T) VALUES)))
    (DOLIST (VALID-HOST VALUES OBJECT-LIST)
      (WHEN VALID-HOST (SETQ OBJECT-LIST (CONS VALID-HOST OBJECT-LIST))))
    OBJECT-LIST))

(WHEN (FBOUNDP 'ZWEI:*CONVERSE-EXTRA-HOSTS-TO-CHECK*)
  (DEFINE-PROFILE-VARIABLE CONVERSE-EXTRA-HOSTS-TO-CHECK (:NETWORK)
    :DECLARE-SPECIAL-P T
    :NAME "ZWEI:*CONVERSE-EXTRA-HOSTS-TO-CHECK*"
    :DOCUMENTATION "A list of hosts other than LISP machines that are checked to determine if a user is logged in.
This variable only is checked when a username is specified as a destination without a host."
    :CVV-TYPE :STRING-LIST
    :GET-VALUE (LOOP FOR HOST IN ZWEI:*CONVERSE-EXTRA-HOSTS-TO-CHECK*
		     COLLECT (SEND HOST :NAME))
    :SET-EFFECT (PROGN
		  (SETQ ZWEI:*CONVERSE-EXTRA-HOSTS-TO-CHECK*
			(MAKE-HOST-LIST CONVERSE-EXTRA-HOSTS-TO-CHECK))
		  (SETQ CONVERSE-EXTRA-HOSTS-TO-CHECK
			(LOOP FOR HOST IN ZWEI:*CONVERSE-EXTRA-HOSTS-TO-CHECK*
			      COLLECT (SEND HOST :NAME))))
    :FORM-FOR-INIT-FILE
    (LAMBDA (VAR)
      `(PROGN (PROFILE-SETQ ,VAR ',CONVERSE-EXTRA-HOSTS-TO-CHECK)
	      (LOGIN-SETQ ZWEI:*CONVERSE-EXTRA-HOSTS-TO-CHECK* (MAKE-HOST-LIST ,VAR))))))

(DEFINE-PROFILE-VARIABLE ZWEI::*CONVERSE-END-EXITS* (:NETWORK)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*CONVERSE-GAGGED* (:NETWORK)
  :CVV-TYPE :STRING-OR-NIL
  :DOCUMENTATION
    "This variable determines whether you want to receive incoming messages. NIL means you want messages.
If a string value, it is sent to users trying to send you a message saying why you are not accepting.")

(DEFINE-PROFILE-VARIABLE ZWEI::*CONVERSE-WAIT-P* (:NETWORK)
  :CVV-TYPE :T-OR-NIL) 

;1;;MISC*

(DEFINE-PROFILE-VARIABLE FS:HOST-UNIT-LIFETIME (:FILE :NETWORK)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE FS:RECORD-PASSWORDS-FLAG (:FILE :NETWORK)
  :CVV-TYPE :T-OR-NIL) 


;;;  Here's our old friend from the NOTES above!

(DEFINE-PROFILE-VARIABLE USER-LOGIN-MACHINE (:FILE)
  :DECLARE-SPECIAL-P T
  :NAME "FS:USER-LOGIN-MACHINE"  ;;name of the variable Profile is representing
  :DOCUMENTATION "The host the user is logged in on."
  :CVV-TYPE :STRING
;  :VARIABLE-INIT nil ;(if (OR (NULL USER-ID) (STRING-EQUAL USER-ID "")) ;this tests for a user being logged in
;		     (send net:associated-machine :name)
;		     (SEND FS:USER-LOGIN-MACHINE :NAME))
  :GET-VALUE (if (OR (NULL USER-ID) (STRING-EQUAL USER-ID ""))
		 (send net:associated-machine :name)
		 (SEND FS:USER-LOGIN-MACHINE :NAME))
  :SET-EFFECT (setq user-login-machine
		    (SEND (SETF FS:USER-LOGIN-MACHINE (SI:PARSE-HOST USER-LOGIN-MACHINE T)) :NAME))
  :FORM-FOR-INIT-FILE
    (LAMBDA (VARIABLE)
      `(PROGN
	 (PROFILE-SETQ ,VARIABLE ,USER-LOGIN-MACHINE)
	 (LOGIN-SETQ FS:USER-LOGIN-MACHINE (SI:PARSE-HOST ,USER-LOGIN-MACHINE T)))))


(DEFINE-PROFILE-VARIABLE FS:*NAME-SPECIFIED-DEFAULT-TYPE* (:FILE)
  :CVV-TYPE (:MENU `',(LOOP FOR TYPE IN FS::CANONICAL-TYPES BY #'CDDR
			    COLLECT TYPE))) 

(DEFINE-PROFILE-VARIABLE ZUNDERFLOW (:ERROR)
  :CVV-TYPE :T-OR-NIL
  :DOCUMENTATION
    "If T exponent underflow proceeds, returning zero as value") 

(DEFINE-PROFILE-VARIABLE EH::*USE-OLD-DEBUGGER* (:ERROR :IMPORTANT)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE EH::*ENTER-WINDOW-DEBUGGER* (:ERROR :IMPORTANT)
  :CVV-TYPE (:ASSOC '(("NIL [never use it] ") (" T [ask] " . T) (" :ALWAYS [always use it] " . :ALWAYS)))
  :NAME "Use Window Debugger On Errors") 

(DEFINE-PROFILE-VARIABLE EH::*DEFAULT-BUG-REPORT-FRAMES* (:ERROR)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE EH::*ENABLE-TRANS-TRAP-DWIM* (:ERROR)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE EH::*TRACE-CONDITIONS* (:ERROR)
  :CVV-TYPE :ANY) 

(DEFINE-PROFILE-VARIABLE EH::*PDL-GROW-RATIO* (:ERROR)
  :CVV-TYPE :NUMBER) 

(DEFINE-PROFILE-VARIABLE EH::*DEBUG-IO-OVERRIDE* (:ERROR)
  :CVV-TYPE :ANY) 

(DEFINE-PROFILE-VARIABLE TRACE-COMPILE-FLAG (:EVAL :ERROR)
  :CVV-TYPE :T-OR-NIL) 

;;;
;1;;  COMPILER OPTIONS*
;1;;*
;1;; Note that most of these aren't included because the compiler*
;1;; binds the variables when it runs.*
;1;; If the user would actually like to use the commented out variables,*
;1;; use something like COMPILER-LET to bind these when the file is compiled.*
;1;; *


(DEFINE-PROFILE-VARIABLE COMPILE-ENCAPSULATIONS-FLAG (:COMPILE)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE COMPILER:*WARN-OF-SUPERSEDED-FUNCTIONS-P* (:COMPILE)
  :CVV-TYPE :T-OR-NIL)

;1;; This variable is included above, since it is also used for Common Lisp and Input Variables sections*
;(DEFINE-PROFILE-VARIABLE *READ-DEFAULT-FLOAT-FORMAT* (:COMPILE)
;  :CVV-TYPE :CHOOSE '('SINGLE-FLOAT 'DOUBLE-FLOAT))

(DEFINE-PROFILE-VARIABLE SI:*READ-ACCEPT-EXTENSIONS* (:COMPILE)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE COMPILER:QC-FILE-CHECK-INDENTATION (:COMPILE)
  :CVV-TYPE :T-OR-NIL) 

;(define-profile-variable INHIBIT-STYLE-WARNINGS-SWITCH (:compile) :t-or-nil)

;(define-profile-variable RUN-IN-MACLISP-SWITCH (:compile :eval) :t-or-nil)

;(define-profile-variable OBSOLETE-FUNCTION-WARNING-SWITCH (:compile) :t-or-nil)

;(define-profile-variable ALL-SPECIAL-SWITCH (:compile) :t-or-nil)

;(define-profile-variable ALLOW-VARIABLES-IN-FUNCTION-POSITION-SWITCH (:compile) :t-or-nil)

;(define-profile-variable OPEN-CODE-MAP-SWITCH (:compile) :t-or-nil)

;(define-profile-variable COMPILER:PEEP-ENABLE (:compile) :t-or-nil)

(DEFINE-PROFILE-VARIABLE COMPILER:COMPILER-VERBOSE (:COMPILE)
  :CVV-TYPE :T-OR-NIL) 

;1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE COMPILER:*OUTPUT-VERSION-BEHAVIOR* (:COMPILE)
  :CVV-TYPE (:ASSOC '(("SAME" . :SAME) ("NEWEST" . :NEWEST)
		     ("HIGHER" . :HIGHER) ("ASK HIGHER" . :ASK-HIGHER)
		     ("ASK SAME" . :ASK-SAME))))

(DEFINE-PROFILE-VARIABLE COMPILER:WARN-ON-ERRORS (:COMPILE)
  :CVV-TYPE :T-OR-NIL) 

;1;;*
;1;; INPUT and DISPLAY options*
;1;;*

;1;Some of these are CL synonyms*

(DEFINE-PROFILE-VARIABLE ARREST-CHARACTER (:DISPLAY)
  :NAME "Arrest Character"
  :DOCUMENTATION "The arrest character, when non-nil, will toggle the arrest reasons for the process in the who-line."
  :DECLARE-SPECIAL-P T
  :CVV-TYPE :CHARACTER-OR-NIL
  :SET-EFFECT (SET-KBD-ARREST ARREST-CHARACTER))


;;(DEFINE-PROFILE-VARIABLE PRIN1 (:DISPLAY)
;;  :CVV-TYPE :SEXP) 

(DEFINE-PROFILE-VARIABLE *NOPOINT (:DISPLAY)
  :CVV-TYPE :T-OR-NIL) 

;1;*(DEFINE-PROFILE-VARIABLE W::EXPLODING-MOMENTARY-WINDOWS (:DISPLAY)
;1;*  :CVV-TYPE :T-OR-NIL) 

;;;Added for 3.1  slm
(DEFINE-PROFILE-VARIABLE W:*HOLLOW-M-CHOICE-BOX-P* (:MOUSE)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE W:MOUSE-DOUBLE-CLICK-TIME (:MOUSE :INPUT)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE W:MOUSE-BOUNCE-TIME (:MOUSE)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

(DEFINE-PROFILE-VARIABLE W:*MOUSE-INCREMENTING-KEYSTATES* (:MOUSE)
  :CVV-TYPE (:SET '(:SHIFT :HYPER :SUPER :META :CONTROL))) 

(DEFINE-PROFILE-VARIABLE TV::MOUSE-FAST-MOTION-CROSS-TIME (:MOUSE)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER)
  :DOCUMENTATION
   "This is the length of time (in DO Loop units) that a fast motion
cross stays on the screen once it appears.") 

(DEFINE-PROFILE-VARIABLE TV::MOUSE-FAST-MOTION-CROSS-SIZE (:MOUSE)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER)) 

(DEFINE-PROFILE-VARIABLE TV::MOUSE-FAST-MOTION-SPEED (:MOUSE)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER)) 

1;;;Removed for Release 3.0 -- Window System no longer uses this variable.  9/86 slm*
;;(DEFINE-PROFILE-VARIABLE TV::SCROLL-BAR-WIDTH (:MOUSE)
;;  :CVV-TYPE :TYPEP (AND INTEGER (SATISFIES PLUSP))) 

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-DEFAULT-MODE* (:MOUSE)
  :CVV-TYPE (:CHOOSE '(:MINIMUM :MEDIUM :MAXIMUM)))

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-DEFAULT-SIDE* (:MOUSE)
  :CVV-TYPE (:ASSOC '(("Left" . :LEFT) ("Right" . :RIGHT))))

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-DEFAULT-ICON-WIDTH* (:MOUSE)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-DEFAULT-ICON-HEIGHT* (:MOUSE)
  :CVV-TYPE (:TEST 'POSITIVE-INTEGER))


;;;  The scroll-bar-shade stuff is a hairy example of what has to be done to preserve
;;;  a REAL variable's type at all times.  The helper functions are used to put the
;;;  current/selected value into a displayable form.

(DEFUN GET-SCROLL-BAR-SHADE-STRING (ARG)
  "Helper function to get the correct values displayed for the scroll-bar-shade without 
messing up this variable's type."
  (COND
    ((EQL ARG  W:12%-GRAY) "12% GRAY")
    ((EQL ARG  W:25%-GRAY) "25% GRAY")
    ((EQL ARG  W:33%-GRAY) "33% GRAY")
    ((EQL ARG  W:50%-GRAY) "50% GRAY")
    ((EQL ARG  W:66%-GRAY) "66% GRAY")
    ((EQL ARG  W:75%-GRAY) "75% GRAY")
    ((EQL ARG  W:88%-GRAY) "88% GRAY")))

(DEFUN GET-SCROLL-BAR-SHADE-ARRAY (ARG)
  "Helper function to get the correct array value into the w::*scroll-bar-shade*"
  (COND
    ((EQUAL ARG "12% GRAY") W:12%-GRAY)
    ((EQUAL ARG "25% GRAY") W:25%-GRAY)
    ((EQUAL ARG "33% GRAY") W:33%-GRAY)
    ((EQUAL ARG "50% GRAY") W:50%-GRAY)
    ((EQUAL ARG "66% GRAY") W:66%-GRAY)
    ((EQUAL ARG "75% GRAY") W:75%-GRAY)
    ((EQUAL ARG "88% GRAY") W:88%-GRAY)))
  
(DEFINE-PROFILE-VARIABLE SCROLL-BAR-SHADE (:MOUSE)
  :DECLARE-SPECIAL-P T
  :NAME "W::*SCROLL-BAR-SHADE*"
  :DOCUMENTATION "Shade to use when drawing scroll bars."
  :CVV-TYPE (:CHOOSE '("12% GRAY" "25% GRAY" "33% GRAY"
		      "50% GRAY" "66% GRAY" "75% GRAY" "88% GRAY"))
  :GET-VALUE (SETQ SCROLL-BAR-SHADE (GET-SCROLL-BAR-SHADE-STRING W::*SCROLL-BAR-SHADE*))
  :SET-EFFECT (PROGN
		(SETQ W::*SCROLL-BAR-SHADE*
		      (GET-SCROLL-BAR-SHADE-ARRAY SCROLL-BAR-SHADE))
		SCROLL-BAR-SHADE)
  :FORM-FOR-INIT-FILE
  (LAMBDA (VARIABLE)
    `(PROGN
       (PROFILE-SETQ ,VARIABLE ,SCROLL-BAR-SHADE)
       (LOGIN-SETQ W::*SCROLL-BAR-SHADE* (GET-SCROLL-BAR-SHADE-ARRAY ,SCROLL-BAR-SHADE)))))

;1;;;Added for Release 3.0 Window System.  9/86 slm*
;;(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-DEFAULT-CLICKS* (:MOUSE)
;;  :CVV-TYPE ())

;1;;;Added for Release 3.0 Window System.  9/86 slm*
;(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-WHO-LINE-DOCUMENTATION* (:MOUSE)
;  :CVV-TYPE ())

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-DEFAULT-DELAY-TIME* (:MOUSE)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL)

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-DEFAULT-LINES* (:MOUSE)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL)

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-CHAR-INDEX* (:MOUSE)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL)

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-CHAR-X-OFFSET* (:MOUSE)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL)

1;;;Added for Release 3.0 Window System.  9/86 slm*
(DEFINE-PROFILE-VARIABLE W::*SCROLL-BAR-CHAR-Y-OFFSET* (:MOUSE)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL)

(DEFINE-PROFILE-VARIABLE W::SCROLL-BAR-RELUCTANCE (:MOUSE)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL) 

(DEFINE-PROFILE-VARIABLE W::SCROLL-BAR-MAX-EXIT-SPEED (:MOUSE)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL) 

(DEFINE-PROFILE-VARIABLE W::SCROLL-BAR-MAX-SPEED (:MOUSE)
  :CVV-TYPE :POSITIVE-FIXNUM-OR-NIL) 

(DEFINE-PROFILE-VARIABLE w:*menu-mouse-no-item-glyph* (:MOUSE)
  :CVV-TYPE (:menu '(let (entries)
		      (dotimes (index (length fonts:mouse))
			(when (aref (W:font-chars-exist-table fonts:mouse) index)
			  (push `(,(string (int-char index)) :value ,(int-char index) :font fonts:mouse)
				entries)))
		      entries)
		   :font fonts:mouse)
  :DOCUMENTATION
   "This is the character that determines the mouse glyph on a menu when there is no mouse sensitive item.
Selecting this item will present a menu of mouse font chatacters."
   )

(DEFINE-PROFILE-VARIABLE w:*menu-mouse-item-glyph* (:MOUSE)
  :CVV-TYPE (:menu '(let (entries)
		      (dotimes (index (length fonts:mouse))
			(when (aref (w:font-chars-exist-table fonts:mouse) index)
			  (push `(,(string (int-char index)) :value ,(int-char index) :font fonts:mouse)
				entries)))
		      entries))
  :DOCUMENTATION
  "This is the character that determines the mouse glyph on a menu when there is a mouse sensitive item.
Selecting this item will present a menu of mouse font chatacters."
   )

1;;;Added for Release 3.0 -- 9/86 slm
;;;Notice that for Release 3.0, Packages "W" and "TV" are synonymous*
(DEFINE-PROFILE-VARIABLE W::*UNEXPECTED-SELECT-DELAY* (:DISPLAY)
  :CVV-TYPE :FIXNUM)

;;;Added for Release 3.0 -- 9/86 slm
1;;;Notice that for Release 3.0, Packages "W" and "TV" are synonymous*
(DEFINE-PROFILE-VARIABLE W::*DEFAULT-MENU-SEARCH-DISPLAY-MODE* (:DISPLAY)
  :CVV-TYPE (:CHOOSE '(:TRAVELING-SEARCH :FAKE-MINIBUFFER)))
  
(DEFINE-PROFILE-VARIABLE SI::SHIFT-LOCK-XORS (:INPUT)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE BEEP (:DISPLAY)
  :CVV-TYPE (:CHOOSE '(:SILENT :FLASH :BEEP T))
  :DOCUMENTATION
   "This affects what the BEEP function will do.  :SILENT does nothing
:FLASH flashes the screen.  :BEEP makes a noise.  T flashes the screen AND makes a noise.") 
1;;;==============================
;;; MORE PROCESSING AND SCROLLING
;;;==============================*

(DEFINE-PROFILE-VARIABLE W:MORE-PROCESSING-GLOBAL-ENABLE (:DISPLAY :IMPORTANT)
  :CVV-TYPE :T-OR-NIL
  :DOCUMENTATION
   "This variable controls whether more processing is in effect by default. When enabled, each time the screen
fills with text, **More** will be displayed, and additional typeout will wait until you to press any key.") 

(DEFINE-PROFILE-VARIABLE W::*UNIDIRECTIONAL-MORE-STANDARD-MESSAGE* (:DISPLAY)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE TV::*BIDIRECTIONAL-MORE-STANDARD-MESSAGE* (:DISPLAY)
  :CVV-TYPE :STRING
  :DOCUMENTATION
   "Standard message string indicating that forward and backward More
processing is available [compare with *UNIDIRECTIONAL-MORE-STANDARD-MESSAGE*].") 

(DEFINE-PROFILE-VARIABLE W::*MORE-FORWARD-STANDARD-MESSAGE* (:DISPLAY)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE W::*NO-MORE-FORWARD-STANDARD-MESSAGE* (:DISPLAY)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE W::*MORE-BACKWARD-STANDARD-MESSAGE* (:DISPLAY)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE W::*NO-MORE-BACKWARD-STANDARD-MESSAGE* (:DISPLAY)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE W::*MORE-PROCESSING-STANDARD-BEEP* (:DISPLAY)
  :CVV-TYPE :KEYWORD) 

(DEFINE-PROFILE-VARIABLE W::*CHOOSE-VARIABLE-VALUES-NAME-STANDARD-FONT* (:DISPLAY)
  :CVV-TYPE :FONT
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    `(PROFILE-SETQ ,VAR ,(W:FONT-NAME (EVAL VAR))))) 

(DEFINE-PROFILE-VARIABLE W::*CHOOSE-VARIABLE-VALUES-VALUE-STANDARD-FONT* (:DISPLAY)
  :CVV-TYPE :FONT
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    `(PROFILE-SETQ ,VAR ,(W:FONT-NAME (EVAL VAR))))) 

(DEFINE-PROFILE-VARIABLE W::*CHOOSE-VARIABLE-VALUES-STRING-STANDARD-FONT* (:DISPLAY)
  :CVV-TYPE :FONT
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    `(PROFILE-SETQ ,VAR ,(W:FONT-NAME (EVAL VAR))))) 

(DEFINE-PROFILE-VARIABLE W::*CHOOSE-VARIABLE-VALUES-UNSELECTED-CHOICE-STANDARD-FONT* (:DISPLAY)
   :CVV-TYPE :FONT
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    `(PROFILE-SETQ ,VAR ,(W:FONT-NAME (EVAL VAR))))) 

(DEFINE-PROFILE-VARIABLE W::*CHOOSE-VARIABLE-VALUES-SELECTED-STANDARD-FONT* (:DISPLAY)
   :CVV-TYPE :FONT
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    `(PROFILE-SETQ ,VAR ,(W:FONT-NAME (EVAL VAR))))) 

(DEFINE-PROFILE-VARIABLE W::*REMOVE-TYPEOUT-STANDARD-MESSAGE* (:DISPLAY)
  :CVV-TYPE :STRING) 

(DEFINE-PROFILE-VARIABLE W::*REMOVE-TYPEOUT-STANDARD-FONT* (:DISPLAY)
  :CVV-TYPE :FONT
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    `(PROFILE-SETQ ,VAR ,(W:FONT-NAME (EVAL VAR))))) 

(DEFINE-PROFILE-VARIABLE W::*REMOVE-TYPEOUT-STANDARD-BEEP* (:DISPLAY)
  :CVV-TYPE :KEYWORD) 

(DEFINE-PROFILE-VARIABLE KEYCLICK-STATE (:DISPLAY :INPUT :IMPORTANT)
  :DECLARE-SPECIAL-P T
  :NAME "KEYCLICK STATE"
  :DOCUMENTATION
  "Turns the keyboard keyclicks on or off.
If on, a light clicking sound will be produced by the keyboard each time a key on the keyboard is pressed."
  :CVV-TYPE (:ASSOC '(("On" . T) ("Off")))
  :SET-EFFECT (W::SETUP-KEYBOARD-KEYCLICK KEYCLICK-STATE)) 

(DEFINE-PROFILE-VARIABLE W::MOUSE-HANDEDNESS (:INPUT :MOUSE)
  :CVV-TYPE  (:ASSOC '(("Right" . :RIGHT) ("Left" . :LEFT)))) 

(DEFINE-PROFILE-VARIABLE SCREEN-REVERSE-VIDEO-FUNCTION (:DISPLAY :IMPORTANT)
  :NAME "Reverse Video Status"
  :DOCUMENTATION "Indicates whether or not the screen will be in reverse video." :DECLARE-SPECIAL-P T
  :GET-VALUE (if TV::*CURRENT-SCREEN-COLOR*
		     'W:BLACK-ON-WHITE
		     'W:WHITE-ON-BLACK)
  :CVV-TYPE (:ASSOC '(("Black on White" . W:BLACK-ON-WHITE) (" White on Black" . W:WHITE-ON-BLACK)))
  :SET-EFFECT (FUNCALL SCREEN-REVERSE-VIDEO-FUNCTION)) 

(defun find-last-name-first (user-name)
  2"This functions creates a string for the user's name, last name first, from the personal name string in USER-NAME."
1;;This function is also called in the new user package, so DON'T put it in the body of UPDATE-USER-PERSONAL-NAME-LAST-NAME-FIRST**
  (unless (stringp user-name)
    (setq user-name (string user-name)))
  (let* ((pos (position #\space (the string user-name) :from-end t :test #'equal))
	 (last-name (when pos (subseq user-name (1+ pos))))
	 (first-name (when pos (subseq user-name 0 pos))))
    (if pos
	(string-append last-name " " first-name)
	user-name)))

(defun update-user-personal-name-last-name-first ()
  2"Updates fs:user-personal-name as a set effect when
fs:user-personal-name-first-name-first is changed."*
  (setq fs:user-personal-name
	(find-last-name-first fs:user-personal-name-first-name-first)))

(DEFINE-PROFILE-VARIABLE FS:USER-PERSONAL-NAME-FIRST-NAME-FIRST (:DISPLAY)
  :NAME "User Name"
  :CVV-TYPE :STRING
  :SET-EFFECT (UPDATE-USER-PERSONAL-NAME-LAST-NAME-FIRST)) 
			  
(Defun NUMBER-OF-MOUSE-DOCUMENTATION-LINES ()
  (truncate (/ (SEND W::WHO-LINE-DOCUMENTATION-WINDOW :HEIGHT)
       (SEND W:WHO-LINE-DOCUMENTATION-WINDOW :LINE-HEIGHT))))

;1;Added in Profile 2.2 -dlc*

(DEFPARAMETER MAX-NUMBER-OF-WHO-LINE-DOCUMENTATION-LINES 20
   "2This is the maximum number of wholine documentation lines that can be set from the Profile Utility.*") 

;1;CVV-TYPE changed in Profile 2.2 -dlc*

(DEFINE-PROFILE-VARIABLE NUMBER-OF-MOUSE-DOCUMENTATION-LINES (:DISPLAY :IMPORTANT)
  :CVV-TYPE (:FIXNUM-IN-INTERVAL 0 MAX-NUMBER-OF-WHO-LINE-DOCUMENTATION-LINES)
  :NAME "NUMBER-OF-MOUSE-DOCUMENTATION-LINES"
  :DOCUMENTATION "2The number of lines displayed in the mouse documentation area."*
  :DECLARE-SPECIAL-P T :GET-VALUE (NUMBER-OF-MOUSE-DOCUMENTATION-LINES)
  :SET-EFFECT
     (UNLESS (= NUMBER-OF-MOUSE-DOCUMENTATION-LINES (NUMBER-OF-MOUSE-DOCUMENTATION-LINES))
       (W::SET-NUMBER-OF-WHO-LINE-DOCUMENTATION-LINES NUMBER-OF-MOUSE-DOCUMENTATION-LINES))
  :LONG-TIME-TO-SET-P T) 

;1;;===========================
;;; SUGGESTIONS MODE SUPPORT
;;;------------------------
;;;This code is conditionalized because some "minimum load bands" do not have Suggestions
;;;built on them at all!!!  For these cases, we do not want to worry about sugg stuff.
;;;===========================*
(WHEN (AND (FIND-PACKAGE "SUGG")
	   (FBOUNDP 'sugg:esc-suggestions-menus)
	   (BOUNDP 'sys:*suggestions-menus-on?*))
  ;1;;Profile 2.4 - Use return value of SUGG:ESC-SUGGESTIONS-MENUS to possibly change SUGGESTIONS-MENUS-ON?*
  (defun make-suggestions-applications-list ()
    (let ((applications-list (mapcar #'sugg:make-suggestions-applications-alist
				     sugg:*all-windows-recognized-by-suggestions*)))
      (loop for entry in applications-list
	    when (second (assoc :suggestions-on (third entry)))
	    collect (car entry))))
  
  (DEFINE-PROFILE-VARIABLE SUGGESTIONS-MENUS-ON? (:DISPLAY :IMPORTANT)
    :DECLARE-SPECIAL-P T
    :DOCUMENTATION "When T, ask which applications should have Suggestions turned on when a user logs in, and restore Suggestions 
to its previous state upon logout.  Turn Suggestions on/off immediately as well."
    :VARIABLE-INIT nil
    :CVV-TYPE :T-OR-NIL
    :SET-EFFECT (UNLESS *profile-restore-p*
		  (case (SUGG::ESC-SUGGESTIONS-MENUS (NOT SUGGESTIONS-MENUS-ON?))
		    (nil sys:*suggestions-menus-on?*)
		    (:no-change suggestions-menus-on?)
		    (otherwise t)))
    :FORM-FOR-INIT-FILE
    (LAMBDA (VAR)
      (WHEN (eval VAR)
	`(WHEN (AND (FIND-PACKAGE "SUGG")                          1;;conditionalize the init form... maybe it was generated *
		    (FBOUNDP 'sugg:turn-all-suggestions-menus-on?))1;;in a different environment than the one now loading*
	   (LOGIN-EVAL `(PROGN (SETQ suggestions-menus-on?     
				     (variable-initial-value suggestions-menus-on?))
			       (sugg:turn-all-suggestions-menus-off)))
	   (SETQ ,var (sugg:esc-suggestions-menus nil ',(make-suggestions-applications-list)))))))
  )


(DEFINE-PROFILE-VARIABLE W::KEYPAD-IN-APPLICATION-MODE-P (:INPUT)
  :CVV-TYPE :T-OR-NIL
  :DOCUMENTATION "Indicates the state of the keypad on the keyboard.  If NIL, the keypad keys function just
as labeled.  If T, different character codes are generated by the keypad keys.") 


(DEFINE-PROFILE-VARIABLE TV::INITIAL-REPEAT-DELAY (:INPUT)
  :CVV-TYPE :NON-NEGATIVE-FIXNUM
  :DOCUMENTATION "This is the number 60ths of a second after you hold down a key before repeating
starts (typomatic).  Set this to 0 to shut off the repeat capability.") 


(DEFINE-PROFILE-VARIABLE TV::CONTINUOUS-REPEAT-DELAY (:INPUT)
  :CVV-TYPE :NON-NEGATIVE-FIXNUM
  :DOCUMENTATION "When you hold a key down and it begins to repeat (typomatic),
this is the number of 60ths of a second between repeats.") 


(DEFINE-PROFILE-VARIABLE CLOCK-FORMAT (:DISPLAY :IMPORTANT)
  :DECLARE-SPECIAL-P T
  :NAME "CLOCK-FORMAT"
  :CVV-TYPE (:ASSOC '((" 24 Hour Clock" . :24-HOUR) ("12 Hour Clock" . :12-HOUR)))
  :DOCUMENTATION "2The format of the time display in the wholine*. (bottom-left corner of the screen)"
  :GET-VALUE (SYMBOL-VALUE 'W::CLOCK-TYPE)
  :SET-EFFECT (CASE CLOCK-FORMAT
		    (:12-HOUR (UNLESS (EQ W::CLOCK-TYPE ':12-HOUR)
				   (W::12-HOUR-CLOCK-SETUP)))
		    (:24-HOUR (UNLESS (EQ W::CLOCK-TYPE ':24-HOUR)
				   (W::24-HOUR-CLOCK-SETUP))))
  :LONG-TIME-TO-SET-P T) 


(DEFINE-PROFILE-VARIABLE P-LISP-MODE (:EVAL :IMPORTANT) :CVV-TYPE
   (:CHOOSE '(:COMMON-LISP :ZETALISP)) :DECLARE-SPECIAL-P T :NAME "Current Lisp Mode"
   :DOCUMENTATION
   "What Lisp mode the system is currently running in. This can be either :Zetalisp or :Common-Lisp.
Note that the Lisp mode of individual files depends on the Attribute List of the file (eg, ;;-*-Mode:Common-Lisp -*-)"
   :GET-VALUE (LISP-MODE T);1Obtain Global value*
   :SET-EFFECT
   (IF SYSTEM:FDEFINE-FILE-PATHNAME;1Set the mode globally if we are reading a file*
     (SET-LISP-MODE P-LISP-MODE T)
     (WHEN (NEQ (LISP-MODE) P-LISP-MODE)
       (SET-LISP-MODE P-LISP-MODE))
     ;1;Refresh the screen if we can*
     (LET ((CVV-PANE
	    (WHEN W:SELECTED-WINDOW
	      (SEND W:SELECTED-WINDOW :SEND-IF-HANDLES :CVV-PANE))))
       (WHEN CVV-PANE
	 (SEND CVV-PANE :REDISPLAY-VARIABLE-IF-PRESENT 'ZWEI::*DEFAULT-MAJOR-MODE*))))) 


(DEFUN ADD-UCL-VARIABLES-TO-PROFILE ()
  "2Adds the UCL variables to the Profile facility.
This is intended as a special purpose fix to get UCL variables into the
Profile framework..*"
  ;1;;Future Project: Generalize the Profile framework to accept any*
  ;1;;type of variable storage that an application might have.*
  (PUSHNEW '(UCL::SPECIAL-CASE-TYPEIN-ATTRIBUTES-HANDLER *UCL-VARIABLES*)
     *EXTRA-CONSTRAINT-FUNCTIONS*)
  (LOOP FOR (VARIABLE NAME NIL DOCUMENTATION KEYWORD ARGS) IN
     (REVERSE UCL::*TOP-LEVEL-CONFIGURATION-CHOICES*) DO
     (DEFINE-PROFILE-VARIABLE-1 VARIABLE :UCL `(,KEYWORD ',ARGS) NAME DOCUMENTATION))) 


(ADD-UCL-VARIABLES-TO-PROFILE) 


(DEFPROP UCL::*SCROLL-PIXEL-INCREMENT*
   (WHEN (TYPEP W:SELECTED-WINDOW 'W:LISP-LISTENER)
     (SEND W:SELECTED-WINDOW :SET-SCROLL-PIXEL-INCREMENT UCL::*SCROLL-PIXEL-INCREMENT*))
   SET-EFFECT) 

(DEFPROP UCL::*SCROLL-PIXEL-INCREMENT*
	 (LAMBDA (VAR)
	   `(PROG1 (PROFILE-SETQ ,VAR ,UCL:*SCROLL-PIXEL-INCREMENT*)
		   (WHEN (TYPEP W:SELECTED-WINDOW 'W:LISP-LISTENER)
		     (SEND W:SELECTED-WINDOW :SET-SCROLL-PIXEL-INCREMENT UCL::*SCROLL-PIXEL-INCREMENT*)
		     (SEND W:SELECTED-WINDOW :SELECT))))
	 FORM-FOR-INIT-FILE)

;1;;Correct the documentation for this variable so that it fits properly in the mouse doc area.*

(SETF (VARIABLE-DOCUMENTATION 'UCL::*SCROLL-PIXEL-INCREMENT*)
      "Controls the number of pixels to scroll in Lisp Listeners. 0 deactivates scrolling. Positive integer = number of pixels to scroll.
Negative integer is sensitive to window height; its magnitude = window LINE height at which scrolling is one line.") 


;1;;*
;1;; AUTOMATIC LOAD OF SYSTEM PATCHES*
;1;;*
;1;; The intent here is to provide a simple mechanism by which users*
;1;; can load patches.  Patches will be loaded only if they have not yet been*
;1;; loaded since the cold boot of the current band.*
;1;; They will be loaded if the user sets the variable LOAD-PATCHES-AT-LOGIN*
;1;; to T in the Profile interface or when the appropriate form is in the user's init file.*

(DEFPARAMETER SYSTEM-PATCHES-LOADED-P ()
   "2This is set to non-NIL by the Profiler when all patches are loaded for the currently installed software.*") 


(ADD-INITIALIZATION "Profile: Indicate that patches haven't been loaded."
		    '(SETQ SYSTEM-PATCHES-LOADED-P ()) :COLD) 		   ;1Don't want to redo patches after a warm boot*


(DEFINE-PROFILE-VARIABLE LOAD-PATCHES-AT-LOGIN (:IMPORTANT) :DOCUMENTATION
   "T if system patches are to be loaded automatically.  Setting this to T will cause all unloaded patches to be loaded.
If you save your Profile options in your LOGIN-INIT file, this will enable you to load patches at Login time."
   :DECLARE-SPECIAL-P T
   :NAME "Load Patches at Login"
   :CVV-TYPE :T-OR-NIL
   :SET-EFFECT
   (WHEN  LOAD-PATCHES-AT-LOGIN  ; DAB 01-25-89 Remove references to zwei:*loaded-patches*, old CM junk.
     (LOAD-PATCHES :NOSELECTIVE)  ; DAB 03-10-89
     (SETQ SYSTEM-PATCHES-LOADED-P T)
     )
   :VARIABLE-INIT ()) 

;1;;*
;1;;  SAVE BUFFERS AT LOGOUT*
;1;;*
;1;; This checks for unsaved Zmacs buffers at logout.  Most of this should be part of Zmacs (eventually)*
;1;; In Profile 2.2, we just use ZWEI:SAVE-ALL-FILES because it is much faster.*
;1;; In Profile 2.6, we allow menu or the query approach, with default being the query (its easier for users).*
;1;;*
;1;;Form changed in Profile 2.6 -dlc*

(ADD-INITIALIZATION "Check for modified buffers" '(MAYBE-SAVE-ZMACS-BUFFERS) :LOGOUT) 

;1;;Restored in 2.6*

(DEFVAR KILLING-ZMACS-BUFFERS-AT-LOGOUT-P ()
   "2Synchronizes ZMACS with Lisp Listener during logout.  Set to T during the time Zmacs is saving buffers.*") 


;1;;Modified in Profile 2.6*


(DEFINE-PROFILE-VARIABLE SAVE-ZMACS-BUFFERS-AT-LOGOUT-P () 
  :DECLARE-SPECIAL-P T
  :NAME "Save Buffers at Logout"
  :DOCUMENTATION
   "2This indicates whether the user would like to check for unsaved Zmacs buffers at logout.
This prevents lost work due to files that were editted by not saved.*"
   :VARIABLE-INIT T 
   :CVV-TYPE :T-OR-NIL 
   :SET-EFFECT (SETQ SAVE-BUFFERS-AT-LOGOUT-ACTION (IF SAVE-ZMACS-BUFFERS-AT-LOGOUT-P :MENU ()))) 


;1;;Defined in Profile 2.6*

(DEFINE-PROFILE-VARIABLE SAVE-BUFFERS-AT-LOGOUT-ACTION (:ZMACS :IMPORTANT) 
   :DECLARE-SPECIAL-P T
   :NAME "SAVE-BUFFERS-AT-LOGOUT-ACTION"
   :DOCUMENTATION
   "2This indicates whether the user would like to check for unsaved Zmacs buffers at logout.
This prevents lost work due to files that were editted by not saved.*"
   :VARIABLE-INIT :MENU 
   :CVV-TYPE (:ASSOC '(("Via Menu " . :MENU) ("Via Prompts " . :QUERY) ("Don't Save Buffers")))) 

;1;;Restored in 2.6*

(DEFUN MAYBE-SAVE-ZMACS-BUFFERS ()
  "2Optionally invoke KILL-OR-SAVE-BUFFERS if there are modified buffers.*"
  (WHEN (AND SAVE-BUFFERS-AT-LOGOUT-ACTION
      (SOME #'(LAMBDA (BUFFER)
		(SEND BUFFER :SEND-IF-HANDLES :NEEDS-SAVING-P))
	    ZWEI:*ZMACS-BUFFER-LIST*)
      (Y-OR-N-P "There are modified ZMACS buffers, do you want to save any of the changes? "))
    (CASE SAVE-BUFFERS-AT-LOGOUT-ACTION
      (NIL NIL);1Do nothing*
      ((T :MENU) (KILL-OR-SAVE-BUFFERS-FROM-LISP))
      (:QUERY (LET ((ZWEI:*WINDOW* NIL));1Only want to save modified files*
		(ZWEI::COM-SAVE-ALL-FILES)))))) 

;1;;Restored in Profile 2.6*
;1;; Add check to see if Zmacs process doesn't exist yet - Profile 2.2 -dlc*

(DEFUN KILL-OR-SAVE-BUFFERS-FROM-LISP ()
  "2From LISP ask ZMACS to invoke KILL-OR-SAVE-BUFFERS menu & command.*"
  (LET ((ZMACS-PROCESS
	 (LOOP FOR PROCESS IN SYSTEM:ALL-PROCESSES 
               WHEN (EQUALP (SUBSEQ (STRING (SEND PROCESS :NAME)) 0 5)
                            "zmacs")
	       RETURN PROCESS)))
    (IF (NULL ZMACS-PROCESS);1No Zmacs process exists yet (eg. Zwei buffer created in Dribble)*
      (ZWEI::SAVE-ALL-FILES)
      ;1;Otherwise (normally), do the buffer saving using Zmacs*
      (PROGN
	(SETQ KILLING-ZMACS-BUFFERS-AT-LOGOUT-P T)
	(SEND ZMACS-PROCESS :INTERRUPT
	   #'(LAMBDA ()
	       (ZWEI::COM-KILL-OR-SAVE-BUFFERS)
	       (SETQ KILLING-ZMACS-BUFFERS-AT-LOGOUT-P ())))
	(PROCESS-WAIT "Saving buffers" #'(LAMBDA ()
					   (NULL KILLING-ZMACS-BUFFERS-AT-LOGOUT-P)))
	(SETQ KILLING-ZMACS-BUFFERS-AT-LOGOUT-P ()))))) 


;1;;*
;1;; MAILER VARIABLES*
;1;;*

;1; may 01/25/89 DO NOT load these if the MAIL package does not exist.*
;1; This will be the case in a development band ( yes we have more than one to sell ! )*

(WHEN (si:find-package "MAIL") ;1; may 01/25/89
   *;1; may 01/25/89 REMOVED "MAIL::" package  prefix on next 4 variables
   *;1; and added :declare-special-p :get-effect, :set-effect, :documentation,
   *;1; and :form-for-init-file. Now there are two variables but they should track closely.*
  (DEFINE-PROFILE-VARIABLE *TRY-MAIL-NOW-P* (:MAIL)
    :DECLARE-SPECIAL-P T
    :CVV-TYPE :T-OR-NIL
    :DOCUMENTATION "Attempt to send mail in foreground before queueing."
    :GET-VALUE (EVAL (find-symbol '*TRY-MAIL-NOW-P* 'MAIL))
    :SET-EFFECT (SET (find-symbol '*TRY-MAIL-NOW-P* 'MAIL) *TRY-MAIL-NOW-P*)
    :FORM-FOR-INIT-FILE
    (LAMBDA (VAR)
      `(PROGN
	 (LOGIN-EVAL (SET (find-symbol '*TRY-MAIL-NOW-P* 'MAIL) *TRY-MAIL-NOW-P*))
         (PROFILE-SETQ ,VAR (SET (find-symbol '*TRY-MAIL-NOW-P* 'MAIL) ,*TRY-MAIL-NOW-P*)))))

  (DEFINE-PROFILE-VARIABLE *MAIL-USER-PERSONAL-NAME* (:MAIL)
    :DECLARE-SPECIAL-P T
    :CVV-TYPE :STRING
    :DOCUMENTATION "Overrides the PERSONAL-NAME user attribute in Name Space.  Personal name of logged in user for generating mail addresses."
    :GET-VALUE (EVAL (find-symbol '*MAIL-USER-PERSONAL-NAME* 'MAIL))
    :SET-EFFECT (SET (find-symbol '*MAIL-USER-PERSONAL-NAME* 'MAIL) *MAIL-USER-PERSONAL-NAME*)
    (LAMBDA (VAR)
      `(PROGN
	 (LOGIN-EVAL (SET (find-symbol '*MAIL-USER-PERSONAL-NAME* 'MAIL) ))
         (PROFILE-SETQ ,VAR (SET (find-symbol '*MAIL-USER-PERSONAL-NAME* 'MAIL)
                                 ,*MAIL-USER-PERSONAL-NAME*)))))

  (DEFINE-PROFILE-VARIABLE *USER-MAIL-ADDRESS* (:MAIL)
    :DECLARE-SPECIAL-P T
    :CVV-TYPE :STRING
    :DOCUMENTATION "Overrides the MAIL-ADDRESS user attribute in Name Space.  Preferred mailing address of logged in user."
    :GET-VALUE (EVAL (find-symbol '*USER-MAIL-ADDRESS* 'MAIL))
    :SET-EFFECT (SET (find-symbol '*USER-MAIL-ADDRESS* 'MAIL) *USER-MAIL-ADDRESS*)
    (LAMBDA (VAR)
      `(PROGN
	 (LOGIN-EVAL (SET (find-symbol '*USER-MAIL-ADDRESS* 'MAIL) ))
         (PROFILE-SETQ ,VAR (SET (find-symbol '*USER-MAIL-ADDRESS* 'MAIL)
                                 ,*USER-MAIL-ADDRESS*)))))

;1;;Added in Profile 2.3 - [Dependent on Mailer 1.15]*

  (DEFINE-PROFILE-VARIABLE *PROBE-FOR-NEW-MAIL-P* (:MAIL)
    :DECLARE-SPECIAL-P T
    :CVV-TYPE :T-OR-NIL
    :DOCUMENTATION "When T, probe inboxes defined by mail files and notify of new mail."
    :GET-VALUE (EVAL (find-symbol '*PROBE-FOR-NEW-MAIL-P* 'MAIL))
    :SET-EFFECT (SET (find-symbol '*PROBE-FOR-NEW-MAIL-P* 'MAIL) *PROBE-FOR-NEW-MAIL-P*)
    (LAMBDA (VAR)
      `(PROGN
	 (LOGIN-EVAL (SET (find-symbol '*PROBE-FOR-NEW-MAIL-P* 'MAIL) ))
         (PROFILE-SETQ ,VAR (SET (find-symbol '*PROBE-FOR-NEW-MAIL-P* 'MAIL)
                                 ,*PROBE-FOR-NEW-MAIL-P*)))))
  ) ;1; may 01/25/89 *

;1;;*
;1;; MAIL-READER VARIABLES*
;1;;

;;Change to cvv-type :pathname -Profile 2.3
;;Added in Profile 2.6
;;Changed 11/27/85 by Lisa Spell -- added :set-effect (ZWEI::FORCE-NEWEST-VERSION-ON-MAIL-PATHNAME ZWEI::*USER-DEFAULT-MAIL-FILE*)
;;CVV-TYPE changed from :pathname to :pathname-or-nil  and :set-effect removed for Release 3.0  9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*USER-DEFAULT-MAIL-FILE* (:MAIL)
  :CVV-TYPE :PATHNAME-OR-NIL
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    `(PROFILE-SETQ ,VAR
		   ,(SEND (FS:PARSE-PATHNAME ZWEI:*USER-DEFAULT-MAIL-FILE*) :SHORT-STRING-FOR-PRINTING))))

;1;Documentation fix in Profile 2.3*

(DEFINE-PROFILE-VARIABLE ZWEI::*PRELOAD-MAIL-FILE-P* (:MAIL)
  :CVV-TYPE :T-OR-NIL
  :SET-EFFECT (IF ZWEI::*PRELOAD-MAIL-FILE-P*
		  (ZWEI::PRELOAD-MAIL-FILE))
   :DOCUMENTATION "If T, load the *user-default-mail-file* in background upon login
or right now if set by Profile")

(DEFINE-PROFILE-VARIABLE ZWEI::*USER-MAIL-READING-MODE* (:MAIL)
  :CVV-TYPE (:CHOOSE '(:SUMMARY :MESSAGE :BOTH))
  :GET-VALUE (ZWEI::DEFAULT-MAIL-WINDOW-CONFIGURATION))

(DEFINE-PROFILE-VARIABLE ZWEI:*MAIL-SUMMARY-MODE*  (:MAIL)
  :CVV-TYPE (:CHOOSE '(:FILTERED :BASIC))
  :DOCUMENTATION "Default summary mode -- Filtered means that mail
        is grouped into categories")

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*STICKY-MAIL-WINDOW-CONFIGURATION-P* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*STICKY-MAIL-BUFFER-SELECTION-P* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*MAIL-SUMMARY-WINDOW-FRACTION* (:MAIL)
  :CVV-TYPE :SMALL-FRACTION)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*MAIL-SUMMARY-TEMPLATE* (:MAIL)
  :CVV-TYPE :LIST)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*MAIL-SUMMARY-ATTRIBUTE-CHAR-ALIST* (:MAIL)
  :CVV-TYPE :LIST)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*ALWAYS-CHECK-INBOXES* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*SAVE-MAIL-FILE-IN-BACKGROUND* (:MAIL)
  :CVV-TYPE (:CHOOSE '(:ALWAYS :NEVER :ASK)))

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*MAIL-FILE-VERSIONS-KEPT* (:MAIL)
  :CVV-TYPE :FIXNUM-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*REFORMAT-HEADERS-AUTOMATICALLY* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*REFORMAT-HEADERS-INCLUDE-LIST* (:MAIL)
  :CVV-TYPE :LIST)
				    
1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*REFORMAT-HEADERS-EXCLUDE-LIST* (:MAIL)
  :CVV-TYPE :LIST)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*REFORMAT-HEADERS-CASE* (:MAIL)
  :CVV-TYPE (:CHOOSE '(:UPCASE :DOWNCASE :CAPITALIZE nil)))

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*REFORMAT-HEADERS-BODY-GOAL-COLUMN* (:MAIL)
  :CVV-TYPE :FIXNUM)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*YANK-MESSAGE-HEADERS-INCLUDE-LIST* (:MAIL)
  :CVV-TYPE :LIST)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*YANK-MESSAGE-PREFIX* (:MAIL)
  :CVV-TYPE :STRING)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*DELETE-MESSAGE-AFTER-COPY* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*CHOOSE-FROM-ALL-MAIL-KEYWORDS-P* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*UNSENT-MESSAGE-QUERY-P* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*TWO-WINDOW-REPLY* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-PRINT-MESSAGE-PRINTER* (:MAIL)
  :CVV-TYPE :STRING-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*MAIL-MODE-HOOK* (:MAIL)
  :CVV-TYPE :FUNCTION)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-BCC-STRING* (:MAIL)
  :CVV-TYPE :STRING-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-FCC-STRING* (:MAIL)
  :CVV-TYPE :STRING-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-REPLY-TO-STRING* (:MAIL)
  :CVV-TYPE :STRING-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*DEFAULT-OTHER-MAIL-FILE* (:MAIL)
  :CVV-TYPE :PATHNAME-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*UNIX-INBOX-PATHNAME* (:MAIL)
  :CVV-TYPE (:LIST-OF :PATHNAME))
;;  :CVV-TYPE :PATHNAME-LIST)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*INHIBIT-MAIL-FILE-FORMAT-WARNINGS* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

1;;Added for Release 3 -- 9/86 slm*
(DEFINE-PROFILE-VARIABLE ZWEI::*DONT-REPLY-TO* (:MAIL)
  :CVV-TYPE :LIST)
  
(DEFINE-PROFILE-VARIABLE ZWEI::*IN-REPLY-TO-TEMPLATE* (:MAIL)
  :CVV-TYPE :LIST)

(DEFINE-PROFILE-VARIABLE ZWEI::*UPCASE-MESSAGE-KEYWORDS-P* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE ZWEI::*BOX-SUMMARY-LINES* (:MAIL)
  :CVV-TYPE :T-OR-NIL)

;1;;Removed Set-Effect in Profile 2.6*

(DEFINE-PROFILE-VARIABLE ZWEI::*KILL-MAIL-BUFFERS-AT-LOGOUT-P* (:MAIL)
  :CVV-TYPE :T-OR-NIL) 

(DEFINE-PROFILE-VARIABLE ZWEI::*MAIL-TEMPLATE*  (:MAIL)
  :CVV-TYPE (:MENU 'ZWEI::*MAIL-TEMPLATE-LIST*))

(DEFINE-PROFILE-VARIABLE ZWEI::*REPLY-TEMPLATE*  (:MAIL)
  :CVV-TYPE (:MENU 'ZWEI::*MAIL-TEMPLATE-LIST*))

(DEFINE-PROFILE-VARIABLE ZWEI::*REPLY-TEMPLATE-1*  (:MAIL)
  :CVV-TYPE (:MENU 'ZWEI::*MAIL-TEMPLATE-LIST*))

(DEFINE-PROFILE-VARIABLE ZWEI::*REPLY-TO-SENDER-TEMPLATE*  (:MAIL)
  :CVV-TYPE (:MENU 'ZWEI::*MAIL-TEMPLATE-LIST*))

(DEFINE-PROFILE-VARIABLE ZWEI::*REPLY-TO-ALL-TEMPLATE*  (:MAIL)
  :CVV-TYPE (:MENU 'ZWEI::*MAIL-TEMPLATE-LIST*))

(DEFINE-PROFILE-VARIABLE ZWEI::*REPLY-TO-ALL-HEADER-TYPES*  (:MAIL)
  :CVV-TYPE :LIST)

(DEFINE-PROFILE-VARIABLE ZWEI::*FORWARD-TEMPLATE*  (:MAIL)
  :CVV-TYPE (:MENU 'ZWEI::*MAIL-TEMPLATE-LIST*))

(DEFINE-PROFILE-VARIABLE ZWEI::*RESEND-TEMPLATE*  (:MAIL)
  :CVV-TYPE (:MENU 'ZWEI::*MAIL-TEMPLATE-LIST*))


1;;;======================
;;;   INSPECTOR VARIABLES
;;;======================

;;;   Added for Release 3 -- 9/86 slm*

(DEFINE-PROFILE-VARIABLE TV::*INSPECTOR-CONFIGURATION* (:DISPLAY :IMPORTANT)
  :CVV-TYPE (:CHOOSE '(:THREE-PANES :ONE-PANE :TWO-HORIZONTAL-PANES :TWO-VERTICAL-PANES)))

(DEFINE-PROFILE-VARIABLE TV::*INSPECTOR-FONT-MAP* (:DISPLAY)
  :CVV-TYPE :FONT-LIST
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    `(PROFILE-SETQ ,VAR (LOOP FOR FONT-ID IN (quote ,(LOOP FOR ID IN TV::*INSPECTOR-FONT-MAP*
						    COLLECT (W:FONT-NAME ID)))
			      COLLECT (EVAL FONT-ID)))))

(DEFINE-PROFILE-VARIABLE TV::*FLAVOR-INSPECTOR-CONFIGURATION* (:DISPLAY :IMPORTANT)
  :CVV-TYPE (:CHOOSE '(:THREE-PANES :ONE-PANE :TWO-HORIZONTAL-PANES :TWO-VERTICAL-PANES)))

(DEFINE-PROFILE-VARIABLE TV::*INSPECT-PDL-SAFE* (:DISPLAY :IMPORTANT)	   ;jlm 5/8/89
  :CVV-TYPE  :T-OR-NIL
  :DOCUMENTATION
  "This variable controls the ability to look beyond the PDL pointer if inspecting a PDL.
T - do not allow looking beyond the PDL POINTER , NIL - O.K. to look beyond.
*WARNING* - Looking beyond the PDL Pointer may result in a machine crash!")

1;;;===================
;;;   GC VARIABLES
;;;===================*

(DEFINE-PROFILE-VARIABLE SYS:*ADAPTIVE-TRAINING-ON-AT-LOGIN?* (:GC)
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE SYS:*GC-NOTIFICATIONS* (:GC)
  :DOCUMENTATION "Determines which automatic and batch GC actions will attempt to output messages to the user.
T - notify for all, NIL - suppress all, :BATCH-ONLY - batch-style collections only."
  :CVV-TYPE (:CHOOSE '(T NIL :BATCH-ONLY)))


(DEFINE-PROFILE-VARIABLE SYS:GC-REPORT-STREAM (:GC)
  :DOCUMENTATION "Controls where the GC messges are output.  T - output as pop-up notifications, 
NIL - suppress all messages, <stream> - output messages to the designated stream."
  :CVV-TYPE :ANY
  :SET-EFFECT (IF (OR (NULL SYS:GC-REPORT-STREAM) (EQ T SYS:GC-REPORT-STREAM)
		      (STREAMP SYS:GC-REPORT-STREAM))
		 SYS:GC-REPORT-STREAM
		 (TV:NOTIFY
		   NIL
		   "The value is not T, NIL, or a stream.  
SYS:GC-REPORT-STREAM has been set to T.")
		 (SETQ SYS:GC-REPORT-STREAM T)))

(DEFINE-PROFILE-VARIABLE SYS:*GC-DAEMON-NOTIFICATIONS* (:GC)
  :DOCUMENTATION "Determines whether or not messages about low address space or low swap space will be sent
to a pop-up window.  NIL means no message should be given."
  :CVV-TYPE :T-OR-NIL)

(DEFINE-PROFILE-VARIABLE SYS:GC-DAEMON-REPORT-STREAM (:GC)
  :DOCUMENTATION "Controls where the low address space or low swap space messages are output.  T - output to
a pop-up notification window, NIL - suppress all messages, <stream> - output to the designated stream."
  :CVV-TYPE :ANY
  :SET-EFFECT (IF (OR (NULL SYS:GC-DAEMON-REPORT-STREAM) (EQ T SYS:GC-DAEMON-REPORT-STREAM)
		      (STREAMP SYS:GC-DAEMON-REPORT-STREAM))
		 SYS:GC-DAEMON-REPORT-STREAM
		 (TV:NOTIFY
		   NIL
		   "The value is not T, NIL, or a stream.  
SYS:GC-DAEMON-REPORT-STREAM has been set to T.")
		 (SETQ SYS:GC-DAEMON-REPORT-STREAM T)))

(DEFINE-PROFILE-VARIABLE GC-ON-OR-OFF (:GC)
  :DECLARE-SPECIAL-P T
  :DOCUMENTATION "The Profile variable that tells whether the functions (GC-ON) or (GC-OFF) 
should be run at login.  :DEFAULT means leave GC as is."
  :CVV-TYPE (:CHOOSE '(:ON :OFF :DEFAULT))
  :VARIABLE-INIT :DEFAULT
  :GET-VALUE (PROGN (CASE GC-ON-OR-OFF
		      (:ON (GC-ON))
		      (:OFF (GC-OFF))
		      (:DEFAULT))
		    GC-ON-OR-OFF)
  :SET-EFFECT (PROGN (CASE GC-ON-OR-OFF
		       (:ON (GC-ON))
		       (:OFF (GC-OFF))
		       (:DEFAULT))
		     GC-ON-OR-OFF)
  :FORM-FOR-INIT-FILE
  (LAMBDA (VAR)
    (WHEN (NEQ GC-ON-OR-OFF :DEFAULT)
      `(PROGN (PROFILE-SETQ ,VAR ,GC-ON-OR-OFF)))))

(DEFINE-PROFILE-VARIABLE SYS:*GC-MAX-INCREMENTAL-GENERATION* (:GC)
  :CVV-TYPE (:TEST 'INTEGERP)
  :SET-EFFECT (IF (AND (>= SYS:*GC-MAX-INCREMENTAL-GENERATION* 0)
		       (<= SYS:*GC-MAX-INCREMENTAL-GENERATION* 3))
		  SYS:*GC-MAX-INCREMENTAL-GENERATION*
		  (TV:NOTIFY
		    NIL
		    "The value is not in the range of integers from 0 to 3.
SYS:*GC-MAX-INCREMENTAL-GENERATION* has been set to 1.")
		  (SETQ SYS:*GC-MAX-INCREMENTAL-GENERATION* 1)))




1;;;===================
;;;   COLOR VARIABLES
;;;===================*
;;;All color variables and color support added for Profile 3.2    slm 9/87
;;color stuff reworked 12/17/87  -dlc (via slm)

(define-profile-variable tv:*default-label-foreground* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-label-foreground*) 
       (PROFILE-SETQ ,var ,tv:*default-label-foreground*))))

(define-profile-variable tv:*default-label-background* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-label-background*)
       (PROFILE-SETQ ,var ,tv:*default-label-background*))))

(define-profile-variable tv:*default-foreground* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-foreground*)
       (PROFILE-SETQ ,var ,tv:*default-foreground*))))

(define-profile-variable tv:*default-background* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-background*)
       (PROFILE-SETQ ,var ,tv:*default-background*))))

(define-profile-variable tv:*default-border-color* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-border-color*)
       (PROFILE-SETQ ,var ,tv:*default-border-color*))))

(define-profile-variable tv:*default-menu-foreground* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-menu-foreground*)
       (PROFILE-SETQ ,var ,tv:*default-menu-foreground*))))

(define-profile-variable tv:*default-menu-background* (:color)
  :cvv-type :color
  :set-effect nil
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-menu-background*)
       (PROFILE-SETQ ,var ,tv:*default-menu-background*))))

(define-profile-variable tv:*default-menu-label-foreground* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-menu-label-foreground*)
       (PROFILE-SETQ ,var ,tv:*default-menu-label-foreground*))))

(define-profile-variable tv:*default-menu-label-background* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-menu-label-background*)
			(PROFILE-SETQ ,var ,tv:*default-menu-label-background*))))

(define-profile-variable tv:*default-status-foreground* (:color)
  :cvv-type :color
  :set-effect
  (tv:map-over-sheet #'(lambda (w)
			 (unless (eq w tv:who-line-documentation-window)
			   (send w :set-foreground-color tv:*default-status-foreground*)
			   (send w :refresh)))
		     tv:who-line-screen)
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-status-foreground*)
       (PROFILE-SETQ ,var ,tv:*default-status-foreground*))))

(define-profile-variable tv:*default-status-background* (:color)
  :cvv-type :color
  :set-effect
  (tv:map-over-sheet #'(lambda (w)
			 (unless (eq w tv:who-line-documentation-window)
			   (send w :set-background-color tv:*default-status-background*)
			   (send w :refresh)))
		     tv:who-line-screen)
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-status-background*)
       (PROFILE-SETQ ,var ,tv:*default-status-background*))))

(define-profile-variable tv:*default-documentation-foreground* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-documentation-foreground*)
       (PROFILE-SETQ ,var ,tv:*default-documentation-foreground*))))

(define-profile-variable tv:*default-documentation-background* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP TV:*default-documentation-background*)
       (PROFILE-SETQ ,var ,tv:*default-documentation-background*))))

(define-profile-variable tv:*default-scroll-bar-color* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP tv:*default-scroll-bar-color*)
       (PROFILE-SETQ ,var ,tv:*default-scroll-bar-color*))))

(define-profile-variable tv:*default-blinker-offset* (:color)
  :cvv-type :color
  :form-for-init-file
  (lambda (var)
    `(WHEN (VARIABLE-BOUNDP tv:*default-blinker-offset*)
       (PROFILE-SETQ ,var ,tv:*default-blinker-offset*))))