shithub: minivmac

ref: 58d2d2163839d93456f861f12ddb6d697e8ebf9c
dir: /setup/WRMSCFLS.i/

View raw version
/*
	WRMSCFLS.i
	Copyright (C) 2007 Paul C. Pratt

	You can redistribute this file and/or modify it under the terms
	of version 2 of the GNU General Public License as published by
	the Free Software Foundation.  You should have received a copy
	of the license along with this file; see the file COPYING.

	This file is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	license for more details.
*/

/*
	WRite Microsoft C specific FiLeS
*/


LOCALPROC WriteMSVCQuotedDefine(char *s)
{
	WriteCStrToDestFile(" /D ");
	WriteQuoteToDestFile();
	WriteCStrToDestFile(s);
	WriteQuoteToDestFile();
}

LOCALPROC WriteCLexeFlags(void)
{
	blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
	WriteCStrToDestFile("/nologo");

#if 0
	if (gbk_dbg_on != gbo_dbg) {
		/* Optimizations : Minimize Size */
		WriteCStrToDestFile(" /O1");
	} else
#endif
	{
		/* Maximize chance of correct compile */
		/* Optimizations : Disabled */
		WriteCStrToDestFile(" /Od");
	}
	if (WinCE) {
		WriteCStrToDestFile(
			" /D _WIN32_WCE=420 /D WIN32_PLATFORM_PSPC=400"
			" /D UNDER_CE=420");
		if (gbk_cpufam_arm == gbo_cpufam) {
			WriteCStrToDestFile(
				" /D \"ARM\" /D \"_ARM_\" /D \"ARMV4\"");
		} else {
			WriteCStrToDestFile(
				" /D \"_i386_\" /D \"_X86_\" /D \"x86\" /D \"i_386_\"");
		}
	} else {
		WriteMSVCQuotedDefine("WIN32");
		WriteMSVCQuotedDefine("_WINDOWS");
	}
	if (gbk_dbg_on == gbo_dbg) {
		WriteMSVCQuotedDefine("_DEBUG");
	} else {
		WriteMSVCQuotedDefine("NDEBUG");
	}
	if (WinCE) {
		WriteMSVCQuotedDefine("UNICODE");
		WriteMSVCQuotedDefine("_UNICODE");
	} else {
		if (ide_vers >= 6000) {
			WriteMSVCQuotedDefine("_MBCS");
		}
	}

	if ((gbk_dbg_on == gbo_dbg) && (gbk_targ_wx86 == cur_targ)) {
		WriteCStrToDestFile(" /Gm"); /* minimal rebuild */
	}

	/* WriteCStrToDestFile(" /GX"); enable exception handling */

	if (WinCE) {
		if (gbk_cpufam_x86 == gbo_cpufam) {
			WriteCStrToDestFile(" /Gs8192");
				/* in the default template. why? */
		}
	}

	if (gbk_dbg_on == gbo_dbg) {
		if (ide_vers >= 7000) {
			WriteCStrToDestFile(" /RTC1");
		} else {
			WriteCStrToDestFile(" /GZ");
		}
	} else {
		WriteCStrToDestFile(" /GF"); /* string pooling */
	}

	if (WinCE) {
		if (gbk_cpufam_arm == gbo_cpufam) {
			if (gbk_dbg_on == gbo_dbg) {
				WriteCStrToDestFile(" /M$(CECrtMTDebug)");
			} else {
				WriteCStrToDestFile(" /MC");
			}
		}
		/*
			default template doesn't do this for
			x86. why not?
		*/
	} else {
		if (gbk_dbg_on == gbo_dbg) {
			if ((ide_vers >= 8000)
				|| (gbk_cpufam_x64 == gbo_cpufam))
			{
				WriteCStrToDestFile(" /MTd");
			} else {
				WriteCStrToDestFile(" /MLd");
			}
		} else {
			if ((ide_vers >= 8000)
				|| (gbk_cpufam_x64 == gbo_cpufam))
			{
				WriteCStrToDestFile(" /MT");
			} else {
				WriteCStrToDestFile(" /ML");
			}
		}
	}

#if 0
	if (ide_vers < 8000) {
		WriteCStrToDestFile(" /GS");
			/* became default later */
		/*
			perhaps instead use /GS- in later versions
			maybe this should be an option set in SPBASDEF
		*/
	}
#endif

	WriteCStrToDestFile(" /W4");

	WriteCStrToDestFile(" /c");

	if ((ide_vers >= 7000) && (ide_vers < 9000)) {
		/* Detect 64-bit Portability Issues */
		WriteCStrToDestFile(" /Wp64");
	}

	if (ide_vers >= 7000) {
		/* and probably earlier, at least back to 6.0 */
		/* Enable Function-Level Linking */
		WriteCStrToDestFile(" /Gy");
	}

	if (gbk_dbg_on == gbo_dbg) {
		/* Debug Information Format */
		if (WinCE || (gbk_targ_wx64 == cur_targ)) {
			WriteCStrToDestFile(" /Zi");
		} else {
			WriteCStrToDestFile(" /ZI");
		}
	}
}

LOCALPROC WriteRCexeFlags(void)
{
	blnr WinCE = (gbk_targfam_wnce == gbo_targfam);

	WriteCStrToDestFile("/l 0x409 /d ");
	WriteQuoteToDestFile();
	if (gbk_dbg_on == gbo_dbg) {
		WriteCStrToDestFile("_DEBUG");
	} else {
		WriteCStrToDestFile("NDEBUG");
	}
	WriteQuoteToDestFile();
	if (WinCE) {
		WriteCStrToDestFile(
			" /d UNDER_CE=420 /d _WIN32_WCE=420 /d \"UNICODE\""
			" /d \"_UNICODE\" /d WIN32_PLATFORM_PSPC=400 /r");
		if (gbk_cpufam_arm == gbo_cpufam) {
			WriteCStrToDestFile(
				" /d \"ARM\" /d \"_ARM_\" /d \"ARMV4\"");
		} else {
			WriteCStrToDestFile(
				" /d \"_i386_\" /d \"_X86_\" /d \"x86\"");
		}
	}
}

LOCALPROC WriteFileToMSVCSource(MyProc p)
{
	WriteDestFileLn("# Begin Source File");
	WriteBlankLineToDestFile();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("SOURCE=");
	p();
	WriteEndDestFileLn();

	WriteDestFileLn("# End Source File");
}

LOCALPROC WriteDocTypeMSVCresource(void)
{
	WriteFileToMSVCSource(WriteDocTypeIconFilePath);
}

LOCALPROC WriteMSVCBeginGroup(char *group, char *filter)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("# Begin Group ");
	WriteQuoteToDestFile();
	WriteCStrToDestFile(group);
	WriteQuoteToDestFile();
	WriteEndDestFileLn();

	WriteBlankLineToDestFile();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("# PROP Default_Filter ");
	WriteQuoteToDestFile();
	WriteCStrToDestFile(filter);
	WriteQuoteToDestFile();
	WriteEndDestFileLn();
}

LOCALPROC WriteMSVCEndGroup(void)
{
	WriteDestFileLn("# End Group");
}

LOCALPROC WriteMSVCdbgLevelName(void)
{
	char *s;

	switch (gbo_dbg) {
		case gbk_dbg_on:
			s = "Debug";
			break;
		case gbk_dbg_test:
			s = "Test";
			break;
		case gbk_dbg_off:
			s = "Release";
			break;
		default:
			s = "(unknown Debug Level)";
			break;
	}

	WriteCStrToDestFile(s);
}

LOCALPROC WriteMSVCTargetName00(void)
{
	blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
	WriteCStrToDestFile("Win32");
	if (WinCE) {
		if (gbk_cpufam_arm == gbo_cpufam) {
			WriteCStrToDestFile(" (WCE ARMV4)");
		} else {
			WriteCStrToDestFile(" (WCE emulator)");
		}
	} else {
		WriteCStrToDestFile(" (x86)");
	}
}

LOCALPROC WriteMSVCTargetName0(void)
{
	WriteStrAppAbbrev();
	WriteCStrToDestFile(" - ");
	WriteMSVCTargetName00();
	WriteSpaceToDestFile();
	WriteMSVCdbgLevelName();
}

LOCALPROC WriteMSVCTargetName(void)
{
	WriteQuoteToDestFile();
	WriteMSVCTargetName0();
	WriteQuoteToDestFile();
}

LOCALPROC WriteMSVCMakefileName(void)
{
	WriteQuoteToDestFile();
	WriteStrAppAbbrev();
	if (gbk_targfam_wnce == gbo_targfam) {
		WriteCStrToDestFile(".vcn");
	} else {
		WriteCStrToDestFile(".mak");
	}
	WriteQuoteToDestFile();
}

LOCALPROC WriteMSVCQuotedProp(char *p, char *s)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("# PROP ");
	WriteCStrToDestFile(p);
	WriteSpaceToDestFile();
	WriteQuoteToDestFile();
	WriteCStrToDestFile(s);
	WriteQuoteToDestFile();
	WriteEndDestFileLn();
}

