--- a/joe/builtins.c
+++ b/joe/builtins.c
@@ -1,4 +1,6 @@
 /* Built-in files */
+
+/* Generated with: stringify ../rc/joerc ../rc/ftyperc ../syntax/c.jsf ../colors/default.jcf ../syntax/comment_todo.jsf ../syntax/filename.jsf ../syntax/context.jsf */
 
 #include "types.h"
 
@@ -46,9 +48,11 @@
 		"mode,\"highlight\",rtn	H Highlighting %Zhighlight%\n"
 		"mode,\"crlf\",rtn	Z CR-LF/MS-DOS %Zcrlf%\n"
 		"mode,\"linums\",rtn	N Line numbers %Zlinums%\n"
+		"mode,\"hiline\",rtn	U Highlight line %Zhiline%\n"
 		"mode,\"beep\",rtn	B Beep %Zbeep%\n"
 		"mode,\"rdonly\",rtn	O Read only %Zrdonly%\n"
 		"mode,\"syntax\",rtn	Y Syntax\n"
+		"mode,\"colors\",rtn	S Color scheme\n"
 		"mode,\"encoding\",rtn	E Encoding\n"
 		"mode,\"asis\",rtn	% % Meta chars as-is\n"
 		"mode,\"language\",rtn	V Language\n"
@@ -276,9 +280,9 @@
 		"{Joe\n"
 		" Send bug reports to: http://sourceforge.net/projects/joe-editor \\| \n"
 		" \\| \n"
-		"  default joerc file is here /home/jj/src/joe/inst/etc/joe/joerc \\| \n"
-		"  default syntax and i18n files are here /home/jj/src/joe/inst/share/joe \\| \n"
-		"  additional documentation can be found here /home/jj/src/joe/inst/share/doc/joe \\| \n"
+		"  default joerc file is here /usr/local/etc/joe/joerc \\| \n"
+		"  default syntax and i18n files are here /usr/local/share/joe \\| \n"
+		"  additional documentation can be found here /usr/local/share/doc/joe \\| \n"
 		" \\| \n"
 		" \\| \n"
 		" \\| \n"
@@ -1134,6 +1138,9 @@
 		"-title\n"
 		"-syntax jsf\n"
 		"-smarthome\n"
+		"[jcf]\n"
+		"*.jcf\n"
+		"-syntax jcf\n"
 		"[m4]\n"
 		"*.ac\n"
 		"*.m4\n"
@@ -1367,6 +1374,13 @@
 		"*.spec\n"
 		"-autoindent\n"
 		"-syntax spec\n"
+		"[haskell]\n"
+		"*.hs\n"
+		"-autoindent\n"
+		"-smarthome\n"
+		"-smartbacks\n"
+		"-syntax haskell\n"
+		"-vhdl_comment\n"
 ,	"c.jsf",
 		"\n"
 		"\n"
@@ -1378,20 +1392,35 @@
 		"\n"
 		"-\n"
 		"\n"
-		"\n"
 		"=Idle\n"
-		"=Bad		bold red\n"
-		"=Preproc 	blue\n"
-		"=Define		bold blue\n"
-		"=Comment 	green\n"
-		"=IncLocal	cyan\n"
-		"=IncSystem	bold cyan\n"
-		"=Constant 	cyan\n"
-		"=Escape 	bold cyan\n"
-		"=Type 		bold\n"
-		"=Keyword 	bold\n"
-		"=CppKeyword	bold\n"
-		"=Brace		magenta\n"
+		"=Ident\n"
+		"=Bad\n"
+		"\n"
+		"=Preproc\n"
+		"=Precond	+Preproc\n"
+		"=Define		+DefinedIdent +Preproc\n"
+		"=IncLocal	+String +Preproc\n"
+		"=IncSystem	+Preproc +Keyword\n"
+		"\n"
+		"=Comment\n"
+		"=Constant\n"
+		"=Number		+Constant\n"
+		"=String		+Constant\n"
+		"=StringEscape	+Escape +String\n"
+		"=Character	+String\n"
+		"=CharacterEscape +StringEscape +Character\n"
+		"=Escape\n"
+		"\n"
+		"=Keyword\n"
+		"=CppKeyword	+Keyword\n"
+		"=Statement	+Keyword\n"
+		"=Loop		+Statement\n"
+		"=Conditional	+Statement\n"
+		"=Label		+DefinedIdent\n"
+		"=Type\n"
+		"=StorageClass	+Type +Keyword\n"
+		"=Structure	+Type +Keyword\n"
+		"=Brace\n"
 		"=Control\n"
 		"\n"
 		":reset Idle\n"
