
local struct = require "Structure"
local common = require "CommonStruct"


local sys_functions =
{ type="block", name="System(hFile, spec, options)",
	{type="write", name="SetupFunction(hFile, specData, spec, options)", },
	{type="blank", cond="version-iter" },
	{type="write", name="VersionFunctions(hFile, specData, spec, options)", cond="version-iter"},
}

local my_struct =
{
	{ type="file", style="hdr", name="GetFilename(basename, spec, options)",
		{ type="write", name="FilePreamble", optional=true} ,
		{ type="block", name="IncludeGuard",
			{ type="blank"},
			{ type="write", name="Guards(hFile, spec, options)",},
			{ type="blank"},
			{ type="write", name="Typedefs(hFile, specData, spec, options)",},
			{ type="blank"},
			
			{ type="block", name="MainNamespace(hFile, spec, options)",
				{ type="write", name="LargeHeader(hFile, value, options)", value="Extension Variables", },
				{ type="block", name="ExtVariables(hFile, spec, options)",
					common.Extensions(),
				},
				{ type="blank"},
				{ type="block", name="Enumerators(hFile, spec, options)",
					common.Enumerators(),
				},
				{ type="blank"},
				common.Functions(),
				sys_functions,
			},
		},
	},
	
	{ type="file", style="src", name="GetFilename(basename, spec, options)",
		{ type="write", name="Includes(hFile, basename, spec, options)", },
		{ type="blank"},
		{ type="write", name="LoaderFunc(hFile, spec, options)", },
		{ type="blank"},
		{ type="block", name="MainNamespace(hFile, spec, options)",
			{ type="block", name="ExtVariables(hFile, spec, options)",
				common.Extensions(),
			},
			{ type="blank"},
			{ type="group", style="typedefs",
				common.Functions(),
			},
			{ type="blank"},
			{ type="group", style="defs",
				common.Functions(),
			},
			{ type="blank"},
			{ type="group", style="switch",
				common.Functions(),
			},
			{ type="blank"},
			{ type="block", name="Struct(hFile, spec, options)", style="init",
				common.Functions(),
			},
			{ type="blank"},
			sys_functions,
		},
	},
}

my_struct = struct.BuildStructure(my_struct)
return my_struct
