Esempio n. 1
0
        /// <summary>
        /// Creates a new instance of a CfgVarMetadataBlock by inflating it from a Stream.
        /// </summary>
        /// <param name="stream">The stream containing the data to deserialize to create the object.</param>
        /// <returns>A new instance of a CfgVarMetadataBlock.</returns>
        public static CfgVarMetadataBlock Inflate(System.IO.Stream stream)
        {
            CfgVarMetadataBlock metadataBlock = null;

            using (var reader = new INTV.Core.Utility.BinaryReader(stream))
            {
                metadataBlock = Inflate(reader);
            }
            return(metadataBlock);
        }
Esempio n. 2
0
        /// <summary>
        /// Inflates all the recognizable metadata from a .CFG file from the given stream.
        /// </summary>
        /// <param name="stream">The stream containing the data to parse for CFGVAR metadata.</param>
        /// <returns>An enumerable of the recognizable metadata.</returns>
        /// <remarks>Callers should be dutiful in handling exceptions, as stream, Regex and other exceptions may result during parsing.
        /// Also note that this is a really simplistic parser, so it's possible that all sorts of holes exist.</remarks>
        public static IEnumerable <CfgVarMetadataBlock> InflateAll(System.IO.Stream stream)
        {
            var metadataBlocks = new List <CfgVarMetadataBlock>();

            var cfgFileSize  = (int)stream.Length;
            var cfgFileBytes = new byte[cfgFileSize];

            if (stream.Read(cfgFileBytes, 0, cfgFileSize) == cfgFileSize)
            {
                var          cfgFileContents = System.Text.Encoding.UTF8.GetString(cfgFileBytes, 0, cfgFileBytes.Length).Trim('\0');
                var          cfgFileLines    = cfgFileContents.Split(new[] { "\n", "\r\n" }, System.StringSplitOptions.RemoveEmptyEntries);
                var          currentSection  = string.Empty;
                const string VarsSection     = "[vars]";
                foreach (var cfgFileLine in cfgFileLines)
                {
                    var sectionMatch = Regex.Match(cfgFileLine, @"\[(.*?)\]");
                    if (sectionMatch.Success)
                    {
                        currentSection = sectionMatch.Value;
                    }
                    else if (currentSection.Equals(VarsSection, StringComparison.OrdinalIgnoreCase))
                    {
                        var cfgFileLineBytes = System.Text.Encoding.UTF8.GetBytes(cfgFileLine);
                        using (var cfgFileLineStream = new System.IO.MemoryStream(cfgFileLineBytes))
                        {
                            var metadataBlock = CfgVarMetadataBlock.Inflate(cfgFileLineStream);
                            if (metadataBlock != null)
                            {
                                metadataBlocks.Add(metadataBlock);
                            }
                        }
                    }
                }
            }

            return(metadataBlocks);
        }
Esempio n. 3
0
        /// <summary>
        /// Creates a new instance of a CfgVarMetadataBlock by inflating it from a BinaryReader.
        /// </summary>
        /// <param name="reader">The binary reader containing the data to deserialize to create the object.</param>
        /// <returns>A new instance of a CfgVarMetadataBlock.</returns>
        /// <remarks>It is assumed that the reader is currently positioned at the beginning of a serialized CFGVAR metadata entry.</remarks>
        public static CfgVarMetadataBlock Inflate(INTV.Core.Utility.BinaryReader reader)
        {
            CfgVarMetadataBlock metadataBlock = null;
            var metadataBlockType             = DecodeBlockType(reader);

            switch (metadataBlockType)
            {
            case CfgVarMetadataIdTag.Name:
            case CfgVarMetadataIdTag.ShortName:
            case CfgVarMetadataIdTag.Author:
            case CfgVarMetadataIdTag.GameArt:
            case CfgVarMetadataIdTag.Music:
            case CfgVarMetadataIdTag.SoundEffects:
            case CfgVarMetadataIdTag.VoiceActing:
            case CfgVarMetadataIdTag.Description:
            case CfgVarMetadataIdTag.Documentation:
            case CfgVarMetadataIdTag.BoxOrOtherArtwork:
            case CfgVarMetadataIdTag.ConceptDesign:
            case CfgVarMetadataIdTag.MoreInfo:
            case CfgVarMetadataIdTag.Publisher:
            case CfgVarMetadataIdTag.License:
            case CfgVarMetadataIdTag.Version:
                metadataBlock = new CfgVarMetadataString(metadataBlockType);
                break;

            case CfgVarMetadataIdTag.ReleaseDate:
            case CfgVarMetadataIdTag.Year:
            case CfgVarMetadataIdTag.BuildDate:
                metadataBlock = new CfgVarMetadataDate(metadataBlockType);
                break;

            case CfgVarMetadataIdTag.EcsCompatibility:
            case CfgVarMetadataIdTag.IntellivoiceCompatibility:
            case CfgVarMetadataIdTag.IntellivisionIICompatibility:
            case CfgVarMetadataIdTag.KeyboardComponentCompatibility:
            case CfgVarMetadataIdTag.TutorvisionCompatibility:
            case CfgVarMetadataIdTag.Ecs:
            case CfgVarMetadataIdTag.Voice:
            case CfgVarMetadataIdTag.IntellivisionII:
            case CfgVarMetadataIdTag.JlpAccelerators:
            case CfgVarMetadataIdTag.Jlp:
                metadataBlock = new CfgVarMetadataFeatureCompatibility(metadataBlockType);
                break;

            case CfgVarMetadataIdTag.LtoFlashMapper:
                metadataBlock = new CfgVarMetadataBoolean(metadataBlockType);
                break;

            case CfgVarMetadataIdTag.JlpFlash:
                metadataBlock = new CfgVarMetadataInteger(metadataBlockType);
                break;

            default:
                break;
            }
            if (metadataBlock != null)
            {
                metadataBlock._deserializeByteCount = (int)reader.BaseStream.Length;
                metadataBlock.Deserialize(reader);
            }
            return(metadataBlock);
        }