[comp.sources.misc] v07i037: CRISP release 1.9 part 16/32

allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (07/23/89)

Posting-number: Volume 7, Issue 37
Submitted-by: fox@marlow.UUCP (Paul Fox)
Archive-name: crisp1.9/part17



#!/bin/sh
# this is part 3 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file src/crisp/hanoi.m continued
#
CurArch=3
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
     exit 1; fi
( read Scheck
  if test "$Scheck" != $CurArch
  then echo "Please unpack part $Scheck next!"
       exit 1;
  else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file src/crisp/hanoi.m"
sed 's/^X//' << 'SHAR_EOF' >> src/crisp/hanoi.m
X		(insert str)
X		(move_abs 0 col)
X	)
X)
SHAR_EOF
echo "File src/crisp/hanoi.m is complete"
chmod 0444 src/crisp/hanoi.m || echo "restore of src/crisp/hanoi.m fails"
mkdir src src/crisp >/dev/null 2>&1
echo "x - extracting src/crisp/help.m (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/crisp/help.m &&
X/********************************************************************
X *                                                                  *
X *      CRISP - Custom Reduced Instruction Set Programmers Editor   *
X *                                                                  *
X *      (C) Paul Fox, 1989                                          *
X *      43, Jerome Close                Tel: +44 6284 4222          *
X *          Marlow                                                  *
X *           Bucks.                                                 *
X *              England SL7 1TX                                     *
X *                                                                  *
X *                                                                  *
X *    Please See COPYRIGHT notice.                                  *
X *                                                                  *
X ********************************************************************/
X;Backups
X;Startup processing
X;Help
X;  Apropos
X;  Bugs
X;	Help on individual key
X;Miscellaneous
X;	Setting up private defaults
X;	Environment Variables
X;	Terminal Tailoring
X;  Amusements
X
X
X
X# include	"crisp.h"
X
X# define	WINDOW_WIDTH	66
X(macro _init
X	(
X		(int		kbd_help 
X					help_level
X					)
X		(list		kbd_labels)
X		(global 	kbd_help 
X					help_level
X					kbd_labels
X					)
X
X		(autoload "kbd_help" "help_describe_keyboard")
X		(keyboard_push)
X		(keyboard_typeables)
X		(= kbd_help (inq_keyboard))
X		(assign_to_key	"^G"	"objects routines")
X		(assign_to_key "<Alt-S>" "search-fwd")
X		(assign_to_key "<PgDn>" "page_down")
X		(assign_to_key "<PgUp>" "page_up")
X		(assign_to_key "<Down>" "down")
X		(assign_to_key "<Up>"   "up")
X		(assign_to_key "<Shift-F5>"	"search_next")
X		(assign_to_key "<Shift-F6>"	"search_prev")
X		(assign_to_key "<Home>"	"home")
X		(assign_to_key	"<End>"	"end")
X		(assign_to_key "<Esc>" (quote_list
X				(
X				(while (> help_level 0) (
X					(-- help_level)
X					(exit)))
X				)))
X		(assign_to_key "<Keypad-minus>" (quote_list
X				(
X					(message "")
X					(-- help_level)
X					(exit)
X				)))
X		(keyboard_pop 1)
X	)
X)
X(macro help
X	(
X		(int	users_kbd)
X
X		(= users_kbd (inq_keyboard))
X
X		(select_list "Help Menu" "" 2 (quote_list
X			"Help"					"help_help"
X			"Command Summary"		"help_command_summary"
X			"Keyboard"				"help_describe_keyboard"
X			"Macros"					"help_macros"
X			"General Concepts"	"help_general_concepts"
X			"Features"				"help_features"
X			"Running CRISP"		"help_running"
X			) 1)
X	)
X)
X(macro help_command_summary
X	(
X		(int		i j
X					len_kbd_labels
X					curbuf
X					curwin
X					tag_buf)
X		(string	key
X					buf
X					msg
X					nl)
X		(= curbuf (inq_buffer))
X		(= curwin (inq_window))
X		
X		(= tag_buf (create_buffer "Command-Summary" NULL 0))
X		(set_buffer tag_buf)
X		(keyboard_push users_kbd)
X		(= nl "")
X
X		(= len_kbd_labels (length_of_list kbd_labels))
X		(message "Generating keyboard summary...")
X		(= i 0)
X		(while (< i 256) (
X				(= key (inq_assignment i))
X				(if (!= key "self_insert") (
X					(insert nl)
X					(= j (- i 128))
X					(if (&& (>= j 0) (< j len_kbd_labels))
X						(insert (nth j kbd_labels))
X					;else
X						(insert (int_to_key i))
X						)
X					(move_abs 0 20)
X					(insert key)
X					(= nl "\n")
X					)
X				)
X				(++ i)
X				)
X			)
X
X		(sort_buffer)
X		(keyboard_pop 1)
X		(message "")
X		(= msg (+ (key_label "<Alt-H>") " - help. "))
X		(+= msg (+ (key_label "<Alt-C>") " - copy to scrap."))
X		
X		(= win (sized_window (+ (inq_lines) 1) (inq_line_length) msg))
X		(select_buffer tag_buf win SEL_NORMAL
X				(
X					(assign_to_key "<Alt-C>" "help_command_summary_copy")
X					(assign_to_key "<Alt-H>" "help_command_summary_help")
X				)
X				NULL 1)
X		(delete_buffer tag_buf)		
X		(set_buffer curbuf)
X		(set_window curwin)		
X		(attach_buffer curbuf)
X	)
X)
X(macro help_command_summary_help
X	(
X		(string cmd arg)
X		(int i)
X		
X		(= cmd (trim (ltrim (read))))
X		(= cmd (ltrim (substr cmd (+ (index cmd ">") 1))))
X
X		/*----------------------------------------
X		/*   Now extract any argument if there is
X		/*   one.
X		/*----------------------------------------*/
X		
X		(if (= i (index cmd " ")) (
X			(= arg (substr cmd (+ i 1)))
X			(= cmd (substr cmd 1 (- i 1)))
X			))
X		(explain cmd)
X	)
X)
X(macro help_command_summary_copy
X	(
X		(save_position)
X		(top_of_buffer)
X		(drop_anchor MK_LINE)
X		(end_of_buffer)
X		(copy)
X		(restore_position)
X		(message "Command summary copied to scrap.")
X	)
X)
X(macro help_running
X	(
X		(select_list "Running CRISP" "" 2 (quote_list
X			"Environment Variables"		"help_display \"env/Env.hlp\" \"Environment Variables\""
X			"Startup Processing"			"help_display \"env/Startup.hlp\" \"Startup Processing\""
X			"Command Line Switches"		"help_display \"env/Switches.hlp\" \"Command Line Switches\""
X			"Directory Tree"				"help_display \"env/Tree.hlp\" \"Directory Layout\""
X			) 1)
X	)
X)
X(macro help_features
X	(
X		(select_list "Features" "" 2 (quote_list
X			"ASCII Chart"			"help_display \"features/Ascii.hlp\" \"ASCII\""
X			"Calculator"			"help_display \"features/Calc.hlp\" \"Calculator\""
X			"Compilation"			"help_display \"features/Compile.hlp\" \"Compiling\""
X			"Current Filename"	"help_display \"features/Filename.hlp\" \"Current Filename\""
X			"GREP"					"help_display \"features/Grep.hlp\" \"GREP\""
X			"List Buffers"			"help_display \"features/Buflist.hlp\" \"List Buffers\""
X			"Mail"					"help_display \"features/Mail.hlp\" \"Mail\""
X			"Options"				"help_display \"features/Options.hlp\" \"Options\""
X			"Programming Features" "help_display \"features/Program.hlp\" \"Compiling\""
X			"Region Manipulation"  "help_display \"features/Region.hlp\" \"Regions\""
X			"Spell"					"help_display \"features/Spell.hlp\" \"Spelling\""
X			"Start a Sub-shell"	"help_display \"features/Shell.hlp\" \"Shells\""
X			"Word Count"			"help_display \"features/Wc.hlp\" \"Word Count\""
X			) 1)
X	)
X)
X(macro help_macros
X	(
X		(select_list "Macros" "" 2 (quote_list
X			"Explain"						"explain"
X			"Primitives"					"help_usage"
X			"Macro Compiler"		"help_display \"lang/Compiler.hlp\" \"Macro Compiler\""
X			"Macro Files"			"help_display \"lang/Macros.hlp\" \"Macro Files\""
X			"Variable Types"		"help_display \"lang/Vars.hlp\" \"Variables\""
X			) 1)
X	)
X)
X(macro help_help
X	(
X		(select_list "Introduction" "" 2 (quote_list
X			"Introduction"					"help_display \"Intro.hlp\" \"Introduction to Help\""
X			"How to use Help"				"help_display \"How.hlp\" \"How to Use Help\""
X			"Prompt Line editing"		"help_display \"Prompt.hlp\" \"Prompt Line\""
X			"Abbreviations"				"help_display \"Abbrev.hlp\" \"Abbreviations\""
X			"Known Bugs"					""
X			) 1)
X	)
X)
X(macro	help_usage
X	(
X		(select_list "Macro Usage" "" 2 (quote_list
X			"Arithmetic Ops"			"help_section \"Arith\""
X			"Buffers"					"help_section \"Buffer\""
X			"Debugging"					"help_section \"Debug\""
X			"Environment"				"help_section \"Env\""
X			"Files"						"help_section \"File\""
X			"Keyboard"					"help_section \"Kbd\""
X			"Lists"						"help_section \"List\""
X			"Macro Primitives"		"help_section \"Macro\""
X			"Miscellaneous"			"help_section \"Misc\""
X			"Movement"					"help_section \"Movement\""
X			"Process Management"		"help_section \"Proc\""
X			"Scrap"						"help_section \"Scrap\""
X			"Screen"						"help_section \"Screen\""
X			"Search & Translate"		"help_section \"Search\""
X			"String Manipulation"	"help_section \"String\""
X			"Variable Declaration"  "help_section \"Var\""
X			"Windows"					"help_section \"Window\""
X			) 1)
X	)
X)
X(macro help_section
X	(
X		(string	filename 
X					sec_name
X					cmd)
X		(int		win
X					buf
X					curbuf
X					curwin
X					width
X					ret)
X
X		(= curbuf (inq_buffer))
X		(= curwin (inq_window))
X
X		(get_parm 0 sec_name)
X		(= filename (+ 
X							(+ 
X								(+ (inq_environment "BHELP") "/") 
X									"sections/") sec_name))
X
X		(= buf (create_buffer "Index" filename 1))
X		(set_buffer buf)
X		(= width (+ (inq_line_length) 1))
X		(if (< width 10)
X			(= width 10))
X
X		(= win (sized_window (+ (inq_lines) 1) width message_string))
X		(++ help_level)
X		(= ret (select_buffer buf win SEL_NORMAL
X				(
X					(assign_to_key "<Space>" "help_section_explain")
X					(assign_to_key "<Enter>" "help_section_explain")
X				)
X					NULL 1))
X
X		(= cmd (trim (ltrim (read))))
X		(delete_buffer buf)
X		(set_buffer curbuf)
X		(set_window curwin)		
X		(attach_buffer curbuf)
X		(if (< ret 0)
X			(return))
X		(explain cmd)
X	)
X)
X(macro help_section_explain
X	(
X		(string cmd)
X		(= cmd (trim (ltrim (read))))
X		(explain cmd)
X	)
X)
X(macro explain
X	(
X		(string	filename 
X					sec_name
X					letter
X					cmd
X					bhelp)
X		(int		win
X					buf
X					curbuf
X					curwin
X					width
X					ret)
X
X		(= bhelp (+ (inq_environment "BHELP") "/"))
X
X		(= curbuf (inq_buffer))
X		(= curwin (inq_window))
X		(get_parm 0 cmd "Explain: ")
X		(= cmd (trim (ltrim (compress cmd))))
X		(if (== cmd "") (
X			(message "")
X			(return)))
X
X		(= letter (upper (substr cmd 1 1)))
X		(if (== (index "ABCDEFGHIJKLMNOPQRSTUVWXYZ" letter) 0)
X			(= letter "Misc"))
X		(= filename (+ bhelp (+ "prim/" (+ letter ".cmd"))))
X		(= buf (create_buffer cmd filename 1))
X		(set_buffer buf)
X		(if (<= (search_fwd (+ "<.HU " (quote_regexp cmd))) 0) (
X			(error "Sorry, %s not yet available." cmd)
X			(set_buffer curbuf)
X			(delete_buffer buf)
X			(return)))
X
X		(drop_anchor MK_LINE)
X		(top_of_buffer)
X		(delete_block)
X		(if (> (search_fwd "<.HU") 0) (
X			(drop_anchor MK_LINE)
X			(end_of_buffer)
X			(delete_block)
X			(top_of_buffer)
X			))
X		(= win (sized_window (+ (inq_lines) 1) WINDOW_WIDTH ""))
X		(set_window win)
X		(attach_buffer buf)
X		(keyboard_push kbd_help)
X		(tabs 4)
X		(++ help_level)
X		(message "")
X		(process)
X		(keyboard_pop 1)
X
X		(delete_window)
X		(delete_buffer buf)
X		(set_buffer curbuf)
X		(set_window curwin)		
X	)
X)
X(macro help_general_concepts
X	(
X		(select_list "General Concepts" "" 2 (quote_list
X			"Files"					"help_display \"concept/Files.hlp\" \"Files\""
X			"Buffers"				"help_display \"concept/Buffers.hlp\" \"Buffers\""
X			"Windows"				"help_display \"concept/Windows.hlp\" \"Windows\""
X			"Macros"					"help_display \"concept/Macros.hlp\" \"Macros\""
X			"Blocks"					"help_display \"concept/Blocks.hlp\" \"Blocks and Regions\""
X			"Regular Expressions" "help_display \"concept/Regexp.hlp\" \"Regular Expressions\""
X			"Registered Macros"	"help_display \"concept/Register.hlp\" \"Registered Macros\""
X			"Processes"				"help_display \"concept/Proc.hlp\" \"Processes\""
X			) 1)
X	)
X)
X(macro help_display
X	(
X		(string	filename
X					title
X					section)
X		(int	curwin
X				curbuf
X				win
X				line
X				buf)
X
X		(get_parm 0 filename)
X		(get_parm 1 title)
X		(get_parm 2 section)
X		(= filename (+ (+ (inq_environment "BHELP") "/") filename))
X		(= curwin (inq_window))
X		(= curbuf (inq_buffer))
X
X		(= buf (create_buffer title filename 1))
X		(set_buffer buf)
X		(= win (sized_window (+ (inq_lines) 1) WINDOW_WIDTH ""))
X		(set_window win)
X		(attach_buffer buf)
X		(if (!= section "") (
X			(search_fwd (+ "<" (quote_regexp section)))
X			(inq_position line)
X			(set_top_left line)
X			))
X
X		(keyboard_push kbd_help)
X		(++ help_level)
X		(message "Type <Ctrl-G> to see section headings.")
X		(process)
X		(keyboard_pop 1)
X
X		(delete_window)
X		(delete_buffer buf)
X
X		(set_window curwin)
X		(set_buffer curbuf)
X	)
X)
SHAR_EOF
chmod 0444 src/crisp/help.m || echo "restore of src/crisp/help.m fails"
mkdir src src/crisp >/dev/null 2>&1
echo "x - extracting src/crisp/history.m (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/crisp/history.m &&
X/********************************************************************
X *                                                                  *
X *      CRISP - Custom Reduced Instruction Set Programmers Editor   *
X *                                                                  *
X *      (C) Paul Fox, 1989                                          *
X *      43, Jerome Close                Tel: +44 6284 4222          *
X *          Marlow                                                  *
X *           Bucks.                                                 *
X *              England SL7 1TX                                     *
X *                                                                  *
X *                                                                  *
X *    Please See COPYRIGHT notice.                                  *
X *                                                                  *
X ********************************************************************/
X# include	"crisp.h"
X
X(macro _init
X	(
X		(string	hist_last_response)
X		(int		hist_buf
X					hist_no
X					hist_line
X					hist_last_line)
X		(global	hist_last_response
X					hist_line
X					hist_last_line
X					hist_no
X					hist_buf)
X
X		(= hist_buf (create_buffer "History-Buffer" NULL 1))
X		(autoload "abbrev" "abbreviate")
X
X	)
X)
X(macro 	_prompt_begin
X	(
X		(int		curbuf
X					msg_level)
X		(string	curr_msg)
X
X		(= curr_msg (inq_message))
X		(if (index curr_msg ":")
X			(= curr_msg (substr curr_msg 1 (index curr_msg ":"))))
X		(= curbuf (inq_buffer))
X		(set_buffer hist_buf)
X		(= hist_no -1)
X		(top_of_buffer)
X		(= msg_level (inq_msg_level))
X		(set_msg_level 3)
X
X		(if (<= (search_fwd (+ "<### " (+ curr_msg " ###$"))) 0) (
X			(end_of_buffer)
X			(insert (+ "### " (+ curr_msg " ###\n")))
X			(= hist_last_line -1)
X			(inq_position hist_line)
X			(set_buffer curbuf)
X			(set_msg_level msg_level)
X			(return)
X			))
X
X		(down)
X		(inq_position hist_line)
X		(if (<= (search_fwd "<### * ###$") 0) (
X				(= hist_last_line (inq_lines))
X				(-= hist_last_line hist_line)
X				)
X		;else
X			(
X				(inq_position hist_last_line)
X				(-= hist_last_line 2)
X			))
X		(goto_line hist_line)
X		(set_buffer curbuf)
X		(attach_buffer curbuf)
X		(set_msg_level msg_level)
X	)
X)
X(replacement	_bad_key
X	(
X		(string	line
X					)
X		(int		curbuf
X					key_pressed
X					retval)
X
X		(= curbuf (inq_buffer))
X		(= key_pressed (read_char))
X
X		(switch key_pressed
X			(key_to_int "<Up>") (
X					(++ hist_no)
X					)
X			(key_to_int "<Down>") (
X					(-- hist_no)
X					)
X			(key_to_int "<Alt-L>")
X					(return hist_last_response)
X			(key_to_int "<Tab>") (
X					(= line (abbreviate (inq_cmd_line) (inq_message)))
X					(if (!= line "") (
X						(push_back (key_to_int "<End>"))
X						(return line)))
X					(return (inq_cmd_line))
X					)
X			)
X
X
X		(if (|| (== (read 1) "#") (< hist_last_line 0)) (
X			(beep)
X			(return 0)))
X
X
X		(if (< hist_no 0)
X			(= hist_no (- hist_last_line 1)))
X		(if (< hist_no 0) (
X			(beep)
X			(return 0)))
X		(if (>= hist_no hist_last_line)
X			(= hist_no 0))
X		(set_buffer hist_buf)
X		(move_rel hist_no)
X		(= line (trim (read)))
X		(goto_line hist_line)
X
X		(set_buffer curbuf)
X
X		(return line)
X	)
X)
X(macro 	_prompt_end
X	(
X		(int	curbuf line)
X		(string	cmd)
X
X		(if (== (inq_message) "Command cancelled.")
X			(return))
X
X		(= curbuf (inq_buffer))
X		(= cmd (inq_cmd_line))
X		(if (> (strlen cmd) 2)
X			(= hist_last_response cmd))
X		(set_buffer hist_buf)
X		(inq_position line)
X
X		(if (> (strlen cmd) 1) (
X			(insert (+ cmd "\n"))
X			(if (> (search_fwd (+ "<#|{" (+ cmd "$}"))) 0) (
X				(if (!= (read 1) "#")
X					(delete_line))
X				))
X			))
X		(set_buffer curbuf)
X		(attach_buffer curbuf)
X	)
X)
SHAR_EOF
chmod 0444 src/crisp/history.m || echo "restore of src/crisp/history.m fails"
mkdir src src/crisp >/dev/null 2>&1
echo "x - extracting src/crisp/kbd_help.m (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/crisp/kbd_help.m &&
X/********************************************************************
X *                                                                  *
X *      CRISP - Custom Reduced Instruction Set Programmers Editor   *
X *                                                                  *
X *      (C) Paul Fox, 1989                                          *
X *      43, Jerome Close                Tel: +44 6284 4222          *
X *          Marlow                                                  *
X *           Bucks.                                                 *
X *              England SL7 1TX                                     *
X *                                                                  *
X *                                                                  *
X *    Please See COPYRIGHT notice.                                  *
X *                                                                  *
X ********************************************************************/
X# include	"crisp.h"
X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
X; L1 L2  F1  F2 F3    F4    F5    F6    F7    F8 F9 BS   R1  R2  R3
X; L3 L4  ESC 1  2  3  4  5  6  7  8  9  0  -  =  \  `		R4  R5  R6
X; L5 L6  TAB  Q  W  E  R  T  Y  U  I  O  P  [  ]  DEL    R7  ^	  R9
X; L7 L8        A  S  D  F  G  H  J  K  L  ;  ' RETURN    <-  R11 ->
X; L9 L10        Z  X  C  V  B  N  M  ,  .  /       LF    R13 v	  R15
X;                    SPACE                               
X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
X(macro help_describe_keyboard
X	(
X		(int	curbuf
X				curwin
X				buf
X				win
X				)
X		(list	kbd_list)
X
X		(= curbuf (inq_buffer))
X		(= buf (create_buffer "Nice-Keyboard" NULL 1))
X		(set_buffer buf)
X		(switch (inq_environment "BTERM")
X			NULL (
X					(insert "F1 F2  \\  1  2  3  4  5  6  7  8  9  0  -  =  #  <-   ESC  NL   SL  SR\n")
X					(insert "F3 F4  TAB Q  W  E  R  T  Y  U  I  O  P  [  ]  CR      7    8    9  *\n")
X					(insert "F5 F6       A  S  D  F  G  H  J  K  L  ;  '            4    5    6  -\n")
X					(insert "F7 F8        Z  X  C  V  B  N  M  ,  .  /              1    2    3  +\n")
X					(insert "F9 F10            SPACE                                0    .\n")
X					(= kbd_list (quote_list 
X("<F1>" 	"<Shift-F1>" 	"<Ctrl-F1>" 	"<Alt-F1>")
X("<F1>" 	"<Shift-F2>" 	"<Ctrl-F2>" 	"<Alt-F2>")
X("\\"		"~"				""				"N`")
X("1"		"!"				"1"				"<Alt-1>")
X("2"		"@"				""					"<Alt-2>")
X("3"		"#"				"3"				"<Alt-3>")
X("4"		"$"				"4"				"<Alt-4>")
X("5"		"%"				"5"				"<Alt-5>")
X("6"		"\\^"				""				"<Alt-6>")
X("7"		"&"				"7"				"<Alt-7>")
X("8"		"*"				"8"				"<Alt-8>")
X("9"		"("				"9"				"<Alt-9>")
X("0"		")"				"0"				"<Alt-0>")
X("-"		"+"				""				"N-")
X("="		"+"				"="				"N=")
X("\\"		"|"				""				"N\\")
X(""		""				""				"")
X(""		""				""				"")
X(""		""					""					"")
X(""		""					""					"")
X(""		""					""					"")
X("<F3>" 	"<Shift-F3>" 	"<Ctrl-F3>" 	"<Alt-F3>")
X("<F4>" 	"<Shift-F4>" 	"<Ctrl-F4>" 	"<Alt-F4>")
X("\t"		"<Shift-Tab>"	"<Ctrl-Tab>"	"<Alt-Tab>")
X("q"		"Q"				"^Q"				"<Alt-Q>")
X("w"		"W"				"^W"				"<Alt-W>")
X("e"		"E"				"^E"				"<Alt-E>")
X("r"		"R"				"^R"				"<Alt-R>")
X("t"		"T"				"^T"				"<Alt-T>")
X("y"		"Y"				"^Y"				"<Alt-Y>")
X("u"		"U"				"^U"				"<Alt-U>")
X("i"		"I"				"^I"				"<Alt-I>")
X("o"		"O"				"^O"				"<Alt-O>")
X("p"		"P"				"^P"				"<Alt-P>")
X("["		"{"				"^["				"<Alt-[>")
X("]"		"}"				"^]"				"<Alt-]>")
X("<Enter>"	"<Enter>"	"<Ctrl-Enter>"	"<Enter>")
X("<Home>"	"7"			"<Ctrl-Home>"	"<Alt-Home>")
X("<Up>"		"8"			"<Ctrl-Up>"		"<Alt-Up>")
X("<PgUp>"	"9"			"<Ctrl-PgUp>"	"<Alt-PgUp>")
X("<Keypad-*>"	"*"		"*"				"*")
X("<F5>" 	"<Shift-F5>" 	"<Ctrl-F5>" 	"<Alt-F5>")
X("<F6>" 	"<Shift-F6>" 	"<Ctrl-F6>" 	"<Alt-F6>")
X("a"		"A"				"^A"				"<Alt-A>")
X("s"		"S"				"^S"				"<Alt-S>")
X("d"		"D"				"^D"				"<Alt-D>")
X("f"		"F"				"^F"				"<Alt-F>")
X("g"		"G"				"^G"				"<Alt-G>")
X("h"		"H"				"^H"				"<Alt-H>")
X("j"		"J"				"^J"				"<Alt-J>")
X("k"		"K"				"^K"				"<Alt-K>")
X("l"		"L"				"^L"				"<Alt-L>")
X(";"		":"				";"				"N;")
X("'"		"\""				"'"				"N'")
X("<Left>"	"4"			"<Ctrl-Left>"	"<Alt-Left>")
X("O"		"5"				"]"				"O")
X("<Right>"	"6"			"<Ctrl-Right>"	"<Alt-Right>")
X("<Keypad-minus>"	"-"	"V"				"V")
X("<F7>" 	"<Shift-F7>" 	"<Ctrl-F7>" 	"<Alt-F7>")
X("<F8>" 	"<Shift-F8>" 	"<Ctrl-F8>" 	"<Alt-F8>")
X("z"		"Z"				"^Z"				"<Alt-Z>")
X("x"		"X"				"^X"				"<Alt-X>")
X("c"		"C"				"^C"				"<Alt-C>")
X("v"		"V"				"^V"				"<Alt-V>")
X("b"		"B"				"^B"				"<Alt-B>")
X("n"		"N"				"^N"				"<Alt-N>")
X("m"		"M"				"^M"				"<Alt-M>")
X(","		"\\<"				","				"N,")
X("."		">"				"."				"N.")
X("/"		"?"				""				"N/")
X("<End>"	"1"				"<Ctrl-End>"	"<Alt-End>")
X("<Down>"	"2"			"<Ctrl-Down>"	"<Alt-Down>")
X("<PgDn>"	"3"			"<Ctrl-PgDn>"	"<Alt-PgDn>")
X("<Keypad-plus>"	"+"	"U"				"U")
X("<F9>" 	"<Shift-F9>" 	"<Ctrl-F9>" 	"<Alt-F9>")
X("<F10>"	"<Shift-F10>" 	"<Ctrl-F10>" 	"<Alt-F10>")
X(" "		" " 				""				 	" ")
X("<Ins>"		"0"			"X"			"J")
X("<Delete>"	"."			"<Delete>"		"N")
X					))
X					)
X			)
X		(= win (sized_window (inq_lines) (inq_line_length) "Hello"))
X		(select_word buf win)
X
X		(delete_buffer buf)
X		(set_buffer curbuf)
X	)
X)
X(macro select_word
X	(
X		(int		old_buf
X					old_win
X					ass_win
X					ass_buf
X					buf
X					number_of_items
X					selection
X					depth
X					word
X					retval)
X		(list		do_list)
X		(declare	key_list)
X
X		(= old_buf (inq_buffer))
X		(= old_win (inq_window))
X
X		(= word 0)
X
X		(get_parm 0 buf)
X		(get_parm 1 win)
X		(get_parm 3 do_list)
X
X		(set_window win)
X		(set_buffer buf)
X		(attach_buffer buf)
X		(top_of_buffer)
X		(= number_of_items (inq_lines))
X
X		(top_of_buffer)
X		(-- number_of_items)
X
X		(keyboard_push)
X		(keyboard_typeables)
X		(assign_to_key "<Home>"	(quote_list (
X			(= word 0)
X			(top_of_buffer)
X			(mark_word)
X			)))
X		(assign_to_key "<End>"	(quote_list (
X			(= word 30)
X			(mark_word)
X			)))
X		(assign_to_key "<Left>"	(quote_list (
X			(raise_anchor)
X			(default-word_left)
X			(-- word)
X			(mark_word)
X			)))
X		(assign_to_key "<Right>"	(quote_list (
X			(raise_anchor)
X			(default-word_right)
X			(++ word)
X			(mark_word)
X			)))
X		(assign_to_key "<Up>"	(quote_list (
X			(raise_anchor)
X			(up)
X			(default-word_left)
X			(default-word_right)
X			(mark_word)
X			)))
X		(assign_to_key "<Down>"	(quote_list (
X			(raise_anchor)
X			(down)
X			(default-word_left)
X			(default-word_right)
X			(mark_word)
X			)))
X		(assign_to_key	"<Esc>"	(quote_list (
X			(exit)
X			)))
X
X		(assign_to_key "<Space>" "kbd_key_info")
X		(assign_to_key "<Keypad-minus>" "exit")
X		(if (length_of_list do_list)
X			(assign_to_key "<Enter>" "sel_list")
X		;else
X			(assign_to_key "<Enter>" "exit")
X			)
X
X		(get_parm 2 key_list)
X		(register_macro 0 "selw_alpha")
X
X		(= ass_buf (create_buffer "Assignments" NULL 1))
X		(+= top_line 7)
X		(= ass_win (sized_window 5 35 ""))
X		(-= top_line 7)
X		(set_buffer ass_buf)
X		(set_window ass_win)
X		(attach_buffer ass_buf)
X
X		(mark_word)
X		(set_window win)
X		(set_buffer buf)
X		(refresh)
X		(process)
X
X		(unregister_macro 0 "selw_alpha")
X		(raise_anchor)
X		(keyboard_pop)
X
X		(delete_window)
X		(set_window ass_win)
X		(delete_window)
X		(delete_buffer ass_buf)
X		(set_window old_win)
X		(set_buffer old_buf)
X	)
X)
X(macro mark_word
X	(
X		(save_position)
X		(search_fwd "\\c[ \t]|>")
X		(prev_char)
X		(drop_anchor MK_NORMAL)
X		(restore_position)
X		(display_assignment)
X	)
X)
X(macro word_no
X	(
X		(int	word_no
X				cur_line
X				cur_col
X				line
X				col
X				)
X		
X		//
X		//   First calculate which word we are on.
X		//
X		(save_position)
X		(inq_position cur_line cur_col)
X		(top_of_buffer)
X		(= word_no 0)
X		(while (1) (
X			(inq_position line col)
X			(if (> line cur_line)
X				(break))
X			(if (&& (== line cur_line) (== col cur_col))
X				(break))
X			(next_char)
X			(search_fwd "<|[ \t]\\c[~ \t]")
X			(++ word_no)
X			))
X		(restore_position)
X;		(message "word no = %d" word_no)
X		(return word_no)
X	)
X)
X(macro display_assignment
X	(
X		(int	curbuf kbd)
X		(string	key s)
X		(list	key_list)
X
X		(= curbuf (inq_buffer))
X
X		(= key_list (nth word kbd_list))
X		(= kbd (inq_keyboard))
X		(keyboard_push users_kbd)
X		(set_buffer ass_buf)
X		(top_of_buffer)
X		(drop_anchor MK_LINE)
X		(end_of_buffer)
X		(delete_block)
X
X		(insert   "        (")
X		(= s (nth 0 key_list))
X		(if (strlen s)
X			(insert (inq_assignment s)))
X		(insert ")\nSHIFT:  (")
X		(= s (nth 1 key_list))
X		(if (strlen s)
X			(insert (inq_assignment s)))
X		(insert ")\nCTRL:   (")
X		(= s (nth 2 key_list))
X		(if (strlen s)
X			(insert (inq_assignment s)))
X		(insert ")\nALT:    (")
X		(= s (nth 3 key_list))
X		(if (strlen s)
X			(insert (inq_assignment s)))
X		(insert ")\n")
X		(keyboard_pop 1)
X		(top_of_buffer)
X		(refresh)
X		(set_buffer curbuf)
X	)
X)
X
X(macro kbd_key_info
X	(
X		(int	word
X				buf
X				curbuf
X				win
X				kbd)
X		(string	key s)
X		(list	key_list)
X
X		(= word (word_no))
X		(= curbuf (inq_buffer))
X
X		(= ass_buf (create_buffer "Assignments" NULL 1))
X		(set_buffer buf)
X		(= key_list (nth word kbd_list))
X		(= kbd (inq_keyboard))
X		(keyboard_push users_kbd)
X
X		(insert   "        (")
X		(= s (nth 0 key_list))
X		(if (strlen s)
X			(insert (inq_assignment s)))
X		(insert ")\nSHIFT:  (")
X		(= s (nth 1 key_list))
X		(if (strlen s)
X			(insert (inq_assignment s)))
X		(insert ")\nCTRL:   (")
X		(= s (nth 2 key_list))
X		(if (strlen s)
X			(insert (inq_assignment s)))
X		(insert ")\nALT:    (")
X		(= s (nth 3 key_list))
X		(if (strlen s)
X			(insert (inq_assignment s)))
X		(insert ")\n")
X		(keyboard_pop 1)
X
X		(+= top_line 7)
X		(= win (sized_window 5 (inq_line_length) ""))
X		(-= top_line 7)
X		(select_buffer buf win)
X		(set_buffer curbuf)
X	)
X)
SHAR_EOF
chmod 0444 src/crisp/kbd_help.m || echo "restore of src/crisp/kbd_help.m fails"
mkdir src src/crisp >/dev/null 2>&1
echo "x - extracting src/crisp/mail.m (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/crisp/mail.m &&
X/********************************************************************
X *                                                                  *
X *      CRISP - Custom Reduced Instruction Set Programmers Editor   *
X *                                                                  *
X *      (C) Paul Fox, 1989                                          *
X *      43, Jerome Close                Tel: +44 6284 4222          *
X *          Marlow                                                  *
X *           Bucks.                                                 *
X *              England SL7 1TX                                     *
X *                                                                  *
X *                                                                  *
X *    Please See COPYRIGHT notice.                                  *
X *                                                                  *
X ********************************************************************/
X/****************************************************************/
X/*
X/*	Macro to send and receive Unix mail.
X/*
X/* Copyright	(C) 1989, P. Fox
X/*
X/****************************************************************/
X
X# include	"crisp.h"
X
X# define	MAILDIR	"/usr/spool/mail/"	/* BSD (SunOS anyway).	*/
X/*# define	MAILDIR	"/usr/mail/"		/* System V.				*/
X
X(macro _init
X	(
X		(int		mail_mtime
X					mail_rep_buf)
X		(string 	mailfile)
X		(global	mailfile 
X					mail_mtime
X					mail_rep_buf)
X		
X		/*----------------------------------------
X		/*   Work out where mail for this user is
X		/*   stored.
X		/*----------------------------------------*/
X		(= mailfile (inq_environment "MAIL"))
X		(if (== mailfile "")
X			(= mailfile (+ MAILDIR (inq_environment "USER"))))
X		(= mail_rep_buf -1)
X		(= mail_mtime -1)
X		(register_macro REG_IDLE "mail_watch")
X		(mail_watch)
X	)
X)
X(macro mail_watch
X	(
X		(if (mail_changed)
X			(message "There is new mail."))
X	)
X)
X(macro mail_changed
X	(
X		(int	mtime)
X				
X		(file_pattern mailfile)
X		(if (== (find_file NULL NULL mtime) 0) (
X			(= mail_mtime -1)
X			(return FALSE)
X			))
X		(if (!= mtime mail_mtime) (
X			(= mail_mtime mtime)
X			(return TRUE)
X			))
X		(return FALSE)
X	)
X)
X(macro mail
X	(
X		(mail_read)
X	)
X)
X(macro mail_read
X	(
X		(string	from_line
X					subject_line
X					line)
X		(list		who_list)
X		(int		who_len
X					space
X					msg_no
X					line_no
X					last_line_no // Used to calculate message size.
X					curbuf
X					hdrbuf		// Buffer containing header summary
X					mailbuf		// Buffer containing mail file.
X					hdrwin		// Window for pop-up
X					quit_flag	// Set if user aborts mail reading.
X					)
X
X		(= quit_flag FALSE)
X		(= curbuf (inq_buffer))
X		
X		/*----------------------------------------
X		/*   See if there is any mail.
X		/*----------------------------------------*/
X		(if (! (exist mailfile)) (
X			(error "There is no mail for you.")
X			(return)))
X		/*----------------------------------------
X		/*   Build up a list of who the mail is 
X		/*   from.
X		/*----------------------------------------*/
X		(edit_file mailfile)
X		(top_of_buffer)
X		(= mailbuf (inq_buffer))
X		(= hdrbuf (create_buffer "Mail Messages" NULL 1))
X		(= last_line_no 0)
X		
X		(while (> (search_fwd "<From ") 0) (
X			(right 5)
X			(inq_position line_no)
X			(= from_line (trim (read)))
X			(= space (index from_line " "))
X			(= from_line (substr from_line 1 (- space 1)))
X			
X			/*----------------------------------------
X			/*   Get subject line.
X			/*----------------------------------------*/
X			(= subject_line "")
X			(if (> (search_fwd "^{Subject: }|{From }") 0) (
X				(if (== (read 1) "S")
X					(= subject_line (ltrim (trim (substr (read) 10)))))
X				))
X			(if (< (strlen subject_line) 30)
X				(+= subject_line "                                       "))
X			(= subject_line (substr subject_line 1 30))
X			
X			(if (<= (search_fwd "<From ") 0)
X				(end_of_buffer))
X			(= last_line_no line_no)
X			(inq_position line_no)
X			
X			(set_buffer hdrbuf)	
X			(if (!= who_len 0)
X				(insert "\n"))
X			
X			(sprintf line "%d. %s [%4d] %s" (+ who_len 1) subject_line (- line_no last_line_no) from_line)
X			(insert line)
X			(set_buffer mailbuf)
X			(put_nth (* 2 who_len) 			who_list last_line_no)
X			(put_nth (+ (* 2 who_len) 1)  who_list line_no)
X			(++ who_len)
X			))
X		(if (!= who_len 0) (
X			(message "Use <Esc> to exit and save changes; Q to exit.")
X			(= hdrwin (sized_window 
X								(+ who_len 1) 
X								76 
X								"D to delete. W to write. <Alt-H> for help."))
X			(set_buffer curbuf)
X			(attach_buffer curbuf)
X			(select_buffer hdrbuf hdrwin 0
X				(
X					(assign_to_key "d"	"mail_delete")
X					(assign_to_key "D"	"mail_delete")
X					(assign_to_key "s"	"mail_save")
X					(assign_to_key "S"	"mail_save")
X					(assign_to_key "w"	"mail_write")
X					(assign_to_key "W"	"mail_write")
X					(assign_to_key "q"	"mail_quit")
X					(assign_to_key "Q"	"mail_quit")
X					(assign_to_key "<Enter>"	"mail_select")
X				)
X				NULL
X				"help_display \"features/Mail.hlp\" \"Mail\"")
X			/*----------------------------------------
X			/*   Save the unread mail back in the mailbox.			
X			/*----------------------------------------*/
X			(if quit_flag
X				(message "Quit - %s not updated." mailfile)
X			;else
X				(mail_save_unread))
X			)
X		;else
X			(message "There is no mail for you."))
X
X		
X		/*----------------------------------------
X		/*   Take user back to original buffer.
X		/*----------------------------------------*/
X		(set_buffer curbuf)
X		(delete_buffer mailbuf)
X		(attach_buffer curbuf)
X	)
X)
X(macro mail_save_unread
X	(
X		(int	n
X				pos
X				start_line
X				end_line
X				num_saved
X				msg_no)
X
X		(message "Updating %s..." mailfile)		
X		/*----------------------------------------
X		/*   Delete read articles backwards.
X		/*   This is necessary otherwise we have
X		/*   to cater for the fact that the line
X		/*   indexes in the who_list become
X		/*   incorrect as we delete each read
X		/*   article.
X		/*----------------------------------------*/
X		(= n (- who_len 1))
X		(while (>= n 0) (
X			(set_buffer hdrbuf)
X			(goto_line (+ n 1))
X			(= line (read))
X			(= pos (search_string "[.*]" line))
X			(if (&& (> pos 0) (== (substr line pos 1) "*")) (
X				(= msg_no (- (atoi line) 1))
X				(= start_line (nth (* 2 msg_no) who_list))
X				(= end_line (- (nth (+ (* 2 msg_no) 1) who_list) 1))
X				(set_buffer mailbuf)
X				(goto_line start_line)
X				(drop_anchor MK_LINE)
X				(goto_line end_line)
X				(delete_block)
X				)
X			;else
X				(++ num_saved))
X			(-- n)
X			))
X		(set_buffer mailbuf)
X		(if (mail_changed) (
X			(error "Sorry - new mail arrived.")
X			(return)))
X		(if (== num_saved 0)
X			(del mailfile)
X		;else
X			(write_buffer))
X		/*----------------------------------------
X		/*   Force internal mod time to be updated.
X		/*----------------------------------------*/
X		(mail_changed)
X		(message "%d message%s saved in %s" 
X			num_saved
X			(if (== num_saved 1) "" "s")
X			mailfile)
X	)
X)
X(macro mail_quit
X	(
X		(= quit_flag TRUE)
X		(exit)
X	)
X)
X(macro mail_delete
X	(
X		(translate "[*.]*$" "* <Message Deleted>" 0)
X		(beginning_of_line)
X		(push_back (key_to_int "<Down>"))
X	)
X)
X(macro mail_write
X	(mail_write_msg TRUE)
X)
X(macro mail_save
X	(mail_write_msg FALSE)
X)
X(macro mail_write_msg
X	(
X		(string	filename
X					msg)
X		(int	save_headers
X				curbuf
X				line_no
X				start_line
X				end_line)
X		
X		(= curbuf (inq_buffer))
X		(get_parm 0 save_headers)
X		(= filename "~/mbox")
X		(if save_headers
X			(= msg "Write to file: ")
X			(= msg "Save to file: "))
X		(get_parm NULL filename msg NULL filename)
X		(= line_no (- (atoi (read)) 1))
X		
X		(set_buffer mailbuf)
X		(= start_line (nth (* 2 line_no) who_list))
X		(= end_line (- (nth (+ (* 2 line_no) 1) who_list) 1))
X		(goto_line start_line)
X		(if (! save_headers) (
X			(search_fwd "^$")
X			(down)
X			))
X		(drop_anchor MK_LINE)
X		(goto_line end_line)
X		(if (<= (write_block filename 1) 0)
X			(message "Error whilst trying to write %s" filename)
X		;else
X			(message "Message saved in %s" filename))
X		
X		(set_buffer curbuf)
X		(mail_delete)
X	)
X)
X(macro mail_reply
X	(
X		(string	filename
X					answer
X					mail_cmd
X					msg)
X		(string from subject)
X		(int	save_headers
X				curbuf
X				rep_win
X				old_win
X				line_no
X				start_line
X				end_line
X				i)
X		
X		(= curbuf (inq_buffer))
X		(= old_win (inq_window))
X		(sprintf filename "/tmp/cr.rep.%d" (getpid))
X		(save_position)
X		(top_of_buffer)
X		(drop_anchor MK_LINE)
X		(end_of_buffer)
X		(copy)
X		(restore_position)
X		
X		(if (< mail_rep_buf 0)
X			(= mail_rep_buf (create_buffer "Reply-Buffer" filename 0)))
X		(= rep_win (sized_window 24 76 "Type <ESC> to terminate reply"))
X		(set_window rep_win)
X		(attach_buffer mail_rep_buf)
X
X		(set_buffer mail_rep_buf)
X		(top_of_buffer)
X		(paste)
X		(drop_anchor MK_LINE)
X		(end_of_buffer)
X		(delete_block)
X		
X		(= from (get_header "From:"))
X		(= subject (get_header "Subject:"))
X		(top_of_buffer)
X		(drop_anchor MK_LINE)
X		(if (> (search_fwd "^$") 0) (
X			(delete_block)
X			(translate "^" "> " ST_GLOBAL)
X			(insert "\n")
X			(top_of_buffer)
X			(insert "To:	")
X			(insert from)
X			(insert "\n")
X			(if (!= (substr (upper subject) 1 3) "RE:")
X				(= subject (+ "Re: " subject)))
X			(insert "Subject:	")
X			(insert subject)
X			(insert "\n\n")
X			(end_of_buffer)
X			(drop_anchor MK_LINE)
X			))
X		(raise_anchor)
X		(end_of_buffer)
X		
X		(unregister_macro REG_TYPED "sel_alpha")
X		(select_editable)
X		(register_macro REG_TYPED "sel_alpha")
X		/*----------------------------------------
X		/*   Insert users .signature if he's got one.
X		/*----------------------------------------*/
X		(end_of_buffer)
X		(insert "\n")
X		(read_file "~/.signature")
X		(refresh)
X		(delete_window)
X		
X		/*----------------------------------------
X		/*   Now ask user if he wants to send
X		/*   the mail response.
X		/*----------------------------------------*/
X		(= answer "")
X		(while (&& (!= answer "y") (!= answer "n")) (
X			(get_parm NULL answer "Really send (y/n) ? " 1)
X			(= answer (lower answer))
X			))
X		(top_of_buffer)
X		(drop_anchor MK_LINE)
X		(if (> (search_fwd "^$") 0) (
X			(delete_block)
X			(drop_anchor MK_LINE)
X			))
X		(raise_anchor)
X		(if (== answer "y") (
X			/*----------------------------------------
X			/*   Remove any characters from title which
X			/*   might cause shell to blow up.
X			/*----------------------------------------*/
X			(while (> (= i (search_string "[!^]" subject)) 0)
X				(= subject (+ (substr subject 1 (- i 1)) 
X								(substr subject (+ i 1)))))
X			(write_buffer)
X			(sprintf mail_cmd "mail -s \"%s\" %s < %s >& /tmp/cr.mail.errors" subject from filename)
X			(message mail_cmd)
X			(shell mail_cmd 1)
X			(del filename)
X			))
X		(set_window old_win)
X		(set_buffer curbuf) 
X		(attach_buffer curbuf)
X	)
X)
X/*
X *   This macro grabs an RFC header line. The name of the line
X *   is given by the argument passed to this macro. The RFC label
X *   is stripped off and a compressed version of the string after
X *   the colon is returned.
X */
X(macro get_header
X	(
X		(string	name value)
X		(get_parm 0 name)
X		(top_of_buffer)
X		(if (> (search_fwd (+ "^" name)) 0) (
X			(= value (read))
X			(= value (substr value (+ (index value ":") 1)))
X			(= value (trim (ltrim (compress value))))
X			/*----------------------------------------
X			/*   If its the From: field then we need
X			/*   to strip off any comments.
X			/*----------------------------------------*/
X			(if (== name "From:") (
X				(if (index value "(")
X					(= value (substr value 1 (- (index value "(") 1))))
X				(if (index value "<") (
X					(= value (substr value (+ (index value "<") 1)))
X					(= value (substr value 1 (- (index value ">") 1)))
X					))
X				))
X			(return value)
X			))
X		(return "DONT KNOW")
X	)
X)
X(macro mail_select
X	(
X		(int	line_no
X				start_line
X				end_line
X				buf
X				win
X				curbuf
X				curwin)
X		(string	tmpfile
X					title)
X		
X		(= curbuf (inq_buffer))
X		(= curwin (inq_window))
X		(= line_no (atoi (read 4)))
X		(= title (ltrim (trim (substr (read) 4 30))))
X		(if (== title "<Message Deleted>")
X			(return))
X		(-- line_no)
X		(= start_line (nth (* 2 line_no) who_list))
X		(= end_line (- (nth (+ (* 2 line_no) 1) who_list) 1))
X		
X		(set_buffer mailbuf)
X		(goto_line start_line)
X		(drop_anchor MK_LINE)
X		(goto_line end_line)
X		(sprintf tmpfile "/tmp/GRmail.%d" (getpid))
X		(write_block tmpfile)
X		(raise_anchor)
X		(= buf (create_buffer title tmpfile 1))
X		(set_buffer buf)
X		(= win (sized_window (+ (inq_lines) 1) (inq_line_length) "<Esc> to return to main menu."))
X		(select_buffer buf win 0 (
X				(assign_to_key "<Ctrl-G>" "mail_routines")
X				(assign_to_key "r"	"mail_reply")
X				(assign_to_key "R"	"mail_reply")
X				))
X		(del tmpfile)
X		(set_window curwin)
X		(set_buffer curbuf)
X		(attach_buffer curbuf)
X		(translate "[*.]" "*" 0)
X		(beginning_of_line)
X		(push_back (key_to_int "<Down>"))
X	)
X)
X
X/*************************************************************/
X/*
X/*   Macro called when user hits <Ctrl-G> for use with
X/*   things like mailing lists, where we have lots of small
X/*   subjects in one file.
X/*************************************************************/
X(macro mail_routines
X	(
X		(select_routine "<Subject: "
X				"Mail Topics" "mail-routines_trim")
X	)
X)
X(macro mail-routines_trim
X	(
X		(int		spos)
X		(string	routine_name)
X
X		(get_parm 0 routine_name)
X
X		(= spos (search_string ":" routine_name))
X		(if (> spos 0)
X				(= routine_name (substr routine_name (+ spos 1))))
X		(return (ltrim (trim routine_name)))
X
X	)
X)
X
SHAR_EOF
chmod 0444 src/crisp/mail.m || echo "restore of src/crisp/mail.m fails"
mkdir src src/crisp >/dev/null 2>&1
echo "x - extracting src/crisp/makeman.m (Text)"
sed 's/^X//' << 'SHAR_EOF' > src/crisp/makeman.m &&
X/********************************************************************
X *                                                                  *
X *      CRISP - Custom Reduced Instruction Set Programmers Editor   *
X *                                                                  *
X *      (C) Paul Fox, 1989                                          *
X *      43, Jerome Close                Tel: +44 6284 4222          *
X *          Marlow                                                  *
X *           Bucks.                                                 *
X *              England SL7 1TX                                     *
X *                                                                  *
X *                                                                  *
X *    Please See COPYRIGHT notice.                                  *
X *                                                                  *
X ********************************************************************/
X# include	"crisp.h"
X
X# define	ME		1			/* nroff -me */
X# define	MM		2			/* nroff -mm */
X# define	MS		3			/* nroff -ms */
X
X# define	INDEXING		TRUE		/* Set to FALSE to turn index page generation */
X										/* off.													 */
X/****************************************************************************/
X/*----------------------------------------
X/*    Values you need to configure.
X/*----------------------------------------*/
X# define	MACROS			MM
X# define	PAGE_LENGTH			".pl 10.5i"		/* European page size. */
X/*# define	PAGE_LENGTH		""					/* American page size. */
X														/* I dont know what goes in here, */
X														/* but possibly leaving it blank will */
X														/* do.										*/
X/*----------------------------------------
X/*    The ROFF_COMMAND is the troff/nroff
X/*    command used to generate the output.
X/*    It can contain all the normal shell
X/*    syntax characters since it is passed
X/*    to the shell. It should NOT contain
X/*    any pipe characters.
X/*
X/*    This definition is needed so that the
X/*    index table can be generated.
X/*----------------------------------------*/
X# define ROFF_COMMAND	"troff -Tps -mm"
X
X/*----------------------------------------
X/*    Name of file to create containing
X/*    nroff/troff source.
X/*----------------------------------------*/
X# define	OUTPUT_FILE		"/tmp/crispman"
X
X/************************************************************************/
X(macro	_init
X	(
X		(string	START_SECTION
X					END_SECTION
X					LINE_LENGTH
X					NEW_PARA
X					)
X		(global	START_SECTION
X					END_SECTION
X					LINE_LENGTH
X					NEW_PARA
X					)
X
X		(switch MACROS
X			ME		(nroff_me_macros)
X			MM		(nroff_mm_macros)
X			MS		(nroff_ms_macros)
X			NULL  (
X						(error "Must specify -me, -mm or -ms macro package")
X						(exit)
X						(return)
X					)
X			)
X	)
X)
X(macro nroff_mm_macros
X	(
X		(= START_SECTION ".H")
X		(= END_SECTION ".sp\n")
X		(= LINE_LENGTH ".ll 6.5i")
X		(= NEW_PARA ".P")
X	)
X)
X(macro nroff_me_macros
X	(
X		(= START_SECTION ".sh")
X		(= END_SECTION ".sp\n")
X		(= LINE_LENGTH ".ll 6.5i")
X		(= NEW_PARA ".lp")
X	)
X)
X(macro nroff_ms_macros
X	(
X		(= START_SECTION ".NH")
X		(= END_SECTION ".LP\n")
X		(= LINE_LENGTH ".nr LL 6.5i\n.nr LT 6.5i")
X		(= NEW_PARA ".LP")
X	)
X)
X(macro me_end_processing
X	(
X		(message "nroff -me Special Processing.")
X		(top_of_buffer)
X		(translate "^.H " ".sh " ST_GLOBAL)
X		(top_of_buffer)
X		(translate "^.P$" ".lp" ST_GLOBAL)
X		(top_of_buffer)
X		(translate "^.PF \"{*}\"$" ".fo \\0" ST_GLOBAL)
X		(top_of_buffer)
X		(translate "^.PH \"{*}\"$" ".he \\0" ST_GLOBAL)
X	)
X)
X(macro ms_end_processing
X	(
X		(message "nroff -ms Special Processing.")
X		(top_of_buffer)
X		(translate "^.H {?} \"{*}\"$" ".NH \\0\n\\1\n.LP" ST_GLOBAL)
X		(top_of_buffer)
X		(translate "^.NH {?} \"{*}\"$" ".NH \\0\n\\1\n.LP" ST_GLOBAL)
X		(top_of_buffer)
X		(translate "^.P$" ".LP" ST_GLOBAL)
X		(top_of_buffer)
X		(translate "^.PF *'{*}'{*}'{*}'*$" ".ds LF \\0\n.ds CF \\1\n.ds RF \\2\n" ST_GLOBAL)
X		(top_of_buffer)
X		(translate "^.PH *'{*}'{*}'{*}'*$" ".ds LH \\0\n.ds CH \\1\n.ds RH \\2\n" ST_GLOBAL)
X	)
X)
X//
X//   This is a macro to take the CRISP help files, put them into some
X//   form of order and convert the files to troff with the .mm files
X//   so that the manual can be printed off on a nice printer.
X//
X(macro makeman
X	(
X		(string	buf BHELP index_file)
X		(int	curbuf)
X		(int	manbuf)
X		(int	v old_msg_level)
X
X		(= BHELP (+ (inq_environment "BHELP") "/"))
X
X		(= old_msg_level (inq_msg_level))
X		(set_msg_level 1)			
X		(= v (version))
X		(= curbuf (inq_buffer))
X		(= manbuf (create_buffer OUTPUT_FILE NULL 1))
X		(set_buffer manbuf)
X		(attach_buffer manbuf)
X		(clear_buffer)
X
X		(read_file (+ BHELP "roff/ms.mac"))
X		(read_file (+ BHELP "roff/page1.mm"))
X		(save_position)
X		(top_of_buffer)
X		(translate ".ll 6i" LINE_LENGTH ST_GLOBAL)
X		(restore_position)
X
X		(sprintf buf ".Fc \"CRISP Reference Manual\" %d.%02d \"May, 1989\"\n"
X			(/ v 100) (% v 100))
X		(insert buf)
X		(read_file (+ BHELP "roff/Intro.mm"))
X
X		(chapter_2)
X		(chapter_3)
X		(chapter_4)
X		(chapter_5)
X
X		(process_sections)
X		(save_position)
X		(read_file (+ BHELP "prim/Misc.cmd"))
X		(read_file (+ BHELP "prim/A.cmd"))
X		(read_file (+ BHELP "prim/B.cmd"))
X		(read_file (+ BHELP "prim/C.cmd"))
X		(read_file (+ BHELP "prim/D.cmd"))
X		(read_file (+ BHELP "prim/E.cmd"))
X		(read_file (+ BHELP "prim/F.cmd"))
X		(read_file (+ BHELP "prim/G.cmd"))
X		(read_file (+ BHELP "prim/I.cmd"))
X		(read_file (+ BHELP "prim/K.cmd"))
X		(read_file (+ BHELP "prim/L.cmd"))
X		(read_file (+ BHELP "prim/M.cmd"))
X		(read_file (+ BHELP "prim/N.cmd"))
X		(read_file (+ BHELP "prim/O.cmd"))
X		(read_file (+ BHELP "prim/P.cmd"))
X		(read_file (+ BHELP "prim/Q.cmd"))
X		(read_file (+ BHELP "prim/R.cmd"))
X		(read_file (+ BHELP "prim/S.cmd"))
X		(read_file (+ BHELP "prim/T.cmd"))
X		(read_file (+ BHELP "prim/U.cmd"))
X		(read_file (+ BHELP "prim/V.cmd"))
X		(read_file (+ BHELP "prim/W.cmd"))
X		(process_prim)
X
X		(end_processing)
X		
X		(write_buffer)
X
X		(make_index)
X
X		(write_buffer)
X		
X		/*----------------------------------------
X		/*   Now we need to format the manual to
X		/*   get the index entries.
X		/*----------------------------------------*/
X		(sprintf buf "sh -cfe '%s %s >%s.roff 2>%s.index'" 
X						  ROFF_COMMAND 
X							  OUTPUT_FILE
X									OUTPUT_FILE
X												 OUTPUT_FILE)
X
X		(if INDEXING (
X			(message buf)
X			(shell buf 1)
X			(sprintf index_file "%s.index" OUTPUT_FILE)
X			(edit_file index_file)
X			(format_index)
X			(message buf)
X			(sprintf buf "sh -cfe '%s %s.index >>%s.roff'"
X							ROFF_COMMAND OUTPUT_FILE OUTPUT_FILE)
X			(shell buf 1)
X			))
X
X		(message "Finished making manual.")
X
X		(delete_buffer manbuf)
X		(set_buffer curbuf)
X		(attach_buffer curbuf)
X		(set_msg_level old_msg_level)
X	)
X)
X(macro chapter_2
X	(			
X		(read_file (+ BHELP "roff/Env.mm"))
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Command Line Switches\"\n" END_SECTION))))
X		(process_file "env/Switches.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Environment Variables\"\n" END_SECTION))))
X		(process_file "env/Env.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Starting Up\"\n" END_SECTION))))
X		(process_file "env/Startup.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Details on Keyboard Mappings\"\n" END_SECTION))))
X		(process_file "env/Kbd.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Directory Tree\"\n" END_SECTION))))
X		(process_file "env/Tree.hlp")
X	)
X)			
X(macro chapter_3
X	(			
X		(read_file (+ BHELP "roff/Concepts.mm"))
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Anchors, Blocks and Regions\"\n" END_SECTION))))
X		(process_file "concept/Blocks.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Text Buffers\"\n" END_SECTION))))
X		(process_file "concept/Buffers.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Files\"\n" END_SECTION))))
X		(process_file "concept/Files.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Windows\"\n" END_SECTION))))
X		(process_file "concept/Windows.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Macros\"\n" END_SECTION))))
X		(process_file "concept/Macros.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Process Buffers and PTYs\"\n" END_SECTION))))
X		(process_file "concept/Proc.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Regular Expressions\"\n" END_SECTION))))
X		(process_file "concept/Regexp.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Registered Macros\"\n" END_SECTION))))
X		(process_file "concept/Register.hlp")
X	)
X)			
X(macro chapter_4
X	(
X		(read_file (+ BHELP "roff/Features.mm"))
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Displaying List of Active Buffers\"\n" END_SECTION))))
X		(process_file "features/Buflist.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Macros for Compiling and Linting .c Files\"\n" END_SECTION))))
X		(process_file "features/Compile.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Displaying the current Filename\"\n" END_SECTION))))
X		(process_file "features/Filename.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"Macro Interface to GREP\"\n" END_SECTION))))
X		(process_file "features/Grep.hlp")
X		(insert (+ "\n" (+ START_SECTION 
X			(+ " 2 \"The Options Menu\"\n" END_SECTION))))
X		(process_file "features/Options.hlp")
X		(insert (+ "\n" (+ START_SECTION 
SHAR_EOF
echo "End of part 3"
echo "File src/crisp/makeman.m is continued in part 4"
echo "4" > s2_seq_.tmp
exit 0
-- 
=====================			Reuters Ltd PLC, 
Tel: +44 628 891313 x. 212		 Westthorpe House,
UUCP:     fox%marlow.uucp@idec.stc.co.uk  Little Marlow,
					   Bucks, England SL7 3RQ