LOCALPROC DoSrcFileMSVCAddFile(void)
{
	WriteDestFileLn("# Begin Source File");
	WriteBlankLineToDestFile();
	WriteBgnDestFileLn();
	WriteCStrToDestFile("SOURCE=");
	WriteSrcFileFilePath();
	WriteEndDestFileLn();
#if 0
	if (gbk_dbg_on != gbo_dbg) {
		if (fast) {
			WriteDestFileLn("# ADD CPP /O2 /Ob2");
		}
	}
#endif
	WriteDestFileLn("# End Source File");
}

LOCALPROC DoSrcFileMSVCAddHeader(void)
{
	if ((DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader) == 0) {
		WriteDestFileLn("# Begin Source File");
		WriteBlankLineToDestFile();
		WriteBgnDestFileLn();
		WriteCStrToDestFile("SOURCE=");
		WriteSrcFileHeaderPath();
		WriteEndDestFileLn();
		WriteDestFileLn("# End Source File");
	}
}

LOCALPROC DoExtraHeaderMSVCAdd(void)
{
	WriteDestFileLn("# Begin Source File");
	WriteBlankLineToDestFile();
	WriteBgnDestFileLn();
	WriteCStrToDestFile("SOURCE=");
	WriteExtraHeaderFilePath();
	WriteEndDestFileLn();
	WriteDestFileLn("# End Source File");
}

LOCALFUNC char * MSVCWorkspaceExt(void)
{
	return (gbk_targfam_wnce == gbo_targfam)
		? ".vcw" : ".dsw";
}

LOCALFUNC char * MSVCProjectExt(void)
{
	return (gbk_targfam_wnce == gbo_targfam)
		? ".vcp" : ".dsp";
}

LOCALPROC WriteMSVCWorkSpaceFile(void)
{
	blnr WinCE = (gbk_targfam_wnce == gbo_targfam);
	if (WinCE) {
		WriteDestFileLn(
			"Microsoft eMbedded Visual Tools Workspace File,"
			" Format Version 4.00");
	} else {
		WriteDestFileLn(
			"Microsoft Developer Studio Workspace File,"
			" Format Version 6.00");
	}
	WriteDestFileLn(
		"# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!");
	WriteBlankLineToDestFile();
	WriteDestFileLn(
		"############################################################"
		"###################");
	WriteBlankLineToDestFile();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("Project: ");
	WriteQuoteToDestFile();
	WriteStrAppAbbrev();
	WriteQuoteToDestFile();
	WriteCStrToDestFile("=.");
	WriteBackSlashToDestFile();
	WriteStrAppAbbrev();
	WriteCStrToDestFile(MSVCProjectExt());
	WriteCStrToDestFile(" - Package Owner=<4>");
	WriteEndDestFileLn();

	WriteBlankLineToDestFile();
	WriteDestFileLn("Package=<5>");
	WriteDestFileLn("{{{");
	WriteDestFileLn("}}}");
	WriteBlankLineToDestFile();
	WriteDestFileLn("Package=<4>");
	WriteDestFileLn("{{{");
	WriteDestFileLn("}}}");
	WriteBlankLineToDestFile();
	WriteDestFileLn(
		"############################################################"
		"###################");
	WriteBlankLineToDestFile();
	WriteDestFileLn("Global:");
	WriteBlankLineToDestFile();
	WriteDestFileLn("Package=<5>");
	WriteDestFileLn("{{{");
	WriteDestFileLn("}}}");
	WriteBlankLineToDestFile();
	WriteDestFileLn("Package=<3>");
	WriteDestFileLn("{{{");
	WriteDestFileLn("}}}");
	WriteBlankLineToDestFile();
	WriteDestFileLn(
		"############################################################"
		"###################");
	WriteBlankLineToDestFile();
}

LOCALPROC WriteMSVCProjectFile(void)
{
	blnr WinCE = (gbk_targfam_wnce == gbo_targfam);

	WriteBgnDestFileLn();
	WriteCStrToDestFile("# Microsoft ");
	if (WinCE) {
		WriteCStrToDestFile("eMbedded Visual Tools");
	} else {
		WriteCStrToDestFile("Developer Studio");
	}
	WriteCStrToDestFile(" Project File - Name=");
	WriteQuoteToDestFile();
	WriteStrAppAbbrev();
	WriteQuoteToDestFile();
	WriteCStrToDestFile(" - Package Owner=<4>");
	WriteEndDestFileLn();

	if (WinCE) {
		WriteDestFileLn(
			"# Microsoft eMbedded Visual Tools Generated Build File,"
			" Format Version 6.02");
	} else {
		WriteDestFileLn(
			"# Microsoft Developer Studio Generated Build File,"
			" Format Version 6.00");
	}
	WriteDestFileLn("# ** DO NOT EDIT **");
	WriteBlankLineToDestFile();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("# TARGTYPE ");
	WriteQuoteToDestFile();
	WriteMSVCTargetName00();
	WriteCStrToDestFile(" Application");
	WriteQuoteToDestFile();
	if (WinCE) {
		if (gbk_cpufam_arm == gbo_cpufam) {
			WriteCStrToDestFile(" 0xa301");
		} else {
			WriteCStrToDestFile(" 0xa601");
		}
	} else {
		WriteCStrToDestFile(" 0x0101");
	}
	WriteEndDestFileLn();

	WriteBlankLineToDestFile();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("CFG=");
	/* WriteAppVariationStr(); */
	WriteMSVCTargetName0();
	WriteEndDestFileLn();

	WriteDestFileLn(
		"!MESSAGE This is not a valid makefile."
		" To build this project using NMAKE,");
	WriteDestFileLn("!MESSAGE use the Export Makefile command and run");
	WriteDestFileLn("!MESSAGE ");

	WriteBgnDestFileLn();
	WriteCStrToDestFile("!MESSAGE NMAKE /f ");
	WriteMSVCMakefileName();
	WriteCStrToDestFile(".");
	WriteEndDestFileLn();

	WriteDestFileLn("!MESSAGE ");
	WriteDestFileLn(
		"!MESSAGE You can specify a configuration when running NMAKE");
	WriteDestFileLn(
		"!MESSAGE by defining the macro CFG on the command line."
		" For example:");
	WriteDestFileLn("!MESSAGE ");

	WriteBgnDestFileLn();
	WriteCStrToDestFile("!MESSAGE NMAKE /f ");
	WriteMSVCMakefileName();
	WriteCStrToDestFile(" CFG=");
	WriteMSVCTargetName();
	WriteEndDestFileLn();

	WriteDestFileLn("!MESSAGE ");
	WriteDestFileLn("!MESSAGE Possible choices for configuration are:");
	WriteDestFileLn("!MESSAGE ");

	WriteBgnDestFileLn();
	WriteCStrToDestFile("!MESSAGE ");
	WriteMSVCTargetName();
	WriteCStrToDestFile(" (based on ");
	WriteQuoteToDestFile();
	WriteMSVCTargetName00();
	WriteCStrToDestFile(" Application");
	WriteQuoteToDestFile();
	WriteCStrToDestFile(")");
	WriteEndDestFileLn();

	WriteDestFileLn("!MESSAGE ");
	WriteBlankLineToDestFile();
	WriteDestFileLn("# Begin Project");
	WriteDestFileLn("# PROP AllowPerConfigDependencies 0");

	WriteMSVCQuotedProp("Scc_ProjName", "");
	WriteMSVCQuotedProp("Scc_LocalPath", "");

	if (WinCE) {
		WriteDestFileLn("# PROP ATL_Project 2"); /* not needed ? */
	}

	WriteBgnDestFileLn();
	WriteCStrToDestFile("CPP=");
	WriteCompileCExec();
	WriteEndDestFileLn();

	WriteDestFileLn("MTL=midl.exe");
	WriteDestFileLn("RSC=rc.exe");
	WriteDestFileLn("# PROP BASE Use_MFC 0");
	WriteDestFileLn("# PROP BASE Use_Debug_Libraries 1");

	WriteMSVCQuotedProp("BASE Output_Dir", "Debug");
	WriteMSVCQuotedProp("BASE Intermediate_Dir", "Debug");
	WriteMSVCQuotedProp("BASE Target_Dir", "");

	WriteDestFileLn("# PROP Use_MFC 0");
	if (gbk_dbg_on == gbo_dbg) {
		WriteDestFileLn("# PROP Use_Debug_Libraries 1");
	} else {
		WriteDestFileLn("# PROP Use_Debug_Libraries 0");
	}

	WriteMSVCQuotedProp("Output_Dir", obj_d_name);
	WriteMSVCQuotedProp("Intermediate_Dir", obj_d_name);

	WriteDestFileLn("# PROP Ignore_Export_Lib 0");

	WriteMSVCQuotedProp("Target_Dir", "");

	WriteDestFileLn("# ADD BASE CPP");

	WriteBgnDestFileLn();
	WriteCStrToDestFile("# ADD CPP ");
	WriteCLexeFlags();
	if (! WinCE) {
		WriteCStrToDestFile(" /FD");
	}
	WriteCStrToDestFile(" /I ");
	WriteQuoteToDestFile();
	Write_cfg_d_ToDestFile();
	WriteQuoteToDestFile();
	WriteEndDestFileLn();

	WriteDestFileLn("# ADD BASE MTL");

	WriteBgnDestFileLn();
	WriteCStrToDestFile("# ADD MTL /nologo /D ");
	WriteQuoteToDestFile();
	if (gbk_dbg_on == gbo_dbg) {
		WriteCStrToDestFile("_DEBUG");
	} else {
		WriteCStrToDestFile("NDEBUG");
	}
	WriteQuoteToDestFile();
	WriteCStrToDestFile(" /mktyplib203 /win32");
	if (WinCE) {
		WriteCStrToDestFile(" /o \"NUL\"");
	}
	WriteEndDestFileLn();

	WriteDestFileLn("# ADD BASE RSC");

	WriteBgnDestFileLn();
	WriteCStrToDestFile("# ADD RSC ");
	WriteRCexeFlags();
	WriteCStrToDestFile(" /I ");
	WriteQuoteToDestFile();
	Write_src_d_ToDestFile();
	WriteQuoteToDestFile();
	WriteEndDestFileLn();

	WriteDestFileLn("BSC32=bscmake.exe");
	WriteDestFileLn("# ADD BASE BSC32");
	WriteDestFileLn("# ADD BSC32 /nologo");
	WriteDestFileLn("LINK32=link.exe");
	WriteDestFileLn("# ADD BASE LINK32");

	WriteBgnDestFileLn();
	WriteCStrToDestFile("# ADD LINK32");
	if (WinCE) {
		WriteCStrToDestFile(
			" commctrl.lib coredll.lib aygshell.lib Mmtimer.lib");
	} else {
		WriteCStrToDestFile(
			" kernel32.lib user32.lib gdi32.lib"
			" winspool.lib comdlg32.lib advapi32.lib shell32.lib"
			" ole32.lib oleaut32.lib uuid.lib winmm.lib");
	}
	WriteCStrToDestFile(" /nologo");
	if (WinCE) {
		WriteCStrToDestFile(
			" /base:\"0x00010000\" /stack:0x10000,0x1000"
			" /entry:\"WinMainCRTStartup\""
			" /nodefaultlib:\"$(CENoDefaultLib)\"");
	}

	WriteCStrToDestFile(" /subsystem:");
	if (WinCE) {
		WriteCStrToDestFile("$(CESubsystem)");
	} else {
		WriteCStrToDestFile("windows");
	}

	if (gbk_dbg_on == gbo_dbg) {
		WriteCStrToDestFile(" /debug");
	} else {
		WriteCStrToDestFile(" /incremental:no");
	}
	WriteCStrToDestFile(" /machine:");
	if (gbk_cpufam_arm == gbo_cpufam) {
		WriteCStrToDestFile("ARM");
	} else {
		if (WinCE) {
			WriteCStrToDestFile("IX86");
		} else {
			WriteCStrToDestFile("I386"); /* maybe should be IX86 ? */
		}
	}

	WriteCStrToDestFile(" /out:");
	WriteQuoteToDestFile();
	WriteAppNameStr();
	WriteQuoteToDestFile();
	if (WinCE) {
		if (gbk_cpufam_arm == gbo_cpufam) {
			WriteCStrToDestFile(" /align:\"4096\"");
				/* is this really needed ? */
		} else {
			WriteCStrToDestFile(
				" $(CEx86Corelibc) /nodefaultlib:\"OLDNAMES.lib\"");
		}
	}
	if (gbk_dbg_on == gbo_dbg) {
		WriteCStrToDestFile(" /pdbtype:sept");
	}
	WriteEndDestFileLn();

	WriteDestFileLn("# Begin Target");
	WriteBlankLineToDestFile();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("# Name ");
	WriteMSVCTargetName();
	WriteEndDestFileLn();

	WriteMSVCBeginGroup("Source Files",
		"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat");
		DoAllSrcFilesWithSetup(
			DoSrcFileMSVCAddFile);
		WriteFileToMSVCSource(WriteMainRsrcSrcPath);
	WriteMSVCEndGroup();

	WriteMSVCBeginGroup("Header Files", "h;hpp;hxx;hm;inl");
		DoAllSrcFilesWithSetup(
			DoSrcFileMSVCAddHeader);
	WriteMSVCEndGroup();

	WriteMSVCBeginGroup("Resource Files",
		"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe");
		DoAllDocTypesWithSetup(WriteDocTypeMSVCresource);
	WriteMSVCEndGroup();

	WriteMSVCBeginGroup("Include Files", "h;hpp;hxx;hm;inl");
		DoAllExtraHeaders2WithSetup(DoExtraHeaderMSVCAdd);
	WriteMSVCEndGroup();

	WriteDestFileLn("# End Target");
	WriteDestFileLn("# End Project");
}

