From 926ba890e452d903fc65f378a46d20a9c4b37607 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Fri, 25 May 2001 20:49:41 +0000
Subject: [PATCH] Added configurable NodeForm timer display interval. Fixed
 problem over-writing registry settings when closing before startup timer
 fires.

---
 src/sbbs3/ctrl/MainFormUnit.cpp | 31 ++++++++++++++++++++++++++++++-
 src/sbbs3/ctrl/MainFormUnit.h   |  3 +++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp
index 54d568e8e4..aae4afcd18 100644
--- a/src/sbbs3/ctrl/MainFormUnit.cpp
+++ b/src/sbbs3/ctrl/MainFormUnit.cpp
@@ -256,12 +256,14 @@ static void bbs_terminated(int code)
 	Screen->Cursor=crDefault;
 	MainForm->TelnetStart->Enabled=true;
 	MainForm->TelnetStop->Enabled=false;
+    Application->ProcessMessages();
 }
 static void bbs_started(void)
 {
 	Screen->Cursor=crDefault;
 	MainForm->TelnetStart->Enabled=false;
     MainForm->TelnetStop->Enabled=true;
+    Application->ProcessMessages();
 }
 static void bbs_start(void)
 {
@@ -269,6 +271,7 @@ static void bbs_start(void)
     bbs_status("Starting");
     strcpy(MainForm->bbs_startup.ctrl_dir,MainForm->CtrlDirectory.c_str());
 	_beginthread((void(*)(void*))bbs_thread,0,&MainForm->bbs_startup);
+    Application->ProcessMessages();
 }
 
 static int event_log(char *str)
@@ -380,12 +383,14 @@ static void mail_terminated(int code)
 	Screen->Cursor=crDefault;
 	MainForm->MailStart->Enabled=true;
 	MainForm->MailStop->Enabled=false;
+    Application->ProcessMessages();
 }
 static void mail_started(void)
 {
 	Screen->Cursor=crDefault;
 	MainForm->MailStart->Enabled=false;
     MainForm->MailStop->Enabled=true;
+    Application->ProcessMessages();
 }
 static void mail_start(void)
 {
@@ -393,6 +398,7 @@ static void mail_start(void)
     mail_status("Starting");
     strcpy(MainForm->mail_startup.ctrl_dir,MainForm->CtrlDirectory.c_str());
 	_beginthread((void(*)(void*))mail_server,0,&MainForm->mail_startup);
+    Application->ProcessMessages();
 }
 
 static int ftp_lputs(char *str)
@@ -487,12 +493,14 @@ static void ftp_terminated(int code)
 	Screen->Cursor=crDefault;
 	MainForm->FtpStart->Enabled=true;
 	MainForm->FtpStop->Enabled=false;
+    Application->ProcessMessages();
 }
 static void ftp_started(void)
 {
 	Screen->Cursor=crDefault;
 	MainForm->FtpStart->Enabled=false;
     MainForm->FtpStop->Enabled=true;
+    Application->ProcessMessages();
 }
 static void ftp_start(void)
 {
@@ -500,6 +508,7 @@ static void ftp_start(void)
     ftp_status("Starting");
     strcpy(MainForm->ftp_startup.ctrl_dir,MainForm->CtrlDirectory.c_str());
 	_beginthread((void(*)(void*))ftp_server,0,&MainForm->ftp_startup);
+    Application->ProcessMessages();
 }
 //---------------------------------------------------------------------------
 
@@ -515,6 +524,8 @@ __fastcall TMainForm::TMainForm(TComponent* Owner)
     LoginCommand="start telnet://localhost";
     ConfigCommand="%sSCFG %s /T2";
     MinimizeToSysTray=false;
+    NodeDisplayInterval=1;  /* seconds */
+    Initialized=false;
 
     memset(&bbs_startup,0,sizeof(bbs_startup));
     bbs_startup.size=sizeof(bbs_startup);
