📄 io.cpp
字号:
hWndAdd = GetDlgItem( hDlg, IDC_ADD );
hWndReplace = GetDlgItem( hDlg, IDC_REPLACE );
hWndDelete= GetDlgItem( hDlg, IDC_DELETE );
hWndKeys= GetDlgItem( hDlg, IDC_NEW );
assert( hWndList && hWndType && hWndHost && hWndPort );
assert( hWndSend && hWndRecv );
assert( hWndAdd && hWndReplace && hWndDelete );
EnableWindow( hWndAdd, FALSE );
EnableWindow( hWndReplace, FALSE );
EnableWindow( hWndDelete, FALSE );
EnableWindow( hWndKeys, FALSE );
/*
** Add options to 'Types' combo-box
*/
int iTmp = 0;
for(;; iTmp++ )
{
pTmp = AD_lookupValueEx( __pConfig, "Internal",
"IOTypes", iTmp );
if ( !pTmp )
{ break; };
::SendMessage( hWndType, CB_ADDSTRING, 0,
(LPARAM)pTmp );
};
/*
** Limit edit field lengths, really just a sanity thing
*/
SendMessage( hWndHost, EM_SETLIMITTEXT, 256, 0 );
SendMessage( hWndPort, EM_SETLIMITTEXT, 256, 0 );
SendMessage( hWndSend, EM_SETLIMITTEXT, 256, 0 );
SendMessage( hWndRecv, EM_SETLIMITTEXT, 256, 0 );
/*
** Setup tabstops
*/
aTabstop[0] = 0;
aTabstop[1] = 38;
aTabstop[2] = 107;
aTabstop[3] = 148;
aTabstop[4] = 187;
SendMessage( hWndList, LB_SETTABSTOPS, 5, (LPARAM)&aTabstop );
/*
** Load all mappings
*/
iTmp = 0;
for(;; iTmp++ )
{
pTmp = AD_lookupValueEx( __pConfig, "IOObjects",
"IOObject", iTmp );
if ( !pTmp )
{ break; };
if ( SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)pTmp )>=0 )
{
Internal_addLine( pTmp );
}
else
{ break; /* error */; };
};
}
AD_hourglassOff();
break;
case WM_DESTROY:
{
/*
** Delete values
*/
DblListIterator x( lTypes );
DblListIterator y( lHosts );
DblListIterator z( lPorts );
DblListIterator s( lSends );
DblListIterator r( lRecvs );
for( ; !x.BadIndex(); x++, y++, z++, s++, r++ )
{
assert( !x.BadIndex() && !y.BadIndex() && !z.BadIndex()
&& !s.BadIndex() && !r.BadIndex() );
PI_DELETE( (PIString *)x.Current() );
PI_DELETE( (PIString *)y.Current() );
PI_DELETE( (PIString *)z.Current() );
PI_DELETE( (PIString *)s.Current() );
PI_DELETE( (PIString *)r.Current() );
};
lTypes.Clear();
lHosts.Clear();
lPorts.Clear();
lSends.Clear();
lRecvs.Clear();
};
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDC_ADD:
{
/*
** Verify fields are valid
*/
if ( !Internal_verifyFields( hDlg, szBuf, BUF_SIZE ) )
{ break; };
int i, j;
*szBuf = '\0';
SendMessage( hWndType, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
for( i=0; i<BUF_SIZE && szBuf[i]!='\t' && szBuf[i]; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lTypes.Append( (DblList::type)PI_NEW( PIString( szBuf ) ) );
szBuf[i++] = '\t';
SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lHosts.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lPorts.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndSend, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lSends.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndRecv, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lRecvs.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );
/*
** Clear edit fields, focus to list
*/
SendMessage( hWndType, CB_SETCURSEL, (WPARAM)-1, 0 );
SendMessage( hWndHost, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndPort, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndSend, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndRecv, WM_SETTEXT, 0, (LPARAM)"" );
EnableWindow( hWndKeys, FALSE );
SetFocus( hWndList );
AD_Changed( hDlg );
};
break;
case IDC_REPLACE:
{
/*
** Verify fields are valid
*/
if ( !Internal_verifyFields( hDlg, szBuf, BUF_SIZE ) )
{ break; };
/*
** Get selected item index
*/
int iCurSel = SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
assert( iCurSel>=0 );
/*
** Get text to add and add it to internal lists only
*/
int i, j;
*szBuf = '\0';
SendMessage( hWndType, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
for( i=0; i<BUF_SIZE && szBuf[i]!='\t' && szBuf[i]; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lTypes.Append( (DblList::type)PI_NEW( PIString( szBuf ) ) );
szBuf[i++] = '\t';
SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lHosts.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lPorts.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndSend, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lSends.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndRecv, WM_GETTEXT, BUF_SIZE-i, (LPARAM)&(szBuf[i]) );
for( j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lRecvs.Append( (DblList::type)PI_NEW( PIString( &(szBuf[j]) ) ) );
/*
** Delete the item from the list and internal lists
*/
SendMessage( hWndList, LB_DELETESTRING, iCurSel, 0 );
PI_DELETE( (PIString *)lTypes.Detach( iCurSel) );
PI_DELETE( (PIString *)lHosts.Detach( iCurSel) );
PI_DELETE( (PIString *)lPorts.Detach( iCurSel) );
PI_DELETE( (PIString *)lSends.Detach( iCurSel) );
PI_DELETE( (PIString *)lRecvs.Detach( iCurSel) );
/*
** Add new item to listbox
*/
SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );
/*
** Clear edit fields, focus to list
*/
SendMessage( hWndType, CB_SETCURSEL, (WPARAM)-1, 0 );
SendMessage( hWndHost, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndPort, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndSend, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndRecv, WM_SETTEXT, 0, (LPARAM)"" );
SetFocus( hWndList );
AD_Changed( hDlg );
};
break;
case IDC_DELETE:
{
int iCurSel = SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
SendMessage( hWndList, LB_DELETESTRING, iCurSel, 0 );
PI_DELETE( (PIString *)lTypes.Detach( iCurSel ) );
PI_DELETE( (PIString *)lHosts.Detach( iCurSel ) );
PI_DELETE( (PIString *)lPorts.Detach( iCurSel ) );
PI_DELETE( (PIString *)lSends.Detach( iCurSel ) );
PI_DELETE( (PIString *)lRecvs.Detach( iCurSel ) );
/*
** Clear edit fields, focus to list
*/
SendMessage( hWndType, CB_SETCURSEL, (WPARAM)-1, 0 );
SendMessage( hWndHost, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndPort, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndSend, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndRecv, WM_SETTEXT, 0, (LPARAM)"" );
SetFocus( hWndList );
AD_Changed( hDlg );
};
break;
case IDC_TYPE:
if ( GET_WM_COMMAND_CMD(wParam, lParam)!=CBN_SELCHANGE )
{ break; };
*szBuf = '\0';
SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
pTmp = szBuf + strlen(szBuf) + 1;
SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp );
Internal_updateButtons( wParam, lParam, szBuf, pTmp, 1 );
break;
case IDC_HOSTNAME:
if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
{ break; };
*szBuf = '\0';
SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
pTmp = szBuf + strlen(szBuf) + 1;
SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp );
Internal_updateButtons( wParam, lParam, szBuf, pTmp, 0 );
break;
case IDC_PORT:
if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
{ break; };
*szBuf = '\0';
SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE,(LPARAM)szBuf );
pTmp = szBuf + strlen(szBuf) + 1;
SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp );
Internal_updateButtons( wParam, lParam, szBuf, pTmp, 0 );
break;
case IDC_SEND:
if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
{ break; };
break;
case IDC_RECV:
if ( GET_WM_COMMAND_CMD(wParam, lParam)!=EN_CHANGE )
{ break; };
break;
case IDC_LIST:
if ( GET_WM_COMMAND_CMD(wParam, lParam)==LBN_SELCHANGE )
{
int iSel = SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
if ( iSel!=LB_ERR )
{
assert( iSel>=0 && iSel<lTypes.Size() );
EnableWindow( hWndDelete, TRUE );
int iIndex = SendMessage( hWndType, CB_FINDSTRINGEXACT,
(WPARAM)-1,
(LPARAM)(const char *)*((PIString *)lTypes[iSel]) );
assert( iIndex>=0 );
SendMessage( hWndType, CB_SETCURSEL, (WPARAM)
(iIndex==CB_ERR ? -1 : iIndex), 0 );
SendMessage( hWndHost, WM_SETTEXT, 0,
(LPARAM)(const char *)*((PIString *)lHosts[iSel]) );
SendMessage( hWndPort, WM_SETTEXT, 0,
(LPARAM)(const char *)*((PIString *)lPorts[iSel]) );
SendMessage( hWndSend, WM_SETTEXT, 0,
(LPARAM)(const char *)*((PIString *)lSends[iSel]) );
SendMessage( hWndRecv, WM_SETTEXT, 0,
(LPARAM)(const char *)*((PIString *)lRecvs[iSel]) );
};
};
break;
case IDC_NEW:
{
DlgData data;
pTmp = szBuf;
// copy ssl servername
data.pSslServername = pTmp;
SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE,(LPARAM)pTmp );
pTmp = data.pSslServername + strlen(data.pSslServername);
pTmp++;
// copy ssl private key filename
data.pSslKeyFilename = pTmp;
strcpy( (char *)pTmp, "./" );
pTmp = data.pSslKeyFilename + strlen(data.pSslKeyFilename);
SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE,(LPARAM)pTmp );
pTmp = data.pSslKeyFilename + strlen(data.pSslKeyFilename);
strcpy( (char *)pTmp, "_" );
pTmp++;
SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp );
pTmp = data.pSslKeyFilename + strlen(data.pSslKeyFilename);
strcpy( (char *)pTmp, "_key.pem" );
pTmp = data.pSslKeyFilename + strlen(data.pSslKeyFilename) + 1;
// copy ssl certificate filename
data.pSslCertFilename = pTmp;
strcpy( (char *)pTmp, "./" );
pTmp = data.pSslCertFilename + strlen(data.pSslCertFilename);
SendMessage( hWndHost, WM_GETTEXT, BUF_SIZE,(LPARAM)pTmp );
pTmp = data.pSslCertFilename + strlen(data.pSslCertFilename);
strcpy( (char *)pTmp++, "_" );
SendMessage( hWndPort, WM_GETTEXT, BUF_SIZE, (LPARAM)pTmp );
pTmp = data.pSslCertFilename + strlen(data.pSslCertFilename);
strcpy( (char *)pTmp, "_cert.pem" );
DialogBoxParam(
::GetModuleHandle( NULL ),
MAKEINTRESOURCE( IDD_GENKEYS ),
hDlg,
(DLGPROC)fnGenSslKeys,
(LPARAM)&data
);
break;
}
default:;
}
break;
case WM_NOTIFY:
{
switch( ((NMHDR *)lParam)->code )
{
case PSN_SETACTIVE:
{
int i = *AD_lookupValue( __pConfig, "General", "ReuseThreads" ) ? 1 : 0;
EnableWindow( hWndList, i ); EnableWindow( hWndType, i );
EnableWindow( hWndHost, i ); EnableWindow( hWndPort, i );
EnableWindow( hWndSend, i ); EnableWindow( hWndRecv, i );
break;
}
case PSN_QUERYCANCEL:
return AD_cancel( hDlg );
case PSN_KILLACTIVE:
{
int i = 0;
int iCurSel = ::SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
int iCount = ::SendMessage( hWndList, LB_GETCOUNT, 0, 0 );
/* --- remove old ones first --- */
AD_deleteValue( __pConfig, "IOObjects", "IOObject" );
/*
** Save all mappings
*/
Internal_saveValues( hDlg );
/*
** Delete values
*/
DblListIterator x( lTypes );
DblListIterator y( lHosts );
DblListIterator z( lPorts );
DblListIterator s( lSends );
DblListIterator r( lRecvs );
for( ; !x.BadIndex(); x++, y++, z++, s++, r++ )
{
assert( !x.BadIndex() && !y.BadIndex() && !z.BadIndex()
&& !s.BadIndex() && !r.BadIndex() );
PI_DELETE( (PIString *)x.Current() );
PI_DELETE( (PIString *)y.Current() );
PI_DELETE( (PIString *)z.Current() );
PI_DELETE( (PIString *)s.Current() );
PI_DELETE( (PIString *)r.Current() );
};
lTypes.Clear();
lHosts.Clear();
lPorts.Clear();
lSends.Clear();
lRecvs.Clear();
/*
** Load all mappings
*/
int iTmp = 0;
const char *pTmp;
for(;; iTmp++ )
{
pTmp = AD_lookupValueEx( __pConfig, "IOObjects",
"IOObject", iTmp );
if ( !pTmp )
{ break; };
if ( SendMessage( hWndList, LB_ADDSTRING, 0,
(LPARAM)pTmp )>=0 )
{
Internal_addLine( pTmp );
}
else
{ break; /* error */; };
};
::SendMessage( hWndList, LB_SETCURSEL, iCurSel, 0 );
::SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
break;
}
default:
return (FALSE);
};
};
break;
default:
return (FALSE);
};
return (TRUE);
}
/*____________________________________________________________________________*\
*
Description:
Definitions and global values
\*____________________________________________________________________________*/
DLGPROC fnIO = (DLGPROC)DialogProc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -