From 6d14e301789956d8d365c7d8b4e286afc57d5b9b Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 4 May 1998 10:09:51 +0000 Subject: [PATCH] Migliorato server delle chiavi di rete git-svn-id: svn://10.65.10.50/trunk@6600 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- servers/hardlock/connectd.cpp | 23 ++- servers/hardlock/frontend.aps | Bin 17094 -> 561 bytes servers/hardlock/frontend.clw | 5 +- servers/hardlock/frontend.cpp | 1 + servers/hardlock/frontend.rc | 35 +++- servers/hardlock/frontvw.cpp | 2 - servers/hardlock/resource.h | 5 +- servers/hardlock/server.cpp | 289 +++++++++++++++++++++++----------- servers/hardlock/server.h | 31 ++-- servers/hardlock/statdlg.cpp | 45 +++++- servers/hardlock/statdlg.h | 7 +- 11 files changed, 316 insertions(+), 127 deletions(-) diff --git a/servers/hardlock/connectd.cpp b/servers/hardlock/connectd.cpp index 7719eca42..d872000b3 100755 --- a/servers/hardlock/connectd.cpp +++ b/servers/hardlock/connectd.cpp @@ -11,20 +11,31 @@ int f_DongleHasModule(TConnection& conn, void* pJolly) if (argc > 0) { const int n = atoi(argv[0]) - 1; - const unsigned short* int_tab = GetServer().Authorizations(); - if (int_tab) - ok = (int_tab[n / 16] >> (n % 16)) & 0x1; + if (n >= 0) + { + unsigned short nSize; + const unsigned short* int_tab = GetServer().Authorizations(nSize); + if (int_tab) + { + const unsigned short index = n / 16; + if (index < (nSize/2)) + ok = (int_tab[index] >> (n % 16)) & 0x1; + } + } + else + ok = TRUE; } return conn.ReturnBool(ok); } int f_DongleModules(TConnection& conn, void* pJolly) { - const unsigned short* int_tab = GetServer().Authorizations(); + unsigned short nSize; + const unsigned short* int_tab = GetServer().Authorizations(nSize); if (int_tab) { - BYTE* buff = GetServer().GetBuffer(8); - memcpy(buff, int_tab, 8); + BYTE* buff = GetServer().GetBuffer(nSize); + memcpy(buff, int_tab, nSize); } return int_tab != NULL; } diff --git a/servers/hardlock/frontend.aps b/servers/hardlock/frontend.aps index 3fab01de06f84aa27ff28c0aef2b7f170d17f9a9..59817b1913b4f358fa9d86f43bab26db5c8030a2 100755 GIT binary patch delta 250 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 YXRd5S&z&n9)AQ!akXm~Fe4$1E2W&23hX4Qo diff --git a/servers/hardlock/frontend.clw b/servers/hardlock/frontend.clw index 75805a5af..f0e413db5 100755 --- a/servers/hardlock/frontend.clw +++ b/servers/hardlock/frontend.clw @@ -121,10 +121,9 @@ CommandCount=6 [DLG:IDD_STATUS] Type=1 Class=CStatusDlg -ControlCount=3 +ControlCount=2 Control1=IDOK,button,1342242817 -Control2=IDC_STATIC,static,1342308352 -Control3=IDC_USERS,edit,1350633600 +Control2=IDC_GRID,{A8C3B720-0B5A-101B-B22E-00AA0037B2FC},1342242816 [CLS:CStatusDlg] Type=0 diff --git a/servers/hardlock/frontend.cpp b/servers/hardlock/frontend.cpp index d3d3f90b2..02425101d 100755 --- a/servers/hardlock/frontend.cpp +++ b/servers/hardlock/frontend.cpp @@ -60,6 +60,7 @@ BOOL CFrontEndApp::InitInstance() #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif + AfxEnableControlContainer(); LoadStdProfileSettings(0); // Load standard INI file options (including MRU) diff --git a/servers/hardlock/frontend.rc b/servers/hardlock/frontend.rc index 1556cdfff..578b1f8c2 100755 --- a/servers/hardlock/frontend.rc +++ b/servers/hardlock/frontend.rc @@ -168,15 +168,14 @@ BEGIN LTEXT "Physical memory",IDC_PHYSICAL_MEM,49,38,119,9,SS_SUNKEN END -IDD_STATUS DIALOGEX 0, 0, 186, 69 +IDD_STATUS DIALOG DISCARDABLE 0, 0, 186, 122 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Stato del sistema" +CAPTION "Utenti del sistema" FONT 8, "MS Sans Serif" BEGIN - DEFPUSHBUTTON "OK",IDOK,68,48,50,14 - LTEXT "Numero di utenti",IDC_STATIC,7,7,111,8 - EDITTEXT IDC_USERS,136,7,43,12,ES_AUTOHSCROLL | ES_READONLY, - WS_EX_RIGHT + DEFPUSHBUTTON "OK",IDOK,68,101,50,14 + CONTROL "",IDC_GRID,"{A8C3B720-0B5A-101B-B22E-00AA0037B2FC}", + WS_TABSTOP,7,7,172,84 END @@ -244,12 +243,34 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 179 TOPMARGIN, 7 - BOTTOMMARGIN, 62 + BOTTOMMARGIN, 115 END END #endif // APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Dialog Info +// + +IDD_STATUS DLGINIT +BEGIN + IDC_GRID, 0x376, 164, 0 +0x0024, 0x0000, 0x0041, 0x0036, 0x0044, 0x0041, 0x0038, 0x0035, 0x0038, +0x0030, 0x002d, 0x0035, 0x0039, 0x0044, 0x0036, 0x002d, 0x0031, 0x0030, +0x0031, 0x0042, 0x002d, 0x0041, 0x0033, 0x0043, 0x0039, 0x002d, 0x0030, +0x0038, 0x0030, 0x0030, 0x0032, 0x0042, 0x0032, 0x0046, 0x0034, 0x0039, +0x0046, 0x0042, 0x0000, 0x0001, 0x1aaa, 0x0000, 0x0e29, 0x0000, 0x004d, +0x0000, 0x0000, 0x0080, 0xffff, 0x00ff, 0x0300, 0xe352, 0x910b, 0xce8f, +0x9d11, 0x00e3, 0x00aa, 0xb84b, 0x0151, 0x0000, 0x9000, 0x4401, 0x0142, +0x0d00, 0x534d, 0x5320, 0x6e61, 0x2073, 0x6553, 0x6972, 0x0166, 0x0001, +0x0002, 0x0002, 0x0001, 0x0001, 0x0002, 0x0101, 0x0000, 0x0100, 0x0000, +0x00ff, + 0 +END + + ///////////////////////////////////////////////////////////////////////////// // // String Table diff --git a/servers/hardlock/frontvw.cpp b/servers/hardlock/frontvw.cpp index 40c0c7390..be0eac3a1 100755 --- a/servers/hardlock/frontvw.cpp +++ b/servers/hardlock/frontvw.cpp @@ -6,7 +6,6 @@ #include "FrontEnd.h" #include "FrontDoc.h" #include "FrontVw.h" -#include "Server.h" #include "StatDlg.h" #include "Tracing.h" @@ -121,7 +120,6 @@ void CFrontEndView::OnUpdateViewTrace(CCmdUI* pCmdUI) void CFrontEndView::OnViewStatus() { CStatusDlg dlg(this); - dlg.m_nUsers = GetServer().Connections(); dlg.DoModal(); } diff --git a/servers/hardlock/resource.h b/servers/hardlock/resource.h index 1cd097fee..1ce21bf3c 100755 --- a/servers/hardlock/resource.h +++ b/servers/hardlock/resource.h @@ -13,6 +13,7 @@ #define IDC_PHYSICAL_MEM 1005 #define IDC_DISK_SPACE 1006 #define IDC_USERS 1008 +#define IDC_GRID 1009 #define stc32 0x045f #define ID_BUTTON32772 32772 #define ID_VIEW_TRACE 32773 @@ -23,9 +24,9 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 133 +#define _APS_NEXT_RESOURCE_VALUE 134 #define _APS_NEXT_COMMAND_VALUE 32778 -#define _APS_NEXT_CONTROL_VALUE 1009 +#define _APS_NEXT_CONTROL_VALUE 1010 #define _APS_NEXT_SYMED_VALUE 105 #endif #endif diff --git a/servers/hardlock/server.cpp b/servers/hardlock/server.cpp index 2c3994eb2..49f2f2441 100755 --- a/servers/hardlock/server.cpp +++ b/servers/hardlock/server.cpp @@ -3,6 +3,24 @@ #include "hlapi_c.h" #define EYECAST (Word DATAFAR_ *) +extern "C" +{ +#include "skeytsr.h" +} +static KEY_NET _Eutron; + +#pragma pack(1) +struct TEutronHeader +{ + char _serno[8]; + unsigned short _year_assist; + unsigned short _max_users; + unsigned long _last_date; + unsigned long _scad_date; + unsigned long _checksum; // Must be the last item! +}; +#pragma pack() + #include "connect.h" #include "server.h" #include "tracing.h" @@ -13,6 +31,8 @@ static char THIS_FILE[] = __FILE__; #endif + + // @doc INTERNAL // @rdesc Ritorna il valore corrispondente alla chiave appartenente @@ -45,83 +65,58 @@ static CString GetIniString(LPCSTR sec, // @parm Sezione return tmp; } -#define HLBLOCK 1 +// @doc EXTERNAL -unsigned short THardlockServer::GetSer() +// @func Permette di criptare una parola +// +// @rdesc Ritorna la stringa criptata +const char* Encode( + const char* strin, // @parm Stringa da criptare + char* strout) // @parm Stringa criptata + + // @xref { - _SerNo = 0xFFFF; - - if (HL_AVAIL() == STATUS_OK) - { - Word Val[4] = { 0, 0, 0, 0 }; - HL_READ(0, EYECAST &Val[0]); - HL_READ(1, EYECAST &Val[1]); - HL_READ(2, EYECAST &Val[2]); - HL_READ(3, EYECAST &Val[3]); - HL_CODE(EYECAST Val, HLBLOCK); - if (Val[0] == 0xFAE8) - _SerNo = Val[1]; - else - _SerNo = 0; - } - - Trace(-1, "Hardlock serial number is %s: %d", - (_SerNo == 0xFFFF) ? "Bad" : "OK", (int)_SerNo); - - return _SerNo; + const char * const encryption_key = "QSECOFR-"; + for (int i = 0; strin[i]; i++) + strout[i] = strin[i] + (i < 8 ? encryption_key[i] : strin[i-8]); + strout[i] = '\0'; + return strout; } -unsigned short THardlockServer::GetUsers() + +BOOL TDongleServer::ReadEutronWords(unsigned short reg, + unsigned short num, + unsigned short* data) { - _Users = 0; - _AssistanceYear = 0; - if (_SerNo == 0) - { - _Users = 4; - _AssistanceYear = 1998; - } - else - { - if (_SerNo != 0xFFFF) - { - Word Val[4] = { 0, 0, 0, 0 }; - HL_READ(60, EYECAST &Val[0]); - HL_READ(61, EYECAST &Val[1]); - HL_READ(62, EYECAST &Val[2]); - HL_READ(63, EYECAST &Val[3]); - HL_CODE(Val, HLBLOCK); - _AssistanceYear = Val[0]; - _Users = Val[1]; - } - } - Trace(-1, "Assistance Year is %d", (int)_AssistanceYear); - Trace(-1, "Maximum number of users is %d", (int)_Users); - return _Users; + ASSERT(num > 0 && num <= 16); + _Eutron.net_command = NET_KEY_ACCESS; + memcpy(&_Eutron.command, BLOCK_READING_MODE, 2); + unsigned short* pointer = (unsigned short*)(&_Eutron.data[0]); + unsigned short* number = (unsigned short*)(&_Eutron.data[2]); + *pointer = reg; + *number = num; + smartlink(&_Eutron); + BOOL ok = _Eutron.status == ST_OK; + if (ok) + memcpy(data, &_Eutron.data[4], num*2); + return ok; } -BOOL THardlockServer::GetAut() +BOOL TDongleServer::ReadHardlockWords(unsigned short reg, + unsigned short num, + unsigned short* data) { - if (_SerNo == 0xFFFF) - return FALSE; - - if (_SerNo == 0) - return TRUE; - - HL_READ(48, EYECAST &_int_tab[0]); - HL_READ(49, EYECAST &_int_tab[1]); - HL_READ(50, EYECAST &_int_tab[2]); - HL_READ(51, EYECAST &_int_tab[3]); - HL_CODE(_int_tab, HLBLOCK); - - for (int i = 0; i < 4; i++) - _int_tab[i] ^= _SerNo; - if (_int_tab[3]) - return(FALSE); - - return TRUE; + BOOL ok = HL_AVAIL() == STATUS_OK; + if (ok) + { + for (unsigned short n = 0; n < num; n++) + HL_READ(reg+n, EYECAST &data[n]); + } + return ok; } -BOOL THardlockServer::Login() const + +BOOL TDongleServer::HardlockLogin() { const char* const REFKEY = "CAMPOKEY"; const char* const VERKEY = "ìpÙˆ¬cê<"; @@ -131,18 +126,139 @@ BOOL THardlockServer::Login() const const int status = HL_LOGIN(26952, LOCAL_DEVICE, ref, ver); - Trace(-1, "Hardlock login %s: %d", - status == STATUS_OK ? "OK" : "Failed", status); + Trace(-1, "Login Hardlock %s: %d", + status == STATUS_OK ? "OK" : "FALLITO", status); + + _SerNo = 0xFFFF; + if (status == STATUS_OK) + { + Word Val[4] = { 0, 0, 0, 0 }; + ReadHardlockWords(0, 4, Val); + HL_CODE(EYECAST Val, 1); + if (Val[0] == 0xFAE8) + _SerNo = Val[1]; + else + _SerNo = 0; + + if (_SerNo != 0) + { + ReadHardlockWords(60, 4, Val); + HL_CODE(EYECAST Val, 1); + _AssistanceYear = Val[0]; + _Users = Val[1]; + + int index = 0; + for (unsigned short reg = 48; reg < 60; reg += 4) + { + ReadHardlockWords(reg, 4, Val); + HL_CODE(EYECAST Val, 1); + memcpy(&_int_tab[index], Val, 3); + index += 3; + } + } + } return status == STATUS_OK; } -void THardlockServer::Logout() const +BOOL TDongleServer::EutronLogin() { - HL_LOGOUT(); + BOOL ok = FALSE; + memset(&_Eutron, 0, sizeof(_Eutron)); + _Eutron.net_command = NET_KEY_OPEN; + + const char* labels[2] = { "AGA.CAMPO", "2699DP" }; + for (int k = 0; k < 2; k++) + { + memset(_Eutron.label, 0, LABEL_LENGTH); + memcpy(_Eutron.label, labels[k], strlen(labels[k])); + memset(_Eutron.password, 0, PASSWORD_LENGTH); + if (k == 0) + { + char pwd[PASSWORD_LENGTH]; + Encode(labels[k], pwd); + memcpy(_Eutron.password, pwd, strlen(pwd)); + } + smartlink(&_Eutron); + ok = _Eutron.status == ST_OK; + if (ok) + { + if (k == 1) + _SerNo = 0; + break; + } + } + Trace(-1, "Login Eutron %s: %d", + ok ? "OK" : "FALLITO", _Eutron.status); + + if (ok && _SerNo != 0) + { + TEutronHeader eh; + if (ReadEutronWords(0, sizeof(TEutronHeader)/2, (unsigned short*)&eh)) + { + char serno[16]; + strncpy(serno, eh._serno, 8); + serno[8] = '\0'; + _SerNo = (unsigned long)atol(serno); + if (eh._max_users > 0) + { + _Users = eh._max_users; + _AssistanceYear = eh._year_assist; + ReadEutronWords(16, 16, _int_tab); + } + } + } + + return _Eutron.status == ST_OK; } -BOOL THardlockServer::OnConnect(const CString& topic) + +BOOL TDongleServer::Login() +{ + BOOL ok = HardlockLogin() || EutronLogin(); + if (ok) + { + if (_SerNo == 0 || _Users == 0) + { + const CTime tNow = CTime::GetCurrentTime(); + _AssistanceYear = tNow.GetYear(); + if (_SerNo == 0) + { + _Users = 4; + memset(_int_tab, 0xFF, sizeof(_int_tab)); + } + else + { + _Users = 1; + memset(_int_tab, 0x00, sizeof(_int_tab)); + } + } + + Trace(-1, "Numero di serie %u", _SerNo); + Trace(-1, "Anno assistenza %u", _AssistanceYear); + Trace(-1, "Numero utenti %u", _Users); + } + return ok; +} + +void TDongleServer::Logout() +{ + if (_Eutron.label[0]) + { + _Eutron.net_command = NET_KEY_CLOSE; + smartlink(&_Eutron); + } + else + { + HL_LOGOUT(); + } + _SerNo = 0xFFFF; + _Users = 0; + _AssistanceYear = 0; + memset(_int_tab, 0, sizeof(_int_tab)); +} + +BOOL TDongleServer::OnConnect(const CString& topic) { BOOL ok = Connections() <= MaxUsers(); if (!ok) @@ -151,7 +267,7 @@ BOOL THardlockServer::OnConnect(const CString& topic) } -TConnection* THardlockServer::OnCreateConnection(DWORD id) +TConnection* TDongleServer::OnCreateConnection(DWORD id) { TConnection* c = NULL; if (Connections() <= MaxUsers()) @@ -164,36 +280,33 @@ TConnection* THardlockServer::OnCreateConnection(DWORD id) return c; } -BOOL THardlockServer::OnRemoveConnection(DWORD id) +BOOL TDongleServer::OnRemoveConnection(DWORD id) { Trace(0, "Disconnecting %lu", id); return BASE_SERVER::OnRemoveConnection(id); } -THardlockServer::THardlockServer() - : BASE_SERVER("HARDLOCK") +TDongleServer::TDongleServer() + : BASE_SERVER("DONGLE") { _SerNo = 0xFFFF; - _int_tab[0] = 0xFFFF; - _int_tab[1] = 0xFFFF; - _int_tab[2] = 0xFFFF; - _int_tab[3] = 0x0000; - + _Users = 0; + _AssistanceYear = 0; + memset(_int_tab, 0, sizeof(_int_tab)); Login(); - GetSer(); - GetUsers(); } -THardlockServer::~THardlockServer() +TDongleServer::~TDongleServer() { - Logout(); + if (_SerNo != 0xFFFF) + Logout(); } /////////////////////////////////////////////////////////// // Start/Stop server -static THardlockServer* pDDE = NULL; +static TDongleServer* pDDE = NULL; BOOL StopServer() { @@ -206,7 +319,7 @@ BOOL StopServer() return ok; } -THardlockServer& GetServer() +TDongleServer& GetServer() { ASSERT(pDDE); return *pDDE; @@ -216,7 +329,7 @@ BOOL StartServer() { BOOL ok = pDDE == NULL; if (ok) - pDDE = new THardlockServer; + pDDE = new TDongleServer; return ok; } diff --git a/servers/hardlock/server.h b/servers/hardlock/server.h index a64ac347e..79d702812 100755 --- a/servers/hardlock/server.h +++ b/servers/hardlock/server.h @@ -14,24 +14,27 @@ #endif ///////////////////////////////////////////////////////////////////////////// -// THardlockServer +// TDongleServer -class THardlockServer : public BASE_SERVER +class TDongleServer : public BASE_SERVER { - enum { MAX_MODULES = 48 }; + enum { MAX_MODULES = 256 }; - unsigned short _SerNo, _Users, _AssistanceYear, _int_tab[4]; + unsigned int _SerNo, _Users, _AssistanceYear; + unsigned short _int_tab[MAX_MODULES/16]; protected: virtual BOOL OnConnect(const CString& topic); virtual TConnection* OnCreateConnection(DWORD id); virtual BOOL OnRemoveConnection(DWORD id); - BOOL Login() const; - void Logout() const; - unsigned short GetSer(); - unsigned short GetUsers(); - BOOL GetAut(); + BOOL HardlockLogin(); + BOOL EutronLogin(); + BOOL Login(); + void Logout(); + + BOOL ReadHardlockWords(unsigned short reg, unsigned short num, unsigned short* data); + BOOL ReadEutronWords(unsigned short reg, unsigned short num, unsigned short* data); public: unsigned short SerialNumber() const @@ -40,18 +43,18 @@ public: unsigned short AssistanceYear() const { return _AssistanceYear; } - const unsigned short* Authorizations() - { return GetAut() ? _int_tab : NULL; } + const unsigned short* Authorizations(unsigned short& nSize) const + { nSize = sizeof(_int_tab); return _int_tab; } unsigned short MaxUsers() const { return _Users; } - THardlockServer(); - virtual ~THardlockServer(); + TDongleServer(); + virtual ~TDongleServer(); }; BOOL StartServer(); -THardlockServer& GetServer(); +TDongleServer& GetServer(); BOOL StopServer(); #endif \ No newline at end of file diff --git a/servers/hardlock/statdlg.cpp b/servers/hardlock/statdlg.cpp index 75eb64b28..02d926f57 100755 --- a/servers/hardlock/statdlg.cpp +++ b/servers/hardlock/statdlg.cpp @@ -2,8 +2,10 @@ // #include "stdafx.h" +#include "Connect.h" #include "FrontEnd.h" #include "StatDlg.h" +#include "Server.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -19,7 +21,6 @@ CStatusDlg::CStatusDlg(CWnd* pParent /*=NULL*/) : CDialog(CStatusDlg::IDD, pParent) { //{{AFX_DATA_INIT(CStatusDlg) - m_nUsers = 0; //}}AFX_DATA_INIT } @@ -28,16 +29,54 @@ void CStatusDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CStatusDlg) - DDX_Text(pDX, IDC_USERS, m_nUsers); + DDX_Control(pDX, IDC_GRID, m_grid); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CStatusDlg, CDialog) //{{AFX_MSG_MAP(CStatusDlg) - // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CStatusDlg message handlers + +static int AddConnectionToGrid(TConnection& conn, void* pJolly) +{ + const TPrassiConnection& user = (const TPrassiConnection&)conn; + CGridCtrl* pGrid = (CGridCtrl*)pJolly; + + int nPos = pGrid->GetRow()+1; + pGrid->SetRow(nPos); + + pGrid->SetCol(0); + CString str; str.Format("%d", nPos); + pGrid->SetText(str); + + pGrid->SetCol(1); + pGrid->SetText(user.User()); + return 1; +} + +BOOL CStatusDlg::OnInitDialog() +{ + CDialog::OnInitDialog(); + + m_grid.SetColWidth(1, 4100); + m_grid.SetRow(0); + m_grid.SetCol(0); + m_grid.SetText("N."); + m_grid.SetCol(1); + m_grid.SetText("Name"); + + TDongleServer& srv = GetServer(); + const int nUsers = srv.Connections(); + if (nUsers > 0) + { + m_grid.SetRows(nUsers+1); + srv.ForEachConnection(AddConnectionToGrid, &m_grid); + } + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} diff --git a/servers/hardlock/statdlg.h b/servers/hardlock/statdlg.h index 8b0d147e0..5925705d4 100755 --- a/servers/hardlock/statdlg.h +++ b/servers/hardlock/statdlg.h @@ -3,6 +3,9 @@ ///////////////////////////////////////////////////////////////////////////// // CStatusDlg dialog +//{{AFX_INCLUDES() +#include "gridctrl.h" +//}}AFX_INCLUDES class CStatusDlg : public CDialog { @@ -13,7 +16,7 @@ public: // Dialog Data //{{AFX_DATA(CStatusDlg) enum { IDD = IDD_STATUS }; - UINT m_nUsers; + CGridCtrl m_grid; //}}AFX_DATA @@ -29,7 +32,7 @@ protected: // Generated message map functions //{{AFX_MSG(CStatusDlg) - // NOTE: the ClassWizard will add member functions here + virtual BOOL OnInitDialog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };