diff --git a/ctrl/SlyDCTColors_Default.cfg b/ctrl/SlyDCTColors_Default.cfg
index 46c756c6137ea036d2617634f2392f622b323957..139cc0ab2ed04260b8037628363948856d19d9ec 100644
--- a/ctrl/SlyDCTColors_Default.cfg
+++ b/ctrl/SlyDCTColors_Default.cfg
@@ -2,85 +2,85 @@
 ; This color scheme mimics DCT Edit's default color scheme.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=nc
+QuoteLineColor=nc
 
 ; Border colors
-TopBorderColor1=nr
-TopBorderColor2=nrh
-EditAreaBorderColor1=ng
-EditAreaBorderColor2=ngh
-EditModeBrackets=nkh
-EditMode=nw
+TopBorderColor1=nr
+TopBorderColor2=nrh
+EditAreaBorderColor1=ng
+EditAreaBorderColor2=ngh
+EditModeBrackets=nkh
+EditMode=nw
 
 ; Colors for the top informational area
-TopLabelColor=nbh
-TopLabelColonColor=nb
-TopFromColor=nch
-TopFromFillColor=nc
-TopToColor=nch
-TopToFillColor=nc
-TopSubjColor=nwh
-TopSubjFillColor=nw
-TopAreaColor=ngh
-TopAreaFillColor=ng
-TopTimeColor=nyh
-TopTimeFillColor=nr
-TopTimeLeftColor=nyh
-TopTimeLeftFillColor=nr
-TopInfoBracketColor=nm
+TopLabelColor=nbh
+TopLabelColonColor=nb
+TopFromColor=nch
+TopFromFillColor=nc
+TopToColor=nch
+TopToFillColor=nc
+TopSubjColor=nwh
+TopSubjFillColor=nw
+TopAreaColor=ngh
+TopAreaFillColor=ng
+TopTimeColor=nyh
+TopTimeFillColor=nr
+TopTimeLeftColor=nyh
+TopTimeLeftFillColor=nr
+TopInfoBracketColor=nm
 
 ; Colors for the quote window
-QuoteWinText=n7b
-QuoteLineHighlightColor=nw
-QuoteWinBorderTextColor=n7r
-QuoteWinBorderColor=nk7
+QuoteWinText=n7b
+QuoteLineHighlightColor=nw
+QuoteWinBorderTextColor=n7r
+QuoteWinBorderColor=nk7
 
 ; Colors for the bottom row help text
-BottomHelpBrackets=nkh
-BottomHelpKeys=nrh
-BottomHelpFill=nr
-BottomHelpKeyDesc=nc
+BottomHelpBrackets=nkh
+BottomHelpKeys=nrh
+BottomHelpFill=nr
+BottomHelpKeyDesc=nc
 
 ; Colors for text boxes
-TextBoxBorder=nk7
-TextBoxBorderText=nr7
-TextBoxInnerText=nb7
-YesNoBoxBrackets=nk7
-YesNoBoxYesNoText=nwh7
+TextBoxBorder=nk7
+TextBoxBorderText=nr7
+TextBoxInnerText=nb7
+YesNoBoxBrackets=nk7
+YesNoBoxYesNoText=nwh7
 
 ; Colors for the menus
-SelectedMenuLabelBorders=nw
-SelectedMenuLabelText=nk7
-UnselectedMenuLabelText=nwh
-MenuBorders=nk7
-MenuSelectedItems=nw
-MenuUnselectedItems=nk7
-MenuHotkeys=nwh7
+SelectedMenuLabelBorders=nw
+SelectedMenuLabelText=nk7
+UnselectedMenuLabelText=nwh
+MenuBorders=nk7
+MenuSelectedItems=nw
+MenuUnselectedItems=nk7
+MenuHotkeys=nwh7
 
 ; Color settings for list boxes
-listBoxBorder=ng
-listBoxBorderText=nbh
+listBoxBorder=ng
+listBoxBorderText=nbh
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4c
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=nc
-listBoxItemHighlight=n4wh
+listBoxItemText=nc
+listBoxItemHighlight=n4wh
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/ctrl/SlyDCTColors_Midnight.cfg b/ctrl/SlyDCTColors_Midnight.cfg
index 3d7d523046d5cc657e306ea322907d5aa3d554d7..a6f9c853cab59aff4ad8eb16f5c49c64e6c57929 100644
--- a/ctrl/SlyDCTColors_Midnight.cfg
+++ b/ctrl/SlyDCTColors_Midnight.cfg
@@ -2,87 +2,87 @@
 ; This is a color scheme I call "Midnight".
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=nc
+QuoteLineColor=nc
 
 ; Border colors
-TopBorderColor1=nb
-TopBorderColor2=nkh
-EditAreaBorderColor1=nbh
-EditAreaBorderColor2=nkh
-EditModeBrackets=nkh
-EditMode=nw
+TopBorderColor1=nb
+TopBorderColor2=nkh
+EditAreaBorderColor1=nbh
+EditAreaBorderColor2=nkh
+EditModeBrackets=nkh
+EditMode=nw
 
 ; Colors for the top informational area
-TopLabelColor=nbh
-TopLabelColonColor=nb
-TopFromColor=nc
-TopFromFillColor=nkh
-TopToColor=nb
-TopToFillColor=nkh
-TopSubjColor=nkh
-TopSubjFillColor=nkh
-TopAreaColor=nb
-TopAreaFillColor=nkh
-TopTimeColor=nkh
-TopTimeFillColor=nkh
-TopTimeLeftColor=nkh
-TopTimeLeftFillColor=nkh
-TopInfoBracketColor=nw
+TopLabelColor=nbh
+TopLabelColonColor=nb
+TopFromColor=nc
+TopFromFillColor=nkh
+TopToColor=nb
+TopToFillColor=nkh
+TopSubjColor=nkh
+TopSubjFillColor=nkh
+TopAreaColor=nb
+TopAreaFillColor=nkh
+TopTimeColor=nkh
+TopTimeFillColor=nkh
+TopTimeLeftColor=nkh
+TopTimeLeftFillColor=nkh
+TopInfoBracketColor=nw
 
 ; Colors for the quote window
