/////////////////////////////////////////////////////////////////////////////// // // File: make.cpp // // History: 06-Mar-01 markder Created. // // Desc: This file contains various member functions/constructors // used by the makefile objects. // /////////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "make.h" #include "fileio.h" //////////////////////////////////////////////////////////////////////////////////// // // Func: ReadDatabase // // Desc: Opens an XML file and calls read on the database object. // BOOL SdbMakefile::ReadMakefile( CString csMakefile) { BOOL bSuccess = FALSE; IXMLDOMNodePtr cpRootNode; IXMLDOMNodePtr cpMakefile; XMLNodeList XQL; if (!OpenXML(csMakefile, &cpRootNode)) { SDBERROR_PROPOGATE(); goto eh; } if (!GetChild(_T("SHIMDBC_MAKEFILE"), cpRootNode, &cpMakefile)) { SDBERROR(_T(" object not found")); goto eh; } if (!ReadFromXML(cpMakefile, NULL)) { SDBERROR_PROPOGATE(); goto eh; } bSuccess = TRUE; eh: return bSuccess; } BOOL SdbMakefile::ReadFromXML(IXMLDOMNode* pNode, SdbDatabase* pDB) { BOOL bSuccess = FALSE; SdbOutputFile* pOutputFile = NULL; if (!m_rgInputFiles.ReadFromXML(_T("INPUT"), NULL, pNode)) { SDBERROR_PROPOGATE(); goto eh; } if (!m_rgOutputFiles.ReadFromXML(_T("OUTPUT"), NULL, pNode)) { SDBERROR_PROPOGATE(); goto eh; } // // Propagate LANGID to output files if needed // for (int j = 0; j < m_rgOutputFiles.GetSize(); j++) { pOutputFile = (SdbOutputFile *) m_rgOutputFiles.GetAt(j); if (!pOutputFile->m_csLangID.GetLength()) { pOutputFile->m_csLangID = m_csLangID; } } if (!m_rgLangMaps.ReadFromXML(_T("LANG_MAP"), NULL, pNode)) { SDBERROR_PROPOGATE(); goto eh; } bSuccess = TRUE; eh: return bSuccess; } BOOL SdbInputFile::ReadFromXML(IXMLDOMNode* pNode, SdbDatabase* pDB) { BOOL bSuccess = FALSE; CString csType, csParamName, csParamValue; XMLNodeList XQL; IXMLDOMNodePtr cpParam; long i; if (!ReadName(pNode, &m_csName)) { SDBERROR_PROPOGATE(); goto eh; } m_csName = MakeFullPath(m_csName); ExpandEnvStrings(&m_csName); if (!XQL.Query(pNode, _T("PARAM"))) { SDBERROR_PROPOGATE(); goto eh; } for (i = 0; i < XQL.GetSize(); i++) { if (!XQL.GetItem(i, &cpParam)) { SDBERROR_PROPOGATE(); goto eh; } if (!GetAttribute(_T("NAME"), cpParam, &csParamName)) { SDBERROR_FORMAT((_T(" requires NAME attribute:\n%s\n"), GetXML(cpParam))); } if (!GetAttribute(_T("VALUE"), cpParam, &csParamValue)) { SDBERROR_FORMAT((_T(" requires VALUE attribute:\n%s\n"), GetXML(cpParam))); } ExpandEnvStrings(&csParamValue); if (csParamName == _T("FILTER")) { m_dwFilter = GetFilter(csParamValue); } m_mapParameters.SetAt(csParamName, csParamValue); cpParam.Release(); } bSuccess = TRUE; eh: return bSuccess; } BOOL SdbOutputFile::ReadFromXML(IXMLDOMNode* pNode, SdbDatabase* pDB) { BOOL bSuccess = FALSE; CString csType, csParamName, csParamValue; XMLNodeList XQL; IXMLDOMNodePtr cpParam; long i; COleDateTime odtServicePackBaselineDate; if (!ReadName(pNode, &m_csName)) { SDBERROR_PROPOGATE(); goto eh; } ExpandEnvStrings(&m_csName); m_csName = MakeFullPath(m_csName); if (!GetAttribute(_T("TYPE"), pNode, &csType)) { SDBERROR_FORMAT((_T(" requires TYPE attribute:\n%s\n"), GetXML(pNode))); } m_OutputType = GetOutputType(csType); if (m_OutputType == SDB_OUTPUT_TYPE_UNKNOWN) { SDBERROR_FORMAT((_T(" not recognized:\n%s\n"), csType)); } if (!XQL.Query(pNode, _T("PARAM"))) { SDBERROR_PROPOGATE(); goto eh; } for (i = 0; i < XQL.GetSize(); i++) { if (!XQL.GetItem(i, &cpParam)) { SDBERROR_PROPOGATE(); goto eh; } if (!GetAttribute(_T("NAME"), cpParam, &csParamName)) { SDBERROR_FORMAT((_T(" requires NAME attribute:\n%s\n"), GetXML(cpParam))); } if (!GetAttribute(_T("VALUE"), cpParam, &csParamValue)) { SDBERROR_FORMAT((_T(" requires VALUE attribute:\n%s\n"), GetXML(cpParam))); } ExpandEnvStrings(&csParamValue); if (csParamName == _T("FILTER")) { m_dwFilter = GetFilter(csParamValue); } if (csParamName == _T("INCLUDE FILES")) { if (csParamValue.Right(1) != _T("\\")) { csParamValue += _T("\\"); } } if (csParamName == _T("SERVICE PACK BASELINE DATE")) { if (csParamValue.GetLength()) { if (!odtServicePackBaselineDate.ParseDateTime(csParamValue, 0, 0x0409)) { SDBERROR_FORMAT((_T("Error parsing SERVICE PACK BASELINE DATE parameter in makefile: %s\n"), csParamValue)); goto eh; } m_dtRevisionCutoff = odtServicePackBaselineDate.m_dt; } } if (csParamName == _T("LANGID")) { m_csLangID = csParamValue; } m_mapParameters.SetAt(csParamName, csParamValue); cpParam.Release(); } bSuccess = TRUE; eh: return bSuccess; } BOOL SdbLangMap::ReadFromXML(IXMLDOMNode* pNode, SdbDatabase* pDB) { BOOL bSuccess = FALSE; CString csCodePage, csLCID; if (!ReadName(pNode, &m_csName)) { SDBERROR_PROPOGATE(); goto eh; } m_csName.MakeUpper(); if (!GetAttribute(_T("CODEPAGE"), pNode, &csCodePage)) { SDBERROR_FORMAT((_T(" requires CODEPAGE attribute:\n%s\n"), GetXML(pNode))); } if (!GetAttribute(_T("LCID"), pNode, &csLCID)) { SDBERROR_FORMAT((_T(" requires LCID attribute:\n%s\n"), GetXML(pNode))); } if (!GetAttribute(_T("HTML_CHARSET"), pNode, &m_csHtmlCharset)) { SDBERROR_FORMAT((_T(" requires HTML_CHARSET attribute:\n%s\n"), GetXML(pNode))); } m_dwCodePage = _ttol(csCodePage); m_lcid = _tcstol(csLCID, NULL, 0); bSuccess = TRUE; eh: return bSuccess; } BOOL WriteRedirMapFile(CString csFile, CString csTemplateFile, SdbDatabase* pDB) { BOOL bSuccess = FALSE; CString csID, csURL, csTemplate, csRow; try { CStdioFile TemplateFile(csTemplateFile, CFile::typeText|CFile::modeRead); while (TemplateFile.ReadString(csRow)) { csTemplate += csRow + _T("\n"); } } catch(CFileException* pFileEx) { SDBERROR_FORMAT((_T("Error reading from redir template file: %s\n"), csTemplateFile)); pFileEx->Delete(); goto eh; } catch(CMemoryException* pMemEx) { pMemEx->Delete(); goto eh; } try { SdbLocalizedString* pRedir = NULL; CStdioFile OutputFile(csFile, CFile::typeText | CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite); OutputFile.WriteString(_T("\n")); for (int i = 0; i < pDB->m_rgRedirs.GetSize(); i++) { pRedir = (SdbLocalizedString *) pDB->m_rgRedirs.GetAt(i); if (pRedir->m_csLangID == pDB->m_pCurrentOutputFile->m_csLangID) { csID = pRedir->m_csName; csURL = pRedir->m_csValue; csRow = csTemplate; csRow.Replace(_T("%REDIR_ID%"), csID); csRow.Replace(_T("%URL%"), csURL); OutputFile.WriteString(csRow); } } OutputFile.WriteString(_T("\n")); OutputFile.Close(); } catch(CFileException* pFileEx) { pFileEx->Delete(); goto eh; } catch(CMemoryException* pMemEx) { pMemEx->Delete(); goto eh; } bSuccess = TRUE; eh: return bSuccess; } void SdbMakefile::AddHistoryKeywords(LPCTSTR szStart) { LPCTSTR szEnd; szEnd = szStart; while (*szEnd) { if (*(szEnd+1) == _T(';') || *(szEnd+1) == _T('\0')) { m_rgHistoryKeywords.Add(szStart); m_rgHistoryKeywords[m_rgHistoryKeywords.GetSize()-1] = m_rgHistoryKeywords[m_rgHistoryKeywords.GetSize()-1].Left((int)(szEnd - szStart + 1)); szStart = szEnd + 2; } szEnd++; } } SdbLangMap* SdbMakefile::GetLangMap(CString& csLangID) { SdbLangMap* pLangMap = NULL; return (SdbLangMap *) m_rgLangMaps.LookupName(csLangID); } BOOL WriteAppHelpReport(SdbOutputFile* pOutputFile, SdbDatabase* pDB) { BOOL bSuccess = FALSE; SdbAppHelp* pAppHelp; long i, j; CString csHTML, csRedirID, csRedirURL, csThisRedirURL, csURL, csTemp; SdbLocalizedString* pRedir = NULL; csRedirURL = pOutputFile->GetParameter(_T("REDIR URL")); try { CUTF16TextFile File(pOutputFile->m_csName, CFile::typeText | CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite); File.WriteString(_T("")); File.WriteString(_T("")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); for (i = 0; i < pDB->m_rgAppHelps.GetSize(); i++) { pAppHelp = (SdbAppHelp *) pDB->m_rgAppHelps[i]; File.WriteString(_T("\n")); csHTML.Format(_T("\n"), pAppHelp->m_pApp->GetLocalizedAppName()); File.WriteString(csHTML); csHTML.Format(_T("\n"), pAppHelp->m_pApp->GetLocalizedVendorName()); File.WriteString(csHTML); csHTML.Format(_T("\n"), pAppHelp->m_csName, pAppHelp->m_csName); File.WriteString(csHTML); File.WriteString(_T("\n")); } File.WriteString(_T("
AppHelp Pages
 
