shithub: minivmac

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

View raw version
/*
	WRXCDFLS.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 XCoDe specific FiLeS

	(also support older Apple Project Builder)
*/

LOCALPROC WriteNextLineSameDent(void)
{
	WriteEndDestFileLn();
	WriteBgnDestFileLn();
}

static void WriteAPBXCDObjectId(unsigned int theClass, unsigned int v)
{
	WriteHexWordToOutput(theClass);
	WriteHexWordToOutput(v);
	WriteCStrToDestFile("0000000000000000");
}

enum {
	APBoclsSrcBld,
	APBoclsIcnsBld,
	APBoclsFramBld,
	APBospcLibStdcBld,
	APBospcMnRsrcBld, /* only if HaveMacRrscs */
	APBospcLangDummyBld,

	APBospcBuildStyle,

	APBoclsSrcRf,
	APBoclsHdr, /* only if gbk_ide_xcd == cur_ide */
	APBoclsInc, /* only if gbk_ide_xcd == cur_ide */
	APBoclsIcnsRf,
	APBoclsFramRf,
	APBospcLibStdcRf,
	APBospcProductRef,
	APBospcPlistRf,
	APBospcMainRsrcRf, /* only if HaveMacRrscs */
	APBospcLangRf,

	APBospcPhaseLibs,
	APBospcSources,
	APBospcResources, /* only if HaveMacBundleApp */
	APBospcLibraries,
	APBospcProducts,
	APBospcMainGroup,
	APBospcSrcHeaders, /* only if gbk_ide_xcd == cur_ide */
	APBospcIncludes, /* only if gbk_ide_xcd == cur_ide */

	APBospcTarget,
	APBospcRoot,
	APBospcBunRsrcs, /* only if HaveMacBundleApp */
	APBospcPhaseRsrc, /* only if HaveMacRrscs */
	APBospcHeaders,
	APBospcPhaseSrcs,

	APBospcLangDummyRf,

	APBospcNatCnfg, /* only if gbk_ide_xcd == cur_ide */
	APBospcPrjCnfg, /* only if gbk_ide_xcd == cur_ide */
	APBospcLstNatCnfg, /* only if gbk_ide_xcd == cur_ide */
	APBospcLstPrjCnfg, /* only if gbk_ide_xcd == cur_ide */

	kNumAPBocls
};

#define HaveAPBXCD_LangDummy (ide_vers >= 1000)
#define HaveAPBXCD_PlistFile (ide_vers >= 1000)
#define HaveAPBXCD_NameCmmnt (ide_vers >= 2100)
#define HaveAPBXCD_Headers (ide_vers >= 1000)
#define HaveAPBXCD_StdcLib (ide_vers < 1500)
#define HaveAPBXCD_IsaFirst (ide_vers >= 2100)

static void WriteAPBXCDBgnObjList(char *s)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile(s);
	WriteCStrToDestFile(" = (");
	WriteEndDestFileLn();
	++DestFileIndent;
}

static void WriteAPBXCDEndObjList(void)
{
	--DestFileIndent;
	WriteDestFileLn(");");
}

LOCALPROC WriteAPBXCDObjectIdAndComment(unsigned int theClass,
	unsigned int v, MyProc comment)
{
	WriteAPBXCDObjectId(theClass, v);
	if (HaveAPBXCD_NameCmmnt) {
		WriteCStrToDestFile(" /* ");
		comment();
		WriteCStrToDestFile(" */");
	}
}

static void WriteAPBXCDBeginObject(unsigned int theClass,
	unsigned int v, MyProc comment)
{
	WriteBgnDestFileLn();
	WriteAPBXCDObjectIdAndComment(theClass, v, comment);
	WriteCStrToDestFile(" = {");
	WriteEndDestFileLn();
	++DestFileIndent;
}

static void WriteAPBXCDEndObject(void)
{
	--DestFileIndent;
	WriteDestFileLn("};");
}

static void WriteAPBQuotedField(char *s, char *v)
{
	WriteBgnDestFileLn();
	WriteCStrToDestFile(s);
	WriteCStrToDestFile(" = ");
	WriteQuoteToDestFile();
	WriteCStrToDestFile(v);
	WriteQuoteToDestFile();
	WriteCStrToDestFile(";");
	WriteEndDestFileLn();
}

LOCALPROC WriteAPBXCDobjlistelmp(unsigned int theClass, unsigned int v,
	MyProc comment)
{
	WriteBgnDestFileLn();
	WriteAPBXCDObjectIdAndComment(theClass, v, comment);
	WriteCStrToDestFile(",");
	WriteEndDestFileLn();
}

LOCALVAR int APBXCDForceSameLine = 0;

LOCALPROC WriteAPBXCDSepA(void)
{
	if (0 == APBXCDForceSameLine) {
		WriteNextLineSameDent();
	} else {
		WriteSpaceToDestFile();
	}
}

LOCALPROC WriteAPBXCDDObjectAPropBgn(void)
{
	if (0 == APBXCDForceSameLine) {
		WriteBgnDestFileLn();
	}
}

LOCALPROC WriteAPBXCDDObjectAPropEnd(void)
{
	WriteCStrToDestFile(";");
	if (0 == APBXCDForceSameLine) {
		WriteEndDestFileLn();
	} else {
		WriteSpaceToDestFile();
	}
}

LOCALPROC WriteAPBXCDObjectAp(unsigned int theClass, unsigned int v,
	MyProc comment, MyProc body)
{
	WriteBgnDestFileLn();
	WriteAPBXCDObjectIdAndComment(theClass, v, comment);
	WriteCStrToDestFile(" = {");
	if (ide_vers < 2100) {
		WriteEndDestFileLn();
		++DestFileIndent;
			body();
		--DestFileIndent;
		WriteBgnDestFileLn();
	} else {
		++APBXCDForceSameLine;
		body();
		--APBXCDForceSameLine;
	}
	WriteCStrToDestFile("};");
	WriteEndDestFileLn();
}

LOCALPROC WriteAPBXCDDObjAProp_SS(char *ns, char *vs)
{
	WriteAPBXCDDObjectAPropBgn();
	WriteCStrToDestFile(ns);
	WriteCStrToDestFile(" = ");
	WriteCStrToDestFile(vs);
	WriteAPBXCDDObjectAPropEnd();
}

LOCALPROC WriteAPBXCDDObjAProp_SP(char *ns, MyProc p)
{
	WriteAPBXCDDObjectAPropBgn();
	WriteCStrToDestFile(ns);
	WriteCStrToDestFile(" = ");
	p();
	WriteAPBXCDDObjectAPropEnd();
}

LOCALPROC WriteAPBXCDDObjAProp_SO(char *ns,
	unsigned int theClass, unsigned int v,
	MyProc comment)
{
	WriteAPBXCDDObjectAPropBgn();
	WriteCStrToDestFile(ns);
	WriteCStrToDestFile(" = ");
	WriteAPBXCDObjectIdAndComment(theClass,
		v, comment);
	WriteAPBXCDDObjectAPropEnd();
}

LOCALPROC WriteAPBXCDDObjAPropIsa(char *s)
{
	WriteAPBXCDDObjAProp_SS("isa", s);
}

LOCALPROC WriteAPBXCDDObjAPropIsaBuildFile(void)
{
	WriteAPBXCDDObjAPropIsa("PBXBuildFile");
}

LOCALPROC WriteAPBXCDDObjAPropIsaFileReference(void)
{
	WriteAPBXCDDObjAPropIsa("PBXFileReference");
}

LOCALPROC WriteAPBXCDDObjAPropIsaGroup(void)
{
	WriteAPBXCDDObjAPropIsa("PBXGroup");
}

LOCALPROC WriteAPBXCDDObjAPropFileEncoding30(void)
{
	WriteAPBXCDDObjAProp_SS("fileEncoding", "30");
}

LOCALPROC WriteAPBXCDDObjAPropFileEncoding4(void)
{
	WriteAPBXCDDObjAProp_SS("fileEncoding", "4");
}

LOCALPROC WriteAPBXCDDObjAPropRefType(char *ns)
{
	if (ide_vers < 2100) {
		WriteAPBXCDDObjAProp_SS("refType", ns);
	}
}

LOCALPROC WriteAPBXCDDObjAPropRefType0(void)
{
	WriteAPBXCDDObjAPropRefType("0");
}

