예제 #1
0
        public unsafe void _IoGetstat(IsoNode IsoNode, SceIoStat *Stat)
        {
            //IsoNode.DirectoryRecord.Date
            Stat->Mode  = 0;
            Stat->Mode |= SceMode.UserCanRead | SceMode.UserCanWrite | SceMode.UserCanExecute;
            Stat->Mode |= SceMode.GroupCanRead | SceMode.GroupCanWrite | SceMode.GroupCanExecute;
            Stat->Mode |= SceMode.OtherCanRead | SceMode.OtherCanWrite | SceMode.OtherCanExecute;

            if (IsoNode.IsDirectory)
            {
                Stat->Mode       = SceMode.Directory;
                Stat->Attributes = IOFileModes.Directory;
            }
            else
            {
                Stat->Mode       = SceMode.File;
                Stat->Attributes = IOFileModes.File | IOFileModes.CanRead | IOFileModes.CanWrite | IOFileModes.CanExecute;
            }
            Stat->Size                 = IsoNode.DirectoryRecord.Size;
            Stat->TimeCreation         = ScePspDateTime.FromDateTime(IsoNode.DirectoryRecord.Date);
            Stat->TimeLastAccess       = ScePspDateTime.FromDateTime(IsoNode.DirectoryRecord.Date);
            Stat->TimeLastModification = ScePspDateTime.FromDateTime(IsoNode.DirectoryRecord.Date);
            Stat->DeviceDependentData0 = IsoNode.DirectoryRecord.Extent;

            //Stat[0].DeviceDependentData
            //throw new NotImplementedException();
        }
예제 #2
0
        public int sceRtcGetCurrentClock(out ScePspDateTime DateTime, int TimeZone)
        {
            PspRtc.Update();
            var CurrentDateTime = PspRtc.CurrentDateTime;

            try
            {
                CurrentDateTime += TimeSpan.FromMinutes(TimeZone);
            }
            catch
            {
            }

            DateTime = new ScePspDateTime()
            {
                Year        = (ushort)CurrentDateTime.Year,
                Month       = (ushort)CurrentDateTime.Month,
                Day         = (ushort)CurrentDateTime.Day,
                Hour        = (ushort)CurrentDateTime.Hour,
                Minute      = (ushort)CurrentDateTime.Minute,
                Second      = (ushort)CurrentDateTime.Second,
                Microsecond = (uint)(CurrentDateTime.GetTotalMicroseconds() % 1000000L),
            };

            return(0);
        }
예제 #3
0
        public static unsafe HleIoDirent ConvertFileSystemInfoToHleIoDirent(FileSystemInfo FileSystemInfo)
        {
            var HleIoDirent   = default(HleIoDirent);
            var FileInfo      = (FileSystemInfo as FileInfo);
            var DirectoryInfo = (FileSystemInfo as DirectoryInfo);

            {
                if (DirectoryInfo != null)
                {
                    HleIoDirent.Stat.Size       = 4096;
                    HleIoDirent.Stat.Mode       = (SceMode)4605;
                    HleIoDirent.Stat.Attributes = IOFileModes.Directory;
                }
                else
                {
                    HleIoDirent.Stat.Size       = FileInfo.Length;
                    HleIoDirent.Stat.Mode       = (SceMode)8628;
                    HleIoDirent.Stat.Attributes = IOFileModes.File;
                }
                HleIoDirent.Name = FileSystemInfo.Name.ToLower();

                HleIoDirent.Stat.TimeCreation         = ScePspDateTime.FromDateTime(FileSystemInfo.CreationTime);
                HleIoDirent.Stat.TimeLastAccess       = ScePspDateTime.FromDateTime(FileSystemInfo.LastAccessTime);
                HleIoDirent.Stat.TimeLastModification = ScePspDateTime.FromDateTime(FileSystemInfo.LastWriteTime);

                HleIoDirent.Stat.DeviceDependentData0 = 10;
            }
            return(HleIoDirent);
        }