-QuoteWinText=n7b
-QuoteLineHighlightColor=nw
-QuoteWinBorderTextColor=n7r
-QuoteWinBorderColor=nk7
+QuoteWinText=n7b
+QuoteLineHighlightColor=nw
+QuoteWinBorderTextColor=n7r
+QuoteWinBorderColor=nk7
 
 ; Colors for the bottom row help text
-BottomHelpBrackets=nkh
-BottomHelpKeys=nb
-BottomHelpFill=nkh
-BottomHelpKeyDesc=nc
+BottomHelpBrackets=nkh
+BottomHelpKeys=nb
+BottomHelpFill=nkh
+BottomHelpKeyDesc=nc
 
 ; Colors for text boxes
-TextBoxBorder=nkh
-TextBoxBorderText=nbh
-TextBoxInnerText=nw
-YesNoBoxBrackets=nkh
-YesNoBoxYesNoText=nw
+TextBoxBorder=nkh
+TextBoxBorderText=nbh
+TextBoxInnerText=nw
+YesNoBoxBrackets=nkh
+YesNoBoxYesNoText=nw
 
 ; Colors for the menus
-SelectedMenuLabelBorders=nb
-SelectedMenuLabelText=nk4
-UnselectedMenuLabelText=nb
-MenuBorders=nkh
-MenuSelectedItems=nw
-MenuUnselectedItems=nb
-MenuHotkeys=nbh
+SelectedMenuLabelBorders=nb
+SelectedMenuLabelText=nk4
+UnselectedMenuLabelText=nb
+MenuBorders=nkh
+MenuSelectedItems=nw
+MenuUnselectedItems=nb
+MenuHotkeys=nbh
 
 ; Color settings for list boxes
-listBoxBorder=nhk
-listBoxBorderText=nbh
+listBoxBorder=nhk
+listBoxBorderText=nbh
 
 ; Colors for the cross-post selection box
-crossPostBorder=nhk
-crossPostBorderText=nbh
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4c
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostBorder=nhk
+crossPostBorderText=nbh
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=nbh
-listBoxItemHighlight=n4wh
+listBoxItemText=nbh
+listBoxItemHighlight=n4wh
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/ctrl/SlyIceColors_BlueIce.cfg b/ctrl/SlyIceColors_BlueIce.cfg
index e3c35a37270e28b90a7b85b1c6a4bc4a42fb57a5..4fa5b0f2e1045b58f0df1ce1ee10207e6615c3f2 100644
--- a/ctrl/SlyIceColors_BlueIce.cfg
+++ b/ctrl/SlyIceColors_BlueIce.cfg
@@ -2,59 +2,59 @@
 ; This color scheme mimics IceEdit/QuikEdit's "Blue Ice" theme.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=nc
+QuoteLineColor=nc
 
 ; Border colors
-BorderColor1=nb
-BorderColor2=nbh
-KeyInfoLabelColor=ch
+BorderColor1=nb
+BorderColor2=nbh
+KeyInfoLabelColor=ch
 
 ; Colors for the top informational area
-TopInfoBkgColor=4
-TopLabelColor=ch
-TopLabelColonColor=bh
-TopToColor=wh
-TopFromColor=wh
-TopSubjectColor=wh
-TopTimeColor=gh
-TopTimeLeftColor=gh
-EditMode=ch
+TopInfoBkgColor=4
+TopLabelColor=ch
+TopLabelColonColor=bh
+TopToColor=wh
+TopFromColor=wh
+TopSubjectColor=wh
+TopTimeColor=gh
+TopTimeLeftColor=gh
+EditMode=ch
 
 ; Colors for the quote window
-QuoteWinText=nhw
-QuoteLineHighlightColor=4hc
-QuoteWinBorderTextColor=nch
+QuoteWinText=nhw
+QuoteLineHighlightColor=4hc
+QuoteWinBorderTextColor=nch
 
 ; Colors for the multi-choice options
-SelectedOptionBorderColor=nbh4
-SelectedOptionTextColor=nch4
-UnselectedOptionBorderColor=nb
-UnselectedOptionTextColor=nw
+SelectedOptionBorderColor=nbh4
+SelectedOptionTextColor=nch4
+UnselectedOptionBorderColor=nb
+UnselectedOptionTextColor=nw
 
 ; Color settings for list boxes
-listBoxBorder=nb
-listBoxBorderText=nbh
+listBoxBorder=nb
+listBoxBorderText=nbh
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4c
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=nc
-listBoxItemHighlight=n4wh
+listBoxItemText=nc
+listBoxItemHighlight=n4wh
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/ctrl/SlyIceColors_EmeraldCity.cfg b/ctrl/SlyIceColors_EmeraldCity.cfg
index 9a87050ce1f742ebb8f2e7fb23e4f7341db0840d..6c9a1131b4e00850ba4e08e8a658939483bef388 100644
--- a/ctrl/SlyIceColors_EmeraldCity.cfg
+++ b/ctrl/SlyIceColors_EmeraldCity.cfg
@@ -2,59 +2,59 @@
 ; This color scheme mimics IceEdit/QuikEdit's "Emerald City" theme.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=ng
+QuoteLineColor=ng
 
 ; Border colors
-BorderColor1=ng
-BorderColor2=ngh
-KeyInfoLabelColor=ch
+BorderColor1=ng
+BorderColor2=ngh
+KeyInfoLabelColor=ch
 
 ; Colors for the top informational area
-TopInfoBkgColor=2
-TopLabelColor=ch
-TopLabelColonColor=gh
-TopToColor=wh
-TopFromColor=wh
-TopSubjectColor=wh
-TopTimeColor=gh
-TopTimeLeftColor=gh
-EditMode=ch
+TopInfoBkgColor=2
+TopLabelColor=ch
+TopLabelColonColor=gh
+TopToColor=wh
+TopFromColor=wh
+TopSubjectColor=wh
+TopTimeColor=gh
+TopTimeLeftColor=gh
+EditMode=ch
 
 ; Colors for the quote window
-QuoteWinText=nhw
-QuoteLineHighlightColor=6hc
-QuoteWinBorderTextColor=nch
+QuoteWinText=nhw
+QuoteLineHighlightColor=6hc
+QuoteWinBorderTextColor=nch
 
 ; Colors for the multi-choice options