LOCALPROC WriteMSVCSpecificFiles(void)
{
	WriteADstFile1("my_project_d",
		vStrAppAbbrev, MSVCWorkspaceExt(), "Workspace file",
		WriteMSVCWorkSpaceFile);
	WriteADstFile1("my_project_d",
		vStrAppAbbrev, MSVCProjectExt(), "Project file",
		WriteMSVCProjectFile);
}

LOCALPROC WriteXMLQuotedProp(char *s, MyProc p)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile(s);
	WriteCStrToDestFile("=");
	WriteQuoteToDestFile();
	p();
	WriteQuoteToDestFile();
	WriteEndDestFileLn();
}

LOCALPROC WriteMSVCPlatformName(void)
{
	if (gbk_targ_wx64 == cur_targ) {
		WriteCStrToDestFile("x64");
	} else {
		WriteCStrToDestFile("Win32");
	}
}

LOCALPROC WriteMSVCXMLPlatformProps(void)
{
	WriteXMLQuotedProp("Name", WriteMSVCPlatformName);
}

LOCALPROC WriteMSVCXMLPlatforms(void)
{
	WriteXMLtaglinewithprops("Platform", WriteMSVCXMLPlatformProps);
}

LOCALPROC WriteMSVCXMLConfigurationName(void)
{
	WriteMSVCdbgLevelName();
	WriteCStrToDestFile("|");
	WriteMSVCPlatformName();
}

LOCALPROC WriteMSVCXMLConfigurationProps(void)
{
	WriteXMLQuotedProp("Name", WriteMSVCXMLConfigurationName);
	WriteXMLQuotedProp("OutputDirectory", Write_obj_d_ToDestFile);
	WriteXMLQuotedProp("IntermediateDirectory", Write_obj_d_ToDestFile);
	WriteDestFileLn("ConfigurationType=\"1\"");
	WriteDestFileLn("CharacterSet=\"2\"");
	if (gbk_dbg_on != gbo_dbg) {
		WriteDestFileLn("WholeProgramOptimization=\"0\"");
	}
}

LOCALPROC WriteMSVCToolConfig(char *s, MyProc p)
{
	WriteDestFileLn("<Tool");
	++DestFileIndent;
		WriteBgnDestFileLn();
		WriteCStrToDestFile("Name=");
		WriteQuoteToDestFile();
		WriteCStrToDestFile(s);
		WriteQuoteToDestFile();
		WriteEndDestFileLn();
		if (NULL != p) {
			p();
		}
	--DestFileIndent;
	WriteDestFileLn("/>");
}