@@ -1400,7 +1429,7 @@
 		"\n"
 		":first Idle\n"
 		"	*		idle		noeat\n"
-		"	\"#\"		pre		recolor=-1\n"
+		"	\"#\"		pre		mark\n"
 		"\n"
 		":pre Preproc\n"
 		"	*		preproc		noeat\n"
@@ -1408,17 +1437,26 @@
 		"	\"a-z\"		preident	recolor=-1 buffer\n"
 		"\n"
 		":preident Preproc\n"
-		"	*		preproc		noeat strings\n"
-		"	\"define\"	predef\n"
-		"	\"include\"	preinc\n"
+		"	*		preproc		noeat markend recolormark strings\n"
+		"	\"define\"	predef		markend recolormark\n"
+		"	\"include\"	preinc		markend recolormark\n"
+		"	\"if\"		precond		markend recolormark\n"
+		"	\"ifdef\"		precond		markend recolormark\n"
+		"	\"ifndef\"	precond		markend recolormark\n"
+		"	\"else\"		precond		markend recolormark\n"
+		"	\"elif\"		precond		markend recolormark\n"
+		"	\"endif\"		precond		markend recolormark\n"
 		"done\n"
 		"	\"a-z\"		preident\n"
+		"\n"
+		":precond Precond\n"
+		"	*		preproc		noeat\n"
 		"\n"
 		":preinc Preproc\n"
 		"	*		preinc\n"
 		"	\" \\t\"		preinc_ws\n"
 		"	\"\\n\"		reset\n"
-		"	\n"
+		"\n"
 		":preinc_ws Preproc\n"
 		"	*		prebad		recolor=-1\n"
 		"	\" \\t\"		preinc_ws\n"
@@ -1451,7 +1489,6 @@
 		":predef_ident Define\n"
 		"	*		idle		noeat\n"
 		"	\"\\c\"		predef_ident\n"
-		"\n"
 		"\n"
 		":preproc Preproc\n"
 		"	*		preproc\n"
@@ -1474,14 +1511,14 @@
 		"	\"\\n\"		reset\n"
 		"	\"/\"		slash\n"
 		"	\"0\"		first_digit	recolor=-1\n"
-		"	\"1-9\"		decimal	recolor=-1\n"
+		"	\"1-9\"		decimal		recolor=-1\n"
 		"	\".\"		maybe_float\n"
 		"	\"\\\"\"		string		recolor=-1\n"
 		"	\"'\"		char		recolor=-1\n"
-		"	\"\\i\"		ident		buffer\n"
+		"	\"\\i\"		ident		recolor=-1 buffer\n"
 		"	\"\\\\\"		outside_escape	recolor=-1\n"
 		"	\"{}\"		brace		recolor=-1\n"
-		"	\",:;=()><[]*&|!~+\\-%^\"	control		recolor=-1\n"
+		"	\",:;=()><[]*&|!~+\\-%^\"	control	recolor=-1\n"
 		"\n"
 		":outside_escape	Escape\n"
 		"	*	idle\n"
@@ -1499,6 +1536,7 @@
 		"\n"
 		":comment Comment comment\n"
 		"	*		comment\n"
+		"	\"BFHNTX\"	comment		noeat call=comment_todo.comment_todo()\n"
 		"	\"*\"		maybe_end_comment\n"
 		"\n"
 		":maybe_end_comment Comment comment\n"
@@ -1508,108 +1546,109 @@
 		"\n"
 		":line_comment Comment comment\n"
 		"	*		line_comment\n"
+		"	\"BFHNTX\"	line_comment	noeat call=comment_todo.comment_todo()\n"
 		"	\"\\n\"		reset\n"
 		"\n"
-		":first_digit Constant\n"
+		":first_digit Number\n"
 		"	*		idle	noeat\n"
-		"	\"xX\"		hex\n"
+		"	\"xX\"		hex		recolor=-2\n"
 		"	\".\"		float\n"
 		"	\"eE\"		epart\n"
-		"	\"0-7\"		octal\n"
+		"	\"0-7\"		octal		recolor=-2\n"
 		"	\"89\"		bad_number	recolor=-1\n"
 		"\n"
 		":bad_number Bad\n"
 		"	*		idle	noeat\n"
 		"	\"0-9\"		bad_number\n"
 		"\n"
-		":octal Constant\n"
+		":octal Number\n"
 		"	*		idle	noeat\n"
 		"	\"0-7\"		octal\n"
 		"	\"89\"		bad_number	recolor=-1\n"
 		"\n"