-SelectedOptionBorderColor=nch6
-SelectedOptionTextColor=nch6
-UnselectedOptionBorderColor=ng
-UnselectedOptionTextColor=nw
+SelectedOptionBorderColor=nch6
+SelectedOptionTextColor=nch6
+UnselectedOptionBorderColor=ng
+UnselectedOptionTextColor=nw
 
 ; Color settings for list boxes
-listBoxBorder=ng
-listBoxBorderText=ngh
+listBoxBorder=ng
+listBoxBorderText=ngh
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4c
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=ng
-listBoxItemHighlight=n4wh
+listBoxItemText=ng
+listBoxItemHighlight=n4wh
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/ctrl/SlyIceColors_FieryInferno.cfg b/ctrl/SlyIceColors_FieryInferno.cfg
index a1b639bd5865716cf16e7551883a96f1fe3cdce6..ff7e396dbb20ce66c6f292f577e027dedac8dae0 100644
--- a/ctrl/SlyIceColors_FieryInferno.cfg
+++ b/ctrl/SlyIceColors_FieryInferno.cfg
@@ -2,59 +2,59 @@
 ; This color scheme mimics IceEdit/QuikEdit's "Fiery Inferno" theme.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=nc
+QuoteLineColor=nc
 
 ; Border colors
-BorderColor1=nr
-BorderColor2=nrh
-KeyInfoLabelColor=yh
+BorderColor1=nr
+BorderColor2=nrh
+KeyInfoLabelColor=yh
 
 ; Colors for the top informational area
-TopInfoBkgColor=1
-TopLabelColor=yh
-TopLabelColonColor=rh
-TopToColor=wh
-TopFromColor=wh
-TopSubjectColor=wh
-TopTimeColor=wh
-TopTimeLeftColor=wh
-EditMode=yh
+TopInfoBkgColor=1
+TopLabelColor=yh
+TopLabelColonColor=rh
+TopToColor=wh
+TopFromColor=wh
+TopSubjectColor=wh
+TopTimeColor=wh
+TopTimeLeftColor=wh
+EditMode=yh
 
 ; Colors for the quote window
-QuoteWinText=nhw
-QuoteLineHighlightColor=1hy
-QuoteWinBorderTextColor=nyh
+QuoteWinText=nhw
+QuoteLineHighlightColor=1hy
+QuoteWinBorderTextColor=nyh
 
 ; Colors for the multi-choice options
-SelectedOptionBorderColor=nrh1
-SelectedOptionTextColor=nyh1
-UnselectedOptionBorderColor=nr
-UnselectedOptionTextColor=nw
+SelectedOptionBorderColor=nrh1
+SelectedOptionTextColor=nyh1
+UnselectedOptionBorderColor=nr
+UnselectedOptionTextColor=nw
 
 ; Color settings for list boxes
-listBoxBorder=nr
-listBoxBorderText=nrh
+listBoxBorder=nr
+listBoxBorderText=nrh
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4c
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=nrh
-listBoxItemHighlight=n7r
+listBoxItemText=nrh
+listBoxItemHighlight=n7r
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/ctrl/SlyIceColors_Fire-N-Ice.cfg b/ctrl/SlyIceColors_Fire-N-Ice.cfg
index d8945ac9d0326f5730de79ad75405a331d8a0505..529b59233fb0f1ba20a85897253d146a96bd5a69 100644
--- a/ctrl/SlyIceColors_Fire-N-Ice.cfg
+++ b/ctrl/SlyIceColors_Fire-N-Ice.cfg
@@ -2,59 +2,59 @@
 ; This color scheme mimics IceEdit/QuikEdit's "Fire & Ice" theme.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=nc
+QuoteLineColor=nc
 
 ; Border colors
-BorderColor1=nr
-BorderColor2=nrh
-KeyInfoLabelColor=yh
+BorderColor1=nr
+BorderColor2=nrh
+KeyInfoLabelColor=yh
 
 ; Colors for the top informational area
-TopInfoBkgColor=4
-TopLabelColor=yh
-TopLabelColonColor=kh
-TopToColor=wh
-TopFromColor=wh
-TopSubjectColor=wh
-TopTimeColor=wh
-TopTimeLeftColor=wh
-EditMode=yh
+TopInfoBkgColor=4
+TopLabelColor=yh
+TopLabelColonColor=kh
+TopToColor=wh
+TopFromColor=wh
+TopSubjectColor=wh
+TopTimeColor=wh
+TopTimeLeftColor=wh
+EditMode=yh
 
 ; Colors for the quote window
-QuoteWinText=nhw
-QuoteLineHighlightColor=4hy
-QuoteWinBorderTextColor=nyh
+QuoteWinText=nhw
+QuoteLineHighlightColor=4hy
+QuoteWinBorderTextColor=nyh
 
 ; Colors for the multi-choice options
-SelectedOptionBorderColor=nbh4
-SelectedOptionTextColor=nyh4
-UnselectedOptionBorderColor=nb
-UnselectedOptionTextColor=nw
+SelectedOptionBorderColor=nbh4
+SelectedOptionTextColor=nyh4
+UnselectedOptionBorderColor=nb
+UnselectedOptionTextColor=nw
 
 ; Color settings for list boxes
-listBoxBorder=nr
-listBoxBorderText=nbh
+listBoxBorder=nr
+listBoxBorderText=nbh
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4c
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=nbh
-listBoxItemHighlight=n4wh
+listBoxItemText=nbh
+listBoxItemHighlight=n4wh
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/ctrl/SlyIceColors_GeneralClean.cfg b/ctrl/SlyIceColors_GeneralClean.cfg
index d02ee4d1507e77a3df2c205558ab5235b8913d5d..49e3e66786578475bba3fbf2dad44bf0f90dd1c7 100644
--- a/ctrl/SlyIceColors_GeneralClean.cfg
+++ b/ctrl/SlyIceColors_GeneralClean.cfg
@@ -1,59 +1,59 @@
 ; This is a color theme file for SlyEdit's Ice Style.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=\1n\1k\1h