LOCALPROC WriteAPBXCDDObjAPropRefType2(void)
{
	WriteAPBXCDDObjAPropRefType("2");
}

LOCALPROC WriteAPBXCDDObjAPropRefType3(void)
{
	WriteAPBXCDDObjAPropRefType("3");
}

LOCALPROC WriteAPBXCDDObjAPropRefType4(void)
{
	WriteAPBXCDDObjAPropRefType("4");
}

LOCALPROC WriteAPBXCDDObjAPropName(MyProc p)
{
	WriteAPBXCDDObjAProp_SP("name", p);
}

LOCALPROC WriteAPBXCDDObjAPropPath(MyProc p)
{
	WriteAPBXCDDObjAProp_SP("path", p);
}

LOCALPROC WriteAPBXCDDObjAPropSourceTree(char *s)
{
	if (ide_vers >= 1000) {
		WriteAPBXCDDObjAProp_SS("sourceTree", s);
	}
}

LOCALPROC WriteAPBXCDDObjAPropSourceTreeRoot(void)
{
	WriteAPBXCDDObjAPropSourceTree("SOURCE_ROOT");
}

LOCALPROC WriteAPBXCDDObjAPropSourceTreeSDKRoot(void)
{
	WriteAPBXCDDObjAPropSourceTree("SDKROOT");
}

LOCALPROC WriteAPBXCDDObjAPropSourceTreeAbsolute(void)
{
	WriteAPBXCDDObjAPropSourceTree("\"<absolute>\"");
}

LOCALPROC WriteAPBXCDDObjAPropSourceTreeGroup(void)
{
	WriteAPBXCDDObjAPropSourceTree("\"<group>\"");
}

LOCALPROC WriteAPBXCDDObjAPropExpectedFileType(MyProc p)
{
	if ((ide_vers < 1500) && (ide_vers >= 1000)) {
		WriteAPBXCDDObjAProp_SP("expectedFileType", p);
	}
}

LOCALPROC WriteAPBXCDDObjAPropLastKnownFType(MyProc p)
{
	if (ide_vers >= 1500) {
		WriteAPBXCDDObjAProp_SP("lastKnownFileType", p);
	}
}

LOCALPROC WriteAPBXCDDObjAPropFileRef(
	unsigned int theClass, unsigned int v,
	MyProc comment)
{
	WriteAPBXCDDObjAProp_SO("fileRef",
		theClass, v, comment);
}

LOCALPROC WriteAPBXCDDObjAPropIncludeII0(void)
{
	if (ide_vers >= 1000) {
		WriteAPBXCDDObjAProp_SS("includeInIndex", "0");
	}
}

LOCALPROC WriteAPBXCDDObjAPropSettingsNull(void)
{
	if (ide_vers < 2100) {
		WriteAPBXCDDObjectAPropBgn();
		WriteCStrToDestFile("settings = {");
		WriteAPBXCDSepA();
		WriteCStrToDestFile("}");
		WriteAPBXCDDObjectAPropEnd();
	}
}

LOCALPROC WriteSrcFileAPBXCDNameInSources(void)
{
	WriteSrcFileFileName();
	WriteCStrToDestFile(" in Sources");
}

LOCALPROC DoSrcFileAPBXCDaddFileBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}

	WriteAPBXCDDObjAPropFileRef(APBoclsSrcRf,
		FileCounter, WriteSrcFileFileName);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}
	WriteAPBXCDDObjAPropSettingsNull();
}

LOCALPROC DoSrcFileAPBXCDaddFile(void)
{
	WriteAPBXCDObjectAp(APBoclsSrcBld, FileCounter,
		WriteSrcFileAPBXCDNameInSources, DoSrcFileAPBXCDaddFileBody);
}

LOCALPROC WriteSrcFileAPBXCDtype(void)
{
	char *s;
	blnr UseObjc = ((DoSrcFile_gd()->Flgm & kCSrcFlgmOjbc) != 0);

	if (UseObjc) {
		s = "sourcecode.c.objc";
	} else {
		s = "sourcecode.c.c";
	}
	WriteCStrToDestFile(s);
}

LOCALPROC DoSrcFileAPBXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteSrcFileAPBXCDtype);
	WriteAPBXCDDObjAPropFileEncoding30();
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteSrcFileAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteSrcFileFileName);
	WriteAPBXCDDObjAPropPath(WriteSrcFileFilePath);
	WriteAPBXCDDObjAPropRefType2();
	WriteAPBXCDDObjAPropSourceTreeRoot();
}

LOCALPROC DoSrcFileAPBXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBoclsSrcRf, FileCounter,
		WriteSrcFileFileName,
		DoSrcFileAPBXCDaddFileRefBody);
}

LOCALPROC DoSrcFileAPBXCDaddToGroup(void)
{
	WriteAPBXCDobjlistelmp(APBoclsSrcRf, FileCounter,
		WriteSrcFileFileName);
}

LOCALPROC DoSrcFileAPBXCDaddToSources(void)
{
	WriteAPBXCDobjlistelmp(APBoclsSrcBld, FileCounter,
		WriteSrcFileAPBXCDNameInSources);
}

LOCALPROC WriteHeaderFileAPBXCDtype(void)
{
	WriteCStrToDestFile("sourcecode.c.h");
}

LOCALPROC DoHeaderFileXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteHeaderFileAPBXCDtype);
	WriteAPBXCDDObjAPropFileEncoding30();
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteHeaderFileAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteSrcFileHeaderName);
	WriteAPBXCDDObjAPropPath(WriteSrcFileHeaderPath);
	WriteAPBXCDDObjAPropRefType2();
	WriteAPBXCDDObjAPropSourceTreeRoot();
}

LOCALPROC DoHeaderFileXCDaddFileRef(void)
{
	if (0 == (DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader)) {
		WriteAPBXCDObjectAp(APBoclsHdr, FileCounter,
			WriteSrcFileHeaderName,
			DoHeaderFileXCDaddFileRefBody);
	}
}

LOCALPROC DoHeaderFileXCDaddToGroup(void)
{
	if (0 == (DoSrcFile_gd()->Flgm & kCSrcFlgmNoHeader)) {
		WriteAPBXCDobjlistelmp(APBoclsHdr, FileCounter,
			WriteSrcFileHeaderName);
	}
}

LOCALPROC WriteDocTypeAPBXCDIconFileInResources(void)
{
	WriteDocTypeIconFileName();
	WriteCStrToDestFile(" in Resources");
}

LOCALPROC DoDocTypeAPBXCDaddFileBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}

	WriteAPBXCDDObjAPropFileRef(APBoclsIcnsRf,
		DocTypeCounter, WriteDocTypeIconFileName);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}
	WriteAPBXCDDObjAPropSettingsNull();
}

LOCALPROC DoDocTypeAPBXCDaddFile(void)
{
	WriteAPBXCDObjectAp(APBoclsIcnsBld, DocTypeCounter,
		WriteDocTypeAPBXCDIconFileInResources,
		DoDocTypeAPBXCDaddFileBody);
}

LOCALPROC WriteDocTypeAPBXCDtype(void)
{
	WriteCStrToDestFile("image.icns");
}

LOCALPROC DoDocTypeAPBXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteDocTypeAPBXCDtype);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteDocTypeAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteDocTypeIconFileName);
	WriteAPBXCDDObjAPropPath(WriteDocTypeIconFilePath);
	WriteAPBXCDDObjAPropRefType2();
	WriteAPBXCDDObjAPropSourceTreeRoot();
}

LOCALPROC DoDocTypeAPBXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBoclsIcnsRf, DocTypeCounter,
		WriteDocTypeIconFileName, DoDocTypeAPBXCDaddFileRefBody);
}

LOCALPROC DoDocTypeAPBXCDaddToGroup(void)
{
	WriteAPBXCDobjlistelmp(APBoclsIcnsRf, DocTypeCounter,
		WriteDocTypeIconFileName);
}

LOCALPROC DoDocTypeAPBXCDaddToSources(void)
{
	WriteAPBXCDobjlistelmp(APBoclsIcnsBld, DocTypeCounter,
		WriteDocTypeAPBXCDIconFileInResources);
}

LOCALPROC WriteFrameWorkAPBXCDFileName(void)
{
	WriteCStrToDestFile(DoFrameWork_gd()->s);
	WriteCStrToDestFile(".framework");
}