-		":hex Constant\n"
+		":hex Number\n"
 		"	*		idle	noeat\n"
 		"	\"0-9A-Fa-f\"	hex\n"
 		"\n"
-		":decimal Constant\n"
+		":decimal Number\n"
 		"	*		idle	noeat\n"
 		"	\"0-9\"		decimal\n"
 		"	\"eE\"		epart\n"
 		"	\".\"		float\n"
 		"\n"
-		":maybe_float Constant\n"
+		":maybe_float Number\n"
 		"	*		idle	recolor=-2	noeat\n"
 		"	\"0-9\"		float		recolor=-2\n"
 		"\n"
-		":float Constant\n"
+		":float Number\n"
 		"	*		idle	noeat\n"
 		"	\"eE\"		epart\n"
 		"	\"0-9\"		float\n"
 		"\n"
-		":epart Constant\n"
+		":epart Number\n"
 		"	*		idle	noeat\n"
 		"	\"0-9+\\-\"	enum\n"
 		"\n"
-		":enum Constant\n"
+		":enum Number\n"
 		"	*		idle	noeat\n"
 		"	\"0-9\"		enum\n"
 		"\n"
-		":string	Constant string\n"
+		":string	String string\n"
 		"	*		string\n"
 		"	\"\\\"\"		idle\n"
 		"	\"\\\\\"		string_escape	recolor=-1\n"
 		"	\"%\"		string_control	recolor=-1\n"
 		"\n"
-		":string_escape Escape string\n"
+		":string_escape StringEscape string\n"
 		"	*		string\n"
 		"	\"x\"		string_hex\n"
 		"	\"0-7\"		string_octal2\n"
 		"	\"\\n\"		string		recolor=-2\n"
 		"\n"
-		":string_hex Escape string\n"
+		":string_hex StringEscape string\n"
 		"	*		string		noeat\n"
 		"	\"0-9a-fA-F\"	string_hex\n"
 		"\n"
-		":string_octal2 Escape string\n"
+		":string_octal2 StringEscape string\n"
 		"	*		string		noeat\n"
 		"	\"0-7\"		string_octal3\n"
 		"\n"
-		":string_octal3 Escape string\n"
+		":string_octal3 StringEscape string\n"
 		"	*		string		noeat\n"
 		"	\"0-7\"		string\n"
 		"\n"
-		":string_control Escape string\n"
+		":string_control StringEscape string\n"
 		"	*		string\n"
 		"	\"\\\"\"		string noeat\n"
 		"	\"\\n\"		reset\n"
 		"	\"\\\\\"		string_escape	recolor=-1\n"
 		"	\"0-9.\\-+ #hjILtz$\"	string_control\n"
 		"\n"
-		":char Constant string\n"
+		":char Character string\n"
 		"	*		char\n"
 		"	\"\\n\"		reset\n"
 		"	\"'\"		idle\n"
 		"	\"\\\\\"		char_escape	recolor=-1\n"
 		"\n"
-		":char_escape	Escape string\n"
+		":char_escape CharacterEscape string\n"
 		"	*		char\n"
 		"	\"x\"		char_hex\n"
 		"	\"0-7\"		char_octal2\n"
 		"	\"\\n\"		char		recolor=-2\n"
 		"\n"
-		":char_hex Escape string\n"
+		":char_hex CharacterEscape string\n"
 		"	*		char		noeat\n"
 		"	\"0-9a-fA-F\"	char_hex\n"
 		"\n"
-		":char_octal2 Escape string\n"
+		":char_octal2 CharacterEscape string\n"
 		"	*		char		noeat\n"
 		"	\"0-7\"		char_octal3\n"
 		"\n"
-		":char_octal3 Escape string\n"
+		":char_octal3 CharacterEscape string\n"
 		"	*		char		noeat\n"
 		"	\"0-7\"		char\n"
 		"\n"
-		":ident Idle\n"
+		":ident Ident\n"
 		"	*		idle		noeat strings\n"
 		"	\"int\"		type\n"
 		"	\"float\"		type\n"
@@ -1620,35 +1659,35 @@
 		"	\"signed\"	type\n"
 		"	\"unsigned\"	type\n"
 		"	\"void\"		type\n"
-		"	\"static\"	type\n"
-		"	\"register\"	type\n"
-		"	\"extern\"	type\n"
+		"	\"static\"	storage\n"
+		"	\"register\"	storage\n"
+		"	\"extern\"	storage\n"
 		"	\"inline\"	type\n"