예제 #4
0
        private void buildDotDirectoryEntry(sbyte[] directoryData, int offset, FatFileInfo fileInfo, string dotName, ScePspDateTime alternateLastModified)
        {
            storeSectorString(directoryData, offset + 0, dotName, 8 + 3);

            // File attributes: directory
            storeSectorInt8(directoryData, offset + 11, 0x10);

            // Has extended attributes?
            storeSectorInt8(directoryData, offset + 12, 0);

            ScePspDateTime lastModified = fileInfo.LastModified;

            if (lastModified == null)
            {
                // The root directory has no lastModified date/time,
                // rather use the date/time of the sub-directory.
                lastModified = alternateLastModified;
            }
            storeSectorInt8(directoryData, offset + 13, 0);             // Milliseconds, always set to 0 by the PSP

            int createTime = lastModified.hour << 11;

            createTime |= lastModified.minute << 5;
            createTime |= lastModified.second >> 1;
            storeSectorInt16(directoryData, offset + 14, createTime);

            int createDate = (lastModified.year - 1980) << 9;

            createDate |= lastModified.month << 5;
            createDate |= lastModified.day;
            storeSectorInt16(directoryData, offset + 16, createDate);

            storeSectorInt16(directoryData, offset + 18, createDate);

            int[] clusters = fileInfo.Clusters;
            if (clusters != null)
            {
                storeSectorInt16(directoryData, offset + 20, (int)((uint)clusters[0] >> 16));
            }
            else
            {
                storeSectorInt16(directoryData, offset + 20, 0);                 // Empty file
            }

            storeSectorInt16(directoryData, offset + 22, createTime);
            storeSectorInt16(directoryData, offset + 24, createDate);

            if (clusters != null)
            {
                storeSectorInt16(directoryData, offset + 26, clusters[0] & 0xFFFF);
            }
            else
            {
                storeSectorInt16(directoryData, offset + 26, 0);                 // Empty file
            }

            // File size
            storeSectorInt32(directoryData, offset + 28, 0);
        }
예제 #5
0
        public virtual int sceRtcSetWin32FileTime(TPointer dateAddr, long time)
        {
            ScePspDateTime dateTime = ScePspDateTime.fromFILETIMETime(time);

            dateTime.write(dateAddr);

            return(0);
        }
예제 #6
0
        public virtual int sceRtcSetDosTime(TPointer dateAddr, int time)
        {
            ScePspDateTime dateTime = ScePspDateTime.fromMSDOSTime(time);

            dateTime.write(dateAddr);

            return(0);
        }
예제 #7
0
        public virtual int sceRtcGetCurrentClockLocalTime(TPointer addr)
        {
            ScePspDateTime pspTime = new ScePspDateTime();

            pspTime.write(addr);

            return(0);
        }
예제 #8
0
        public virtual int sceRtcSetTime64_t(TPointer dateAddr, long time)
        {
            ScePspDateTime dateTime = ScePspDateTime.fromUnixTime(time);

            dateTime.write(dateAddr);

            return(0);
        }
예제 #9
0
 public virtual void init(int mode, int attr, long size, ScePspDateTime ctime, ScePspDateTime atime, ScePspDateTime mtime)
 {
     this.mode  = mode;
     this.attr  = attr;
     this.size  = size;
     this.ctime = ctime;
     this.atime = atime;
     this.mtime = mtime;
 }
예제 #10
0
        public virtual int sceRtcSetTick(TPointer timeAddr, TPointer64 ticksAddr)
        {
            long           ticks = ticksAddr.Value - rtcMagicOffset;
            ScePspDateTime time  = ScePspDateTime.fromMicros(ticks);

            time.write(timeAddr);

            return(0);
        }
예제 #11
0
 public FatFileInfo(string deviceName, string dirName, string fileName, bool directory, bool readOnly, ScePspDateTime lastModified, long fileSize)
 {
     this.deviceName   = deviceName;
     this.dirName      = dirName;
     this.fileName     = fileName;
     this.directory    = directory;
     this.readOnly     = readOnly;
     this.lastModified = lastModified;
     this.fileSize     = fileSize;
 }
예제 #12
0
 public int sceRtcSetTick(ScePspDateTime *Date, ulong *Ticks)
 {
     try
     {
         *Date = ScePspDateTime.FromDateTime(new DateTime((long)(*Ticks * 10)));
         return(0);
     }
     catch (Exception Exception)
     {
         Console.Error.WriteLine(Exception);
         return(-1);
     }
 }
예제 #13
0
 public int sceRtcGetTick(ref ScePspDateTime Date, out ulong Tick)
 {
     try
     {
         Tick = (ulong)Date.ToDateTime().GetTotalMicroseconds();
         return(0);
     }
     catch (Exception)
     {
         //Console.Error.WriteLine("sceRtcGetTick.Date: " + *Date);
         //Console.Error.WriteLine(Exception);
         throw new SceKernelException(SceKernelErrors.ERROR_INVALID_VALUE);
     }
 }