+QuoteLineColor=nkh
 
 ; Border colors
-BorderColor1=\1n\1k\1h
-BorderColor2=\1n\1c
-KeyInfoLabelColor=\1n\1c
+BorderColor1=nkh
+BorderColor2=nc
+KeyInfoLabelColor=nc
 
 ; Colors for the top informational area
-TopInfoBkgColor=\1n
-TopLabelColor=\1h\1b
-TopLabelColonColor=\1h\1g
-TopToColor=\1c\1h
-TopFromColor=\1c\1h
-TopSubjectColor=\1c\1h
-TopTimeColor=\1y\1h
-TopTimeLeftColor=\1y\1h
-EditMode=\1c\1h
+TopInfoBkgColor=n
+TopLabelColor=hb
+TopLabelColonColor=hg
+TopToColor=ch
+TopFromColor=ch
+TopSubjectColor=ch
+TopTimeColor=yh
+TopTimeLeftColor=yh
+EditMode=ch
 
 ; Colors for the quote window
-QuoteWinText=\1n\1c
-QuoteLineHighlightColor=4\1h\1c
-QuoteWinBorderTextColor=\1b\1h
+QuoteWinText=nc
+QuoteLineHighlightColor=4hc
+QuoteWinBorderTextColor=bh
 
 ; Colors for the multi-choice options
-SelectedOptionBorderColor=\1n\1b\1h4
-SelectedOptionTextColor=\1n\1c\1h4
-UnselectedOptionBorderColor=\1n\1b
-UnselectedOptionTextColor=\1n\1w
+SelectedOptionBorderColor=nbh4
+SelectedOptionTextColor=nch4
+UnselectedOptionBorderColor=nb
+UnselectedOptionTextColor=nw
 
 ; Color settings for list boxes
-listBoxBorder=\1n\1h\1k
-listBoxBorderText=\1b\1h
+listBoxBorder=nhk
+listBoxBorderText=bh
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=\1n\1h\1w
-crossPostMsgAreaNumHighlight=\1n4\1h\1w
-crossPostMsgAreaDesc=\1n\1c
-crossPostMsgAreaDescHighlight=\1n4\1c
-crossPostChk=\1n\1h\1y
-crossPostChkHighlight=\1n4\1h\1y
-crossPostMsgGrpMark=\1n\1h\1g
-crossPostMsgGrpMarkHighlight=\1n4\1h\1g
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=\1n\1w
-listBoxItemHighlight=\1n4\1c\1h
+listBoxItemText=nw
+listBoxItemHighlight=n4ch
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=\1n\1c
-msgPostedGrpHdr=\1n\1h\1b
-msgPostedSubBoardName=\1n\1g
-msgPostedOriginalAreaText=\1n\1c
-msgHasBeenSavedText=\1n\1h\1c
-msgAbortedText=\1n\1h\1m
-emptyMsgNotSentText=\1n\1h\1m
-genMsgErrorText=\1n\1h\1m
\ No newline at end of file
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
\ No newline at end of file
diff --git a/ctrl/SlyIceColors_GenericBlue.cfg b/ctrl/SlyIceColors_GenericBlue.cfg
index 8ff3bee3a0f2a76e4c78cc432e1bee7f6944d439..c542231ed412ad5960d7562a07d5814d71cd5841 100644
--- a/ctrl/SlyIceColors_GenericBlue.cfg
+++ b/ctrl/SlyIceColors_GenericBlue.cfg
@@ -2,59 +2,59 @@
 ; This color scheme mimics IceEdit/QuikEdit's "Generic Blue" theme.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=nc
+QuoteLineColor=nc
 
 ; Border colors
-BorderColor1=nb
-BorderColor2=nb
-KeyInfoLabelColor=ch
+BorderColor1=nb
+BorderColor2=nb
+KeyInfoLabelColor=ch
 
 ; Colors for the top informational area
-TopInfoBkgColor=4
-TopLabelColor=ch
-TopLabelColonColor=bh
-TopToColor=wh
-TopFromColor=wh
-TopSubjectColor=wh
-TopTimeColor=bh
-TopTimeLeftColor=bh
-EditMode=ch
+TopInfoBkgColor=4
+TopLabelColor=ch
+TopLabelColonColor=bh
+TopToColor=wh
+TopFromColor=wh
+TopSubjectColor=wh
+TopTimeColor=bh
+TopTimeLeftColor=bh
+EditMode=ch
 
 ; Colors for the quote window
-QuoteWinText=nhw
-QuoteLineHighlightColor=4hc
-QuoteWinBorderTextColor=nch
+QuoteWinText=nhw
+QuoteLineHighlightColor=4hc
+QuoteWinBorderTextColor=nch
 
 ; Colors for the multi-choice options
-SelectedOptionBorderColor=nbh4
-SelectedOptionTextColor=nch4
-UnselectedOptionBorderColor=nw
-UnselectedOptionTextColor=nw
+SelectedOptionBorderColor=nbh4
+SelectedOptionTextColor=nch4
+UnselectedOptionBorderColor=nw
+UnselectedOptionTextColor=nw
 
 ; Color settings for list boxes
-listBoxBorder=nb
-listBoxBorderText=nbh
+listBoxBorder=nb
+listBoxBorderText=nbh
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4c
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=nbh
-listBoxItemHighlight=n4wh
+listBoxItemText=nbh
+listBoxItemHighlight=n4wh
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/ctrl/SlyIceColors_PurpleHaze.cfg b/ctrl/SlyIceColors_PurpleHaze.cfg
index c9021b45a9e8b07abc0cda6441bb64818582c7ba..66a70be30405e8fc95d933d8207ccb025d04310b 100644
--- a/ctrl/SlyIceColors_PurpleHaze.cfg
+++ b/ctrl/SlyIceColors_PurpleHaze.cfg
@@ -1,59 +1,59 @@
 ; This is a color theme file for SlyEdit's Ice Style.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=nc
+QuoteLineColor=nc
 
 ; Border colors
-BorderColor1=nm
-BorderColor2=nmh
-KeyInfoLabelColor=nm
+BorderColor1=nm
+BorderColor2=nmh
+KeyInfoLabelColor=nm
 
 ; Colors for the top informational area
