Ejemplo n.º 1
0
 void SetType(AriEntry entry)
 {
     if (2 == entry.Mode)
     {
         entry.Type = "audio";
     }
     else if (1 == entry.Mode)
     {
         entry.Type = "image";
     }
     else
     {
         entry.Type = FormatCatalog.Instance.GetTypeFromName(entry.Name);
     }
 }
Ejemplo n.º 2
0
        List <Entry> ReadAriIndex(ArcView file, string ari_name)
        {
            long arc_offset = 4;

            using (var ari = VFS.OpenView(ari_name))
            {
                long index_offset = 0;
                while (index_offset + 4 < ari.MaxOffset)
                {
                    int name_len = ari.View.ReadInt32(index_offset);
                    var name     = ReadName(ari, index_offset + 4, name_len);
                    if (null == name)
                    {
                        return(null);
                    }
                    var entry = new AriEntry {
                        Name = name
                    };
                    index_offset      += name_len + 4;
                    entry.Mode         = ari.View.ReadUInt16(index_offset);
                    entry.Size         = ari.View.ReadUInt32(index_offset + 2);
                    entry.UnpackedSize = 0;
                    SetType(entry);
                    index_offset += 6;
                    arc_offset   += name_len + 10;
                    if (1 == entry.Mode)
                    {
                        entry.IsPacked = true;
                        arc_offset    += 4;
                    }
                    entry.Offset = arc_offset;
                    if (!entry.CheckPlacement(file.MaxOffset))
                    {
                        return(null);
                    }
                    arc_offset += entry.Size;
                    m_dir.Add(entry);
                }
            }
            return(m_dir);
        }
Ejemplo n.º 3
0
        List <Entry> BuildIndex(ArcView file)
        {
            long arc_offset = 4;

            while (arc_offset + 4 < file.MaxOffset)
            {
                int name_len = file.View.ReadInt32(arc_offset);
                var name     = ReadName(file, arc_offset + 4, name_len);
                if (null == name)
                {
                    return(null);
                }
                var entry = new AriEntry {
                    Name = name
                };
                arc_offset += name_len + 4;
                entry.Mode  = file.View.ReadUInt16(arc_offset);
                entry.Size  = file.View.ReadUInt32(arc_offset + 2);
                SetType(entry);
                arc_offset += 6;
                if (1 == entry.Mode)
                {
                    entry.IsPacked     = true;
                    entry.UnpackedSize = file.View.ReadUInt32(arc_offset);
                    arc_offset        += 4;
                }
                entry.Offset = arc_offset;
                if (!entry.CheckPlacement(file.MaxOffset))
                {
                    return(null);
                }
                arc_offset += entry.Size;
                m_dir.Add(entry);
            }
            return(m_dir);
        }