@@ -644,8 +655,12 @@ void __fastcall TMainForm::ViewToolbarMenuItemClick(TObject *Sender)
 //---------------------------------------------------------------------------
 void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
 {
-    SaveSettings(Sender);
+    UpTimer->Enabled=false; /* Stop updating the status bar */
 
+    if(Initialized) /* Don't overwrite registry settings with defaults */
+        SaveSettings(Sender);
+
+	StatusBar->Panels->Items[4]->Text="Closing...";
     time_t start=time(NULL);
 	while(TelnetStop->Enabled || MailStop->Enabled || FtpStop->Enabled) {
         if(time(NULL)-start>30)
@@ -657,6 +672,10 @@ void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
 //---------------------------------------------------------------------------
 void __fastcall TMainForm::SaveSettings(TObject* Sender)
 {
+	StatusBar->Panels->Items[4]->Text="Saving Settings...";
+
+    NodeForm->Timer->Interval=NodeDisplayInterval*1000;
+    
     // Write Registry keys
 	TRegistry* Registry=new TRegistry;
     if(!Registry->OpenKey(REG_KEY,true)) {
@@ -741,6 +760,7 @@ void __fastcall TMainForm::SaveSettings(TObject* Sender)
     Registry->WriteString("LoginCommand",LoginCommand);
     Registry->WriteString("ConfigCommand",ConfigCommand);
     Registry->WriteBool("MinimizeToSysTray",MinimizeToSysTray);
+    Registry->WriteInteger("NodeDisplayInterval",NodeDisplayInterval);
 
     Registry->WriteInteger("SysAutoStart",SysAutoStart);
     Registry->WriteInteger("MailAutoStart",MailAutoStart);
@@ -860,6 +880,7 @@ void __fastcall TMainForm::TelnetStopExecute(TObject *Sender)
 	Screen->Cursor=crAppStart;
     bbs_status("Terminating");
 	bbs_terminate();
+    Application->ProcessMessages();
 }
 //---------------------------------------------------------------------------
 
@@ -908,6 +929,7 @@ void __fastcall TMainForm::MailStopExecute(TObject *Sender)
 	Screen->Cursor=crAppStart;
     mail_status("Terminating");
 	mail_terminate();
+    Application->ProcessMessages();
 }
 //---------------------------------------------------------------------------
 
@@ -956,6 +978,7 @@ void __fastcall TMainForm::FtpStopExecute(TObject *Sender)
 	Screen->Cursor=crAppStart;
     ftp_status("Terminating");
 	ftp_terminate();
+    Application->ProcessMessages();
 }
 //---------------------------------------------------------------------------
 
@@ -1334,6 +1357,8 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
     	ConfigCommand=Registry->ReadString("ConfigCommand");
     if(Registry->ValueExists("MinimizeToSysTray"))
     	MinimizeToSysTray=Registry->ReadBool("MinimizeToSysTray");
+	if(Registry->ValueExists("NodeDisplayInterval"))
+    	NodeDisplayInterval=Registry->ReadInteger("NodeDisplayInterval");
 
     if(Registry->ValueExists("MailLogFile"))
     	MailLogFile=Registry->ReadInteger("MailLogFile");
@@ -1547,8 +1572,10 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender)
     if(FtpAutoStart) {
         ftp_start();
     }
+    NodeForm->Timer->Interval=NodeDisplayInterval*1000;
     NodeForm->Timer->Enabled=true;
 	StatsTimer->Enabled=true;
+    Initialized=true;
 }
 //---------------------------------------------------------------------------
 
@@ -1881,11 +1908,13 @@ void __fastcall TMainForm::PropertiesExecute(TObject *Sender)
     PropertiesDlg->LoginCmdEdit->Text=LoginCommand;
     PropertiesDlg->ConfigCmdEdit->Text=ConfigCommand;
     PropertiesDlg->CtrlDirEdit->Text=CtrlDirectory;
+    PropertiesDlg->NodeIntEdit->Text=AnsiString(NodeDisplayInterval);
     PropertiesDlg->TrayIconCheckBox->Checked=MinimizeToSysTray;
 	if(PropertiesDlg->ShowModal()==mrOk) {
         LoginCommand=PropertiesDlg->LoginCmdEdit->Text;
         ConfigCommand=PropertiesDlg->ConfigCmdEdit->Text;
         CtrlDirectory=PropertiesDlg->CtrlDirEdit->Text;
+        NodeDisplayInterval=StrToIntDef(PropertiesDlg->NodeIntEdit->Text,1);
         MinimizeToSysTray=PropertiesDlg->TrayIconCheckBox->Checked;
         SaveSettings(Sender);
     }
diff --git a/src/sbbs3/ctrl/MainFormUnit.h b/src/sbbs3/ctrl/MainFormUnit.h
index d75193dfbe..a946d8df45 100644
--- a/src/sbbs3/ctrl/MainFormUnit.h
+++ b/src/sbbs3/ctrl/MainFormUnit.h
@@ -209,6 +209,7 @@ __published:	// IDE-managed Components
     TMenuItem *HelpSysopMenuItem;
     TAction *ViewEvents;
     TMenuItem *ViewEventsMenuItem;
+    TMenuItem *ConfigureBBSMenuItem;
     void __fastcall FileExitMenuItemClick(TObject *Sender);
 	void __fastcall ViewToolbarMenuItemClick(TObject *Sender);
 	void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
@@ -268,6 +269,7 @@ __published:	// IDE-managed Components
 private:	// User declarations
 public:		// User declarations
     __fastcall TMainForm(TComponent* Owner);
+    bool            Initialized;
     bool			SysAutoStart;
     bool            MailAutoStart;
     bool            FtpAutoStart;
@@ -281,6 +283,7 @@ public:		// User declarations
     bbs_startup_t 	bbs_startup;
     mail_startup_t 	mail_startup;
     ftp_startup_t	ftp_startup;
+    int             NodeDisplayInterval;
     int             SpyTerminalWidth;
     int             SpyTerminalHeight;
     TFont*          SpyTerminalFont;
-- 
GitLab