AppVendorHTMLHelpID
%s%s%s

")); File.WriteString(_T("")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); File.WriteString(_T("\n")); for (i = 0; i < pDB->m_rgRedirs.GetSize(); i++) { pRedir = (SdbLocalizedString *) pDB->m_rgRedirs.GetAt(i); if (pRedir->m_csLangID == pDB->m_pCurrentMakefile->m_csLangID) { csRedirID = pRedir->m_csName; csURL = pRedir->m_csValue; File.WriteString(_T("\n")); csHTML.Format(_T("\n"), csRedirID); File.WriteString(csHTML); csHTML.Format(_T("\n"), csURL); File.WriteString(csHTML); csThisRedirURL = csRedirURL; csThisRedirURL.Replace(_T("$REDIR_ID$"), csRedirID); csTemp.Format(_T("%X"), pDB->m_pCurrentMakefile->GetLangMap(pOutputFile->m_csLangID)->m_lcid); csThisRedirURL.Replace(_T("$LCID$"), csTemp); csHTML.Format(_T("\n"), csThisRedirURL, csThisRedirURL); File.WriteString(csHTML); File.WriteString(_T("\n")); } } File.WriteString(_T("
Redirector Report
 
RedirIDURLFWLink Entry
%s%s%s
")); File.Close(); } catch(CFileException* pFileEx) { pFileEx->Delete(); goto eh; } catch(CMemoryException* pMemEx) { pMemEx->Delete(); goto eh; } bSuccess = TRUE; eh: return bSuccess; }