partial writing
This commit is contained in:
parent
b0b00b4029
commit
6aa882ecbd
|
@ -187,7 +187,15 @@ public class DiskFactory
|
|||
// System.out.printf ("Total files: %d%n", totalFiles);
|
||||
if (totalFiles == 0)
|
||||
return null;
|
||||
nuFX.getDiskBuffer ();
|
||||
|
||||
File tmp = File.createTempFile (suffix, null);
|
||||
FileOutputStream fos = new FileOutputStream (tmp);
|
||||
fos.write (nuFX.getDiskBuffer ());
|
||||
fos.close ();
|
||||
tmp.deleteOnExit ();
|
||||
file = tmp;
|
||||
suffix = "po";
|
||||
compressed = true;
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
|
|
|
@ -112,7 +112,7 @@ public class ProdosDisk
|
|||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
FileEntry addFile (String path, int type)
|
||||
public FileEntry addFile (String path, int type, byte[] dataBuffer)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
String[] subdirectories;
|
||||
|
@ -160,6 +160,8 @@ public class ProdosDisk
|
|||
fileEntry.headerPointer = catalogBlockNo;
|
||||
fileEntry.fileType = 4; // text
|
||||
|
||||
fileEntry.writeFile (dataBuffer);
|
||||
|
||||
fileEntry.write ();
|
||||
updateFileCount (fileEntry.headerPointer);
|
||||
|
||||
|
@ -169,6 +171,16 @@ public class ProdosDisk
|
|||
return null;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
public void close ()
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
writeVolumeBitMap ();
|
||||
volumeDirectoryHeader.write ();
|
||||
for (SubdirectoryHeader subdirectoryHeader : subdirectoryHeaders.values ())
|
||||
subdirectoryHeader.write ();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private FileEntry searchDirectory (int blockNo, String fileName)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
|
@ -351,4 +363,11 @@ public class ProdosDisk
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
public byte[] getBuffer ()
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
return buffer;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@ import java.nio.file.Path;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.bytezone.diskbrowser.prodos.write.ProdosDisk;
|
||||
|
||||
// -----------------------------------------------------------------------------------//
|
||||
public class NuFX
|
||||
// -----------------------------------------------------------------------------------//
|
||||
|
@ -24,13 +26,7 @@ public class NuFX
|
|||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
buffer = Files.readAllBytes (path);
|
||||
readBuffer ();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private void readBuffer ()
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
masterHeader = new MasterHeader (buffer);
|
||||
|
||||
int dataPtr = 48;
|
||||
|
@ -86,7 +82,37 @@ public class NuFX
|
|||
}
|
||||
else if (totalFiles > 0)
|
||||
{
|
||||
listFiles ();
|
||||
// listFiles ();
|
||||
try
|
||||
{
|
||||
ProdosDisk disk = new ProdosDisk (1600, "DISKBROWSER");
|
||||
int count = 0;
|
||||
for (Record record : records)
|
||||
{
|
||||
if (record.hasFile ())
|
||||
{
|
||||
String fileName = record.getFileName ();
|
||||
int fileSize = record.getFileSize ();
|
||||
int fileType = record.getFileType ();
|
||||
int eof = record.getUncompressedSize ();
|
||||
byte[] buffer = record.getData ();
|
||||
System.out.printf ("%3d %-35s %,7d %d %,7d %d%n", ++count, fileName,
|
||||
fileSize, fileType, eof, buffer.length);
|
||||
if (fileType == 4 && count > 10 && count < 16)
|
||||
{
|
||||
disk.addFile (fileName, fileType, buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
disk.close ();
|
||||
|
||||
return disk.getBuffer ();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace ();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
@ -193,6 +193,16 @@ class Record
|
|||
return 0;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
byte[] getData ()
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
for (Thread thread : threads)
|
||||
if (thread.hasFile ())
|
||||
return thread.getData ();
|
||||
return null;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
@Override
|
||||
public String toString ()
|
||||
|
|
Loading…
Reference in New Issue