예제 #1
0
        public Section LoadSection(string label, byte penId)
        {
            label = Locale.ToUpper(label);

            string source = Database.CurrentDatabase.RootDirectory +
                            Database.DB_SECTION_FFORMAT.Replace("{filename}", Sign.CreateSectionSignature(label, penId));

            return(LoadSection(source));
        }
예제 #2
0
파일: Section.cs 프로젝트: ProCompTEAM/SDB
        /*
         * Data Format: <VER-DB><DEEP-METAINFO><METAINFO><1=ID><1=X><1=Y><4=DEEP-LABEL><N=DATA-LABEL><4=DEEP-CONTENT><N=CONTENT>
         */

        private void Save()
        {
            string source = Database.CurrentDatabase.RootDirectory +
                            Database.DB_SECTION_FFORMAT.Replace("{filename}", Sign.CreateSectionSignature(Info.Label, Info.Address));

            ObjectDB current;

            byte[] label;

            using (BinaryWriter writer = new BinaryWriter(File.Open(source, FileMode.Create)))
            {
                writer.Write(DB_SECTION_VERSION);

                //DATABASE TITLE (METAINFO)
                byte[] meta = Builder.Encode(Info.Data);
                writer.Write(meta.Length);
                writer.Write(meta);

                //BLOCKS OF DATA
                for (int offsetX = 0; offsetX < 256; offsetX++)
                {
                    for (int offsetY = 0; offsetY < 256; offsetY++)
                    {
                        if (Content[offsetX, offsetY] != null)
                        {
                            current = Content[offsetX, offsetY];

                            writer.Write(current.Id);
                            writer.Write(offsetX);
                            writer.Write(offsetY);

                            label = Builder.Encode(Database.CurrentDatabase.TextEncoding.GetBytes(current.Label));
                            writer.Write(label.Length);
                            writer.Write(label);

                            byte[] currdat = Builder.Encode(current.Content);
                            writer.Write(currdat.Length);
                            writer.Write(currdat);
                        }
                    }
                }
            }

            if (Logger != null)
            {
                Logger.Push(ContentLogger.EVENT_SAVED_S, "Section '" + Label + " saved on " + Address);
            }
        }
예제 #3
0
        public byte[] GetIdsByLabel(string label)
        {
            List <byte> result = new List <byte>();

            Update();

            for (int i = 0; i < 256; i++)
            {
                string sign = Sign.CreateSectionSignature(Locale.ToUpper(label), (byte)i);

                if (Sections.IndexOf(sign) != -1)
                {
                    result.Add((byte)i);
                }
            }

            return(result.ToArray());
        }