LOCALPROC WriteMSVCCompilerToolConfig(void)
{
#if 0
	if (gbk_dbg_on != gbo_dbg) {
		WriteDestFileLn("Optimization=\"1\"");
		WriteDestFileLn("FavorSizeOrSpeed=\"0\"");
		WriteDestFileLn("WholeProgramOptimization=\"false\"");
		WriteDestFileLn("OmitFramePointers=\"true\"");
	} else
#endif
	{
		/* Maximize chance of correct compile */
		WriteDestFileLn("Optimization=\"0\"");
	}

	if (gbk_dbg_on == gbo_dbg) {
		WriteDestFileLn(
			"PreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"");
		WriteDestFileLn("MinimalRebuild=\"true\"");
	} else {
		WriteDestFileLn(
			"PreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"");
		WriteDestFileLn("StringPooling=\"true\"");
	}

	WriteXMLQuotedProp("AdditionalIncludeDirectories",
		Write_cfg_d_ToDestFile);

	WriteDestFileLn("ExceptionHandling=\"0\"");
	if (gbk_dbg_on == gbo_dbg) {
		WriteDestFileLn("BasicRuntimeChecks=\"3\"");
		if (ide_vers >= 8000) {
			WriteDestFileLn("RuntimeLibrary=\"1\"");
		} else {
			WriteDestFileLn("RuntimeLibrary=\"5\"");
		}
	} else {
		if (ide_vers >= 8000) {
			WriteDestFileLn("RuntimeLibrary=\"0\"");
		} else {
			WriteDestFileLn("RuntimeLibrary=\"4\"");
		}
	}
	if (ide_vers < 8000) {
		WriteDestFileLn("BufferSecurityCheck=\"false\"");
			/* perhaps later versions also */
			/* maybe this should be an option set in SPBASDEF */
	}
	WriteDestFileLn("EnableFunctionLevelLinking=\"true\"");
	WriteDestFileLn("UsePrecompiledHeader=\"0\"");
	WriteDestFileLn("WarningLevel=\"4\"");
	if (ide_vers < 9000) {
		WriteDestFileLn("Detect64BitPortabilityProblems=\"true\"");
	}
	if (gbk_dbg_on == gbo_dbg) {
		WriteDestFileLn("DebugInformationFormat=\"4\"");
	} else {
		WriteDestFileLn("DebugInformationFormat=\"0\"");
	}
	WriteDestFileLn("CompileAs=\"0\"");
}

LOCALPROC WriteMSVCResourceCompilerToolConfig(void)
{
	WriteXMLQuotedProp("AdditionalIncludeDirectories",
		Write_src_d_ToDestFile);
}

LOCALPROC WriteMSVCLinkerToolConfig(void)
{
	WriteDestFileLn("AdditionalDependencies=\"winmm.lib\"");
	WriteXMLQuotedProp("OutputFile", WriteAppNamePath);
	if (gbk_dbg_on == gbo_dbg) {
		WriteDestFileLn("LinkIncremental=\"2\"");
	} else {
		WriteDestFileLn("LinkIncremental=\"1\"");
	}
	if (ide_vers >= 8000) {
		WriteDestFileLn("GenerateManifest=\"false\"");
	}
	if (gbk_dbg_on == gbo_dbg) {
		WriteDestFileLn("GenerateDebugInformation=\"true\"");
	} else {
		WriteDestFileLn("GenerateDebugInformation=\"false\"");
	}
	WriteDestFileLn("SubSystem=\"2\"");
	if (gbk_dbg_on != gbo_dbg) {
		WriteDestFileLn("OptimizeReferences=\"2\"");
		WriteDestFileLn("EnableCOMDATFolding=\"2\"");
	}
	if (ide_vers >= 9000) {
		WriteDestFileLn("RandomizedBaseAddress=\"1\"");
		WriteDestFileLn("DataExecutionPrevention=\"0\"");
	}
	if (gbk_targ_wx64 == cur_targ) {
		WriteDestFileLn("TargetMachine=\"17\"");
	} else {
		WriteDestFileLn("TargetMachine=\"1\"");
	}
}

LOCALPROC WriteMSVCXMLConfigurationBody(void)
{
	WriteMSVCToolConfig("VCPreBuildEventTool", NULL);
	WriteMSVCToolConfig("VCCustomBuildTool", NULL);
	if (ide_vers >= 7100) {
		WriteMSVCToolConfig("VCXMLDataGeneratorTool", NULL);
	}
	WriteMSVCToolConfig("VCWebServiceProxyGeneratorTool", NULL);
	WriteMSVCToolConfig("VCMIDLTool", NULL);
	WriteMSVCToolConfig("VCCLCompilerTool",
		WriteMSVCCompilerToolConfig);
	if (ide_vers >= 8000) {
		WriteMSVCToolConfig("VCManagedResourceCompilerTool", NULL);
	}
	WriteMSVCToolConfig("VCResourceCompilerTool",
		WriteMSVCResourceCompilerToolConfig);
	WriteMSVCToolConfig("VCPreLinkEventTool", NULL);
	WriteMSVCToolConfig("VCLinkerTool", WriteMSVCLinkerToolConfig);
	if (ide_vers >= 8000) {
		WriteMSVCToolConfig("VCALinkTool", NULL);
		WriteMSVCToolConfig("VCManifestTool", NULL);
		WriteMSVCToolConfig("VCXDCMakeTool", NULL);
		WriteMSVCToolConfig("VCBscMakeTool", NULL);
		WriteMSVCToolConfig("VCFxCopTool", NULL);
		WriteMSVCToolConfig("VCAppVerifierTool", NULL);
	} else if (ide_vers >= 7100) {
		WriteMSVCToolConfig("VCManagedWrapperGeneratorTool", NULL);
		WriteMSVCToolConfig("VCAuxiliaryManagedWrapperGeneratorTool",
			NULL);
	}
	if (ide_vers < 9000) {
		WriteMSVCToolConfig("VCWebDeploymentTool", NULL);
	}
	WriteMSVCToolConfig("VCPostBuildEventTool", NULL);
}

LOCALPROC WriteMSVCXMLConfigurations(void)
{
	WriteXMLtaggedLinesWithProps("Configuration",
		WriteMSVCXMLConfigurationProps,
		WriteMSVCXMLConfigurationBody);
}

LOCALPROC WriteMSVCXMLSourceFilesProps(void)
{
	WriteDestFileLn("Name=\"Source Files\"");
	WriteBgnDestFileLn();
	WriteCStrToDestFile("Filter=\"cpp;c");
	if (ide_vers >= 8000) {
		WriteCStrToDestFile(";cc");
	}
	WriteCStrToDestFile(";cxx;def;odl;idl;hpj;bat;asm");
	if (ide_vers >= 7100) {
		WriteCStrToDestFile(";asmx");
	}
	WriteCStrToDestFile("\"");
	WriteEndDestFileLn();
	if (ide_vers >= 7100) {
		WriteDestFileLn(
			"UniqueIdentifier=\"{"
			"00020000-0000-0000-0000-000000000000}\"");
	}
}

LOCALPROC DoMSVCXMLAddFile(MyProc p)
{
	WriteDestFileLn("<File");
	++DestFileIndent;
		WriteXMLQuotedProp("RelativePath", p);
		WriteDestFileLn(">");
	--DestFileIndent;
	WriteDestFileLn("</File>");
}

LOCALPROC DoSrcFileMSVCXMLAddFile(void)
{
	DoMSVCXMLAddFile(WriteSrcFileFilePath);
}

LOCALPROC WriteMSVCXMLSourceFilesBody(void)
{
	DoAllSrcFilesWithSetup(DoSrcFileMSVCXMLAddFile);
}

LOCALPROC WriteMSVCXMLHeaderFilesProps(void)
{
	WriteDestFileLn("Name=\"Header Files\"");
	WriteBgnDestFileLn();
	WriteCStrToDestFile("Filter=\"h;hpp;hxx;hm;inl;inc");
	if (ide_vers >= 7100) {
		WriteCStrToDestFile(";xsd");
	}
	WriteCStrToDestFile("\"");
	WriteEndDestFileLn();
	if (ide_vers >= 7100) {
		WriteDestFileLn(
			"UniqueIdentifier=\"{"
			"00030000-0000-0000-0000-000000000000}\"");
	}
}

LOCALPROC DoSrcFileMSVCXMLAddHeader(void)
{
	if ((DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader) == 0) {
		DoMSVCXMLAddFile(WriteSrcFileHeaderPath);
	}
}

LOCALPROC WriteMSVCXMLHeaderFilesBody(void)
{
	DoAllSrcFilesWithSetup(DoSrcFileMSVCXMLAddHeader);
}

LOCALPROC WriteMSVCXMLResourceFilesProps(void)
{
	WriteDestFileLn("Name=\"Resource Files\"");
	WriteBgnDestFileLn();
	WriteCStrToDestFile(
		"Filter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;"
		"jpeg;jpe");
	if (ide_vers >= 7100) {
		WriteCStrToDestFile(";resx");
	}
	if (ide_vers >= 8000) {
		WriteCStrToDestFile(";tiff;tif;png;wav");
	}
	WriteCStrToDestFile("\"");
	WriteEndDestFileLn();
	if (ide_vers >= 7100) {
		WriteDestFileLn(
			"UniqueIdentifier=\"{"
			"00040000-0000-0000-0000-000000000000}\"");
	}
}

LOCALPROC WriteDocTypeMSVCXMLresource(void)
{
	DoMSVCXMLAddFile(WriteDocTypeIconFilePath);
}

LOCALPROC WriteMSVCXMLResourceFilesBody(void)
{
	DoMSVCXMLAddFile(WriteMainRsrcSrcPath);
	DoAllDocTypesWithSetup(WriteDocTypeMSVCXMLresource);
}

LOCALPROC WriteMSVCXMLIncludeFilesProps(void)
{
	WriteDestFileLn("Name=\"Include Files\"");
	WriteDestFileLn("Filter=\"h;hpp;hxx;hm;inl;inc;xsd\"");
}

LOCALPROC DoMSVCXMLAddAddExtraHeader(void)
{
	DoMSVCXMLAddFile(WriteExtraHeaderFilePath);
}

LOCALPROC WriteMSVCXMLIncludeFilesBody(void)
{
	DoAllExtraHeaders2WithSetup(DoMSVCXMLAddAddExtraHeader);
}

LOCALPROC WriteMSVCXMLFiles(void)
{
	WriteXMLtaggedLinesWithProps("Filter",
		WriteMSVCXMLSourceFilesProps,
		WriteMSVCXMLSourceFilesBody);
	WriteXMLtaggedLinesWithProps("Filter",
		WriteMSVCXMLHeaderFilesProps,
		WriteMSVCXMLHeaderFilesBody);
	WriteXMLtaggedLinesWithProps("Filter",
		WriteMSVCXMLResourceFilesProps,
		WriteMSVCXMLResourceFilesBody);
	WriteXMLtaggedLinesWithProps("Filter",
		WriteMSVCXMLIncludeFilesProps,
		WriteMSVCXMLIncludeFilesBody);
}

LOCALPROC WriteMSVCXMLSolutionFile(void)
{
	if (ide_vers >= 8000) {
		WriteDestFileLn("\357\273\277"); /* UTF-8 byte-order mark */
	}

	if (ide_vers >= 11000) {
		WriteDestFileLn(
			"Microsoft Visual Studio Solution File,"
			" Format Version 12.00");
		if (ide_vers >= 15000) {
			WriteDestFileLn("# Visual Studio 15");
		} else if (ide_vers >= 14000) {
			WriteDestFileLn("# Visual Studio 14");
		} else if (ide_vers >= 12000) {
			WriteDestFileLn("# Visual Studio 2013");
		} else {
			WriteDestFileLn("# Visual Studio 2012");
		}
	} else if (ide_vers >= 10000) {
		WriteDestFileLn(
			"Microsoft Visual Studio Solution File,"
			" Format Version 11.00");
		WriteDestFileLn("# Visual Studio 2010");
	} else if (ide_vers >= 9000) {
		WriteDestFileLn(
			"Microsoft Visual Studio Solution File,"
			" Format Version 10.00");
		/* WriteDestFileLn("# Visual C++ Express 2008"); */
		WriteDestFileLn("# Visual Studio 2008");
	} else if (ide_vers >= 8000) {
		WriteDestFileLn(
			"Microsoft Visual Studio Solution File,"
			" Format Version 9.00");
		/* WriteDestFileLn("# Visual C++ Express 2005"); */
		WriteDestFileLn("# Visual Studio 2005");
	} else if (ide_vers >= 7100) {
		WriteDestFileLn(
			"Microsoft Visual Studio Solution File,"
			" Format Version 8.00");
	} else {
		WriteDestFileLn(
			"Microsoft Visual Studio Solution File,"
			" Format Version 7.00");
	}
	WriteBgnDestFileLn();
	WriteCStrToDestFile(
		"Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"");
	WriteStrAppAbbrev();
	WriteCStrToDestFile("\", \"");
	WriteStrAppAbbrev();
	if (ide_vers >= 10000) {
		WriteCStrToDestFile(".vcxproj");
	} else {
		WriteCStrToDestFile(".vcproj");
	}
	WriteCStrToDestFile(
		"\", \"{00010000-0000-0000-0000-000000000000}\"");
	WriteEndDestFileLn();
	if ((ide_vers >= 7100) && (ide_vers < 8000)) {
		++DestFileIndent;
			WriteDestFileLn(
				"ProjectSection(ProjectDependencies)"" = postProject");
			WriteDestFileLn("EndProjectSection");
		--DestFileIndent;
	}
	WriteDestFileLn("EndProject");
	WriteDestFileLn("Global");
	++DestFileIndent;
		if (ide_vers >= 8000) {
			WriteDestFileLn(
				"GlobalSection(SolutionConfigurationPlatforms)"
				" = preSolution");
			++DestFileIndent;
				WriteBgnDestFileLn();
				WriteMSVCXMLConfigurationName();
				WriteCStrToDestFile(" = ");
				WriteMSVCXMLConfigurationName();
				WriteEndDestFileLn();
			--DestFileIndent;
			WriteDestFileLn("EndGlobalSection");
			WriteDestFileLn(
				"GlobalSection(ProjectConfigurationPlatforms)"
				" = postSolution");
			++DestFileIndent;
				WriteBgnDestFileLn();
				WriteCStrToDestFile(
					"{00010000-0000-0000-0000-000000000000}.");
				WriteMSVCXMLConfigurationName();
				WriteCStrToDestFile(".ActiveCfg = ");
				WriteMSVCXMLConfigurationName();
				WriteEndDestFileLn();
				WriteBgnDestFileLn();
				WriteCStrToDestFile(
					"{00010000-0000-0000-0000-000000000000}.");
				WriteMSVCXMLConfigurationName();
				WriteCStrToDestFile(".Build.0 = ");
				WriteMSVCXMLConfigurationName();
				WriteEndDestFileLn();
			--DestFileIndent;
			WriteDestFileLn("EndGlobalSection");
			WriteDestFileLn(
				"GlobalSection(SolutionProperties) = preSolution");
			++DestFileIndent;
				WriteDestFileLn("HideSolutionNode = FALSE");
			--DestFileIndent;
			WriteDestFileLn("EndGlobalSection");
		} else {
			WriteDestFileLn(
				"GlobalSection(SolutionConfiguration) = preSolution");
			++DestFileIndent;
				WriteBgnDestFileLn();
				if (ide_vers >= 7100) {
					WriteMSVCdbgLevelName();
				} else {
					WriteCStrToDestFile("ConfigName.0");
				}
				WriteCStrToDestFile(" = ");
				WriteMSVCdbgLevelName();
				WriteEndDestFileLn();
			--DestFileIndent;
			WriteDestFileLn("EndGlobalSection");
			if (ide_vers < 7100) {
				WriteCStrToDestFile(
					"GlobalSection(ProjectDependencies)"
					" = postSolution");
				WriteCStrToDestFile("EndGlobalSection");
			}
			WriteDestFileLn(
				"GlobalSection(ProjectConfiguration) = postSolution");
			++DestFileIndent;
				WriteBgnDestFileLn();
				WriteCStrToDestFile(
					"{00010000-0000-0000-0000-000000000000}.");
				WriteMSVCdbgLevelName();
				WriteCStrToDestFile(".ActiveCfg = ");
				WriteMSVCXMLConfigurationName();
				WriteEndDestFileLn();

				WriteBgnDestFileLn();
				WriteCStrToDestFile(
					"{00010000-0000-0000-0000-000000000000}.");
				WriteMSVCdbgLevelName();
				WriteCStrToDestFile(".Build.0 = ");
				WriteMSVCXMLConfigurationName();
				WriteEndDestFileLn();
			--DestFileIndent;
			WriteDestFileLn("EndGlobalSection");
			WriteDestFileLn(
				"GlobalSection(ExtensibilityGlobals) = postSolution");
			WriteDestFileLn("EndGlobalSection");
			WriteDestFileLn(
				"GlobalSection(ExtensibilityAddIns) = postSolution");
			WriteDestFileLn("EndGlobalSection");
		}
	--DestFileIndent;
	WriteDestFileLn("EndGlobal");
}

LOCALPROC WriteMSVCXMLProjectProps(void)
{
	WriteDestFileLn("ProjectType=\"Visual C++\"");
	if (ide_vers >= 9000) {
		WriteDestFileLn("Version=\"9.00\"");
	} else if (ide_vers >= 8000) {
		WriteDestFileLn("Version=\"8.00\"");
	} else if (ide_vers >= 7100) {
		WriteDestFileLn("Version=\"7.10\"");
	} else {
		WriteDestFileLn("Version=\"7.00\"");
	}
	WriteXMLQuotedProp("Name", WriteStrAppAbbrev);
	WriteDestFileLn(
		"ProjectGUID=\"{00010000-0000-0000-0000-000000000000}\"");
	if (ide_vers >= 8000) {
		WriteXMLQuotedProp("RootNamespace", WriteStrAppAbbrev);
	}
	WriteDestFileLn("Keyword=\"Win32Proj\"");
	if (ide_vers >= 9000) {
		WriteDestFileLn("TargetFrameworkVersion=\"131072\"");
	}
}

LOCALPROC WriteMSVCXMLProjectBody(void)
{
	WriteXMLtaggedLines("Platforms", WriteMSVCXMLPlatforms);
	if (ide_vers >= 8000) {
		WriteXMLtaggedLines("ToolFiles", NULL);
	}
	WriteXMLtaggedLines("Configurations", WriteMSVCXMLConfigurations);
	if (ide_vers >= 7100) {
		WriteXMLtaggedLines("References", NULL);
	}
	WriteXMLtaggedLines("Files", WriteMSVCXMLFiles);
	WriteXMLtaggedLines("Globals", NULL);
}

LOCALPROC WriteMSVCXMLProjectFile(void)
{
	WriteDestFileLn(
		"<?xml version=\"1.0\" encoding=\"Windows-1252\"?>");
	WriteXMLtaggedLinesWithProps("VisualStudioProject",
		WriteMSVCXMLProjectProps,
		WriteMSVCXMLProjectBody);
}

LOCALPROC WriteMSVCXMLSpecificFiles(void)
{
	WriteADstFile1("my_project_d",
		vStrAppAbbrev, ".sln", "Solutions file",
		WriteMSVCXMLSolutionFile);
	WriteADstFile1("my_project_d",
		vStrAppAbbrev, ".vcproj", "Project file",
		WriteMSVCXMLProjectFile);
}

LOCALPROC DoSrcFileNMakeAddObjFile(void)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("\"");
	WriteSrcFileObjPath();
	WriteCStrToDestFile("\" \\");
	WriteEndDestFileLn();
}

LOCALPROC WriteMainRsrcObjMSCbuild(void)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("rc.exe ");
	WriteRCexeFlags();
	WriteCStrToDestFile(" /fo\"");
	WriteMainRsrcObjPath();
	WriteCStrToDestFile("\"");
	WriteCStrToDestFile(" /i");
	WriteQuoteToDestFile();
	Write_src_d_ToDestFile();
	WriteQuoteToDestFile();
	WriteCStrToDestFile(" \"");
	WriteMainRsrcSrcPath();
	WriteCStrToDestFile("\"");
	WriteEndDestFileLn();
}

LOCALPROC WriteNMakeMakeFile(void)
{
	blnr WinCE = (gbk_targfam_wnce == gbo_targfam);

	WriteDestFileLn("# make file generated by gryphel build system");
	WriteBlankLineToDestFile();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("mk_COptions=");
	WriteCLexeFlags();
	WriteCStrToDestFile(" /I\"");
	Write_cfg_d_ToDestFile();
	WriteCStrToDestFile("\\\\\"");
		/* yes, a double backslash is what is needed */
	WriteCStrToDestFile(" /Fo\"");
	Write_obj_d_ToDestFile();
	WriteCStrToDestFile("\\\\\"");
	WriteCStrToDestFile(" /Fd\"");
	Write_obj_d_ToDestFile();
	WriteCStrToDestFile("\\\\\"");
	WriteEndDestFileLn();

	WriteBlankLineToDestFile();
	WriteBlankLineToDestFile();
	WriteBgnDestFileLn();
	WriteCStrToDestFile("TheDefaultOutput :");
	WriteMakeDependFile(WriteAppNamePath);
	WriteEndDestFileLn();
	WriteBlankLineToDestFile();
	WriteBlankLineToDestFile();
	DoAllSrcFilesWithSetup(DoSrcFileMakeCompile);
	WriteBlankLineToDestFile();
	WriteDestFileLn("ObjFiles= \\");
	++DestFileIndent;
		DoAllSrcFilesSortWithSetup(DoSrcFileNMakeAddObjFile);
	--DestFileIndent;
	WriteBlankLineToDestFile();
	WriteBlankLineToDestFile();
	WriteBlankLineToDestFile();
	WriteMakeRule(WriteMainRsrcObjPath,
		WriteMainRsrcObjMSCdeps, WriteMainRsrcObjMSCbuild);
	WriteBlankLineToDestFile();
	WriteBlankLineToDestFile();
	WriteBgnDestFileLn();
	WriteCStrToDestFile("\"");
	WriteAppNamePath();
	WriteCStrToDestFile("\" : $(ObjFiles) \"");
	WriteMainRsrcObjPath();
	WriteCStrToDestFile("\"");
	WriteEndDestFileLn();
	++DestFileIndent;
		WriteDestFileLn("link.exe @<<");
		++DestFileIndent;
			WriteBgnDestFileLn();
			WriteCStrToDestFile("/out:\"");
			WriteAppNamePath();
			WriteCStrToDestFile("\"");
			WriteEndDestFileLn();
			WriteBgnDestFileLn();
			WriteCStrToDestFile("/nologo");
			if (WinCE) {
				WriteCStrToDestFile(" /subsystem:windowsce,4.20");
			} else {
				WriteCStrToDestFile(" /subsystem:windows");
			}
			if (gbk_dbg_on == gbo_dbg) {
				WriteCStrToDestFile(" /debug");
			} else {
				WriteCStrToDestFile(" /incremental:no");
			}
			WriteCStrToDestFile(" /opt:ref /opt:icf");
				/*
					more or less default, but putting this in
					makes difference at least in visual studio 2005
				*/
			WriteEndDestFileLn();
			WriteBgnDestFileLn();
			WriteCStrToDestFile("/pdb:\"");
			Write_obj_d_ToDestFile();
			WriteCStrToDestFile("\\");
			WriteStrAppAbbrev();
			WriteCStrToDestFile(".pdb\"");
			WriteCStrToDestFile(" /machine:");
			if (gbk_cpufam_arm == gbo_cpufam) {
				WriteCStrToDestFile("ARM");
			} else if (gbk_cpufam_x64 == gbo_cpufam) {
				if (ide_vers >= 7100) {
					WriteCStrToDestFile("X64");
				} else {
					WriteCStrToDestFile("AMD64");
				}
			} else {
				if (ide_vers >= 7100) {
					WriteCStrToDestFile("X86");
				} else {
					WriteCStrToDestFile("I386");
				}
			}
			WriteEndDestFileLn();
			if (WinCE) {
				WriteDestFileLn("/base:\"0x00010000\"");
				WriteDestFileLn("/stack:0x10000,0x1000");
				WriteDestFileLn("/entry:WinMainCRTStartup");
				WriteDestFileLn("/align:4096");
			}
			if (ide_vers >= 9000) {
				WriteDestFileLn("/dynamicbase:no");
					/* smaller exe, maybe not as secure */
			}
			if (WinCE) {
				WriteDestFileLn("commctrl.lib");
				WriteDestFileLn("coredll.lib");
				WriteDestFileLn("aygshell.lib");
				WriteDestFileLn("Mmtimer.lib");
				WriteDestFileLn("/nodefaultlib:libc.lib");
				WriteDestFileLn("/nodefaultlib:libcd.lib");
				WriteDestFileLn("/nodefaultlib:libcmt.lib");
				WriteDestFileLn("/nodefaultlib:libcmtd.lib");
				WriteDestFileLn("/nodefaultlib:msvcrt.lib");
				WriteDestFileLn("/nodefaultlib:msvcrtd.lib");
			} else {
				WriteDestFileLn("winmm.lib");
				WriteDestFileLn("kernel32.lib");
				WriteDestFileLn("user32.lib");
				WriteDestFileLn("gdi32.lib");
				WriteDestFileLn("winspool.lib");
				WriteDestFileLn("comdlg32.lib");
				WriteDestFileLn("advapi32.lib");
				WriteDestFileLn("shell32.lib");
				WriteDestFileLn("ole32.lib");
				WriteDestFileLn("oleaut32.lib");
				WriteDestFileLn("uuid.lib");
				if ((gbk_cpufam_x64 == gbo_cpufam)
					&& (ide_vers >= 7000)
					&& (ide_vers < 7100))
				{
					WriteDestFileLn("bufferoverflowU.lib");
				}
			}
			WriteBgnDestFileLn();
			WriteCStrToDestFile("\"");
			WriteMainRsrcObjPath();
			WriteCStrToDestFile("\"");
			WriteEndDestFileLn();
			WriteDestFileLn("$(ObjFiles)");
		--DestFileIndent;
	--DestFileIndent;
	WriteDestFileLn("<<");
	WriteBlankLineToDestFile();


	WriteBlankLineToDestFile();
	WriteDestFileLn("CLEAN :");
	++DestFileIndent;
		DoAllSrcFilesStandardErase();
		WriteRmFile(WriteMainRsrcObjPath);
		WriteRmFile(WriteAppNamePath);
	--DestFileIndent;
}

LOCALPROC WriteNMakeSpecificFiles(void)
{
	WriteADstFile1("my_project_d",
		"MAKEFILE", "", "Make file",
		WriteNMakeMakeFile);
}

LOCALPROC DoSrcFileMSVC10XMLAddFile(void)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("<ClCompile Include=\"");
	WriteSrcFileFilePath();
	WriteCStrToDestFile("\" />");
	WriteEndDestFileLn();
}

