internal void WriteMetaData(PEWriter output)
{
this.output = output;
if (Diag.DiagOn) {
mdStart = output.Seek(0,SeekOrigin.Current);
Console.WriteLine("Writing metaData at " + Hex.Long(mdStart));
}
output.Write(MetaDataSignature);
output.Write(output.verInfo.mdMajVer);
output.Write(output.verInfo.mdMinVer);
output.Write(0); // Reserved
output.Write(output.verInfo.netVerString.Length);
output.Write(output.verInfo.netVerString.ToCharArray()); // version string is already zero padded
output.Write((short)0); // Flags, reserved
output.Write((ushort)numStreams);
// write tilde header
output.Write(tildeStart);
output.Write(tildeTide + tildePadding);
output.Write(tildeNameArray);
for (int i=1; i < numStreams; i++) {
if (Diag.DiagOn)
Console.WriteLine("Stream " + new String(streams[i].name) + " should start at " + Hex.Long(streams[i].Start+mdStart));
streams[i].WriteHeader(output);
}
if (Diag.DiagOn) {
Console.Write("Writing tilde stream at " + Hex.Long(output.Seek(0,SeekOrigin.Current)));
Console.WriteLine(" should be at " + Hex.Long(tildeStart + mdStart));
}
WriteTildeStream(output);
for (int i=1; i < numStreams; i++) {
if (Diag.DiagOn)
Console.WriteLine("Writing stream " + new String(streams[i].name) + " at " + Hex.Long(output.Seek(0,SeekOrigin.Current)));
streams[i].Write(output);
}
//Console.WriteLine("Finished Writing metaData at " + output.Seek(0,SeekOrigin.Current));
}