LOCALPROC WriteFrameWorkAPBXCDFilePath(void)
{
	if (ide_vers < 4000) {
		WriteCStrToDestFile("/");
	}
	WriteCStrToDestFile("System/Library/Frameworks/");
	WriteFrameWorkAPBXCDFileName();
}

LOCALPROC WriteFrameWorkAPBXCDileInFrameworks(void)
{
	WriteFrameWorkAPBXCDFileName();
	WriteCStrToDestFile(" in Frameworks");
}

LOCALPROC DoFrameWorkAPBXCDaddFileBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}

	WriteAPBXCDDObjAPropFileRef(APBoclsFramRf,
		FileCounter, WriteFrameWorkAPBXCDFileName);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}
	WriteAPBXCDDObjAPropSettingsNull();
}

LOCALPROC DoFrameWorkAPBXCDaddFile(void)
{
	WriteAPBXCDObjectAp(APBoclsFramBld, FileCounter,
		WriteFrameWorkAPBXCDileInFrameworks,
		DoFrameWorkAPBXCDaddFileBody);
}

LOCALPROC WriteAPBXCDDObjAPropIsaFrameworkRef(void)
{
	if (ide_vers < 1000) {
		WriteAPBXCDDObjAPropIsa("PBXFrameworkReference");
	} else {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
}

LOCALPROC WriteFrameWorkAPBXCDtype(void)
{
	WriteCStrToDestFile("wrapper.framework");
}

LOCALPROC DoFrameWorkAPBXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFrameworkRef();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteFrameWorkAPBXCDtype);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFrameworkRef();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteFrameWorkAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteFrameWorkAPBXCDFileName);
	WriteAPBXCDDObjAPropPath(WriteFrameWorkAPBXCDFilePath);
	WriteAPBXCDDObjAPropRefType0();
	if (ide_vers >= 4000) {
		WriteAPBXCDDObjAPropSourceTreeSDKRoot();
	} else {
		WriteAPBXCDDObjAPropSourceTreeAbsolute();
	}
}

LOCALPROC DoFrameWorkAPBXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBoclsFramRf, FileCounter,
		WriteFrameWorkAPBXCDFileName,
		DoFrameWorkAPBXCDaddFileRefBody);
}

LOCALPROC DoFrameworkAPBXCDaddToBuild(void)
{
	WriteAPBXCDobjlistelmp(APBoclsFramBld, FileCounter,
		WriteFrameWorkAPBXCDileInFrameworks);
}

LOCALPROC DoFrameworkAPBXCDaddToLibraries(void)
{
	WriteAPBXCDobjlistelmp(APBoclsFramRf, FileCounter,
		WriteFrameWorkAPBXCDFileName);
}

LOCALPROC DoExtraHeaderFileXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteHeaderFileAPBXCDtype);
	WriteAPBXCDDObjAPropFileEncoding30();
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteHeaderFileAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteExtraHeaderFileName);
	WriteAPBXCDDObjAPropPath(WriteExtraHeaderFilePath);
	WriteAPBXCDDObjAPropRefType2();
	WriteAPBXCDDObjAPropSourceTreeRoot();
}

LOCALPROC DoExtraHeaderFileXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBoclsInc, FileCounter,
		WriteExtraHeaderFileName,
		DoExtraHeaderFileXCDaddFileRefBody);
}

LOCALPROC DoExtraHeaderFileXCDaddToGroup(void)
{
	WriteAPBXCDobjlistelmp(APBoclsInc, FileCounter,
		WriteExtraHeaderFileName);
}

LOCALPROC WriteMainAPBXCDRsrcNameinRez(void)
{
	WriteMainRsrcName();
	WriteCStrToDestFile(" in Rez");
}

LOCALPROC DoRsrcAPBXCDaddFileBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}

	WriteAPBXCDDObjAPropFileRef(APBospcMainRsrcRf, 0,
		WriteMainRsrcName);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}
	WriteAPBXCDDObjAPropSettingsNull();
}

LOCALPROC DoRsrcAPBXCDaddFile(void)
{
	WriteAPBXCDObjectAp(APBospcMnRsrcBld, 0,
		WriteMainAPBXCDRsrcNameinRez,
		DoRsrcAPBXCDaddFileBody);
}

LOCALPROC WriteRsrcAPBXCDtype(void)
{
	WriteCStrToDestFile("sourcecode.rez");
}

LOCALPROC DoRsrcAPBXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteRsrcAPBXCDtype);
	WriteAPBXCDDObjAPropFileEncoding30();
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteRsrcAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteMainRsrcName);
	WriteAPBXCDDObjAPropPath(WriteMainRsrcSrcPath);
	WriteAPBXCDDObjAPropRefType2();
	WriteAPBXCDDObjAPropSourceTreeRoot();
}

LOCALPROC DoRsrcAPBXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBospcMainRsrcRf, 0,
		WriteMainRsrcName,
		DoRsrcAPBXCDaddFileRefBody);
}

LOCALPROC WriteLibStdcName(void)
{
	WriteCStrToDestFile("libstdc++.a");
}

LOCALPROC DoLibStdcAPBXCDaddFileBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}

	WriteAPBXCDDObjAPropFileRef(APBospcLibStdcRf, 0,
		WriteLibStdcName);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}
	WriteAPBXCDDObjAPropSettingsNull();
}

LOCALPROC DoLibStdcAPBXCDaddFile(void)
{
	WriteAPBXCDObjectAp(APBospcLibStdcBld, 0,
		WriteLibStdcName,
		DoLibStdcAPBXCDaddFileBody);
}

LOCALPROC WriteLibStdcFileName(void)
{
	WriteQuoteToDestFile();
	WriteCStrToDestFile("libstdc++.a");
	WriteQuoteToDestFile();
}

LOCALPROC WriteLibStdcFilePath(void)
{
	WriteQuoteToDestFile();
	WriteCStrToDestFile("/usr/lib/libstdc++.a");
	WriteQuoteToDestFile();
}

LOCALPROC WriteLibStdcAPBXCDtype(void)
{
	WriteCStrToDestFile("archive.ar");
}

LOCALPROC DoLibStdcAPBXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteLibStdcAPBXCDtype);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteLibStdcAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteLibStdcFileName);
	WriteAPBXCDDObjAPropPath(WriteLibStdcFilePath);
	WriteAPBXCDDObjAPropRefType0();
	WriteAPBXCDDObjAPropSourceTreeAbsolute();
}

LOCALPROC DoLibStdcAPBXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBospcLibStdcRf, 0,
		WriteLibStdcName,
		DoLibStdcAPBXCDaddFileRefBody);
}

LOCALPROC WriteDummyLangFileNameInResources(void)
{
	WriteDummyLangFileName();
	WriteCStrToDestFile(" in Resources");
}

LOCALPROC DoDummyLangAPBXCDaddFileBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}

	WriteAPBXCDDObjAPropFileRef(APBospcLangDummyRf, 0,
		WriteDummyLangFileName);
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaBuildFile();
	}
	WriteAPBXCDDObjAPropSettingsNull();
}

LOCALPROC DoDummyLangAPBXCDaddFile(void)
{
	WriteAPBXCDObjectAp(APBospcLangDummyBld, 0,
		WriteDummyLangFileNameInResources,
		DoDummyLangAPBXCDaddFileBody);
}

LOCALPROC WriteDummyLangFilePath(void)
{
	WriteFileInDirToDestFile0(WriteLProjFolderPath,
		WriteDummyLangFileName);
}

LOCALPROC WriteLangDummyAPBXCDtype(void)
{
	WriteCStrToDestFile("text");
}

LOCALPROC DoLangDummyAPBXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteLangDummyAPBXCDtype);
	WriteAPBXCDDObjAPropFileEncoding30();
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteLangDummyAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteLProjName);
	WriteAPBXCDDObjAPropPath(WriteDummyLangFilePath);
	WriteAPBXCDDObjAPropRefType4();
	WriteAPBXCDDObjAPropSourceTreeRoot();
}

LOCALPROC DoLangDummyAPBXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBospcLangRf, 0,
		WriteLProjName,
		DoLangDummyAPBXCDaddFileRefBody);
}

LOCALPROC DoLangDummyAPBXCDaddToSources(void)
{
	WriteAPBXCDobjlistelmp(APBospcLangDummyBld, 0,
		WriteDummyLangFileNameInResources);
}