LOCALPROC DoSrcFileMSVC10XMLAddHeaderFile(void)
{
	if ((DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader) == 0) {
		WriteBgnDestFileLn();
		WriteCStrToDestFile("<ClInclude Include=\"");
		WriteSrcFileHeaderPath();
		WriteCStrToDestFile("\" />");
		WriteEndDestFileLn();
	}
}

LOCALPROC DoMSVC10XMLAddAddExtraHeader(void)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("<ClInclude Include=\"");
	WriteExtraHeaderFilePath();
	WriteCStrToDestFile("\" />");
	WriteEndDestFileLn();
}

LOCALPROC DoMSVC10XMLAddDocType(void)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("<None Include=\"");
	WriteDocTypeIconFilePath();
	WriteCStrToDestFile("\" />");
	WriteEndDestFileLn();
}

LOCALPROC WriteMSVC10OutDir(void)
{
	WriteCStrToDestFile(".\\");
}

LOCALPROC WriteMSVC10IntDir(void)
{
	Write_obj_d_ToDestFile();
	WriteCStrToDestFile("\\");
}

LOCALPROC WriteMSVCXML10ProjectFile(void)
{
	WriteCStrToDestFile("\357\273\277"); /* UTF-8 byte-order mark */
	WriteDestFileLn("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
	WriteBgnDestFileLn();
	WriteCStrToDestFile(
		"<Project DefaultTargets=\"Build\"");
	if (ide_vers >= 15000) {
		WriteCStrToDestFile(
			" ToolsVersion=\"15.0\"");
	} else if (ide_vers >= 14000) {
		WriteCStrToDestFile(
			" ToolsVersion=\"14.0\"");
	} else if (ide_vers >= 12000) {
		WriteCStrToDestFile(
			" ToolsVersion=\"12.0\"");
	} else {
		WriteCStrToDestFile(
			" ToolsVersion=\"4.0\"");
	}
	WriteCStrToDestFile(
		" xmlns="
		"\"http://schemas.microsoft.com/developer/msbuild/2003\">"
		);
	WriteEndDestFileLn();
	++DestFileIndent;
		WriteDestFileLn("<ItemGroup Label=\"ProjectConfigurations\">");
		++DestFileIndent;
			WriteBgnDestFileLn();
			WriteCStrToDestFile("<ProjectConfiguration Include=\"");
			WriteMSVCXMLConfigurationName();
			WriteCStrToDestFile("\">");
			WriteEndDestFileLn();
			++DestFileIndent;
				WriteXMLtagBeginProcValEndLine("Configuration",
					WriteMSVCdbgLevelName);
				WriteXMLtagBeginProcValEndLine("Platform",
					WriteMSVCPlatformName);
			--DestFileIndent;
			WriteDestFileLn("</ProjectConfiguration>");
		--DestFileIndent;
		WriteDestFileLn("</ItemGroup>");

		WriteDestFileLn("<PropertyGroup Label=\"Globals\">");
		++DestFileIndent;
			WriteXMLtagBeginValEndLine("ProjectGuid",
				"{00010000-0000-0000-0000-000000000000}");
			WriteXMLtagBeginValEndLine("Keyword", "Win32Proj");
			WriteXMLtagBeginProcValEndLine("RootNamespace",
				WriteStrAppAbbrev);
			if (ide_vers >= 15000) {
				WriteXMLtagBeginValEndLine(
					"WindowsTargetPlatformVersion", "10.0.14393.0");
			}
		--DestFileIndent;
		WriteDestFileLn("</PropertyGroup>");

		WriteDestFileLn("<Import Project=\""
			"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />");

		WriteBgnDestFileLn();
		WriteCStrToDestFile("<PropertyGroup Condition=\""
			"'$(Configuration)|$(Platform)'=='");
		WriteMSVCXMLConfigurationName();
		WriteCStrToDestFile("'\" Label=\"Configuration\">");
		WriteEndDestFileLn();
		++DestFileIndent;
			WriteXMLtagBeginValEndLine("ConfigurationType",
				"Application");
			if (gbk_dbg_on != gbo_dbg) {
				WriteXMLtagBeginValEndLine("WholeProgramOptimization",
					"false");
			}
			if (ide_vers >= 11000) {
				if (ide_vers >= 14000) {
					WriteXMLtagBeginValEndLine("PlatformToolset",
						"v141");
				} else if (ide_vers >= 14000) {
					WriteXMLtagBeginValEndLine("PlatformToolset",
						"v140");
				} else if (ide_vers >= 12000) {
					WriteXMLtagBeginValEndLine("PlatformToolset",
						"v120");
				} else {
					WriteXMLtagBeginValEndLine("PlatformToolset",
						"v110");
				}
			}
			WriteXMLtagBeginValEndLine("CharacterSet", "MultiByte");
		--DestFileIndent;
		WriteDestFileLn("</PropertyGroup>");

		WriteDestFileLn("<Import Project=\""
			"$(VCTargetsPath)\\Microsoft.Cpp.props\" />");
		WriteDestFileLn("<ImportGroup Label=\"ExtensionSettings\">");
		WriteDestFileLn("</ImportGroup>");

		WriteBgnDestFileLn();
		WriteCStrToDestFile("<ImportGroup");
		WriteCStrToDestFile(" Label=\"PropertySheets\"");
		WriteCStrToDestFile(
			" Condition=\"'$(Configuration)|$(Platform)'=='");
		WriteMSVCXMLConfigurationName();
		WriteCStrToDestFile("'\">");
		WriteEndDestFileLn();
		++DestFileIndent;
			WriteDestFileLn("<Import Project=\""
				"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\""
				" Condition=\"exists('$(UserRootDir)\\"
					"Microsoft.Cpp.$(Platform).user.props')\""
				" Label=\"LocalAppDataPlatform\" />");
		--DestFileIndent;
		WriteDestFileLn("</ImportGroup>");

		WriteDestFileLn("<PropertyGroup Label=\"UserMacros\" />");

		WriteBgnDestFileLn();
		WriteCStrToDestFile("<PropertyGroup");
		WriteCStrToDestFile(
			" Condition=\"'$(Configuration)|$(Platform)'=='");
		WriteMSVCXMLConfigurationName();
		WriteCStrToDestFile("'\"");
		WriteCStrToDestFile(">");
		WriteEndDestFileLn();
		++DestFileIndent;
			WriteXMLtagBeginProcValEndLine("OutDir", WriteMSVC10OutDir);
			WriteXMLtagBeginProcValEndLine("IntDir", WriteMSVC10IntDir);

			if (gbk_dbg_on == gbo_dbg) {
				WriteXMLtagBeginValEndLine("LinkIncremental", "true");
			} else {
				WriteXMLtagBeginValEndLine("LinkIncremental", "false");
			}

			WriteXMLtagBeginValEndLine("GenerateManifest", "false");
		WriteEndXMLtagLine("PropertyGroup");

		WriteBgnDestFileLn();
		WriteCStrToDestFile("<ItemDefinitionGroup"
			" Condition=\"'$(Configuration)|$(Platform)'=='");
		WriteMSVCXMLConfigurationName();
		WriteCStrToDestFile("'\">");
		WriteEndDestFileLn();
		++DestFileIndent;
			WriteBeginXMLtagLine("ClCompile");
				WriteXMLtagBeginValEndLine("WarningLevel", "Level4");
				WriteXMLtagBeginValEndLine("PrecompiledHeader",
					"NotUsing");

#if 0
				if (gbk_dbg_on != gbo_dbg) {
					WriteXMLtagBeginValEndLine("Optimization",
						"MinSpace");
					WriteXMLtagBeginValEndLine("FavorSizeOrSpeed",
						"Neither");
					WriteXMLtagBeginValEndLine(
						"WholeProgramOptimization", "false");
					WriteXMLtagBeginValEndLine("OmitFramePointers",
						"true");
				} else
#endif
				{
					/* Maximize chance of correct compile */
					WriteXMLtagBeginValEndLine("Optimization",
						"Disabled");
				}

				if (gbk_dbg_on == gbo_dbg) {
					WriteDestFileLn("<PreprocessorDefinitions>"
						"WIN32;_DEBUG;_WINDOWS;"
						"%(PreprocessorDefinitions)"
						"</PreprocessorDefinitions>");
					if (gbk_targ_wx64 != cur_targ) {
						WriteXMLtagBeginValEndLine("MinimalRebuild",
							"true");
					}
					WriteXMLtagBeginValEndLine("BasicRuntimeChecks",
						"EnableFastChecks");
					WriteXMLtagBeginValEndLine("RuntimeLibrary",
						"MultiThreadedDebug");
					if (gbk_targ_wx64 == cur_targ) {
						WriteXMLtagBeginValEndLine(
							"DebugInformationFormat",
							"ProgramDatabase");
					} else {
						WriteXMLtagBeginValEndLine(
							"DebugInformationFormat",
							"EditAndContinue");
					}
				} else {
					WriteDestFileLn("<PreprocessorDefinitions>"
						"WIN32;NDEBUG;_WINDOWS;"
						"%(PreprocessorDefinitions)"
						"</PreprocessorDefinitions>");
					WriteXMLtagBeginValEndLine("StringPooling", "true");
					WriteXMLtagBeginValEndLine("RuntimeLibrary",
						"MultiThreaded");
						/*
							MultiThreadedDLL makes smaller exe,
							maybe more compatibility issues
						*/
				}
				WriteBgnDestFileLn();
				WriteXMLtagBegin("AdditionalIncludeDirectories");
				Write_cfg_d_ToDestFile();
				WriteCStrToDestFile(";%(AdditionalIncludeDirectories)");
				WriteXMLtagEnd("AdditionalIncludeDirectories");
				WriteEndDestFileLn();

				WriteXMLtagBeginValEndLine("FunctionLevelLinking",
					"true");
				WriteXMLtagBeginValEndLine("ExceptionHandling",
					"false");
			WriteEndXMLtagLine("ClCompile");

			WriteBeginXMLtagLine("ResourceCompile");
				WriteBgnDestFileLn();
				WriteXMLtagBegin("AdditionalIncludeDirectories");
				Write_src_d_ToDestFile();
				WriteCStrToDestFile(";%(AdditionalIncludeDirectories)");
				WriteXMLtagEnd("AdditionalIncludeDirectories");
				WriteEndDestFileLn();
			WriteEndXMLtagLine("ResourceCompile");

			WriteBeginXMLtagLine("Link");
				WriteXMLtagBeginValEndLine("SubSystem", "Windows");
				if (gbk_dbg_on == gbo_dbg) {
					WriteXMLtagBeginValEndLine(
						"GenerateDebugInformation", "true");
				} else {
					WriteXMLtagBeginValEndLine(
						"GenerateDebugInformation", "false");
				}
				if (gbk_dbg_on != gbo_dbg) {
					WriteXMLtagBeginValEndLine("EnableCOMDATFolding",
						"true");
					WriteXMLtagBeginValEndLine("OptimizeReferences",
						"true");
				}
				WriteDestFileLn("<AdditionalDependencies>"
					"winmm.lib;%(AdditionalDependencies)"
					"</AdditionalDependencies>");
				WriteXMLtagBeginProcValEndLine("OutputFile",
					WriteAppNamePath);
				WriteXMLtagBeginValEndLine("RandomizedBaseAddress",
					"false");
			WriteEndXMLtagLine("Link");
		--DestFileIndent;
		WriteDestFileLn("</ItemDefinitionGroup>");

		WriteBeginXMLtagLine("ItemGroup");
			DoAllDocTypesWithSetup(DoMSVC10XMLAddDocType);
		WriteEndXMLtagLine("ItemGroup");

		WriteBeginXMLtagLine("ItemGroup");
			DoAllSrcFilesWithSetup(
				DoSrcFileMSVC10XMLAddHeaderFile);
			DoAllExtraHeaders2WithSetup(
				DoMSVC10XMLAddAddExtraHeader);
		WriteEndXMLtagLine("ItemGroup");

		WriteBeginXMLtagLine("ItemGroup");
			DoAllSrcFilesWithSetup(
				DoSrcFileMSVC10XMLAddFile);
		WriteEndXMLtagLine("ItemGroup");

		WriteBeginXMLtagLine("ItemGroup");
			WriteBgnDestFileLn();
			WriteCStrToDestFile("<ResourceCompile Include=\"");
			WriteMainRsrcSrcPath();
			WriteCStrToDestFile("\" />");
			WriteEndDestFileLn();
		WriteEndXMLtagLine("ItemGroup");

		WriteDestFileLn("<Import Project=\""
			"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />");
		WriteDestFileLn("<ImportGroup Label=\"ExtensionTargets\">");
		WriteDestFileLn("</ImportGroup>");
	--DestFileIndent;
	WriteDestFileLn("</Project>");
}

LOCALPROC DoSrcFileMSVC10XMLAddClCompile(void)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("<ClCompile Include=\"");
	WriteSrcFileFilePath();
	WriteCStrToDestFile("\">");
	WriteEndDestFileLn();
	++DestFileIndent;

		WriteDestFileLn("<Filter>Source Files</Filter>");

	--DestFileIndent;
	WriteDestFileLn("</ClCompile>");
}

