;	EMACS.RC:	Standard micro Startup program
;			for MicroEMACS 3.9d and above
;			(C)opyright 1987 by Daniel M Lawrence
;			Last Update: 10/20/87

set $discmd FALSE
write-message "[Setting up....]"

; If you screen "SNOWS", comment this line
;	set $flicker "FALSE"

; To use an IBM-PC EGA card, uncomment the following line
;	set $sres "EGA"

;	***** Rebind the Function key group

bind-to-key search-forward		FN1
bind-to-key search-reverse		FN2
bind-to-key hunt-forward		FN3
bind-to-key hunt-backward		FN4
bind-to-key execute-macro-1		FN5
bind-to-key execute-macro-2		FN6
bind-to-key next-window			FN7
bind-to-key execute-macro-3		FN8
bind-to-key save-file			FN9
bind-to-key exit-emacs			FN0

bind-to-key execute-macro-10		S-FN1
bind-to-key execute-macro-11		S-FN2
bind-to-key execute-macro-12		S-FN3
bind-to-key execute-macro-13		S-FN4
bind-to-key execute-macro-14		S-FN5
bind-to-key execute-macro-15		S-FN6
bind-to-key execute-macro-16		S-FN7
bind-to-key execute-macro-17		S-FN8
bind-to-key execute-macro-18		S-FN9
bind-to-key execute-macro-19		S-FN0

bind-to-key beginning-of-file		FN^P  ; Ctl-Up
bind-to-key end-of-file			FN^N  ; Ctl-Down
bind-to-key beginning-of-line		FN^B  ; Ctl-Left
bind-to-key end-of-line			FN^F  ; Ctl-Right

bind-to-key move-window-up		S-FN^P
bind-to-key move-window-down		S-FN^N

bind-to-key previous-page		S-FNP ; Shift-Up
bind-to-key next-page			S-FNN ; Shift-Down
bind-to-key previous-word		S-FNB ; Shift-Left
bind-to-key next-word			S-FNF ; Shift-Right

bind-to-key execute-macro-22		FN^>  ; Ctl-Copy: Delete line
bind-to-key execute-macro-23		FNC   ; Insert: Swap insert<>overtype

bind-to-key delete-next-character	FN>   ; Copy
bind-to-key delete-next-character	^?   ; Delete

bind-to-key scroll-next-up		A-FNZ ; Alt-Page Up
bind-to-key scroll-next-down		A-FNV ; Alt-Page Down

bind-to-key execute-named-command	A-X
bind-to-key apropos			A-A

;	Set Default Global modes

add-global-mode "white"
add-global-mode "BLACK"

;	Toggle function key window display
1	store-macro
	!if %rcfkeys
		!goto rcfoff
	!endif

;	toggle function key window on
	save-window
	1 next-window
	!if &sequal $cbufname "EmacsHLP"
		delete-window
	!endif
	!if &not &sequal $cbufname "Function Keys"
		1 split-current-window
		1 select-buffer "Function Keys"
		add-mode "red"
		add-mode "WHITE"
		!force 5 resize-window
		1 goto-line
	!endif
	set %rcfkeys TRUE
	!force restore-window
	!if &sequal $cbufname "Function Keys"
		next-window
	!endif
	write-message "[Function key window ON]"
	!return

	;Toggle the function key window off
*rcfoff
	save-window
	1 next-window
	!if &sequal "Function Keys" $cbufname
		delete-window
	!endif
	!force restore-window
	write-message "[Function key window OFF]"
	set %rcfkeys FALSE
!endm



;	Toggle HELP file onscreen
2 store-macro
	1 next-window

	;Make sure the function key window isn't up!
	!if &sequal $cbufname "Function Keys"
		delete-window
	!endif
	set %rcfkeys FALSE

	;Bring up page 1
	!if &not &seq $cbufname "EmacsHLP"
		help
		8 resize-window
		add-mode "red"
		add-mode "WHITE"
		beginning-of-file
		2 forward-character
	!endif
