version 0.3.33
[fms.git] / src / optionssetup.cpp
index 91ddcbc..ef0700a 100644 (file)
@@ -1,19 +1,21 @@
 #include "../include/optionssetup.h"\r
 #include "../include/db/sqlite3db.h"\r
+#include "../include/global.h"\r
 \r
 #include <Poco/Message.h>\r
 \r
 #include <string>\r
 #include <sstream>\r
 \r
-void SetupDefaultOptions()\r
+void SetupDefaultOptions(SQLite3DB::DB *db)\r
 {\r
        // OptionValue should always be inserted as a string, even if the option really isn't a string - just to keep the field data type consistent\r
 \r
+       db->Execute("BEGIN;");\r
+\r
        std::ostringstream tempstr;     // must set tempstr to "" between db inserts\r
-       SQLite3DB::DB *db=SQLite3DB::DB::Instance();\r
        SQLite3DB::Statement st=db->Prepare("INSERT INTO tblOption(Option,OptionValue) VALUES(?,?);");\r
-       SQLite3DB::Statement upd=db->Prepare("UPDATE tblOption SET Section=?, SortOrder=?, ValidValues=?, OptionDescription=? WHERE Option=?;");\r
+       SQLite3DB::Statement upd=db->Prepare("UPDATE tblOption SET Section=?, SortOrder=?, ValidValues=?, OptionDescription=?, DisplayType=?, DisplayParam1=?, DisplayParam2=?, Mode=? WHERE Option=?;");\r
        int order=0;\r
 \r
        // LogLevel\r
@@ -27,7 +29,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"1|1 - Fatal Errors|2|2 - Critical Errors|3|3 - Errors|4|4 - Warnings|5|5 - Notices|6|6 - Informational Messages|7|7 - Debug Messages|8|8 - Trace Messages");\r
        upd.Bind(3,"The maximum logging level that will be written to file.  Higher levels will include all messages from the previous levels.");\r
-       upd.Bind(4,"LogLevel");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"LogLevel");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -39,7 +45,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"true|true|false|false");\r
        upd.Bind(3,"VACUUM the database every time FMS starts.  This will defragment the free space in the database and create a smaller database file.  Vacuuming the database can be CPU and disk intensive.");\r
-       upd.Bind(4,"VacuumOnStartup");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"VacuumOnStartup");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -51,7 +61,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"A unique string shared by all clients who want to communicate with each other.  This should not be changed unless you want to create your own separate communications network.");\r
-       upd.Bind(4,"MessageBase");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MessageBase");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -63,19 +77,27 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The USK key which contains information about the latest version of FMS.");\r
-       upd.Bind(4,"FMSVersionKey");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5,"80");\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"FMSVersionKey");\r
        upd.Step();\r
        upd.Reset();\r
 \r
        st.Bind(0,"FMSVersionEdition");\r
-       st.Bind(1,"19");\r
+       st.Bind(1,FMS_VERSION_EDITION);\r
        st.Step();\r
        st.Reset();\r
        upd.Bind(0,"Program");\r
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The latest found edition of the FMS version USK.");\r
-       upd.Bind(4,"FMSVersionEdition");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"FMSVersionEdition");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -88,7 +110,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"true|true|false|false");\r
        upd.Bind(3,"Start NNTP server.");\r
-       upd.Bind(4,"StartNNTP");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"StartNNTP");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -101,7 +127,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The port that the NNTP service will listen for incoming connections.");\r
-       upd.Bind(4,"NNTPListenPort");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"NNTPListenPort");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -114,7 +144,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"A comma separated list of valid IPv4 or IPv6 addresses/hostnames that the NNTP service will try to bind to.");\r
-       upd.Bind(4,"NNTPBindAddresses");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"NNTPBindAddresses");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -126,7 +160,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"true|true|false|false");\r
        upd.Bind(3,"Allow posting messages from NNTP.  Setting to false will make the newsgroups read only.");\r
-       upd.Bind(4,"NNTPAllowPost");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"NNTPAllowPost");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -138,7 +176,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"true|true|false|false");\r
        upd.Bind(3,"Start HTTP server.  WARNING: If you turn this off, you won't be able to access the administration pages.");\r
-       upd.Bind(4,"StartHTTP");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"StartHTTP");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -150,7 +192,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Port HTTP server will listen on.");\r
-       upd.Bind(4,"HTTPListenPort");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"HTTPListenPort");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -162,7 +208,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Comma separated list of addresses and/or subnet masks that are allowed access to the administration pages.  Default is localhost only. + allows a host, - denies a host.");\r
-       upd.Bind(4,"HTTPAccessControl");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"HTTPAccessControl");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -175,7 +225,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"true|true|false|false");\r
        upd.Bind(3,"Set to true to start the Freenet Updater thread and connect to Freenet.  Set to false to prevent communication with Freenet.");\r