LOCALPROC DoLangDummyAPBXCDaddVariant(void)
{
	WriteAPBXCDBeginObject(APBospcLangDummyRf,
		0, WriteDummyLangFileName);

		if (HaveAPBXCD_IsaFirst) {
			WriteAPBXCDDObjAPropIsa("PBXVariantGroup");
		}

		WriteAPBXCDBgnObjList("children");
			WriteAPBXCDobjlistelmp(APBospcLangRf, 0, WriteLProjName);
		WriteAPBXCDEndObjList();
		if (! HaveAPBXCD_IsaFirst) {
			WriteAPBXCDDObjAPropIsa("PBXVariantGroup");
		}
		WriteAPBXCDDObjAPropName(WriteDummyLangFileName);
		WriteAPBXCDDObjAPropRefType4();
		WriteAPBXCDDObjAPropSourceTreeGroup();
	WriteAPBXCDEndObject();
}

static void DoBeginSectionAPBXCD(char *Name)
{
	if (ide_vers >= 2100) {
		--DestFileIndent; --DestFileIndent;
		WriteBlankLineToDestFile();
		WriteBgnDestFileLn();
		WriteCStrToDestFile("/* Begin ");
		WriteCStrToDestFile(Name);
		WriteCStrToDestFile(" section */");
		WriteEndDestFileLn();
		++DestFileIndent; ++DestFileIndent;
	}
}

static void DoEndSectionAPBXCD(char *Name)
{
	if (ide_vers >= 2100) {
		--DestFileIndent; --DestFileIndent;
		WriteBgnDestFileLn();
		WriteCStrToDestFile("/* End ");
		WriteCStrToDestFile(Name);
		WriteCStrToDestFile(" section */");
		WriteEndDestFileLn();
		++DestFileIndent; ++DestFileIndent;
	}
}

LOCALPROC WriteXCDconfigname(void)
{
	char *s;

	switch (gbo_dbg) {
		case gbk_dbg_on:
			if (ide_vers < 2100) {
				s = "Development";
			} else {
				s = "Debug";
			}
			break;
		case gbk_dbg_test:
			s = "Test";
			break;
		case gbk_dbg_off:
			if (ide_vers < 2100) {
				s = "Deployment";
			} else {
				s = "Release";
			}
			break;
		default:
			s = "(unknown Debug Level)";
			break;
	}

	WriteCStrToDestFile(s);
}

LOCALPROC WriteAPBXCDDObjAPropIsaApplicationRef(void)
{
	if (ide_vers < 1000) {
		WriteAPBXCDDObjAPropIsa("PBXApplicationReference");
	} else {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
}

LOCALPROC WriteProductAPBXCDtype(void)
{
	if (HaveMacBundleApp) {
		WriteCStrToDestFile("wrapper.application");
	} else {
		WriteCStrToDestFile("\"compiled.mach-o.executable\"");
	}
}

LOCALPROC DoProductAPBXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaApplicationRef();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WriteProductAPBXCDtype);
	WriteAPBXCDDObjAPropIncludeII0();
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaApplicationRef();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WriteProductAPBXCDtype);
	WriteAPBXCDDObjAPropPath(WriteAppNameStr);
	WriteAPBXCDDObjAPropRefType3();
	WriteAPBXCDDObjAPropSourceTree("BUILT_PRODUCTS_DIR");
}

LOCALPROC DoProductAPBXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBospcProductRef, 0,
		WriteAppNameStr,
		DoProductAPBXCDaddFileRefBody);
}

LOCALPROC WritePlistAPBXCDtype(void)
{
	if (ide_vers >= 3100) {
		WriteCStrToDestFile("text.plist.xml");
	} else {
		WriteCStrToDestFile("text.xml");
	}
}

LOCALPROC DoPlistAPBXCDaddFileRefBody(void)
{
	if (HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}

	WriteAPBXCDDObjAPropExpectedFileType(WritePlistAPBXCDtype);
	WriteAPBXCDDObjAPropFileEncoding4();
	if (! HaveAPBXCD_IsaFirst) {
		WriteAPBXCDDObjAPropIsaFileReference();
	}
	WriteAPBXCDDObjAPropLastKnownFType(WritePlistAPBXCDtype);
	WriteAPBXCDDObjAPropName(WriteInfoPlistFileName);
	WriteAPBXCDDObjAPropPath(WriteInfoPlistFilePath);
	WriteAPBXCDDObjAPropRefType2();
	WriteAPBXCDDObjAPropSourceTreeRoot();
}

LOCALPROC DoPlistAPBXCDaddFileRef(void)
{
	WriteAPBXCDObjectAp(APBospcPlistRf, 0,
		WriteInfoPlistFileName,
		DoPlistAPBXCDaddFileRefBody);
}

