Exemple #1
0
 public void SignalDestroy()
 {
     if (RootBlock != null)
     {
         RootBlock.SignalDestroy();
     }
 }
Exemple #2
0
 public void OnLocationChanged()
 {
     if (RootBlock != null)
     {
         RootBlock.FireAction(Anchor.OnLocationObtained);
     }
 }
Exemple #3
0
    public static void CreateRoot(int x, int y, int id = -1, int colorsId = -1)
    {
        if (id == -1)
        {
            id = Root.Count;
        }
        if (colorsId == -1)
        {
            colorsId = Colors.GetRandomFreeId();
        }
        var root = new Root();

        root.id = id;
        Root.Add(id, root);

        CreateRootCanvas(id, colorsId);
        CreateVisualsCanvas(id);

        var block = RootBlock.Create(x, y, id);

        root.block = block;

        CreateLeftRootPanel(id);
        CreateRightDirectionsPanels(id);
        CreateSlicedAudioClip(id);
    }
Exemple #4
0
 public void AttachFormData(short formID, FieldList storage)
 {
     if ((RootBlock != null) && (storage != null))
     {
         RootBlock.AttachFormData(formID, storage);
     }
 }
Exemple #5
0
        //
        internal void ParsePredicate(Token tok)
        {
            Advance(); //past 'predicate
            //
            AtomTypeDef clauseType = BuiltinDefs.Belief;

            if (CurrentToken.Kind == TokenKind.Type)
            {
                clauseType = RootBlock.InternAtomTypeDef(CurrentToken);
                Advance(); //past clauseType
            }
            //
            Token name = CurrentToken;

            Advance(); //past name
            //
            Token specName = TokenInstance.CSharp.ELEMENT;

            if (CurrentToken.Kind == TokenKind.RoundList)
            {
                specName = CurrentList[0];
                Advance(); //past (specname)
            }
            PredicateDef predDef = new PredicateDef(name, clauseType, specName);

            ParseProperties(predDef);
            RootBlock.AddEntityDef(predDef);
        }
Exemple #6
0
        public void ParseFile(string moduleName, Stream inStream, Transpiler t)
        {
            Translator  = t;
            RootBlock   = RootBlock.Create(moduleName + "Module");
            t.RootBlock = RootBlock;
            Preprocessor preprocessor = new Preprocessor();
            TokenList    list         = preprocessor.Read(inStream);

#if DEBUG_TOKENIZER
            Debug.Print("");
            Debug.Print("");
            //DebugTextWriter writer = new DebugTextWriter();
            StringWriter writer = new StringWriter();
            list.Print(writer);
            Debug.Print(writer.ToString());
            Debug.Print("");
            Debug.Print("");
#endif
            //
            //PushPolicy(RootPolicy);
            CreateState(list);
            //Visit(RootBlock);
            PushDialect(new ParserDialect(this));
            ParseLines(RootBlock);
            PopState();
            //PopPolicy();

            //TODO:This should go in the compiler class.
            RootBlock.Resolve();
            t.Visit(RootBlock);
            //
            t.Close();
        }
