#include "stdafx.hxx" #include "vs_inc.hxx" static unsigned s_iwcDocBegin; static unsigned s_iwcDocEnd; unsigned PrintStringToFile(FILE *file, LPCWSTR wsz, bool bPrintRootElement) { const WCHAR *pwc = wsz; fputc('{', file); unsigned ich = 0; if (bPrintRootElement) { fputs("L'<', L'r', L'o', L'o', L't', L'>', L'\\n', ", file); ich = 7; } s_iwcDocBegin = ich; while(*pwc != L'\0') { if ((ich++ % 10) == 0) fputc('\n', file); fprintf(file, "L'"); if (*pwc == L'\\') { fputc('\\', file); fputc('\\', file); } else if (*pwc == L'\n') { fputc('\\', file); fputc('n', file); } else if (*pwc == L'\r') { fputc('\\', file); fputc('r', file); } else if (*pwc == L'\t') { fputc('\\', file); fputc('t', file); } else fputc((char) *pwc, file); fprintf(file, "', "); pwc++; } s_iwcDocEnd = ich; if (bPrintRootElement) { fputc('\n', file); fputs("L'\\n', L'<', L'/', L'r', L'o', L'o', L't', L'>', L'\\n', ", file); ich += 9; } fprintf(file, "L'\\0'\n};"); return ich; } extern "C" __cdecl wmain(int, WCHAR **) { CVssFunctionTracer ft(VSSDBG_GEN, L"main"); CXMLDocument doc; try { ft.hr = CoInitialize(NULL); if (ft.HrFailed()) ft.Throw ( VSSDBG_XML, E_UNEXPECTED, L"CoInitialize failed. hr = 0x%08lx", ft.hr ); if (!doc.LoadFromFile(L"writermetadata.xml")) { printf("Cannot load writermetadata.xml\n"); exit(-1); } CComBSTR bstr = doc.SaveAsXML(); FILE *f = fopen("wmxml.c", "w"); if (f == NULL) { printf("create of wmxml.c failed\n"); exit(-1); } fprintf(f, "WCHAR g_WriterMetadataXML[] = \n"); unsigned cwc = PrintStringToFile(f, bstr, false); fprintf ( f, "\nconst unsigned g_cwcWriterMetadataXML = %d;\n\n", cwc ); bstr.Empty(); fclose(f); if (!doc.LoadFromFile(L"componentmetadata.xml")) { printf("Cannot load componentmetadata.xml\n"); exit(-1); } bstr = doc.SaveAsXML(); f = fopen("cmxml.c", "w"); if (f == NULL) { printf("create of cmxml.c failed\n"); exit(-1); } fprintf(f, "WCHAR g_ComponentMetadataXML[] = \n"); cwc = PrintStringToFile(f, bstr, true); fprintf ( f, "\nconst unsigned g_cwcComponentMetadataXML = %d;\n\n", cwc ); fprintf ( f, "\nconst unsigned g_iwcComponentMetadataXMLBegin = %d;\n\n", s_iwcDocBegin ); fprintf ( f, "\nconst unsigned g_iwcComponentMetadataXMLEnd = %d;\n\n", s_iwcDocEnd ); fclose(f); } VSS_STANDARD_CATCH(ft) if (ft.HrFailed()) { printf("Unexpected exception, hr = 0x%08lx", ft.hr); exit(-1); } return 0; }