LOCALPROC WriteAPBXCDBuildSettings(void)
{
	if (ide_vers >= 3100) {
		WriteDestFileLn("ALWAYS_SEARCH_USER_PATHS = NO;");
	}

	if (ide_vers >= 2100) {
		/* if (CrossCompile) */ {
			if (gbk_cpufam_x86 == gbo_cpufam) {
				WriteDestFileLn("ARCHS = i386;");
				/*
					may be preferred in later versions:
					WriteDestFileLn(
						"ARCHS = \"$(ARCHS_STANDARD_32_BIT)\";");
				*/
			} else if (gbk_cpufam_x64 == gbo_cpufam) {
				WriteDestFileLn("ARCHS = x86_64;");
			} else {
				WriteDestFileLn("ARCHS = ppc;");
			}
		}
	}
	if (ide_vers >= 2100) { /*^*/
		/*
			seems to work in Xcode 2.1, but doesn't
			really appear in settings user interface
			until Xcode 2.2
		*/
		WriteDestFileLn(
			"CONFIGURATION_BUILD_DIR = \"$(PROJECT_DIR)\";");
	}
	if (ide_vers >= 2200) { /*^*/
		WriteDestFileLn("COPY_PHASE_STRIP = NO;");
	} else {
		if (gbk_dbg_on != gbo_dbg) {
			WriteDestFileLn("COPY_PHASE_STRIP = YES;");
		} else {
			WriteDestFileLn("COPY_PHASE_STRIP = NO;");
		}
	}
	if (ide_vers >= 1500) {
		if (gbk_dbg_on != gbo_dbg) {
			WriteDestFileLn("DEPLOYMENT_POSTPROCESSING = YES;");
		}
	}
	if (ide_vers < 1500) {
		if (gbk_dbg_on != gbo_dbg) {
			WriteDestFileLn("DEBUGGING_SYMBOLS = NO;");
		}
	}
	if (ide_vers >= 1500) {
		WriteDestFileLn("GCC_CW_ASM_SYNTAX = NO;");
	}
	if (ide_vers >= 1000) {
		WriteDestFileLn("GCC_DYNAMIC_NO_PIC = YES;");
	}
	if (ide_vers < 1500) {
		WriteAPBQuotedField("FRAMEWORK_SEARCH_PATHS", "");
	}
	if ((ide_vers >= 1000) && (ide_vers < 4000)) {
		WriteDestFileLn("GCC_ENABLE_FIX_AND_CONTINUE = NO;");
	}
	if (ide_vers >= 1000) {
		if (gbk_dbg_on != gbo_dbg) {
			WriteDestFileLn("GCC_GENERATE_DEBUGGING_SYMBOLS = NO;");
		}
	}
	if ((ide_vers >= 1500) && (ide_vers < 4000)) {
		WriteDestFileLn("GCC_MODEL_TUNING = \"\";");
	}
	if (ide_vers >= 1000) {
		if (gbk_dbg_on == gbo_dbg) {
			WriteDestFileLn("GCC_OPTIMIZATION_LEVEL = 0;");
		} else {
			WriteDestFileLn("GCC_OPTIMIZATION_LEVEL = s;");
		}
	}
	if (ide_vers >= 2100) {
		WriteDestFileLn("GCC_PRECOMPILE_PREFIX_HEADER = NO;");
		WriteDestFileLn("GCC_PREFIX_HEADER = \"\";");
		WriteDestFileLn("GCC_SYMBOLS_PRIVATE_EXTERN = NO;");
	}
	if (ide_vers >= 3100) {
		if (ide_vers < 3200) {
			WriteDestFileLn("GCC_VERSION = 4.0;");
		}
	}
	if (ide_vers >= 1000) {
		WriteDestFileLn("GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;");
	}

	if (HaveMacBundleApp) {
		WriteBgnDestFileLn();
		WriteCStrToDestFile("INFOPLIST_FILE = ");
		WriteInfoPlistFilePath();
		WriteCStrToDestFile(";");
		WriteEndDestFileLn();
	}
	if (ide_vers >= 1000) {
		WriteDestFileLn("INSTALL_PATH = \"$(HOME)/Applications\";");
	}
	if (ide_vers < 1500) {
		WriteAPBQuotedField("LIBRARY_SEARCH_PATHS", "");
	}
	if (ide_vers >= 2100) {
		if (gbk_cpufam_ppc == gbo_cpufam) {
			WriteDestFileLn("MACOSX_DEPLOYMENT_TARGET = 10.1;");
		} else {
			if (ide_vers >= 9000) {
				WriteDestFileLn("MACOSX_DEPLOYMENT_TARGET = 10.6;");
			} else {
				WriteDestFileLn("MACOSX_DEPLOYMENT_TARGET = 10.4;");
			}
		}
	}
	if (ide_vers < 1500) {
		if (gbk_dbg_on == gbo_dbg) {
			WriteAPBQuotedField("OPTIMIZATION_CFLAGS", "-O0");
		}
	}
	if (ide_vers < 1500) {
		WriteAPBQuotedField("OTHER_LDFLAGS", "");
		WriteAPBQuotedField("OTHER_REZFLAGS", "");
	} else {
		if (! HaveMacBundleApp) {
			WriteAPBXCDBgnObjList("OTHER_LDFLAGS");
				WriteDestFileLn("\"-L/usr/X11R6/lib\",");
#if 0
				WriteDestFileLn("\"-lXext\",");
#endif
				WriteDestFileLn("\"-lX11\",");
			WriteAPBXCDEndObjList();
		}
	}
	if ((ide_vers >= 1500) && (ide_vers < 4000)) {
		WriteDestFileLn("PREBINDING = NO;");
	}
	WriteBgnDestFileLn();
	WriteCStrToDestFile("PRODUCT_NAME = ");
	WriteStrAppAbbrev();
	WriteCStrToDestFile(";");
	WriteEndDestFileLn();
	if (ide_vers >= 2200) {
		if (ide_vers >= 4300) {
			WriteDestFileLn("SDKROOT = macosx;");
		} else if (ide_vers >= 3200) {
			WriteDestFileLn("SDKROOT = macosx10.6;");
		} else if (ide_vers >= 3100) {
			WriteDestFileLn("SDKROOT = macosx10.5;");
		} else {
			WriteDestFileLn(
				"SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;");
		}
	}
	if (ide_vers < 1500) {
		WriteAPBQuotedField("SECTORDER_FLAGS", "");
	}
	if (ide_vers >= 2200) {
		if (gbk_dbg_on != gbo_dbg) {
			WriteDestFileLn("SEPARATE_STRIP = YES;");
			WriteDestFileLn("STRIPFLAGS = \"-u -r\";");
			WriteDestFileLn("STRIP_INSTALLED_PRODUCT = YES;");
		}
	}
	if ((ide_vers >= 1500) && (ide_vers < 2100)) {
		WriteDestFileLn("SYMROOT = \"$(PROJECT_DIR)\";");
	}
	WriteDestFileLn("USER_HEADER_SEARCH_PATHS = \"$(SRCROOT)/"
		cfg_d_name
		"\";");
	if (ide_vers >= 2100) {
		WriteAPBXCDBgnObjList("WARNING_CFLAGS");
			WriteDestFileLn("\"-Wall\",");
			WriteDestFileLn("\"-Wundef\",");
			WriteDestFileLn("\"-Wstrict-prototypes\",");
			WriteDestFileLn("\"-Wno-uninitialized\",");
		WriteAPBXCDEndObjList();
	} else {
		WriteAPBQuotedField("WARNING_CFLAGS",
			"-Wall -Wstrict-prototypes -Wno-uninitialized"
			" -Wno-four-char-constants -Wno-unknown-pragmas");
	}
	if ((HaveMacBundleApp) && (ide_vers < 3100)) {
		WriteDestFileLn("WRAPPER_EXTENSION = app;");
	}
	if ((ide_vers >= 1000) && (ide_vers < 3100)) {
		WriteDestFileLn("ZERO_LINK = NO;");
	}
}

LOCALPROC WriteAPBplist(void)
{
	int SaveDestFileIndent = DestFileIndent;

	DestFileIndent = 0;

	WriteBgnDestFileLn();
	WriteCStrToDestFile("<!DOCTYPE plist PUBLIC ");
	WriteBackSlashToDestFile();
	WriteQuoteToDestFile();
	WriteCStrToDestFile("-//Apple Computer//DTD PLIST 1.0//EN");
	WriteBackSlashToDestFile();
	WriteQuoteToDestFile();
	WriteSpaceToDestFile();
	WriteBackSlashToDestFile();
	WriteQuoteToDestFile();
	WriteCStrToDestFile(
		"http://www.apple.com/DTDs/PropertyList-1.0.dtd");
	WriteBackSlashToDestFile();
	WriteQuoteToDestFile();
	WriteCStrToDestFile(">");
	WriteEndDestFileLn();

	WriteBgnDestFileLn();
	WriteCStrToDestFile("<plist version=");
	WriteBackSlashToDestFile();
	WriteQuoteToDestFile();
	WriteCStrToDestFile("1.0");
	WriteBackSlashToDestFile();
	WriteQuoteToDestFile();
	WriteCStrToDestFile(">");
	WriteEndDestFileLn();

	CurPListFormat = kPListRaw;

	WriteMyInfoPListContents();

	WriteDestFileLn("</plist>");
	WriteBgnDestFileLn();
	WriteQuoteToDestFile();
	WriteCStrToDestFile(";");
	WriteEndDestFileLn();

	DestFileIndent = SaveDestFileIndent;
}

LOCALPROC WriteStrFrameworks(void)
{
	WriteCStrToDestFile("Frameworks");
}

LOCALPROC WriteStrSources(void)
{
	WriteCStrToDestFile("Sources");
}

LOCALPROC WriteStrResources(void)
{
	WriteCStrToDestFile("Resources");
}

LOCALPROC WriteStrRez(void)
{
	WriteCStrToDestFile("Rez");
}

LOCALPROC WriteStrFrameworksLibraries(void)
{
	WriteCStrToDestFile("External Frameworks and Libraries");
}

LOCALPROC WriteStrQuoteFrameworksLibraries(void)
{
	WriteQuoteToDestFile();
	WriteStrFrameworksLibraries();
	WriteQuoteToDestFile();
}

LOCALPROC WriteStrProducts(void)
{
	WriteCStrToDestFile("Products");
}

LOCALPROC WriteStrHeaders(void)
{
	WriteCStrToDestFile("Headers");
}

LOCALPROC WriteStrIncludes(void)
{
	WriteCStrToDestFile("Includes");
}

LOCALPROC WriteStrProjectObject(void)
{
	WriteCStrToDestFile("Project object");
}

LOCALPROC WriteStrEmptyQuote(void)
{
	WriteQuoteToDestFile();
	WriteQuoteToDestFile();
}

LOCALPROC WriteAPBXCDDObjAPropPathNull(void)
{
	if (ide_vers < 2100) {
		WriteAPBXCDDObjAPropPath(WriteStrEmptyQuote);
	}
}

LOCALPROC WriteAPBXCDMainGroupName(void)
{
	if (ide_vers < 1000) {
		WriteQuoteToDestFile();
		WriteAppVariationStr();
		WriteQuoteToDestFile();
	} else {
		WriteStrAppAbbrev();
	}
}

LOCALPROC WriteAPBXCDDObjAPropIsaAppTarg(void)
{
	if (ide_vers < 1000) {
		WriteAPBXCDDObjAPropIsa("PBXApplicationTarget");
	} else {
		WriteAPBXCDDObjAPropIsa("PBXNativeTarget");
	}
}

LOCALPROC WriteStrConfListPBXProject(void)
{
	WriteCStrToDestFile("Build configuration list for PBXProject \"");
	WriteStrAppAbbrev();
	WriteCStrToDestFile("\"");
}

LOCALPROC WriteStrConfListPBXNativeTarget(void)
{
	WriteCStrToDestFile(
		"Build configuration list for PBXNativeTarget \"");
	WriteStrAppAbbrev();
	WriteCStrToDestFile("\"");
}

#define HaveFrameworks HaveMacBundleApp

LOCALPROC WriteXCDdummyfile(void)
{
	WriteDestFileLn("dummy");
}

