Ejemplo n.º 1
0
 private void Set109Fats(XLSHeader header, List <Sector> sectors, List <SectorIndex> index)
 {
     foreach (var item in header.Fats)
     {
         var i = item.ToInt();
         if (!item.IsFree)
         {
             FatSector fat = new FatSector(sectors[i].ToStorage().ToStream());
             index.AddRange(fat.Fats);
             sectors[i] = fat;
         }
     }
 }
Ejemplo n.º 2
0
        private static void SetMiniFats(XLSHeader header, List <Sector> sectors, List <SectorIndex> index)
        {
            SectorIndex miniFatSect;
            int         miniFatCount;

            for (miniFatSect = header.MiniFatStart, miniFatCount = 0;
                 !miniFatSect.IsEndOfChain && miniFatCount < header.MiniFatCount;
                 miniFatSect = index[miniFatSect.ToInt()], ++miniFatCount)
            {
                MiniFatSector miniFat = new MiniFatSector(sectors[miniFatSect.ToInt()].ToStorage().ToStream());
                sectors[miniFatSect.ToInt()] = miniFat;
            }
        }
Ejemplo n.º 3
0
        public XLSFile(Stream stream)
        {
            var header  = new XLSHeader(stream);
            var sectors = GetSectors(stream);
            List <SectorIndex> index = new List <SectorIndex>((int)(MaxSectorIndex * header.FatCount));

            Set109Fats(header, sectors, index);
            SetRemainFats(header, sectors, index);
            SetMiniFats(header, sectors, index);
            var dirs = SetDirs(header, sectors, index);

            m_Root = XLSDirectoryFactory.CreateEntry(dirs, sectors, index);
            stream.Close();
        }
Ejemplo n.º 4
0
        private List <DirectorySectorData> SetDirs(XLSHeader header, List <Sector> sectors, List <SectorIndex> index)
        {
            var dirs = new List <DirectorySectorData>();

            for (SectorIndex dirSect = header.DirStart;
                 !dirSect.IsEndOfChain;
                 dirSect = index[dirSect.ToInt()])
            {
                DirectorySector dir = new DirectorySector(sectors[dirSect.ToInt()].ToStorage().ToStream());

                foreach (DirectorySectorData entry in dir.Entries)
                {
                    dirs.Add(entry);
                }
                sectors[dirSect.ToInt()] = dir;
            }
            return(dirs);
        }
Ejemplo n.º 5
0
        private void SetRemainFats(XLSHeader header, List <Sector> sectors, List <SectorIndex> index)
        {
            int         difCount;
            SectorIndex difIndex;

            for (difIndex = header.DifStart, difCount = 0;
                 !difIndex.IsEndOfChain && difCount < header.DifCount;
                 ++difCount)
            {
                DifSector dif = new DifSector(sectors[difIndex.ToInt()].ToStorage().ToStream());
                sectors[difIndex.ToInt()] = dif;

                foreach (var item in dif.Fats.Where(i => !i.IsFree))
                {
                    var       i   = item.ToInt();
                    FatSector fat = new FatSector(sectors[i].ToStorage().ToStream());
                    index.AddRange(fat.Fats);
                    sectors[i] = fat;
                }
            }
        }