-       upd.Bind(4,"StartFreenetUpdater");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"StartFreenetUpdater");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -188,7 +242,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Host name or address of Freenet node.");\r
-       upd.Bind(4,"FCPHost");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"FCPHost");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -201,7 +259,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The port that Freenet is listening for FCP connections on.");\r
-       upd.Bind(4,"FCPPort");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"FCPPort");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -213,7 +275,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The port that Freenet is listening for http connections on.");\r
-       upd.Bind(4,"FProxyPort");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"FProxyPort");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -225,7 +291,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Maximum number of concurrent requests for new Identity xml files");\r
-       upd.Bind(4,"MaxIdentityRequests");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MaxIdentityRequests");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -237,7 +307,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Maximum number of concurrent identities requesting IdentityIntroduction xml files.  Each identity may have multiple requests pending.");\r
-       upd.Bind(4,"MaxIdentityIntroductionRequests");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MaxIdentityIntroductionRequests");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -249,7 +323,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Maximum number of concurrent requests for new IntroductionPuzzle xml files");\r
-       upd.Bind(4,"MaxIntroductionPuzzleRequests");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MaxIntroductionPuzzleRequests");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -261,7 +339,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Maximum number of concurrent requests for new Trust Lists");\r
-       upd.Bind(4,"MaxTrustListRequests");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MaxTrustListRequests");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -273,7 +355,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Maximum number of concurrent requests for new Message Lists");\r
-       upd.Bind(4,"MaxMessageListRequests");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MaxMessageListRequests");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -285,7 +371,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Maximum number of concurrent requests for new Messages");\r
-       upd.Bind(4,"MaxMessageRequests");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MaxMessageRequests");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -297,7 +387,43 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The maximum number of concurrent requests for new Board Lists.  Set to 0 to disable.");\r
-       upd.Bind(4,"MaxBoardListRequests");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MaxBoardListRequests");\r
+       upd.Step();\r
+       upd.Reset();\r
+\r
+       st.Bind(0,"MaxFailureCount");\r
+       st.Bind(1,"1000");\r
+       st.Step();\r
+       st.Reset();\r
+       upd.Bind(0,"Requests");\r
+       upd.Bind(1,order++);\r
+       upd.Bind(2);\r
+       upd.Bind(3,"The maximum number of failed message requests an identity must accumulate before you will completely ignore an identity.  Request failures can happen even under the best circumstances, and may accumulate rapidly, so it is best to keep this at a high level to avoid false positives.");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"MaxFailureCount");\r
+       upd.Step();\r
+       upd.Reset();\r
+\r
+       st.Bind(0,"FailureCountReduction");\r
+       st.Bind(1,"500");\r
+       st.Step();\r
+       st.Reset();\r
+       upd.Bind(0,"Requests");\r
+       upd.Bind(1,order++);\r
+       upd.Bind(2);\r
+       upd.Bind(3,"Each identity's failure count will be reduced by this amount every day.");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"FailureCountReduction");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -309,7 +435,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Specifies a local message trust level that a peer must have before its messages will be downloaded.");\r
-       upd.Bind(4,"MinLocalMessageTrust");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"MinLocalMessageTrust");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -321,7 +451,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Specifies a peer message trust level that a peer must have before its messages will be downloaded.");\r
-       upd.Bind(4,"MinPeerMessageTrust");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"MinPeerMessageTrust");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -333,7 +467,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Specifies a local trust list trust level that a peer must have before its trust list will be included in the weighted average.  Any peers below this number will be excluded from the results.");\r
-       upd.Bind(4,"MinLocalTrustListTrust");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"MinLocalTrustListTrust");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -345,7 +483,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Specifies a peer trust list trust level that a peer must have before its trust list will be included in the weighted average.  Any peers below this number will be excluded from the results.");\r
-       upd.Bind(4,"MinPeerTrustListTrust");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"MinPeerTrustListTrust");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -357,7 +499,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"true|true|false|false");\r
        upd.Bind(3,"Set to true if you want your local trust levels to override the peer levels when determining which identities you will poll.");\r
-       upd.Bind(4,"LocalTrustOverridesPeerTrust");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"LocalTrustOverridesPeerTrust");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -369,7 +515,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The maximum number of days backward that messages will be downloaded from each identity");\r
-       upd.Bind(4,"MessageDownloadMaxDaysBackward");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"MessageDownloadMaxDaysBackward");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -381,7 +531,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The number of days backward that messages you have inserted will appear in your MessageLists");\r
-       upd.Bind(4,"MessageListDaysBackward");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"MessageListDaysBackward");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -393,7 +547,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The maximum number of messages you will download from each peer on a given day.");\r
-       upd.Bind(4,"MaxPeerMessagesPerDay");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"MaxPeerMessagesPerDay");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -405,7 +563,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"The maximum number of boards a received message may be sent to.  Boards over this limit will be ignored.");\r
-       upd.Bind(4,"MaxBoardsPerMessage");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"MaxBoardsPerMessage");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -417,7 +579,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"true|true|false|false");\r
        upd.Bind(3,"Set to true to automatically save messages posted to new boards.  Set to false to ignore messages to new boards.");\r