예제 #14
0
        protected internal override void read()
        {
            mode = read32();
            attr = read32();
            size = read64();

            ctime = new ScePspDateTime();
            atime = new ScePspDateTime();
            mtime = new ScePspDateTime();
            read(ctime);
            read(atime);
            read(mtime);

            read32Array(reserved);
        }
예제 #15
0
        public virtual int sceRtcGetTime_t(ScePspDateTime dateTime, TPointer32 timeAddr)
        {
            DateTime cal = new DateTime();

            cal = new DateTime(dateTime.year, dateTime.month - 1, dateTime.day, dateTime.hour, dateTime.minute, dateTime.second);
            int unixtime = (int)(cal.Ticks / 1000L);

            //if (log.DebugEnabled)
            {
                Console.WriteLine(string.Format("sceRtcGetTime_t returning {0:D}", unixtime));
            }

            timeAddr.setValue(unixtime);

            return(0);
        }
예제 #16
0
        public virtual int sceRtcGetTime64_t(ScePspDateTime dateTime, TPointer64 timeAddr)
        {
            DateTime cal = new DateTime();

            cal = new DateTime(dateTime.year, dateTime.month - 1, dateTime.day, dateTime.hour, dateTime.minute, dateTime.second);
            long unixtime = cal.Ticks / 1000L;

            //if (log.DebugEnabled)
            {
                Console.WriteLine(string.Format("sceRtcGetTime64_t psptime={0} returning unixtime={1:D}", dateTime, unixtime));
            }

            timeAddr.Value = unixtime;

            return(0);
        }
예제 #17
0
        public virtual int sceRtcGetWin32FileTime(ScePspDateTime dateTime, TPointer64 timeAddr)
        {
            DateTime cal = new DateTime();

            cal = new DateTime(dateTime.year, dateTime.month - 1, dateTime.day, dateTime.hour, dateTime.minute, dateTime.second);
            int filetimetime = (int)(cal.Ticks / 1000L);

            //if (log.DebugEnabled)
            {
                Console.WriteLine(string.Format("sceRtcGetWin32FileTime returning {0:D}", filetimetime));
            }

            timeAddr.Value = filetimetime;

            return(0);
        }
예제 #18
0
        public virtual int sceRtcCheckValid(ScePspDateTime time)
        {
            DateTime cal = new GregorianCalendar(time.year, time.month - 1, time.day, time.hour, time.minute, time.second);

            int result = 0;

            if (time.year < 1582 || time.year > 3000)
            {             // What are valid years?
                result = PSP_TIME_INVALID_YEAR;
            }
            else if (time.month < 1 || time.month > 12)
            {
                result = PSP_TIME_INVALID_MONTH;
            }
            else if (time.day < 1 || time.day > 31)
            {
                result = PSP_TIME_INVALID_DAY;
            }
            else if (time.hour < 0 || time.hour > 23)
            {
                result = PSP_TIME_INVALID_HOUR;
            }
            else if (time.minute < 0 || time.minute > 59)
            {
                result = PSP_TIME_INVALID_MINUTES;
            }
            else if (time.second < 0 || time.second > 59)
            {
                result = PSP_TIME_INVALID_SECONDS;
            }
            else if (time.microsecond < 0 || time.microsecond >= 1000000)
            {
                result = PSP_TIME_INVALID_MICROSECONDS;
            }
            else if (cal.Day != time.day)
            {             // Check if this is a valid day of the month
                result = PSP_TIME_INVALID_DAY;
            }

            //if (log.DebugEnabled)
            {
                Console.WriteLine(string.Format("sceRtcCheckValid time={0}, cal={1}, returning 0x{2:X8}", time, cal, result));
            }

            return(result);
        }
예제 #19
0
        //[HlePspNotImplemented]
        public int sceRtcGetCurrentClockLocalTime(out ScePspDateTime Time)
        {
            PspRtc.Update();
            var CurrentDateTime = PspRtc.CurrentDateTime;

            Time = new ScePspDateTime()
            {
                Year        = (ushort)CurrentDateTime.Year,
                Month       = (ushort)CurrentDateTime.Month,
                Day         = (ushort)CurrentDateTime.Day,
                Hour        = (ushort)CurrentDateTime.Hour,
                Minute      = (ushort)CurrentDateTime.Minute,
                Second      = (ushort)CurrentDateTime.Second,
                Microsecond = (uint)(CurrentDateTime.Millisecond * 1000),
            };

            return(0);
        }