-TopInfoBkgColor=n
-TopLabelColor=nm
-TopLabelColonColor=bh
-TopToColor=mh
-TopFromColor=mh
-TopSubjectColor=mh
-TopTimeColor=nmh
-TopTimeLeftColor=nmh
-EditMode=nc
+TopInfoBkgColor=n
+TopLabelColor=nm
+TopLabelColonColor=bh
+TopToColor=mh
+TopFromColor=mh
+TopSubjectColor=mh
+TopTimeColor=nmh
+TopTimeLeftColor=nmh
+EditMode=nc
 
 ; Colors for the quote window
-QuoteWinText=nhw
-QuoteLineHighlightColor=4hm
-QuoteWinBorderTextColor=nch
+QuoteWinText=nhw
+QuoteLineHighlightColor=4hm
+QuoteWinBorderTextColor=nch
 
 ; Colors for the multi-choice options
-SelectedOptionBorderColor=nbh4
-SelectedOptionTextColor=nch4
-UnselectedOptionBorderColor=nb
-UnselectedOptionTextColor=nw
+SelectedOptionBorderColor=nbh4
+SelectedOptionTextColor=nch4
+UnselectedOptionBorderColor=nb
+UnselectedOptionTextColor=nw
 
 ; Color settings for list boxes
-listBoxBorder=nm
-listBoxBorderText=nbh
+listBoxBorder=nm
+listBoxBorderText=nbh
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4mh
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4mh
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=nc
-listBoxItemHighlight=n4mh
+listBoxItemText=nc
+listBoxItemHighlight=n4mh
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/ctrl/SlyIceColors_ShadesOfGrey.cfg b/ctrl/SlyIceColors_ShadesOfGrey.cfg
index 5c4f4f5c5f35ea76af7ab65cbf3f03f2a80b3c13..d148af9ff94494c9c5f254911db1b9e357a9015c 100644
--- a/ctrl/SlyIceColors_ShadesOfGrey.cfg
+++ b/ctrl/SlyIceColors_ShadesOfGrey.cfg
@@ -2,59 +2,59 @@
 ; This color scheme mimics IceEdit/QuikEdit's "Shades of Gray" theme.
 
 ; The color to use for quoted lines in the message
-QuoteLineColor=nkh
+QuoteLineColor=nkh
 
 ; Border colors
-BorderColor1=nkh
-BorderColor2=nb
-KeyInfoLabelColor=nw
+BorderColor1=nkh
+BorderColor2=nb
+KeyInfoLabelColor=nw
 
 ; Colors for the top informational area
-TopInfoBkgColor=4
-TopLabelColor=nw4
-TopLabelColonColor=bh
-TopToColor=wh
-TopFromColor=wh
-TopSubjectColor=wh
-TopTimeColor=wh
-TopTimeLeftColor=wh
-EditMode=nw4
+TopInfoBkgColor=4
+TopLabelColor=nw4
+TopLabelColonColor=bh
+TopToColor=wh
+TopFromColor=wh
+TopSubjectColor=wh
+TopTimeColor=wh
+TopTimeLeftColor=wh
+EditMode=nw4
 
 ; Colors for the quote window
-QuoteWinText=nhw
-QuoteLineHighlightColor=7hw
-QuoteWinBorderTextColor=nw
+QuoteWinText=nhw
+QuoteLineHighlightColor=7hw
+QuoteWinBorderTextColor=nw
 
 ; Colors for the multi-choice options
-SelectedOptionBorderColor=nwh7
-SelectedOptionTextColor=nwh7
-UnselectedOptionBorderColor=nkh
-UnselectedOptionTextColor=nwh
+SelectedOptionBorderColor=nwh7
+SelectedOptionTextColor=nwh7
+UnselectedOptionBorderColor=nkh
+UnselectedOptionTextColor=nwh
 
 ; Color settings for list boxes
-listBoxBorder=nhk
-listBoxBorderText=nw
+listBoxBorder=nhk
+listBoxBorderText=nw
 
 ; Colors for the cross-post selection box
-crossPostMsgAreaNum=nhw
-crossPostMsgAreaNumHighlight=n4hw
-crossPostMsgAreaDesc=nc
-crossPostMsgAreaDescHighlight=n4c
-crossPostChk=nhy
-crossPostChkHighlight=n4hy
-crossPostMsgGrpMark=nhg
-crossPostMsgGrpMarkHighlight=n4hg
+crossPostMsgAreaNum=nhw
+crossPostMsgAreaNumHighlight=n4hw
+crossPostMsgAreaDesc=nc
+crossPostMsgAreaDescHighlight=n4c
+crossPostChk=nhy
+crossPostChkHighlight=n4hy
+crossPostMsgGrpMark=nhg
+crossPostMsgGrpMarkHighlight=n4hg
 
 ; For the text items in list boxes
-listBoxItemText=nw
-listBoxItemHighlight=n4wh
+listBoxItemText=nw
+listBoxItemHighlight=n4wh
 
 ; Colors for message saving and sub-board post info when exiting SlyEdit
-msgWillBePostedHdr=nc
-msgPostedGrpHdr=nhb
-msgPostedSubBoardName=ng
-msgPostedOriginalAreaText=nc
-msgHasBeenSavedText=nhc
-msgAbortedText=nhm
-emptyMsgNotSentText=nhm
-genMsgErrorText=nhm
+msgWillBePostedHdr=nc
+msgPostedGrpHdr=nhb
+msgPostedSubBoardName=ng
+msgPostedOriginalAreaText=nc
+msgHasBeenSavedText=nhc
+msgAbortedText=nhm
+emptyMsgNotSentText=nhm
+genMsgErrorText=nhm
diff --git a/exec/SlyEdit.js b/exec/SlyEdit.js
index 5ed198019cde42063d1a7ac1c0f06b9e9b408622..62283ab5c713927026eda583fa497fb19cf869c4 100644
--- a/exec/SlyEdit.js
+++ b/exec/SlyEdit.js
@@ -12,6 +12,12 @@
  * 2022-07-04 Eric Oulashin     Version 1.80
  *                              Added the ability to choose/change the color of text being typed,
  *                              using Ctrl-K if color changing is enabled.