LOCALPROC DoSrcFileMSVC10XMLAddClInclude(void)
{
	if ((DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader) == 0) {
		WriteBgnDestFileLn();
		WriteCStrToDestFile("<ClInclude Include=\"");
		WriteSrcFileHeaderPath();
		WriteCStrToDestFile("\">");
		WriteEndDestFileLn();
		++DestFileIndent;

			WriteDestFileLn("<Filter>Header Files</Filter>");

		--DestFileIndent;
		WriteDestFileLn("</ClInclude>");
	}
}

LOCALPROC DoExtraHeaderMSVC10XMLAddClInclude(void)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("<ClInclude Include=\"");
	WriteExtraHeaderFilePath();
	WriteCStrToDestFile("\">");
	WriteEndDestFileLn();
	++DestFileIndent;

		WriteDestFileLn("<Filter>Include Files</Filter>");

	--DestFileIndent;
	WriteDestFileLn("</ClInclude>");
}

LOCALPROC WriteDocTypeMSVC10resource(void)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile("<None Include=\"");
	WriteDocTypeIconFilePath();
	WriteCStrToDestFile("\">");
	WriteEndDestFileLn();
	++DestFileIndent;
		WriteDestFileLn("<Filter>Resource Files</Filter>");
	--DestFileIndent;
	WriteDestFileLn("</None>");
}

