2022-08-28 09:35:46 +01:00
// Mail and Chat Server for BPQ32 Packet Switch
//
// Configuration Module
# include "bpqmail.h"
# define C_PAGES 7
int CurrentPage = 0 ; // Page currently on show in tabbed Dialog
# define BBSPARAMS 0
# define ISPPARAMS 1
# define MAINTPARAMS 2
# define WELCOMEMSGS 3
# define PROMPTS 4
# define FILTERS 5
# define WPUPDATE 6
typedef struct tag_dlghdr {
HWND hwndTab ; // tab control
HWND hwndDisplay ; // current child dialog box
RECT rcDisplay ; // display rectangle for the tab control
DLGTEMPLATE * apRes [ C_PAGES ] ;
} DLGHDR ;
HWND hwndDlg ; // Config Dialog
HWND hwndDisplay ; // Current child dialog box
HWND hCheck [ 33 ] ;
HWND hNullCheck [ 33 ] ;
HWND hSendMF [ 33 ] ;
HWND hSendHDDR [ 33 ] ;
HWND hLabel [ 33 ] ;
HWND hUIBox [ 33 ] ;
HFONT hFont ;
LOGFONT LFTTYFONT ;
char CurrentConfigCall [ 20 ] ; // Current user or bbs
int CurrentConfigIndex ; // Index of current user record
int CurrentMsgIndex ; // Index of current Msg record
struct UserInfo * CurrentBBS ; // User Record of selected BBS iin Forwarding Config;
struct UserInfo * MsgBBSList [ NBBBS + 2 ] = { 0 } ; // Sorted BBS List
char InfoBoxText [ 100 ] ; // Text to display in Config Info Popup
char Filter_FROM [ 20 ] ;
char Filter_TO [ 20 ] ;
char Filter_VIA [ 60 ] ; // Filters for Edit Message Dialog
char Filter_BID [ 16 ] ; // Filters for Edit Message Dialog
extern char LTFROMString [ 2048 ] ;
extern char LTTOString [ 2048 ] ;
extern char LTATString [ 2048 ] ;
VOID * GetOverrideFromString ( char * input ) ;
extern time_t MaintClock ; // Time to run housekeeping
DLGTEMPLATE * WINAPI DoLockDlgRes ( LPCSTR lpszResName ) ;
VOID WINAPI OnSelChanged ( HWND hwndDlg ) ;
VOID WINAPI OnChildDialogInit ( HWND hwndDlg ) ;
VOID WINAPI OnTabbedDialogInit ( HWND hwndDlg ) ;
VOID SaveWPConfig ( HWND hDlg ) ;
PrintMessage ( struct MsgInfo * Msg ) ;
BOOL ForwardMessagetoFile ( struct MsgInfo * Msg , FILE * Handle ) ;
VOID TidyPrompts ( ) ;
struct UserInfo * FindBBS ( char * Name ) ;
INT_PTR CALLBACK UIDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam ) ;
INT_PTR CALLBACK EditMsgTextDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam ) ;
VOID SaveMAINTConfigFromDialog ( ) ;
VOID TidyWelcomeMsg ( char * * pPrompt ) ;
// POP3 Password is encrypted by xor'ing it with an MD5 hash of the hostname and pop3 server name
double GetDlgItemFloat ( HWND hDlg , int DlgItem , BOOL * lpTranslated , BOOL bSigned )
{
char Num [ 32 ] ;
double ret = 0.0 ;
GetDlgItemText ( hDlg , DlgItem , Num , 31 ) ;
return atof ( Num ) ;
}
BOOL SetDlgItemFloat ( HWND hDlg , int DlgItem , double Value , BOOL bSigned )
{
char Num [ 32 ] ;
sprintf ( Num , " %.2f " , Value ) ;
while ( Num [ strlen ( Num ) - 1 ] = = ' 0 ' )
Num [ strlen ( Num ) - 1 ] = 0 ;
if ( Num [ strlen ( Num ) - 1 ] = = ' . ' )
Num [ strlen ( Num ) - 1 ] = 0 ;
return SetDlgItemText ( hDlg , DlgItem , Num ) ;
}
int ww , wh , w , h , hpos , vpos ;
int xmargin ;
int ymargin ;
INT_PTR CALLBACK ConfigWndProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
RECT Rect ;
SCROLLINFO Sinfo ;
int ret ;
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
switch ( message )
{
case WM_INITDIALOG :
ShowScrollBar ( hDlg , SB_BOTH , FALSE ) ; // Hide them till needed
OnTabbedDialogInit ( hDlg ) ;
// initialise scroll bars
xmargin = 6 ;
ymargin = 2 + GetSystemMetrics ( SM_CYCAPTION ) ;
hpos = vpos = 0 ;
return ( INT_PTR ) TRUE ;
case WM_SIZE :
w = LOWORD ( lParam ) ;
h = HIWORD ( lParam ) ;
// If window is smaller than client area enable scroll bars
ret = GetWindowRect ( hwndDisplay , & Rect ) ;
ww = Rect . right - Rect . left ;
wh = Rect . bottom - Rect . top ;
if ( ww < = w & & ( wh + ymargin ) < = h )
{
ShowScrollBar ( hDlg , SB_BOTH , FALSE ) ; // Hide them till needed
MoveWindow ( hwndDisplay , xmargin , ymargin , ww , wh , TRUE ) ;
hpos = vpos = 0 ;
return TRUE ;
}
ShowScrollBar ( hDlg , SB_BOTH , TRUE ) ;
Sinfo . cbSize = sizeof ( SCROLLINFO ) ;
Sinfo . fMask = SIF_ALL ;
Sinfo . nMin = 0 ;
Sinfo . nMax = ww + xmargin ;
Sinfo . nPage = w ;
Sinfo . nPos = hpos ;
SetScrollInfo ( hDlg , SB_HORZ , & Sinfo , TRUE ) ;
Sinfo . cbSize = sizeof ( SCROLLINFO ) ;
Sinfo . fMask = SIF_ALL ;
Sinfo . nMin = 0 ;
Sinfo . nMax = wh + ymargin ;
Sinfo . nPage = h ;
Sinfo . nPos = hpos ;
SetScrollInfo ( hDlg , SB_VERT , & Sinfo , TRUE ) ;
return TRUE ;
case WM_HSCROLL :
switch ( LOWORD ( wParam ) )
{
case SB_PAGELEFT :
hpos - = 20 ;
if ( hpos < 0 )
hpos = 0 ;
goto UpdateHPos ;
case SB_LINELEFT :
if ( hpos )
hpos - - ;
goto UpdateHPos ;
case SB_PAGERIGHT :
hpos + = 20 ;
goto UpdateHPos ;
case SB_LINERIGHT :
hpos + + ;
goto UpdateHPos ;
case SB_THUMBPOSITION :
hpos = HIWORD ( wParam ) ;
UpdateHPos :
// Need to update Scroll Bar
Sinfo . cbSize = sizeof ( SCROLLINFO ) ;
Sinfo . fMask = SIF_ALL ;
Sinfo . nMin = 0 ;
Sinfo . nMax = ww + xmargin ;
Sinfo . nPage = w ;
Sinfo . nPos = hpos ;
SetScrollInfo ( hDlg , SB_HORZ , & Sinfo , TRUE ) ;
// Move Client Window
MoveWindow ( hwndDisplay , xmargin - hpos , ymargin - vpos , ww , wh , TRUE ) ;
return TRUE ;
}
return TRUE ;
case WM_VSCROLL :
switch ( LOWORD ( wParam ) )
{
case SB_PAGEUP :
vpos - = 20 ;
if ( vpos < 0 )
vpos = 0 ;
goto UpdateVPos ;
case SB_LINEUP :
if ( vpos )
vpos - - ;
goto UpdateVPos ;
case SB_PAGEDOWN :
vpos + = 20 ;
goto UpdateVPos ;
case SB_LINEDOWN :
vpos + + ;
goto UpdateVPos ;
case SB_THUMBPOSITION :
vpos = HIWORD ( wParam ) ;
UpdateVPos :
// Need to update Scroll Bar
Sinfo . cbSize = sizeof ( SCROLLINFO ) ;
Sinfo . fMask = SIF_ALL ;
Sinfo . nMin = 0 ;
Sinfo . nMax = wh + ymargin ;
Sinfo . nPage = h ;
Sinfo . nPos = vpos ;
SetScrollInfo ( hDlg , SB_VERT , & Sinfo , TRUE ) ;
// Move Client Window
MoveWindow ( hwndDisplay , xmargin - hpos , ymargin - vpos , ww , wh , TRUE ) ;
return TRUE ;
}
return TRUE ;
case WM_NOTIFY :
switch ( ( ( LPNMHDR ) lParam ) - > code )
{
case TCN_SELCHANGE :
OnSelChanged ( hDlg ) ;
// Check if scroll now needed
ret = GetWindowRect ( hwndDisplay , & Rect ) ;
ww = Rect . right - Rect . left ;
wh = Rect . bottom - Rect . top ;
if ( ww < = w & & ( wh + 27 ) < = h )
{
ShowScrollBar ( hDlg , SB_BOTH , FALSE ) ; // Hide them till needed
return TRUE ;
}
ShowScrollBar ( hDlg , SB_BOTH , TRUE ) ;
return TRUE ;
// More cases on WM_NOTIFY switch.
case NM_CHAR :
return TRUE ;
}
break ;
case WM_CTLCOLORDLG :
return ( LONG ) bgBrush ;
case WM_CTLCOLORSTATIC :
{
HDC hdcStatic = ( HDC ) wParam ;
SetTextColor ( hdcStatic , RGB ( 0 , 0 , 0 ) ) ;
SetBkMode ( hdcStatic , TRANSPARENT ) ;
return ( LONG ) bgBrush ;
}
case WM_KEYUP :
if ( wParam = = VK_TAB )
return TRUE ;
break ;
case WM_COMMAND :
switch ( LOWORD ( wParam ) )
{
case IDOK :
case IDCANCEL :
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return TRUE ;
}
}
return FALSE ;
}
INT_PTR CALLBACK InfoDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
int Command ;
UNREFERENCED_PARAMETER ( lParam ) ;
switch ( message )
{
case WM_INITDIALOG :
SetDlgItemText ( hDlg , 5050 , InfoBoxText ) ;
return ( INT_PTR ) TRUE ;
case WM_COMMAND :
Command = LOWORD ( wParam ) ;
switch ( Command )
{
case 0 :
case IDCANCEL :
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
}
break ;
}
return ( INT_PTR ) FALSE ;
}
INT_PTR CALLBACK ChildDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
// This processes messages from controls on the tab subpages
int Command ;
switch ( message )
{
case WM_NOTIFY :
switch ( ( ( LPNMHDR ) lParam ) - > code )
{
case TCN_SELCHANGE :
OnSelChanged ( hDlg ) ;
return TRUE ;
// More cases on WM_NOTIFY switch.
case NM_CHAR :
return TRUE ;
}
break ;
case WM_INITDIALOG :
OnChildDialogInit ( hDlg ) ;
return ( INT_PTR ) TRUE ;
case WM_CTLCOLORDLG :
return ( LONG ) bgBrush ;
case WM_CTLCOLORSTATIC :
{
HDC hdcStatic = ( HDC ) wParam ;
SetTextColor ( hdcStatic , RGB ( 0 , 0 , 0 ) ) ;
SetBkMode ( hdcStatic , TRANSPARENT ) ;
return ( LONG ) bgBrush ;
}
case WM_COMMAND :
Command = LOWORD ( wParam ) ;
if ( Command = = 2002 )
return TRUE ;
switch ( Command )
{
case IDOK :
case IDCANCEL :
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
case IDC_UICONFIG :
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_UICONFIG ) , hWnd , UIDialogProc ) ;
return TRUE ;
case IDC_BBSSAVE :
SaveBBSConfig ( ) ;
return TRUE ;
case IDC_ISPSAVE :
SaveISPConfig ( ) ;
return TRUE ;
case IDM_MAINTSAVE :
SaveMAINTConfigFromDialog ( ) ;
return TRUE ;
case IDM_MSGSAVE :
SaveWelcomeMsgs ( ) ;
return TRUE ;
case IDM_PROMPTSAVE :
SavePrompts ( ) ;
return TRUE ;
case IDC_FILTERSAVE :
SaveFilters ( hDlg ) ;
return TRUE ;
case IDC_WPSAVE :
SaveWPConfig ( hDlg ) ;
return TRUE ;
}
break ;
}
return ( INT_PTR ) FALSE ;
}
//The following function processes the WM_INITDIALOG message for the main dialog box. The function allocates the DLGHDR structure, loads the dialog template resources for the child dialog boxes, and creates the tab control.
//The size of each child dialog box is specified by the DLGTEMPLATE structure. The function examines the size of each dialog box and uses the macro for the TCM_ADJUSTRECT message to calculate an appropriate size for the tab control. Then it sizes the dialog box and positions the two buttons accordingly. This example sends TCM_ADJUSTRECT by using the TabCtrl_AdjustRect macro.
VOID WINAPI OnTabbedDialogInit ( HWND hDlg )
{
DLGHDR * pHdr = ( DLGHDR * ) LocalAlloc ( LPTR , sizeof ( DLGHDR ) ) ;
DWORD dwDlgBase = GetDialogBaseUnits ( ) ;
int cxMargin = LOWORD ( dwDlgBase ) / 4 ;
int cyMargin = HIWORD ( dwDlgBase ) / 8 ;
TC_ITEM tie ;
RECT rcTab ;
int i , pos ;
INITCOMMONCONTROLSEX init ;
hwndDlg = hDlg ; // Save Window Handle
// Save a pointer to the DLGHDR structure.
SetWindowLong ( hwndDlg , GWL_USERDATA , ( LONG ) pHdr ) ;
// Create the tab control.
init . dwICC = ICC_STANDARD_CLASSES ;
init . dwSize = sizeof ( init ) ;
i = InitCommonControlsEx ( & init ) ;
pHdr - > hwndTab = CreateWindow ( WC_TABCONTROL , " " , WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE ,
0 , 0 , 100 , 100 , hwndDlg , NULL , hInst , NULL ) ;
if ( pHdr - > hwndTab = = NULL ) {
// handle error
}
// Add a tab for each of the child dialog boxes.
tie . mask = TCIF_TEXT | TCIF_IMAGE ;
tie . iImage = - 1 ;
tie . pszText = " BBS Params " ;
TabCtrl_InsertItem ( pHdr - > hwndTab , 0 , & tie ) ;
tie . pszText = " ISP Interface " ;
TabCtrl_InsertItem ( pHdr - > hwndTab , 1 , & tie ) ;
tie . pszText = " Housekeeping " ;
TabCtrl_InsertItem ( pHdr - > hwndTab , 2 , & tie ) ;
tie . pszText = " Welcome Msgs " ;
TabCtrl_InsertItem ( pHdr - > hwndTab , 3 , & tie ) ;
tie . pszText = " Prompts " ;
TabCtrl_InsertItem ( pHdr - > hwndTab , 4 , & tie ) ;
tie . pszText = " Msg Filters " ;
TabCtrl_InsertItem ( pHdr - > hwndTab , 5 , & tie ) ;
tie . pszText = " WP Update " ;
TabCtrl_InsertItem ( pHdr - > hwndTab , 6 , & tie ) ;
// Lock the resources for the three child dialog boxes.
pHdr - > apRes [ 0 ] = DoLockDlgRes ( " BBS_CONFIG " ) ;
pHdr - > apRes [ 1 ] = DoLockDlgRes ( " ISP_CONFIG " ) ;
pHdr - > apRes [ 2 ] = DoLockDlgRes ( " MAINT " ) ;
pHdr - > apRes [ 3 ] = DoLockDlgRes ( " WELCOMEMSG " ) ;
pHdr - > apRes [ 4 ] = DoLockDlgRes ( " BBSPROMPTS " ) ;
pHdr - > apRes [ 5 ] = DoLockDlgRes ( " FILTERS " ) ;
pHdr - > apRes [ 6 ] = DoLockDlgRes ( " WPUPDATE " ) ;
// Determine the bounding rectangle for all child dialog boxes.
SetRectEmpty ( & rcTab ) ;
for ( i = 0 ; i < C_PAGES - 1 ; i + + )
{
if ( pHdr - > apRes [ i ] - > cx > rcTab . right )
rcTab . right = pHdr - > apRes [ i ] - > cx ;
if ( pHdr - > apRes [ i ] - > cy > rcTab . bottom )
rcTab . bottom = pHdr - > apRes [ i ] - > cy ;
}
MapDialogRect ( hwndDlg , & rcTab ) ;
// rcTab.right = rcTab.right * LOWORD(dwDlgBase) / 4;
// rcTab.bottom = rcTab.bottom * HIWORD(dwDlgBase) / 8;
// Calculate how large to make the tab control, so
// the display area can accomodate all the child dialog boxes.
TabCtrl_AdjustRect ( pHdr - > hwndTab , TRUE , & rcTab ) ;
OffsetRect ( & rcTab , cxMargin - rcTab . left , cyMargin - rcTab . top ) ;
// Calculate the display rectangle.
CopyRect ( & pHdr - > rcDisplay , & rcTab ) ;
TabCtrl_AdjustRect ( pHdr - > hwndTab , FALSE , & pHdr - > rcDisplay ) ;
// Set the size and position of the tab control, buttons,
// and dialog box.
SetWindowPos ( pHdr - > hwndTab , NULL , rcTab . left , rcTab . top , rcTab . right - rcTab . left , rcTab . bottom - rcTab . top , SWP_NOZORDER ) ;
// Move the Buttons to bottom of page
pos = rcTab . left + cxMargin ;
// Size the dialog box.
SetWindowPos ( hwndDlg , NULL , 0 , 0 , rcTab . right + cyMargin + 2 * GetSystemMetrics ( SM_CXDLGFRAME ) ,
rcTab . bottom + 2 * cyMargin + 2 * GetSystemMetrics ( SM_CYDLGFRAME ) + GetSystemMetrics ( SM_CYCAPTION ) ,
SWP_NOMOVE | SWP_NOZORDER ) ;
// Simulate selection of the first item.
OnSelChanged ( hwndDlg ) ;
}
// DoLockDlgRes - loads and locks a dialog template resource.
// Returns a pointer to the locked resource.
// lpszResName - name of the resource
DLGTEMPLATE * WINAPI DoLockDlgRes ( LPCSTR lpszResName )
{
HRSRC hrsrc = FindResource ( NULL , lpszResName , RT_DIALOG ) ;
HGLOBAL hglb = LoadResource ( hInst , hrsrc ) ;
return ( DLGTEMPLATE * ) LockResource ( hglb ) ;
}
//The following function processes the TCN_SELCHANGE notification message for the main dialog box. The function destroys the dialog box for the outgoing page, if any. Then it uses the CreateDialogIndirect function to create a modeless dialog box for the incoming page.
// OnSelChanged - processes the TCN_SELCHANGE notification.
// hwndDlg - handle of the parent dialog box
VOID WINAPI OnSelChanged ( HWND hwndDlg )
{
char Nodes [ 1000 ] = " " ;
char Text [ 10000 ] = " " ;
char Line [ 80 ] ;
struct Override * * Call ;
char Time [ 10 ] ;
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
CurrentPage = TabCtrl_GetCurSel ( pHdr - > hwndTab ) ;
// Destroy the current child dialog box, if any.
if ( pHdr - > hwndDisplay ! = NULL )
DestroyWindow ( pHdr - > hwndDisplay ) ;
// Create the new child dialog box.
pHdr - > hwndDisplay = CreateDialogIndirect ( hInst , pHdr - > apRes [ CurrentPage ] , hwndDlg , ChildDialogProc ) ;
hwndDisplay = pHdr - > hwndDisplay ; // Save
// Fill in the controls
switch ( CurrentPage )
{
case BBSPARAMS :
SetDlgItemText ( pHdr - > hwndDisplay , IDC_BBSCall , BBSName ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_SYSOPCALL , SYSOPCall ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_SYSTOSYSOPCALL , SendSYStoSYSOPCall ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_BBSTOSYSOPCALL , SendBBStoSYSOPCall ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_DONTHOLDNEW , DontHoldNewUsers ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_FORWARDTOBBS , ForwardToMe ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_NONAME , AllowAnon ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_USERRKILLT , ! UserCantKillT ) ; // Note negative logic
CheckDlgButton ( pHdr - > hwndDisplay , IDC_NOHOMEBBS , DontNeedHomeBBS ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_DONTCHECKFROM , DontCheckFromCall ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_DEFAULTNOWINLINK , DefaultNoWINLINK ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_HRoute , HRoute ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_BaseDir , BaseDirRaw ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_BBSAppl , BBSApplNum , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_BBSStreams , MaxStreams , FALSE ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_ENABLEUI , EnableUI ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , MAILFOR_MINS , MailForInterval , FALSE ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_REFUSEBULLS , RefuseBulls ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_KNOWNUSERS , OnlyKnown ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_POP3Port , POP3InPort , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_NNTPPort , NNTPInPort , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_SMTPPort , SMTPInPort , FALSE ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_REMOTEEMAIL , RemoteEmail ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_AMPR , AMPRDomain ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_FORWARDAMPR , SendAMPRDirect ) ;
break ;
case ISPPARAMS :
CheckDlgButton ( pHdr - > hwndDisplay , IDC_ISP_Gateway_Enabled , ISP_Gateway_Enabled ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_POP3Timer , ISPPOP3Interval , FALSE ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_MyMailDomain , MyDomain ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_ISPSMTPName , ISPSMTPName ) ;
SetDlgItemText ( pHdr - > hwndDisplay , SMTP_EHELO , ISPEHLOName ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_ISPSMTPPort , ISPSMTPPort , FALSE ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_ISPPOP3Name , ISPPOP3Name ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_ISPPOP3Port , ISPPOP3Port , FALSE ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_ISPAccountName , ISPAccountName ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_ISPAccountPass , ISPAccountPass ) ;
CheckDlgButton ( pHdr - > hwndDisplay , ISP_SMTP_AUTH , SMTPAuthNeeded ) ;
break ;
case MAINTPARAMS :
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_MAXMSG , MaxMsgno , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_BIDLIFETIME , BidLifetime , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_USERLIFETIME , UserLifetime , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_LOGLIFETIME , LogAge , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDC_MAINTINTERVAL , MaintInterval , FALSE ) ;
sprintf ( Time , " %04d " , MaintTime ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDC_MAINTTIME , Time ) ;
SetDlgItemFloat ( pHdr - > hwndDisplay , IDM_PR , PR , FALSE ) ;
SetDlgItemFloat ( pHdr - > hwndDisplay , IDM_PUR , PUR , FALSE ) ;
SetDlgItemFloat ( pHdr - > hwndDisplay , IDM_PF , PF , FALSE ) ;
SetDlgItemFloat ( pHdr - > hwndDisplay , IDM_PNF , PNF , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDM_BF , BF , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDM_BNF , BNF , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDM_NTSD , NTSD , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDM_NTSF , NTSF , FALSE ) ;
SetDlgItemInt ( pHdr - > hwndDisplay , IDM_NTSU , NTSU , FALSE ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_DELETETORECYCLE , DeletetoRecycleBin ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_MAINTNOMAIL , SuppressMaintEmail ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_MAINTSAVEREG , SaveRegDuringMaint ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_OVERRIDEUNSENT , OverrideUnsent ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_MAINTNONDELIVERY , SendNonDeliveryMsgs ) ;
CheckDlgButton ( pHdr - > hwndDisplay , IDC_MAINTTRAFFIC , GenerateTrafficReport ) ;
if ( LTFROM )
{
Call = LTFROM ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s, %d \r \n " , Call [ 0 ] - > Call , Call [ 0 ] - > Days ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDM_LTFROM , Text ) ;
Text [ 0 ] = 0 ;
if ( LTTO )
{
Call = LTTO ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s, %d \r \n " , Call [ 0 ] - > Call , Call [ 0 ] - > Days ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDM_LTTO , Text ) ;
Text [ 0 ] = 0 ;
if ( LTAT )
{
Call = LTAT ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s, %d \r \n " , Call [ 0 ] - > Call , Call [ 0 ] - > Days ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDM_LTAT , Text ) ;
Text [ 0 ] = 0 ;
break ;
case WELCOMEMSGS :
SetDlgItemText ( pHdr - > hwndDisplay , IDM_USERMSG , WelcomeMsg ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDM_NEWUSERMSG , NewWelcomeMsg ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDM_EXPERTUSERMSG , ExpertWelcomeMsg ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDM_SIGNOFF , SignoffMsg ) ;
break ;
case PROMPTS :
SetDlgItemText ( pHdr - > hwndDisplay , IDM_USERMSG , Prompt ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDM_NEWUSERMSG , NewPrompt ) ;
SetDlgItemText ( pHdr - > hwndDisplay , IDM_EXPERTUSERMSG , ExpertPrompt ) ;
break ;
case FILTERS :
Text [ 0 ] = 0 ;
if ( RejFrom )
{
char * * Call = RejFrom ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s \r \n " , Call [ 0 ] ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDC_REJFROM , Text ) ;
Text [ 0 ] = 0 ;
if ( RejTo )
{
char * * Call = RejTo ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s \r \n " , Call [ 0 ] ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDC_REJTO , Text ) ;
Text [ 0 ] = 0 ;
if ( RejAt )
{
char * * Call = RejAt ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s \r \n " , Call [ 0 ] ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDC_REJAT , Text ) ;
Text [ 0 ] = 0 ;
if ( RejBID )
{
char * * Call = RejBID ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s \r \n " , Call [ 0 ] ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDC_REJBID , Text ) ;
Text [ 0 ] = 0 ;
if ( HoldFrom )
{
char * * Call = HoldFrom ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s \r \n " , Call [ 0 ] ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDC_HOLDFROM , Text ) ;
Text [ 0 ] = 0 ;
if ( HoldTo )
{
char * * Call = HoldTo ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s \r \n " , Call [ 0 ] ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDC_HOLDTO , Text ) ;
Text [ 0 ] = 0 ;
if ( HoldAt )
{
char * * Call = HoldAt ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s \r \n " , Call [ 0 ] ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDC_HOLDAT , Text ) ;
Text [ 0 ] = 0 ;
if ( HoldBID )
{
char * * Call = HoldBID ;
while ( Call [ 0 ] )
{
sprintf ( Line , " %s \r \n " , Call [ 0 ] ) ;
strcat ( Text , Line ) ;
Call + + ;
}
}
SetDlgItemText ( pHdr - > hwndDisplay , IDC_HOLDBID , Text ) ;
break ;
case WPUPDATE :
if ( SendWPAddrs )
{
char * * Calls = SendWPAddrs ;
char Text [ 10000 ] = " " ;
while ( Calls [ 0 ] )
{
strcat ( Text , Calls [ 0 ] ) ;
strcat ( Text , " \r \n " ) ;
Calls + + ;
}
SetDlgItemText ( hwndDisplay , IDC_WPTO , Text ) ;
}
SendDlgItemMessage ( hwndDisplay , IDC_WPTYPE , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " B " ) ;
SendDlgItemMessage ( hwndDisplay , IDC_WPTYPE , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " P " ) ;
SendDlgItemMessage ( hwndDisplay , IDC_WPTYPE , CB_SETCURSEL , SendWPType , 0 ) ;
CheckDlgButton ( hwndDisplay , IDC_SENDWP , SendWP ) ;
// CheckDlgButton(hwndDisplay, IDC_SENDWP, NoWPGuesses);
CheckDlgButton ( hwndDisplay , IDC_FILTERWPB , FilterWPBulls ) ;
break ;
}
ShowWindow ( pHdr - > hwndDisplay , SW_SHOWNORMAL ) ;
}
//The following function processes the WM_INITDIALOG message for each of the child dialog boxes. You cannot specify the position of a dialog box created using the CreateDialogIndirect function. This function uses the SetWindowPos function to position the child dialog within the tab control's display area.
// OnChildDialogInit - Positions the child dialog box to fall
// within the display area of the tab control.
VOID WINAPI OnChildDialogInit ( HWND hwndDlg )
{
HWND hwndParent = GetParent ( hwndDlg ) ;
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndParent , GWL_USERDATA ) ;
SetWindowPos ( hwndDlg , HWND_TOP , pHdr - > rcDisplay . left , pHdr - > rcDisplay . top , 0 , 0 , SWP_NOSIZE ) ;
}
void SetForwardingPage ( HWND hDlg , struct UserInfo * user )
{
struct BBSForwardingInfo * ForwardingInfo = user - > ForwardingInfo ;
char * * Calls ;
char Text [ 100000 ] = " " ;
Calls = ForwardingInfo - > TOCalls ;
if ( Calls )
{
while ( Calls [ 0 ] )
{
strcat ( Text , Calls [ 0 ] ) ;
strcat ( Text , " \r \n " ) ;
Calls + + ;
}
}
SetDlgItemText ( hDlg , IDC_TOCALLS , Text ) ;
Text [ 0 ] = 0 ;
Calls = ForwardingInfo - > ATCalls ;
if ( Calls )
{
while ( Calls [ 0 ] )
{
strcat ( Text , Calls [ 0 ] ) ;
strcat ( Text , " \r \n " ) ;
Calls + + ;
}
}
SetDlgItemText ( hDlg , IDC_ATCALLS , Text ) ;
Text [ 0 ] = 0 ;
Calls = ForwardingInfo - > Haddresses ;
if ( Calls )
{
while ( Calls [ 0 ] )
{
strcat ( Text , Calls [ 0 ] ) ;
strcat ( Text , " \r \n " ) ;
Calls + + ;
}
}
SetDlgItemText ( hDlg , IDC_HROUTES , Text ) ;
Text [ 0 ] = 0 ;
Calls = ForwardingInfo - > HaddressesP ;
if ( Calls )
{
while ( Calls [ 0 ] )
{
strcat ( Text , Calls [ 0 ] ) ;
strcat ( Text , " \r \n " ) ;
Calls + + ;
}
}
SetDlgItemText ( hDlg , IDC_HROUTESP , Text ) ;
Text [ 0 ] = 0 ;
Calls = ForwardingInfo - > FWDTimes ;
if ( Calls )
{
while ( Calls [ 0 ] )
{
strcat ( Text , Calls [ 0 ] ) ;
strcat ( Text , " \r \n " ) ;
Calls + + ;
}
}
SetDlgItemText ( hDlg , IDC_FWDTIMES , Text ) ;
Text [ 0 ] = 0 ;
Calls = ForwardingInfo - > ConnectScript ;
if ( Calls )
{
while ( Calls [ 0 ] )
{
strcat ( Text , Calls [ 0 ] ) ;
strcat ( Text , " \r \n " ) ;
Calls + + ;
}
}
SetDlgItemText ( hDlg , IDC_CALL , Text ) ;
if ( ForwardingInfo - > AllowB1 | | ForwardingInfo - > AllowB2 )
ForwardingInfo - > AllowCompressed = TRUE ;
CheckDlgButton ( hDlg , IDC_FWDENABLE , ForwardingInfo - > Enabled ) ;
CheckDlgButton ( hDlg , IDC_REVERSE , ForwardingInfo - > ReverseFlag ) ;
CheckDlgButton ( hDlg , IDC_BLOCKED , ForwardingInfo - > AllowBlocked ) ;
CheckDlgButton ( hDlg , IDC_ALLOWCOMP , ForwardingInfo - > AllowCompressed ) ;
CheckDlgButton ( hDlg , IDC_USEB1 , ForwardingInfo - > AllowB1 ) ;
CheckDlgButton ( hDlg , IDC_USEB2 , ForwardingInfo - > AllowB2 ) ;
CheckDlgButton ( hDlg , IDC_CTRLZ , ForwardingInfo - > SendCTRLZ ) ;
CheckDlgButton ( hDlg , IDC_PERSONALONLY , ForwardingInfo - > PersonalOnly ) ;
CheckDlgButton ( hDlg , IDC_SENDNEW , ForwardingInfo - > SendNew ) ;
SetDlgItemInt ( hDlg , IDC_FWDINT , ForwardingInfo - > FwdInterval , FALSE ) ;
SetDlgItemInt ( hDlg , IDC_REVFWDINT , ForwardingInfo - > RevFwdInterval , FALSE ) ;
SetDlgItemInt ( hDlg , IDC_MAXBLOCK , ForwardingInfo - > MaxFBBBlockSize , FALSE ) ;
SetDlgItemInt ( hDlg , IDC_CONTIMEOUT , ForwardingInfo - > ConTimeout , FALSE ) ;
SetDlgItemText ( hDlg , IDC_BBSHA , ForwardingInfo - > BBSHA ) ;
SetFocus ( GetDlgItem ( hDlg , IDC_TOCALLS ) ) ;
return ;
}
int Do_BBS_Sel_Changed ( HWND hDlg )
{
// Update BBS display with newly selected BBS
struct UserInfo * user ;
int Sel = SendDlgItemMessage ( hDlg , IDC_BBS , CB_GETCURSEL , 0 , 0 ) ;
SendDlgItemMessage ( hDlg , IDC_BBS , CB_GETLBTEXT , Sel , ( LPARAM ) ( LPCTSTR ) & CurrentConfigCall ) ;
for ( user = BBSChain ; user ; user = user - > BBSNext )
{
if ( strcmp ( user - > Call , CurrentConfigCall ) = = 0 )
{
CurrentBBS = user ;
SetForwardingPage ( hDlg , user ) ; // moved to separate routine as also called from copy config
}
}
return 0 ;
}
int Sel ;
int Do_User_Sel_Changed ( HWND hDlg )
{
// Update BBS display with newly selected BBS
struct UserInfo * user ;
Sel = SendDlgItemMessage ( hDlg , IDC_USER , CB_GETCURSEL , 0 , 0 ) ;
if ( Sel = = - 1 )
SendDlgItemMessage ( hDlg , IDC_USER , WM_GETTEXT , Sel , ( LPARAM ) ( LPCTSTR ) & CurrentConfigCall ) ;
else
SendDlgItemMessage ( hDlg , IDC_USER , CB_GETLBTEXT , Sel , ( LPARAM ) ( LPCTSTR ) & CurrentConfigCall ) ;
for ( CurrentConfigIndex = 1 ; CurrentConfigIndex < = NumberofUsers ; CurrentConfigIndex + + )
{
user = UserRecPtr [ CurrentConfigIndex ] ;
if ( _stricmp ( user - > Call , CurrentConfigCall ) = = 0 )
{
struct tm * tm ;
char Date [ 80 ] ;
char * Dateptr ;
int i , n , s ;
char SSID [ 10 ] ;
int ConnectsIn ;
int ConnectsOut ;
int MsgsReceived ;
int MsgsSent ;
int MsgsRejectedIn ;
int MsgsRejectedOut ;
int BytesForwardedIn ;
int BytesForwardedOut ;
// char MsgsIn[80];
// char MsgsOut[80];
// char BytesIn[80];
// char BytesOut[80];
// char RejIn[80];
// char RejOut[80];
i = 0 ;
ConnectsIn = user - > Total . ConnectsIn - user - > Last . ConnectsIn ;
ConnectsOut = user - > Total . ConnectsOut - user - > Last . ConnectsOut ;
MsgsReceived = MsgsSent = MsgsRejectedIn = MsgsRejectedOut = BytesForwardedIn = BytesForwardedOut = 0 ;
for ( n = 0 ; n < 4 ; n + + )
{
MsgsReceived + = user - > Total . MsgsReceived [ n ] - user - > Last . MsgsReceived [ n ] ;
MsgsSent + = user - > Total . MsgsSent [ n ] - user - > Last . MsgsSent [ n ] ;
BytesForwardedIn + = user - > Total . BytesForwardedIn [ n ] - user - > Last . BytesForwardedIn [ n ] ;
BytesForwardedOut + = user - > Total . BytesForwardedOut [ n ] - user - > Last . BytesForwardedOut [ n ] ;
MsgsRejectedIn + = user - > Total . MsgsRejectedIn [ n ] - user - > Last . MsgsRejectedIn [ n ] ;
MsgsRejectedOut + = user - > Total . MsgsRejectedOut [ n ] - user - > Last . MsgsRejectedOut [ n ] ;
}
SetDlgItemText ( hDlg , IDC_NAME , user - > Name ) ;
SetDlgItemText ( hDlg , IDC_PASSWORD , user - > pass ) ;
SetDlgItemText ( hDlg , IDC_QTH , user - > Address ) ;
SetDlgItemText ( hDlg , IDC_UZIP , user - > ZIP ) ;
SetDlgItemText ( hDlg , IDC_HOMEBBS , user - > HomeBBS ) ;
SetDlgItemText ( hDlg , IDC_CMSPASS , user - > CMSPass ) ;
SetDlgItemInt ( hDlg , IDC_LASTLISTED , user - > lastmsg , TRUE ) ;
CheckDlgButton ( hDlg , IDC_SYSOP , ( user - > flags & F_SYSOP ) ) ;
CheckDlgButton ( hDlg , IDC_BBSFLAG , ( user - > flags & F_BBS ) ) ;
CheckDlgButton ( hDlg , IDC_PMSFLAG , ( user - > flags & F_PMS ) ) ;
CheckDlgButton ( hDlg , IDC_EXPERT , ( user - > flags & F_Expert ) ) ;
CheckDlgButton ( hDlg , IDC_EXCLUDED , ( user - > flags & F_Excluded ) ) ;
CheckDlgButton ( hDlg , IDC_EMAIL , ( user - > flags & F_EMAIL ) ) ;
CheckDlgButton ( hDlg , IDC_HOLDMAIL , ( user - > flags & F_HOLDMAIL ) ) ;
CheckDlgButton ( hDlg , ALLOW_BULLS , ( user - > flags & F_NOBULLS ) = = 0 ) ; // Node inverted flag
CheckDlgButton ( hDlg , IDC_NTSMPS , ( user - > flags & F_NTSMPS ) ) ;
CheckDlgButton ( hDlg , IDC_APRSMFOR , ( user - > flags & F_APRSMFOR ) ) ;
CheckDlgButton ( hDlg , IDC_POLLRMS , ( user - > flags & F_POLLRMS ) ) ;
CheckDlgButton ( hDlg , IDC_SYSOP_IN_LM , ( user - > flags & F_SYSOP_IN_LM ) ) ;
CheckDlgButton ( hDlg , RMS_EXPRESS_USER , ( user - > flags & F_Temp_B2_BBS ) ) ;
CheckDlgButton ( hDlg , NO_WINLINKdotORG , ( user - > flags & F_NOWINLINK ) ) ;
CheckDlgButton ( hDlg , IDC_RMSREDIRECT , ( user - > flags & F_RMSREDIRECT ) ) ;
EnableWindow ( GetDlgItem ( hDlg , IDC_SYSOP_IN_LM ) , user - > flags & F_SYSOP ) ;
SetDlgItemInt ( hDlg , CONN_IN , ConnectsIn , FALSE ) ;
SetDlgItemInt ( hDlg , CONN_OUT , ConnectsOut , FALSE ) ;
SetDlgItemInt ( hDlg , MSGS_IN , MsgsReceived , FALSE ) ;
SetDlgItemInt ( hDlg , MSGS_OUT , MsgsSent , FALSE ) ;
SetDlgItemInt ( hDlg , REJECTS_IN , MsgsRejectedIn , FALSE ) ;
SetDlgItemInt ( hDlg , REJECTS_OUT , MsgsRejectedOut , FALSE ) ;
SetDlgItemInt ( hDlg , BYTES_IN , BytesForwardedIn , FALSE ) ;
SetDlgItemInt ( hDlg , BYTES_OUT , BytesForwardedOut , FALSE ) ;
/*
for ( i = 0 ; i < 3 ; i + + )
{
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_RESETCONTENT , 0 , 0 ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 1 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 2 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 3 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 4 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 5 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 6 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 7 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 8 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 9 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 10 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 11 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 12 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 13 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 14 " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i , CB_ADDSTRING , 0 , ( LPARAM ) " 15 " ) ;
}
*/
SendDlgItemMessage ( hDlg , RMS_SSID1 , WM_SETTEXT , 0 , ( LPARAM ) " - " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID2 , WM_SETTEXT , 0 , ( LPARAM ) " - " ) ;
SendDlgItemMessage ( hDlg , RMS_SSID3 , WM_SETTEXT , 0 , ( LPARAM ) " - " ) ;
i = 0 ;
for ( s = 0 ; s < 16 ; s + + )
{
if ( user - > RMSSSIDBits & ( 1 < < s ) )
{
if ( s )
sprintf ( SSID , " %d " , s ) ;
else
SSID [ 0 ] = 0 ;
SendDlgItemMessage ( hDlg , RMS_SSID1 + i + + , WM_SETTEXT , 0 , ( LPARAM ) SSID ) ;
// SendDlgItemMessage(hDlg, RMS_SSID1 + i++, CB_SETCURSEL, s, 0);
if ( i = = 3 )
break ;
}
}
tm = gmtime ( ( time_t * ) & user - > TimeLastConnected ) ;
Dateptr = asctime ( tm ) ;
strcpy ( Date , Dateptr ) ;
SetDlgItemText ( hDlg , LASTCONNECT , Date ) ;
i = ( user - > flags > > 28 ) ;
sprintf ( SSID , " %d " , i ) ;
if ( i = = 0 )
SSID [ 0 ] = 0 ;
SendDlgItemMessage ( hDlg , IDC_APRSSSID , WM_SETTEXT , 0 , ( LPARAM ) SSID ) ;
return 0 ;
}
}
// Typing in new user
CurrentConfigIndex = - 1 ;
SetDlgItemText ( hDlg , IDC_NAME , " " ) ;
SetDlgItemText ( hDlg , IDC_PASSWORD , " " ) ;
SetDlgItemText ( hDlg , IDC_CMSPASS , " " ) ;
SetDlgItemText ( hDlg , IDC_QTH , " " ) ;
SetDlgItemText ( hDlg , IDC_UZIP , " " ) ;
SetDlgItemText ( hDlg , IDC_HOMEBBS , " " ) ;
SetDlgItemInt ( hDlg , IDC_LASTLISTED , LatestMsg , FALSE ) ;
CheckDlgButton ( hDlg , IDC_SYSOP , FALSE ) ;
CheckDlgButton ( hDlg , IDC_BBSFLAG , FALSE ) ;
CheckDlgButton ( hDlg , IDC_PMSFLAG , FALSE ) ;
CheckDlgButton ( hDlg , IDC_EXPERT , FALSE ) ;
CheckDlgButton ( hDlg , IDC_EXCLUDED , FALSE ) ;
return 0 ;
}
VOID Do_Add_User ( HWND hDlg )
{
struct UserInfo * user ;
int n ;
SendDlgItemMessage ( hDlg , IDC_USER , WM_GETTEXT , 19 , ( LPARAM ) ( LPCTSTR ) & CurrentConfigCall ) ;
if ( LookupCall ( CurrentConfigCall ) )
sprintf ( InfoBoxText , " User %s already exists " , CurrentConfigCall ) ;
else if ( ( strlen ( CurrentConfigCall ) < 3 ) | | ( strlen ( CurrentConfigCall ) > MAXUSERNAMELEN ) )
sprintf ( InfoBoxText , " User %s is invalid " , CurrentConfigCall ) ;
else
{
user = AllocateUserRecord ( CurrentConfigCall ) ;
user - > Temp = zalloc ( sizeof ( struct TempUserInfo ) ) ;
CurrentConfigIndex = NumberofUsers ;
Do_Save_User ( hDlg , FALSE ) ;
sprintf ( InfoBoxText , " User %s added and info saved " , CurrentConfigCall ) ;
}
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
SendDlgItemMessage ( hDlg , IDC_USER , CB_RESETCONTENT , 0 , 0 ) ;
for ( n = 1 ; n < = NumberofUsers ; n + + )
{
SendDlgItemMessage ( hDlg , IDC_USER , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) UserRecPtr [ n ] - > Call ) ;
}
return ;
}
VOID Do_Delete_User ( HWND hDlg )
{
struct UserInfo * user ;
int n ;
if ( CurrentConfigIndex = = - 1 )
{
sprintf ( InfoBoxText , " Please select a user to delete " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return ;
}
user = UserRecPtr [ CurrentConfigIndex ] ;
if ( _stricmp ( CurrentConfigCall , user - > Call ) ! = 0 )
{
sprintf ( InfoBoxText , " Inconsistancy detected - user not deleted " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return ;
}
for ( n = CurrentConfigIndex ; n < NumberofUsers ; n + + )
{
UserRecPtr [ n ] = UserRecPtr [ n + 1 ] ; // move down all following entries
}
NumberofUsers - - ;
SendDlgItemMessage ( hDlg , IDC_USER , CB_RESETCONTENT , 0 , 0 ) ;
for ( n = 1 ; n < = NumberofUsers ; n + + )
{
SendDlgItemMessage ( hDlg , IDC_USER , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) UserRecPtr [ n ] - > Call ) ;
}
sprintf ( InfoBoxText , " User %s deleted " , user - > Call ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
if ( user - > flags & F_BBS ) // was a BBS?
DeleteBBS ( user ) ;
free ( user ) ;
// Position to same place in list
SendDlgItemMessage ( hDlg , IDC_USER , CB_SETCURSEL , Sel , 0 ) ;
Do_User_Sel_Changed ( hDlg ) ;
return ;
}
VOID Do_Save_User ( HWND hDlg , BOOL ShowBox )
{
struct UserInfo * user ;
BOOL OK ;
char RMSSSID [ 10 ] ;
unsigned int SSID ;
if ( CurrentConfigIndex = = - 1 )
{
sprintf ( InfoBoxText , " Please select a user to save " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return ;
}
user = UserRecPtr [ CurrentConfigIndex ] ;
if ( strcmp ( CurrentConfigCall , user - > Call ) ! = 0 )
{
sprintf ( InfoBoxText , " Inconsistancy detected - information not saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return ;
}
GetDlgItemText ( hDlg , IDC_NAME , user - > Name , 17 ) ;
GetDlgItemText ( hDlg , IDC_PASSWORD , user - > pass , 12 ) ;
GetDlgItemText ( hDlg , IDC_QTH , user - > Address , 60 ) ;
GetDlgItemText ( hDlg , IDC_UZIP , user - > ZIP , 8 ) ;
GetDlgItemText ( hDlg , IDC_HOMEBBS , user - > HomeBBS , 40 ) ;
GetDlgItemText ( hDlg , IDC_CMSPASS , user - > CMSPass , 15 ) ;
user - > lastmsg = GetDlgItemInt ( hDlg , IDC_LASTLISTED , & OK , FALSE ) ;
if ( IsDlgButtonChecked ( hDlg , IDC_BBSFLAG ) )
{
// If BBS Flag has changed, must set up or delete forwarding info
if ( ( user - > flags & F_BBS ) = = 0 )
{
// New BBS
if ( SetupNewBBS ( user ) )
{
user - > flags | = F_BBS ;
user - > flags & = ~ F_Temp_B2_BBS ; // Clear RMS Express User
CheckDlgButton ( hDlg , RMS_EXPRESS_USER , ( user - > flags & F_Temp_B2_BBS ) ) ;
}
else
{
// Failed - too many bbs's defined
sprintf ( InfoBoxText , " Cannot set user to be a BBS - you already have 80 BBS's defined " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
user - > flags & = ~ F_BBS ;
CheckDlgButton ( hDlg , IDC_BBSFLAG , ( user - > flags & F_BBS ) ) ;
}
}
}
else
{
if ( user - > flags & F_BBS )
{
//was a BBS
user - > flags & = ~ F_BBS ;
DeleteBBS ( user ) ;
}
}
if ( IsDlgButtonChecked ( hDlg , IDC_PMSFLAG ) )
user - > flags | = F_PMS ; else user - > flags & = ~ F_PMS ;
if ( IsDlgButtonChecked ( hDlg , IDC_EXPERT ) )
user - > flags | = F_Expert ; else user - > flags & = ~ F_Expert ;
if ( IsDlgButtonChecked ( hDlg , IDC_EXCLUDED ) )
user - > flags | = F_Excluded ; else user - > flags & = ~ F_Excluded ;
if ( IsDlgButtonChecked ( hDlg , IDC_SYSOP ) )
user - > flags | = F_SYSOP ; else user - > flags & = ~ F_SYSOP ;
if ( IsDlgButtonChecked ( hDlg , IDC_EMAIL ) )
user - > flags | = F_EMAIL ; else user - > flags & = ~ F_EMAIL ;
if ( IsDlgButtonChecked ( hDlg , IDC_HOLDMAIL ) )
user - > flags | = F_HOLDMAIL ; else user - > flags & = ~ F_HOLDMAIL ;
if ( IsDlgButtonChecked ( hDlg , ALLOW_BULLS ) = = 0 )
user - > flags | = F_NOBULLS ; else user - > flags & = ~ F_NOBULLS ; // Note flag inverted
if ( IsDlgButtonChecked ( hDlg , IDC_APRSMFOR ) )
user - > flags | = F_APRSMFOR ; else user - > flags & = ~ F_APRSMFOR ;
if ( IsDlgButtonChecked ( hDlg , IDC_NTSMPS ) )
user - > flags | = F_NTSMPS ; else user - > flags & = ~ F_NTSMPS ;
if ( IsDlgButtonChecked ( hDlg , IDC_RMSREDIRECT ) )
user - > flags | = F_RMSREDIRECT ; else user - > flags & = ~ F_RMSREDIRECT ;
if ( IsDlgButtonChecked ( hDlg , IDC_POLLRMS ) )
user - > flags | = F_POLLRMS ; else user - > flags & = ~ F_POLLRMS ;
if ( IsDlgButtonChecked ( hDlg , IDC_SYSOP_IN_LM ) )
user - > flags | = F_SYSOP_IN_LM ; else user - > flags & = ~ F_SYSOP_IN_LM ;
if ( IsDlgButtonChecked ( hDlg , RMS_EXPRESS_USER ) )
user - > flags | = F_Temp_B2_BBS ; else user - > flags & = ~ F_Temp_B2_BBS ;
if ( IsDlgButtonChecked ( hDlg , NO_WINLINKdotORG ) )
user - > flags | = F_NOWINLINK ; else user - > flags & = ~ F_NOWINLINK ;
// if (user->flags & F_BBS)
// user->flags &= ~F_Temp_B2_BBS; // Can't be both
user - > RMSSSIDBits = 0 ;
SendDlgItemMessage ( hDlg , RMS_SSID1 , WM_GETTEXT , 3 , ( LPARAM ) ( LPCTSTR ) & RMSSSID ) ;
if ( RMSSSID [ 0 ] ! = ' - ' )
{
SSID = atoi ( RMSSSID ) ;
user - > RMSSSIDBits | = ( 1 < < ( SSID ) ) ;
}
SendDlgItemMessage ( hDlg , RMS_SSID2 , WM_GETTEXT , 3 , ( LPARAM ) ( LPCTSTR ) & RMSSSID ) ;
if ( RMSSSID [ 0 ] ! = ' - ' )
{
SSID = atoi ( RMSSSID ) ;
user - > RMSSSIDBits | = ( 1 < < ( SSID ) ) ;
}
SendDlgItemMessage ( hDlg , RMS_SSID3 , WM_GETTEXT , 3 , ( LPARAM ) ( LPCTSTR ) & RMSSSID ) ;
if ( RMSSSID [ 0 ] ! = ' - ' )
{
SSID = atoi ( RMSSSID ) ;
user - > RMSSSIDBits | = ( 1 < < ( SSID ) ) ;
}
SendDlgItemMessage ( hDlg , IDC_APRSSSID , WM_GETTEXT , 3 , ( LPARAM ) ( LPCTSTR ) & RMSSSID ) ;
SSID = atoi ( RMSSSID ) ;
SSID & = 15 ;
user - > flags & = 0x0fffffff ;
user - > flags | = ( SSID < < 28 ) ;
SaveUserDatabase ( ) ;
UpdateWPWithUserInfo ( user ) ;
if ( ShowBox )
{
sprintf ( InfoBoxText , " User information saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
}
int compare ( const void * arg1 , const void * arg2 ) ;
int Do_Msg_Sel_Changed ( HWND hDlg )
{
// Update Msg display with newly selected Msg
struct MsgInfo * Msg ;
char MsgnoText [ 10 ] ;
int Msgno ;
int Sel = SendDlgItemMessage ( hDlg , 0 , LB_GETCURSEL , 0 , 0 ) ;
char Size [ 10 ] ;
if ( Sel ! = - 1 )
{
SendDlgItemMessage ( hDlg , 0 , LB_GETTEXT , Sel , ( LPARAM ) ( LPCTSTR ) & MsgnoText ) ;
Msgno = atoi ( MsgnoText ) ;
}
for ( CurrentMsgIndex = 1 ; CurrentMsgIndex < = NumberofMessages ; CurrentMsgIndex + + )
{
Msg = MsgHddrPtr [ CurrentMsgIndex ] ;
if ( Msg - > number = = Msgno )
{
struct UserInfo * USER ;
int i = 0 , n ;
UINT State ;
SetDlgItemText ( hDlg , 6001 , Msg - > from ) ;
SetDlgItemText ( hDlg , 6002 , Msg - > bid ) ;
SetDlgItemText ( hDlg , 6003 , Msg - > to ) ;
SetDlgItemText ( hDlg , EMAILFROM , Msg - > emailfrom ) ;
SetDlgItemText ( hDlg , 6004 , Msg - > via ) ;
SetDlgItemText ( hDlg , 6005 , Msg - > title ) ;
sprintf ( Size , " %d " , Msg - > length ) ;
SetDlgItemText ( hDlg , 6018 , FormatDateAndTime ( ( time_t ) Msg - > datecreated , FALSE ) ) ;
SetDlgItemText ( hDlg , 6019 , FormatDateAndTime ( ( time_t ) Msg - > datereceived , FALSE ) ) ;
SetDlgItemText ( hDlg , 6021 , FormatDateAndTime ( ( time_t ) Msg - > datechanged , FALSE ) ) ;
SetDlgItemText ( hDlg , 6020 , Size ) ;
if ( Msg - > type = = ' B ' )
SendDlgItemMessage ( hDlg , IDC_MSGTYPE , CB_SETCURSEL , 0 , 0 ) ;
else if ( Msg - > type = = ' P ' )
SendDlgItemMessage ( hDlg , IDC_MSGTYPE , CB_SETCURSEL , 1 , 0 ) ;
else
SendDlgItemMessage ( hDlg , IDC_MSGTYPE , CB_SETCURSEL , 2 , 0 ) ;
switch ( Msg - > status )
{
case ' N ' : Sel = MSGSTATUS_N ; break ;
case ' Y ' : Sel = MSGSTATUS_Y ; break ;
case ' F ' : Sel = MSGSTATUS_F ; break ;
case ' K ' : Sel = MSGSTATUS_K ; break ;
case ' H ' : Sel = MSGSTATUS_H ; break ;
case ' D ' : Sel = MSGSTATUS_D ; break ;
case ' $ ' : Sel = MSGSTATUS_ $ ; break ;
}
// Get a sorted list of BBS records
for ( n = 1 ; n < = NumberofUsers ; n + + )
{
USER = UserRecPtr [ n ] ;
if ( ( USER - > flags & F_BBS ) & & USER - > BBSNumber )
MsgBBSList [ i + + ] = USER ;
}
qsort ( ( void * ) MsgBBSList , i , 4 , compare ) ;
SendDlgItemMessage ( hDlg , IDC_MSGSTATUS , CB_SETCURSEL , Sel , 0 ) ;
for ( n = 0 ; n < = NBBBS ; n + + )
{
State = BST_INDETERMINATE ;
USER = MsgBBSList [ n ] ;
if ( USER )
{
if ( memcmp ( Msg - > fbbs , zeros , NBMASK ) ! = 0 )
if ( check_fwd_bit ( Msg - > fbbs , USER - > BBSNumber ) )
State = BST_UNCHECKED ;
if ( memcmp ( Msg - > forw , zeros , NBMASK ) ! = 0 )
if ( check_fwd_bit ( Msg - > forw , USER - > BBSNumber ) )
State = BST_CHECKED ;
SetDlgItemText ( hDlg , n + 25 , USER - > Call ) ;
}
else
SetDlgItemText ( hDlg , n + 25 , " " ) ;
CheckDlgButton ( hDlg , n + 25 , State ) ;
}
return 0 ;
}
}
CurrentMsgIndex = - 1 ;
return 0 ;
}
VOID Do_Save_Msg ( HWND hDlg )
{
struct MsgInfo * Msg ;
struct UserInfo * user ;
char status [ 2 ] ;
int i , n , BBSNumber ;
BOOL toforward , forwarded ;
if ( CurrentMsgIndex = = - 1 )
{
sprintf ( InfoBoxText , " Please select a message to save " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return ;
}
Msg = MsgHddrPtr [ CurrentMsgIndex ] ;
GetDlgItemText ( hDlg , 6001 , Msg - > from , 7 ) ;
GetDlgItemText ( hDlg , 6002 , Msg - > bid , 13 ) ;
GetDlgItemText ( hDlg , 6003 , Msg - > to , 7 ) ;
GetDlgItemText ( hDlg , 6004 , Msg - > via , 41 ) ;
GetDlgItemText ( hDlg , 6005 , Msg - > title , 61 ) ;
GetDlgItemText ( hDlg , EMAILFROM , Msg - > emailfrom , 41 ) ;
GetDlgItemText ( hDlg , IDC_MSGTYPE , status , 2 ) ;
Msg - > type = status [ 0 ] ;
// Check each BBS to for Farwardind State
for ( i = 0 ; i < NBBBS ; i + + )
{
n = IsDlgButtonChecked ( hDlg , i + 25 ) ;
user = MsgBBSList [ i ] ;
if ( user )
{
BBSNumber = user - > BBSNumber ;
// if (BBSNumber == 31)
// n = n;
toforward = check_fwd_bit ( Msg - > fbbs , BBSNumber ) ;
forwarded = check_fwd_bit ( Msg - > forw , BBSNumber ) ;
if ( n = = BST_INDETERMINATE )
{
if ( ( ! toforward ) & & ( ! forwarded ) )
{
// No Change
continue ;
}
else
{
clear_fwd_bit ( Msg - > fbbs , BBSNumber ) ;
if ( toforward )
user - > ForwardingInfo - > MsgCount - - ;
clear_fwd_bit ( Msg - > forw , BBSNumber ) ;
}
}
else if ( n = = BST_UNCHECKED )
{
if ( toforward )
{
// No Change
continue ;
}
else
{
set_fwd_bit ( Msg - > fbbs , BBSNumber ) ;
user - > ForwardingInfo - > MsgCount + + ;
clear_fwd_bit ( Msg - > forw , BBSNumber ) ;
if ( FirstMessageIndextoForward > CurrentMsgIndex )
FirstMessageIndextoForward = CurrentMsgIndex ;
}
}
else if ( n = = BST_CHECKED )
{
if ( forwarded )
{
// No Change
continue ;
}
else
{
set_fwd_bit ( Msg - > forw , BBSNumber ) ;
clear_fwd_bit ( Msg - > fbbs , BBSNumber ) ;
if ( toforward )
user - > ForwardingInfo - > MsgCount - - ;
}
}
}
}
GetDlgItemText ( hDlg , IDC_MSGSTATUS , status , 2 ) ;
if ( Msg - > status ! = status [ 0 ] )
{
// Need to take action if killing message
Msg - > status = status [ 0 ] ;
if ( status [ 0 ] = = ' K ' )
FlagAsKilled ( Msg , FALSE ) ; // Clear forwarding bits
}
sprintf ( InfoBoxText , " Message Updated " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
Msg - > datechanged = time ( NULL ) ;
SaveMessageDatabase ( ) ;
Do_Msg_Sel_Changed ( hDlg ) ; // Refresh
}
VOID SaveBBSConfig ( )
{
BOOL OK1 , OK2 , OK3 , OK4 ;
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
HKEY hKey = 0 ;
GetDlgItemText ( hwndDisplay , IDC_BBSCall , BBSName , 50 ) ;
GetDlgItemText ( hwndDisplay , IDC_SYSOPCALL , SYSOPCall , 50 ) ;
GetDlgItemText ( hwndDisplay , IDC_HRoute , HRoute , 50 ) ;
GetDlgItemText ( hwndDisplay , IDC_BaseDir , BaseDirRaw , MAX_PATH - 1 ) ;
EnableUI = IsDlgButtonChecked ( hwndDisplay , IDC_ENABLEUI ) ;
RefuseBulls = IsDlgButtonChecked ( hwndDisplay , IDC_REFUSEBULLS ) ;
OnlyKnown = IsDlgButtonChecked ( hwndDisplay , IDC_KNOWNUSERS ) ;
MailForInterval = GetDlgItemInt ( hwndDisplay , MAILFOR_MINS , & OK1 , FALSE ) ;
SendSYStoSYSOPCall = IsDlgButtonChecked ( hwndDisplay , IDC_SYSTOSYSOPCALL ) ;
SendBBStoSYSOPCall = IsDlgButtonChecked ( hwndDisplay , IDC_BBSTOSYSOPCALL ) ;
DontHoldNewUsers = IsDlgButtonChecked ( hwndDisplay , IDC_DONTHOLDNEW ) ;
ForwardToMe = IsDlgButtonChecked ( hwndDisplay , IDC_FORWARDTOBBS ) ;
DontNeedHomeBBS = IsDlgButtonChecked ( hwndDisplay , IDC_NOHOMEBBS ) ;
DontCheckFromCall = IsDlgButtonChecked ( hwndDisplay , IDC_DONTCHECKFROM ) ;
AllowAnon = IsDlgButtonChecked ( hwndDisplay , IDC_NONAME ) ;
UserCantKillT = ! IsDlgButtonChecked ( hwndDisplay , IDC_USERRKILLT ) ; // Reverse logic
DefaultNoWINLINK = IsDlgButtonChecked ( hwndDisplay , IDC_DEFAULTNOWINLINK ) ;
BBSApplNum = GetDlgItemInt ( hwndDisplay , IDC_BBSAppl , & OK1 , FALSE ) ;
MaxStreams = GetDlgItemInt ( hwndDisplay , IDC_BBSStreams , & OK2 , FALSE ) ;
POP3InPort = GetDlgItemInt ( hwndDisplay , IDC_POP3Port , & OK3 , FALSE ) ;
SMTPInPort = GetDlgItemInt ( hwndDisplay , IDC_SMTPPort , & OK4 , FALSE ) ;
NNTPInPort = GetDlgItemInt ( hwndDisplay , IDC_NNTPPort , & OK3 , FALSE ) ;
GetDlgItemText ( hwndDisplay , IDC_AMPR , AMPRDomain , 50 ) ;
SendAMPRDirect = IsDlgButtonChecked ( hwndDisplay , IDC_FORWARDAMPR ) ;
RemoteEmail = IsDlgButtonChecked ( hwndDisplay , IDC_REMOTEEMAIL ) ;
strlop ( BBSName , ' - ' ) ;
strlop ( SYSOPCall , ' - ' ) ;
SaveConfig ( ConfigName ) ;
GetConfig ( ConfigName ) ;
sprintf ( InfoBoxText , " Warning - Program must be restarted for changes to be effective " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
VOID SaveISPConfig ( )
{
BOOL OK1 , OK2 , OK3 ;
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
ISP_Gateway_Enabled = IsDlgButtonChecked ( hwndDisplay , IDC_ISP_Gateway_Enabled ) ;
SMTPAuthNeeded = IsDlgButtonChecked ( hwndDisplay , ISP_SMTP_AUTH ) ;
ISPPOP3Interval = GetDlgItemInt ( hwndDisplay , IDC_POP3Timer , & OK1 , FALSE ) ;
GetDlgItemText ( hwndDisplay , IDC_MyMailDomain , MyDomain , 50 ) ;
GetDlgItemText ( hwndDisplay , IDC_ISPSMTPName , ISPSMTPName , 50 ) ;
ISPSMTPPort = GetDlgItemInt ( hwndDisplay , IDC_ISPSMTPPort , & OK2 , FALSE ) ;
GetDlgItemText ( hwndDisplay , SMTP_EHELO , ISPEHLOName , 50 ) ;
GetDlgItemText ( hwndDisplay , IDC_ISPPOP3Name , ISPPOP3Name , 50 ) ;
ISPPOP3Port = GetDlgItemInt ( hwndDisplay , IDC_ISPPOP3Port , & OK3 , FALSE ) ;
GetDlgItemText ( hwndDisplay , IDC_ISPAccountName , ISPAccountName , 50 ) ;
GetDlgItemText ( hwndDisplay , IDC_ISPAccountPass , ISPAccountPass , 50 ) ;
EncryptedPassLen = EncryptPass ( ISPAccountPass , EncryptedISPAccountPass ) ;
SaveConfig ( ConfigName ) ;
GetConfig ( ConfigName ) ;
sprintf ( InfoBoxText , " Configuration Saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
VOID SaveFWDConfig ( HWND hDlg )
{
int OK , n ;
char BBSHA [ 50 ] ;
ReaddressLocal = IsDlgButtonChecked ( hDlg , IDC_READDRESSLOCAL ) ;
ReaddressReceived = IsDlgButtonChecked ( hDlg , IDC_READDRESSRXED ) ;
WarnNoRoute = IsDlgButtonChecked ( hDlg , IDC_WARNNOROUTE ) ;
Localtime = IsDlgButtonChecked ( hDlg , IDC_USELOCALTIME ) ;
MaxTXSize = GetDlgItemInt ( hDlg , IDC_MAXSEND , & OK , FALSE ) ;
MaxRXSize = GetDlgItemInt ( hDlg , IDC_MAXRECV , & OK , FALSE ) ;
MaxAge = GetDlgItemInt ( hDlg , IDC_MAXAGE , & OK , FALSE ) ;
SendPtoMultiple = IsDlgButtonChecked ( hDlg , IDC_MULTIP ) ;
2024-07-07 16:06:08 +01:00
FOURCHARCONT = IsDlgButtonChecked ( hDlg , IDC_FOURCHARCONTINENT ) ;
2022-08-28 09:35:46 +01:00
// Reinitialise Aliases
n = 0 ;
if ( Aliases )
{
while ( Aliases [ n ] )
{
free ( Aliases [ n ] - > Dest ) ;
free ( Aliases [ n ] ) ;
n + + ;
}
free ( Aliases ) ;
Aliases = NULL ;
FreeList ( AliasText ) ;
}
AliasText = GetMultiLineDialogParam ( hDlg , IDC_ALIAS ) ;
SetupFwdAliases ( ) ;
if ( CurrentBBS )
{
struct BBSForwardingInfo * ForwardingInfo = CurrentBBS - > ForwardingInfo ;
ForwardingInfo - > ATCalls = GetMultiLineDialogParam ( hDlg , IDC_ATCALLS ) ;
ForwardingInfo - > TOCalls = GetMultiLineDialogParam ( hDlg , IDC_TOCALLS ) ;
ForwardingInfo - > Haddresses = GetMultiLineDialogParam ( hDlg , IDC_HROUTES ) ;
ForwardingInfo - > HaddressesP = GetMultiLineDialogParam ( hDlg , IDC_HROUTESP ) ;
ForwardingInfo - > ConnectScript = GetMultiLineDialogParam ( hDlg , IDC_CALL ) ;
ForwardingInfo - > FWDTimes = GetMultiLineDialogParam ( hDlg , IDC_FWDTIMES ) ;
ForwardingInfo - > Enabled = IsDlgButtonChecked ( hDlg , IDC_FWDENABLE ) ;
ForwardingInfo - > ReverseFlag = IsDlgButtonChecked ( hDlg , IDC_REVERSE ) ;
ForwardingInfo - > AllowB2 = IsDlgButtonChecked ( hDlg , IDC_USEB2 ) ;
ForwardingInfo - > PersonalOnly = IsDlgButtonChecked ( hDlg , IDC_PERSONALONLY ) ;
ForwardingInfo - > SendNew = IsDlgButtonChecked ( hDlg , IDC_SENDNEW ) ;
ForwardingInfo - > AllowB1 = IsDlgButtonChecked ( hDlg , IDC_USEB1 ) ;
ForwardingInfo - > SendCTRLZ = IsDlgButtonChecked ( hDlg , IDC_CTRLZ ) ;
ForwardingInfo - > AllowBlocked = IsDlgButtonChecked ( hDlg , IDC_BLOCKED ) ;
ForwardingInfo - > AllowCompressed = IsDlgButtonChecked ( hDlg , IDC_ALLOWCOMP ) ;
ForwardingInfo - > FwdInterval = GetDlgItemInt ( hDlg , IDC_FWDINT , & OK , FALSE ) ;
ForwardingInfo - > RevFwdInterval = GetDlgItemInt ( hDlg , IDC_REVFWDINT , & OK , FALSE ) ;
ForwardingInfo - > MaxFBBBlockSize = GetDlgItemInt ( hDlg , IDC_MAXBLOCK , & OK , FALSE ) ;
ForwardingInfo - > ConTimeout = GetDlgItemInt ( hDlg , IDC_CONTIMEOUT , & OK , FALSE ) ;
GetDlgItemText ( hDlg , IDC_BBSHA , BBSHA , 50 ) ;
if ( ForwardingInfo - > BBSHA )
free ( ForwardingInfo - > BBSHA ) ;
ForwardingInfo - > BBSHA = _strdup ( BBSHA ) ;
}
SaveConfig ( ConfigName ) ;
GetConfig ( ConfigName ) ;
if ( CurrentBBS )
ReinitializeFWDStruct ( CurrentBBS ) ;
sprintf ( InfoBoxText , " Forwarding information saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
VOID CopyFwdConfig ( HWND hDlg )
{
char FromBBS [ 11 ] = " " ;
struct UserInfo * OldBBS ;
if ( CurrentBBS = = NULL )
{
sprintf ( InfoBoxText , " Please select a BBS to copy to " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return ;
}
// Get call to copy from
GetDlgItemText ( hDlg , COPYFROMCALL , FromBBS , 10 ) ;
OldBBS = FindBBS ( FromBBS ) ;
if ( OldBBS = = NULL )
{
sprintf ( InfoBoxText , " BBS %s not found " , FromBBS ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return ;
}
// Set current info from OldBBS
SetForwardingPage ( hDlg , OldBBS ) ; // moved to separate routine as also called from copy config
// sprintf(InfoBoxText, "Forwarding information saved");
// DialogBox(hInst, MAKEINTRESOURCE(IDD_USERADDED_BOX), hWnd, InfoDialogProc);
}
VOID SaveMAINTConfigFromDialog ( )
{
BOOL OK1 ;
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
MaxMsgno = GetDlgItemInt ( hwndDisplay , IDC_MAXMSG , & OK1 , FALSE ) ;
if ( MaxMsgno > 99000 ) MaxMsgno = 99000 ;
BidLifetime = GetDlgItemInt ( hwndDisplay , IDC_BIDLIFETIME , & OK1 , FALSE ) ;
LogAge = GetDlgItemInt ( hwndDisplay , IDC_LOGLIFETIME , & OK1 , FALSE ) ;
UserLifetime = GetDlgItemInt ( hwndDisplay , IDC_USERLIFETIME , & OK1 , FALSE ) ;
MaintInterval = GetDlgItemInt ( hwndDisplay , IDC_MAINTINTERVAL , & OK1 , FALSE ) ;
MaintTime = GetDlgItemInt ( hwndDisplay , IDC_MAINTTIME , & OK1 , FALSE ) ;
PR = GetDlgItemFloat ( hwndDisplay , IDM_PR , & OK1 , FALSE ) ;
PUR = GetDlgItemFloat ( hwndDisplay , IDM_PUR , & OK1 , FALSE ) ;
PF = GetDlgItemFloat ( hwndDisplay , IDM_PF , & OK1 , FALSE ) ;
PNF = GetDlgItemFloat ( hwndDisplay , IDM_PNF , & OK1 , FALSE ) ;
BF = GetDlgItemInt ( hwndDisplay , IDM_BF , & OK1 , FALSE ) ;
BNF = GetDlgItemInt ( hwndDisplay , IDM_BNF , & OK1 , FALSE ) ;
NTSD = GetDlgItemInt ( hwndDisplay , IDM_NTSD , & OK1 , FALSE ) ;
NTSF = GetDlgItemInt ( hwndDisplay , IDM_NTSF , & OK1 , FALSE ) ;
NTSU = GetDlgItemInt ( hwndDisplay , IDM_NTSU , & OK1 , FALSE ) ;
DeletetoRecycleBin = IsDlgButtonChecked ( hwndDisplay , IDC_DELETETORECYCLE ) ;
SuppressMaintEmail = IsDlgButtonChecked ( hwndDisplay , IDC_MAINTNOMAIL ) ;
SaveRegDuringMaint = IsDlgButtonChecked ( hwndDisplay , IDC_MAINTSAVEREG ) ;
OverrideUnsent = IsDlgButtonChecked ( hwndDisplay , IDC_OVERRIDEUNSENT ) ;
SendNonDeliveryMsgs = IsDlgButtonChecked ( hwndDisplay , IDC_MAINTNONDELIVERY ) ;
GetDlgItemText ( hwndDisplay , IDM_LTFROM , LTFROMString , 2048 ) ;
LTFROM = GetOverrideFromString ( LTFROMString ) ;
GetDlgItemText ( hwndDisplay , IDM_LTTO , LTTOString , 2048 ) ;
LTTO = GetOverrideFromString ( LTTOString ) ;
GetDlgItemText ( hwndDisplay , IDM_LTAT , LTATString , 2048 ) ;
LTAT = GetOverrideFromString ( LTATString ) ;
// Calulate time to run Housekeeping
{
struct tm * tm ;
time_t now ;
now = time ( NULL ) ;
tm = gmtime ( & now ) ;
tm - > tm_hour = MaintTime / 100 ;
tm - > tm_min = MaintTime % 100 ;
tm - > tm_sec = 0 ;
MaintClock = _mkgmtime ( tm ) ;
while ( MaintClock < now )
MaintClock + = MaintInterval * 3600 ;
Debugprintf ( " Maint Clock %d NOW %d Time to HouseKeeping %d " , MaintClock , now , MaintClock - now ) ;
}
SaveConfig ( ConfigName ) ;
GetConfig ( ConfigName ) ;
sprintf ( InfoBoxText , " Configuration Saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
VOID SaveWelcomeMsgs ( )
{
char Value [ 10000 ] ;
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
GetDlgItemText ( hwndDisplay , IDM_USERMSG , Value , 10000 ) ;
free ( WelcomeMsg ) ;
WelcomeMsg = _strdup ( Value ) ;
GetDlgItemText ( hwndDisplay , IDM_NEWUSERMSG , Value , 10000 ) ;
free ( NewWelcomeMsg ) ;
NewWelcomeMsg = _strdup ( Value ) ;
GetDlgItemText ( hwndDisplay , IDM_EXPERTUSERMSG , Value , 10000 ) ;
free ( ExpertWelcomeMsg ) ;
ExpertWelcomeMsg = _strdup ( Value ) ;
GetDlgItemText ( hwndDisplay , IDM_SIGNOFF , SignoffMsg , 99 ) ;
if ( SignoffMsg [ 0 ] )
if ( SignoffMsg [ strlen ( SignoffMsg ) - 1 ] ! = 13 )
strcat ( SignoffMsg , " \r " ) ;
TidyWelcomeMsg ( & WelcomeMsg ) ;
TidyWelcomeMsg ( & NewWelcomeMsg ) ;
TidyWelcomeMsg ( & ExpertWelcomeMsg ) ;
// redisplay, in case tidy has changed them
SetDlgItemText ( hwndDisplay , IDM_USERMSG , WelcomeMsg ) ;
SetDlgItemText ( hwndDisplay , IDM_NEWUSERMSG , NewWelcomeMsg ) ;
SetDlgItemText ( hwndDisplay , IDM_EXPERTUSERMSG , ExpertWelcomeMsg ) ;
SaveConfig ( ConfigName ) ;
GetConfig ( ConfigName ) ;
sprintf ( InfoBoxText , " Configuration Saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
VOID SavePrompts ( )
{
char Value [ 10000 ] ;
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
GetDlgItemText ( hwndDisplay , IDM_USERMSG , Value , 10000 ) ;
free ( Prompt ) ;
Prompt = _strdup ( Value ) ;
GetDlgItemText ( hwndDisplay , IDM_NEWUSERMSG , Value , 10000 ) ;
free ( NewPrompt ) ;
NewPrompt = _strdup ( Value ) ;
GetDlgItemText ( hwndDisplay , IDM_EXPERTUSERMSG , Value , 10000 ) ;
free ( ExpertPrompt ) ;
ExpertPrompt = _strdup ( Value ) ;
TidyPrompts ( ) ;
// redisplay, in case tidy has changed them
SetDlgItemText ( hwndDisplay , IDM_USERMSG , Prompt ) ;
SetDlgItemText ( hwndDisplay , IDM_NEWUSERMSG , NewPrompt ) ;
SetDlgItemText ( hwndDisplay , IDM_EXPERTUSERMSG , ExpertPrompt ) ;
SaveConfig ( ConfigName ) ;
GetConfig ( ConfigName ) ;
sprintf ( InfoBoxText , " Configuration Saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
VOID SaveWPConfig ( HWND hDlg )
{
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
SendWP = IsDlgButtonChecked ( hwndDisplay , IDC_SENDWP ) ;
SendWPType = SendDlgItemMessage ( hwndDisplay , IDC_WPTYPE , CB_GETCURSEL , 0 , 0 ) ;
FilterWPBulls = IsDlgButtonChecked ( hwndDisplay , IDC_FILTERWPB ) ;
SendWPAddrs = GetMultiLineDialogParam ( hDlg , IDC_WPTO ) ;
SaveConfig ( ConfigName ) ;
GetConfig ( ConfigName ) ;
sprintf ( InfoBoxText , " Configuration Saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
VOID SaveFilters ( HWND hDlg )
{
DLGHDR * pHdr = ( DLGHDR * ) GetWindowLong ( hwndDlg , GWL_USERDATA ) ;
RejFrom = GetMultiLineDialogParam ( hDlg , IDC_REJFROM ) ;
RejTo = GetMultiLineDialogParam ( hDlg , IDC_REJTO ) ;
RejAt = GetMultiLineDialogParam ( hDlg , IDC_REJAT ) ;
RejBID = GetMultiLineDialogParam ( hDlg , IDC_REJBID ) ;
HoldFrom = GetMultiLineDialogParam ( hDlg , IDC_HOLDFROM ) ;
HoldTo = GetMultiLineDialogParam ( hDlg , IDC_HOLDTO ) ;
HoldAt = GetMultiLineDialogParam ( hDlg , IDC_HOLDAT ) ;
HoldBID = GetMultiLineDialogParam ( hDlg , IDC_HOLDBID ) ;
SaveConfig ( ConfigName ) ;
GetConfig ( ConfigName ) ;
sprintf ( InfoBoxText , " Configuration Saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
}
VOID * GetMultiLineDialogParam ( HWND hDialog , int DLGItem )
{
char Text [ 32768 ] ;
char Val [ 32768 ] ;
char * ptr1 , * ptr2 ;
char * MultiString = NULL ;
const char * ptr ;
int Count = 0 ;
char * * Value ;
int Len = GetDlgItemText ( hDialog , DLGItem , Text , 10000 ) ;
// replace crlf with '|'
if ( Text [ strlen ( Text ) - 1 ] ! = ' \n ' ) // no terminating crlf?
strcat ( Text , " \r \n " ) ;
ptr1 = Text ;
ptr2 = Val ;
while ( * ptr1 )
{
if ( * ptr1 = = ' \r ' )
{
while ( * ( ptr1 + 2 ) = = ' \r ' ) // Blank line
ptr1 + = 2 ;
* + + ptr1 = ' | ' ;
}
* ptr2 + + = * ptr1 + + ;
}
* ptr2 + + = 0 ;
Value = zalloc ( 4 ) ; // always NULL entry on end even if no values
Value [ 0 ] = NULL ;
ptr = Val ;
while ( ptr & & strlen ( ptr ) )
{
ptr1 = strchr ( ptr , ' | ' ) ;
if ( ptr1 )
* ( ptr1 + + ) = 0 ;
if ( ptr [ 0 ] = = 0 ) // Just had a | (empty string)
break ;
Value = realloc ( Value , ( Count + 2 ) * sizeof ( void * ) ) ;
Value [ Count + + ] = _strdup ( ptr ) ;
ptr = ptr1 ;
}
Value [ Count ] = NULL ;
return Value ;
}
BOOL GetConfigFromRegistry ( )
{
HKEY hKey = 0 ;
int retCode , Type , Vallen , i ;
char Size [ 80 ] ;
char * ptr ;
// Get Config From Registry
sprintf ( BaseDirRaw , " %s/BPQMailChat " , GetBPQDirectory ( ) ) ;
retCode = RegOpenKeyEx ( REGTREE ,
" SOFTWARE \\ G8BPQ \\ BPQ32 \\ BPQMailChat " , 0 , KEY_ALL_ACCESS , & hKey ) ;
if ( retCode ! = ERROR_SUCCESS )
return FALSE ;
{
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " Streams " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & MaxStreams , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " BBSApplNum " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & BBSApplNum , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " EnableUI " , 0 , & Type , ( UCHAR * ) & EnableUI , & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " MailForInterval " , 0 , & Type , ( UCHAR * ) & MailForInterval , & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " RefuseBulls " , 0 , & Type , ( UCHAR * ) & RefuseBulls , & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " SendSYStoSYSOPCall " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & SendSYStoSYSOPCall , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " SendBBStoSYSOPCall " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & SendBBStoSYSOPCall , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " DontHoldNewUsers " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & DontHoldNewUsers , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " ForwardToMe " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ForwardToMe , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " AllowAnon " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & AllowAnon , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " DontNeedHomeBBS " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & DontNeedHomeBBS , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " MaxTXSize " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & MaxTXSize , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " MaxRXSize " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & MaxRXSize , ( ULONG * ) & Vallen ) ;
AliasText = RegGetMultiStringValue ( hKey , " FWD Aliases " ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " Readdress Local " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ReaddressLocal , & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " Readdress Received " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ReaddressReceived , & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " Warn No Route " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & WarnNoRoute , & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " Localtime " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & Localtime , & Vallen ) ;
Vallen = 100 ;
retCode + = RegQueryValueEx ( hKey , " BBSName " , 0 , & Type , ( UCHAR * ) & BBSName , & Vallen ) ;
sprintf ( SignoffMsg , " 73 de %s \r " , BBSName ) ; // Default
Vallen = 100 ;
retCode + = RegQueryValueEx ( hKey , " MailForText " , 0 , & Type , ( UCHAR * ) & MailForText , & Vallen ) ;
Vallen = 100 ;
retCode + = RegQueryValueEx ( hKey , " SYSOPCall " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & SYSOPCall , ( ULONG * ) & Vallen ) ;
Vallen = 100 ;
retCode + = RegQueryValueEx ( hKey , " H-Route " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & HRoute , ( ULONG * ) & Vallen ) ;
Vallen = MAX_PATH ;
retCode + = RegQueryValueEx ( hKey , " BaseDir " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & BaseDirRaw , ( ULONG * ) & Vallen ) ;
ptr = & BaseDirRaw [ strlen ( BaseDirRaw ) - 1 ] ;
if ( * ptr = = ' \\ ' | | * ptr = = ' / ' )
* ptr = 0 ;
ExpandEnvironmentStrings ( BaseDirRaw , BaseDir , MAX_PATH ) ;
// Get length of Chatnodes String
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " SMTPPort " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & SMTPInPort , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " POP3Port " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & POP3InPort , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " NNTPPort " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & NNTPInPort , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " SMTPGatewayEnabled " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ISP_Gateway_Enabled , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " RemoteEmail " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & RemoteEmail , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " POP3 Polling Interval " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ISPPOP3Interval , ( ULONG * ) & Vallen ) ;
Vallen = 50 ;
retCode + = RegQueryValueEx ( hKey , " MyDomain " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & MyDomain , ( ULONG * ) & Vallen ) ;
Vallen = 50 ;
retCode + = RegQueryValueEx ( hKey , " ISPSMTPName " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ISPSMTPName , ( ULONG * ) & Vallen ) ;
Vallen = 50 ;
retCode + = RegQueryValueEx ( hKey , " ISPPOP3Name " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ISPPOP3Name , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " ISPSMTPPort " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ISPSMTPPort , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " ISPPOP3Port " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ISPPOP3Port , ( ULONG * ) & Vallen ) ;
Vallen = 50 ;
retCode + = RegQueryValueEx ( hKey , " ISPAccountName " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & ISPAccountName , ( ULONG * ) & Vallen ) ;
EncryptedPassLen = 50 ;
retCode + = RegQueryValueEx ( hKey , " ISPAccountPass " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & EncryptedISPAccountPass , ( ULONG * ) & EncryptedPassLen ) ;
DecryptPass ( EncryptedISPAccountPass , ISPAccountPass , EncryptedPassLen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " AuthenticateSMTP " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & SMTPAuthNeeded , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " Log_BBS " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & LogBBS , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " Log_TCP " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & LogTCP , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " Log_CHAT " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & LogCHAT , ( ULONG * ) & Vallen ) ;
Vallen = 80 ;
RegQueryValueEx ( hKey , " MonitorSize " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & Size , ( ULONG * ) & Vallen ) ;
sscanf ( Size , " %d,%d,%d,%d " , & MonitorRect . left , & MonitorRect . right , & MonitorRect . top , & MonitorRect . bottom ) ;
Vallen = 80 ;
RegQueryValueEx ( hKey , " WindowSize " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & Size , ( ULONG * ) & Vallen ) ;
sscanf ( Size , " %d,%d,%d,%d " , & MainRect . left , & MainRect . right , & MainRect . top , & MainRect . bottom ) ;
// Get Welcome Messages
Vallen = 0 ;
RegQueryValueEx ( hKey , " WelcomeMsg " , 0 , ( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
WelcomeMsg = malloc ( Vallen ) ;
RegQueryValueEx ( hKey , " WelcomeMsg " , 0 , ( ULONG * ) & Type , WelcomeMsg , ( ULONG * ) & Vallen ) ;
}
else
WelcomeMsg = _strdup ( " Hello $I. Latest Message is $L, Last listed is $Z \r \n " ) ;
RegQueryValueEx ( hKey , " NewUserWelcomeMsg " , 0 , ( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
NewWelcomeMsg = malloc ( Vallen ) ;
RegQueryValueEx ( hKey , " NewUserWelcomeMsg " , 0 , ( ULONG * ) & Type , NewWelcomeMsg , ( ULONG * ) & Vallen ) ;
}
else
NewWelcomeMsg = _strdup ( " Hello $I. Latest Message is $L, Last listed is $Z \r \n " ) ;
Vallen = 0 ;
RegQueryValueEx ( hKey , " ExpertWelcomeMsg " , 0 , ( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
ExpertWelcomeMsg = malloc ( Vallen ) ;
RegQueryValueEx ( hKey , " ExpertWelcomeMsg " , 0 , ( ULONG * ) & Type , ExpertWelcomeMsg , ( ULONG * ) & Vallen ) ;
}
else
ExpertWelcomeMsg = _strdup ( " " ) ;
Vallen = 99 ;
RegQueryValueEx ( hKey , " SignoffMsg " , 0 , ( ULONG * ) & Type , & SignoffMsg [ 0 ] , ( ULONG * ) & Vallen ) ;
// Get Prompts
Vallen = 0 ;
RegQueryValueEx ( hKey , " Prompt " , 0 , ( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
Prompt = malloc ( Vallen + 3 ) ;
RegQueryValueEx ( hKey , " Prompt " , 0 , ( ULONG * ) & Type , Prompt , ( ULONG * ) & Vallen ) ;
}
else
{
Prompt = malloc ( 20 ) ;
sprintf ( Prompt , " de %s> \r \n " , BBSName ) ;
}
RegQueryValueEx ( hKey , " NewUserPrompt " , 0 , ( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
NewPrompt = malloc ( Vallen + 3 ) ;
RegQueryValueEx ( hKey , " NewUserPrompt " , 0 , ( ULONG * ) & Type , NewPrompt , ( ULONG * ) & Vallen ) ;
}
else
{
NewPrompt = malloc ( 20 ) ;
sprintf ( NewPrompt , " de %s> \r \n " , BBSName ) ;
}
RegQueryValueEx ( hKey , " ExpertPrompt " , 0 , ( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
ExpertPrompt = malloc ( Vallen ) ;
RegQueryValueEx ( hKey , " ExpertPrompt " , 0 , ( ULONG * ) & Type , ExpertPrompt , ( ULONG * ) & Vallen ) ;
}
else
{
ExpertPrompt = malloc ( 20 ) ;
sprintf ( ExpertPrompt , " de %s> \r \n " , BBSName ) ;
}
TidyPrompts ( ) ;
RegQueryValueEx ( hKey , " NewUserWelcomeMsg " , 0 , ( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
NewWelcomeMsg = malloc ( Vallen ) ;
RegQueryValueEx ( hKey , " NewUserWelcomeMsg " , 0 , ( ULONG * ) & Type , NewWelcomeMsg , ( ULONG * ) & Vallen ) ;
}
else
NewWelcomeMsg = _strdup ( " Hello $I. Latest Message is $L, Last listed is $Z \r \n " ) ;
Vallen = 0 ;
RegQueryValueEx ( hKey , " ExpertWelcomeMsg " , 0 , ( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
ExpertWelcomeMsg = malloc ( Vallen ) ;
RegQueryValueEx ( hKey , " ExpertWelcomeMsg " , 0 , ( ULONG * ) & Type , ExpertWelcomeMsg , ( ULONG * ) & Vallen ) ;
}
else
ExpertWelcomeMsg = _strdup ( " " ) ;
Vallen = 80 ;
RejFrom = RegGetMultiStringValue ( hKey , " RejFrom " ) ;
RejTo = RegGetMultiStringValue ( hKey , " RejTo " ) ;
RejAt = RegGetMultiStringValue ( hKey , " RejAt " ) ;
HoldFrom = RegGetMultiStringValue ( hKey , " HoldFrom " ) ;
HoldTo = RegGetMultiStringValue ( hKey , " HoldTo " ) ;
HoldAt = RegGetMultiStringValue ( hKey , " HoldAt " ) ;
// Send WP Params
Vallen = 4 ;
RegQueryValueEx ( hKey , " SendWP " , 0 , & Type , ( UCHAR * ) & SendWP , & Vallen ) ;
Vallen = 10 ;
RegQueryValueEx ( hKey , " SendWPTO " , 0 , & Type , & SendWPTO [ 0 ] , & Vallen ) ;
Vallen = 80 ;
RegQueryValueEx ( hKey , " SendWPVIA " , 0 , & Type , & SendWPVIA [ 0 ] , & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " SendWPType " , 0 , & Type , ( UCHAR * ) & SendWPType , & Vallen ) ;
if ( RegQueryValueEx ( hKey , " Version " , 0 , ( ULONG * ) & Type , ( UCHAR * ) & Size , ( ULONG * ) & Vallen ) = = 0 )
sscanf ( Size , " %d,%d,%d,%d " , & LastVer [ 0 ] , & LastVer [ 1 ] , & LastVer [ 2 ] , & LastVer [ 3 ] ) ;
/*
if ( ( LastVer [ 3 ] ! = Ver [ 3 ] ) | | ( LastVer [ 2 ] ! = Ver [ 2 ] ) | |
( LastVer [ 1 ] ! = Ver [ 1 ] ) | | ( LastVer [ 0 ] ! = Ver [ 0 ] ) )
{
// New Version Detected
if ( LastVer [ 0 ] = = 0 )
{
// Pre Version Checking
MessageBox ( NULL , " WARNING - This seems to be the first time you have run this version. \r \n "
" Forwarding has changed significantly. Please read the docs and make the necessary \r \n "
" changes to Forwarding Config. The Software will try to fill in the BBS HA fields from the WP \r \n "
" Database, but check them, and complete the new 'Hierarchical Routes (Flood Bulls)' field. \r \n "
" Network access has been disabled by setting BBS Streams to zero to prevent messages \r \n "
" being lost or incorrecly forwarded. Once you are happy with the forwarding config \r \n "
" you can reset BBS Streams. " ,
" BPQMailChat " , MB_ICONINFORMATION ) ;
MaxStreams = 0 ;
RegSetValueEx ( hKey , " Streams " , 0 , REG_DWORD , ( BYTE * ) & MaxStreams , 4 ) ;
}
}
*/
RegCloseKey ( hKey ) ;
for ( i = 1 ; i < = 32 ; i + + )
{
int retCode ;
char Key [ 100 ] ;
sprintf ( Key , " SOFTWARE \\ G8BPQ \\ BPQ32 \\ BPQMailChat \\ UIPort%d " , i ) ;
retCode = RegOpenKeyEx ( REGTREE ,
Key ,
0 ,
KEY_QUERY_VALUE ,
& hKey ) ;
if ( retCode = = ERROR_SUCCESS )
{
Vallen = 4 ;
RegQueryValueEx ( hKey , " Enabled " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & UIEnabled [ i ] , ( ULONG * ) & Vallen ) ;
UIMF [ i ] = UIEnabled [ i ] ; // Defaults
UIHDDR [ i ] = UIEnabled [ i ] ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " SendMF " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & UIMF [ i ] , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " SendHDDR " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & UIHDDR [ i ] , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " SendNull " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & UINull [ i ] , ( ULONG * ) & Vallen ) ;
Vallen = 0 ;
RegQueryValueEx ( hKey , " Digis " , 0 ,
( ULONG * ) & Type , NULL , ( ULONG * ) & Vallen ) ;
if ( Vallen )
{
UIDigi [ i ] = malloc ( Vallen ) ;
RegQueryValueEx ( hKey , " Digis " , 0 ,
( ULONG * ) & Type , UIDigi [ i ] , ( ULONG * ) & Vallen ) ;
}
// retCode = RegSetValueEx(hKey, "Digis",0, REG_SZ,(BYTE *)UIDigi[i], strlen(UIDigi[i]));
RegCloseKey ( hKey ) ;
}
}
retCode + = RegOpenKeyEx ( REGTREE ,
" SOFTWARE \\ G8BPQ \\ BPQ32 \\ BPQMailChat \\ Housekeeping " ,
0 ,
KEY_QUERY_VALUE ,
& hKey ) ;
if ( retCode = = ERROR_SUCCESS )
{
Vallen = 4 ;
RegQueryValueEx ( hKey , " LastHouseKeepingTime " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & LastHouseKeepingTime , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " LastTrafficTime " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & LastTrafficTime , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " MaxMsgno " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & MaxMsgno , ( ULONG * ) & Vallen ) ;
if ( MaxMsgno > 99000 ) MaxMsgno = 99000 ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " LogLifetime " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & LogAge , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " BidLifetime " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & BidLifetime , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " UserLifetime " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & UserLifetime , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " MaintInterval " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & MaintInterval , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " MaintTime " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & MaintTime , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " PR " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & PR , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " PUR " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & PUR , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " PF " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & PF , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " PNF " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & PNF , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " BF " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & BF , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
retCode + = RegQueryValueEx ( hKey , " BNF " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & BNF , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " NTSD " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & NTSD , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " NTSU " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & NTSU , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " NTSF " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & NTSF , ( ULONG * ) & Vallen ) ;
// Vallen=4;
// retCode += RegQueryValueEx(hKey, "AP", 0,
// (ULONG *)&Type,(UCHAR *)&AP,(ULONG *)&Vallen);
// Vallen=4;
// retCode += RegQueryValueEx(hKey, "AB", 0,
// (ULONG *)&Type,(UCHAR *)&AB,(ULONG *)&Vallen);
Vallen = 4 ;
RegQueryValueEx ( hKey , " DeletetoRecycleBin " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & DeletetoRecycleBin , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " SuppressMaintEmail " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & SuppressMaintEmail , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " MaintSaveReg " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & SaveRegDuringMaint , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " OverrideUnsent " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & OverrideUnsent , ( ULONG * ) & Vallen ) ;
Vallen = 4 ;
RegQueryValueEx ( hKey , " SendNonDeliveryMsgs " , 0 ,
( ULONG * ) & Type , ( UCHAR * ) & SendNonDeliveryMsgs , ( ULONG * ) & Vallen ) ;
LTFROM = RegGetOverrides ( hKey , " LTFROM " ) ;
LTTO = RegGetOverrides ( hKey , " LTTO " ) ;
LTAT = RegGetOverrides ( hKey , " LTAT " ) ;
}
return TRUE ;
}
}
INT_PTR CALLBACK UserEditDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
int Command , n ;
UNREFERENCED_PARAMETER ( lParam ) ;
switch ( message )
{
case WM_INITDIALOG :
for ( n = 1 ; n < = NumberofUsers ; n + + )
{
SendDlgItemMessage ( hDlg , IDC_USER , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) UserRecPtr [ n ] - > Call ) ;
}
return ( INT_PTR ) TRUE ;
case WM_CTLCOLORDLG :
return ( LONG ) bgBrush ;
case WM_CTLCOLORSTATIC :
{
HDC hdcStatic = ( HDC ) wParam ;
SetTextColor ( hdcStatic , RGB ( 0 , 0 , 0 ) ) ;
SetBkMode ( hdcStatic , TRANSPARENT ) ;
return ( LONG ) bgBrush ;
}
case WM_COMMAND :
Command = LOWORD ( wParam ) ;
switch ( Command )
{
case IDOK :
case IDCANCEL :
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
case IDC_USER :
// User Selection Changed
Do_User_Sel_Changed ( hDlg ) ;
return TRUE ;
case IDC_ADDUSER :
Do_Add_User ( hDlg ) ;
return TRUE ;
case IDC_DELETEUSER :
Do_Delete_User ( hDlg ) ;
return TRUE ;
case IDC_SAVEUSER :
Do_Save_User ( hDlg , TRUE ) ;
return TRUE ;
}
break ;
}
return ( INT_PTR ) FALSE ;
}
INT_PTR CALLBACK MsgEditDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
int Command , n ;
char msgno [ 20 ] ;
struct MsgInfo * Msg ;
UNREFERENCED_PARAMETER ( lParam ) ;
switch ( message )
{
case WM_INITDIALOG :
for ( n = NumberofMessages ; n > = 1 ; n - - )
{
sprintf_s ( msgno , sizeof ( msgno ) , " %d " , MsgHddrPtr [ n ] - > number ) ;
SendDlgItemMessage ( hDlg , 0 , LB_ADDSTRING , 0 , ( LPARAM ) msgno ) ;
}
SendDlgItemMessage ( hDlg , IDC_MSGTYPE , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " B " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGTYPE , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " P " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGTYPE , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " T " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGSTATUS , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " N " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGSTATUS , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " Y " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGSTATUS , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " F " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGSTATUS , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " K " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGSTATUS , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " H " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGSTATUS , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " D " ) ;
SendDlgItemMessage ( hDlg , IDC_MSGSTATUS , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) " $ " ) ;
CheckDlgButton ( hDlg , 205 , BST_INDETERMINATE ) ;
CheckDlgButton ( hDlg , 206 , BST_UNCHECKED ) ;
CheckDlgButton ( hDlg , 207 , BST_CHECKED ) ;
return ( INT_PTR ) TRUE ;
case WM_CTLCOLORDLG :
return ( LONG ) bgBrush ;
case WM_CTLCOLORSTATIC :
{
HDC hdcStatic = ( HDC ) wParam ;
SetTextColor ( hdcStatic , RGB ( 0 , 0 , 0 ) ) ;
SetBkMode ( hdcStatic , TRANSPARENT ) ;
return ( LONG ) bgBrush ;
}
case WM_COMMAND :
Command = LOWORD ( wParam ) ;
switch ( Command )
{
case IDOK :
case IDCANCEL :
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
case 0 :
// Msg Selection Changed
Do_Msg_Sel_Changed ( hDlg ) ;
return TRUE ;
case IDC_EDITTEXT :
if ( CurrentMsgIndex = = - 1 )
{
sprintf ( InfoBoxText , " Please select a message to Edit " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return TRUE ;
}
if ( SendDlgItemMessage ( hDlg , 0 , LB_GETSELCOUNT , 0 , 0 ) > 1 )
{
sprintf ( InfoBoxText , " Please select only one message " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return TRUE ;
}
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_EDITMSGTEXT ) , hDlg , EditMsgTextDialogProc ) ;
return TRUE ;
case IDC_SAVEMSG :
if ( SendDlgItemMessage ( hDlg , 0 , LB_GETSELCOUNT , 0 , 0 ) > 1 )
{
sprintf ( InfoBoxText , " Please select only one message " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return TRUE ;
}
Do_Save_Msg ( hDlg ) ;
return TRUE ;
case IDC_EXPORT :
{
struct MsgInfo * Msg ;
char FileName [ MAX_PATH ] = " Export.out " ;
OPENFILENAME Ofn ;
int Count ;
int * Indexes ;
int i ;
char MsgnoText [ 10 ] ;
int Msgno ;
if ( CurrentMsgIndex = = - 1 )
{
sprintf ( InfoBoxText , " Please select a message to Export " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return TRUE ;
}
Count = SendDlgItemMessage ( hDlg , 0 , LB_GETSELCOUNT , 0 , 0 ) ;
Indexes = malloc ( Count * sizeof ( void * ) ) ;
SendDlgItemMessage ( hDlg , 0 , LB_GETSELITEMS , Count , ( LPARAM ) & Indexes [ 0 ] ) ;
memset ( & Ofn , 0 , sizeof ( Ofn ) ) ;
Ofn . lStructSize = sizeof ( OPENFILENAME ) ;
Ofn . hInstance = hInst ;
Ofn . hwndOwner = hDlg ;
Ofn . lpstrFilter = NULL ;
Ofn . lpstrFile = FileName ;
Ofn . nMaxFile = sizeof ( FileName ) / sizeof ( * FileName ) ;
Ofn . lpstrFileTitle = NULL ;
Ofn . nMaxFileTitle = 0 ;
Ofn . lpstrInitialDir = ( LPSTR ) NULL ;
Ofn . Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT ;
Ofn . lpstrTitle = NULL ; //;
if ( GetSaveFileName ( & Ofn ) )
{
FILE * Handle = fopen ( FileName , " ab " ) ;
if ( Handle = = NULL )
{
sprintf ( InfoBoxText , " Failed to open Export File %s " , FileName ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return TRUE ;
}
// SetFilePointer(Handle, 0, 0, FILE_END);
for ( i = 0 ; i < Count ; i + + )
{
Msg = MsgHddrPtr [ Indexes [ i ] ] ;
SendDlgItemMessage ( hDlg , 0 , LB_GETTEXT , Indexes [ i ] , ( LPARAM ) ( LPCTSTR ) & MsgnoText ) ;
Msgno = atoi ( MsgnoText ) ;
for ( CurrentMsgIndex = 1 ; CurrentMsgIndex < = NumberofMessages ; CurrentMsgIndex + + )
{
Msg = MsgHddrPtr [ CurrentMsgIndex ] ;
if ( Msg - > number = = Msgno )
{
ForwardMessagetoFile ( Msg , Handle ) ;
break ;
}
}
}
fclose ( Handle ) ;
}
free ( Indexes ) ;
return TRUE ;
}
case IDC_SAVETOFILE :
{
struct MsgInfo * Msg ;
char * MailBuffer ;
char FileName [ MAX_PATH ] = " " ;
int Files = 0 ;
int BodyLen ;
char * ptr ;
HANDLE hFile = INVALID_HANDLE_VALUE ;
int WriteLen = 0 ;
OPENFILENAME Ofn ;
char Hddr [ 1000 ] ;
char FullTo [ 100 ] ;
if ( CurrentMsgIndex = = - 1 )
{
sprintf ( InfoBoxText , " Please select a message to Save " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return TRUE ;
}
if ( SendDlgItemMessage ( hDlg , 0 , LB_GETSELCOUNT , 0 , 0 ) > 1 )
{
sprintf ( InfoBoxText , " Please select only one message " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return TRUE ;
}
Msg = MsgHddrPtr [ CurrentMsgIndex ] ;
MailBuffer = ReadMessageFile ( Msg - > number ) ;
BodyLen = Msg - > length ;
sprintf ( FileName , " MSG%05d.txt " , Msg - > number ) ;
ptr = MailBuffer ;
if ( _stricmp ( Msg - > to , " RMS " ) = = 0 )
sprintf ( FullTo , " RMS:%s " , Msg - > via ) ;
else
if ( Msg - > to [ 0 ] = = 0 )
sprintf ( FullTo , " smtp:%s " , Msg - > via ) ;
else
strcpy ( FullTo , Msg - > to ) ;
sprintf ( Hddr , " From: %s%s \r \n To: %s \r \n Type/Status: %c%c \r \n Date/Time: %s \r \n Bid: %s \r \n Title: %s \r \n \r \n " ,
Msg - > from , Msg - > emailfrom , FullTo , Msg - > type , Msg - > status , FormatDateAndTime ( ( time_t ) Msg - > datecreated , FALSE ) , Msg - > bid , Msg - > title ) ;
if ( Msg - > B2Flags & B2Msg )
{
// Remove B2 Headers (up to the File: Line)
char * bptr ;
bptr = strstr ( ptr , " Body: " ) ;
if ( bptr )
{
BodyLen = atoi ( bptr + 5 ) ;
bptr = strstr ( bptr , " \r \n \r \n " ) ;
if ( bptr )
ptr = bptr + 4 ;
}
}
memset ( & Ofn , 0 , sizeof ( Ofn ) ) ;
Ofn . lStructSize = sizeof ( OPENFILENAME ) ;
Ofn . hInstance = hInst ;
Ofn . hwndOwner = hDlg ;
Ofn . lpstrFilter = NULL ;
Ofn . lpstrFile = FileName ;
Ofn . nMaxFile = sizeof ( FileName ) / sizeof ( * FileName ) ;
Ofn . lpstrFileTitle = NULL ;
Ofn . nMaxFileTitle = 0 ;
Ofn . lpstrInitialDir = ( LPSTR ) NULL ;
Ofn . Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT ;
Ofn . lpstrTitle = NULL ; //;
if ( GetSaveFileName ( & Ofn ) )
{
hFile = CreateFile ( FileName ,
GENERIC_WRITE , FILE_SHARE_READ , NULL ,
CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , NULL ) ;
if ( hFile ! = INVALID_HANDLE_VALUE )
{
WriteFile ( hFile , Hddr , strlen ( Hddr ) , & WriteLen , NULL ) ;
WriteFile ( hFile , ptr , BodyLen , & WriteLen , NULL ) ;
CloseHandle ( hFile ) ;
}
}
return TRUE ;
}
case IDC_PRINTMSG :
{
int Count ;
int * Indexes ;
if ( CurrentMsgIndex = = - 1 )
{
sprintf ( InfoBoxText , " Please select a message to Print " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
return TRUE ;
}
Count = SendDlgItemMessage ( hDlg , 0 , LB_GETSELCOUNT , 0 , 0 ) ;
Indexes = malloc ( Count * sizeof ( void * ) ) ;
SendDlgItemMessage ( hDlg , 0 , LB_GETSELITEMS , Count , ( LPARAM ) & Indexes [ 0 ] ) ;
PrintMessages ( hDlg , Count , Indexes ) ;
free ( Indexes ) ;
return TRUE ;
}
case FILTER_FROM :
case FILTER_TO :
case FILTER_VIA :
case FILTER_BID :
if ( HIWORD ( wParam ) = = 0x300 )
{
GetDlgItemText ( hDlg , FILTER_FROM , Filter_FROM , 10 ) ;
GetDlgItemText ( hDlg , FILTER_TO , Filter_TO , 10 ) ;
GetDlgItemText ( hDlg , FILTER_VIA , Filter_VIA , 50 ) ;
GetDlgItemText ( hDlg , FILTER_BID , Filter_BID , 14 ) ;
SendDlgItemMessage ( hDlg , 0 , LB_RESETCONTENT , 0 , 0 ) ;
for ( n = NumberofMessages ; n > = 1 ; n - - )
{
Msg = MsgHddrPtr [ n ] ;
if ( ( ! Filter_TO [ 0 ] | | strstr ( Msg - > to , Filter_TO ) ) & &
( ! Filter_FROM [ 0 ] | | strstr ( Msg - > from , Filter_FROM ) ) & &
( ! Filter_BID [ 0 ] | | strstr ( Msg - > bid , Filter_BID ) ) & &
( ! Filter_VIA [ 0 ] | | strstr ( Msg - > via , Filter_VIA ) ) )
{
sprintf_s ( msgno , sizeof ( msgno ) , " %d " , Msg - > number ) ;
SendDlgItemMessage ( hDlg , 0 , LB_ADDSTRING , 0 , ( LPARAM ) msgno ) ;
}
}
}
return TRUE ;
}
break ;
}
return ( INT_PTR ) FALSE ;
}
char HRHelpMsg [ ] =
" Please read the following carefully, as forwarding is handled rather differently from other BBS software \r \n "
" Private Messages, and Bulls that have not reached their target area (eg a Bull sent to ALL@GBR from the \r \n "
" USA) are forwarded to only one define define BBS1 with HR EU and BBS2 with HR GBR.EU, a message for GBR.EU \r \n "
" will be sent to BBS2. Any other EU message (eg FRA.EU) would be sent to BBS2. "
" \r \n \r \n "
" Bulls which have reached their target will be sent to ALL BBS's where the BBS HA matches all elements \r \n "
" of the HA of the message \r \n So if a BBS had \r \n "
" GBR.EU It would match messages sent to EU or GBR.EU, but not FRA.EU. \r \n "
" If you want to send only Bulls addressed to a lower level then add the number of levels to ignore after the string \r \n "
" So #23.GBR.EU,2 would match only Bulls for #23, and not GBR or EU \r \r "
" The software assumes an implied WW on the end of all aadresses, but only if there is something in the field \r \n "
" So you need an explicit WW to send to everyone. So a BBS with WW in the HA will get all Bulls, and any Personal \r \n "
" Messages that don't have a more explicit route via another BBS "
;
INT_PTR CALLBACK HRHelpProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
UNREFERENCED_PARAMETER ( lParam ) ;
switch ( message )
{
case WM_INITDIALOG :
SetDlgItemText ( hDlg , IDC_HRTEXT , HRHelpMsg ) ;
return ( INT_PTR ) TRUE ;
case WM_COMMAND :
if ( LOWORD ( wParam ) = = IDOK | | LOWORD ( wParam ) = = IDCANCEL )
{
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
}
return ( INT_PTR ) TRUE ;
break ;
}
return ( INT_PTR ) FALSE ;
}
# include <htmlhelp.h>
int scrolledx ; scrolledy ;
INT_PTR CALLBACK FwdEditDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
int Command ;
struct UserInfo * user ;
RECT Rect ;
SCROLLINFO Sinfo ;
int deltax , deltay ;
UNREFERENCED_PARAMETER ( lParam ) ;
switch ( message )
{
case WM_INITDIALOG :
for ( user = BBSChain ; user ; user = user - > BBSNext )
{
SendDlgItemMessage ( hDlg , IDC_BBS , CB_ADDSTRING , 0 , ( LPARAM ) ( LPCTSTR ) user - > Call ) ;
}
SetDlgItemInt ( hDlg , IDC_MAXSEND , MaxTXSize , FALSE ) ;
SetDlgItemInt ( hDlg , IDC_MAXRECV , MaxRXSize , FALSE ) ;
SetDlgItemInt ( hDlg , IDC_MAXAGE , MaxAge , FALSE ) ;
if ( Aliases )
{
char Text [ 100000 ] = " " ;
int i = 0 ;
while ( Aliases [ i ] )
{
strcat ( Text , Aliases [ i ] - > Dest ) ;
strcat ( Text , " : " ) ;
strcat ( Text , Aliases [ i ] - > Alias ) ;
strcat ( Text , " \r \n " ) ;
i + + ;
}
SetDlgItemText ( hDlg , IDC_ALIAS , Text ) ;
}
CheckDlgButton ( hDlg , IDC_READDRESSLOCAL , ReaddressLocal ) ;
CheckDlgButton ( hDlg , IDC_READDRESSRXED , ReaddressReceived ) ;
CheckDlgButton ( hDlg , IDC_WARNNOROUTE , WarnNoRoute ) ;
CheckDlgButton ( hDlg , IDC_USELOCALTIME , Localtime ) ;
CheckDlgButton ( hDlg , IDC_MULTIP , SendPtoMultiple ) ;
2024-07-07 16:06:08 +01:00
CheckDlgButton ( hDlg , IDC_FOURCHARCONTINENT , FOURCHARCONT ) ;
2022-08-28 09:35:46 +01:00
CurrentBBS = NULL ;
ww = 0 ;
wh = 0 ;
ShowScrollBar ( hDlg , SB_BOTH , FALSE ) ; // Hide them till needed
xmargin = 6 ;
ymargin = 2 + GetSystemMetrics ( SM_CYCAPTION ) ;
scrolledx = scrolledy = 0 ;
GetWindowRect ( hDlg , & Rect ) ;
ww = Rect . right - Rect . left ;
wh = Rect . bottom - Rect . top ;
return ( INT_PTR ) TRUE ;
case WM_SIZE :
w = LOWORD ( lParam ) ;
h = HIWORD ( lParam ) ;
// If window is smaller than client area enable scroll bars
if ( w > = ww & & ( h + ymargin ) > = wh )
{
ShowScrollBar ( hDlg , SB_BOTH , FALSE ) ; // Hide them till needed
// MoveWindow(hwndDisplay, xmargin, ymargin, ww, wh, TRUE);
ScrollWindow ( hDlg , scrolledx , scrolledy , 0 , 0 ) ;
scrolledx = scrolledy = 0 ;
return TRUE ;
}
ShowScrollBar ( hDlg , SB_BOTH , TRUE ) ;
Sinfo . cbSize = sizeof ( SCROLLINFO ) ;
Sinfo . fMask = SIF_ALL ;
Sinfo . nMin = 0 ;
Sinfo . nMax = ww + xmargin ;
Sinfo . nPage = w ;
Sinfo . nPos = hpos ;
SetScrollInfo ( hDlg , SB_HORZ , & Sinfo , TRUE ) ;
Sinfo . cbSize = sizeof ( SCROLLINFO ) ;
Sinfo . fMask = SIF_ALL ;
Sinfo . nMin = 0 ;
Sinfo . nMax = wh + ymargin ;
Sinfo . nPage = h ;
Sinfo . nPos = hpos ;
SetScrollInfo ( hDlg , SB_VERT , & Sinfo , TRUE ) ;
return TRUE ;
case WM_HSCROLL :
switch ( LOWORD ( wParam ) )
{
case SB_PAGELEFT :
goto UpdateHPos ;
case SB_LINELEFT :
goto UpdateHPos ;
case SB_PAGERIGHT :
goto UpdateHPos ;
case SB_LINERIGHT :
hpos + + ;
goto UpdateHPos ;
case SB_THUMBPOSITION :
deltax = hpos - HIWORD ( wParam ) ;
ScrollWindow ( hDlg , deltax , 0 , 0 , 0 ) ;
scrolledx - = deltax ;
hpos = hpos - = deltax ;
UpdateHPos :
// Need to update Scroll Bar
Sinfo . cbSize = sizeof ( SCROLLINFO ) ;
Sinfo . fMask = SIF_ALL ;
Sinfo . nMin = 0 ;
Sinfo . nMax = ww + xmargin ;
Sinfo . nPage = w ;
Sinfo . nPos = hpos ;
SetScrollInfo ( hDlg , SB_HORZ , & Sinfo , TRUE ) ;
// Move Client Window
return TRUE ;
}
return TRUE ;
case WM_VSCROLL :
switch ( LOWORD ( wParam ) )
{
case SB_PAGEUP :
goto UpdateVPos ;
case SB_LINEUP :
goto UpdateVPos ;
case SB_PAGEDOWN :
goto UpdateVPos ;
case SB_LINEDOWN :
goto UpdateVPos ;
case SB_THUMBPOSITION :
deltay = vpos - HIWORD ( wParam ) ;
ScrollWindow ( hDlg , 0 , deltay , 0 , 0 ) ;
scrolledy - = deltay ;
vpos = vpos - = deltay ;
UpdateVPos :
// Need to update Scroll Bar
Sinfo . cbSize = sizeof ( SCROLLINFO ) ;
Sinfo . fMask = SIF_ALL ;
Sinfo . nMin = 0 ;
Sinfo . nMax = wh + ymargin ;
Sinfo . nPage = h ;
Sinfo . nPos = vpos ;
SetScrollInfo ( hDlg , SB_VERT , & Sinfo , TRUE ) ;
return TRUE ;
}
return TRUE ;
case WM_CTLCOLORDLG :
return ( LONG ) bgBrush ;
case WM_CTLCOLORSTATIC :
{
HDC hdcStatic = ( HDC ) wParam ;
SetTextColor ( hdcStatic , RGB ( 0 , 0 , 0 ) ) ;
SetBkMode ( hdcStatic , TRANSPARENT ) ;
return ( LONG ) bgBrush ;
}
case WM_COMMAND :
Command = LOWORD ( wParam ) ;
switch ( Command )
{
case IDOK :
case IDCANCEL :
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
case IDC_BBS :
// BBS Selection Changed
Do_BBS_Sel_Changed ( hDlg ) ;
return TRUE ;
case IDC_HRHELP :
ShellExecute ( hDlg , " open " ,
" http://www.cantab.net/users/john.wiseman/Documents/BPQ Mail and Chat Server Mail Forwarding.htm " ,
" " , NULL , SW_SHOWNORMAL ) ;
return TRUE ;
case IDC_FWDSAVE :
SaveFWDConfig ( hDlg ) ;
return TRUE ;
case COPYCONFIG :
CopyFwdConfig ( hDlg ) ;
return TRUE ;
}
break ;
}
return ( INT_PTR ) FALSE ;
}
int CreateDialogLine ( HWND hWnd , int i , int row )
{
char PortNo [ 60 ] ;
char PortDesc [ 31 ] ;
// Only allow UI on ax.25 ports
struct _EXTPORTDATA * PORTVEC ;
PORTVEC = ( struct _EXTPORTDATA * ) GetPortTableEntryFromSlot ( i ) ;
if ( PORTVEC - > PORTCONTROL . PORTTYPE = = 16 ) // EXTERNAL
if ( PORTVEC - > PORTCONTROL . PROTOCOL = = 10 ) // Pactor/WINMOR
if ( PORTVEC - > PORTCONTROL . UICAPABLE = = 0 )
return FALSE ;
GetPortDescription ( i , PortDesc ) ;
sprintf ( PortNo , " Port %2d %30s " , GetPortNumber ( i ) , PortDesc ) ;
hCheck [ i ] = CreateWindow ( WC_BUTTON , " " , BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE ,
10 , row + 5 , 14 , 14 , hWnd , NULL , hInst , NULL ) ;
Button_SetCheck ( hCheck [ i ] , UIEnabled [ i ] ) ;
hLabel [ i ] = CreateWindow ( WC_STATIC , PortNo , WS_CHILD | WS_VISIBLE ,
30 , row + 5 , 300 , 22 , hWnd , NULL , hInst , NULL ) ;
SendMessage ( hLabel [ i ] , WM_SETFONT , ( WPARAM ) hFont , 0 ) ;
hUIBox [ i ] = CreateWindowEx ( WS_EX_CLIENTEDGE , WC_EDIT , " " , WS_CHILD | WS_BORDER | WS_VISIBLE | ES_UPPERCASE ,
315 , row , 200 , 22 , hWnd , NULL , hInst , NULL ) ;
SendMessage ( hUIBox [ i ] , WM_SETFONT , ( WPARAM ) hFont , 0 ) ;
SetWindowText ( hUIBox [ i ] , UIDigi [ i ] ) ;
hSendMF [ i ] = CreateWindow ( WC_BUTTON , " " , BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE ,
550 , row + 4 , 14 , 14 , hWnd , NULL , hInst , NULL ) ;
hSendHDDR [ i ] = CreateWindow ( WC_BUTTON , " " , BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE ,
610 , row + 4 , 14 , 14 , hWnd , NULL , hInst , NULL ) ;
hNullCheck [ i ] = CreateWindow ( WC_BUTTON , " " , BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE ,
670 , row + 4 , 14 , 14 , hWnd , NULL , hInst , NULL ) ;
Button_SetCheck ( hSendMF [ i ] , UIMF [ i ] ) ;
Button_SetCheck ( hSendHDDR [ i ] , UIHDDR [ i ] ) ;
Button_SetCheck ( hNullCheck [ i ] , UINull [ i ] ) ;
return TRUE ;
}
DoUICheck ( int i )
{
return TRUE ;
}
DoUIBox ( int i )
{
return TRUE ;
}
GetUIConfig ( )
{
int Num = GetNumberofPorts ( ) ;
int i , Len ;
Free_UI ( ) ;
for ( i = 1 ; i < = Num ; i + + )
{
UIEnabled [ i ] = Button_GetCheck ( hCheck [ i ] ) ;
UINull [ i ] = Button_GetCheck ( hNullCheck [ i ] ) ;
UIMF [ i ] = Button_GetCheck ( hSendMF [ i ] ) ;
UIHDDR [ i ] = Button_GetCheck ( hSendHDDR [ i ] ) ;
Len = GetWindowTextLength ( hUIBox [ i ] ) ;
UIDigi [ i ] = malloc ( Len + 1 ) ;
GetWindowText ( hUIBox [ i ] , UIDigi [ i ] , Len + 1 ) ;
}
return TRUE ;
}
INT_PTR CALLBACK UIDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
int Command , i ;
RECT Rect ;
int Row = 80 ;
switch ( message )
{
case WM_INITDIALOG :
SetDlgItemText ( hDlg , IDC_MAILFOR , MailForText ) ;
for ( i = 1 ; i < = GetNumberofPorts ( ) ; i + + )
{
if ( CreateDialogLine ( hDlg , i , Row ) )
Row + = 30 ;
}
GetWindowRect ( hDlg , & Rect ) ;
SetWindowPos ( hDlg , HWND_TOP , Rect . left , Rect . top , 800 , Row + 100 , 0 ) ;
SetWindowPos ( GetDlgItem ( hDlg , IDOK ) , NULL , 300 , Row + 20 , 70 , 30 , 0 ) ;
SetWindowPos ( GetDlgItem ( hDlg , IDCANCEL ) , NULL , 400 , Row + 20 , 80 , 30 , 0 ) ;
return ( INT_PTR ) TRUE ;
case WM_COMMAND :
Command = LOWORD ( wParam ) ;
switch ( Command )
{
case IDCANCEL :
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
case IDOK :
GetDlgItemText ( hDlg , IDC_MAILFOR , MailForText , 99 ) ;
GetUIConfig ( ) ;
SaveConfig ( ConfigName ) ;
sprintf ( InfoBoxText , " Configuration Saved " ) ;
DialogBox ( hInst , MAKEINTRESOURCE ( IDD_USERADDED_BOX ) , hWnd , InfoDialogProc ) ;
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
case 0 :
for ( i = 1 ; i < = 32 ; i + + )
{
if ( lParam = = ( LPARAM ) hCheck [ i ] )
{
DoUICheck ( i ) ;
break ;
}
else if ( lParam = = ( LPARAM ) hUIBox [ i ] )
{
DoUIBox ( i ) ;
return TRUE ;
}
}
}
break ;
}
return ( INT_PTR ) FALSE ;
}
INT_PTR CALLBACK EditMsgTextDialogProc ( HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
{
struct MsgInfo * Msg ;
char * MsgBytes ;
int Cmd = LOWORD ( wParam ) ;
switch ( message )
{
case WM_INITDIALOG :
{
HWND hWndEdit = GetDlgItem ( hDlg , IDC_MESSAGE ) ;
Msg = MsgHddrPtr [ CurrentMsgIndex ] ;
MsgBytes = ReadMessageFile ( Msg - > number ) ;
// See if Multipart
if ( Msg - > B2Flags & Attachments )
EnableWindow ( GetDlgItem ( hDlg , IDC_SAVEATTACHMENTS ) , TRUE ) ;
if ( MsgBytes )
{
SetDlgItemText ( hDlg , IDC_MESSAGE , MsgBytes ) ;
SendDlgItemMessage ( hDlg , IDC_MESSAGE , EM_SETSEL , - 1 , 0 ) ;
free ( MsgBytes ) ;
}
return TRUE ;
}
case WM_SIZING :
{
HWND hWndEdit = GetDlgItem ( hDlg , IDC_MESSAGE ) ;
LPRECT lprc = ( LPRECT ) lParam ;
int Height = lprc - > bottom - lprc - > top ;
int Width = lprc - > right - lprc - > left ;
MoveWindow ( hWndEdit , 5 , 50 , Width - 20 , Height - 95 , TRUE ) ;
return TRUE ;
}
case WM_ACTIVATE :
SendDlgItemMessage ( hDlg , IDC_MESSAGE , EM_SETSEL , - 1 , 0 ) ;
break ;
case WM_COMMAND :
if ( Cmd = = IDC_SAVEATTACHMENTS )
{
struct MsgInfo * Msg ;
char * MailBuffer ;
char FileName [ 100 ] [ MAX_PATH ] = { " " } ;
int FileLen [ 100 ] ;
int Files = 0 ;
int BodyLen ;
int i ;
char * ptr ;
HANDLE hFile = INVALID_HANDLE_VALUE ;
int WriteLen = 0 ;
Msg = MsgHddrPtr [ CurrentMsgIndex ] ;
MailBuffer = ReadMessageFile ( Msg - > number ) ;
ptr = MailBuffer ;
while ( * ptr ! = 13 )
{
char * ptr2 = strchr ( ptr , 10 ) ; // Find CR
if ( memcmp ( ptr , " Body: " , 6 ) = = 0 )
{
BodyLen = atoi ( & ptr [ 6 ] ) ;
}
if ( memcmp ( ptr , " File: " , 6 ) = = 0 )
{
char * ptr1 = strchr ( & ptr [ 6 ] , ' ' ) ; // Find Space
FileLen [ Files ] = atoi ( & ptr [ 6 ] ) ;
memcpy ( FileName [ Files + + ] , & ptr1 [ 1 ] , ( ptr2 - ptr1 - 2 ) ) ;
}
ptr = ptr2 ;
ptr + + ;
}
ptr + = 4 ; // Over Blank Line and Separator
ptr + = BodyLen ; // to first file
for ( i = 0 ; i < Files ; i + + )
{
OPENFILENAME Ofn ;
memset ( & Ofn , 0 , sizeof ( Ofn ) ) ;
Ofn . lStructSize = sizeof ( OPENFILENAME ) ;
Ofn . hInstance = hInst ;
Ofn . hwndOwner = hDlg ;
Ofn . lpstrFilter = NULL ;
Ofn . lpstrFile = FileName [ i ] ;
Ofn . nMaxFile = sizeof ( FileName [ i ] ) / sizeof ( * FileName [ i ] ) ;
Ofn . lpstrFileTitle = NULL ;
Ofn . nMaxFileTitle = 0 ;
Ofn . lpstrInitialDir = ( LPSTR ) NULL ;
Ofn . Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT ;
Ofn . lpstrTitle = NULL ; //;
if ( GetSaveFileName ( & Ofn ) )
{
hFile = CreateFile ( FileName [ i ] ,
GENERIC_WRITE , FILE_SHARE_READ , NULL ,
CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL , NULL ) ;
if ( hFile ! = INVALID_HANDLE_VALUE )
{
WriteFile ( hFile , ptr , FileLen [ i ] , & WriteLen , NULL ) ;
CloseHandle ( hFile ) ;
}
}
ptr + = FileLen [ i ] ;
ptr + = 2 ; // Over separator - I don't think there should be one
}
}
if ( Cmd = = IDSAVE )
{
struct MsgInfo * Msg ;
char * via = NULL ;
int MsgLen ;
char * MailBuffer ;
char MsgFile [ MAX_PATH ] ;
HANDLE hFile = INVALID_HANDLE_VALUE ;
int WriteLen = 0 ;
Msg = MsgHddrPtr [ CurrentMsgIndex ] ;
if ( Msg - > B2Flags & Attachments )
{
MessageBox ( NULL , " It isn't safe to save messages with attachments " , " BPQMail " , MB_ICONERROR ) ;
return TRUE ;
}
MsgLen = SendDlgItemMessage ( hDlg , IDC_MESSAGE , WM_GETTEXTLENGTH , 0 , 0 ) ;
if ( MsgLen )
{
MailBuffer = malloc ( MsgLen + 1 ) ;
GetDlgItemText ( hDlg , IDC_MESSAGE , MailBuffer , MsgLen + 1 ) ;
}
Msg - > datechanged = time ( NULL ) ;
Msg - > length = MsgLen ;
sprintf_s ( MsgFile , sizeof ( MsgFile ) , " %s/m_%06d.mes " , MailDir , Msg - > number ) ;
hFile = CreateFile ( MsgFile ,
GENERIC_WRITE ,
FILE_SHARE_READ ,
NULL ,
CREATE_ALWAYS ,
FILE_ATTRIBUTE_NORMAL ,
NULL ) ;
if ( hFile ! = INVALID_HANDLE_VALUE )
{
WriteFile ( hFile , MailBuffer , Msg - > length , & WriteLen , NULL ) ;
CloseHandle ( hFile ) ;
}
free ( MailBuffer ) ;
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return TRUE ;
}
if ( Cmd = = IDCANCEL )
{
EndDialog ( hDlg , LOWORD ( wParam ) ) ;
return ( INT_PTR ) TRUE ;
}
return ( INT_PTR ) TRUE ;
break ;
}
return ( INT_PTR ) FALSE ;
}