예제 #20
0
        public virtual int sceRtcGetTick(ScePspDateTime time, TPointer64 ticksAddr)
        {
            // use java library to convert a date to seconds, then multiply it by the tick resolution
            DateTime cal = new GregorianCalendar(time.year, time.month - 1, time.day, time.hour, time.minute, time.second);

            cal.set(DateTime.MILLISECOND, time.microsecond / 1000);
            cal.TimeZone = ScePspDateTime.GMT;
            long ticks = rtcMagicOffset + (cal.Ticks * 1000L) + (time.microsecond % 1000);

            ticksAddr.Value = ticks;

            //if (log.DebugEnabled)
            {
                Console.WriteLine(string.Format("sceRtcGetTick returning {0:D}", ticks));
            }

            return(0);
        }
예제 #21
0
        public unsafe int IoGetstat(HleIoDrvFileArg HleIoDrvFileArg, string FileName, SceIoStat *Stat)
        {
            var RealFileName = GetFullNormalizedAndSanitizedPath(FileName);

            //Console.WriteLine(RealFileName);

            Stat->Attributes = IOFileModes.CanExecute | IOFileModes.CanRead | IOFileModes.CanWrite;
            Stat->Mode       = 0;
            Stat->Mode       = SceMode.UserCanExecute | SceMode.UserCanRead | SceMode.UserCanWrite;
            Stat->Mode       = SceMode.GroupCanExecute | SceMode.GroupCanRead | SceMode.GroupCanWrite;
            Stat->Mode       = SceMode.OtherCanExecute | SceMode.OtherCanRead | SceMode.OtherCanWrite;

            FileSystemInfo FileSystemInfo = null;

            if (File.Exists(RealFileName))
            {
                var FileInfo = new FileInfo(RealFileName);
                FileSystemInfo    = FileInfo;
                Stat->Size        = FileInfo.Length;
                Stat->Mode       |= SceMode.File;
                Stat->Attributes |= IOFileModes.File;
            }
            else if (Directory.Exists(RealFileName))
            {
                var DirectoryInfo = new DirectoryInfo(RealFileName);
                FileSystemInfo    = DirectoryInfo;
                Stat->Mode       |= SceMode.Directory;
                Stat->Attributes |= IOFileModes.Directory;
            }
            else
            {
                throw(new FileNotFoundException("Can't find file '" + RealFileName + "'"));
            }

            Stat->TimeCreation         = ScePspDateTime.FromDateTime(FileSystemInfo.CreationTimeUtc);
            Stat->TimeLastAccess       = ScePspDateTime.FromDateTime(FileSystemInfo.LastAccessTimeUtc);
            Stat->TimeLastModification = ScePspDateTime.FromDateTime(FileSystemInfo.LastWriteTimeUtc);

            return(0);
        }
예제 #22
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void read(pspsharp.state.StateInputStream stream) throws java.io.IOException
        public virtual void read(StateInputStream stream)
        {
            stream.readVersion(STATE_VERSION);
            deviceName = stream.readString();
            dirName    = stream.readString();
            fileName   = stream.readString();
            fileName83 = stream.readString();
            directory  = stream.readBoolean();
            readOnly   = stream.readBoolean();
            int time = stream.readInt();

            if (time == 0)
            {
                lastModified = null;
            }
            else
            {
                lastModified = ScePspDateTime.fromMSDOSTime(time);
            }
            fileSize = stream.readLong();
            clusters = stream.readIntsWithLength();
            fileData = stream.readBytesWithLength();
            closeVirtualFile();
        }
예제 #23
0
        public override int ioGetstat(string fileName, SceIoStat stat)
        {
            File file = getFile(fileName);

            if (!file.exists())
            {
                return(SceKernelErrors.ERROR_ERRNO_FILE_NOT_FOUND);
            }

            // Set attr (dir/file) and copy into mode
            int attr = 0;

            if (file.Directory)
            {
                attr |= 0x10;
            }
            if (file.File)
            {
                attr |= 0x20;
            }

            int mode = (file.canRead() ? 4 : 0) + (file.canWrite() ? 2 : 0) + (file.canExecute() ? 1 : 0);

            // Octal extend into user and group
            mode  = mode + (mode << 3) + (mode << 6);
            mode |= attr << 8;

            // Java can't see file create/access time
            ScePspDateTime ctime = ScePspDateTime.fromUnixTime(file.lastModified());
            ScePspDateTime atime = ScePspDateTime.fromUnixTime(0);
            ScePspDateTime mtime = ScePspDateTime.fromUnixTime(file.lastModified());

            stat.init(mode, attr, file.Length(), ctime, atime, mtime);

            return(0);
        }
