T8SuitePro.Disassembler.LoadLabels C# (CSharp) Method

LoadLabels() private method

private LoadLabels ( long addr, FileStream fs, BinaryReader br, long offset ) : void
addr long
fs System.IO.FileStream
br System.IO.BinaryReader
offset long
return void
        private void LoadLabels(long addr, FileStream fs, BinaryReader br, long offset)
        {
            //logger.Debug("Load labels from addr: " + addr.ToString("X8"));
            MNemonicHelper label = new MNemonicHelper();
            MNemonicCollection functionList = new MNemonicCollection();
            label.Mnemonic = "Function_" + addr.ToString("X8") + ":";
            label.Address = addr;

            if (AddressInLabelList(addr))
            {
                return;
            }
            _labels.Add(label);
            //logger.Debug("Added label: " + label.Mnemonic + " " + label.Address.ToString("X8"));

            long offaddr = 0;
            if (addr == 0) return;
            if (addr > offset)
            {
                fs.Position = addr - offset;
            }
            else
            {
                fs.Position = addr;
            }

            bool endsub = false;
            bool issub = false;
            bool isjump = false;
            string str;
            while (!endsub)
            {
                byte ch1 = br.ReadByte();
                byte ch2 = br.ReadByte();
                uint i = (uint)((ch1 << 8) + ch2);
                uint seg = (uint)(((addr + offaddr) & 0xffff0000) >> 16);
                uint adr = (uint)(((addr + offaddr) & 0xffff));
                uint t = disasm(out str, addr, ch1, ch2, offaddr, br, out endsub, out issub, out isjump);
                if (str != "")
                {
                    MNemonicHelper mnhelper = new MNemonicHelper();
                    mnhelper.Mnemonic = str;
                    mnhelper.Address = addr;
                    //realAddr = fs.Position + offset;
                    //mnhelper.Address = realAddr;
                    functionList.Add(mnhelper);
                }
                if (t > 5) t = 5;
                //addr += t;
                switch (t)
                {
                    case 0:
                    case 1:
                        addr += 2L;
                        break;
                    case 2:
                        addr += 4L;
                        break;
                    case 3:
                        addr += 6L;
                        break;
                    case 4:
                        addr += 8L;
                        break;
                    case 5:
                        addr += 10L;
                        break;
                }
                if (issub)
                {
                    if (trgdata != 0)
                    {
                        if (!AddressInLabelList(trgdata))
                        {
                            if (trgdata < 0x00100000) // 0x00F00000 == T7
                            {
                                long position = fs.Position;
                                LoadLabels(trgdata, fs, br, 0); //offset
                                fs.Position = position; // reset to previous position
                            }
                        }
                    }
                }
                if (endsub)
                {
                }
            }
        }