Ejemplo n.º 1
0
        private void Menu_ExportVAG()
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Filter = "VAG|*.vag";
            var id_str = Data.ID.ToString();

            sfd.FileName = id_str;
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                FileStream   file   = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write);
                BinaryWriter writer = new BinaryWriter(file);
                writer.Write("VAGp".ToCharArray());
                writer.Write(20);
                writer.Write(0);
                writer.Write(RawData.Length);
                writer.Write(BitConv.FlipBytes(Data.Freq));
                writer.Write(0); writer.Write(0); writer.Write(0);
                char[] name = new char[16] {
                    (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0
                };
                Array.Copy(id_str.ToCharArray(), name, Math.Min(id_str.Length, 16));
                writer.Write(name);
                //writer.Write(0); writer.Write(0); writer.Write(0); writer.Write(0);
                writer.Write(RawData);
                writer.Close();
            }
        }
Ejemplo n.º 2
0
        internal byte[] GetData()
        {
            List <byte> xArray = new List <byte>();

            xArray.Add(xNLen);
            xArray.Add((byte)((IsFolder ? 1 : 0) << 4));
            xArray.AddRange(Encoding.ASCII.GetBytes(xName));
            xArray.AddRange(new byte[0x2A - xName.Length]);
            xArray.AddRange(BitConv.GetBytes(xStartBlock, true));
            xArray.AddRange(BitConv.GetBytes(xSize, true));
            xArray.AddRange(BitConv.GetBytes(xT1, true));
            xArray.AddRange(BitConv.GetBytes(xT2, true));
            xArray.AddRange(BitConv.GetBytes(xT3, true));
            return(xArray.ToArray());
        }
Ejemplo n.º 3
0
        uint GetNextBlock(uint xBlock)
        {
            if (PartitionType == FATXType.None)
            {
                return(Constants.FATX32End);
            }
            xAllocTable.Position = (xBlock * (byte)PartitionType);
            List <byte> xList = xAllocTable.ReadBytes((byte)PartitionType).ToList();

            for (int i = (int)PartitionType; i < 4; i++)
            {
                xList.Insert(0, 0);
            }
            return(BitConv.ToUInt32(xList.ToArray(), true));
        }
Ejemplo n.º 4
0
        private void RenderEntry(EntityEntry entry)
        {
            int xoffset = BitConv.FromInt32(entry.Unknown2, 0);
            int yoffset = BitConv.FromInt32(entry.Unknown2, 4);
            int zoffset = BitConv.FromInt32(entry.Unknown2, 8);

            GL.PushMatrix();
            GL.Translate(xoffset, yoffset, zoffset);
            GL.Scale(4, 4, 4);
            foreach (Entity entity in entry.Entities)
            {
                if (entity.Name != null)
                {
                    RenderEntity(entity);
                }
            }
            GL.PopMatrix();
        }
