Google
 

Trailing-Edge - PDP-10 Archives - mit_emacs_170_teco_1220 - emacs/einit.emacs
There are no other files named einit.emacs in the archive.
!* -*-TECO-*-!
!* [toed.xkl.com]DXX:<EMACS>EINIT.EMACS.275,  5-Apr-96 17:50:09, Edit by ALDERSON!
!* Change naming convention for libraries from FOO.:EJ to FOO.ELIB on Tops-20!

!~Filename~:! !Macros for installing a new EMACS.!
EINIT
!? Generate EMACS:! !? Create EMACS :EJ file from sources.
Compresses the source files that need compression, then concatenates the
COMPRS files and purifies, writing the result out as EMACS;[PURE] > (on ITS)
or EMACS:EMACS.ELIB (on Tops-20).!

    1,m.m &_File_PURIFY_Loaded+1"G !* Load PURIFY if not loaded already.!
      m(m.m Load_Library)EMACS;PURIFY'
    fs osteco"e
      m(m.mGenerate_Library) EMACS;DSK:[PURE]_> EMACS1;DOC  USRCOM  !*
! 		 ^R BASE  WRDLST  INDENT  SEARCH  FILES  !*
!		 SUPPRT  ISEARC  WINDOW  BUFFER  CRL  VARS 
      m(m.mGenerate_Library) EMACS;DSK:[PRFY]_> EMACS1;PURIFY  CCL
      m(m.m Generate_Library) EMACS;DSK:EINIT EMACS1;EINIT '
    "#
      m(m.mGenerate_Library) EMACS;DSK:EMACS DOC  USRCOM  !*
! 		 ^R BASE  WRDLST  INDENT  SEARCH  FILES  !*
!		 SUPPRT  ISEARC  WINDOW  BUFFER  CRL  VARS 
      m(m.mGenerate_Library) EMACS;PURIFY PURIFY  CCL
      m(m.m Generate_Library) EMACS;DSK:EINIT EINIT '
    