+ * 2022-11-19 Eric Oulashin     Version 1.81 Beta
+ *                              Refactored ReadSlyEditConfigFile().  Also, the color configuration
+ *                              files now can just specify attribute characters, without the
+ *                              control character.
+ * 2022-11-26 Eric Oulashin     Version 1.81
+ *                              Releasing this verison.
  */
 
 "use strict";
@@ -109,8 +115,8 @@ if (console.screen_columns < 80)
 }
 
 // Version information
-var EDITOR_VERSION = "1.80";
-var EDITOR_VER_DATE = "2022-07-04";
+var EDITOR_VERSION = "1.81";
+var EDITOR_VER_DATE = "2022-11-26";
 
 
 // Program variables
@@ -6266,4 +6272,4 @@ function getAllEditLineAttrs(pEndArrayIdx, pLineEditIdx)
 			attributesStr = attributesStr.substr(normalAttrIdx/*+2*/);
 	}
 	return attributesStr;
-}
\ No newline at end of file
+}
diff --git a/exec/SlyEdit_DCTStuff.js b/exec/SlyEdit_DCTStuff.js
index 19f2660981fd898a127c7fd24b10f92a6dd89cf0..c244e557c83f9a155164c5acdc85c9fef7b5636d 100644
--- a/exec/SlyEdit_DCTStuff.js
+++ b/exec/SlyEdit_DCTStuff.js
@@ -12,6 +12,7 @@
  * ... Removed comments ...
  * 2019-05-04 Eric Oulashin     Updated to use require() instead of load() if possible.
  * 2021-12-11 Eric Oulashin     Updated the quote window bottom border text
+ * 2022-11-19 Eric Oulashin     Updated readColorConfig() to handle just attribute characters
  */
 
 "use strict";
@@ -55,14 +56,23 @@ readColorConfig(gConfigSettings.DCTColors.ThemeFilename);
 //  pFilename: The name of the color configuration file
 function readColorConfig(pFilename)
 {
-   var colors = readValueSettingConfigFile(pFilename, 512);
-   if (colors != null)
-   {
-      gConfigSettings.DCTColors = colors;
-      // Move the general color settings into gConfigSettings.genColors.*
-      if (EDITOR_STYLE == "DCT")
-        moveGenColorsToGenSettings(gConfigSettings.DCTColors, gConfigSettings);
-   }
+	var colors = readValueSettingConfigFile(pFilename, 512);
+	if (colors != null)
+	{
+		// Convert the color values from just attribute characters to actual attribute codes
+		for (var prop in colors)
+		{
+			// Remove any instances of specifying the control character
+			colors[prop] = colors[prop].replace(/\\[xX]01/g, "").replace(/\\[xX]1/g, "").replace(/\\1/g, "");
+			// Add actual control characters in the color setting
+			colors[prop] = attrCodeStr(colors[prop]);
+		}
+
+		gConfigSettings.DCTColors = colors;
+		// Move the general color settings into gConfigSettings.genColors.*
+		if (EDITOR_STYLE == "DCT")
+			moveGenColorsToGenSettings(gConfigSettings.DCTColors, gConfigSettings);
+	}
 }
 
 // Sets up any global screen-related variables needed for DCT style
diff --git a/exec/SlyEdit_IceStuff.js b/exec/SlyEdit_IceStuff.js
index 98dd23362da1197a06b4e253e9d9b8111bf0dd5a..8a47585b1b0b8423d72e63f52d1fb8f4e4b260d5 100644
--- a/exec/SlyEdit_IceStuff.js
+++ b/exec/SlyEdit_IceStuff.js
@@ -12,6 +12,7 @@
  * ... Removed comments ...
  * 2019-05-04 Eric Oulashin     Updated to use require() instead of load() if possible.
  * 2021-12-11 Eric Oulashin     Updated the quote window bottom border text
+ * 2022-11-19 Eric Oulashin     Updated readColorConfig() to handle just attribute characters
  */
 
 "use strict";
@@ -40,18 +41,27 @@ readColorConfig(gConfigSettings.iceColors.ThemeFilename);
 //  pFilename: The name of the color configuration file
 function readColorConfig(pFilename)
 {
-   var colors = readValueSettingConfigFile(pFilename, 512);
-   if (colors != null)
-   {
-      // Make a backup of the menuOptClassicColors setting so we can set it
-      // back in the Ice color settings object after setting the colors.
-      var useClassicColorsBackup = gConfigSettings.iceColors.menuOptClassicColors;
-      gConfigSettings.iceColors = colors;
-      // Move the general color settings into gConfigSettings.genColors.*
-      if (EDITOR_STYLE == "ICE")
-         moveGenColorsToGenSettings(gConfigSettings.iceColors, gConfigSettings);
-      gConfigSettings.iceColors.menuOptClassicColors = useClassicColorsBackup;
-   }
+	var colors = readValueSettingConfigFile(pFilename, 512);
+	if (colors != null)
+	{
+		// Convert the color values from just attribute characters to actual attribute codes
+		for (var prop in colors)
+		{
+			// Remove any instances of specifying the control character
+			colors[prop] = colors[prop].replace(/\\[xX]01/g, "").replace(/\\[xX]1/g, "").replace(/\\1/g, "");
+			// Add actual control characters in the color setting
+			colors[prop] = attrCodeStr(colors[prop]);
+		}
+
+		// Make a backup of the menuOptClassicColors setting so we can set it
+		// back in the Ice color settings object after setting the colors.
+		var useClassicColorsBackup = gConfigSettings.iceColors.menuOptClassicColors;
+		gConfigSettings.iceColors = colors;
+		// Move the general color settings into gConfigSettings.genColors.*
+		if (EDITOR_STYLE == "ICE")
+			moveGenColorsToGenSettings(gConfigSettings.iceColors, gConfigSettings);
+		gConfigSettings.iceColors.menuOptClassicColors = useClassicColorsBackup;
+	}
 }
 
 // Sets up any global screen-related variables needed for Ice style