Exemple #7
0
        public void GetInformation(IMediaImage imagePlugin, Partition partition, out string information,
                                   Encoding encoding)
        {
            Encoding = encoding ?? Encoding.GetEncoding("iso-8859-1");
            byte[]    rootBlockSector = imagePlugin.ReadSector(partition.Start);
            RootBlock rootBlock       = Marshal.ByteArrayToStructureBigEndian <RootBlock>(rootBlockSector);

            var sbInformation = new StringBuilder();

            sbInformation.AppendLine("SmartFileSystem");

            sbInformation.AppendFormat("Volume version {0}", rootBlock.version).AppendLine();

            sbInformation.AppendFormat("Volume starts on device byte {0} and ends on byte {1}", rootBlock.firstbyte,
                                       rootBlock.lastbyte).AppendLine();

            sbInformation.
            AppendFormat("Volume has {0} blocks of {1} bytes each", rootBlock.totalblocks, rootBlock.blocksize).
            AppendLine();

            sbInformation.AppendFormat("Volume created on {0}",
                                       DateHandlers.UnixUnsignedToDateTime(rootBlock.datecreated).AddYears(8)).
            AppendLine();

            sbInformation.AppendFormat("Bitmap starts in block {0}", rootBlock.bitmapbase).AppendLine();

            sbInformation.AppendFormat("Admin space container starts in block {0}", rootBlock.adminspacecontainer).
            AppendLine();

            sbInformation.AppendFormat("Root object container starts in block {0}", rootBlock.rootobjectcontainer).
            AppendLine();

            sbInformation.
            AppendFormat("Root node of the extent B-tree resides in block {0}", rootBlock.extentbnoderoot).
            AppendLine();

            sbInformation.AppendFormat("Root node of the object B-tree resides in block {0}", rootBlock.objectnoderoot).
            AppendLine();

            if (rootBlock.bits.HasFlag(Flags.CaseSensitive))
            {
                sbInformation.AppendLine("Volume is case sensitive");
            }

            if (rootBlock.bits.HasFlag(Flags.RecycledFolder))
            {
                sbInformation.AppendLine("Volume moves deleted files to a recycled folder");
            }

            information = sbInformation.ToString();

            XmlFsType = new FileSystemType
            {
                CreationDate          = DateHandlers.UnixUnsignedToDateTime(rootBlock.datecreated).AddYears(8),
                CreationDateSpecified = true,
                Clusters    = rootBlock.totalblocks,
                ClusterSize = rootBlock.blocksize,
                Type        = "SmartFileSystem"
            };
        }
Exemple #8
0
 public void OnLocationUnavailable()
 {
     if (RootBlock != null)
     {
         RootBlock.FireAction(Anchor.OnLocationNotAvailable);
     }
 }
Exemple #9
0
 protected override void OnRootChanged(RootBlock oldRoot, RootBlock newRoot)
 {
     base.OnRootChanged(oldRoot, newRoot);
     if (newRoot != null)
     {
         Reparse();
     }
 }
Exemple #10
0
 public static bool Create(RootBlock b, out RootBlockSerialized result)
 {
     result = null;
     result = new RootBlockSerialized {
         X = b.logic.X, Y = b.logic.Y, Id = b.rootId, ColorsId = Roots.Root[b.rootId].palette.ColorsId
     };
     return(true);
 }
Exemple #11
0
 public string Generate()
 {
     if (Options.IsCSharpGenerator && Options.CompileCode)
     {
         return(RootBlock.GenerateUnformatted(Options).ToString());
     }
     return(RootBlock.Generate(Options));
 }
Exemple #12
0
 protected override void OnRootChanged(RootBlock oldRoot, RootBlock newRoot)
 {
     base.OnRootChanged(oldRoot, newRoot);
     if (newRoot != null && !attributesAdded)
     {
         attributesAdded = true;
         AttributeBlock.AddAttributes(this);
     }
 }
Exemple #13
0
        public void SignalShow()
        {
            if (RootBlock != null)
            {
                RootBlock.SignalShow();
            }

            IsHitTestVisible = true;
        }
Exemple #14
0
        public void SignalHide()
        {
            IsHitTestVisible = false;

            if (RootBlock != null)
            {
                RootBlock.SignalHide();
            }
        }
 public SetCaretPositionAction(
     RootBlock root,
     TextBoxBlock toFocus,
     SetFocusOptions options,
     int caretPosition)
     : base(toFocus, options)
 {
     CaretPosition = caretPosition;
     Text          = toFocus;
 }
Exemple #16
0
 public Redrawer(RootBlock rootBlock, bool shouldRedrawAtTheEnd)
     : base()
 {
     this.ShouldRedrawAtTheEnd = shouldRedrawAtTheEnd;
     RootBlock = rootBlock;
     if (RootBlock != null)
     {
         Root = RootBlock.MyRootControl;
         Root.RedrawRequestsCount++;
     }
 }