-       upd.Bind(4,"SaveMessagesFromNewBoards");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"SaveMessagesFromNewBoards");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -429,7 +595,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"How much the local message trust level of an identity should change when you reply to one of their messages.");\r
-       upd.Bind(4,"ChangeMessageTrustOnReply");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"ChangeMessageTrustOnReply");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -441,7 +611,11 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2,"true|true|false|false");\r
        upd.Bind(3,"Set to true to automatically create new identities when you send a message using a new name.  If you set this to false, posting messages will fail until you manually create the identity.");\r
-       upd.Bind(4,"AddNewPostFromIdentities");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"AddNewPostFromIdentities");\r
        upd.Step();\r
        upd.Reset();\r
 \r
@@ -453,8 +627,114 @@ void SetupDefaultOptions()
        upd.Bind(1,order++);\r
        upd.Bind(2);\r
        upd.Bind(3,"Automatically delete messages older than this many days.");\r
-       upd.Bind(4,"DeleteMessagesOlderThan");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"DeleteMessagesOlderThan");\r
+       upd.Step();\r
+       upd.Reset();\r
+\r
+#ifdef FROST_SUPPORT\r
+\r
+       st.Bind(0,"DownloadFrostMessages");\r
+       st.Bind(1,"false");\r
+       st.Step();\r
+       st.Reset();\r
+       upd.Bind(0,"Frost Support");\r
+       upd.Bind(1,order++);\r
+       upd.Bind(2,"true|true|false|false");\r
+       upd.Bind(3,"Enable downloading of Frost messages.");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"DownloadFrostMessages");\r
+       upd.Step();\r
+       upd.Reset();\r
+\r
+       st.Bind(0,"FrostMessageBase");\r
+       st.Bind(1,"frost");\r
+       st.Step();\r
+       st.Reset();\r
+       upd.Bind(0,"Frost Support");\r
+       upd.Bind(1,order++);\r
+       upd.Bind(2);\r
+       upd.Bind(3,"A unique string used by Frost clients who want to communicate with each other.");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"FrostMessageBase");\r
        upd.Step();\r
        upd.Reset();\r
 \r
+       st.Bind(0,"FrostBoardPrefix");\r
+       st.Bind(1,"frost.");\r
+       st.Step();\r
+       st.Reset();\r
+       upd.Bind(0,"Frost Support");\r
+       upd.Bind(1,order++);\r
+       upd.Bind(2);\r
+       upd.Bind(3,"Messages to boards defined in FMS with this prefix will be downloaded from Frost.  You must manually add boards with this prefix to FMS to download Frost messages from those boards.  The prefix is removed to determine the name of the Frost board to download messages from.");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"advanced");\r
+       upd.Bind(8,"FrostBoardPrefix");\r
+       upd.Step();\r
+       upd.Reset();\r
+\r
+       st.Bind(0,"FrostSaveAnonymousMessages");\r
+       st.Bind(1,"true");\r
+       st.Step();\r
+       st.Reset();\r
+       upd.Bind(0,"Frost Support");\r
+       upd.Bind(1,order++);\r
+       upd.Bind(2,"true|true|false|false");\r
+       upd.Bind(3,"Save Frost messages posted by Anonymous authors.");\r
+       upd.Bind(4,"select");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"FrostSaveAnonymousMessages");\r
+       upd.Step();\r
+       upd.Reset();\r
+\r
+       st.Bind(0,"FrostMessageMaxDaysBackward");\r
+       st.Bind(1,"5");\r
+       st.Step();\r
+       st.Reset();\r
+       upd.Bind(0,"Frost Support");\r
+       upd.Bind(1,order++);\r
+       upd.Bind(2);\r
+       upd.Bind(3,"The maximum number of days backward that Frost messages will be downloaded.");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"FrostMessageMaxDaysBackward");\r
+       upd.Step();\r
+       upd.Reset();\r
+\r
+       st.Bind(0,"FrostMaxMessageRequests");\r
+       st.Bind(1,"20");\r
+       st.Step();\r
+       st.Reset();\r
+       upd.Bind(0,"Frost Support");\r
+       upd.Bind(1,order++);\r
+       upd.Bind(2);\r
+       upd.Bind(3,"The maximum number of concurrent requests for new Frost messages.");\r
+       upd.Bind(4,"textbox");\r
+       upd.Bind(5);\r
+       upd.Bind(6);\r
+       upd.Bind(7,"simple");\r
+       upd.Bind(8,"FrostMaxMessageRequests");\r
+       upd.Step();\r
+       upd.Reset();\r
+\r
+#endif // FROST_SUPPORT\r
+\r
+       db->Execute("COMMIT;");\r
+\r
 }\r