diff --git a/exec/SlyEdit_Misc.js b/exec/SlyEdit_Misc.js
index 91b50311dfd5da5a69e09c57f87197e86ed7fa00..5f807034021f1840d1908070e525864c4b9c75bd 100644
--- a/exec/SlyEdit_Misc.js
+++ b/exec/SlyEdit_Misc.js
@@ -44,6 +44,7 @@
  * 2022-05-27                   Fixed a few instances where SlyEdit was trying to access
  *                              sub-board information with an empty sub-board code (in the rare
  *                              case when no sub-boards are configured).
+ * 2022-11-19 Eric Oulashin     Refactored ReadSlyEditConfigFile().
  */
 
 "use strict";
@@ -2224,141 +2225,56 @@ function ReadSlyEditConfigFile()
 	var cfgFile = new File(slyEdCfgFileName);
 	if (cfgFile.open("r"))
 	{
-		var settingsMode = "behavior";
-		var fileLine = null;     // A line read from the file
-		var equalsPos = 0;       // Position of a = in the line
-		var commentPos = 0;      // Position of the start of a comment
-		var setting = null;      // A setting name (string)
-		var settingUpper = null; // Upper-case setting name
-		var value = null;        // A value for a setting (string), with spaces trimmed
-		var valueLiteral = null; // The value as it is in the config file, no processing
-		var valueUpper = null;   // Upper-cased value
-		while (!cfgFile.eof)
+		// Behavior settings
+		var behaviorSettings = cfgFile.iniGetObject("BEHAVIOR");
+		// The following are all boolean properties/settings:
+		var propsToCopy = ["displayEndInfoScreen", "userInputTimeout", "reWrapQuoteLines", "allowColorSelection",
+		                   "saveColorsAsANSI", "useQuoteLineInitials", "indentQuoteLinesWithInitials", "allowCrossPosting",
+		                   "enableTaglines", "quoteTaglines", "shuffleTaglines", "allowUserSettings", "allowEditQuoteLines",
+		                   "allowSpellCheck"];
+		for (var i = 0; i < propsToCopy.length; ++i)
 		{
-			// Read the next line from the config file.
-			fileLine = cfgFile.readln(2048);
-
-			// fileLine should be a string, but I've seen some cases
-			// where for some reason it isn't.  If it's not a string,
-			// then continue onto the next line.
-			if (typeof(fileLine) != "string")
-				continue;
-
-			// If the line starts with with a semicolon (the comment
-			// character) or is blank, then skip it.
-			if ((fileLine.substr(0, 1) == ";") || (fileLine.length == 0))
-				continue;
-
-			// If in the "behavior" section, then set the behavior-related variables.
-			if (fileLine.toUpperCase() == "[BEHAVIOR]")
-			{
-				settingsMode = "behavior";
-				continue;
-			}
-			else if (fileLine.toUpperCase() == "[ICE_COLORS]")
-			{
-				settingsMode = "ICEColors";
-				continue;
-			}
-			else if (fileLine.toUpperCase() == "[DCT_COLORS]")
-			{
-				settingsMode = "DCTColors";
-				continue;
-			}
-
-			// If the line has a semicolon anywhere in it, then remove
-			// everything from the semicolon onward.
-			commentPos = fileLine.indexOf(";");
-			if (commentPos > -1)
-				fileLine = fileLine.substr(0, commentPos);
-
-			// Look for an equals sign, and if found, separate the line
-			// into the setting name (before the =) and the value (after the
-			// equals sign).
-			equalsPos = fileLine.indexOf("=");
-			if (equalsPos > 0)
-			{
-				// Read the setting & value, and trim leading & trailing spaces.
-				setting = trimSpaces(fileLine.substr(0, equalsPos), true, false, true);
-				settingUpper = setting.toUpperCase();
-				valueLiteral = fileLine.substr(equalsPos+1);
-				value = trimSpaces(valueLiteral, true, false, true);
-				valueUpper = value.toUpperCase();
-
-				if (settingsMode == "behavior")
-				{
-					if (settingUpper == "DISPLAYENDINFOSCREEN")
-						cfgObj.displayEndInfoScreen = (valueUpper == "TRUE");
-					else if (settingUpper == "USERINPUTTIMEOUT")
-						cfgObj.userInputTimeout = (valueUpper == "TRUE");
-					else if (settingUpper == "INPUTTIMEOUTMS")
-						cfgObj.inputTimeoutMS = +value;
-					else if (settingUpper == "REWRAPQUOTELINES")
-						cfgObj.reWrapQuoteLines = (valueUpper == "TRUE");
-					else if (settingUpper == "ALLOWCOLORSELECTION")
-						cfgObj.allowColorSelection = (valueUpper == "TRUE");
-					else if (settingUpper == "SAVECOLORSASANSI")
-						cfgObj.saveColorsAsANSI = (valueUpper == "TRUE");
-					else if (settingUpper == "USEQUOTELINEINITIALS")
-						cfgObj.useQuoteLineInitials = (valueUpper == "TRUE");
-					else if (settingUpper == "INDENTQUOTELINESWITHINITIALS")
-						cfgObj.indentQuoteLinesWithInitials = (valueUpper == "TRUE");
-					else if (settingUpper == "ADD3RDPARTYSTARTUPSCRIPT")
-						cfgObj.thirdPartyLoadOnStart.push(value);
-					else if (settingUpper == "ADD3RDPARTYEXITSCRIPT")
-						cfgObj.thirdPartyLoadOnExit.push(value);
-					else if (settingUpper == "ADDJSONSTART")
-						cfgObj.runJSOnStart.push(value);
-					else if (settingUpper == "ADDJSONEXIT")
-						cfgObj.runJSOnExit.push(value);
-					else if (settingUpper == "ALLOWCROSSPOSTING")
-						cfgObj.allowCrossPosting = (valueUpper == "TRUE");
-					else if (settingUpper == "ENABLETEXTREPLACEMENTS")
-					{
-						// The enableTxtReplacements setting in the config file can
-						// be regex, true, or false:
-						//  - regex: Text replacement enabled using regular expressions
-						//  - true: Text replacement enabled using exact match
-						//  - false: Text replacement disabled
-						cfgObj.textReplacementsUseRegex = (valueUpper == "REGEX");
-						if (cfgObj.textReplacementsUseRegex)
-							cfgObj.enableTextReplacements = true;
-						else
-							cfgObj.enableTextReplacements = (valueUpper == "TRUE");
-					}
-					else if (settingUpper == "ENABLETAGLINES")
-						cfgObj.enableTaglines = (valueUpper == "TRUE");
-					else if (settingUpper == "TAGLINEFILENAME")
-						cfgObj.tagLineFilename = genFullPathCfgFilename(value, gStartupPath);
-					else if (settingUpper == "TAGLINEPREFIX")
-						cfgObj.taglinePrefix = valueLiteral;
-					else if (settingUpper == "QUOTETAGLINES")
-						cfgObj.quoteTaglines = (valueUpper == "TRUE");
-					else if (settingUpper == "SHUFFLETAGLINES")
-						cfgObj.shuffleTaglines = (valueUpper == "TRUE");
-					else if (settingUpper == "ALLOWUSERSETTINGS")
-						cfgObj.allowUserSettings = (valueUpper == "TRUE");
-					else if (settingUpper == "ALLOWEDITQUOTELINES")
-						cfgObj.allowEditQuoteLines = (valueUpper == "TRUE");
-					else if (settingUpper == "ALLOWSPELLCHECK")
-						cfgObj.allowSpellCheck = (valueUpper == "TRUE");
-					else if (settingUpper == "DICTIONARYFILENAMES")
-						cfgObj.dictionaryFilenames = parseDictionaryConfig(value, gStartupPath);
-				}
-				else if (settingsMode == "ICEColors")
-				{
-					if (settingUpper == "THEMEFILENAME")
-						cfgObj.iceColors.ThemeFilename = genFullPathCfgFilename(value, gStartupPath);
-					else if (settingUpper == "MENUOPTCLASSICCOLORS")
-						cfgObj.iceColors.menuOptClassicColors = (valueUpper == "TRUE");
-				}
-				else if (settingsMode == "DCTColors")
-				{
-					if (settingUpper == "THEMEFILENAME")
-						cfgObj.DCTColors.ThemeFilename = genFullPathCfgFilename(value, gStartupPath);
-				}
-			}
+			var propName = propsToCopy[i];
+			cfgObj[propName] = behaviorSettings[propName];
+		}
+		// Other settings:
+		cfgObj.inputTimeoutMS = +(behaviorSettings.inputTimeoutMS);
+		if (behaviorSettings.hasOwnProperty("add3rdPartyStartupScript"))
+			cfgObj.thirdPartyLoadOnStart.push(behaviorSettings.add3rdPartyStartupScript);
+		if (behaviorSettings.hasOwnProperty("addJSOnStart"))
+			cfgObj.runJSOnStart.push(behaviorSettings.addJSOnStart);
+		if (behaviorSettings.hasOwnProperty("addJSOnExit"))
+			cfgObj.runJSOnExit.push(behaviorSettings.addJSOnExit);
+		if (behaviorSettings.hasOwnProperty("enableTextReplacements"))
+		{
+			// The enableTxtReplacements setting in the config file can
+			// be regex, true, or false:
+			//  - regex: Text replacement enabled using regular expressions
+			//  - true: Text replacement enabled using exact match
+			//  - false: Text replacement disabled
+			var valueUpper = behaviorSettings.enableTextReplacements.toUpperCase();
+			cfgObj.textReplacementsUseRegex = (valueUpper == "REGEX");
+			if (cfgObj.textReplacementsUseRegex)
+				cfgObj.enableTextReplacements = true;
+			else
+				cfgObj.enableTextReplacements = (valueUpper == "TRUE");
 		}
+		if (behaviorSettings.hasOwnProperty("taglineFilename"))
+			cfgObj.tagLineFilename = genFullPathCfgFilename(behaviorSettings.taglineFilename, gStartupPath);
+		if (behaviorSettings.hasOwnProperty("taglinePrefix"))
+			cfgObj.taglinePrefix = behaviorSettings.taglinePrefix;
+		if (behaviorSettings.hasOwnProperty("dictionaryFilenames"))
+			cfgObj.dictionaryFilenames = parseDictionaryConfig(behaviorSettings.dictionaryFilenames, gStartupPath);
+		// Color settings
+		var iceColorSettings = cfgFile.iniGetObject("ICE_COLORS");
+		var DCTColorSettings = cfgFile.iniGetObject("DCT_COLORS");
+		if (typeof(cfgObj.iceColors) !== "object")
+			cfgObj.iceColors = {};
+		if (typeof(cfgObj.DCTColors) !== "object")
+			cfgObj.DCTColors = {};
+		cfgObj.iceColors.ThemeFilename = genFullPathCfgFilename(iceColorSettings.ThemeFilename, gStartupPath);
+		cfgObj.iceColors.menuOptClassicColors = iceColorSettings.menuOptClassicColors; // This is a boolean
+		cfgObj.DCTColors.ThemeFilename = genFullPathCfgFilename(DCTColorSettings.ThemeFilename, gStartupPath);
 
 		cfgFile.close();
 
@@ -5790,6 +5706,30 @@ function findFirstPrintableChar(pStr)
 	return firstPrintableIdx;
 }
 
+// Given a string of attribute characters, this function inserts the control code
+// in front of each attribute character and returns the new string.
+//
+// Parameters:
+//  pAttrCodeCharStr: A string of attribute characters (i.e., "YH" for yellow high)
+//
+// Return value: A string with the control character inserted in front of the attribute characters
+function attrCodeStr(pAttrCodeCharStr)
+{
+	if (typeof(pAttrCodeCharStr) !== "string")
+		return "";
+
+	var str = "";
+	// See this page for Synchronet color attribute codes:
+	// http://wiki.synchro.net/custom:ctrl-a_codes
+	for (var i = 0; i < pAttrCodeCharStr.length; ++i)
+	{
+		var currentChar = pAttrCodeCharStr.charAt(i);
+		if (/[krgybmcwKRGYBMCWHhIiEeFfNn01234567]/.test(currentChar))
+			str += "\x01" + currentChar;
+	}
+	return str;
+}
+
 // This function displays debug text at a given location on the screen, then
 // moves the cursor back to a given location.
 //