-		"	\"auto\"		type\n"
-		"	\"const\"		type\n"
-		"	\"volatile\"	type\n"
-		"	\"if\"		kw\n"
-		"	\"else\"		kw\n"
-		"	\"while\"		kw\n"
-		"	\"for\"		kw\n"
-		"	\"break\"		kw\n"
-		"	\"continue\"	kw\n"
-		"	\"do\"		kw\n"
-		"	\"case\"		kw\n"
-		"	\"default\"	kw\n"
-		"	\"switch\"	kw\n"
-		"	\"goto\"		kw\n"
-		"	\"struct\"	kw\n"
-		"	\"enum\"		kw\n"
-		"	\"return\"	kw\n"
+		"	\"auto\"		storage\n"
+		"	\"const\"		storage\n"
+		"	\"volatile\"	storage\n"
+		"	\"if\"		cond\n"
+		"	\"else\"		cond\n"
+		"	\"while\"		loop\n"
+		"	\"for\"		loop\n"
+		"	\"break\"		stmt\n"
+		"	\"continue\"	stmt\n"
+		"	\"do\"		loop\n"
+		"	\"case\"		label\n"
+		"	\"default\"	label\n"
+		"	\"switch\"	cond\n"
+		"	\"goto\"		stmt\n"
+		"	\"struct\"	struct\n"
+		"	\"enum\"		struct\n"
+		"	\"return\"	stmt\n"
 		"	\"sizeof\"	kw\n"
-		"	\"typedef\"	kw\n"
-		"	\"union\"		kw\n"
+		"	\"typedef\"	struct\n"
+		"	\"union\"		struct\n"
 		"	\"asm\"		kw\n"
 		"	#\"asm\"			cppkw (listed above as a C keyword)\n"
 		"	\"bool\"			cppkw\n"
 		"	\"catch\"			cppkw\n"
-		"	\"class\"			cppkw\n"
+		"	\"class\"			struct\n"
 		"	\"const_cast\"		cppkw\n"
 		"	\"delete\"		cppkw\n"
 		"	\"dynamic_cast\"		cppkw\n"
@@ -1687,5 +1726,180 @@
 		"\n"
 		":cppkw CppKeyword\n"
 		"	*	idle	noeat\n"