예제 #24
0
 public int sceRtcSetTime_t(out ScePspDateTime date, uint time)
 {
     date = ScePspDateTime.FromDateTime(DateTimeRange.ConvertFromUnixTimestamp(time));
     return(0);
 }
예제 #25
0
 public int sceRtcGetTime_t(ref ScePspDateTime DateTime, out uint UnixTime)
 {
     UnixTime = (uint)DateTime.ToUnixTimestamp();
     return(0);
 }
예제 #26
0
        public int sceRtcGetTime64_t(ref ScePspDateTime DatePointer, ref long UnixTimePointer)
        {
            UnixTimePointer = DatePointer.ToUnixTimestamp();

            return(0);
        }
예제 #27
0
 public virtual int sceRtcGetDosTime_660(ScePspDateTime dateTime, TPointer32 timeAddr)
 {
     return(sceRtcGetDosTime(dateTime, timeAddr));
 }
예제 #28
0
        private sbyte[] addDirectoryEntry(sbyte[] directoryData, FatFileInfo fileInfo)
        {
            string fileName    = fileInfo.FileName;
            string fileName83  = fileInfo.FileName83;
            string fileName8_3 = convertFileName83To8_3(fileName83);

            if (isLongFileName(fileName8_3, fileName))
            {
                int checksum = getFileNameChecksum(fileName83);
                directoryData = addLongFileNameDirectoryEntries(directoryData, fileName, checksum);
            }

            int offset = directoryData.Length;

            directoryData = Utilities.extendArray(directoryData, directoryTableEntrySize);

            storeSectorString(directoryData, offset + 0, fileName83, 8 + 3);

            int fileAttributes = 0x20;             // Archive attribute

            if (fileInfo.ReadOnly)
            {
                fileAttributes |= 0x01;                 // Read Only attribute
            }
            if (fileInfo.Directory)
            {
                fileAttributes |= 0x10;                 // Sub-directory attribute
            }
            storeSectorInt8(directoryData, offset + 11, fileAttributes);

            // Has extended attributes?
            storeSectorInt8(directoryData, offset + 12, 0);

            ScePspDateTime lastModified = fileInfo.LastModified;

            storeSectorInt8(directoryData, offset + 13, 0);             // Milliseconds always set to 0 by the PSP

            int createTime = lastModified.hour << 11;

            createTime |= lastModified.minute << 5;
            createTime |= lastModified.second >> 1;
            storeSectorInt16(directoryData, offset + 14, createTime);

            int createDate = (lastModified.year - 1980) << 9;

            createDate |= lastModified.month << 5;
            createDate |= lastModified.day;
            storeSectorInt16(directoryData, offset + 16, createDate);

            storeSectorInt16(directoryData, offset + 18, createDate);

            int[] clusters = fileInfo.Clusters;
            if (clusters != null)
            {
                storeSectorInt16(directoryData, offset + 20, (int)((uint)clusters[0] >> 16));
            }
            else
            {
                storeSectorInt16(directoryData, offset + 20, 0);                 // Empty file
            }

            storeSectorInt16(directoryData, offset + 22, createTime);
            storeSectorInt16(directoryData, offset + 24, createDate);

            if (clusters != null)
            {
                storeSectorInt16(directoryData, offset + 26, clusters[0] & 0xFFFF);
            }
            else
            {
                storeSectorInt16(directoryData, offset + 26, 0);                 // Empty file
            }

            int fileSize = (int)fileInfo.FileSize;

            if (fileInfo.Directory)
            {
                fileSize = 0;
            }
            storeSectorInt32(directoryData, offset + 28, fileSize);

            return(directoryData);
        }
예제 #29
0
 public SceIoStat(int mode, int attr, long size, ScePspDateTime ctime, ScePspDateTime atime, ScePspDateTime mtime)
 {
     init(mode, attr, size, ctime, atime, mtime);
 }