private bool Sys_Lseek() { // get fd index UInt64 fd_index = RBX; if (fd_index >= (UInt64)FDCount) { Terminate(ErrorCode.OutOfBounds); return(false); } // get fd IFileWrapper fd = FileDescriptors[fd_index]; if (fd == null) { Terminate(ErrorCode.FDNotInUse); return(false); } // make sure it can seek if (!fd.CanSeek()) { Terminate(ErrorCode.FilePermissions); return(false); } int raw_mode = (int)RDX; SeekOrigin seek_origin; // process raw mode if (raw_mode == (int)SeekMode.set) { seek_origin = SeekOrigin.Begin; } else if (raw_mode == (int)SeekMode.cur) { seek_origin = SeekOrigin.Current; } else if (raw_mode == (int)SeekMode.end) { seek_origin = SeekOrigin.End; } // otherwise unknown seek mode - return -1 else { RAX = ~(UInt64)0; return(true); } // attempt the seek try { RAX = (UInt64)fd.Seek((Int64)RCX, seek_origin); } catch (Exception) { RAX = ~(UInt64)0; } return(true); }