LOCALPROC WriteXCDProjectFile(void)
{
	WriteDestFileLn("// !$*UTF8*$!");
	WriteDestFileLn("{");
	++DestFileIndent;
		WriteDestFileLn("archiveVersion = 1;");
		WriteDestFileLn("classes = {");
		WriteDestFileLn("};");
		if (ide_vers >= 3200) {
			WriteDestFileLn("objectVersion = 46;");
		} else if (ide_vers >= 3100) {
			WriteDestFileLn("objectVersion = 45;");
		} else if (ide_vers >= 2100) {
			WriteDestFileLn("objectVersion = 42;");
		} else if (ide_vers >= 1000) {
			WriteDestFileLn("objectVersion = 39;");
		} else {
			WriteDestFileLn("objectVersion = 38;");
		}
		WriteDestFileLn("objects = {");
	++DestFileIndent;

	DoBeginSectionAPBXCD("PBXBuildFile");
		DoAllSrcFilesWithSetup(DoSrcFileAPBXCDaddFile);
		if (HaveMacBundleApp) {
			DoAllDocTypesWithSetup(DoDocTypeAPBXCDaddFile);
		}

		if (HaveFrameworks) {
			DoAllFrameWorksWithSetup(DoFrameWorkAPBXCDaddFile);
		}
		if (HaveAPBXCD_StdcLib) {
			DoLibStdcAPBXCDaddFile();
		}

		if (HaveMacRrscs) {
			DoRsrcAPBXCDaddFile();
		}

		if (HaveMacBundleApp) {
			if (HaveAPBXCD_LangDummy) {
				DoDummyLangAPBXCDaddFile();
			}
		}
	DoEndSectionAPBXCD("PBXBuildFile");

	if (ide_vers < 2300) {
		DoBeginSectionAPBXCD("PBXBuildStyle");
			WriteAPBXCDBeginObject(APBospcBuildStyle,
				0, WriteXCDconfigname);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("PBXBuildStyle");
				}

				if (ide_vers < 1500) {
					WriteAPBXCDBgnObjList("buildRules");
					WriteAPBXCDEndObjList();
				}
				WriteDestFileLn("buildSettings = {");
				WriteDestFileLn("};");
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("PBXBuildStyle");
				}
				WriteAPBXCDDObjAPropName(WriteXCDconfigname);
			WriteAPBXCDEndObject();
		DoEndSectionAPBXCD("PBXBuildStyle");
	}

	DoBeginSectionAPBXCD("PBXFileReference");
		DoAllSrcFilesWithSetup(DoSrcFileAPBXCDaddFileRef);

		if (HaveAPBXCD_Headers) {
			DoAllSrcFilesWithSetup(DoHeaderFileXCDaddFileRef);
			DoAllExtraHeaders2WithSetup(
				DoExtraHeaderFileXCDaddFileRef);
		}

		if (HaveMacBundleApp) {
			DoAllDocTypesWithSetup(DoDocTypeAPBXCDaddFileRef);
		}

		if (HaveFrameworks) {
			DoAllFrameWorksWithSetup(DoFrameWorkAPBXCDaddFileRef);
		}
		if (HaveAPBXCD_StdcLib) {
			DoLibStdcAPBXCDaddFileRef();
		}

		DoProductAPBXCDaddFileRef();

		if (HaveMacBundleApp) {
			if (HaveAPBXCD_PlistFile) {
				DoPlistAPBXCDaddFileRef();
			}
		}
		if (HaveMacRrscs) {
			DoRsrcAPBXCDaddFileRef();
		}
		if (HaveMacBundleApp) {
			if (HaveAPBXCD_LangDummy) {
				DoLangDummyAPBXCDaddFileRef();
			}
		}
	DoEndSectionAPBXCD("PBXFileReference");

	DoBeginSectionAPBXCD("PBXFrameworksBuildPhase");
		WriteAPBXCDBeginObject(APBospcPhaseLibs, 0, WriteStrFrameworks);
			if (HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsa("PBXFrameworksBuildPhase");
			}

			WriteDestFileLn("buildActionMask = 2147483647;");
			WriteAPBXCDBgnObjList("files");
				if (HaveFrameworks) {
					DoAllFrameWorksWithSetup(
						DoFrameworkAPBXCDaddToBuild);
				}
				if (HaveAPBXCD_StdcLib) {
					WriteAPBXCDobjlistelmp(APBospcLibStdcBld,
						0, WriteLibStdcName);
				}
			WriteAPBXCDEndObjList();
			if (! HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsa("PBXFrameworksBuildPhase");
			}
			WriteDestFileLn("runOnlyForDeploymentPostprocessing = 0;");
		WriteAPBXCDEndObject();
	DoEndSectionAPBXCD("PBXFrameworksBuildPhase");

	DoBeginSectionAPBXCD("PBXGroup");
		WriteAPBXCDBeginObject(APBospcSources, 0, WriteStrSources);
			if (HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsaGroup();
			}

			WriteAPBXCDBgnObjList("children");
				DoAllSrcFilesWithSetup(DoSrcFileAPBXCDaddToGroup);
				if (HaveMacRrscs) {
					if (ide_vers >= 2100) {
						WriteAPBXCDobjlistelmp(APBospcMainRsrcRf, 0,
							WriteMainRsrcName);
					}
				}
			WriteAPBXCDEndObjList();
			if (! HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsaGroup();
			}
			WriteAPBXCDDObjAPropName(WriteStrSources);
			WriteAPBXCDDObjAPropPathNull();
			WriteAPBXCDDObjAPropRefType4();
			WriteAPBXCDDObjAPropSourceTreeGroup();
		WriteAPBXCDEndObject();

		if (HaveMacBundleApp) {
			WriteAPBXCDBeginObject(APBospcResources,
				0, WriteStrResources);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}

				WriteAPBXCDBgnObjList("children");
					if (HaveMacRrscs) {
						if (ide_vers < 2100) {
							WriteAPBXCDobjlistelmp(APBospcMainRsrcRf,
								0, WriteMainRsrcName);
						}
					}
					DoAllDocTypesWithSetup(
						DoDocTypeAPBXCDaddToGroup);
					if (HaveAPBXCD_PlistFile) {
						WriteAPBXCDobjlistelmp(APBospcPlistRf,
							0, WriteInfoPlistFileName);
					}
					if (HaveAPBXCD_LangDummy) {
#if 0
						WriteAPBXCDobjlistelmp(APBospcLangRf,
							0, WriteLProjFolderName);
#endif
						WriteAPBXCDobjlistelmp(APBospcLangDummyRf,
							0, WriteDummyLangFileName);
					}
				WriteAPBXCDEndObjList();
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}
				WriteAPBXCDDObjAPropName(WriteStrResources);
				WriteAPBXCDDObjAPropPathNull();
				WriteAPBXCDDObjAPropRefType4();
				WriteAPBXCDDObjAPropSourceTreeGroup();
			WriteAPBXCDEndObject();
		}

		if (HaveFrameworks) {
			WriteAPBXCDBeginObject(APBospcLibraries,
				0, WriteStrFrameworksLibraries);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}

				WriteAPBXCDBgnObjList("children");
					DoAllFrameWorksWithSetup(
						DoFrameworkAPBXCDaddToLibraries);
					if (HaveAPBXCD_StdcLib) {
						WriteAPBXCDobjlistelmp(APBospcLibStdcRf,
							0, WriteLibStdcName);
					}
				WriteAPBXCDEndObjList();
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}
				WriteAPBXCDDObjAPropName(
					WriteStrQuoteFrameworksLibraries);
				WriteAPBXCDDObjAPropPathNull();
				WriteAPBXCDDObjAPropRefType4();
				WriteAPBXCDDObjAPropSourceTreeGroup();
			WriteAPBXCDEndObject();
		}

		WriteAPBXCDBeginObject(APBospcProducts, 0, WriteStrProducts);
			if (HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsaGroup();
			}

			WriteAPBXCDBgnObjList("children");
				WriteAPBXCDobjlistelmp(APBospcProductRef,
					0, WriteAppNameStr);
			WriteAPBXCDEndObjList();
			if (! HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsaGroup();
			}
			WriteAPBXCDDObjAPropName(WriteStrProducts);
			WriteAPBXCDDObjAPropRefType4();
			WriteAPBXCDDObjAPropSourceTreeGroup();
		WriteAPBXCDEndObject();

		WriteAPBXCDBeginObject(APBospcMainGroup, 0, WriteStrAppAbbrev);
			if (HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsaGroup();
			}

			WriteAPBXCDBgnObjList("children");
				WriteAPBXCDobjlistelmp(APBospcSources,
					0, WriteStrSources);
				if (HaveAPBXCD_Headers) {
					WriteAPBXCDobjlistelmp(APBospcSrcHeaders,
						0, WriteStrHeaders);
					WriteAPBXCDobjlistelmp(APBospcIncludes,
						0, WriteStrIncludes);
				}
				if (HaveMacBundleApp) {
					WriteAPBXCDobjlistelmp(APBospcResources,
						0, WriteStrResources);
				}
				if (HaveFrameworks) {
					WriteAPBXCDobjlistelmp(APBospcLibraries,
						0, WriteStrFrameworksLibraries);
				}
				WriteAPBXCDobjlistelmp(APBospcProducts,
					0, WriteStrProducts);
			WriteAPBXCDEndObjList();

			if (! HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsaGroup();
			}
			WriteAPBXCDDObjAPropName(WriteAPBXCDMainGroupName);
			WriteAPBXCDDObjAPropPathNull();
			WriteAPBXCDDObjAPropRefType4();
			WriteAPBXCDDObjAPropSourceTreeGroup();
		WriteAPBXCDEndObject();
		if (HaveAPBXCD_Headers) {
			WriteAPBXCDBeginObject(APBospcSrcHeaders,
				0, WriteStrHeaders);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}

				WriteAPBXCDBgnObjList("children");
					DoAllSrcFilesWithSetup(
						DoHeaderFileXCDaddToGroup);
				WriteAPBXCDEndObjList();
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}
				WriteAPBXCDDObjAPropName(WriteStrHeaders);
				WriteAPBXCDDObjAPropRefType4();
				WriteAPBXCDDObjAPropSourceTreeGroup();
			WriteAPBXCDEndObject();
			WriteAPBXCDBeginObject(APBospcIncludes,
				0, WriteStrIncludes);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}

				WriteAPBXCDBgnObjList("children");
					DoAllExtraHeaders2WithSetup(
						DoExtraHeaderFileXCDaddToGroup);
				WriteAPBXCDEndObjList();
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}
				WriteAPBXCDDObjAPropName(WriteStrIncludes);
				WriteAPBXCDDObjAPropRefType4();
				WriteAPBXCDDObjAPropSourceTreeGroup();
			WriteAPBXCDEndObject();