Exemple #17
0
        static RootBlock MarshalRootBlock(byte[] block)
        {
            byte[] tmp = new byte[228];
            Array.Copy(block, 0, tmp, 0, 24);
            Array.Copy(block, block.Length - 200, tmp, 28, 200);
            RootBlock root = Marshal.ByteArrayToStructureBigEndian <RootBlock>(tmp);

            root.hashTable = new uint[(block.Length - 224) / 4];
            for (int i = 0; i < root.hashTable.Length; i++)
            {
                root.hashTable[i] = BigEndianBitConverter.ToUInt32(block, 24 + i * 4);
            }

            return(root);
        }
Exemple #18
0
        void ParseContext(AstNode parent)
        {
            Advance();//past 'context
            Token name = CurrentToken;

            RootBlock.AddEntityDef(new EntityDef(name));
            Advance();//past name
            //
            ContextDef def = new ContextDef(name);

            parent.AddChild(def);
            //
            do
            {
                CreateState(CurrentList);
                ParseContextItem(def);
                PopState();
            } while (Advance());
        }
        private void SubscribeBlock(Block block)
        {
            ContainerBlock oldParent = block.Parent;
            RootBlock      oldRoot   = block.Root;

            // set block's parent
            block.Parent           = this.Parent;
            block.MyControl.Parent = Parent.MyControl as ContainerControl;

            // set block's root
            if (Parent.Root != null)
            {
                block.Root           = Parent.Root;
                block.MyControl.Root = Parent.Root.MyRootControl;
            }

            block.NotifyParentChanged(oldParent);
            block.NotifyRootChanged(oldRoot);

            // subscribe to block's events
            block.KeyDown += RaiseKeyDown;
        }
Exemple #20
0
        public void Initialise(NodeData source)
        {
            // save node data for the future use
            data = source;

            // try to create node contents
            if ((data != null) && (data.Root != null))
            {
                BlockBase block = Core.UIFactory.CreateAndInitialiseBlock(parentView, this, null, data.Root, data.RootContent, true);

                if (block != null)
                {
                    // always fill entire area of the node with root element
                    block.HorizontalAlignment = HorizontalAlignment.Stretch;
                    block.VerticalAlignment   = VerticalAlignment.Stretch;

                    // show block
                    Content = block;
                }
            }

            // we are done
            if (RootBlock != null)
            {
                // check for native alerts to be triggered on node load and add trigger if it is not there
                if ((NativeMessageBox != null) && !NativeMessageBox.IntendedForCustomAction && !RootBlock.HasCustomAction(Anchor.OnNodeLoaded, CustomActions.NativeMessageBox))
                {
                    RootBlock.AddAction(
                        Anchor.OnNodeLoaded,
                        new CustomAction(ActionSet.DefaultActionID, new string[] { CustomActions.NativeMessageBox }));
                }

                // root block may need a special setup
                RootBlock.SignalIsRoot();

                // schedule launch for OnNodeLoaded actions
                ThreadHelper.Sync(() => RootBlock.FireAction(Anchor.OnNodeLoaded));
            }
        }
Exemple #21
0
 public virtual string Generate()
 {
     return(RootBlock.Generate());
 }
