コード例 #1
0
        public IList <IArchiveFileInfo> Load(Stream input)
        {
            using var br = new BinaryReaderX(input, true, ByteOrder.BigEndian);

            // Read header
            var header = br.ReadType <U8Header>();

            // Parse file system
            var fileSystemParser = new DefaultU8FileSystem(UPath.Root);

            return(fileSystemParser.Parse(input, header.entryDataOffset, header.entryDataSize, 0).ToArray());
        }
コード例 #2
0
        public IList <IArchiveFileInfo> Load(Stream input)
        {
            using var br = new BinaryReaderX(input, true, ByteOrder.BigEndian);
            var result = new List <IArchiveFileInfo>();

            // Read header
            _header = br.ReadType <GcDiscHeader>();

            // Special treatment for apploader size
            input.Position = 0x2440;
            var appLoader = br.ReadType <GcAppLoader>();

            // Collect system files
            result.Add(new ArchiveFileInfo(new SubStream(input, 0x440, 0x2000), "sys/bi2.bin"));
            result.Add(new ArchiveFileInfo(new SubStream(input, 0x2440, (appLoader.size + appLoader.trailerSize + 0x1F) & ~0x1F), "sys/appldr.bin"));
            result.Add(new ArchiveFileInfo(new SubStream(input, _header.execOffset, _header.fstOffset - _header.execOffset), "sys/main.dol"));

            // Collect file system files
            var u8 = new DefaultU8FileSystem(UPath.Root);

            result.AddRange(u8.Parse(input, _header.fstOffset, _header.fstSize, 0));

            return(result);
        }