Ejemplo n.º 1
0
        public ResourceTable(FileStream r)
        {
            baseFileOffset = (int)r.Position;

            alignShift = r.ReadUInt16();
            names      = null;

            // Read the types
            var typesList = new List <ResourceTypeTable>();

            while (true)
            {
                var save = r.Position;
                var rt   = new ResourceTypeTable(r);
                if (rt.type == 0)
                {
                    break;
                }
                typesList.Add(rt);
            }
            types = typesList.ToArray();

            // Read the names
            names = new Dictionary <int, string>();
            while (true)
            {
                int offset =
                    (int)r.Position - baseFileOffset;
                var str = r.ReadLengthPrefixedString();
                if (str == null)
                {
                    break;
                }

                names.Add(offset, str);
            }

//            r.Seek(save, SeekOrigin.Begin);

            foreach (var rt in types)
            {
                rt.name = ResourceName(rt);
                foreach (var res in rt.resources)
                {
                    res.name   = ResourceName(res);
                    res.offset = (1 << alignShift) * res.offset;
                    res.length = (1 << alignShift) * res.length;
                }
            }
        }
Ejemplo n.º 2
0
 public string ResourceName(ResourceTypeTable rt)
 {
     if ((rt.type & 0x8000) != 0)
     {
         var name = ((Win16.ResourceType)(rt.type & ~0x8000)).ToString();
         if (char.IsDigit(name[0]))
         {
             name = "#" + name;
         }
         return(name);
     }
     else
     {
         return(names[rt.type]);
     }
 }
Ejemplo n.º 3
0
 public ResourceTable()
 {
     types = new ResourceTypeTable[0];
     names = new Dictionary <int, string>();
 }