Ejemplo n.º 1
0
 /// <summary>
 /// Read and parse a file.  The returned object contains the file data and any meta-information related to the file.
 /// </summary>
 /// <param name="filename">Name of file to read.</param>
 /// <returns>File object.</returns>
 /// <exception cref="InvalidFileException">The file format is invalid.</exception>
 public IFile ReadFile(string filename)
 {
     if (IsDisposed)
     {
         throw new ObjectDisposedException(GetType().FullName);
     }
     if (filename == null)
     {
         throw new ArgumentNullException("filename");
     }
     return(DragonDosFile.DecodeFile((DragonDosFileInfo)GetFileInfo(filename), ReadFileRaw(filename)));
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Write a DragonDos file to a plain data file in the local file system.
 /// </summary>
 /// <param name="file">DragonDos file.</param>
 /// <param name="localFilename">Local filename.</param>
 private void SaveToPlainFile(DragonDosFile file, string localFilename)
 {
     if (file.FileType == DragonDosFileType.Basic && ascii)
     {
         var basicTokenizer = new DragonBasicTokenizer(DragonBasicDialect.DragonDos);
         var basicText = basicTokenizer.Decode(file.GetData());
         var output = new StreamWriter(new FileStream(localFilename, FileMode.Create), Encoding.ASCII);
         output.Write(basicText);
         output.Close();
     }
     else
     {
         File.WriteAllBytes(localFilename, file.GetData());
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Write a DragonDos file to a file container.
 /// </summary>
 /// <param name="file">DragonDos file to write to a new container.</param>
 /// <param name="localFilename">Filename of new container.</param>
 /// <param name="ai">Enumerator for accessing any container-specific arguments.</param>
 private void SaveLocalFile(DragonDosFile file, string localFilename, IEnumerator<string> ai)
 {
     if (localFilename.EndsWith(".CAS", StringComparison.InvariantCultureIgnoreCase))
     {
         SaveToCasFile(file, localFilename, ai);
     }
     else
     {
         SaveToPlainFile(file, localFilename);
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Write a DragonDos file to a Dragon virtual tape in the CAS format.  If the CAS file already exists, write the
        /// file to the end of the virtual tape.
        /// </summary>
        /// <param name="file">DragonDos file.</param>
        /// <param name="tapeFilename">Name of the CAS file.</param>
        /// <param name="ai">Additional arguments: Optional name of file within virtual tape container.</param>
        private void SaveToCasFile(DragonDosFile file, string tapeFilename, IEnumerator<string> ai)
        {
            var localFilename = ai.MoveNext() ? ai.Current : file.FileInfo.Name;

            IFile dragonFile;
            switch (file.FileType)
            {
                case DragonDosFileType.MachineCode:
                    dragonFile = DragonFile.CreateMachineCodeFile(localFilename, file.GetData(), file.LoadAddress, file.StartAddress, false, false);
                    break;
                case DragonDosFileType.Basic:
                    if (ascii)
                    {
                        var basicTokenizer = new DragonBasicTokenizer(DragonBasicDialect.DragonDos);
                        var basicText = basicTokenizer.DecodeToBytes(file.GetData());
                        dragonFile = DragonFile.CreateBasicFile(localFilename, basicText, true, true);
                    }
                    else
                        dragonFile = DragonFile.CreateBasicFile(localFilename, file.GetData(), false, false);
                    break;
                default:
                    dragonFile = DragonFile.CreateDataFile(localFilename, file.GetData(), false, false);
                    break;
            }

            using (var tape = new DragonTape(new CasTape(new FileStream(tapeFilename, FileMode.Append))))
            {
                tape.WriteFile(dragonFile);
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Output information about a DragonDos file to the console.
 /// </summary>
 /// <param name="file">File to output information about.</param>
 private static void PrintFileInformation(DragonDosFile file)
 {
     switch (file.FileType)
     {
         case DragonDosFileType.MachineCode:
             Console.WriteLine("DragonDos machine code program: Load address={0} Length={1} Start address={2}", file.LoadAddress, file.Length, file.StartAddress);
             break;
         case DragonDosFileType.Basic:
             Console.WriteLine("DragonDos BASIC program: Length={0}", file.Length);
             break;
         default:
             Console.WriteLine("DragonDos data file: Length={0}", file.Length);
             break;
     }
 }