Ejemplo n.º 5
0
        protected override Control CreateEditor()
        {
            int linkedsceneryentrycount = BitConv.FromInt32(entityentry.Unknown1, 0);

            SceneryEntry[] linkedsceneryentries = new SceneryEntry [linkedsceneryentrycount];
            for (int i = 0; i < linkedsceneryentrycount; i++)
            {
                linkedsceneryentries[i] = FindEID <SceneryEntry>(BitConv.FromInt32(entityentry.Unknown1, 4 + i * 48));
            }
            int linkedentityentrycount = BitConv.FromInt32(entityentry.Unknown1, 400);

            EntityEntry[] linkedentityentries = new EntityEntry [linkedentityentrycount];
            for (int i = 0; i < linkedentityentrycount; i++)
            {
                linkedentityentries[i] = FindEID <EntityEntry>(BitConv.FromInt32(entityentry.Unknown1, 404 + i * 4));
            }
            return(new UndockableControl(new EntityEntryViewer(entityentry, linkedsceneryentries, linkedentityentries)));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Returns the STFS Descriptor
        /// </summary>
        /// <returns></returns>
        internal byte[] GetData()
        {
            byte idx = 1;

            if (ThisType == STFSType.Type1)
            {
                idx = (byte)(TopRecord.Index << 1);
            }
            // Returns the Descriptor in a data fashion
            List <byte> xReturn = new List <byte>();

            xReturn.AddRange(new byte[] { 0x24, 0 });
            xReturn.Add(idx);
            xReturn.AddRange(xStruct);
            xReturn.AddRange(new byte[20]);
            xReturn.AddRange(BitConv.GetBytes(xBlockCount, true));
            xReturn.AddRange(BitConv.GetBytes(TopRecord.BlocksFree, true));
            return(xReturn.ToArray());
        }
Ejemplo n.º 7
0
 public TextureChunkBox(TextureChunk chunk)
 {
     tbcTabs      = new TabControl();
     tbcTabs.Dock = DockStyle.Fill;
     {
         MysteryBox mystery = new MysteryBox(chunk.Data);
         mystery.Dock = DockStyle.Fill;
         TabPage page = new TabPage("Hex");
         page.Controls.Add(mystery);
         tbcTabs.TabPages.Add(page);
     }
     {
         Bitmap     bitmap = new Bitmap(512, 128, PixelFormat.Format16bppArgb1555);
         Rectangle  brect  = new Rectangle(Point.Empty, bitmap.Size);
         BitmapData bdata  = bitmap.LockBits(brect, ImageLockMode.WriteOnly, PixelFormat.Format16bppArgb1555);
         try
         {
             for (int y = 0; y < 128; y++)
             {
                 for (int x = 0; x < 512; x++)
                 {
                     byte color = chunk.Data[x + y * 512];
                     color >>= 3;
                     short color16 = PixelConv.Pack1555(1, color, color, color);
                     System.Runtime.InteropServices.Marshal.WriteInt16(bdata.Scan0, x * 2 + y * bdata.Stride, color16);
                 }
             }
         }
         finally
         {
             bitmap.UnlockBits(bdata);
         }
         PictureBox picture = new PictureBox();
         picture.Dock  = DockStyle.Fill;
         picture.Image = bitmap;
         TabPage page = new TabPage("Monochrome 8");
         page.Controls.Add(picture);
         tbcTabs.TabPages.Add(page);
         tbcTabs.SelectedTab = page;
     }
     {
         Bitmap     bitmap = new Bitmap(256, 128, PixelFormat.Format16bppArgb1555);
         Rectangle  brect  = new Rectangle(Point.Empty, bitmap.Size);
         BitmapData bdata  = bitmap.LockBits(brect, ImageLockMode.WriteOnly, PixelFormat.Format16bppArgb1555);
         try
         {
             for (int y = 0; y < 128; y++)
             {
                 for (int x = 0; x < 256; x++)
                 {
                     short color = BitConv.FromInt16(chunk.Data, x * 2 + y * 512);
                     byte  alpha;
                     byte  red;
                     byte  green;
                     byte  blue;
                     PixelConv.Unpack1555(color, out alpha, out blue, out green, out red);
                     color = PixelConv.Pack1555(1, red, green, blue);
                     System.Runtime.InteropServices.Marshal.WriteInt16(bdata.Scan0, x * 2 + y * bdata.Stride, color);
                 }
             }
         }
         finally
         {
             bitmap.UnlockBits(bdata);
         }
         PictureBox picture = new PictureBox();
         picture.Dock  = DockStyle.Fill;
         picture.Image = bitmap;
         TabPage page = new TabPage("BGR555");
         page.Controls.Add(picture);
         tbcTabs.TabPages.Add(page);
     }
     Controls.Add(tbcTabs);
 }
Ejemplo n.º 8
0
        private void PopulateList()
        {
            listBox1.Items.Clear();
            tracks.Clear();
            BinaryReader mh    = new BinaryReader(new FileStream(fileName, FileMode.Open));
            int          count = mh.ReadInt32();

            interleave = mh.ReadInt32();
            while (count-- > 0)
            {
                tracks.Add(new Track()
                {
                    Type       = mh.ReadInt32(),
                    Size       = mh.ReadInt32(),
                    Offset     = mh.ReadUInt32(),
                    SampleRate = mh.ReadInt32(),
                    Unknown    = mh.ReadInt32()
                });
            }
            mh.Close();
            mb_name = fileName.Substring(0, fileName.LastIndexOf('.') + 1) + "MB";
            BinaryReader mb = new BinaryReader(new FileStream(mb_name, FileMode.Open));

            for (int i = 0; i < tracks.Count; ++i)
            {
                mb.BaseStream.Position = tracks[i].Offset;
                if (tracks[i].Type == 0)
                {
                    byte[] header = mb.ReadBytes(0x30);
                    if (BitConverter.ToUInt32(header, 0) != msvp_key ||
                        BitConverter.ToUInt32(header, 4) != 0x20000000 ||
                        BitConverter.ToUInt32(header, 8) != 0 ||
                        BitConv.FlipBytes(BitConverter.ToUInt32(header, 12)) != tracks[i].Size - 0x30)
                    {
                        throw new Exception("Type 0 audio stream is in invalid format.");
                    }
                    else if (BitConv.FlipBytes(BitConverter.ToInt32(header, 16)) != tracks[i].SampleRate)
                    {
                        tracks[i].SampleRate = BitConv.FlipBytes(BitConverter.ToInt32(header, 16));
                    }
                    char[] name = new char[0x10];
                    Array.Copy(header, 0x20, name, 0, 0x10);
                    tracks[i].Name = new string(name);
                    if (tracks[i].Name.IndexOf('\0') > 0)
                    {
                        tracks[i].Name = tracks[i].Name.Substring(0, tracks[i].Name.IndexOf('\0'));
                        listBox1.Items.Add($"{tracks[i].Name} (Track {i})");
                    }
                    else
                    {
                        tracks[i].Name = string.Empty;
                        listBox1.Items.Add($"Track {i}");
                    }
                }
                else if (tracks[i].Type == 2)
                {
                    listBox1.Items.Add($"Track {i} (null track)");
                }
                else
                {
                    listBox1.Items.Add($"Track {i}");
                }
            }
            mb.Close();
            label1.Text  = $"Track count: {tracks.Count}";
            label10.Text = $"Interleave: {interleave} bytes";
        }
Ejemplo n.º 9
0
        private void addTrackToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = "WAV files|*.wav";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                BinaryReader reader = new BinaryReader(new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read));
                if (new string(reader.ReadChars(4)) != "RIFF" ||
                    reader.ReadInt32() != reader.BaseStream.Length - 8 ||
                    new string(reader.ReadChars(4)) != "WAVE" ||
                    new string(reader.ReadChars(4)) != "fmt " ||
                    reader.ReadInt32() != 16 ||
                    reader.ReadInt16() != 1)
                {
                    return;
                }
                ushort channels   = reader.ReadUInt16();
                int    samplerate = reader.ReadInt32();
                if (channels > 2 ||
                    reader.ReadInt32() != samplerate * channels * 2 ||
                    reader.ReadInt16() != channels * 2 ||
                    reader.ReadInt16() != 16 ||
                    new string(reader.ReadChars(4)) != "data")
                {
                    return;
                }
                BinaryWriter mb            = new BinaryWriter(new FileStream(mb_name, FileMode.Append, FileAccess.Write));
                long         mb_start_seek = mb.BaseStream.Position;
                if (mb_start_seek > uint.MaxValue)
                {
                    return;
                }
                int    readsize = reader.ReadInt32();
                byte[] vag_data;
                if (channels == 1)
                {
                    vag_data = ADPCM.FromPCMMono(reader.ReadBytes(readsize));
                    mb.Write("MSVp".ToCharArray());
                    mb.Write(0x20000000);
                    mb.Write(0);
                    mb.Write(BitConv.FlipBytes(vag_data.Length));
                    mb.Write(BitConv.FlipBytes(samplerate));
                    mb.Write(0);
                    mb.Write(0);
                    mb.Write(0);
                    string fname_no_ext = ofd.SafeFileName.Substring(0, ofd.SafeFileName.LastIndexOf('.'));
                    for (int i = 0; i < 16; ++i)
                    {
                        if (i < fname_no_ext.Length)
                        {
                            mb.Write(fname_no_ext[i]);
                        }
                        else
                        {
                            mb.Write(0);
                        }
                    }
                    mb.Write(vag_data);
                }
                else if (channels == 2)
                {
                    vag_data = ADPCM.FromPCMStereo(reader.ReadBytes(readsize), interleave);
                    mb.Write(vag_data);
                }
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Grabs the STFS name of the package
        /// </summary>
        /// <returns></returns>
        public string GetSTFSName()
        {
            if (xDrive.ActiveCheck())
            {
                return(null);
            }
            string xReturn = null;

            try
            {
                if (xSize < 0x500)
                {
                    throw new Exception();
                }
                xDrive.GetIO();
                uint[] blocks = Partition.xTable.GetBlocks(xStartBlock);
                if (blocks.Length == 0)
                {
                    throw new Exception();
                }
                xDrive.xActive = false;
                FATXStreamIO io    = new FATXStreamIO(this, ref blocks, true);
                uint         xBuff = io.ReadUInt32();
                if (xBuff != (uint)STFS.PackageMagic.CON &&
                    xBuff != (uint)STFS.PackageMagic.LIVE &&
                    xBuff != (uint)STFS.PackageMagic.PIRS)
                {
                    throw new Exception();
                }
                io.Position = 0x411;
                xReturn     = io.ReadString(StringForm.Unicode, 0x80);
                io.Position = 0x340;
                byte xbase = (byte)(((io.ReadUInt32() + 0xFFF) & 0xF000) >> 0xC);
                if (io.ReadUInt32() != (uint)STFS.PackageType.Profile)
                {
                    throw new Exception();
                }
                io.Position = 0x379;
                if (io.ReadByte() != 0x24 || io.ReadByte() != 0)
                {
                    throw new Exception();
                }
                byte   idx  = (byte)(io.ReadByte() & 3);
                byte[] Desc = io.ReadBytes(5);
                if (idx == 0 || idx == 2)
                {
                    if (xbase != 0xA)
                    {
                        throw new Exception();
                    }
                }
                else if (idx == 1)
                {
                    if (xbase != 0xB)
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
                io.Position = 0x395;
                STFS.STFSDescriptor xDesc = new X360.STFS.STFSDescriptor(Desc, io.ReadUInt32(), io.ReadUInt32(), idx);
                int  pos   = (int)xDesc.GenerateDataOffset(xDesc.DirectoryBlock);
                uint block = xDesc.DirectoryBlock;
                while (pos != -1)
                {
                    for (int i = 0; i < 0x40; i++)
                    {
                        if (pos == -1)
                        {
                            break;
                        }
                        io.Position = pos + 0x28 + (0x40 * i);
                        byte nlen = (byte)(io.ReadByte() & 0x3F);
                        if (nlen > 0x28)
                        {
                            nlen = 0x28;
                        }
                        io.Position = pos + (0x40 * i);
                        if (io.ReadString(StringForm.ASCII, nlen) == "Account")
                        {
                            io.Position = pos + (0x40 * i) + 0x2F;
                            List <byte> buff = new List <byte>(io.ReadBytes(3));
                            buff.Add(0);
                            block = BitConv.ToUInt32(buff.ToArray(), false);
                            pos   = -1;
                        }
                    }
                    if (pos != -1)
                    {
                        byte shift = xDesc.TopRecord.Index;
                        if (xDesc.BlockCount >= Constants.BlockLevel[1])
                        {
                            io.Position = (int)xDesc.GenerateHashOffset(block, X360.STFS.TreeLevel.L2) + 0x14 +
                                          (shift << 0xC);
                            shift = (byte)((io.ReadByte() >> 6) & 1);
                        }
                        if (xDesc.BlockCount >= Constants.BlockLevel[0])
                        {
                            io.Position = (int)xDesc.GenerateHashOffset(block, X360.STFS.TreeLevel.L1) + 0x14 +
                                          (xDesc.ThisType == STFS.STFSType.Type0 ? 0 : (shift << 0xC));
                            shift = (byte)((io.ReadByte() >> 6) & 1);
                        }
                        io.Position = (int)xDesc.GenerateHashOffset(block, X360.STFS.TreeLevel.L0) + 0x15 +
                                      (xDesc.ThisType == STFS.STFSType.Type0 ? 0 : (shift << 0xC));
                        List <byte> xbuff = new List <byte>(io.ReadBytes(3));
                        xbuff.Reverse();
                        xbuff.Insert(0, 3);
                        block = BitConv.ToUInt32(xbuff.ToArray(), true);
                        if (block == Constants.STFSEnd)
                        {
                            pos = -1;
                        }
                    }
                }
                if (block == 0xFFFFFF)
                {
                    throw new Exception();
                }
                io.Position = (int)xDesc.GenerateDataOffset(block);
                byte[] databuff        = io.ReadBytes(404);
                Profile.UserAccount ua = new X360.Profile.UserAccount(new DJsIO(databuff, true), X360.Profile.AccountType.Stock, false);
                if (!ua.Success)
                {
                    ua = new X360.Profile.UserAccount(new DJsIO(databuff, true), X360.Profile.AccountType.Kits, false);
                    if (!ua.Success)
                    {
                        throw new Exception();
                    }
                }
                xReturn = ua.GetGamertag();
                io.Close();
                xDrive.xActive = false;
                return(xReturn);
            }
            catch { xDrive.xActive = false; return(xReturn); }
        }
Ejemplo n.º 11
0
        private void Menu_Duplicate()
        {
            if (!entity.ID.HasValue)
            {
                throw new GUIException("Only entities with ID's can be duplicated.");
            }
            int maxid = 1;
            List <EntityPropertyRow <int> > drawlists = new List <EntityPropertyRow <int> >();

            foreach (Chunk chunk in entityentrycontroller.EntryChunkController.NSFController.NSF.Chunks)
            {
                if (chunk is EntryChunk)
                {
                    foreach (Entry entry in ((EntryChunk)chunk).Entries)
                    {
                        if (entry is EntityEntry)
                        {
                            foreach (Entity otherentity in ((EntityEntry)entry).Entities)
                            {
                                if (otherentity.ID.HasValue)
                                {
                                    if (otherentity.ID.Value > maxid)
                                    {
                                        maxid = otherentity.ID.Value;
                                    }
                                    if (otherentity.AlternateID.HasValue && otherentity.AlternateID.Value > maxid)
                                    {
                                        maxid = otherentity.AlternateID.Value;
                                    }
                                }
                                if (otherentity.DrawListA != null)
                                {
                                    drawlists.AddRange(otherentity.DrawListA.Rows);
                                }
                                if (otherentity.DrawListB != null)
                                {
                                    drawlists.AddRange(otherentity.DrawListB.Rows);
                                }
                            }
                        }
                    }
                }
            }
            maxid++;
            int newindex = entityentrycontroller.EntityEntry.Entities.Count;

            newindex -= BitConv.FromInt32(entityentrycontroller.EntityEntry.Unknown1, 0x188);
            int entitycount = BitConv.FromInt32(entityentrycontroller.EntityEntry.Unknown1, 0x18C);

            BitConv.ToInt32(entityentrycontroller.EntityEntry.Unknown1, 0x18C, entitycount + 1);
            Entity newentity = Entity.Load(entity.Save());

            newentity.ID          = maxid;
            newentity.AlternateID = null;
            entityentrycontroller.EntityEntry.Entities.Add(newentity);
            entityentrycontroller.AddNode(new EntityController(entityentrycontroller, newentity));
            foreach (EntityPropertyRow <int> drawlist in drawlists)
            {
                foreach (int value in drawlist.Values)
                {
                    if ((value & 0xFFFF00) >> 8 == entity.ID.Value)
                    {
                        unchecked
                        {
                            drawlist.Values.Add((value & 0xFF) | (maxid << 8) | (newindex << 24));
                        }
                        break;
                    }
                }
                if (drawlist.Values.Contains(entity.ID.Value))
                {
                    drawlist.Values.Add(maxid);
                }
            }
        }
Ejemplo n.º 12
0
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Brush        borderbrush       = Brushes.Black;
            Brush        brush             = Brushes.Navy;
            Brush        backbrush         = Brushes.White;
            Brush        hibackbrush       = Brushes.LightGreen;
            Brush        bithibackbrush    = Brushes.LightCoral;
            Brush        selbrush          = Brushes.White;
            Brush        selbackbrush      = Brushes.Navy;
            Brush        deadselbackbrush  = Brushes.DarkGray;
            Brush        inputselbackbrush = Brushes.Red;
            Brush        eidbackbrush      = Brushes.Chocolate;
            Brush        voidbrush         = Brushes.DarkMagenta;
            Font         font      = new Font(FontFamily.GenericMonospace, 8);
            Font         selfont   = new Font(FontFamily.GenericMonospace, 10);
            StringFormat format    = new StringFormat();
            StringFormat selformat = new StringFormat();

            format.Alignment        = StringAlignment.Center;
            format.LineAlignment    = StringAlignment.Center;
            selformat.Alignment     = StringAlignment.Center;
            selformat.LineAlignment = StringAlignment.Center;
            int hstep  = (Width - 1) / 16;
            int vstep  = (Height - 1) / 16;
            int width  = hstep * 16;
            int height = vstep * 16;
            int xsel   = position % 16;
            int ysel   = position / 16;

            e.Graphics.FillRectangle(borderbrush, 0, 0, width + 1, height + 1);
            for (int y = 0; y < 16; y++)
            {
                for (int x = 0; x < 16; x++)
                {
                    int          i = x + (offset + y) * 16;
                    Font         curfont;
                    Brush        curbrush;
                    Brush        curbackbrush;
                    StringFormat curformat;
                    Rectangle    rect = new Rectangle();
                    rect.X      = hstep * x + 1;
                    rect.Y      = vstep * y + 1;
                    rect.Width  = hstep - 1;
                    rect.Height = vstep - 1;
                    string text;
                    if (eidview && x % 4 == 0 && i + 3 < data.Length && (data[i] & 1) != 0 && (data[i + 3] & 128) == 0)
                    {
                        curfont      = font;
                        curbrush     = selbrush;
                        curbackbrush = eidbackbrush;
                        curformat    = format;
                        rect.Width   = hstep * 4 - 1;
                        int eid = BitConv.FromInt32(data, i);
                        e.Graphics.FillRectangle(curbackbrush, rect);
                        e.Graphics.DrawString(Entry.EIDToString(eid), curfont, curbrush, rect, curformat);
                        x += 3;
                        continue;
                    }
                    if (x == xsel && y + offset == ysel && x + y * 16 < data.Length)
                    {
                        curfont   = selfont;
                        curbrush  = selbrush;
                        curformat = selformat;
                        if (input == null)
                        {
                            curbackbrush = Focused ? selbackbrush : deadselbackbrush;
                            text         = data[x + (offset + y) * 16].ToString("X2");
                        }
                        else
                        {
                            curbackbrush = Focused ? inputselbackbrush : deadselbackbrush;
                            text         = ((int)input).ToString("X");
                        }
                    }
                    else if (x + (offset + y) * 16 < data.Length)
                    {
                        curfont  = font;
                        curbrush = brush;
                        if (viewbit != 8)
                        {
                            curbackbrush = ((data[x + (offset + y) * 16] & 1 << viewbit) != 0) ? bithibackbrush : backbrush;
                        }
                        else
                        {
                            curbackbrush = (data[x + (offset + y) * 16] != 0) ? hibackbrush : backbrush;
                        }
                        curformat = format;
                        text      = data[x + (offset + y) * 16].ToString("X2");
                    }
                    else
                    {
                        curfont      = null;
                        curbrush     = null;
                        curbackbrush = voidbrush;
                        curformat    = null;
                        text         = "";
                    }
                    e.Graphics.FillRectangle(curbackbrush, rect);
                    if (x + (offset + y) * 16 < data.Length)
                    {
                        e.Graphics.DrawString(text, curfont, curbrush, rect, curformat);
                    }
                }
            }

            /*for (int i = 0;i < 17;i += eidview ? 4 : 1)
             * {
             *  e.Graphics.DrawLine(borderpen,hstep * i,0,hstep * i,height);
             * }
             * for (int i = 0;i < 17;i++)
             * {
             *  e.Graphics.DrawLine(borderpen,0,vstep * i,width,vstep * i);
             * }*/
        }