#if 0
			WriteAPBXCDBeginObject(APBospcLangRf,
				0, WriteLProjFolderName);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}

				WriteAPBXCDBgnObjList("children");
					WriteAPBXCDobjlistelmp(APBospcLangDummyRf,
						0, WriteDummyLangFileName);
				WriteAPBXCDEndObjList();
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsaGroup();
				}
				WriteAPBXCDDObjAPropName(WriteLProjFolderName);
				WriteAPBXCDDObjAPropPath(WriteLProjFolderPath);
				WriteAPBXCDDObjAPropRefType4();
				WriteAPBXCDDObjAPropSourceTreeGroup();
			WriteAPBXCDEndObject();
#endif
		}
	DoEndSectionAPBXCD("PBXGroup");

	DoBeginSectionAPBXCD("PBXNativeTarget");
		WriteAPBXCDBeginObject(APBospcTarget, 0, WriteStrAppAbbrev);
			if (HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsaAppTarg();
			}

			if (ide_vers >= 2100) {
				WriteAPBXCDDObjAProp_SO("buildConfigurationList",
					APBospcLstNatCnfg, 0,
					WriteStrConfListPBXNativeTarget);
			}
			WriteAPBXCDBgnObjList("buildPhases");
				if (ide_vers < 1500) {
					WriteAPBXCDobjlistelmp(APBospcHeaders,
						0, WriteStrHeaders);
				}
				if (HaveMacBundleApp) {
					WriteAPBXCDobjlistelmp(APBospcBunRsrcs,
						0, WriteStrResources);
				}
				WriteAPBXCDobjlistelmp(APBospcPhaseSrcs,
					0, WriteStrSources);
				WriteAPBXCDobjlistelmp(APBospcPhaseLibs,
					0, WriteStrFrameworks);
				if (HaveMacRrscs) {
					WriteAPBXCDobjlistelmp(APBospcPhaseRsrc,
						0, WriteStrRez);
				}
			WriteAPBXCDEndObjList();
			if (ide_vers >= 1000) {
				WriteAPBXCDBgnObjList("buildRules");
				WriteAPBXCDEndObjList();
			}
			if (ide_vers < 2300) {
				WriteDestFileLn("buildSettings = {");
				++DestFileIndent;
				if (ide_vers < 2100) {
					WriteAPBXCDBuildSettings();
				}
				--DestFileIndent;
				WriteDestFileLn("};");
			}
			WriteAPBXCDBgnObjList("dependencies");
			WriteAPBXCDEndObjList();

			if (! HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsaAppTarg();
			}

			WriteAPBXCDDObjAPropName(WriteStrAppAbbrev);

			if (ide_vers >= 1000) {
				WriteDestFileLn(
					"productInstallPath = \"$(HOME)/Applications\";");
			}

			WriteBgnDestFileLn();
			WriteCStrToDestFile("productName = ");
			if (ide_vers < 1000) {
				WriteQuoteToDestFile();
			}
			WriteStrAppAbbrev();
			if (ide_vers < 1000) {
				WriteQuoteToDestFile();
			}
			WriteCStrToDestFile(";");
			WriteEndDestFileLn();

			WriteAPBXCDDObjAProp_SO("productReference",
				APBospcProductRef, 0,
				WriteAppNameStr);

			if (ide_vers >= 1000) {
				if (HaveMacBundleApp) {
					WriteDestFileLn(
						"productType = "
						"\"com.apple.product-type.application\";");
				} else {
					WriteDestFileLn(
						"productType = "
						"\"com.apple.product-type.tool\";");
				}
			}
			if ((! HaveAPBXCD_PlistFile) && HaveMacBundleApp) {
				WriteBgnDestFileLn();
				WriteCStrToDestFile("productSettingsXML = ");
				WriteQuoteToDestFile();
				WriteCStrToDestFile("<?xml version=");
				WriteBackSlashToDestFile();
				WriteQuoteToDestFile();
				WriteCStrToDestFile("1.0");
				WriteBackSlashToDestFile();
				WriteQuoteToDestFile();
				WriteCStrToDestFile(" encoding=\\\"UTF-8\\\"?>");
				WriteEndDestFileLn();

				WriteAPBplist();
			}
		WriteAPBXCDEndObject();
	DoEndSectionAPBXCD("PBXNativeTarget");

	DoBeginSectionAPBXCD("PBXProject");
		WriteAPBXCDBeginObject(APBospcRoot, 0, WriteStrProjectObject);
			if (HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsa("PBXProject");
			}
			if (ide_vers >= 4300) {
				WriteDestFileLn("attributes = {");
				++DestFileIndent;
					WriteBgnDestFileLn();
					WriteCStrToDestFile("LastUpgradeCheck = ");
					WriteCharToDestFile('0'
						+ ((ide_vers / 10000) % 10));
					WriteCharToDestFile('0' + ((ide_vers / 1000) % 10));
					WriteCharToDestFile('0' + ((ide_vers / 100) % 10));
					WriteCStrToDestFile("0;");
					WriteEndDestFileLn();
				--DestFileIndent;
				WriteDestFileLn("};");
			}
			if (ide_vers >= 2100) {
				WriteAPBXCDDObjAProp_SO("buildConfigurationList",
					APBospcLstPrjCnfg, 0,
					WriteStrConfListPBXProject);
			}
			if (ide_vers < 2300) {
				if (ide_vers >= 1000) {
					WriteDestFileLn("buildSettings = {");
					WriteDestFileLn("};");
				}
				WriteAPBXCDBgnObjList("buildStyles");
					WriteAPBXCDobjlistelmp(APBospcBuildStyle,
						0, WriteXCDconfigname);
				WriteAPBXCDEndObjList();
			}
			if (ide_vers >= 3200) {
				WriteDestFileLn(
					"compatibilityVersion = \"Xcode 3.2\";");
			} else if (ide_vers >= 3100) {
				WriteDestFileLn(
					"compatibilityVersion = \"Xcode 3.1\";");
			}
			WriteDestFileLn("hasScannedForEncodings = 1;");

			if (! HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsa("PBXProject");
			}

			WriteAPBXCDDObjAProp_SO("mainGroup",
				APBospcMainGroup, 0,
				WriteStrAppAbbrev);

			if (ide_vers >= 4000) {
				WriteAPBXCDDObjAProp_SO("productRefGroup",
					APBospcProducts, 0,
					WriteStrProducts);
			}

			WriteDestFileLn("projectDirPath = \"\";");

			if (ide_vers >= 3100) {
				WriteDestFileLn("projectRoot = \"\";");
			}

			WriteAPBXCDBgnObjList("targets");
				WriteAPBXCDobjlistelmp(APBospcTarget,
					0, WriteStrAppAbbrev);
			WriteAPBXCDEndObjList();
		WriteAPBXCDEndObject();
	DoEndSectionAPBXCD("PBXProject");

	if (HaveMacBundleApp) {
		DoBeginSectionAPBXCD("PBXResourcesBuildPhase");
			WriteAPBXCDBeginObject(APBospcBunRsrcs,
				0, WriteStrResources);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("PBXResourcesBuildPhase");
				}

				WriteDestFileLn("buildActionMask = 2147483647;");
				WriteAPBXCDBgnObjList("files");
					DoAllDocTypesWithSetup(
						DoDocTypeAPBXCDaddToSources);
					if (HaveAPBXCD_LangDummy) {
						DoLangDummyAPBXCDaddToSources();
					}
				WriteAPBXCDEndObjList();
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("PBXResourcesBuildPhase");
				}
				WriteDestFileLn(
					"runOnlyForDeploymentPostprocessing = 0;");
			WriteAPBXCDEndObject();
		DoEndSectionAPBXCD("PBXResourcesBuildPhase");
	}
	if (HaveMacRrscs) {
		DoBeginSectionAPBXCD("PBXRezBuildPhase");
			WriteAPBXCDBeginObject(APBospcPhaseRsrc, 0, WriteStrRez);
				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("PBXRezBuildPhase");
				}

				WriteDestFileLn("buildActionMask = 2147483647;");
				WriteAPBXCDBgnObjList("files");
					WriteAPBXCDobjlistelmp(APBospcMnRsrcBld, 0,
						WriteMainAPBXCDRsrcNameinRez);
				WriteAPBXCDEndObjList();
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("PBXRezBuildPhase");
				}
				WriteDestFileLn(
					"runOnlyForDeploymentPostprocessing = 0;");
			WriteAPBXCDEndObject();
		DoEndSectionAPBXCD("PBXRezBuildPhase");
	}

	if (ide_vers < 1500) {
		WriteAPBXCDBeginObject(APBospcHeaders, 0, WriteStrHeaders);
			if (HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsa("PBXHeadersBuildPhase");
			}

			WriteDestFileLn("buildActionMask = 2147483647;");
			WriteAPBXCDBgnObjList("files");
			WriteAPBXCDEndObjList();
			if (! HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsa("PBXHeadersBuildPhase");
			}
			WriteDestFileLn("runOnlyForDeploymentPostprocessing = 0;");
		WriteAPBXCDEndObject();
	}

	DoBeginSectionAPBXCD("PBXSourcesBuildPhase");
		WriteAPBXCDBeginObject(APBospcPhaseSrcs, 0, WriteStrSources);
			if (HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsa("PBXSourcesBuildPhase");
			}

			WriteDestFileLn("buildActionMask = 2147483647;");
			WriteAPBXCDBgnObjList("files");
				DoAllSrcFilesSortWithSetup(
					DoSrcFileAPBXCDaddToSources);
			WriteAPBXCDEndObjList();
			if (! HaveAPBXCD_IsaFirst) {
				WriteAPBXCDDObjAPropIsa("PBXSourcesBuildPhase");
			}
			WriteDestFileLn("runOnlyForDeploymentPostprocessing = 0;");
		WriteAPBXCDEndObject();
	DoEndSectionAPBXCD("PBXSourcesBuildPhase");

	if (HaveMacBundleApp) {
		if (HaveAPBXCD_LangDummy) {
			DoBeginSectionAPBXCD("PBXVariantGroup");
				DoLangDummyAPBXCDaddVariant();
			DoEndSectionAPBXCD("PBXVariantGroup");
		}
	}

	if (ide_vers >= 2100) {
		DoBeginSectionAPBXCD("XCBuildConfiguration");
			WriteAPBXCDBeginObject(APBospcNatCnfg,
				0, WriteXCDconfigname);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("XCBuildConfiguration");
				}

				WriteDestFileLn("buildSettings = {");
				++DestFileIndent;
					WriteAPBXCDBuildSettings();
				--DestFileIndent;
				WriteDestFileLn("};");
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("XCBuildConfiguration");
				}
				WriteAPBXCDDObjAPropName(WriteXCDconfigname);
			WriteAPBXCDEndObject();
			WriteAPBXCDBeginObject(APBospcPrjCnfg,
				0, WriteXCDconfigname);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("XCBuildConfiguration");
				}

				WriteDestFileLn("buildSettings = {");
				WriteDestFileLn("};");
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("XCBuildConfiguration");
				}
				WriteAPBXCDDObjAPropName(WriteXCDconfigname);
			WriteAPBXCDEndObject();
		DoEndSectionAPBXCD("XCBuildConfiguration");
	}

	if (ide_vers >= 2100) {
		DoBeginSectionAPBXCD("XCConfigurationList");
			WriteAPBXCDBeginObject(APBospcLstNatCnfg, 0,
				WriteStrConfListPBXNativeTarget);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("XCConfigurationList");
				}

				WriteAPBXCDBgnObjList("buildConfigurations");
					WriteAPBXCDobjlistelmp(APBospcNatCnfg,
						0, WriteXCDconfigname);
				WriteAPBXCDEndObjList();
				WriteAPBXCDDObjAProp_SS(
					"defaultConfigurationIsVisible", "0");
				WriteAPBXCDDObjAProp_SP(
					"defaultConfigurationName", WriteXCDconfigname);
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("XCConfigurationList");
				}
			WriteAPBXCDEndObject();
			WriteAPBXCDBeginObject(APBospcLstPrjCnfg, 0,
				WriteStrConfListPBXProject);

				if (HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("XCConfigurationList");
				}

				WriteAPBXCDBgnObjList("buildConfigurations");
					WriteAPBXCDobjlistelmp(APBospcPrjCnfg,
						0, WriteXCDconfigname);
				WriteAPBXCDEndObjList();
				WriteAPBXCDDObjAProp_SS(
					"defaultConfigurationIsVisible", "0");
				WriteAPBXCDDObjAProp_SP(
					"defaultConfigurationName", WriteXCDconfigname);
				if (! HaveAPBXCD_IsaFirst) {
					WriteAPBXCDDObjAPropIsa("XCConfigurationList");
				}
			WriteAPBXCDEndObject();
		DoEndSectionAPBXCD("XCConfigurationList");
	}

	--DestFileIndent;
		WriteDestFileLn("};");
		WriteBgnDestFileLn();
		WriteCStrToDestFile("rootObject = ");
		WriteAPBXCDObjectIdAndComment(APBospcRoot,
			0, WriteStrProjectObject);
		WriteCStrToDestFile(";");
		WriteEndDestFileLn();
	--DestFileIndent;
	WriteDestFileLn("}");
}

LOCALPROC WriteOutDummyLangContents(void)
{
	WriteDestFileLn(
		"This file is here because some archive extraction");
	WriteDestFileLn("software will not create an empty directory.");
}

LOCALPROC WriteXCDSpecificFiles(void)
{
	MakeSubDirectory("my_proj_d", "my_project_d", vStrAppAbbrev,
		(ide_vers >= 2100) ? ".xcodeproj" : ".pbproj");

	WriteADstFile1("my_proj_d",
		"project", ".pbxproj", "project file",
		WriteXCDProjectFile);

	if (HaveMacBundleApp) {
		if (HaveAPBXCD_PlistFile) {
			WritePListData();
		}

		MakeSubDirectory("my_lang_d", "my_config_d",
			GetLProjName(gbo_lang), ".lproj");

		WriteADstFile1("my_lang_d",
			"dummy", ".txt", "Dummy",
			WriteOutDummyLangContents);
	}

	if (WantSandbox) {
		WriteEntitlementsData();
	}
}