public bool MoveFileDown(Types.FileInfo File) { _LastError = ""; DirEntryLocation dirLocOrig = LocateDirEntry(File.DirEntryIndex); if (dirLocOrig == null) { return(false); } DirEntryLocation dirLocNext = LocateDirEntry(File.DirEntryIndex + 1); if (dirLocNext == null) { _LastError = "could not find next directory entry"; return(false); } Sector secOrig = Tracks[dirLocOrig.Track - 1].Sectors[dirLocOrig.Sector]; Sector secPrev = Tracks[dirLocNext.Track - 1].Sectors[dirLocNext.Sector]; // exchange dir entry content GR.Memory.ByteBuffer tempData = secOrig.Data.SubBuffer(0x20 * dirLocOrig.DirEntry + 2, 30); secPrev.Data.CopyTo(secOrig.Data, 0x20 * dirLocNext.DirEntry + 2, 30, 0x20 * dirLocOrig.DirEntry + 2); tempData.CopyTo(secPrev.Data, 0, 30, 0x20 * dirLocNext.DirEntry + 2); return(true); }
public override Types.FileInfo LoadFile(GR.Memory.ByteBuffer Filename) { _LastError = ""; int fileIndex = 0; var fileInfo = new Types.FileInfo(); foreach (FileRecord file in FileRecords) { if (file.EntryType == 1) { if (file.Filename == Filename) { GR.Memory.ByteBuffer exportData = new GR.Memory.ByteBuffer(); exportData.AppendU16(file.StartAddress); exportData.Append(FileDatas[fileIndex]); fileInfo.Data = exportData; fileInfo.Filename = new GR.Memory.ByteBuffer(file.Filename); fileInfo.Type = Types.FileType.PRG; return(fileInfo); } } ++fileIndex; } _LastError = "file not found"; return(null); }
public override List <RetroDevStudio.Types.FileInfo> Files() { _LastError = ""; var files = new List <FileInfo>(); int curTrack = TRACK_DIRECTORY; int curSector = SECTOR_DIRECTORY; bool endFound = false; int dirEntryIndex = 0; if (Tracks.Count < curTrack - 1) { return(files); } while (!endFound) { Sector sec = Tracks[curTrack - 1].Sectors[curSector]; for (int i = 0; i < 8; ++i) { int fileTrack = sec.Data.ByteAt(0x20 * i + 3); int fileSector = sec.Data.ByteAt(0x20 * i + 4); if (sec.Data.ByteAt(0x20 * i + 2) != (byte)Types.FileType.SCRATCHED) { // valid entry? Types.FileInfo info = new Types.FileInfo(); info.Filename = sec.Data.SubBuffer(0x20 * i + 5, 16); info.StartSector = fileSector; info.StartTrack = fileTrack; info.Type = (Types.FileType)sec.Data.ByteAt(0x20 * i + 2); info.Blocks = sec.Data.ByteAt(0x20 * i + 30) + 256 * sec.Data.ByteAt(0x20 * i + 31); info.DirEntryIndex = dirEntryIndex; ++dirEntryIndex; files.Add(info); } } curTrack = sec.Data.ByteAt(0); curSector = sec.Data.ByteAt(1); if (curTrack == 0) { // track = 0 marks last directory entry endFound = true; } } return(files); }
bool LocateFile(GR.Memory.ByteBuffer Filename, out Location FileLocation, out Types.FileInfo FileInfo) { _LastError = ""; FileLocation = null; FileInfo = null; Location curLoc = new Location(TRACK_DIRECTORY, SECTOR_DIRECTORY); bool endFound = false; while (!endFound) { Sector sec = Tracks[curLoc.Track - 1].Sectors[curLoc.Sector]; for (int i = 0; i < 8; ++i) { int fileTrack = sec.Data.ByteAt(0x20 * i + 3); int fileSector = sec.Data.ByteAt(0x20 * i + 4); if (fileTrack != 0) { // valid entry? if (sec.Data.ByteAt(0x20 * i + 2) != (byte)C64Studio.Types.FileType.SCRATCHED) { GR.Memory.ByteBuffer filename = sec.Data.SubBuffer(0x20 * i + 5, 16); if (Filename.Compare(filename) == 0) { FileLocation = new Location(fileTrack, fileSector); FileInfo = new C64Studio.Types.FileInfo(); FileInfo.Filename = new GR.Memory.ByteBuffer(filename); FileInfo.StartSector = fileSector; FileInfo.StartTrack = fileTrack; FileInfo.Type = (C64Studio.Types.FileType)sec.Data.ByteAt(0x20 * i + 2); FileInfo.Blocks = 0; return(true); } } } } curLoc = sec.NextLocation; if (curLoc == null) { // track = 0 marks last directory entry break; } } _LastError = "Could not locate directory entry for file"; return(false); }
void OpenInHexEditor(Types.FileInfo FileToImport) { Types.FileInfo fileInfo = null; if (m_Media != null) { fileInfo = m_Media.LoadFile(FileToImport.Filename); } if (fileInfo != null) { BinaryDisplay display = new BinaryDisplay(Core, fileInfo.Data, false, true); display.Show(Core.MainForm.panelMain, DockState.Float); } }
public override Types.FileInfo LoadFile(GR.Memory.ByteBuffer Filename) { _LastError = ""; if (Filename.Compare(this.Filename) != 0) { _LastError = "file not found"; return(null); } var fileInfo = new Types.FileInfo(); fileInfo.Type = Types.FileType.PRG; fileInfo.Data = new GR.Memory.ByteBuffer(Data); fileInfo.Filename = new GR.Memory.ByteBuffer(Filename); return(fileInfo); }
public override Types.FileInfo LoadFile(GR.Memory.ByteBuffer Filename) { _LastError = ""; var fileInfo = new Types.FileInfo(); foreach (FileEntry file in TapFiles) { if (file.Filename.Compare(Filename) == 0) { fileInfo.Filename = new GR.Memory.ByteBuffer(file.Filename); fileInfo.Data = file.Data; fileInfo.Type = Types.FileType.PRG; return(fileInfo); } } _LastError = "file not found"; return(null); }
public override List <Types.FileInfo> Files() { _LastError = ""; var files = new List <Types.FileInfo>(); int dirEntryIndex = 0; foreach (FileEntry file in TapFiles) { var info = new Types.FileInfo(); info.Filename = new GR.Memory.ByteBuffer(file.Filename); info.Blocks = (int)(file.Data.Length + 253) / 254; info.Type = Types.FileType.PRG; info.DirEntryIndex = dirEntryIndex; ++dirEntryIndex; files.Add(info); } return(files); }
private void ExportToBASIC(Types.FileInfo fileToExport, C64Models.BASIC.Dialect Dialect) { RetroDevStudio.Types.FileInfo fileInfo = null; if (m_Media != null) { fileInfo = m_Media.LoadFile(fileToExport.Filename); } if (fileInfo != null) { if (fileInfo.Data.Length >= 2) { //if ( startAddress == 0x0801 ) { // can only load from that address List <string> lines; // trunc load address var parser = new Parser.BasicFileParser(new Parser.BasicFileParser.ParserSettings()); parser.SetBasicDialect(Dialect); if (parser.Disassemble(fileInfo.Data.SubBuffer(2), out lines)) { var document = new SourceBasicEx(Core); document.ShowHint = DockState.Document; document.Core = Core; document.Show(Core.MainForm.panelMain); document.SetBASICDialect(Dialect); StringBuilder sb = new StringBuilder(); foreach (string line in lines) { sb.AppendLine(line); } document.FillContent(sb.ToString(), false); } } } } }
public List <string> CheckForErrors() { List <string> errors = new List <string>(); GR.Collections.Map <GR.Generic.Tupel <int, int>, GR.Memory.ByteBuffer> usedSectors = new GR.Collections.Map <GR.Generic.Tupel <int, int>, GR.Memory.ByteBuffer>(); int curTrack = TRACK_DIRECTORY; int curSector = SECTOR_DIRECTORY; bool endFound = false; while (!endFound) { Sector sec = Tracks[curTrack - 1].Sectors[curSector]; for (int i = 0; i < 8; ++i) { int fileTrack = sec.Data.ByteAt(0x20 * i + 3); int fileSector = sec.Data.ByteAt(0x20 * i + 4); if (sec.Data.ByteAt(0x20 * i + 2) != (byte)Types.FileType.SCRATCHED) { // valid entry? var info = new Types.FileInfo(); FollowChain(fileTrack, fileSector, usedSectors, info.Filename, errors); } } curTrack = sec.Data.ByteAt(0); curSector = sec.Data.ByteAt(1); if (curTrack == 0) { // track = 0 marks last directory entry endFound = true; } } return(errors); }
public bool MoveFileUp(Types.FileInfo File) { _LastError = ""; if (File.DirEntryIndex == 0) { return(false); } DirEntryLocation dirLocOrig = LocateDirEntry(File.DirEntryIndex); if (dirLocOrig == null) { return(false); } DirEntryLocation dirLocPrev = LocateDirEntry(File.DirEntryIndex - 1); Sector secOrig = Tracks[dirLocOrig.Track - 1].Sectors[dirLocOrig.Sector]; Sector secPrev = Tracks[dirLocPrev.Track - 1].Sectors[dirLocPrev.Sector]; // exchange dir entry content GR.Memory.ByteBuffer tempData = secOrig.Data.SubBuffer(0x20 * dirLocOrig.DirEntry + 2, 30); secPrev.Data.CopyTo(secOrig.Data, 0x20 * dirLocPrev.DirEntry + 2, 30, 0x20 * dirLocOrig.DirEntry + 2); tempData.CopyTo(secPrev.Data, 0, 30, 0x20 * dirLocPrev.DirEntry + 2); return(true); }
public override List <RetroDevStudio.Types.FileInfo> Files() { _LastError = ""; var files = new List <RetroDevStudio.Types.FileInfo>(); int dirEntryIndex = 0; foreach (FileRecord file in FileRecords) { if (file.EntryType == 1) { var info = new Types.FileInfo(); info.Filename = file.Filename; info.Blocks = (file.EndAddress - file.StartAddress) / 254 + 1; info.Type = file.C64FileType; info.DirEntryIndex = dirEntryIndex; ++dirEntryIndex; files.Add(info); } } return(files); }
private void listFiles_DragDrop(object sender, DragEventArgs e) { DragData dragData = null; if (e.Data.GetDataPresent(DataFormats.FileDrop)) { // insert file(s) string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); bool changedFile = false; foreach (string file in files) { if (!ImportFile(file)) { MessageBox.Show($"The file {file} could not be imported, too big or invalid filename", "Error importing file"); return; } else { changedFile = true; } } if (changedFile) { RefreshFileView(); SetModified(); UpdateStatusInfo(); } return; } else if (!e.Data.GetDataPresent("RetroDevStudio.FileManager+DragData")) { return; } else { dragData = (DragData)e.Data.GetData("RetroDevStudio.FileManager+DragData"); if (dragData.Parent == this) { return; } } // insert file bool changed = false; foreach (RetroDevStudio.Types.FileInfo file in dragData.Files) { Types.FileInfo fileInfo = null; if (dragData.Media != null) { fileInfo = dragData.Media.LoadFile(file.Filename); } if (fileInfo != null) { if (m_Media != null) { if (!m_Media.WriteFile(file.Filename, fileInfo.Data, file.Type)) { MessageBox.Show($"The file {file.Filename} could not be imported, too big or invalid filename", "Error importing file"); return; } else { changed = true; } } } } if (changed) { RefreshFileView(); SetModified(); UpdateStatusInfo(); } }