Exemple #22
0
        public bool Identify(IMediaImage imagePlugin, Partition partition)
        {
            if (partition.Start >= partition.End)
            {
                return(false);
            }

            BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;

            // Boot block is unless defined otherwise, 2 blocks
            // Funny, you may need boot block to find root block if it's not in standard place just to know size of
            // block size and then read the whole boot block.
            // However while you can set a block size different from the sector size on formatting, the bootblock block
            // size for floppies is the sector size, and for RDB is usually is the hard disk sector size,
            // so this is not entirely wrong...
            byte[]    sector = imagePlugin.ReadSectors(0 + partition.Start, 2);
            BootBlock bblk   = Marshal.ByteArrayToStructureBigEndian <BootBlock>(sector);

            // AROS boot floppies...
            if (sector.Length >= 512 && sector[510] == 0x55 && sector[511] == 0xAA &&
                (bblk.diskType & FFS_MASK) != FFS_MASK && (bblk.diskType & MUFS_MASK) != MUFS_MASK)
            {
                sector = imagePlugin.ReadSectors(1 + partition.Start, 2);
                bblk   = Marshal.ByteArrayToStructureBigEndian <BootBlock>(sector);
            }

            // Not FFS or MuFS?
            if ((bblk.diskType & FFS_MASK) != FFS_MASK && (bblk.diskType & MUFS_MASK) != MUFS_MASK)
            {
                return(false);
            }

            // Clear checksum on sector
            sector[4] = sector[5] = sector[6] = sector[7] = 0;
            uint bsum = AmigaBootChecksum(sector);

            DicConsole.DebugWriteLine("AmigaDOS plugin", "bblk.checksum = 0x{0:X8}", bblk.checksum);
            DicConsole.DebugWriteLine("AmigaDOS plugin", "bsum = 0x{0:X8}", bsum);

            ulong bRootPtr = 0;

            // If bootblock is correct, let's take its rootblock pointer
            if (bsum == bblk.checksum)
            {
                bRootPtr = bblk.root_ptr + partition.Start;
                DicConsole.DebugWriteLine("AmigaDOS plugin", "Bootblock points to {0} as Rootblock", bRootPtr);
            }

            ulong[] rootPtrs =
            {
                bRootPtr + partition.Start,                                      (partition.End - partition.Start + 1) / 2 + partition.Start - 2,
                (partition.End - partition.Start + 1) / 2 + partition.Start - 1,
                (partition.End - partition.Start + 1) / 2 +
                partition.Start,
                (partition.End - partition.Start + 1) / 2 + partition.Start + 4
            };

            RootBlock rblk = new RootBlock();

            // So to handle even number of sectors
            foreach (ulong rootPtr in rootPtrs.Where(rootPtr => rootPtr < partition.End && rootPtr >= partition.Start))
            {
                DicConsole.DebugWriteLine("AmigaDOS plugin", "Searching for Rootblock in sector {0}", rootPtr);

                sector = imagePlugin.ReadSector(rootPtr);

                rblk.type = BigEndianBitConverter.ToUInt32(sector, 0x00);
                DicConsole.DebugWriteLine("AmigaDOS plugin", "rblk.type = {0}", rblk.type);
                if (rblk.type != TYPE_HEADER)
                {
                    continue;
                }

                rblk.hashTableSize = BigEndianBitConverter.ToUInt32(sector, 0x0C);

                DicConsole.DebugWriteLine("AmigaDOS plugin", "rblk.hashTableSize = {0}", rblk.hashTableSize);

                uint blockSize       = (rblk.hashTableSize + 56) * 4;
                uint sectorsPerBlock = (uint)(blockSize / sector.Length);

                DicConsole.DebugWriteLine("AmigaDOS plugin", "blockSize = {0}", blockSize);
                DicConsole.DebugWriteLine("AmigaDOS plugin", "sectorsPerBlock = {0}", sectorsPerBlock);

                if (blockSize % sector.Length > 0)
                {
                    sectorsPerBlock++;
                }

                if (rootPtr + sectorsPerBlock >= partition.End)
                {
                    continue;
                }

                sector = imagePlugin.ReadSectors(rootPtr, sectorsPerBlock);

                // Clear checksum on sector
                rblk.checksum = BigEndianBitConverter.ToUInt32(sector, 20);
                sector[20]    = sector[21] = sector[22] = sector[23] = 0;
                uint rsum = AmigaChecksum(sector);

                DicConsole.DebugWriteLine("AmigaDOS plugin", "rblk.checksum = 0x{0:X8}", rblk.checksum);
                DicConsole.DebugWriteLine("AmigaDOS plugin", "rsum = 0x{0:X8}", rsum);

                rblk.sec_type = BigEndianBitConverter.ToUInt32(sector, sector.Length - 4);
                DicConsole.DebugWriteLine("AmigaDOS plugin", "rblk.sec_type = {0}", rblk.sec_type);

                if (rblk.sec_type == SUBTYPE_ROOT && rblk.checksum == rsum)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemple #23
0
        public void GetInformation(IMediaImage imagePlugin, Partition partition, out string information,
                                   Encoding encoding)
        {
            Encoding = encoding ?? Encoding.GetEncoding("iso-8859-1");
            StringBuilder sbInformation = new StringBuilder();

            XmlFsType   = new FileSystemType();
            information = null;
            BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;

            byte[] bootBlockSectors = imagePlugin.ReadSectors(0 + partition.Start, 2);

            BootBlock bootBlk = Marshal.ByteArrayToStructureBigEndian <BootBlock>(bootBlockSectors);

            bootBlk.bootCode = new byte[bootBlockSectors.Length - 12];
            Array.Copy(bootBlockSectors, 12, bootBlk.bootCode, 0, bootBlk.bootCode.Length);
            bootBlockSectors[4] = bootBlockSectors[5] = bootBlockSectors[6] = bootBlockSectors[7] = 0;
            uint bsum = AmigaBootChecksum(bootBlockSectors);

            ulong bRootPtr = 0;

            // If bootblock is correct, let's take its rootblock pointer
            if (bsum == bootBlk.checksum)
            {
                bRootPtr = bootBlk.root_ptr + partition.Start;
                DicConsole.DebugWriteLine("AmigaDOS plugin", "Bootblock points to {0} as Rootblock", bRootPtr);
            }

            ulong[] rootPtrs =
            {
                bRootPtr + partition.Start,                                      (partition.End - partition.Start + 1) / 2 + partition.Start - 2,
                (partition.End - partition.Start + 1) / 2 + partition.Start - 1,
                (partition.End - partition.Start + 1) / 2 +
                partition.Start,
                (partition.End - partition.Start + 1) / 2 + partition.Start + 4
            };

            RootBlock rootBlk = new RootBlock();

            byte[] rootBlockSector = null;

            bool rootFound = false;
            uint blockSize = 0;

            // So to handle even number of sectors
            foreach (ulong rootPtr in rootPtrs.Where(rootPtr => rootPtr < partition.End && rootPtr >= partition.Start))
            {
                DicConsole.DebugWriteLine("AmigaDOS plugin", "Searching for Rootblock in sector {0}", rootPtr);

                rootBlockSector = imagePlugin.ReadSector(rootPtr);

                rootBlk.type = BigEndianBitConverter.ToUInt32(rootBlockSector, 0x00);
                DicConsole.DebugWriteLine("AmigaDOS plugin", "rootBlk.type = {0}", rootBlk.type);
                if (rootBlk.type != TYPE_HEADER)
                {
                    continue;
                }

                rootBlk.hashTableSize = BigEndianBitConverter.ToUInt32(rootBlockSector, 0x0C);

                DicConsole.DebugWriteLine("AmigaDOS plugin", "rootBlk.hashTableSize = {0}", rootBlk.hashTableSize);

                blockSize = (rootBlk.hashTableSize + 56) * 4;
                uint sectorsPerBlock = (uint)(blockSize / rootBlockSector.Length);

                DicConsole.DebugWriteLine("AmigaDOS plugin", "blockSize = {0}", blockSize);
                DicConsole.DebugWriteLine("AmigaDOS plugin", "sectorsPerBlock = {0}", sectorsPerBlock);

                if (blockSize % rootBlockSector.Length > 0)
                {
                    sectorsPerBlock++;
                }

                if (rootPtr + sectorsPerBlock >= partition.End)
                {
                    continue;
                }

                rootBlockSector = imagePlugin.ReadSectors(rootPtr, sectorsPerBlock);

                // Clear checksum on sector
                rootBlk.checksum    = BigEndianBitConverter.ToUInt32(rootBlockSector, 20);
                rootBlockSector[20] = rootBlockSector[21] = rootBlockSector[22] = rootBlockSector[23] = 0;
                uint rsum = AmigaChecksum(rootBlockSector);

                DicConsole.DebugWriteLine("AmigaDOS plugin", "rootBlk.checksum = 0x{0:X8}", rootBlk.checksum);
                DicConsole.DebugWriteLine("AmigaDOS plugin", "rsum = 0x{0:X8}", rsum);

                rootBlk.sec_type = BigEndianBitConverter.ToUInt32(rootBlockSector, rootBlockSector.Length - 4);
                DicConsole.DebugWriteLine("AmigaDOS plugin", "rootBlk.sec_type = {0}", rootBlk.sec_type);

                if (rootBlk.sec_type != SUBTYPE_ROOT || rootBlk.checksum != rsum)
                {
                    continue;
                }

                rootBlockSector = imagePlugin.ReadSectors(rootPtr, sectorsPerBlock);
                rootFound       = true;
                break;
            }

            if (!rootFound)
            {
                return;
            }

            rootBlk = MarshalRootBlock(rootBlockSector);

            string diskName = StringHandlers.PascalToString(rootBlk.diskName, Encoding);

            switch (bootBlk.diskType & 0xFF)
            {
            case 0:
                sbInformation.Append("Amiga Original File System");
                XmlFsType.Type = "Amiga OFS";
                break;

            case 1:
                sbInformation.Append("Amiga Fast File System");
                XmlFsType.Type = "Amiga FFS";
                break;

            case 2:
                sbInformation.Append("Amiga Original File System with international characters");
                XmlFsType.Type = "Amiga OFS";
                break;

            case 3:
                sbInformation.Append("Amiga Fast File System with international characters");
                XmlFsType.Type = "Amiga FFS";
                break;

            case 4:
                sbInformation.Append("Amiga Original File System with directory cache");
                XmlFsType.Type = "Amiga OFS";
                break;

            case 5:
                sbInformation.Append("Amiga Fast File System with directory cache");
                XmlFsType.Type = "Amiga FFS";
                break;

            case 6:
                sbInformation.Append("Amiga Original File System with long filenames");
                XmlFsType.Type = "Amiga OFS2";
                break;

            case 7:
                sbInformation.Append("Amiga Fast File System with long filenames");
                XmlFsType.Type = "Amiga FFS2";
                break;
            }

            if ((bootBlk.diskType & 0x6D754600) == 0x6D754600)
            {
                sbInformation.Append(", with multi-user patches");
            }

            sbInformation.AppendLine();

            sbInformation.AppendFormat("Volume name: {0}", diskName).AppendLine();

            if (bootBlk.checksum == bsum)
            {
                Sha1Context sha1Ctx = new Sha1Context();
                sha1Ctx.Update(bootBlk.bootCode);
                sbInformation.AppendLine("Volume is bootable");
                sbInformation.AppendFormat("Boot code SHA1 is {0}", sha1Ctx.End()).AppendLine();
            }

            if (rootBlk.bitmapFlag == 0xFFFFFFFF)
            {
                sbInformation.AppendLine("Volume bitmap is valid");
            }

            if (rootBlk.bitmapExtensionBlock != 0x00000000 && rootBlk.bitmapExtensionBlock != 0xFFFFFFFF)
            {
                sbInformation.AppendFormat("Bitmap extension at block {0}", rootBlk.bitmapExtensionBlock).AppendLine();
            }

            if ((bootBlk.diskType & 0xFF) == 4 || (bootBlk.diskType & 0xFF) == 5)
            {
                sbInformation.AppendFormat("Directory cache starts at block {0}", rootBlk.extension).AppendLine();
            }

            ulong blocks = (partition.End - partition.Start + 1) * imagePlugin.Info.SectorSize / blockSize;

            sbInformation.AppendFormat("Volume block size is {0} bytes", blockSize).AppendLine();
            sbInformation.AppendFormat("Volume has {0} blocks", blocks).AppendLine();
            sbInformation.AppendFormat("Volume created on {0}",
                                       DateHandlers.AmigaToDateTime(rootBlk.cDays, rootBlk.cMins, rootBlk.cTicks))
            .AppendLine();
            sbInformation.AppendFormat("Volume last modified on {0}",
                                       DateHandlers.AmigaToDateTime(rootBlk.vDays, rootBlk.vMins, rootBlk.vTicks))
            .AppendLine();
            sbInformation.AppendFormat("Volume root directory last modified on on {0}",
                                       DateHandlers.AmigaToDateTime(rootBlk.rDays, rootBlk.rMins, rootBlk.rTicks))
            .AppendLine();
            sbInformation.AppendFormat("Root block checksum is 0x{0:X8}", rootBlk.checksum).AppendLine();
            information = sbInformation.ToString();

            XmlFsType.CreationDate =
                DateHandlers.AmigaToDateTime(rootBlk.cDays, rootBlk.cMins, rootBlk.cTicks);
            XmlFsType.CreationDateSpecified = true;
            XmlFsType.ModificationDate      =
                DateHandlers.AmigaToDateTime(rootBlk.vDays, rootBlk.vMins, rootBlk.vTicks);
            XmlFsType.ModificationDateSpecified = true;
            XmlFsType.Dirty       = rootBlk.bitmapFlag != 0xFFFFFFFF;
            XmlFsType.Clusters    = blocks;
            XmlFsType.ClusterSize = blockSize;
            XmlFsType.VolumeName  = diskName;
            XmlFsType.Bootable    = bsum == bootBlk.checksum;
            // Useful as a serial
            XmlFsType.VolumeSerial = $"{rootBlk.checksum:X8}";
        }
Exemple #24
0
 public Redrawer(RootBlock rootBlock)
     : this(rootBlock, true)
 {
 }
Exemple #25
0
 public string GenerateUnformatted()
 {
     return(RootBlock.GenerateUnformatted().ToString());
 }
Exemple #26
0
        public void GetInformation(IMediaImage imagePlugin, Partition partition, out string information,
                                   Encoding encoding)
        {
            Encoding = encoding ?? Encoding.GetEncoding("iso-8859-1");
            byte[]    rootBlockSector = imagePlugin.ReadSector(2 + partition.Start);
            RootBlock rootBlock       = Marshal.ByteArrayToStructureBigEndian <RootBlock>(rootBlockSector);

            var sbInformation = new StringBuilder();

            XmlFsType = new FileSystemType();

            switch (rootBlock.diskType)
            {
            case AFS_DISK:
            case MUAF_DISK:
                sbInformation.Append("Professional File System v1");
                XmlFsType.Type = "PFS v1";

                break;

            case PFS2_DISK:
                sbInformation.Append("Professional File System v2");
                XmlFsType.Type = "PFS v2";

                break;

            case PFS_DISK:
            case MUPFS_DISK:
                sbInformation.Append("Professional File System v3");
                XmlFsType.Type = "PFS v3";

                break;
            }

            if (rootBlock.diskType == MUAF_DISK ||
                rootBlock.diskType == MUPFS_DISK)
            {
                sbInformation.Append(", with multi-user support");
            }

            sbInformation.AppendLine();

            sbInformation.AppendFormat("Volume name: {0}", StringHandlers.PascalToString(rootBlock.diskname, Encoding)).
            AppendLine();

            sbInformation.AppendFormat("Volume has {0} free sectors of {1}", rootBlock.blocksfree, rootBlock.diskSize).
            AppendLine();

            sbInformation.AppendFormat("Volume created on {0}",
                                       DateHandlers.AmigaToDateTime(rootBlock.creationday, rootBlock.creationminute,
                                                                    rootBlock.creationtick)).AppendLine();

            if (rootBlock.extension > 0)
            {
                sbInformation.AppendFormat("Root block extension resides at block {0}", rootBlock.extension).
                AppendLine();
            }

            information = sbInformation.ToString();

            XmlFsType.CreationDate =
                DateHandlers.AmigaToDateTime(rootBlock.creationday, rootBlock.creationminute, rootBlock.creationtick);

            XmlFsType.CreationDateSpecified = true;
            XmlFsType.FreeClusters          = rootBlock.blocksfree;
            XmlFsType.FreeClustersSpecified = true;
            XmlFsType.Clusters    = rootBlock.diskSize;
            XmlFsType.ClusterSize = imagePlugin.Info.SectorSize;
            XmlFsType.VolumeName  = StringHandlers.PascalToString(rootBlock.diskname, Encoding);
        }
Exemple #27
0
 public string Generate()
 {
     return(RootBlock.Generate());
 }
Exemple #28
0
 public override string ToString() => RootBlock.ToString();
Exemple #29
0
 public IEnumerable <Block> FindBlocks(int kind)
 {
     return(RootBlock.FindBlocks(kind));
 }
Exemple #30
0
 protected RootBlockAction(RootBlock root)
 {
     Param.CheckNotNull(root, "root");
     Root = root;
 }