CSPspEmu.Hle.Vfs.Iso.HleIoDriverIso.IoOpen C# (CSharp) Method

IoOpen() public method

public IoOpen ( HleIoDrvFileArg HleIoDrvFileArg, string FileName, HleIoFlags Flags, SceMode Mode ) : int
HleIoDrvFileArg HleIoDrvFileArg
FileName string
Flags HleIoFlags
Mode SceMode
return int
        public unsafe int IoOpen(HleIoDrvFileArg HleIoDrvFileArg, string FileName, HleIoFlags Flags, SceMode Mode)
        {
            // Ignore the filename in "umd0:xxx".
            // Using umd0: is always opening the whole UMD in sector block mode,
            // ignoring the file name specified after the colon.
            if (HleIoDrvFileArg.DriverName.ToLower().StartsWith("umd"))
            {
                FileName = "";
            }

            // disc0:/sce_lbn0x5fa0_size0x1428
            //Console.WriteLine(":::::::::" + FileName);
            if (FileName == "")
            {
                HleIoDrvFileArg.FileArgument = new IsoFileArgument()
                {
                    IsoNode = null,
                    StartSector = 0,
                    Size = Iso.Stream.Length,
                    Stream = Iso.Stream,
                };
                return 0;
            }

            if (FileName.StartsWith("/sce_"))
            {
                int Sector = 0, Size = 0;
                var Parts = FileName.Substring(5).Split('_');
                foreach (var Part in Parts)
                {
                    if (Part.StartsWith("lbn"))
                    {
                        var Number = Part.Substring(3);
                        Sector = NumberUtils.ParseIntegerConstant(Number, 16);
                    }
                    else if (Part.StartsWith("size"))
                    {
                        var Number = Part.Substring(4);
                        Size = NumberUtils.ParseIntegerConstant(Number, 16);
                    }
                    else
                    {
                        throw(new NotImplementedException("Can't handle special filename '" + FileName + "' part '" + Part + "'"));
                    }
                    //Console.WriteLine(Part);
                }
                //Console.WriteLine("SPECIAL({0}, {1})", lbn, size);
                //Console.WriteLine("SPECIAL!!!!!!!!!!!!!!!!!!!!");
                HleIoDrvFileArg.FileArgument = new IsoFileArgument()
                {
                    IsoNode = null,
                    StartSector = Sector,
                    Size = Size,
                    Stream = Iso.Stream.SliceWithLength(Sector * IsoFile.SectorSize, Size),
                };
                return 0;
            }

            //Console.WriteLine(FileName);
            var IsoNode = Iso.Root.Locate(FileName);
            ;
            HleIoDrvFileArg.FileArgument = new IsoFileArgument()
            {
                IsoNode = IsoNode,
                StartSector = IsoNode.DirectoryRecord.Extent,
                Size = IsoNode.DirectoryRecord.Size,
                Stream = IsoNode.Open(),
            };
            return 0;
        }