+		"\n"
+		":label Label\n"
+		"	*	idle	noeat\n"
+		"\n"
+		":loop Loop\n"
+		"	*	idle	noeat\n"
+		"\n"
+		":stmt Statement\n"
+		"	*	idle	noeat\n"
+		"\n"
+		":storage StorageClass\n"
+		"	*	idle	noeat\n"
+		"\n"
+		":cond Conditional\n"
+		"	*	idle	noeat\n"
+		"\n"
+		":struct Structure\n"
+		"	*	idle	noeat\n"
+,	"default.jcf",
+		".colors 16\n"
+		"-selection 	default/default inverse\n"
+		"-menusel 	default/default inverse\n"
+		"-linum		default dim\n"
+		"-curlinum	default bold\n"
+		"=Idle\n"
+		"=Bad            bold red\n"
+		"=Preproc        blue\n"
+		"=Define         bold blue\n"
+		"=Comment        green\n"
+		"=IncLocal       cyan\n"
+		"=IncSystem      bold cyan\n"
+		"=Constant       cyan\n"
+		"=Escape         bold cyan\n"
+		"=Type           bold\n"
+		"=Keyword        bold\n"
+		"=Brace          magenta\n"
+		"=Control\n"
+		"=Ident\n"
+		"=Tag		bold blue\n"
+		"=TagName	+Tag\n"
+		"=TODO		default/default inverse\n"
+		"=Title		bold\n"
+		"=diff.DelLine	red\n"
+		"=diff.AddLine	green\n"
+		"=diff.ChgLine	magenta\n"
+		"=diff.Garbage	dim white\n"
+		"=diff.FileOld	bold red\n"
+		"=diff.FileNew	bold green\n"
+		"=diff.Hunk	bold blue\n"
+		"# For backwards compatibility with older syntaxes that specify colors,\n"
+		"# the scheme must specify termcolors.  Yes this is a bit of a kludge.\n"
+		"-term  0 0\n"
+		"-term  1 1\n"
+		"-term  2 2\n"
+		"-term  3 3\n"
+		"-term  4 4\n"
+		"-term  5 5\n"
+		"-term  6 6\n"
+		"-term  7 7\n"
+		"-term  8 8\n"
+		"-term  9 9\n"
+		"-term 10 10\n"
+		"-term 11 11\n"
+		"-term 12 12\n"
+		"-term 13 13\n"
+		"-term 14 14\n"
+		"-term 15 15\n"
+,	"comment_todo.jsf",
+		"\n"
+		"=Comment 	\n"
+		"=TODO		+Comment\n"
+		"\n"
+		".subr comment_todo\n"
+		":comment_todo_init Comment comment\n"
+		"	*		comment_todo_guess	buffer\n"
+		"\n"
+		":comment_todo_guess Comment comment\n"
+		"	*		comment_todo_unknown	noeat strings\n"
+		"	\"BUG\"		comment_todo\n"
+		"	\"FIXME\"		comment_todo\n"
+		"	\"HACK\"		comment_todo\n"
+		"	\"NOTE\"		comment_todo\n"
+		"	\"TODO\"		comment_todo\n"
+		"	\"XXX\"		comment_todo\n"
+		"done\n"
+		"	\"A-Z\"		comment_todo_guess\n"
+		"\n"
+		":comment_todo_unknown Comment comment\n"
+		"	*		NULL		noeat return\n"
+		"\n"
+		":comment_todo TODO comment\n"
+		"	*		NULL		noeat return\n"
+		".end\n"
+,	"filename.jsf",
+		"\n"
+		"=Idle\n"
+		"=Notused	+Comment\n"
+		"\n"
+		":idle Idle\n"
+		"	*	filename	noeat mark\n"
+		"\n"
+		":filename Idle\n"
+		"	*	filename\n"
+		"	\"/\"	slash\n"
+		"	\"\\n\"	idle\n"
+		"\n"
+		":slash Idle\n"
+		"	*	filename\n"
+		"	\"/\"	restart		noeat recolormark\n"
+		"	\"~\"	restart		noeat recolormark\n"
+		"	\"\\n\"	idle\n"
+		"\n"
+		":restart Notused\n"
+		"	*	filename	noeat mark\n"
+,	"context.jsf",
+		"\n"
+		"=Idle\n"
+		"=Title bold # Doesn't matter, just make it visible\n"
+		"\n"
+		":idle Idle\n"
+		"	*		title_line	buffer noeat recolor=-1\n"
+		"	\"b\"		maybe_begin_1	buffer\n"
+		"	\"B\"		maybe_BEGIN_1	buffer\n"
+		"	\"\\n\"		idle\n"
+		"	\"/\"		maybe_comment	buffer\n"
+		"	\"-\"		maybe_comment_1	buffer\n"
+		"	\";{} \\t\\r\\f#\"	comment\n"
+		"\n"
+		":maybe_comment Idle\n"
+		"	*		title_line	noeat recolor=-1\n"
+		"	\"/*\"		comment\n"
+		"\n"
+		":maybe_comment_1 Idle\n"
+		"	*		title_line	noeat recolor=-1\n"
+		"	\"-\"		comment\n"
+		"\n"
+		":title_line Title\n"
+		"	*		title_line\n"
+		"	\"\\n\"		idle		save_s\n"
+		"\n"
+		":comment Idle\n"
+		"	*		comment\n"
+		"	\"\\n\"		idle\n"
+		"\n"
+		":maybe_begin_1 Idle\n"
+		"	*		title_line	noeat recolor=-2\n"
+		"	\"e\"		maybe_begin_2\n"
+		"\n"
+		":maybe_begin_2 Idle\n"
+		"	*		title_line	noeat recolor=-3\n"
+		"	\"g\"		maybe_begin_3\n"
+		"\n"
+		":maybe_begin_3 Idle\n"
+		"	*		title_line	noeat recolor=-4\n"
+		"	\"i\"		maybe_begin_4\n"
+		"\n"
+		":maybe_begin_4 Idle\n"
+		"	*		title_line	noeat recolor=-5\n"
+		"	\"n\"		comment\n"
+		"\n"
+		":maybe_BEGIN_1 Idle\n"
+		"	*		title_line	noeat recolor=-2\n"
+		"	\"E\"		maybe_BEGIN_2\n"
+		"\n"
+		":maybe_BEGIN_2 Idle\n"
+		"	*		title_line	noeat recolor=-3\n"
+		"	\"G\"		maybe_BEGIN_3\n"
+		"\n"
+		":maybe_BEGIN_3 Idle\n"
+		"	*		title_line	noeat recolor=-4\n"
+		"	\"I\"		maybe_BEGIN_4\n"
+		"\n"
+		":maybe_BEGIN_4 Idle\n"
+		"	*		title_line	noeat recolor=-5\n"
+		"	\"N\"		comment\n"
 ,	NULL
 };