LOCALPROC WriteMSVC10XMLProjectFiltersProps(void)
{
	WriteCStrToDestFile(" ToolsVersion=\"4.0\" xmlns="
		"\"http://schemas.microsoft.com/developer/msbuild/2003\"");
}

LOCALPROC WriteMSVC10XMLProjectFiltersBodyFilters(void)
{
	WriteDestFileLn("<Filter Include=\"Header Files\">");
	++DestFileIndent;
		WriteDestFileLn("<UniqueIdentifier>"
			"{00030000-0000-0000-0000-000000000000}"
			"</UniqueIdentifier>");
		WriteDestFileLn("<Extensions>"
			"h;hpp;hxx;hm;inl;inc;xsd"
			"</Extensions>");
	--DestFileIndent;
	WriteDestFileLn("</Filter>");

	WriteDestFileLn("<Filter Include=\"Resource Files\">");
	++DestFileIndent;
		WriteDestFileLn("<UniqueIdentifier>"
			"{00040000-0000-0000-0000-000000000000}"
			"</UniqueIdentifier>");
		WriteDestFileLn("<Extensions>"
			"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;"
			"resx;tiff;tif;png;wav"
			"</Extensions>");
	--DestFileIndent;
	WriteDestFileLn("</Filter>");

	WriteDestFileLn("<Filter Include=\"Include Files\">");
	++DestFileIndent;
		WriteDestFileLn("<UniqueIdentifier>"
			"{00050000-0000-0000-0000-000000000000}"
			"</UniqueIdentifier>");
		WriteDestFileLn("<Extensions>"
			"h;hpp;hxx;hm;inl;inc;xsd"
			"</Extensions>");
	--DestFileIndent;
	WriteDestFileLn("</Filter>");

	WriteDestFileLn("<Filter Include=\"Source Files\">");
	++DestFileIndent;
		WriteDestFileLn("<UniqueIdentifier>"
			"{00020000-0000-0000-0000-000000000000}"
			"</UniqueIdentifier>");
		WriteDestFileLn("<Extensions>"
			"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
			"</Extensions>");
	--DestFileIndent;
	WriteDestFileLn("</Filter>");
}

