void CConnectDlg::RevertConnectState() { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::RevertConnectState : (TargetId: %s) \n"), m_pTarget->GetId()); if(m_bExclusive) { CTargetOnl* pTarg = dynamic_cast<CTargetOnl*> (m_pTarget); if(pTarg) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::RevertConnectState : (TargetId: %s) DisconnectExclusive\n"), m_pTarget->GetId()); pTarg->DisconnectExclusive(); if(!m_bWasConnected) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::RevertConnectState : (TargetId: %s) Disconnect\n"), m_pTarget->GetId()); m_pTarget->Disconnect(); } } } else { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::RevertConnectState : (TargetId: %s) Disconnect\n"), m_pTarget->GetId()); m_pTarget->Disconnect(); } }
BOOL CSC_ReverseLookupTask(long taskid, CString &name) { CCsvParse parser; CString filename = GetConfigPath() + pszTasksFileName; HRESULT hr = parser.Open(filename); if (FAILED(hr)) { FC_DEBUGPRINT1(_T("CSVPARS> file not found: %s\n"), filename); TrcPrint(TRC_ERROR, _T("CSVPARS> file not found: %s\n"), filename); return FALSE; } BOOL syntax = TRUE; for (;;) { CString task, str_taskid,loaded; if (CConnection::GetFirmware() >= 20900 && CConnection::GetFirmware() < 21000) { // 04.04.06 SIS: do not check for end of line here (only for OSAI V2.09) } else { if (!parser.IsEndOfLine()) { syntax = FALSE; break; } } BOOL ok = parser.ParseNextField(task); if (!ok) break; task.MakeLower(); syntax = parser.ParseNextField(str_taskid); if (!syntax) break; if (CConnection::GetFirmware() >= 20700) { // Skip loaded/unloaded flag ok = parser.ParseNextField(loaded); if (!ok) break; } if (taskid == _ttol(str_taskid)){ name = task; return TRUE; } if (CConnection::GetFirmware() >= 20900 && CConnection::GetFirmware() < 21000) { parser.SkipLine(); // 04.04.06 SIS: skip rest of line } } if (!syntax) { FC_DEBUGPRINT3(_T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); TrcPrint(TRC_ERROR, _T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); } return FALSE; }
BOOL CConnectDlg::OnInitDialog() { CDialog::OnInitDialog(); CString strCaption,str; TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnInitDialog : (TargetId: %s) Exclusive:%s \n"), m_pTarget->GetId(), m_bExclusive?_T("TRUE"):_T("FALSE")); if(m_bExclusive) { CTargetOnl* pTarg = dynamic_cast<CTargetOnl*> (m_pTarget); if(pTarg) { if( ( m_bWaitForTargetConnection && pTarg->IsTargetConnectedExclusive()) || (!m_bWaitForTargetConnection && pTarg->IsConnectedExclusive()) || InitiateDebugConnection() != S_OK) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnInitDialog : (TargetId: %s) EndDialog (already connected or initiate error)\n"), m_pTarget->GetId()); EndDialog(IDOK); return(TRUE); } } } else { if(( m_bWaitForTargetConnection && m_pTarget->IsTargetConnected()) || (!m_bWaitForTargetConnection && m_pTarget->IsConnected()) || InitiateMonitoringConnection() != S_OK) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnInitDialog : (TargetId: %s) EndDialog (already connected or initiate error)\n"), m_pTarget->GetId()); EndDialog(IDOK); return(TRUE); } } m_ProgrCtrl.SetRange(0, m_iConnectTimeOut); m_ProgrCtrl.SetPos(0); m_ProgrCtrl.SetStep(1); m_TimerId = SetTimer(1, 1000, NULL); TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnInitDialog : (TargetId: %s) Timer started\n"), m_pTarget->GetId()); if(m_pTarget) { str.Format(TARGET_NAME_ADDR,m_pTarget->GetId(),m_pTarget->GetControlAddress()); strCaption.Format(IDS_CONNECT_TO_CONTROL,str ); SetWindowText(strCaption); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben }
//----------------------------- FUNCTION -------------------------------------* int TrcWin32Error(WORD wLevel, LPCTSTR pszText) /*>>>> trace Win32 system error messages I wLevel: trace level I pszText additional text to display Result E_TRC_OK E_TRC_NOT_INITIALIZED E_TRC_BAD_LEVEL E_TRC_NO_RESOURCE <<<<*/ { if (!s_bInitialized) { return E_TRC_NOT_INITIALIZED; } if (s_traceMode == noTrace) { // trace mode is disabled return E_TRC_OK; } if ((wLevel & s_wLevel) == 0) { // this level is not activated return E_TRC_OK; } TCHAR msg[MAX_PATH]; EnterCriticalSection(&s_csTrcFile); DWORD dwErr = ::GetLastError(); // show error code... if (pszText == NULL) { pszText = _T(""); } TrcPrint(wLevel, _T("%s Win32 Error: code = 0x%08lX\n"), pszText, dwErr); s_bNewLine = FALSE; if ((dwErr & 0x20000000) == 0) { // system error, get message text: msg[0] = _T('\0'); ::FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), msg, MAX_PATH, NULL); TrcPrint(wLevel, _T("**** %s"), msg); } else { TrcPrint(wLevel, _T("**** Custom Error Code!!")); } if (!s_bNewLine) { TrcPrint(wLevel, _T("\n")); } LeaveCriticalSection(&s_csTrcFile); return E_TRC_OK; }
/** * CSC_LookupBreakpointList * * @return CBreakpointList* * @exception - * @see */ CBreakpointList *CSC_LookupBreakpointList(LPCTSTR clsName) { CObject *val; if (s_MapBreakpoints.Lookup(clsName, val)) { return (CBreakpointList*)val; } CBreakpointList *retval = new CBreakpointList; s_MapBreakpoints.SetAt(clsName, retval); CCsvParse parser; CString filename = GetConfigPath() + clsName + _T(".dbp"); HRESULT hr = parser.Open(filename); if (FAILED(hr)) { FC_DEBUGPRINT1(_T("CSVPARS> file not found: %s\n"), filename); TrcPrint(TRC_ERROR, _T("CSVPARS> file not found: %s\n"), filename); return retval; } BOOL syntax = TRUE; for (;;) { CSC_BREAKPOINT line; CString str; if (!parser.IsEndOfLine()) { syntax = FALSE; break; } BOOL ok = parser.ParseNextField(str); if (!ok) break; line.bpnr = _ttol(str); syntax = parser.ParseNextField(str); if (!syntax) break; line.offset = _ttol(str); syntax = parser.ParseNextField(str); // 'I' | 'N' if (!syntax) break; if (str.CompareNoCase(_T("I")) && str.CompareNoCase(_T("N")) ) continue; if (str.CompareNoCase(_T("N")) == 0) line.type = 1; // NATIVE CODE else line.type = 0; // INTERPRETER retval->AddTail(line); } if (!syntax) { FC_DEBUGPRINT3(_T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); TrcPrint(TRC_ERROR, _T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); } return retval; }
/** * CSC_ParseDomainList * * @return CDomainList* * @exception - * @see */ CDomainList *CSC_ParseDomainList(BOOL fullDownload) { CDomainList *retval = new CDomainList; CCsvParse parser; CString filename = GetConfigPath() + (fullDownload?pszDomainFileName:pszOnlineDomainName); HRESULT hr = parser.Open(filename); if (FAILED(hr)) { FC_DEBUGPRINT1(_T("CSVPARS> file not found: %s\n"), filename); TrcPrint(TRC_ERROR, _T("CSVPARS> file not found: %s\n"), filename); return retval; } BOOL syntax = TRUE; for (;;) { CSC_DOMAINENTRY domain; CString strType, strFile; if (!parser.IsEndOfLine()) { syntax = FALSE; break; } BOOL ok = parser.ParseNextField(strType); if (!ok) break; strType.MakeLower(); if (strType == _T("code")) domain.type = CSC_DOMAINTYPE_CODE; else if (strType == _T("init")) domain.type = CSC_DOMAINTYPE_INITIAL; else if (strType == _T("config")) domain.type = CSC_DOMAINTYPE_CONFIG; else if (strType == _T("custom")) domain.type = CSC_DOMAINTYPE_CUSTOM; else if (strType == _T("debug")) domain.type = CSC_DOMAINTYPE_DEBUG; else domain.type = CSC_DOMAINTYPE_UNKNOWN; syntax = parser.ParseNextField(strFile); if (!syntax) break; domain.file = GetConfigPath() + strFile; retval->AddTail(domain); while (!parser.IsEndOfLine() && parser.ParseNextField(strFile)) ; } if (!syntax) { FC_DEBUGPRINT3(_T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); TrcPrint(TRC_ERROR, _T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); } return retval; }
HRESULT CConnectDlg::InitiateDebugConnection() { HRESULT hr; CString strMessage; ASSERT(m_pTarget != NULL); if(m_pTarget == NULL) return(E_FAIL); TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::InitiateDebugConnection : (TargetId: %s) \n"), m_pTarget->GetId()); m_bWasConnected = m_pTarget->IsConnected(); if(!m_bWasConnected) { hr = m_pTarget->Connect(); if(hr != S_OK) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::InitiateDebugConnection : (TargetId: %s) Target->Connect returned hr=0x%08X!\n"), m_pTarget->GetId(), hr); return(hr); } } CTargetOnl* pTarg = dynamic_cast<CTargetOnl*> (m_pTarget); if(pTarg) { hr = pTarg->ConnectExclusive(); if(hr != S_OK) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::InitiateDebugConnection : (TargetId: %s) Target->ConnectExclusive returned hr=0x%08X!\n"), m_pTarget->GetId(), hr); if(!m_bWasConnected) { m_pTarget->Disconnect(); } return(hr); } } else { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::InitiateDebugConnection : (TargetId: %s) GetTargetOnl failed.\n"), m_pTarget->GetId()); return(E_FAIL); } return(S_OK); }
BOOL CSC_GetFileType(const CString& strFileName, CString& strFileType) { CCsvParse parser; int found = 0; CString strFile; CString filename = GetConfigPath() + pszDomainFileName; HRESULT hr = parser.Open(filename); if (FAILED(hr)) { FC_DEBUGPRINT1(_T("CSVPARS> file not found: %s\n"), filename); TrcPrint(TRC_ERROR, _T("CSVPARS> file not found: %s\n"), filename); } else { while(1) { BOOL ok = parser.ParseNextField(strFileType); if (!ok) break; ok = parser.ParseNextField(strFile); if (!ok) break; if(strFileName.CompareNoCase(strFile) == 0) { found = 1; break; } } parser.Close(); } if(!found) strFileType = _T("unknown"); return found; }
/* SendInfoBlock * ---------------------------------------------------------------------------- */ ECommError CLogBlock::SendInfoBlock (USHORT uBlock, BYTE byType) { ASSERT(m_pPhys); if (m_pInfoFrame == NULL) { m_pInfoFrame = (XFrame *)new char [HD_FRAME + m_Para.uBlockLen]; } memset (m_pInfoFrame, 0x00, HD_FRAME); m_pInfoFrame->byType = byType; m_pInfoFrame->BLK.uBlock = uBlock; BuildCRC(m_pInfoFrame); // Convert Little -> Big Endian HtoT(m_pInfoFrame); switch (byType) { case BT_ACK: { TRACE (_T(">>> %-8s %3d %3d "), _T("ACK"), uBlock, 0); TrcPrint(TRC_INTERFACE, _T(">>> %-8s %3d %3d "), _T("ACK"), uBlock, 0); break; } case BT_NACK: { TRACE (_T(">>> %-8s %3d %3d "), _T("NACK"), uBlock, 0); TrcPrint(TRC_INTERFACE, _T(">>> %-8s %3d %3d "), _T("NACK"), uBlock, 0); break; } case BT_REQ: { TRACE (_T(">>> %-8s %3d %3d "), _T("REQ"), uBlock, 0); TrcPrint(TRC_INTERFACE, _T(">>> %-8s %3d %3d "), _T("REQ"), uBlock, 0); break; } } return m_pPhys->Send((BYTE *)m_pInfoFrame, HD_FRAME); }
// Created by Joshua on 18-Sep-2006 void TrcPrintAreaName(void) { int i; TrcPrint("all"); for ( i=0;i<AREA_COUNT;i++) { TrcPrintF(" | %s",arrAreaList[i].szAreaName); } }
//------------------------------------------------------------------* HRESULT CFCMessageSessionThread::DoConnect() { HRESULT hr; if (m_pMessage != NULL) return S_OK; TrcPrint(TRC_INTERFACE, _T("MsgSession: DoConnect(%s)\n"),(LPCTSTR) m_pRawMsgSession->m_strMachineName); hr = ConnectToOnlineServer(&m_pMessage); if (FAILED(hr)) return hr; if (m_pMessage == NULL) return E_FAIL; hr = m_pMessage->QueryInterface(IID_IConnection,(void**)&m_pCheckConnection); if (FAILED(hr)) return hr; hr = Login(); if (FAILED(hr)) { DoDisconnect(); return hr; } hr = AtlAdvise(m_pMessage, GetUnknown(), IID__ICERemoteMessageEvent, &m_dwMsgNotifyCookie); if (FAILED(hr)) { DoDisconnect(); return hr; } hr = m_pMessage->Connect(m_lKey); if (FAILED(hr)) { TRACE(_T("MsgSession::Connected callback: error while trying to connect to message source; 0x%08X\n"), hr); TrcPrint(TRC_ERROR, _T("MsgSession::Connected callback: error while trying to connect to message source; 0x%08X\n"), hr); DoDisconnect(); return hr; } return hr; }
HRESULT CConnectDlg::InitiateMonitoringConnection() { HRESULT hr; ASSERT(m_pTarget != NULL); if(m_pTarget == NULL) return(E_FAIL); TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::InitiateMonitoringConnection : (TargetId: %s) \n"), m_pTarget->GetId()); hr = m_pTarget->Connect(); if(hr != S_OK) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::InitiateMonitoringConnection : (TargetId: %s) Target->Connect returned hr=0x%08X!\n"), m_pTarget->GetId(), hr); return(hr); } return(S_OK); }
void TrcDumpAreaStatus(void) { char buffer[100]; int i; TrcPrint("=============================================\n"); sprintf(buffer, "TRACE_LEVEL : %d\n", PrvConvertAreaLevel(TRACELEVEL)); TrcPrint( buffer ); for ( i = 0 ;i < AREA_COUNT ; i++ ) { sprintf(buffer, "%10s : ", arrAreaList[i].szAreaName); TrcPrint(buffer); if ( TRACESELECT & arrAreaList[i].szAreaSelect ) { sprintf(buffer, "on [Lv: %d]\n", ((arrAreaList[i].szAreaLevel == 0) ? PrvConvertAreaLevel(TRACELEVEL) : PrvConvertAreaLevel(arrAreaList[i].szAreaLevel))); TrcPrint(buffer); } else { TrcPrint("off\n"); } } TrcPrint("=============================================\n"); }
void TrcPrintHdr(unsigned int area, unsigned int level) { int i; TrcPrint("["); for ( i = 0 ;i < AREA_COUNT ; i++ ) { if (arrAreaList[i].szAreaSelect == area) { TrcPrintF("%s:", arrAreaList[i].szAreaName); break; } } switch (level) { case TR_LEVEL1 : TrcPrint("1]"); break; case TR_LEVEL2 : TrcPrint("2]"); break; case TR_LEVEL3 : TrcPrint("3]"); break; case TR_LEVEL4 : TrcPrint("4]"); break; } }
/** * @brief Dump memory through TrcPrint API * @if HISTORY * 18-Sep-2006 Joshua created * @endif */ void TrcDumpMemory(void *Ptr,int DumpSize,int NumColumn) { #ifndef F_REXY_ENV_PHONE unsigned char *data; int i = 0; int offset = 0; int RealColumnNum; char Buffer[2]={0,0}; /* * Heading */ TrcPrint(" "); /* skip address area */ for ( i = 0; i < NumColumn ; ++i ) { TrcPrintF("+%lX ", (long unsigned)i); } TrcPrint("Text\n"); /* * Body */ do { data = (char *)((unsigned int)Ptr+offset); /* Print the base address. */ TrcPrintF("%08lX: ", (long unsigned)data); RealColumnNum = ( offset + NumColumn > DumpSize ) ? DumpSize-offset : NumColumn; /* Print the characters' hex values. */ for ( i = 0; i < RealColumnNum; ++i ) { TrcPrintF("0x%02X ", data[i]); } /* Pad the hex values area if necessary. */ for ( ++i; i <= NumColumn; ++i ) { TrcPrint(" "); } /* Print the characters. */ for ( i = 0; i < RealColumnNum; i++ ) { if ( isprint(data[i]) ) { Buffer[0] = data[i]; TrcPrint(Buffer); } else TrcPrint("."); } TrcPrint("\n"); offset += NumColumn; } while ( offset < DumpSize ); /* break on partial buffer */ #endif }
//----------------------------- FUNCTION -------------------------------------* int TrcHexDump(WORD wLevel, BYTE* pby, int nBytes, int nShowBytes /*= -1*/) /*>>>> print hex dump of <pby> I wLevel: trace level I pby: ptr to byte array to dump I nBytes: number of bytes in byte array I nShowBytes: show up to <nShowBytes> bytes; if -1, use default max length <s_nMaxDumpWidth> Result E_TRC_OK E_TRC_NOT_INITIALIZED E_TRC_BAD_LEVEL E_TRC_NO_RESOURCE <<<<*/ { if (!s_bInitialized) { return E_TRC_NOT_INITIALIZED; } if (s_traceMode == noTrace) { // trace mode is disabled return E_TRC_OK; } if ((wLevel & s_wLevel) == 0) { // this level is not activated return E_TRC_OK; } if (pby == NULL) { return E_TRC_NO_RESOURCE; } EnterCriticalSection(&s_csTrcFile); TrcPrint(wLevel, _T("HexDump: ")); if (nShowBytes < 0) { nShowBytes = s_nMaxDumpWidth; } hexDump(pby, nBytes, nShowBytes); LeaveCriticalSection(&s_csTrcFile); return E_TRC_OK; }
//------------------------------------------------------------------* STDMETHODIMP CFCMessageSession::Disconnect() { AFX_MANAGE_STATE(AfxGetStaticModuleState()) TrcPrint(TRC_INTERFACE, _T("MsgSession: Disconnect(%s)\n"),(LPCTSTR) m_strMachineName); HRESULT hr = S_OK; if (m_pSessionThread != NULL) { m_cookieThread++; m_state = regular_shutdown; FireStateChangeHelper(regular_shutdown); hr = m_pSessionThread->StopThread(); m_pSessionThread->Release(); m_pSessionThread = NULL; m_state = not_connected; m_sUser.Empty(); FireStateChangeHelper(not_connected); } return hr; }
CConnectDlg::CConnectDlg( CTargetOnlBase* pTarget, int iConnectTimeOut, BOOL bExclusive, CWnd* pParent /*=NULL*/) : CDialog(CConnectDlg::IDD, pParent) { //{{AFX_DATA_INIT(CConnectDlg) // HINWEIS: Der Klassen-Assistent fügt hier Elementinitialisierung ein //}}AFX_DATA_INIT ASSERT(pTarget != NULL); TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::CConnectDlg : (TargetId: %s) Exclusive:%s : iConnectTimeOut:%i \n"), pTarget->GetId(), bExclusive?_T("TRUE"):_T("FALSE"), iConnectTimeOut); m_TimerId = 0; m_pTarget = pTarget; m_bExclusive = bExclusive; m_bForced = FALSE; m_iConnectTimeOut = max(iConnectTimeOut, CE_MIN_CONN_TIMEOUT); m_strStateText.LoadString(IDS_CONNECT_CONNECT); m_bWasConnected = false; m_bWaitForTargetConnection = TRUE; m_bWaitForTargetConnection = m_pTarget->GetWaitForTargetConnection(); }
void CConnectDlg::OnCancel() { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnCancel : (TargetId: %s) \n"), m_pTarget->GetId()); if(m_TimerId > 0) { if(m_pTarget) { // user aborted connection before timeout CString strTargetName = m_pTarget->GetId(); m_strStateText.Format(IDS_CONNECT_ABORTED, strTargetName); UpdateData(FALSE); } KillTimer(m_TimerId); } RevertConnectState(); CDialog::OnCancel(); }
/** * @brief Send the message to the window. * @param[in] panel Window handle. * @param[in] Msg Message type. * @param[in] wParam Message dependent data. * @param[in] lParam Message dependent data. * @return Depends on the message and window procedure. * @remarks Gets blocked until sent message is processed. Process message by calling window procedure directly. * * @if HISTORY * 11-Jan-2006 madholic Initiated * 09-Jan-2008 joshua update warning message * @endif */ int MsgSendMessage(WND panel, int Msg, int wParam, int lParam) { ASSERT( panel ); if ( panel ) { if ( panel->WndProc ) { TRACE(TR_SystemEvent, TR_LEVEL1, ("MsgSendMessage Sending %x msg to %lx\n", Msg, panel)); return panel->WndProc(panel, Msg, wParam, lParam); } else { TrcPrintF("[Warning] Message %x has been vaporized since window panel %d has no event handler\n", Msg, panel); } } else { // Should not reach here TrcPrint( "[Error] Message %d sent to invalid window\n" ); } return -1; }
//======================================================================= // interface IMessageSession //======================================================================= //------------------------------------------------------------------* STDMETHODIMP CFCMessageSession::Connect(/*[in, string]*/BSTR sUserName,/*[in, string]*/BSTR sPassword) { HRESULT hr = S_OK; AFX_MANAGE_STATE(AfxGetStaticModuleState()) TrcPrint(TRC_INTERFACE, _T("MsgSession: Connect(%s)\n"),(LPCTSTR) m_strMachineName); FC_PCHECK_HR(sUserName,E_POINTER); m_sUser = sUserName; m_sPassword = sPassword; if (m_pSessionThread == NULL) { CComObject<CFCMessageSessionThread> *pSessionThread; hr = CComObject<CFCMessageSessionThread>::CreateInstance(&pSessionThread); pSessionThread->AddRef(); m_pSessionThread = pSessionThread; m_state = waiting_for_connect; FireStateChangeHelper(waiting_for_connect); hr = m_pSessionThread->StartThread(this, m_cookieThread); } return hr; }
//------------------------------------------------------------------* HRESULT CFCMessageSessionThread::DoDisconnect() { HRESULT hr; if (m_pMessage != NULL) { TrcPrint(TRC_INTERFACE, _T("MsgSession: DoDisconnect(%s)\n"),(LPCTSTR) m_pRawMsgSession->m_strMachineName); hr = m_pMessage->Disconnect(m_lKey); if (m_dwMsgNotifyCookie != 0UL) { hr = AtlUnadvise(m_pMessage, IID__ICERemoteMessageEvent, m_dwMsgNotifyCookie); } m_dwMsgNotifyCookie = 0; Logout(); FC_RELEASE_PTR(m_pCheckConnection); FC_RELEASE_PTR(m_pMessage); CoDisconnectObject(this, 0); } return S_OK; }
/* Send * ---------------------------------------------------------------------------- */ ECommError CLogBlock::Send (BYTE byCommand, BYTE *pData, UINT uLen) { ASSERT(m_pPhys); // Build block frame if (m_pDataFrame == NULL) { m_pDataFrame = (XFrame *)new char [HD_FRAME + m_Para.uBlockLen]; } memset (m_pDataFrame, 0x00, HD_FRAME); m_pDataFrame->BLK.CMD.byCommand = byCommand; USHORT uBlock = 0; UINT uBlockLen = 0; UINT uDataLen = 0; BOOL bLast = FALSE; BYTE byType = BT_DATA; UINT uProgMax = uLen / m_Para.uBlockLen + ((uLen % m_Para.uBlockLen) > 0 ? 1 : 0); UINT uProgCur = 0; while (! bLast) { PROGRESS(uProgCur, uProgMax); // Block count starts with 1! uBlock++; m_pDataFrame->byType = byType; // Build data length uDataLen = (uLen - (uBlock - 1) * m_Para.uBlockLen) <= m_Para.uBlockLen ? (uLen - (uBlock - 1) * m_Para.uBlockLen) : m_Para.uBlockLen; // Build block length uBlockLen = uDataLen + HD_FRAME; bLast = (uBlock * m_Para.uBlockLen >= uLen); m_pDataFrame->BLK.byLast = (uBlock * m_Para.uBlockLen >= uLen); m_pDataFrame->BLK.uBlock = uBlock; m_pDataFrame->BLK.uLen = (USHORT)uDataLen; if (pData != NULL) { memcpy(m_pDataFrame->BLK.CMD.pData, pData + m_Para.uBlockLen * (uBlock - 1), uDataLen); } BuildCRC(m_pDataFrame); // Convert Little -> Big Endian HtoT(m_pDataFrame); ECommError eError = ceError; for (UINT i = 0; (i < m_uRepeatOnError && eError != ceAck) || i == 0; i++) { TRACE(_T(">>> %-8s %3d %3d "), byCommand <= LAST_CMD_VALUE ? szCommandText[byCommand] : _T("Invalid"), uBlock, uDataLen); TrcPrint(TRC_INTERFACE, _T(">>> %-8s %3d %3d "), byCommand <= LAST_CMD_VALUE ? szCommandText[byCommand] : _T("Invalid"), uBlock, uDataLen); // Send block eError = m_pPhys->Send((BYTE *)m_pDataFrame, HD_FRAME + uDataLen); if (eError != ceOK) { // Communication error sending data block. SleepEx (m_uWaitResend, FALSE); m_pPhys->Flush(); continue; } // Wait for acknowledge eError = RecvAck (uBlock); if (eError != ceAck && eError != ceNAck) { // Communication Error receiving ACK / NACK. SleepEx (m_uWaitResend, FALSE); m_pPhys->Flush(); continue; } } // end for if (eError != ceAck) { // A block could not be transmitted correctly. PROGRESS_LAST(uProgMax); return eError; } uProgCur++; } // end while PROGRESS(uProgCur, uProgMax); return ceOK; }
/** * CSC_LookupStructDef * * @param name * @return CMapVarDef* * @exception - * @see */ CMapVarDef *CSC_LookupStructDef(LPCTSTR name) { CObject *val; if (s_MapStruct.Lookup(name, val)) { return (CMapVarDef*)val; } CMapVarDef *pStructDef = new CMapVarDef; s_MapStruct.SetAt(name, pStructDef); CCsvParse parser; CString filename = GetConfigPath() + name + DEF_FILE_EXT; HRESULT hr = parser.Open(filename); if (FAILED(hr)) { FC_DEBUGPRINT1(_T("CSVPARS> file not found: %s\n"), filename); TrcPrint(TRC_ERROR, _T("CSVPARS> file not found: %s\n"), filename); return pStructDef; } CString strName, strDeclSpec, strType, strSegment; CString strOffset, strBitOffset, strBitSize, strStrLen; BOOL syntax = TRUE; for (;;) { CSC_VARDEF vardef; if (!parser.IsEndOfLine()) { syntax = FALSE; break; } /* CSV_IDX_NAME: Instance name */ BOOL ok = parser.ParseNextField(strName); if (!ok) break; strName.MakeLower(); /* CSV_IDX_DECL_SPEC: Declaration Specification */ syntax = parser.ParseNextField(strDeclSpec); if (!syntax) break; strDeclSpec.MakeUpper(); /* CSV_IDX_SEGMENT: Segment Information */ syntax = parser.ParseNextField(strSegment); if (!syntax) break; /* CSV_IDX_TYPE: Data Type */ syntax = parser.ParseNextField(strType); if (!syntax) break; /* CSV_IDX_BYTE_OFFSET: Byte Offset */ syntax = parser.ParseNextField(strOffset); if (!syntax) break; /* CSV_IDX_BIT_OFFSET: Bit Offset */ syntax = parser.ParseNextField(strBitOffset); if (!syntax) break; /* CSV_IDX_BIT_SIZE: Bit Size */ syntax = parser.ParseNextField(strBitSize); if (!syntax) break; /* CSV_IDX_STRLEN: String Length */ syntax = parser.ParseNextField(strStrLen); if (!syntax) break; if (strDeclSpec[0] == _T('S')) { strType.MakeLower(); vardef.vardefType = CSC_VARDEF_STRUCT; vardef.iecType = BL_ANY; vardef.segment = 0; vardef.offset = 0; vardef.bitnr = 0; vardef.strlen = 0; vardef.structType = strType; } else if (strDeclSpec[0] == _T('G')) { vardef.vardefType = CSC_VARDEF_GLOBAL; strType.MakeUpper(); if (strType == _T("WSTRING")) { strType = _T("STRING"); } DWORD dummy; hr = BL_TypenameToDatatype(CComBSTR(strType), &vardef.iecType, &dummy); if (FAILED(hr)) { syntax = FALSE; break; } vardef.segment = _ttol(strSegment); vardef.offset = _ttol(strOffset); vardef.bitnr = 0; vardef.strlen = 0; if (vardef.iecType == BL_BOOL) { vardef.bitnr = _ttoi(strBitOffset); } if (vardef.iecType == BL_STRING) { vardef.strlen = _ttoi(strStrLen); } } else if (strDeclSpec[0] == _T('N') || strDeclSpec[0] == _T('R')) { vardef.vardefType = strDeclSpec[0] == _T('N') ? CSC_VARDEF_NORMAL : CSC_VARDEF_RETAIN; strType.MakeUpper(); if (strType == _T("WSTRING")) { strType = _T("STRING"); } DWORD dummy; hr = BL_TypenameToDatatype(CComBSTR(strType), &vardef.iecType, &dummy); if (FAILED(hr)) { syntax = FALSE; break; } vardef.segment = 0; vardef.offset = _ttol(strOffset); vardef.bitnr = 0; vardef.strlen = 0; if (vardef.iecType == BL_BOOL) { vardef.bitnr = _ttoi(strBitOffset); } if (vardef.iecType == BL_STRING) { vardef.strlen = _ttoi(strStrLen); } } else { syntax = FALSE; break; } pStructDef->SetAt(strName, vardef); } /* for (;;) */ if (!syntax) { FC_DEBUGPRINT3(_T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); TrcPrint(TRC_ERROR, _T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); } return pStructDef; }
/* RecvAck * ---------------------------------------------------------------------------- */ ECommError CLogBlock::RecvAck (USHORT uBlock) { ASSERT(m_pPhys); if (m_pInfoFrame == NULL) { m_pInfoFrame = (XFrame *)new char [HD_FRAME + m_Para.uBlockLen]; } memset (m_pInfoFrame, 0x00, HD_FRAME); UINT uLen = HD_FRAME + m_Para.uBlockLen; ECommError eError = m_pPhys->Receive((BYTE *)m_pInfoFrame, &uLen); // Error receiving BLK if (eError != ceOK) { return eError; } // Check data length if (uLen != HD_FRAME) { TrcPrint(TRC_ERROR, _T("[CLogBlock][RecvAck] Invalid data length.\n")); return ceError; } // Convert Big -> Little Endian TtoH(m_pInfoFrame); if (HD_FRAME + m_pInfoFrame->BLK.uLen != uLen) { TrcPrint(TRC_ERROR, _T("[CLogBlock][RecvAck] CRC frame data length check failed.\n")); return ceCRC; } if (CheckCRC (m_pInfoFrame) != ceOK) { TrcPrint(TRC_ERROR, _T("[CLogBlock][RecvAck] CRC check failed.\n")); return ceCRC; } // Check block number if (uBlock != m_pInfoFrame->BLK.uBlock) { TrcPrint(TRC_ERROR, _T("[CLogBlock][RecvAck] Invalid block number.\n")); return ceError; } // Get ACK / NACK if (m_pInfoFrame->byType == BT_ACK) { TRACE(_T("<<< %-8s %3d %3d\n"), _T("ACK"), uBlock, m_pInfoFrame->BLK.uLen); TrcPrint(TRC_INTERFACE, _T("<<< %-8s %3d %4d\n"), _T("ACK"), uBlock, m_pInfoFrame->BLK.uLen); return ceAck; } if (m_pInfoFrame->byType == BT_NACK) { TRACE(_T("<<< %-8s %3d %3d\n"), _T("NACK"), uBlock, m_pInfoFrame->BLK.uLen); TrcPrint(TRC_INTERFACE, _T("<<< %-8s %3d %4d\n"), _T("NACK"), uBlock, m_pInfoFrame->BLK.uLen); return ceNAck; } return ceError; }
/* Receive * ---------------------------------------------------------------------------- */ ECommError CLogBlock::Receive (BYTE *bypCommand, BYTE **ppData, UINT *upLen) { HEAP_FREE(*ppData, *upLen); // Build block frame if (m_pDataFrame == NULL) { m_pDataFrame = (XFrame *)new char [HD_FRAME + m_Para.uBlockLen]; } memset (m_pDataFrame, 0x00, HD_FRAME); *upLen = 0; USHORT uBlock = 0; UINT uBlockLen = 0; UINT uDataLen = 0; BOOL bLast = FALSE; ECommError eError; UINT uProgMax = m_uMaxRecvProg; UINT uProgCur = 0; while (! bLast) { PROGRESS(uProgCur,uProgMax); // Block count starts with 1! uBlock++; eError = ceError; for (UINT i = 0; (i < m_uRepeatOnError && eError != ceOK) || i == 0; i++) { bLast = FALSE; // Send request for response block eError = SendInfoBlock (uBlock, BT_REQ); if (eError != ceOK) { // Communication error sending block SleepEx (m_uWaitResend, FALSE); m_pPhys->Flush(); continue; } uBlockLen = m_Para.uBlockLen + HD_FRAME; // Receive block eError = m_pPhys->Receive((BYTE *)m_pDataFrame, &uBlockLen); if (eError != ceOK) { // Communication error or time out; try again SleepEx (m_uWaitResend, FALSE); m_pPhys->Flush(); continue; } // Check block size if (uBlockLen < HD_FRAME) { // Received block could not be a valid block; try again SleepEx (m_uWaitResend, FALSE); m_pPhys->Flush(); TrcPrint(TRC_ERROR, _T("[CLogBlock][Receive] Invalid block length.\n")); eError = ceError; continue; } // Convert Big -> Little Endian TtoH(m_pDataFrame); if (HD_FRAME + m_pDataFrame->BLK.uLen != uBlockLen) { TrcPrint(TRC_ERROR, _T("[CLogBlock][Receive] CRC frame data length check failed.\n")); PROGRESS_LAST(uProgMax); return ceCRC; } // Check CRC if (CheckCRC (m_pDataFrame) != ceOK) { TRACE (_T("CRC_CRC_CRC_CRC_CRC_CRC_CRC_CRC_CRC_CRC_CRC_CRC_CRC_CRC_CRC_\n")); TrcPrint(TRC_ERROR, _T("[CLogBlock][Receive] CRC check failed.\n")); // Wrong checksum; send NACK and try again SleepEx (m_uWaitResend, FALSE); m_pPhys->Flush(); eError = ceCRC; continue; } // Check block type if (m_pDataFrame->byType != BT_DATA) { // Received block could not be a valid block; try again SleepEx (m_uWaitResend, FALSE); m_pPhys->Flush(); TrcPrint(TRC_ERROR, _T("[CLogBlock][Receive] Invalid block type (data expected).\n")); eError = ceError; continue; } bLast = m_pDataFrame->BLK.byLast; // Check block number if (m_pDataFrame->BLK.uBlock != uBlock) { // Received block number does not match SleepEx (m_uWaitResend, FALSE); m_pPhys->Flush(); TrcPrint(TRC_ERROR, _T("[CLogBlock][Receive] Invalid block number.\n")); eError = ceError; continue; } *bypCommand = m_pDataFrame->BLK.CMD.byCommand; uDataLen = m_pDataFrame->BLK.uLen; // Create Command Buffer if (uBlock == 1) { HEAP_ALLOC(*ppData, uDataLen); } else { HEAP_RE_ALLOC(*ppData, *upLen + uDataLen); } if (*ppData == NULL) { TrcPrint(TRC_ERROR, _T("[CLogBlock][Receive] Alloc Memory.\n")); eError = ceError; continue; } // Copy data memcpy(*ppData + *upLen, m_pDataFrame->BLK.CMD.pData, uDataLen); *upLen += uDataLen; if (m_pDataFrame->BLK.CMD.byCommand > 0x80u) { // Error Message from VMM TRACE(_T("<<< %-8s %3d %4d \n"), _T("FAILED"), uBlock, m_pDataFrame->BLK.uLen); TrcPrint(TRC_INTERFACE, _T("<<< %-8s %3d %4d \n"), _T("FAILED"), uBlock, m_pDataFrame->BLK.uLen); PROGRESS_LAST(uProgMax); return ceOK; } else { TRACE(_T("<<< %-8s %3d %3d \n"), m_pDataFrame->BLK.CMD.byCommand <= LAST_CMD_VALUE ? szCommandText[m_pDataFrame->BLK.CMD.byCommand] : _T("Invalid"), uBlock, m_pDataFrame->BLK.uLen); TrcPrint(TRC_INTERFACE, _T("<<< %-8s %3d %4d \n"), m_pDataFrame->BLK.CMD.byCommand <= LAST_CMD_VALUE ? szCommandText[m_pDataFrame->BLK.CMD.byCommand] : _T("Invalid"), uBlock, m_pDataFrame->BLK.uLen); } } // end for if (eError != ceOK) { HEAP_FREE(*ppData, *upLen); PROGRESS_LAST(uProgMax); return eError; } if (++uProgCur == uProgMax) { uProgMax += uProgMax; } } // end while PROGRESS_LAST(uProgMax); return ceOK; }
/** * @brief Rexy's Main Event Handler * @if HISTORY * 26-Jul-2006 Joshua Revised to support capsulated event handling * @endif */ void Rexy_WinMain(void) { msg nMsg; // bool bCheckStartTime = TRUE; MsgType NullMessage = { 0, 0, 0}; MsgType CreateMessage = { AWM_CREATE, 0, 0 }; WND hFocusedWindow; int wmsg; // Initialize message queue MgqInitFreeStructures(); LckInit(); // Initialize application AppInit(); DiagInit(); // Set default font FntSetFont(&FntGlobalContext, 0); // Execute application of which state id is 0 StaGotoState( NULL, 0, NullMessage , CreateMessage ); while ( MsgGetMessage( hFocusedWindow = WinGetSelection(), &nMsg ) ) { if ( DiagHandler() != DIAG_RET_OK ) { TrcPrint("[FATAL ERROR] DiagHandler\n"); break; } TRACE( TR_RexyCore, TR_LEVEL1, ("MsgDispatch in GetMessage Loop with Msg %x\n", nMsg.wmsg) ); // Dispatch message to current state procedure first // in case of that we could have AWM_DESTROY or something // big event which can affect all open window if ( nMsg.window ) { wmsg = AWM_CHILDMSG; MsgSetChildMsg( &nMsg ); } else { wmsg = nMsg.wmsg; } if ( !StaGetCurrentProc()( (WND)nMsg.window, wmsg, nMsg.wparam, nMsg.lparam ) ) { // Since current state proc didn't handle the message, // this message will be floating among its window & child windows, Joshua //if ( !MsgRouteMessage( ( ((WND)nMsg.window)->parentwin != NULL ? ((WND)nMsg.window)->parentwin : (WND)nMsg.window ), &nMsg ) ) if ( !MsgRouteMessage( PrvFindTopWindow((WND)nMsg.window), &nMsg ) ) { // Since current window proc didn't handle the message, // we will hand this over to system event handler MsgDispatchSystemMessage( &nMsg ); } } } DiagDeinit(); TrcPrint("before sending AWM_DESTROY\n"); StaGetCurrentProc() ((WND)nMsg.window, AWM_DESTROY, 0, 0); TrcPrint("after sending AWM_DESTROY\n"); TRACE(TR_RexyCore, TR_LEVEL1, ("MsgGetMessage End\n")); }
void CConnectDlg::OnTimer(UINT nIDEvent) { int iLower; int iUpper; int iPos; CSC_SESSION_STATE ConnectState; CSC_SESSION_STATE ExclusiveConnectState = not_connected; BOOL bStop = FALSE; BOOL bForced = FALSE; BOOL bUpdate = FALSE; CString strTargetName; BOOL bIsTargetConnected = FALSE; BOOL bIsTargetConnectedExclusive = FALSE; BOOL bIsConnected = FALSE; BOOL bIsConnectedExclusive = FALSE; CDialog::OnTimer(nIDEvent); TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnTimer : (TargetId: %s)\n"), m_pTarget->GetId()); if(m_pTarget) { ConnectState = m_pTarget->GetSessionState(); bIsTargetConnected = m_pTarget->IsTargetConnected(); bIsConnected = m_pTarget->IsConnected(); // SIS 30.06.04 SUPER SPECIAL HACK FOR OSAI >> // even if target is not connected, end dialog // this is required if OSAI target is in emergency mode // download is possible since download can be done // from the OPC server by copying into the file system if(m_pTarget->GetType().Compare(_T("OSAI")) == 0) { bIsTargetConnected = TRUE; } // SIS 30.06.04 SUPER SPECIAL HACK FOR OSAI << TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnTimer : (TargetId: %s) : SessionState:%s ; IsConnected: %s ; IsTargetConnected: %s\n"), m_pTarget->GetId(), m_pTarget->GetSessionStateText(ConnectState), bIsConnected?_T("TRUE"):_T("FALSE"), bIsTargetConnected?_T("TRUE"):_T("FALSE")); CTargetOnl* pTarg = dynamic_cast<CTargetOnl*> (m_pTarget); if(pTarg) { ExclusiveConnectState = pTarg->GetExclusiveSessionState(); bIsTargetConnectedExclusive = pTarg->IsTargetConnectedExclusive(); bIsConnectedExclusive = pTarg->IsConnectedExclusive(); TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnTimer : (TargetId: %s) : ExclusiveSessionState:%s ; IsConnectedExclusive: %s ; IsTargetConnectedExclusive: %s\n"), m_pTarget->GetId(), m_pTarget->GetSessionStateText(ExclusiveConnectState), bIsConnectedExclusive?_T("TRUE"):_T("FALSE"), bIsTargetConnectedExclusive?_T("TRUE"):_T("FALSE")); } if( ( m_bWaitForTargetConnection && bIsTargetConnected && (!m_bExclusive || bIsTargetConnectedExclusive) ) || ( !m_bWaitForTargetConnection && bIsTargetConnected && bIsConnected && (!m_bExclusive || bIsConnectedExclusive) ) ) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnTimer : (TargetId: %s) : Target connected, close dialog.\n"), m_pTarget->GetId()); OnOK(); } strTargetName.Format(TARGET_NAME_ADDR,m_pTarget->GetId(),m_pTarget->GetControlAddress()); m_ProgrCtrl.GetRange(iLower, iUpper); iPos = m_ProgrCtrl.GetPos(); if(interrupted == ConnectState || interrupted == ExclusiveConnectState) { m_strStateText.Format(IDS_CONNECT_INTERRUPT, strTargetName); bUpdate = TRUE; } if(iPos >= iUpper) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnTimer : (TargetId: %s) : Timeout.\n"), m_pTarget->GetId()); m_strStateText.Format(IDS_CONNECT_TIMEOUT, strTargetName); bUpdate = TRUE; bStop = TRUE; } if(!m_bForced && m_bExclusive && RW_established == ConnectState && waiting_for_exclusive == ExclusiveConnectState && E_CSC_TRANSFER_SINGLE_DOWNLOADER_ALLOWED == pTarg->GetExclusiveSessionHResult() ) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnTimer : (TargetId: %s) : Force Logout Dialog.\n"), m_pTarget->GetId()); m_bForced = TRUE; CConnErrDlg* pDlg = new CConnErrDlg(this); if(pDlg->DoModal() == IDOK) { if(pTarg) { TrcPrint(TRC_COMM_EVENT, _T("CConnectDlg::OnTimer : (TargetId: %s) : User forced Logout.\n"), m_pTarget->GetId()); // user forced connection abort pTarg->DisconnectExclusive(TRUE); } } delete pDlg; } if(bUpdate) { UpdateData(FALSE); } if(bStop) { KillTimer(m_TimerId); m_TimerId = 0; // RevertConnectState(); return; } } m_ProgrCtrl.StepIt(); }
/** * Helper to call Fire_OnStateChanged(). * * @param newState - new session (connection) state. * @param hError - possible error code. * @see CSC_SESSION_STATE. */ void CFCMessageSession::FireStateChangeHelper(CSC_SESSION_STATE newState, HRESULT hError /*= S_OK*/) { TrcPrint(TRC_INTERFACE, _T("MsgSession: OnStateChanged(%s) state='%s'\n"), (LPCTSTR) m_strMachineName,GetSessionStateString(newState)); Fire_OnStateChanged(GetUnknown(), newState, hError); }
/** * CSC_InitHashTables initializes the hash tables. * * @param * @return * @exception - * @see */ VOID CSC_InitHashTables() { CSingleLock lock(CSC_GetConfigLock(), TRUE); CSC_CleanupHashTables(); CCsvParse parser; CString filename = GetConfigPath() + _T("__objects.hash"); HRESULT hr = parser.Open(filename); if (FAILED(hr)) { FC_DEBUGPRINT1(_T("CSVPARS> file not found: %s\n"), filename); TrcPrint(TRC_ERROR, _T("CSVPARS> file not found: %s\n"), filename); return; } BOOL syntax = TRUE; for (;;) { CSC_INSTANCEDEF instancedef; CString strName, strParam; if (!parser.IsEndOfLine()) { syntax = FALSE; break; } BOOL ok = parser.ParseNextField(strName); if (!ok) break; strName.MakeLower(); syntax = parser.ParseNextField(strParam); if (!syntax) break; instancedef.task = _ttol(strParam); syntax = parser.ParseNextField(strParam); if (!syntax) break; instancedef.obj = _ttol(strParam); syntax = parser.ParseNextField(strParam); if (!syntax) break; instancedef.off = _ttol(strParam); syntax = parser.ParseNextField(strParam); // length: ignored... if (!syntax) break; syntax = parser.ParseNextField(strParam); if (!syntax) break; instancedef.r_obj = _ttol(strParam); syntax = parser.ParseNextField(strParam); if (!syntax) break; instancedef.r_off = _ttol(strParam); syntax = parser.ParseNextField(strParam); // length: ignored... if (!syntax) break; syntax = parser.ParseNextField(strParam); if (!syntax) break; instancedef.cls_id = _ttol(strParam); syntax = parser.ParseNextField(instancedef.strClassName); if (!syntax) break; s_MapInstances.SetAt(strName, instancedef); } if (!syntax) { FC_DEBUGPRINT3(_T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); TrcPrint(TRC_ERROR, _T("CSVPARS> syntax error in %s(%d:%d)\n"), filename, parser.GetLineNo(), parser.GetLinePos()); } return; }