!? Document EMACS:! !? Create EMACS DOC and EMACS CHART.!
    m(m.m Load_Lib)EMACS;ABSTR
    f[b bind f[d file
    m(m.mWall_Chart).X
    fs osteco"e
       ji;NOXGP
	 ;SKIP_1
	 
'
    et EMACS;EMACS_CHART eihpef
    m(m.m Wide_Wall_Chart)
    et EMACS;EMACS_WIDE
    fs osteco"n et EMACS.WIDE-CHART'
    eihpef
    hk
    fs osteco"e
       ji;NOXGP
	 ;SKIP_1
	 
'
    m(m.mAbstract_Redefinitions)
    m(m.mAbstract_Library)_CEMACS
    m(m.mAbstract_Library)_CTAGS
    m(m.mAbstract_Library)_CTMACS
    m(m.mAbstract_Library)__SLOWLY
    m(m.mAbstract_Library)_CWORDAB
    m(m.mAbstract_Library)_CPICTURE
    m(m.mAbstract_Library)_CSORT
    m(m.mAbstract_Library)__PAGE
    m(m.mAbstract_Library)__SCRLIN
    m(m.mAbstract_Library)__DELIM
    m(m.mAbstract_Library)_CMODLIN
    m(m.mAbstract_Library)_CABSTR
    m(m.mAbstract_Library)_CPURIFY
    i


    .f[vb
    m(m.m Abstract_Variables)
    f]vb

    et EMACS;EMACS_NDOC eihpef
    1:< ed EMACS_ODOC>
    1:< en EMACS_DOC EMACS_ODOC>
    en EMACS_NDOC EMACS_DOC
    
!& Load Default Environment:! !S Create the default environment.
Assuming that the pure files are already loaded
and the "essential" environment is set up, set up the standard
EMACS ^R command definitions, etc.!

    [0 [1 [2

    @:I*| FS:EJPAG-256"E '
	  QEcho_Area_HeightFS ECHO LINES
	  0F[VAR MAC
	  FS SAIL USAIL_Character_Mode
	  FS ^M PRINT UDisplay_Overprinting
	  
	| FS TTY MACRO		    !* Must not be a pure string or use M.M.!

    M.M &_Toplevel_^R U..L	    !* Put a macro to handle G in ..L!
    M.M &_Secretary_Macro U..F	    !* ..F is nonzero when we aren't in an "inner ^R mode",!
				    !* but it isn't used unless FS ^R MDLY$ is positive.!
    Q..FU.F			    !* Switching buffers, files or windows OK iff Q.F = Q..F.!
    M.M &_Real-time_Interrupt FS CLK MACRO

    M.M &_Recursive_^R_Set_Mode FS ^R ENTER

    M.M ^R_Backwards_Kill_Characters FS RUB MACRO
    -1UDisplay_Matching_Paren

    :IR :,.F		    !* MR returns the region as two numbers.!

    201.@FS ^R InitU1  255U0
    400.+A @FS ^R InitU2
    256< %0W			    !* Make all unassigned Meta characters into errors.!
         Q0#Q2"E Q1U0'
	 >
    Q1U.T
    Q2U..I Q2U...L		    !* A few meta chars should self-insert.!
    Q2U..._

    M.M SAIL_Character_Mode U.B	    !* Control-Alpha !

    FS ^R INIT UH
    M.M ^R_Indent_According_to_Mode UI
    M.M ^R_Indent_New_Line UJ
    M.M ^R_Indent_New_Comment_Line U..J Q..J U..J    
    M.M ^R_CRLF UM

    M.M ^R_Set/Pop_Mark U.@
    341.@FS^R INIT&777777.-40000000. U._ !* C-Space indirects to C-@.!
    M.M ^R_Replace_String U.%
    M.M ^R_Query_Replace U..%
    M.M ^R_Find_Tag U...
    M.M ^R_Indent_For_Comment U.; Q.; U..;
    M.M ^R_Kill_Comment U...;
    M.M ^R_Mark_Beginning U.<
    M.M ^R_Goto_Beginning U..<
    M.M What_Cursor_Position U.=
    M.M ^R_Count_Lines_Region U..=
    M.M ^R_Mark_End U.>
    M.M ^R_Goto_End U..>

    M.M ^R_Describe U..? Q..?U../
    M.M ^R_Documentation F(U...? )FS HELPMAC
    M.M ^R_Kill_Line U.K
    M.M ^R_New_Window U.L
    M.M ^R_Down_Real_Line U.N
    M.M ^R_Down_Comment_Line U..N
    M.M ^R_Up_Real_Line U.P
    M.M ^R_Up_Comment_Line U..P
    M.M ^R_Quoted_Insert U.Q
    M.M ^R_Reverse_Search  U.R
    M.M ^R_Move_To_Screen_Edge U..R
    M.M ^R_Reposition_Window U...R
    M.M ^R_Incremental_Search U.S
    M.M ^R_Transpose_Characters U.T
    M.M ^R_Universal_Argument U.U
    M.M ^R_Next_Screen U.V
    M.M ^R_Previous_Screen U..V
    M.M ^R_Scroll_Other_Window U...V
    M.M ^R_Kill_Region U.W
    M.M ^R_Copy_Region U..W
    M.M ^R_Append_Next_Kill U...W
    M.M ^R_Extended_Command U..X
    M.M ^R_Instant_Extended_Command U...X
    M.M ^R_Un-Kill U.Y
    M.M ^R_Un-Kill_Pop U..Y
    M.M ^R_Return_To_Superior U.Z
    M.M ^R_Prefix_Meta U
    33. FS ^R INIT U. Q. U...C
    M.M ^R_Execute_Mini U..
    433.^ FS ^R INIT U...
    M.M ^R_Prefix_Meta U.\
    M.M ^R_Prefix_Control U.^
    M.M ^R_Prefix_Control-Meta U.C
    M.M Abort_Recursive_Edit U.]
    M.M ^R_Buffer_Not_Modified U..~

!* NOT EXACTLY WORD, NOT EXACTLY LIST COMMANDS!

    M.M ^R_Back_to_Indentation U..M Q..M U...M
    Q..M F( U..M ) U...M
    M.M ^R_Delete_Horizontal_Space U..\
    M.M ^R_Indent_Region U...\
    M.M ^R_Split_Line U...O

!* LOAD THE WORD COMMANDS!

    M.M ^R_Change_Font_Word U..#
    M.M ^R_Correct_Word_Spelling U..$
    M.M ^R_Upcase_Digit U..'
    M.M ^R_Mark_Word U..@
    M.M ^R_Backward_Sentence U..A
    M.M ^R_Backward_Word U..B
    M.M ^R_Uppercase_Initial U..C
    M.M ^R_Kill_Word U..D
    M.M ^R_Forward_Sentence U..E
    M.M ^R_Forward_Word U..F
    M.M ^R_Fill_Region U..G
    M.M ^R_Mark_Paragraph U..H
    M.M ^R_Tab_to_Tab_Stop U..I
    M.M ^R_Kill_Sentence U..K
    M.M ^R_Lowercase_Word U..L
    M.M ^R_Fill_Paragraph U..Q
    M.M ^R_Center_Line U..S
    M.M ^R_Transpose_Words U..T
    M.M ^R_Uppercase_Word U..U
    M.M ^R_Backward_Paragraph U..[
    M.M ^R_Forward_Paragraph U..]
    M.M ^R_Delete_Indentation U..^
    M.M ^R_Underline_Word U.._
    M.M ^R_Backward_Kill_Word U..

!* LOAD THE LIST COMMANDS!

    M.M ^R_Make_() U..(
    M.M ^R_Move_Over_) U..)
    M.M ^R_Backward_Up_List U...( Q...( U...U
    M.M ^R_Forward_Up_List U...)
    M.M ^R_Mark_Sexp U...@
    M.M ^R_Backward_Sexp U...B
    M.M ^R_Down_List U...D
    M.M ^R_Forward_Sexp U...F
    M.M ^R_Format_Code U...G
    M.M ^R_Mark_Defun U...H Q...H U...H
    M.M ^R_Indent_for_Lisp U...I Q...I U...I
    M.M ^R_Kill_Sexp U...K
    M.M ^R_Forward_List U...N
    M.M ^R_Backward_List U...P
    M.M ^R_Indent_Sexp U...Q
    M.M ^R_Transpose_Sexps U...T
    M.M ^R_Beginning_of_Defun U...[ Q...[ U...A
    M.M ^R_End_of_Defun U...] Q...] U...E
    M.M ^R_Delete_Indentation U...^
    M.M ^R_Backward_Kill_Sexp U...

    128M(M.M MAKE_PREFIX).X U.X
    :IPrefix_Char_List Control-X__Q.X


    M.M List_Buffers U:.X()
    M.M ^R_Return_to_Superior U:.X()
    M.M ^R_Directory_Display U:.X()
    M.M Find_File U:.X()
    M.M ^R_Indent_Rigidly U:.X(9)  !* ^X Tab.!
    M.M ^R_Lowercase_Region U:.X(
)
    M.M ^R_Set_Goal_Column U:.X()
    M.M ^R_Delete_Blank_Lines U:.X()
    M.M ^R_Mark_Page U:.X()
    M.M ^R_Set_File_Read-Only U:.X()
    M.M ^R_Visit_File U:.X()
    M.M ^R_Save_File U:.X()
    M.M ^R_Transpose_Lines U:.X()
    M.M ^R_Uppercase_Region U:.X()
    M.M ^R_Visit_File U:.X()
    M.M Write_File U:.X()
    M.M ^R_Exchange_Point_And_Mark U:.X()
    M.M ^R_Re-execute_Mini U:.X()
    M.M ^R_Change_Font_Region U:.X(#)
    M.M ^R_Start_Kbd_Macro U:.X(()
    M.M ^R_Set_Fill_Prefix U:.X(.)
    M.M ^R_One_Window U:.X(1)
    M.M ^R_Two_Windows U:.X(2)
    M.M ^R_View_Two_Windows U:.X(3)
    M.M ^R_Visit_in_Other_Window U:.X(4)
    M.M ^R_Set_Comment_Column U:.X(;)
    M.M What_Cursor_Position U:.X(=)
    M.M ^R_Append_to_Buffer U:.X(A)
    M.M Select_Buffer U:.X(B)
    M.M ^R_DIRED U:.X(D)
    M.M ^R_Set_Fill_Column U:.X(F)
    M.M ^R_Get_Q-reg U:.X(G)
    M.M ^R_Mark_Whole_Buffer U:.X(H)
    M.M ^R_Info U:.X(I)
    M.M Kill_Buffer U:.X(K)
    M.M ^R_Count_Lines_Page U:.X(L)
    M.M Send_Mail U:.X(M)
    M.M ^R_Narrow_Bounds_to_Region U:.X(N)
    M.M ^R_Other_Window U:.X(O)
    M.M ^R_Narrow_Bounds_to_Page U:.X(P)
    M.M Read_Mail U:.X(R)
    M.M ^R_Transpose_Regions U:.X(T)
    M.M ^R_Widen_Bounds U:.X(W)
    M.M ^R_Put_Q-reg U:.X(X)
    M.M ^R_Previous_Page U:.X([)
    M.M ^R_Next_Page U:.X(])
    M.M ^R_Grow_Window U:.X(^)
    M.M ^R_Underline_Region U:.X(_)
    M.M ^R_Backward_Kill_Sentence U:.X(127)

!* Make TWENEX changes!
fs osteco"n
    M.M ^R_Prefix_Control-Meta U.Z
    33. FS ^R INIT U...Z
    M.M ^R_Return_To_Superior U:.X()
    37. FS HELP CHARW
    M.M ^R_Exit_to_Exec U.C	    !* Make self-documentation!
    632. @FS ^R INIT U...C
    0U:.X()			    !* not confuse users!
    '

    1FS TTMODEW
    1FS ^R SCANW
    1FS ^R ECHOW
    1FS RUB CRLFW		    !* ^D AND RUBOUT TREAT CRLF AS ONE CHARACTER.!
    M.M ^R_Auto-fill_Space FS ^R ECSD

    :I..J EMACS_		    !* Set up ..J so that & Set Mode Line will correct it.!
    :I*EMACS M.V Editor_Name	    !* Name of this editor.  For ..J hackery!

!*** Speed up calls to certain subroutines by putting them in ..Q!
    M.M &_Find_Buffer M.V MM_&_Find_Buffer
    M.M &_Find_File M.V MM_&_Find_File
    M.M &_Get_Library_Pointer M.V MM_&_Get_Library_Pointer
    M.M &_Kill_Text M.V MM_&_Kill_Text
    M.M &_Matching_Paren M.V MM_&_Matching_Paren
    M.M &_Process_File_Options M.V MM_&_Process_File_Options
    M.M &_Read_Line M.V MM_&_Read_Line
    M.M &_Set_Mode_Line M.V MM_&_Set_Mode_Line
    M.M Load_Library M.V MM_Load_Library

!*** Now redo putting various functions in obscure places.!
!*** This duplicates what & Load Essential Environment does.!
!*** The reason is that these functions may be in the patch file,!
!*** in which case the patched versions must be installed.!

    M.M &_Autoload U.A
    M.M &_Set_Variable_Comment U.C
    M.M &_Prepare_For_Input U.I
    M.M Make_Local_Variable U.L
    M.M &_Macro_Execute UM
    M.M &_Macro_GetU.M
    M.M &_Prefix_Character_DriverU.P
    M.M &_Make_Variable U.V

    M.M &_Set_Mode_Line FS MODE MAC
    M.M &_Default_FS_Superior FS SUPERIOR

    M.M &_F^K_Hook U*F_Hook*
    M.M &_Subset_Directory_Listing UDirectory_Lister
    m.m &_Standard_Lisp_Indentation_Hook m.v Lisp_Indentation_Hook
    m.m &_Standard_Lisp_PROG_Hook m.v Lisp_PROG_Indent

!*** NOW SET UP EMACS'S ERROR HANDLER.  SAVE IT FOR LAST, SINCE IF THERE IS AN ERROR!
!*** AFTER SETTING IT UP, AND NOT ALL THE REST OF EMACS IS THERE, IT IS A SCREW.!
    M.M &_Error_Handler U..P
    
!& Load Essential Environment:! !S Does what's needed for EMACS macros to work at all.
A given environment (such as EMACS, TME, etc.) may set up
other variables, and redefine ^R characters.  That is all optional.
But code may fail to work if these variables are missing.!

    5FS Q VECTOR U..Q
    3U:..Q(0)			    !* We use 3 words per variable.!

    1FS S ERROR		    !* Searches inside iterations can still fail.!
    -1FS^I DISABLE		    !* Tab is a no-op.!
    1FS _ DISABLE		    !* Don't allow backarrow.!
    -1FSFNAM SYNTAX		    !* FN2s default to ">'!
    -1FS ECHO FLUSH
    1FS ^L INSERT		    !* @Y should not discard ^L's.!
    1FS VAR MAC

    0U.H			    !* No goal for ^P, ^N known.!
    :i.w			    !* Not in Atom Word Mode.!

    10*5 FS Q VECTOR U..K	    !* Set up ..K, the kill vector.!
    Q..K[..O J 5D ]..O
    -1U0 9< 0U:..K(%0) >

    5*5 FS Q VECTOR U..U	    !* Set up ..U, the Undo info vector.  See Undo for doc.!
    0U:..U(0) 10000000U:..U(2)	    !* Set it up so Undo will complain.!

    6*8 FS Q VECTOR U.N	    !* Set up .N as qvector 8 words long, with 1 word gap.!
    [..O Q.NU..O J 5D ]..O
    :I*[1 -1[2
    FQ.N/5< Q1 U:.N(%2)>	    !* Fill all words with null strings.!

!* If not in Lisp mode, don't do Lisp syntax hair, but do treat [,] and {,} as parens.!
    !"! 1M(M.M &_Alter_..D) [( ]) {( }) |A /A 'A
!* Set up matching openparens for closeparens!
    !"! 2M(M.M &_Alter_..D) ][ )( >< }{    !'!

!* Just for laughs, specify matching closeparens for openparens,
even though nothing in standard EMACS uses the info now.!
    !"!2m(m.m&_Alter_..D) <> () [] {} `' "' "'

    M.M &_Macro_Execute UM
    M.M &_Prepare_For_Input U.I
    M.M &_Prefix_Character_DriverU.P

    M.M &_Autoload U.A
    M.M &_Make_Variable U.V
    M.M &_Set_Variable_Comment U.C

    M.M &_F^K_Hook M.V *F_Hook*

!*** These MM variables are essential!
    M.M &_Check_Top_Level M.V MM_&_Check_Top_Level
    M.M &_Maybe_Push_Point M.V MM_&_Maybe_Push_Point
    M.M &_Maybe_Display_Directory M.V MM_&_Maybe_Display_Directory
    M.M &_Yes_or_No M.V MM_&_Yes_or_No
    M.M Make_Space M.V MM_Make_Space

!* Variables that hide FS flags.!

    500M.C Auto_Save_Interval	    ! *_number_of_characters_between_auto-saves!
				     fs^r mdlyw fs^r mcnt 
      500FS ^R MDLYW
    0M.C Bottom_Display_Margin	    ! *_Don't_let_cursor_be_in_this_percent_of_screen!
				     FS%BOTTOM 
      0FS%BOTTOM
    1M.C Case_Search		    ! *_1_=>_Searches_ignore_case!
				     FSBOTHCASE 
      1FSBOTHCASE
    40M.C Cursor_Centering_Point   ! *_Center_cursor_this_percentage_down_the_screen!
				     FS % CENTER 
      40FS %CENTER
    0M.C Display_Mode_Line_Inverse ! *_1_=>_Display_mode_line_in_standout_mode!
				     FS INVMOD 
    0M.C Display_Overprinting	    ! *_1_=>_Try_real_overprinting_on_the_screen!
				     F "'N FS^HPRINW "'N FS^MPRIN 
    3M.C Echo_Area_Height	    ! *_Number_of_lines_in_echo_area!
				     F FS ECHO LINES 
    35M.C End_of_Buffer_Display_Margin ! *_Leave_this_percent_of_screen_blank_at_EOB!
				     FS %END 
      35FS %END
    0M.C Error_Messages_in_Echo_Area ! *_1_=>_display_error_messages_in_echo_area!
				     FS ECHO ERR 
    70M.C Fill_Column		    ! *_Page_width_for_filling_and_grinding!
				      FS ADLINE 
      70FS Adline
    0M.C Overwrite_Mode	    ! *_Overwrite_Mode_status_(see_M-X_Overwrite_Mode)!
				     1FS MODE CHW FS ^R REPLACE 
    0M.C SAIL_Character_Mode	    ! *_1_=>_Display_chars_0-37_as_SAIL_graphics!
				     F FS SAIL 
    FS OSTECO"N
      0M.C System_Output_Holding   ! *_1_=>_let_system_handle_C-S_and_C-Q!
				     FS TTY PAGE '
    0M.C Top_Display_Margin	    ! *_Don't_let_cursor_be_in_this_percent_of_screen!
				     FS%TOP 
      0FS%TOP

!* Other user-interesting variables.!

    0M.V Abort_Resumption_Message
    0M.C Atom_Word_Mode	    ! *_1_=>_word_commands_deal_with_LISP_atoms!
				     :I.W "n :I.W@' 1FS MODE CH
    0M.C Auto_Directory_Display    *_1_=>_display_dir_after_writes,_-1_=>_reads_too
    0M.C Auto_Fill_Mode	    ! *_nonzero_=>_Auto_Fill_(break_long_lines_at_margin)!
				     1FS MODE CH
				     32FS ^R INIT U_ "E'
				     M.M^R_Auto-Fill_SpaceU_
    500M.C Auto_Push_Point_Option  *_Searches_moving_this_far_set_mark_at_old_point
    :I*_^@ M.C Auto_Push_Point_Notification *_Searches_setting_mark_type_this
    0M.C Auto_Save_Visited_File    *_1_=>_auto_save_under_visited_filename
    0M.C Autoarg_Mode		    ! *_1_=>_digits_and_Minus_before_control_chars_set_arg!
				     0 FS ^R INIT[2
				     "N M.M ^R_AutoargU2'
				     Q2-Q0"E ' Q2U-
				     Q2U0 Q2U1 Q2U2 Q2U3 Q2U4
				     Q2U5 Q2U6 Q2U7 Q2U8 Q2U9 
    1M.C Case_Replace		    *_1_=>_Replace_commands_preserve_case
    0M.C Comment_Begin		    *_String_for_beginning_new_comments
    32M.C Comment_Column	    *_Column_to_start_comments_in
    0M.C Comment_Start		    *_String_that_indicates_the_start_of_a_comment
    :I*  M.C Comment_End	    *_String_that_ends_comments
    :I*/8+1*8 M.C Comment_Rounding *_Hairy_-_see_code_for_^R_Indent_for_Comment
    :I*FundamentalM.C Default_Major_Mode *_Major_Mode_for_newly_created_buffers
    0M.C Display_Matching_Paren    ! *_Controls_action_of_)_in_showing_the_matching_(!
				     "N M.M &_Matching_Paren' "#0' FS ^R PAREN 
    :I*.?! M.C Fill_Extra_Space_List    *_punctuations_that_need_2_spaces
    :I* M.C Fill_Prefix	    *_String_to_put_before_each_line_when_filling
    0M.C Indent_Tabs_Mode	    ! *_-1_=>_Use_tabs_for_indentation.__0_=>_only_spaces.!
				     "E M.M&_Indent_without_TabsUMM_&_Indent
				          M.M&_Xindent_without_TabsUMM_&_Xindent'
				     M.M&_Indent_with_TabsUMM_&_Indent
				     M.M&_Xindent_with_TabsUMM_&_Xindent 
    0M.C LISP_Indent_Offset	    *_See_^R_Indent_for_LISP
    :I*
 M.C Page_Delimiter	    *_Search_string_for_finding_page_boundaries
    !"! :I*.	_' M.C Paragraph_Delimiter *_Lines_starting_with_these_chars_start_paragraphs
    -1M.C Permit_Unmatched_Paren   *_1_=>_allow_unmatched_),_-1_=>_only_in_Lispish_modes
    0M.C Read_Line_Delay	    Pausing_this_many_1/30_sec_causes_echoing
    5000 M.C Region_Query_Size	    *_Some_commands_need_confirmation_if_region_this_big
    M.C Search_Exit_Char	    *_Char_to_exit_I-search_and_do_nothing_else
    :I* M.V Set_Mode_Line_Hook
    0M.C Space_Indent_Flag	    *_Nonzero_=>_Auto_Fill_indents_new_lines
    :I*________:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______: M.C Tab_Stop_Definitions  *_Tab_stops_for_^R_Tab_to_Tab_Stop
    :I*MEMO  XGP  PRESS  @XGP  UNFASL  OUTPUT  OLREC _ !*
!   M.C Temp_File_FN2_List	    *_Reap_File_deletes_these_FN2s
    !"! 1M.C Visit_File_Save_Old   *_-1_=>_visiting_new_file_saves_old,_0_=>_don't,_1_=>_ask_user

    0 M.V Backtrace_Temp
    0 M.V CRL_Help
    0 M.V CRL_List
    0 M.V CRL_Name_Lister
    0 M.V CRL_Name_Type
    0 M.V CRL_Prefix
    :I..G Q..H"E MDirectory_Lister'
    :I* M.V Editor_Name
    :I* M.V Editor_Type
    :I*Fundamental M.C Mode	    Do_MM_FOO_to_enter_FOO_mode
    :I* M.V Prefix_Char_List
    :I* M.C Submode		    !! 1FS MODE CH 
    M.M &_Subset_Directory_Listing M.C Directory_Lister Macro_to_use_to_list_directories
    15FS Q VECTOR[1 Q1 M.V Search_Default_Ring
      :I:1(0) :I:1(1) :I:1(2) ]1

    M.VMM_&_Indent
    M.VMM_&_XIndent
    -1UIndent_Tabs_Mode

!* Set up variables that control Lisp indentation.!
    @:i*| :i*[1 :fo..Q Lisp_1_Indent "l
	   m.v Lisp_1_Indent ' w |[D

    1 mD *CATCH
    1 mD *THROW
    1 mD CASE
    1 mD CASEQ
    1 mD COMPILER-LET
    2 mD DO
    1 mD DOLIST
    1 mD DOTIMES
    1 mD EVAL-WHEN
    1 mD IOTA
    1 mD LAMBDA
    1 mD LET
    1 mD LET*
    1 mD LET-CLOSED
    1 mD LET-GLOBALLY
    1 mD MULTIPLE-VALUE
    2 mD MULTIPLE-VALUE-BIND
    0 mD PROG1
    0 mD PROG2
    0 mD PROGN
    1 mD SELECT
    1 mD SELECTQ
    0 mD UNWIND-PROTECT
    0 mD WITHOUT-INTERRUPTS

    ]D

    :i* LISP m.v Lisp_Indent_Language 

    m.m &_Standard_Lisp_PROG_Hook m.v Lisp_PROG_Indent

    1m.v Lisp_Indent_DEFanything
    m.m &_Standard_Lisp_Indentation_Hook m.v Lisp_Indentation_Hook

!* Load up a copy of the function to process an EVARS file
so that we can run it, the first time, without loading AUX.!
    :g(m.a AUX&_Process_Init_Vars) m.v MM_&_Process_Init_Vars

!* On ITS, make the LEDEFS table autoload.!

    FS OSTECO"E
      @:I*| M(M.A LEDEFSDefine_LEDEFS)| FS LEDEFS'

!* Just for compatibility... not used for anything.!

    0M.V Inhibit_Write

!* Set up buffer table and related variables.!

    0M.V Next_Bfr_Number
    14!*buflcl!*5 FS Q VECTOR U.B
    14!*buflcl!U:.B(0)			    !* Initialize the entry for the initial buffer.!
    :I*Main U:.B(1!*bufnam!)		    !* Its name is Main.!
    0U:.B(2!*bufvis!)			    !* It contains no file.!
    :I*Fundamental U:.B(3!*bufmod!)	    !* It starts in fundamental mode!
    Q..Z U:.B(4!*bufbuf!)	    !* It is the same one that TECO gave us to start with.!
    0U:.B(5!*buftdf!)		    !* Don't need to init FS DFILE and FS WINDOW slots!
    0U:.B(6!*bufwin!)		    !* Since they are used only when buffer not selected.!
    %Next_Bfr_NumberU:.B(7!*bufnum!)
    0U:.B(8!*bufdat!)
    0U:.B(9!*bufver!)
    0U:.B(10!*bufsav!)		    !* Auto save off.!
    0U:.B(11!*bufsiz!)		    !* Size of text at last read or save = 0.!
    0U:.B(12!*bufnwr!)		    !* Not read-only.!
    128*5 FS B Cons F( FS Cng Buf !* Set up to record changes.!
    )U:.B(13!*bufcng!)

    0M.V Buffer_Filenames
    Q:.B(1) M.V Buffer_Name
    0 M.V Buffer_Index
    Q:.B(1) M.V Previous_Buffer
    Q..Z FS Top Buf		    !* This is the selected EMACS buffer.!

    M.M &_Default_FS_Superior FS SUPERIOR
    M.M Make_Local_Variable U.L
    0M.C Auto_Save_Mode	    ! *_non-0_=>_do_auto_saves!
				     "'NM(M.MAuto_Save_Mode) 
    0M.C Auto_Save_All_Buffers	    *_non-0_=>_auto_save_all_buffers,_not_just_selected_one
    0M.C Auto_Save_Default	    ! *_non-0_=>_by_default_use_auto_save!
				     1FS MODE CH 
    FS OSTECO"E :I*DSK:__SAV00 M.C Auto_Save_Filenames   *_Filename_for_Auto_Save_files'
    "# :I*[SAVE].. M.C Auto_Save_Filenames   *_Filename_for_Auto_Save_files'
    2M.C Auto_Save_Max		    *_#_of_saves_to_keep
    M.L Auto_Save_Count
    1M.V Initial_Local_Count	    !* This is the number of M.L's above!

!* This must wait till last, because it won't work
 until the other stuff is set up.!
    M.M &_Set_Mode_Line FS MODE MAC	    !* Say what to do about updating ..J!
    1FS MODE CHANGE		    !* and ask that it be done eventually.!
    
!Purify Variables:! !C Make var names in symtab pure.
For each symbol, sees whether there is a pure string for
its name, and if so makes the sym tab point at that pure string.!

    [1 [2 [3
    m.m &&_Variable_Name_Listu2    !* Q2 has pure string before the first var name.!
    < q2+fq2+4u2 -fq2;		    !* Look at each available pure string.!
      :fo..q2u1		    !* Look for a variable with that name.!
      q1"g f~:..q(q1)2"e	    !* If it exists and is an exact match,!
	  q2u:..q(q1)		    !* stick the pure string in as the variable name.!
	  q2+fq2+4u3		    !* See if the next pure string matches that var's comment.!
	  q:..q(q1+2)"n
	    f~:..q(q1+2)3"e    !* If so, purify the comment too.!
	      q3u:..q(q1+2)'''
	  !* Now, purify anything in .B which matches this string.!
	  0u3
	  fq.b/5< fq:.b(q3)"g f~:.b(q3)2"e
				q2u:.b(q3)''
		  %3 >
	  '>
    
!& Load Patches:! !S Load patches (made since [pure] file) before dumping.
Essentially, we do TCompile on each page of the patch file,
whose name is specified as a string argument.!

    f[b bind [0 [1 [2
    f[d file et 
    1:< er @y>"l '		    !* Read in the patch file.  Exit if there is none.!
    z"e '			    !* Exit fast if it's empty.!
    @f

k			    !* Kill extra CRLF and ^L at front of file.!
    f[:ej page
    m(m.m Load_Library)PURIFY	    !* Otherwise, temporarily load PURIFY!
    < b,.k			    !* kill previous pages!
      m(m.m TCompile)		    !* and compile the next function.!
      :s

; >
    hk