LOCALPROC WriteMSVC10XMLProjectFiltersBodyClCompiles(void)
{
	DoAllSrcFilesWithSetup(
		DoSrcFileMSVC10XMLAddClCompile);
}

LOCALPROC WriteMSVC10XMLProjectFiltersBodyClIncludes(void)
{
	DoAllSrcFilesWithSetup(
		DoSrcFileMSVC10XMLAddClInclude);
	DoAllExtraHeaders2WithSetup(
		DoExtraHeaderMSVC10XMLAddClInclude);
}

LOCALPROC WriteMSVC10XMLProjectFiltersBodyResourceCompileProp(void)
{
	WriteCStrToDestFile(" Include=\"");
	WriteMainRsrcSrcPath();
	WriteCStrToDestFile("\"");
}

LOCALPROC WriteMSVC10XMLProjectFiltersBodyResourceCompileBody(void)
{
	WriteXMLtagBeginValEndLine("Filter", "Resource Files");
}

LOCALPROC WriteMSVC10XMLProjectFiltersBodyResourceCompiles(void)
{
	WriteXMLtaggedLinesWith1LnProps("ResourceCompile",
		WriteMSVC10XMLProjectFiltersBodyResourceCompileProp,
		WriteMSVC10XMLProjectFiltersBodyResourceCompileBody);
}

LOCALPROC WriteMSVC10XMLProjectFiltersBodyResourceFiles(void)
{
	DoAllDocTypesWithSetup(WriteDocTypeMSVC10resource);
}

LOCALPROC WriteMSVC10XMLProjectFiltersItemGroup(MyProc p)
{
	WriteXMLtaggedLines("ItemGroup", p);
}

LOCALPROC WriteMSVC10XMLProjectFiltersBody(void)
{
	WriteMSVC10XMLProjectFiltersItemGroup(
		WriteMSVC10XMLProjectFiltersBodyFilters);
	WriteMSVC10XMLProjectFiltersItemGroup(
		WriteMSVC10XMLProjectFiltersBodyClCompiles);
	WriteMSVC10XMLProjectFiltersItemGroup(
		WriteMSVC10XMLProjectFiltersBodyClIncludes);
	WriteMSVC10XMLProjectFiltersItemGroup(
		WriteMSVC10XMLProjectFiltersBodyResourceCompiles);
	WriteMSVC10XMLProjectFiltersItemGroup(
		WriteMSVC10XMLProjectFiltersBodyResourceFiles);
}

LOCALPROC WriteMSVCXML10ProjectFiltersFile(void)
{
	WriteCStrToDestFile("\357\273\277"); /* UTF-8 byte-order mark */
	WriteDestFileLn("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
	WriteXMLtaggedLinesWith1LnProps("Project",
		WriteMSVC10XMLProjectFiltersProps,
		WriteMSVC10XMLProjectFiltersBody);
}

LOCALPROC WriteMSVCXML10SpecificFiles(void)
{
	WriteADstFile1("my_project_d",
		vStrAppAbbrev, ".sln", "Solutions file",
		WriteMSVCXMLSolutionFile);
	WriteADstFile1("my_project_d",
		vStrAppAbbrev, ".vcxproj", "Project file",
		WriteMSVCXML10ProjectFile);
	WriteADstFile1("my_project_d",
		vStrAppAbbrev, ".vcxproj.filters", "Project Filters file",
		WriteMSVCXML10ProjectFiltersFile);
}

LOCALPROC WriteMsvSpecificFiles(void)
{
	if (UseCmndLine) {
		WriteNMakeSpecificFiles();
	} else {
		if (ide_vers >= 10000) {
			WriteMSVCXML10SpecificFiles();
		} else if (ide_vers >= 7000) {
			WriteMSVCXMLSpecificFiles();
		} else {
			WriteMSVCSpecificFiles();
		}
	}
}