*rchelp
	write-message "[PgUp/PgDn] Page    [FN6] EXIT     ^G  Exit leaving page on screen"
	update-screen
	set %rctmp &gtcmd
	!if &seq %rctmp FNZ
		beginning-of-line
		!force search-reverse "=>"
		1 redraw-display
		!goto rchelp
	!endif
	!if &seq %rctmp FNV
		beginning-of-line
		2 forward-character
		!force search-forward "=>"
		1 redraw-display
		!goto rchelp
	!endif
	!if &seq %rctmp FN6
		delete-window
		!if &seq %rcfkeys TRUE
			set %rcfkeys FALSE
			execute-macro-1
		!endif
		write-message "[Help Exited]"
		!return
	!endif
	!if &seq %rctmp ^G
		next-window
		set %rcfkeys FALSE
		write-message "[Help Aborted]"
		!return
	!endif
	!goto rchelp
!endm


;	Load a new page
3	store-macro
	!if &seq &find newpage ""
		write-message "[Cannot find NEWPAGE]"
		!return
	!endif
	execute-file newpage
!endm

;procedure to clean out the current page (which is nothing right now)
store-procedure	clean
	; nothing by default
!endm

;	Set up auto CMODE
20	store-macro
	set %rctmp  &length $cfname
	!while &greater %rctmp 0
		!if &seq  "."  &mid $cfname %rctmp 1
			!break
		!endif
		set %rctmp  &sub %rctmp 1
	!endwhile

;	No directory at all...
	!if &less %rctmp 2
		!return
	!endif

	!if &equ %rctmp 2
;		Dir must be "c" or "h"
		set %rctmp &lower &left $cfname 1

		!if &or  &seq "c" %rctmp  &seq "h" %rctmp
			add-mode "cmode"
		!endif
	!else
;		Char befor dir must be "." or ":"
		!if &not &sin   ".:"   &mid $cfname  &sub %rctmp 2  1
			!return
		!endif

;		Dir must be "c" or "h"
		!if &not &sin   "cChH"   &mid $cfname  &sub %rctmp 1  1
			!return
		!endif

		add-mode "cmode"
	!endif

!endm
set $readhook execute-macro-20

;	This function activates the function key window as
;	a legitimate place to call up function keys
21	store-macro

	;remember where we started, and do the mouse movement
	save-window
	mouse-move-down

	;If not in the function key window... leave
	!if &not &sequal $cbufname "Function Keys"
		!return
	!endif

	;Find out what function key were gonna do
	add-mode magic
	2 forward-character
	set %rctmp $search
	!force search-reverse "[fF][0-9]"
	!if &seq $status FALSE
		delete-mode magic
		set $search %rctmp
		!return
	!endif

	;we are on the "f" or "F".  Get the function key type and number now
	set $search %rctmp
	set %fcase lower
	!if &equ $curchar 70
		set %fcase upper
	!endif
	1 forward-character
	set %fnum &chr $curchar
	1 forward-character
	set %fnum &cat %fnum &chr $curchar
	set %fnum &add %fnum 0
	!if &equ %fnum 10
		set %fnum "0"
	!endif
	set %fname &cat "FN" %fnum
	!if &seq %fcase upper
		set %fname &cat "S-" %fname
	!endif

	;save the function
	set %rccmd &bind %fname
	delete-mode MAGIC

	;swallow the up-button
	set %rctmp &gtc

	;restore the window and exit
	restore-window

	;and then execute it
	execute-named-command &ind %rccmd
!endm	
bind-to-key execute-macro-21 MSa

;	Delete a line
22	store-macro
	!if &greater $curcol 0
		beginning-of-line
	!endif
	!force 1 kill-to-end-of-line
!endm

;	Swap insert<>overtype
23	store-macro
	set $cmode &bxor $cmode 32
!endm

;	bring up the function key window

	1 split-current-window
	1 select-buffer "Function Keys"
	insert-string "f1 search-> f2 <-search |    MicroEMACS:  Text Editor~n"
	insert-string "f3 hunt->   f4 <-hunt   | ~n"
	insert-string "f5 fkeys    f6 help     |  Available function key Pages include:~n"
	insert-string "f7 nxt wind f8 pg[    ] |   FORTH WORD BOX EMACS PASCAL C COBOL ~n"
	insert-string "f9 save     f10 exit    |     [use the f8 key to load Pages]    ~n"
	unmark-buffer
	delete-window
	set %rcfkeys TRUE
	execute-macro-1
	set $discmd TRUE

execute-macro-1