dsktool 0.2.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/dskexplorer.rb +79 -61
- data/bin/dsktool.rb +243 -142
- data/bin/romdump.rb +65 -0
- data/doc/classes/AppleSoftFile.html +97 -59
- data/doc/classes/AppleSoftFile.src/{M000005.html → M000113.html} +1 -1
- data/doc/classes/AppleSoftFile.src/M000114.html +18 -0
- data/doc/classes/AppleSoftFile.src/{M000013.html → M000115.html} +1 -1
- data/doc/classes/AppleSoftFile.src/{M000014.html → M000116.html} +1 -1
- data/doc/classes/AppleSoftFile.src/{M000010.html → M000117.html} +1 -1
- data/doc/classes/AppleSoftFile.src/M000118.html +18 -0
- data/doc/classes/AppleSoftFile.src/{M000006.html → M000119.html} +1 -1
- data/doc/classes/AppleSoftFile.src/{M000022.html → M000120.html} +1 -1
- data/doc/classes/BinaryFile.html +184 -26
- data/doc/classes/BinaryFile.src/{M000021.html → M000218.html} +1 -1
- data/doc/classes/{DOSFile.src/M000017.html → BinaryFile.src/M000219.html} +4 -3
- data/doc/classes/BinaryFile.src/{M000025.html → M000220.html} +1 -1
- data/doc/classes/BinaryFile.src/M000221.html +19 -0
- data/doc/classes/BinaryFile.src/M000222.html +19 -0
- data/doc/classes/BinaryFile.src/M000223.html +19 -0
- data/doc/classes/BinaryFile.src/M000224.html +18 -0
- data/doc/classes/BinaryFile.src/{M000015.html → M000225.html} +1 -1
- data/doc/classes/{AppleSoftFile.src/M000008.html → BinaryFile.src/M000226.html} +4 -4
- data/doc/classes/BinaryFile.src/{M000030.html → M000227.html} +1 -1
- data/doc/classes/BinaryFile.src/M000228.html +19 -0
- data/doc/classes/BinaryFile.src/M000229.html +19 -0
- data/doc/classes/BinaryFile.src/M000230.html +19 -0
- data/doc/classes/BinaryFile.src/M000231.html +18 -0
- data/doc/classes/CatalogServlet.html +5 -15
- data/doc/classes/CatalogServlet.src/{M000021.html → M000064.html} +1 -1
- data/doc/classes/D65.html +60 -18
- data/doc/classes/D65.src/{M000006.html → M000099.html} +0 -0
- data/doc/classes/D65.src/{M000032.html → M000100.html} +6 -6
- data/doc/classes/D65.src/{M000009.html → M000101.html} +1 -1
- data/doc/classes/D65.src/{M000011.html → M000102.html} +7 -7
- data/doc/classes/DOSDisk.html +291 -23
- data/doc/classes/DOSDisk.src/M000127.html +23 -0
- data/doc/classes/DOSDisk.src/M000128.html +18 -0
- data/doc/classes/DOSDisk.src/{M000012.html → M000129.html} +3 -3
- data/doc/classes/DOSDisk.src/M000130.html +37 -0
- data/doc/classes/DOSDisk.src/{M000043.html → M000131.html} +17 -8
- data/doc/classes/DOSDisk.src/M000132.html +37 -0
- data/doc/classes/DOSDisk.src/M000133.html +34 -0
- data/doc/classes/DOSDisk.src/M000134.html +27 -0
- data/doc/classes/DOSDisk.src/M000135.html +43 -0
- data/doc/classes/DOSDisk.src/M000136.html +31 -0
- data/doc/classes/DOSDisk.src/M000137.html +95 -0
- data/doc/classes/DOSDisk.src/M000138.html +23 -0
- data/doc/classes/{BinaryFile.src/M000023.html → DOSDisk.src/M000139.html} +4 -4
- data/doc/classes/DOSDisk.src/{M000016.html → M000140.html} +3 -3
- data/doc/classes/DOSDisk.src/M000141.html +22 -0
- data/doc/classes/DOSDisk.src/{M000017.html → M000142.html} +26 -17
- data/doc/classes/DOSDisk.src/M000143.html +37 -0
- data/doc/classes/DOSDisk.src/M000144.html +34 -0
- data/doc/classes/DOSDisk.src/M000145.html +92 -0
- data/doc/classes/DOSFile.html +135 -36
- data/doc/classes/DOSFile.src/{M000016.html → M000251.html} +5 -5
- data/doc/classes/DOSFile.src/{M000043.html → M000252.html} +1 -1
- data/doc/classes/DOSFile.src/M000253.html +18 -0
- data/doc/classes/DOSFile.src/M000254.html +28 -0
- data/doc/classes/DOSFile.src/M000255.html +18 -0
- data/doc/classes/DOSFile.src/{M000021.html → M000256.html} +4 -4
- data/doc/classes/DOSFile.src/{M000049.html → M000257.html} +1 -1
- data/doc/classes/DOSFile.src/M000258.html +18 -0
- data/doc/classes/DOSFile.src/M000259.html +28 -0
- data/doc/classes/DSK.html +735 -65
- data/doc/classes/DSK.src/{M000027.html → M000163.html} +3 -2
- data/doc/classes/{D65.src/M000003.html → DSK.src/M000164.html} +4 -4
- data/doc/classes/DSK.src/M000165.html +18 -0
- data/doc/classes/DSK.src/M000166.html +18 -0
- data/doc/classes/DSK.src/M000167.html +18 -0
- data/doc/classes/DSK.src/M000168.html +18 -0
- data/doc/classes/DSK.src/M000169.html +25 -0
- data/doc/classes/DSK.src/{M000043.html → M000170.html} +3 -2
- data/doc/classes/DSK.src/M000171.html +22 -0
- data/doc/classes/DSK.src/M000172.html +22 -0
- data/doc/classes/DSK.src/{M000035.html → M000173.html} +7 -3
- data/doc/classes/DSK.src/M000174.html +25 -0
- data/doc/classes/DSK.src/M000175.html +30 -0
- data/doc/classes/DSK.src/M000176.html +65 -0
- data/doc/classes/DSK.src/M000177.html +22 -0
- data/doc/classes/DSK.src/M000178.html +23 -0
- data/doc/classes/DSK.src/M000179.html +24 -0
- data/doc/classes/DSK.src/M000180.html +21 -0
- data/doc/classes/DSK.src/{M000012.html → M000181.html} +1 -1
- data/doc/classes/DSK.src/M000182.html +24 -0
- data/doc/classes/DSK.src/{M000053.html → M000183.html} +1 -1
- data/doc/classes/DSK.src/{M000054.html → M000184.html} +3 -3
- data/doc/classes/DSK.src/{M000033.html → M000185.html} +3 -2
- data/doc/classes/{DOSFile.src/M000018.html → DSK.src/M000186.html} +4 -4
- data/doc/classes/DSK.src/M000187.html +18 -0
- data/doc/classes/DSK.src/M000188.html +18 -0
- data/doc/classes/DSK.src/M000189.html +18 -0
- data/doc/classes/DSK.src/M000190.html +18 -0
- data/doc/classes/DSK.src/M000191.html +25 -0
- data/doc/classes/DSK.src/{M000047.html → M000192.html} +3 -2
- data/doc/classes/DSK.src/M000193.html +22 -0
- data/doc/classes/DSK.src/M000194.html +22 -0
- data/doc/classes/DSK.src/{M000015.html → M000195.html} +7 -3
- data/doc/classes/DSK.src/M000196.html +20 -0
- data/doc/classes/DSK.src/M000197.html +21 -0
- data/doc/classes/DSK.src/M000198.html +27 -0
- data/doc/classes/DSK.src/M000199.html +65 -0
- data/doc/classes/DSK.src/M000200.html +22 -0
- data/doc/classes/DSK.src/M000201.html +23 -0
- data/doc/classes/DSK.src/M000202.html +24 -0
- data/doc/classes/DSK.src/M000203.html +21 -0
- data/doc/classes/DSK.src/{M000022.html → M000204.html} +1 -1
- data/doc/classes/DSK.src/M000205.html +24 -0
- data/doc/classes/DSK.src/M000206.html +24 -0
- data/doc/classes/DSK.src/{M000024.html → M000207.html} +6 -5
- data/doc/classes/DSKFile.html +472 -0
- data/doc/classes/{NADOLFile.src/M000027.html → DSKFile.src/M000147.html} +2 -2
- data/doc/classes/{DOSFile.src/M000025.html → DSKFile.src/M000148.html} +2 -2
- data/doc/classes/DSKFile.src/M000149.html +25 -0
- data/doc/classes/{BinaryFile.src/M000040.html → DSKFile.src/M000150.html} +2 -2
- data/doc/classes/DSKFile.src/M000151.html +18 -0
- data/doc/classes/{BinaryFile.src/M000020.html → DSKFile.src/M000152.html} +4 -4
- data/doc/classes/DSKFile.src/M000153.html +18 -0
- data/doc/classes/DSKFile.src/M000154.html +50 -0
- data/doc/classes/{NADOLFile.src/M000031.html → DSKFile.src/M000155.html} +2 -2
- data/doc/classes/{DOSFile.src/M000029.html → DSKFile.src/M000156.html} +2 -2
- data/doc/classes/DSKFile.src/M000157.html +25 -0
- data/doc/classes/{BinaryFile.src/M000046.html → DSKFile.src/M000158.html} +2 -2
- data/doc/classes/DSKFile.src/M000159.html +18 -0
- data/doc/classes/DSKFile.src/M000160.html +18 -0
- data/doc/classes/DSKFile.src/M000161.html +18 -0
- data/doc/classes/DSKFile.src/M000162.html +50 -0
- data/doc/classes/DSKTrackSector.html +256 -0
- data/doc/classes/DSKTrackSector.src/M000093.html +20 -0
- data/doc/classes/DSKTrackSector.src/M000094.html +18 -0
- data/doc/classes/DSKTrackSector.src/M000095.html +21 -0
- data/doc/classes/DSKTrackSector.src/M000096.html +20 -0
- data/doc/classes/DSKTrackSector.src/M000097.html +18 -0
- data/doc/classes/DSKTrackSector.src/M000098.html +21 -0
- data/doc/classes/DirectoryServlet.html +5 -15
- data/doc/classes/DirectoryServlet.src/{M000023.html → M000086.html} +1 -1
- data/doc/classes/DumpUtilities.html +186 -0
- data/doc/classes/DumpUtilities.src/M000109.html +33 -0
- data/doc/classes/DumpUtilities.src/M000110.html +23 -0
- data/doc/classes/DumpUtilities.src/M000111.html +33 -0
- data/doc/classes/DumpUtilities.src/M000112.html +23 -0
- data/doc/classes/HGR.html +324 -0
- data/doc/classes/HGR.src/M000247.html +29 -0
- data/doc/classes/HGR.src/M000248.html +56 -0
- data/doc/classes/HGR.src/M000249.html +29 -0
- data/doc/classes/HGR.src/M000250.html +56 -0
- data/doc/classes/IntegerBasicFile.html +127 -26
- data/doc/classes/IntegerBasicFile.src/{M000001.html → M000056.html} +1 -1
- data/doc/classes/IntegerBasicFile.src/{M000007.html → M000057.html} +1 -1
- data/doc/classes/IntegerBasicFile.src/M000058.html +18 -0
- data/doc/classes/IntegerBasicFile.src/{M000008.html → M000059.html} +1 -1
- data/doc/classes/IntegerBasicFile.src/{M000004.html → M000060.html} +1 -1
- data/doc/classes/IntegerBasicFile.src/{M000013.html → M000061.html} +1 -1
- data/doc/classes/IntegerBasicFile.src/M000062.html +18 -0
- data/doc/classes/IntegerBasicFile.src/{M000014.html → M000063.html} +1 -1
- data/doc/classes/NADOLBinaryFile.html +84 -13
- data/doc/classes/NADOLBinaryFile.src/{M000033.html → M000103.html} +1 -1
- data/doc/classes/{NADOLFile.src/M000028.html → NADOLBinaryFile.src/M000104.html} +4 -4
- data/doc/classes/{NADOLFile.src/M000032.html → NADOLBinaryFile.src/M000105.html} +4 -4
- data/doc/classes/NADOLBinaryFile.src/{M000037.html → M000106.html} +1 -1
- data/doc/classes/{BinaryFile.src/M000055.html → NADOLBinaryFile.src/M000107.html} +4 -4
- data/doc/classes/NADOLBinaryFile.src/M000108.html +18 -0
- data/doc/classes/NADOLDisk.html +346 -23
- data/doc/classes/NADOLDisk.src/M000034.html +23 -0
- data/doc/classes/NADOLDisk.src/{M000019.html → M000035.html} +3 -3
- data/doc/classes/NADOLDisk.src/M000036.html +18 -0
- data/doc/classes/NADOLDisk.src/M000037.html +29 -0
- data/doc/classes/NADOLDisk.src/M000038.html +34 -0
- data/doc/classes/NADOLDisk.src/M000039.html +32 -0
- data/doc/classes/NADOLDisk.src/M000040.html +22 -0
- data/doc/classes/NADOLDisk.src/M000041.html +38 -0
- data/doc/classes/NADOLDisk.src/M000042.html +27 -0
- data/doc/classes/NADOLDisk.src/M000043.html +53 -0
- data/doc/classes/NADOLDisk.src/M000044.html +46 -0
- data/doc/classes/NADOLDisk.src/M000045.html +23 -0
- data/doc/classes/NADOLDisk.src/{M000022.html → M000046.html} +3 -3
- data/doc/classes/{AppleSoftFile.src/M000009.html → NADOLDisk.src/M000047.html} +4 -4
- data/doc/classes/NADOLDisk.src/M000048.html +29 -0
- data/doc/classes/NADOLDisk.src/M000049.html +34 -0
- data/doc/classes/NADOLDisk.src/M000050.html +32 -0
- data/doc/classes/NADOLDisk.src/M000051.html +22 -0
- data/doc/classes/NADOLDisk.src/M000052.html +38 -0
- data/doc/classes/NADOLDisk.src/M000053.html +27 -0
- data/doc/classes/NADOLDisk.src/M000054.html +53 -0
- data/doc/classes/NADOLDisk.src/M000055.html +46 -0
- data/doc/classes/NADOLFile.html +67 -51
- data/doc/classes/NADOLFile.src/{M000029.html → M000087.html} +1 -1
- data/doc/classes/NADOLFile.src/M000088.html +18 -0
- data/doc/classes/NADOLFile.src/M000089.html +28 -0
- data/doc/classes/NADOLFile.src/{M000033.html → M000090.html} +1 -1
- data/doc/classes/NADOLFile.src/M000091.html +18 -0
- data/doc/classes/NADOLFile.src/M000092.html +28 -0
- data/doc/classes/NADOLTokenisedFile.html +111 -32
- data/doc/classes/NADOLTokenisedFile.src/{M000068.html → M000276.html} +1 -1
- data/doc/classes/NADOLTokenisedFile.src/M000277.html +49 -0
- data/doc/classes/NADOLTokenisedFile.src/{M000064.html → M000278.html} +1 -1
- data/doc/classes/NADOLTokenisedFile.src/{M000065.html → M000279.html} +1 -1
- data/doc/classes/NADOLTokenisedFile.src/{M000061.html → M000280.html} +1 -1
- data/doc/classes/NADOLTokenisedFile.src/M000281.html +49 -0
- data/doc/classes/NADOLTokenisedFile.src/{M000069.html → M000282.html} +1 -1
- data/doc/classes/NADOLTokenisedFile.src/{M000070.html → M000283.html} +1 -1
- data/doc/classes/PNG.html +163 -0
- data/doc/classes/PNG.src/M000284.html +26 -0
- data/doc/classes/PNG.src/M000285.html +26 -0
- data/doc/classes/PascalDisk.html +274 -0
- data/doc/classes/PascalDisk.src/M000268.html +23 -0
- data/doc/classes/PascalDisk.src/M000269.html +19 -0
- data/doc/classes/PascalDisk.src/M000270.html +18 -0
- data/doc/classes/PascalDisk.src/M000271.html +60 -0
- data/doc/classes/PascalDisk.src/M000272.html +23 -0
- data/doc/classes/PascalDisk.src/M000273.html +19 -0
- data/doc/classes/PascalDisk.src/M000274.html +18 -0
- data/doc/classes/PascalDisk.src/M000275.html +60 -0
- data/doc/classes/PascalFile.html +322 -0
- data/doc/classes/{DOSFile.src/M000022.html → PascalFile.src/M000237.html} +5 -6
- data/doc/classes/{TextFile.src/M000027.html → PascalFile.src/M000238.html} +3 -3
- data/doc/classes/{AppleSoftFile.src/M000028.html → PascalFile.src/M000239.html} +3 -3
- data/doc/classes/PascalFile.src/M000240.html +19 -0
- data/doc/classes/PascalFile.src/M000241.html +18 -0
- data/doc/classes/{DOSFile.src/M000023.html → PascalFile.src/M000242.html} +5 -6
- data/doc/classes/{TextFile.src/M000032.html → PascalFile.src/M000243.html} +3 -3
- data/doc/classes/PascalFile.src/M000244.html +18 -0
- data/doc/classes/PascalFile.src/M000245.html +19 -0
- data/doc/classes/PascalFile.src/M000246.html +18 -0
- data/doc/classes/ProDOSDisk.html +414 -0
- data/doc/classes/ProDOSDisk.src/M000073.html +18 -0
- data/doc/classes/ProDOSDisk.src/M000074.html +23 -0
- data/doc/classes/{DOSDisk.src/M000030.html → ProDOSDisk.src/M000075.html} +5 -5
- data/doc/classes/ProDOSDisk.src/M000076.html +18 -0
- data/doc/classes/{DSK.src/M000052.html → ProDOSDisk.src/M000077.html} +8 -9
- data/doc/classes/ProDOSDisk.src/M000078.html +98 -0
- data/doc/classes/ProDOSDisk.src/M000079.html +18 -0
- data/doc/classes/ProDOSDisk.src/M000080.html +23 -0
- data/doc/classes/ProDOSDisk.src/M000081.html +19 -0
- data/doc/classes/ProDOSDisk.src/M000082.html +18 -0
- data/doc/classes/ProDOSDisk.src/M000083.html +36 -0
- data/doc/classes/ProDOSDisk.src/M000084.html +98 -0
- data/doc/classes/ProDOSFile.html +282 -0
- data/doc/classes/ProDOSFile.src/M000121.html +23 -0
- data/doc/classes/{AppleSoftFile.src/M000036.html → ProDOSFile.src/M000122.html} +3 -3
- data/doc/classes/ProDOSFile.src/M000123.html +30 -0
- data/doc/classes/ProDOSFile.src/M000124.html +23 -0
- data/doc/classes/ProDOSFile.src/M000125.html +18 -0
- data/doc/classes/ProDOSFile.src/M000126.html +30 -0
- data/doc/classes/RDoc.html +29 -12
- data/doc/classes/RDoc.src/{M000048.html → M000295.html} +0 -0
- data/doc/classes/RDoc.src/{M000032.html → M000296.html} +1 -1
- data/doc/classes/SCAsmFile.html +117 -31
- data/doc/classes/SCAsmFile.src/{M000048.html → M000208.html} +1 -1
- data/doc/classes/{DOSFile.src/M000024.html → SCAsmFile.src/M000209.html} +4 -3
- data/doc/classes/SCAsmFile.src/{M000026.html → M000210.html} +1 -1
- data/doc/classes/SCAsmFile.src/{M000027.html → M000211.html} +1 -1
- data/doc/classes/SCAsmFile.src/{M000058.html → M000212.html} +1 -1
- data/doc/classes/SCAsmFile.src/{M000025.html → M000213.html} +1 -1
- data/doc/classes/SCAsmFile.src/M000214.html +18 -0
- data/doc/classes/SCAsmFile.src/{M000036.html → M000215.html} +1 -1
- data/doc/classes/SCAsmFile.src/{M000037.html → M000216.html} +1 -1
- data/doc/classes/SCAsmFile.src/{M000053.html → M000217.html} +4 -1
- data/doc/classes/ShowFileServlet.html +5 -15
- data/doc/classes/ShowFileServlet.src/{M000040.html → M000146.html} +2 -2
- data/doc/classes/ShowPNGServlet.html +137 -0
- data/doc/classes/{ShowFileServlet.src/M000032.html → ShowPNGServlet.src/M000232.html} +10 -6
- data/doc/classes/ShowSectorServlet.html +5 -15
- data/doc/classes/ShowSectorServlet.src/{M000029.html → M000085.html} +1 -1
- data/doc/classes/TestDOSDisks.html +220 -28
- data/doc/classes/TestDOSDisks.src/M000014.html +1 -1
- data/doc/classes/TestDOSDisks.src/M000015.html +1 -1
- data/doc/classes/TestDOSDisks.src/M000016.html +32 -9
- data/doc/classes/TestDOSDisks.src/M000017.html +9 -6
- data/doc/classes/TestDOSDisks.src/M000018.html +5 -10
- data/doc/classes/TestDOSDisks.src/M000019.html +5 -27
- data/doc/classes/TestDOSDisks.src/M000020.html +8 -10
- data/doc/classes/TestDOSDisks.src/{M000010.html → M000021.html} +9 -3
- data/doc/classes/TestDOSDisks.src/{M000011.html → M000022.html} +5 -4
- data/doc/classes/TestDOSDisks.src/M000023.html +28 -0
- data/doc/classes/TestDOSDisks.src/{M000012.html → M000024.html} +2 -0
- data/doc/classes/TestDOSDisks.src/{M000001.html → M000025.html} +1 -1
- data/doc/classes/TestDOSDisks.src/M000026.html +62 -0
- data/doc/classes/TestDOSDisks.src/M000027.html +22 -0
- data/doc/classes/TestDOSDisks.src/M000028.html +20 -0
- data/doc/classes/TestDOSDisks.src/{M000008.html → M000029.html} +2 -2
- data/doc/classes/TestDOSDisks.src/{M000009.html → M000030.html} +2 -2
- data/doc/classes/TestDOSDisks.src/{M000004.html → M000031.html} +9 -3
- data/doc/classes/TestDOSDisks.src/{M000005.html → M000032.html} +5 -4
- data/doc/classes/TestDOSDisks.src/M000033.html +28 -0
- data/doc/classes/TestDisassembly.html +24 -12
- data/doc/classes/TestDisassembly.src/{M000008.html → M000071.html} +1 -1
- data/doc/classes/TestDisassembly.src/{M000007.html → M000072.html} +0 -0
- data/doc/classes/TestNADOLDisks.html +44 -17
- data/doc/classes/TestNADOLDisks.src/M000233.html +22 -0
- data/doc/classes/TestNADOLDisks.src/M000234.html +73 -0
- data/doc/classes/TestNADOLDisks.src/M000235.html +22 -0
- data/doc/classes/TestNADOLDisks.src/M000236.html +73 -0
- data/doc/classes/TestPascalDisks.html +216 -0
- data/doc/classes/TestPascalDisks.src/M000065.html +28 -0
- data/doc/classes/TestPascalDisks.src/M000066.html +24 -0
- data/doc/classes/TestPascalDisks.src/M000067.html +27 -0
- data/doc/classes/TestPascalDisks.src/M000068.html +28 -0
- data/doc/classes/TestPascalDisks.src/M000069.html +24 -0
- data/doc/classes/TestPascalDisks.src/M000070.html +27 -0
- data/doc/classes/TestProDOSDisks.html +246 -0
- data/doc/classes/TestProDOSDisks.src/M000260.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000261.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000262.html +41 -0
- data/doc/classes/TestProDOSDisks.src/M000263.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000264.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000265.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000266.html +41 -0
- data/doc/classes/TestProDOSDisks.src/M000267.html +28 -0
- data/doc/classes/TextFile.html +109 -26
- data/doc/classes/TextFile.src/{M000019.html → M000286.html} +1 -1
- data/doc/classes/{DOSFile.src/M000028.html → TextFile.src/M000287.html} +4 -3
- data/doc/classes/TextFile.src/{M000031.html → M000288.html} +1 -1
- data/doc/classes/TextFile.src/{M000020.html → M000289.html} +3 -3
- data/doc/classes/TextFile.src/{M000024.html → M000290.html} +1 -1
- data/doc/classes/TextFile.src/M000291.html +18 -0
- data/doc/classes/TextFile.src/{M000036.html → M000292.html} +1 -1
- data/doc/classes/TextFile.src/{M000037.html → M000293.html} +3 -3
- data/doc/classes/TextFile.src/M000294.html +18 -0
- data/doc/created.rid +1 -1
- data/doc/dot/f_0.dot +14 -1
- data/doc/files/bin/dskexplorer_rb.html +2 -12
- data/doc/files/bin/dskexplorer_rb.src/M000007.html +2 -4
- data/doc/files/bin/dskexplorer_rb.src/M000008.html +1 -1
- data/doc/files/bin/dskexplorer_rb.src/M000009.html +1 -1
- data/doc/files/bin/dskexplorer_rb.src/M000010.html +7 -3
- data/doc/files/bin/dskexplorer_rb.src/M000011.html +10 -6
- data/doc/files/bin/dskexplorer_rb.src/M000012.html +9 -12
- data/doc/files/bin/dskexplorer_rb.src/M000013.html +7 -4
- data/doc/files/bin/dsktool_rb.html +93 -41
- data/doc/files/bin/romdump_rb.html +184 -0
- data/doc/files/dsktool_web/dskexplorer_rb.html +107 -0
- data/doc/files/dsktool_web/index_rb.html +107 -0
- data/doc/files/lib/D65_rb.html +1 -7
- data/doc/files/lib/DOSDisk_rb.html +1 -8
- data/doc/files/lib/DOSFile_rb.html +3 -12
- data/doc/files/{test/test_dos_disks_rb.html → lib/DSKFile_rb.html} +5 -6
- data/doc/files/lib/DSK_rb.html +5 -7
- data/doc/files/lib/DumpUtilities_rb.html +101 -0
- data/doc/files/lib/HGR_rb.html +115 -0
- data/doc/files/lib/NADOLDisk_rb.html +1 -8
- data/doc/files/lib/NADOLFile_rb.html +3 -9
- data/doc/files/lib/PascalDisk_rb.html +108 -0
- data/doc/files/lib/PascalFile_rb.html +109 -0
- data/doc/files/lib/ProDOSDisk_rb.html +108 -0
- data/doc/files/lib/ProDOSFile_rb.html +108 -0
- data/doc/files/lib/rdoc_patch_rb.html +1 -7
- data/doc/files/test/backup/D65_rb.html +108 -0
- data/doc/files/test/backup/DOSDisk_rb.html +108 -0
- data/doc/files/test/backup/DOSFile_rb.html +110 -0
- data/doc/files/test/backup/DSKFile_rb.html +108 -0
- data/doc/files/test/backup/DSK_rb.html +116 -0
- data/doc/files/test/backup/DumpUtilities_rb.html +101 -0
- data/doc/files/test/backup/HGR_rb.html +115 -0
- data/doc/files/test/backup/NADOLDisk_rb.html +108 -0
- data/doc/files/test/backup/NADOLFile_rb.html +111 -0
- data/doc/files/test/backup/PascalDisk_rb.html +108 -0
- data/doc/files/test/backup/PascalFile_rb.html +109 -0
- data/doc/files/test/backup/ProDOSDisk_rb.html +108 -0
- data/doc/files/test/backup/ProDOSFile_rb.html +108 -0
- data/doc/files/test/backup/comp_rb.html +101 -0
- data/doc/files/test/backup/compress_dos_dsk_rb.html +114 -0
- data/doc/files/test/backup/extract_nadol_startup_rb.html +134 -0
- data/doc/files/test/backup/hgr_scanlines_rb.html +101 -0
- data/doc/files/test/backup/rdoc_patch_rb.html +108 -0
- data/doc/files/test/backup/tc_disassembly_rb.html +116 -0
- data/doc/files/test/backup/tc_dos_disks_rb.html +115 -0
- data/doc/files/test/backup/tc_nadol_disks_rb.html +115 -0
- data/doc/files/test/backup/tc_pascal_disks_rb.html +115 -0
- data/doc/files/test/backup/tc_prodos_disks_rb.html +115 -0
- data/doc/files/test/backup/ts_test_all_rb.html +112 -0
- data/doc/files/test/comp_rb.html +101 -0
- data/doc/files/test/compress_dos_dsk_rb.html +114 -0
- data/doc/files/test/extract_nadol_startup_rb.html +134 -0
- data/doc/files/test/hgr_scanlines_rb.html +101 -0
- data/doc/files/test/tc_disassembly_rb.html +1 -8
- data/doc/files/test/tc_dos_disks_rb.html +1 -8
- data/doc/files/test/tc_nadol_disks_rb.html +1 -8
- data/doc/files/test/tc_pascal_disks_rb.html +115 -0
- data/doc/files/test/tc_prodos_disks_rb.html +115 -0
- data/doc/files/test/ts_test_all_rb.html +3 -6
- data/doc/fr_class_index.html +12 -0
- data/doc/fr_file_index.html +40 -0
- data/doc/fr_method_index.html +281 -59
- data/lib/D65.rb +6 -6
- data/lib/DOSDisk.rb +248 -18
- data/lib/DOSFile.rb +75 -104
- data/lib/DSK.rb +198 -44
- data/lib/DSKFile.rb +141 -0
- data/lib/DumpUtilities.rb +30 -0
- data/lib/HGR.rb +136 -0
- data/lib/NADOLDisk.rb +199 -42
- data/lib/NADOLFile.rb +73 -35
- data/lib/PascalDisk.rb +121 -0
- data/lib/PascalFile.rb +62 -0
- data/lib/ProDOSDisk.rb +197 -0
- data/lib/ProDOSFile.rb +162 -0
- data/lib/a2_symbols.yaml +2 -2
- data/lib/dos33_blank.dsk.gz +0 -0
- data/lib/nadol_blank.po.gz +0 -0
- data/test/ADTPRO-1.0.1.DSK +0 -0
- data/test/ADTPRO-1.0.1.PO +0 -0
- data/test/Algebra Mentor (19xx)(John C. Miller)(Disk 1 of 7 Side A)(Student Disk 1).dsk.gz +0 -0
- data/test/Apple Works V5.0 (1993)(Beagle Bros)(Disks 5 of 6).dsk.gz +0 -0
- data/test/Geos (1988)(Berkeley Softworks)(Disk 1 of 4 Side A).dsk.gz +0 -0
- data/test/Zoom Grafix (1982)(Phoenix Software)[cr].dsk.gz +0 -0
- data/test/adventure_teacher_4.dsk.gz +0 -0
- data/test/camps.dsk.gz +0 -0
- data/test/dosmaster.po +0 -0
- data/test/hgr_scanlines.rb +194 -0
- data/test/nadol1.po +0 -0
- data/test/nadol_blank.po.gz +0 -0
- data/test/operation_frog1.dsk.gz +0 -0
- data/test/tc_dos_disks.rb +89 -14
- data/test/tc_nadol_disks.rb +47 -5
- data/test/tc_pascal_disks.rb +47 -0
- data/test/tc_prodos_disks.rb +78 -0
- data/test/test1.dsk +0 -0
- data/test/ts_test_all.rb +2 -0
- data/test/white_01b.dsk +0 -0
- data/test/white_03b.dsk +0 -0
- data/test/white_20a.dsk +0 -0
- metadata +400 -368
- data/doc/classes/AppleSoftFile.src/M000011.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000012.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000020.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000021.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000026.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000027.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000032.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000033.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000034.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000035.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000038.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000039.html +0 -18
- data/doc/classes/AppleSoftFile.src/M000040.html +0 -18
- data/doc/classes/BinaryFile.src/M000022.html +0 -19
- data/doc/classes/BinaryFile.src/M000024.html +0 -18
- data/doc/classes/BinaryFile.src/M000026.html +0 -19
- data/doc/classes/BinaryFile.src/M000029.html +0 -18
- data/doc/classes/BinaryFile.src/M000031.html +0 -19
- data/doc/classes/BinaryFile.src/M000039.html +0 -18
- data/doc/classes/BinaryFile.src/M000041.html +0 -19
- data/doc/classes/BinaryFile.src/M000045.html +0 -18
- data/doc/classes/BinaryFile.src/M000047.html +0 -19
- data/doc/classes/BinaryFile.src/M000052.html +0 -18
- data/doc/classes/BinaryFile.src/M000053.html +0 -18
- data/doc/classes/BinaryFile.src/M000054.html +0 -18
- data/doc/classes/BinaryFile.src/M000056.html +0 -19
- data/doc/classes/BinaryFile.src/M000059.html +0 -18
- data/doc/classes/BinaryFile.src/M000060.html +0 -18
- data/doc/classes/BinaryFile.src/M000061.html +0 -19
- data/doc/classes/CatalogServlet.src/M000015.html +0 -20
- data/doc/classes/CatalogServlet.src/M000024.html +0 -20
- data/doc/classes/CatalogServlet.src/M000027.html +0 -20
- data/doc/classes/D65.src/M000002.html +0 -18
- data/doc/classes/D65.src/M000004.html +0 -64
- data/doc/classes/D65.src/M000005.html +0 -18
- data/doc/classes/D65.src/M000007.html +0 -18
- data/doc/classes/D65.src/M000008.html +0 -18
- data/doc/classes/D65.src/M000010.html +0 -18
- data/doc/classes/D65.src/M000018.html +0 -18
- data/doc/classes/D65.src/M000019.html +0 -64
- data/doc/classes/D65.src/M000024.html +0 -18
- data/doc/classes/D65.src/M000025.html +0 -64
- data/doc/classes/D65.src/M000030.html +0 -18
- data/doc/classes/D65.src/M000031.html +0 -18
- data/doc/classes/D65.src/M000035.html +0 -18
- data/doc/classes/D65.src/M000036.html +0 -64
- data/doc/classes/DOSDisk.src/M000007.html +0 -20
- data/doc/classes/DOSDisk.src/M000008.html +0 -77
- data/doc/classes/DOSDisk.src/M000010.html +0 -20
- data/doc/classes/DOSDisk.src/M000011.html +0 -20
- data/doc/classes/DOSDisk.src/M000013.html +0 -20
- data/doc/classes/DOSDisk.src/M000014.html +0 -20
- data/doc/classes/DOSDisk.src/M000015.html +0 -20
- data/doc/classes/DOSDisk.src/M000023.html +0 -20
- data/doc/classes/DOSDisk.src/M000024.html +0 -19
- data/doc/classes/DOSDisk.src/M000025.html +0 -76
- data/doc/classes/DOSDisk.src/M000029.html +0 -20
- data/doc/classes/DOSDisk.src/M000031.html +0 -76
- data/doc/classes/DOSDisk.src/M000035.html +0 -20
- data/doc/classes/DOSDisk.src/M000036.html +0 -20
- data/doc/classes/DOSDisk.src/M000037.html +0 -20
- data/doc/classes/DOSDisk.src/M000038.html +0 -19
- data/doc/classes/DOSDisk.src/M000039.html +0 -76
- data/doc/classes/DOSDisk.src/M000041.html +0 -20
- data/doc/classes/DOSDisk.src/M000042.html +0 -19
- data/doc/classes/DOSFile.src/M000026.html +0 -22
- data/doc/classes/DOSFile.src/M000027.html +0 -22
- data/doc/classes/DOSFile.src/M000032.html +0 -22
- data/doc/classes/DOSFile.src/M000033.html +0 -17
- data/doc/classes/DOSFile.src/M000034.html +0 -18
- data/doc/classes/DOSFile.src/M000042.html +0 -22
- data/doc/classes/DOSFile.src/M000044.html +0 -18
- data/doc/classes/DOSFile.src/M000048.html +0 -22
- data/doc/classes/DOSFile.src/M000050.html +0 -18
- data/doc/classes/DOSFile.src/M000051.html +0 -31
- data/doc/classes/DOSFile.src/M000057.html +0 -22
- data/doc/classes/DOSFile.src/M000058.html +0 -22
- data/doc/classes/DOSFile.src/M000059.html +0 -22
- data/doc/classes/DOSFile.src/M000060.html +0 -18
- data/doc/classes/DOSFile.src/M000061.html +0 -18
- data/doc/classes/DOSFile.src/M000062.html +0 -31
- data/doc/classes/DOSFile.src/M000064.html +0 -22
- data/doc/classes/DOSFile.src/M000065.html +0 -18
- data/doc/classes/DOSFile.src/M000066.html +0 -18
- data/doc/classes/DOSFile.src/M000067.html +0 -31
- data/doc/classes/DSK.src/M000009.html +0 -22
- data/doc/classes/DSK.src/M000010.html +0 -27
- data/doc/classes/DSK.src/M000011.html +0 -19
- data/doc/classes/DSK.src/M000013.html +0 -22
- data/doc/classes/DSK.src/M000014.html +0 -22
- data/doc/classes/DSK.src/M000016.html +0 -22
- data/doc/classes/DSK.src/M000017.html +0 -22
- data/doc/classes/DSK.src/M000018.html +0 -22
- data/doc/classes/DSK.src/M000019.html +0 -22
- data/doc/classes/DSK.src/M000020.html +0 -34
- data/doc/classes/DSK.src/M000021.html +0 -19
- data/doc/classes/DSK.src/M000023.html +0 -40
- data/doc/classes/DSK.src/M000028.html +0 -22
- data/doc/classes/DSK.src/M000029.html +0 -22
- data/doc/classes/DSK.src/M000030.html +0 -34
- data/doc/classes/DSK.src/M000031.html +0 -19
- data/doc/classes/DSK.src/M000032.html +0 -18
- data/doc/classes/DSK.src/M000034.html +0 -22
- data/doc/classes/DSK.src/M000036.html +0 -34
- data/doc/classes/DSK.src/M000037.html +0 -19
- data/doc/classes/DSK.src/M000038.html +0 -18
- data/doc/classes/DSK.src/M000039.html +0 -18
- data/doc/classes/DSK.src/M000040.html +0 -18
- data/doc/classes/DSK.src/M000041.html +0 -18
- data/doc/classes/DSK.src/M000042.html +0 -22
- data/doc/classes/DSK.src/M000044.html +0 -22
- data/doc/classes/DSK.src/M000045.html +0 -18
- data/doc/classes/DSK.src/M000046.html +0 -22
- data/doc/classes/DSK.src/M000048.html +0 -22
- data/doc/classes/DSK.src/M000049.html +0 -40
- data/doc/classes/DSK.src/M000050.html +0 -19
- data/doc/classes/DSK.src/M000051.html +0 -18
- data/doc/classes/DirectoryServlet.src/M000017.html +0 -20
- data/doc/classes/DirectoryServlet.src/M000026.html +0 -20
- data/doc/classes/DirectoryServlet.src/M000030.html +0 -20
- data/doc/classes/IntegerBasicFile.src/M000005.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000006.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000012.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000018.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000019.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000020.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000021.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000022.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000023.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000024.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000025.html +0 -18
- data/doc/classes/IntegerBasicFile.src/M000026.html +0 -18
- data/doc/classes/NADOLDisk.src/M000018.html +0 -20
- data/doc/classes/NADOLDisk.src/M000020.html +0 -50
- data/doc/classes/NADOLDisk.src/M000021.html +0 -20
- data/doc/classes/NADOLDisk.src/M000023.html +0 -50
- data/doc/classes/NADOLFile.src/M000030.html +0 -31
- data/doc/classes/NADOLFile.src/M000034.html +0 -31
- data/doc/classes/NADOLTokenisedFile.src/M000062.html +0 -28
- data/doc/classes/NADOLTokenisedFile.src/M000063.html +0 -28
- data/doc/classes/RDoc.src/M000033.html +0 -40
- data/doc/classes/RDoc.src/M000038.html +0 -40
- data/doc/classes/RDoc.src/M000055.html +0 -40
- data/doc/classes/RDoc.src/M000066.html +0 -40
- data/doc/classes/RDoc.src/M000068.html +0 -40
- data/doc/classes/RDoc.src/M000069.html +0 -40
- data/doc/classes/RDoc.src/M000074.html +0 -40
- data/doc/classes/SCAsmFile.src/M000028.html +0 -36
- data/doc/classes/SCAsmFile.src/M000035.html +0 -18
- data/doc/classes/SCAsmFile.src/M000038.html +0 -36
- data/doc/classes/SCAsmFile.src/M000041.html +0 -18
- data/doc/classes/SCAsmFile.src/M000042.html +0 -18
- data/doc/classes/SCAsmFile.src/M000043.html +0 -18
- data/doc/classes/SCAsmFile.src/M000044.html +0 -36
- data/doc/classes/SCAsmFile.src/M000049.html +0 -18
- data/doc/classes/SCAsmFile.src/M000050.html +0 -18
- data/doc/classes/SCAsmFile.src/M000051.html +0 -18
- data/doc/classes/SCAsmFile.src/M000052.html +0 -18
- data/doc/classes/SCAsmFile.src/M000055.html +0 -18
- data/doc/classes/SCAsmFile.src/M000056.html +0 -18
- data/doc/classes/SCAsmFile.src/M000057.html +0 -18
- data/doc/classes/ShowFileServlet.src/M000026.html +0 -21
- data/doc/classes/ShowFileServlet.src/M000038.html +0 -22
- data/doc/classes/ShowFileServlet.src/M000039.html +0 -22
- data/doc/classes/ShowFileServlet.src/M000044.html +0 -22
- data/doc/classes/TestDOSDisks.src/M000002.html +0 -19
- data/doc/classes/TestDOSDisks.src/M000003.html +0 -25
- data/doc/classes/TestDOSDisks.src/M000006.html +0 -24
- data/doc/classes/TestDOSDisks.src/M000007.html +0 -19
- data/doc/classes/TestDOSDisks.src/M000013.html +0 -19
- data/doc/classes/TestDisassembly.src/M000005.html +0 -19
- data/doc/classes/TestDisassembly.src/M000006.html +0 -19
- data/doc/classes/TestDisassembly.src/M000009.html +0 -19
- data/doc/classes/TestDisassembly.src/M000016.html +0 -19
- data/doc/classes/TestDisassembly.src/M000022.html +0 -19
- data/doc/classes/TestDisassembly.src/M000025.html +0 -19
- data/doc/classes/TestDisassembly.src/M000028.html +0 -19
- data/doc/classes/TestNADOLDisks.src/M000055.html +0 -19
- data/doc/classes/TestNADOLDisks.src/M000056.html +0 -19
- data/doc/classes/TestNADOLDisks.src/M000057.html +0 -19
- data/doc/classes/TestNADOLDisks.src/M000058.html +0 -34
- data/doc/classes/TestNADOLDisks.src/M000062.html +0 -19
- data/doc/classes/TestNADOLDisks.src/M000063.html +0 -34
- data/doc/classes/TextFile.src/M000025.html +0 -18
- data/doc/classes/TextFile.src/M000026.html +0 -18
- data/doc/classes/TextFile.src/M000029.html +0 -18
- data/doc/classes/TextFile.src/M000030.html +0 -18
- data/doc/classes/TextFile.src/M000035.html +0 -18
- data/doc/classes/TextFile.src/M000045.html +0 -18
- data/doc/classes/TextFile.src/M000046.html +0 -18
- data/doc/classes/TextFile.src/M000047.html +0 -20
- data/doc/classes/TextFile.src/M000052.html +0 -18
- data/doc/classes/TextFile.src/M000053.html +0 -18
- data/doc/classes/TextFile.src/M000054.html +0 -20
- data/doc/classes/TextFile.src/M000063.html +0 -18
- data/doc/classes/TextFile.src/M000064.html +0 -18
- data/doc/classes/TextFile.src/M000065.html +0 -18
- data/doc/classes/TextFile.src/M000066.html +0 -18
- data/doc/classes/TextFile.src/M000067.html +0 -18
- data/doc/classes/TextFile.src/M000068.html +0 -20
- data/doc/classes/TextFile.src/M000071.html +0 -18
- data/doc/classes/TextFile.src/M000072.html +0 -18
- data/doc/classes/TextFile.src/M000073.html +0 -20
- data/doc/dot/f_0.png +0 -0
- data/doc/dot/f_1.dot +0 -14
- data/doc/dot/f_1.png +0 -0
- data/doc/dot/f_10.dot +0 -32
- data/doc/dot/f_10.png +0 -0
- data/doc/dot/f_11.dot +0 -32
- data/doc/dot/f_11.png +0 -0
- data/doc/dot/f_12.dot +0 -14
- data/doc/dot/f_12.png +0 -0
- data/doc/dot/f_2.dot +0 -23
- data/doc/dot/f_2.png +0 -0
- data/doc/dot/f_3.dot +0 -32
- data/doc/dot/f_3.png +0 -0
- data/doc/dot/f_4.dot +0 -88
- data/doc/dot/f_4.png +0 -0
- data/doc/dot/f_5.dot +0 -23
- data/doc/dot/f_5.png +0 -0
- data/doc/dot/f_6.dot +0 -32
- data/doc/dot/f_6.png +0 -0
- data/doc/dot/f_7.dot +0 -49
- data/doc/dot/f_7.png +0 -0
- data/doc/dot/f_8.dot +0 -30
- data/doc/dot/f_8.png +0 -0
- data/doc/dot/f_9.dot +0 -32
- data/doc/dot/f_9.png +0 -0
- data/doc/dot/m_0_0.dot +0 -30
- data/doc/dot/m_0_0.png +0 -0
- data/doc/dot/m_6_0.dot +0 -30
- data/doc/dot/m_6_0.png +0 -0
- data/doc/dot/m_8_0.dot +0 -30
- data/doc/dot/m_8_0.png +0 -0
- data/doc/files/bin/dskserver_rb.html +0 -247
- data/doc/files/bin/dskserver_rb.src/M000001.html +0 -22
- data/doc/files/bin/dskserver_rb.src/M000002.html +0 -19
- data/doc/files/bin/dskserver_rb.src/M000003.html +0 -62
- data/doc/files/bin/dskserver_rb.src/M000004.html +0 -39
- data/doc/files/bin/dskserver_rb.src/M000005.html +0 -26
data/lib/NADOLDisk.rb
CHANGED
|
@@ -9,25 +9,186 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
|
9
9
|
# 0C-0D - filesize (low byte first)
|
|
10
10
|
# 0E - track of track sector list sector
|
|
11
11
|
# 0F - sector of track sector list sector
|
|
12
|
-
|
|
12
|
+
#
|
|
13
13
|
#TRACK/SECTOR LIST FORMAT
|
|
14
14
|
# pairs of track/sectors in order. up to 128 entries [assumes that no file can be > 128 sectors]
|
|
15
|
+
#
|
|
16
|
+
#SECTOR USAGE BITMAP
|
|
17
|
+
#is at Track $00, Sector $2, from bytes $20 .. $65
|
|
18
|
+
#bitmap is of form:
|
|
19
|
+
#
|
|
20
|
+
# ----hi bit--
|
|
21
|
+
# | |
|
|
22
|
+
# 01234567 89ABCDEF
|
|
23
|
+
# ^^^^^^ ^^^^^^^
|
|
24
|
+
# low byte hi byte
|
|
15
25
|
|
|
16
26
|
require 'NADOLFile'
|
|
17
27
|
|
|
18
28
|
class NADOLDisk < DSK
|
|
19
29
|
|
|
20
|
-
def dump_catalog
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
def dump_catalog
|
|
31
|
+
s=""
|
|
32
|
+
files.keys.sort.each { |file_name|
|
|
33
|
+
file=files[file_name]
|
|
34
|
+
s<< "#{sprintf('% 6d',file.contents.length)} #{file.filename}\n"
|
|
35
|
+
}
|
|
36
|
+
s
|
|
24
37
|
end
|
|
25
38
|
|
|
26
|
-
def initialize(file_bytes)
|
|
27
|
-
super(file_bytes)
|
|
39
|
+
def initialize(file_bytes,sector_order)
|
|
40
|
+
super(file_bytes,sector_order)
|
|
28
41
|
self.read_catalog
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def file_system
|
|
45
|
+
:nadol
|
|
29
46
|
end
|
|
30
|
-
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def set_sector(track,sector,contents)
|
|
50
|
+
super(track,sector,contents)
|
|
51
|
+
|
|
52
|
+
#now mark sector as used in sector usage list
|
|
53
|
+
#don't bother marking the 'system' sectors used
|
|
54
|
+
if ((track>0) || (sector>9)) then
|
|
55
|
+
sector_usage_bitmap_sector=get_sector(0,2)
|
|
56
|
+
offset_of_byte_containing_this_sector=0x20+(track*2)+(sector/8)
|
|
57
|
+
byte_containing_this_sector=sector_usage_bitmap_sector[offset_of_byte_containing_this_sector]
|
|
58
|
+
byte_containing_this_sector=byte_containing_this_sector|(2**(7-(sector%8)))
|
|
59
|
+
sector_usage_bitmap_sector[offset_of_byte_containing_this_sector]=byte_containing_this_sector
|
|
60
|
+
set_sector(0,2,sector_usage_bitmap_sector)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
#iterate through the CATALOG to find either the named file or (if nil is passed in) an empty slot
|
|
66
|
+
def find_catalog_slot(filename)
|
|
67
|
+
track=0
|
|
68
|
+
sector=3
|
|
69
|
+
catalog_filename=NADOLFile.catalog_filename(filename.upcase) unless filename.nil?
|
|
70
|
+
while (sector<=9) do
|
|
71
|
+
sector_data=get_sector(track,sector)
|
|
72
|
+
(0..15).each do |slot_no|
|
|
73
|
+
slot_start=slot_no*0x10
|
|
74
|
+
if (filename.nil? && (sector_data[slot_start]==0x00)|| (sector_data[slot_start]==0xFF)) then
|
|
75
|
+
return DSKTrackSector.new(track,sector,slot_start)
|
|
76
|
+
end
|
|
77
|
+
if (!filename.nil?) && (sector_data[slot_start..slot_start+0x0B]==catalog_filename) then
|
|
78
|
+
return DSKTrackSector.new(track,sector,slot_start)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
sector+=1
|
|
82
|
+
end
|
|
83
|
+
nil
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#iterate through the sector usage bitmap, return a list of [track,sector] for sectors marked available
|
|
87
|
+
def free_sector_list
|
|
88
|
+
sector_usage_bitmap=get_sector(0,2)[0x20..0x65]
|
|
89
|
+
free_sectors=[]
|
|
90
|
+
(0..(sector_usage_bitmap.length/2)-1).each do |track|
|
|
91
|
+
track_bitmap_lo=sector_usage_bitmap[track*2]
|
|
92
|
+
track_bitmap_hi=sector_usage_bitmap[1+track*2]
|
|
93
|
+
(0..7).each do |sector|
|
|
94
|
+
if ((track_bitmap_lo & (2**(7-sector)))==0) then
|
|
95
|
+
free_sectors<<DSKTrackSector.new(track,sector)
|
|
96
|
+
end
|
|
97
|
+
if ((track_bitmap_hi & (2**(7-sector)))==0) then
|
|
98
|
+
free_sectors<<DSKTrackSector.new(track,sector+8)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
free_sectors.sort
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def make_file(filename,contents,file_options={})
|
|
106
|
+
if (file_options[:tokenise]) then
|
|
107
|
+
return NADOLTokenisedFile.new(filename,NADOLTokenisedFile.tokenise(contents))
|
|
108
|
+
else
|
|
109
|
+
return NADOLFile.new(filename,contents)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def delete_file(filename)
|
|
114
|
+
this_files_catalog_slot=find_catalog_slot(filename)
|
|
115
|
+
#if file not in catalog, do nothing
|
|
116
|
+
return if this_files_catalog_slot.nil?
|
|
117
|
+
file_descriptive_entry=get_sector(this_files_catalog_slot.track_no,this_files_catalog_slot.sector_no)[this_files_catalog_slot.offset..this_files_catalog_slot.offset+0x0f]
|
|
118
|
+
|
|
119
|
+
#mark sector as free in sector usage list
|
|
120
|
+
sector_usage_bitmap_sector=get_sector(0,2)
|
|
121
|
+
sectors_to_mark_available=get_track_sector_list(file_descriptive_entry[0x0E],file_descriptive_entry[0x0F])
|
|
122
|
+
sectors_to_mark_available<<DSKTrackSector.new(file_descriptive_entry[0x0E],file_descriptive_entry[0x0F])
|
|
123
|
+
sectors_to_mark_available.each do |ts|
|
|
124
|
+
offset_of_byte_containing_this_sector=0x20+(ts.track_no*2)+(ts.sector_no/8)
|
|
125
|
+
byte_containing_this_sector=sector_usage_bitmap_sector[offset_of_byte_containing_this_sector]
|
|
126
|
+
byte_containing_this_sector=byte_containing_this_sector&(0xff-(2**(7-(ts.sector_no%8))))
|
|
127
|
+
sector_usage_bitmap_sector[offset_of_byte_containing_this_sector]=byte_containing_this_sector
|
|
128
|
+
end
|
|
129
|
+
set_sector(0,2,sector_usage_bitmap_sector)
|
|
130
|
+
|
|
131
|
+
#mark slot as available in catalog
|
|
132
|
+
catalog_sector=get_sector(this_files_catalog_slot.track_no,this_files_catalog_slot.sector_no)
|
|
133
|
+
catalog_sector[this_files_catalog_slot.offset]=0xFF
|
|
134
|
+
set_sector(this_files_catalog_slot.track_no,this_files_catalog_slot.sector_no,catalog_sector)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
#given a track and sector, treat it as a track/sector list and return an array containing track/sector pairs
|
|
139
|
+
def get_track_sector_list(ts_list_track_no,ts_list_sector_no)
|
|
140
|
+
ts_list_sector=get_sector(ts_list_track_no,ts_list_sector_no)
|
|
141
|
+
ts_list=[]
|
|
142
|
+
for entry_number in 0..0x7f
|
|
143
|
+
data_track_no=ts_list_sector[entry_number*2]
|
|
144
|
+
data_sector_no=ts_list_sector[entry_number*2+1]
|
|
145
|
+
if( (data_track_no!=0 || data_sector_no!=0) && data_track_no<track_count && data_sector_no<=0x0f) then
|
|
146
|
+
ts_list<<DSKTrackSector.new(data_track_no,data_sector_no)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
ts_list
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
#add a file to the in-memory image of this DSK
|
|
153
|
+
def add_file(file)
|
|
154
|
+
raise "only NADOLFiles may be added to NADOL format disks!" unless file.kind_of?(NADOLFile)
|
|
155
|
+
|
|
156
|
+
delete_file(file.filename) unless files[file.filename].nil?
|
|
157
|
+
catalog_slot=find_catalog_slot(nil)
|
|
158
|
+
raise "CATALOG IS FULL!" if catalog_slot.nil?
|
|
159
|
+
|
|
160
|
+
free_sectors=free_sector_list
|
|
161
|
+
|
|
162
|
+
sectors_needed=1+file.length_in_sectors
|
|
163
|
+
raise "not enough free space - #{sectors_needed} sectors needed, #{free_sector_list.length} available " unless sectors_needed<=free_sectors.length
|
|
164
|
+
|
|
165
|
+
#for each sector in the file, copy it to disk and then record it in the track/sector list
|
|
166
|
+
track_sector_list="\0"*256
|
|
167
|
+
track_sector_list_sector=free_sectors[0]
|
|
168
|
+
(0..sectors_needed-2).each do |sector_in_file|
|
|
169
|
+
sector_to_use=free_sectors[sector_in_file+1]
|
|
170
|
+
track_sector_list[sector_in_file*2]=sector_to_use.track_no
|
|
171
|
+
track_sector_list[(sector_in_file*2)+1]=sector_to_use.sector_no
|
|
172
|
+
sector_contents=file.contents[(sector_in_file*256)..(sector_in_file*256)+255] || ""
|
|
173
|
+
set_sector(sector_to_use.track_no,sector_to_use.sector_no,sector_contents)
|
|
174
|
+
end
|
|
175
|
+
#write the track/sector list
|
|
176
|
+
set_sector(track_sector_list_sector.track_no,track_sector_list_sector.sector_no,track_sector_list)
|
|
177
|
+
|
|
178
|
+
#update the catalog
|
|
179
|
+
catalog_sector=get_sector(catalog_slot.track_no,catalog_slot.sector_no)
|
|
180
|
+
catalog_sector[catalog_slot.offset..catalog_slot.offset+0x0B]=file.catalog_filename
|
|
181
|
+
catalog_sector[catalog_slot.offset+0x0C]=file.contents.length % 0x100
|
|
182
|
+
catalog_sector[catalog_slot.offset+0x0D]=file.contents.length / 0x100
|
|
183
|
+
catalog_sector[catalog_slot.offset+0x0E]=track_sector_list_sector.track_no
|
|
184
|
+
catalog_sector[catalog_slot.offset+0x0F]=track_sector_list_sector.sector_no
|
|
185
|
+
set_sector(catalog_slot.track_no,catalog_slot.sector_no,catalog_sector)
|
|
186
|
+
|
|
187
|
+
raise "catalog not updated correctly!" if find_catalog_slot(file.filename).nil?
|
|
188
|
+
#reread the catalog to populate the files list
|
|
189
|
+
read_catalog
|
|
190
|
+
end
|
|
191
|
+
|
|
31
192
|
#reads the catalog, and populate the "files" array with files
|
|
32
193
|
#CATALOG will be at track $00, sector $03 to track $00, sector $09
|
|
33
194
|
#each entry consists of $10 bytes, which are:
|
|
@@ -36,40 +197,36 @@ class NADOLDisk < DSK
|
|
|
36
197
|
# 0E - track of track sector list sector
|
|
37
198
|
# 0F - sector of track sector list sector
|
|
38
199
|
def read_catalog
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
200
|
+
@files={}
|
|
201
|
+
track=0
|
|
202
|
+
sector=3
|
|
203
|
+
while (sector<=9) do
|
|
204
|
+
sector_data=get_sector(track,sector)
|
|
205
|
+
(0..15).each do |slot_no|
|
|
206
|
+
slot_offset=slot_no*0x10
|
|
207
|
+
file_descriptive_entry=sector_data[slot_offset..slot_offset+0x10]
|
|
208
|
+
if (file_descriptive_entry[0]!=0xFF && file_descriptive_entry[0]!=0x00) then # skip deleted /empty files
|
|
209
|
+
filename=""
|
|
210
|
+
file_descriptive_entry[0..11].to_s.each_byte{|b| filename+=(b.%128).chr} #strip off high bit
|
|
211
|
+
filename.sub!(/ *$/,"") #strip off trailing spaces
|
|
212
|
+
file_size=file_descriptive_entry[0x0D]*256+file_descriptive_entry[0x0C]
|
|
213
|
+
if (file_size>0) then
|
|
214
|
+
contents=""
|
|
215
|
+
get_track_sector_list(file_descriptive_entry[0x0E],file_descriptive_entry[0x0F]).each do |ts|
|
|
216
|
+
contents<<get_sector(ts.track_no,ts.sector_no)
|
|
217
|
+
end
|
|
218
|
+
contents=contents[0..file_size-1]
|
|
219
|
+
if (NADOLTokenisedFile.can_be_nadol_tokenised_file?(contents)) then
|
|
220
|
+
@files[filename]= NADOLTokenisedFile.new(filename,contents)
|
|
221
|
+
else
|
|
222
|
+
@files[filename]= NADOLBinaryFile.new(filename,contents)
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
sector+=1
|
|
228
|
+
end
|
|
229
|
+
end
|
|
73
230
|
end
|
|
74
231
|
# == Author
|
|
75
232
|
# Jonno Downes (jonno@jamtronix.com)
|
data/lib/NADOLFile.rb
CHANGED
|
@@ -2,38 +2,32 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
3
|
|
|
4
4
|
require 'D65'
|
|
5
|
-
|
|
5
|
+
require 'DSKFile'
|
|
6
|
+
require 'HGR'
|
|
6
7
|
#NADOL (Nibbles Away Disk Optimized Language) file
|
|
7
|
-
class NADOLFile
|
|
8
|
-
attr_accessor(:filename,:contents)
|
|
9
|
-
def initialize(filename,contents)
|
|
10
|
-
@filename=filename
|
|
11
|
-
@contents=contents
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def to_s
|
|
15
|
-
@contents
|
|
16
|
-
end
|
|
17
|
-
|
|
8
|
+
class NADOLFile < DSKFile
|
|
18
9
|
def file_extension
|
|
19
10
|
".bin"
|
|
20
11
|
end
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
12
|
+
|
|
13
|
+
def catalog_filename
|
|
14
|
+
NADOLFile.catalog_filename(filename)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
#render the filename in form suitable for inclusion in a NADOL catalog
|
|
18
|
+
def NADOLFile.catalog_filename(filename)
|
|
19
|
+
s=""
|
|
20
|
+
for i in 0..0X0B
|
|
21
|
+
c=(filename[i])
|
|
22
|
+
if c.nil? then
|
|
23
|
+
c=0xA0
|
|
24
|
+
else
|
|
25
|
+
c=(c|0x80)
|
|
26
|
+
end
|
|
27
|
+
s+=c.chr
|
|
28
|
+
end
|
|
29
|
+
s
|
|
30
|
+
end
|
|
37
31
|
end
|
|
38
32
|
|
|
39
33
|
#a file on a NADOL dsk that does not appear to be in NADOL tokenised format
|
|
@@ -41,21 +35,29 @@ class NADOLBinaryFile<NADOLFile
|
|
|
41
35
|
def disassembly(start_address=0x8000)
|
|
42
36
|
require 'D65'
|
|
43
37
|
D65.disassemble(@contents,start_address)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def can_be_picture?
|
|
41
|
+
HGR.can_be_hgr_screen?(@contents)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def to_png(pallete_mode=:amber)
|
|
45
|
+
HGR.buffer_to_png(@contents)
|
|
44
46
|
end
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
|
|
48
50
|
#file packed by the NADOL EDITOR application.
|
|
49
51
|
#format is a series of unnumbered lines, where each line has the following format:
|
|
50
|
-
# <Length> (8-bit: including length byte,
|
|
51
|
-
# <Tokens and/
|
|
52
|
-
# <Zero byte> ($00, to mark the end of the
|
|
52
|
+
# <Length> (8-bit: including length byte, contents, zero>
|
|
53
|
+
# <Tokens and/or Characters>
|
|
54
|
+
# <Zero byte> ($00, to mark the end of the line)
|
|
53
55
|
# each byte in the line is interpreted as follows:
|
|
54
56
|
# $00 - end of line marker
|
|
55
57
|
# $01 - $64 - NADOL tokens
|
|
56
|
-
# $65
|
|
58
|
+
# $65 - $70 - ??? unknown
|
|
57
59
|
# $71 - $7f - 1 to F spaces
|
|
58
|
-
# $80
|
|
60
|
+
# $80 - $FF - ASCII character with high bit set
|
|
59
61
|
class NADOLTokenisedFile < NADOLFile
|
|
60
62
|
NADOL_EDITOR_TOKENS = [
|
|
61
63
|
"?", #00 (so we can use token as an index in to this array)
|
|
@@ -164,7 +166,7 @@ class NADOLTokenisedFile < NADOLFile
|
|
|
164
166
|
|
|
165
167
|
#check whether a given series of bytes can be a valid NADOL tokenised file
|
|
166
168
|
#heuristics are:
|
|
167
|
-
#
|
|
169
|
+
#that each line starts with a line length and ends with a "0"
|
|
168
170
|
def NADOLTokenisedFile.can_be_nadol_tokenised_file?(buffer)
|
|
169
171
|
r=true
|
|
170
172
|
i=0
|
|
@@ -178,10 +180,46 @@ class NADOLTokenisedFile < NADOLFile
|
|
|
178
180
|
end
|
|
179
181
|
r
|
|
180
182
|
end
|
|
181
|
-
|
|
183
|
+
#
|
|
184
|
+
def NADOLTokenisedFile.tokenise(buffer)
|
|
185
|
+
|
|
186
|
+
s=""
|
|
187
|
+
buffer.each("\n") do |line|
|
|
188
|
+
#trim the trailing \n
|
|
189
|
+
line.chomp!
|
|
190
|
+
#first set the high bit in each char
|
|
191
|
+
for i in 0..line.length-1
|
|
192
|
+
line[i]=line[i]|0x80
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
#now replace token strings with token number
|
|
196
|
+
for i in 1..0x64
|
|
197
|
+
token=" "*NADOL_EDITOR_TOKENS[i].length
|
|
198
|
+
for j in 0..token.length-1
|
|
199
|
+
token[j]=NADOL_EDITOR_TOKENS[i][j]|0x80
|
|
200
|
+
end
|
|
201
|
+
line.gsub!(token,i.chr)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
#replace 2 to 15 spaces with a run-length-encoding
|
|
205
|
+
0x0f.downto(2) do |i|
|
|
206
|
+
line.gsub!(" "*i,(0x70+i).chr)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
#now add length to each line
|
|
210
|
+
s+=((line.length+2).chr)+line+"\0"
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
if ! NADOLTokenisedFile.can_be_nadol_tokenised_file?(s)
|
|
214
|
+
raise "tokenisation appears to have failed!"
|
|
215
|
+
end
|
|
216
|
+
s
|
|
217
|
+
end
|
|
218
|
+
|
|
182
219
|
def to_s
|
|
183
220
|
NADOLTokenisedFile.buffer_as_tokenised_file(@contents)
|
|
184
221
|
end
|
|
222
|
+
|
|
185
223
|
def file_extension
|
|
186
224
|
".nad"
|
|
187
225
|
end
|
data/lib/PascalDisk.rb
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
# Disk image with Pascal File System
|
|
5
|
+
#catalog will be at block 2.
|
|
6
|
+
#each entry consists of $1A bytes, which are:
|
|
7
|
+
#VOLUME HEADER
|
|
8
|
+
# 00..01 FIRST BLOCK (word)
|
|
9
|
+
# 02..03 LAST BLOCK+1 (word)
|
|
10
|
+
# 04 FILE TYPE (byte) = untypedfile,xdskfile,codefile,textfile,infofile,datafile,graffile,fotofile,securdir
|
|
11
|
+
# 05 FILLER
|
|
12
|
+
# 06 VOLUME NAME LENGTH (1 byte)
|
|
13
|
+
# 07..0D VOLUME NAME (17 bytes)
|
|
14
|
+
# 0E..0F VOLUME SIZE (WORD)
|
|
15
|
+
# 10 NUMBER OF FILES (BYTE)
|
|
16
|
+
# 11..1A FILLER
|
|
17
|
+
#
|
|
18
|
+
#FILES
|
|
19
|
+
# 00..01 FIRST BLOCK (word)
|
|
20
|
+
# 02..03 LAST BLOCK+1 (word)
|
|
21
|
+
# 04 FILE TYPE (byte) = untypedfile,xdskfile,codefile,textfile,infofile,datafile,graffile,fotofile,securdir
|
|
22
|
+
# 05 STATUS (byte)
|
|
23
|
+
# 06 FILENAME LENGTH (1 byte)
|
|
24
|
+
# 07..16 FILENAME (15 bytes)
|
|
25
|
+
# 17..18 BYTES IN LAST BLOCK (word)
|
|
26
|
+
# 19..1A FILE ACCESS DATE
|
|
27
|
+
|
|
28
|
+
require 'PascalFile'
|
|
29
|
+
class PascalDisk < DSK
|
|
30
|
+
attr_accessor :volume_name
|
|
31
|
+
|
|
32
|
+
def dump_catalog
|
|
33
|
+
s=""
|
|
34
|
+
files.keys.sort.each { |file_name|
|
|
35
|
+
file=files[file_name]
|
|
36
|
+
s<< "#{sprintf('% 6d',file.contents.length)}\t #{file.file_type}\t#{file.filename}\n"
|
|
37
|
+
}
|
|
38
|
+
s
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def initialize(file_bytes,sector_order)
|
|
43
|
+
super(file_bytes,sector_order)
|
|
44
|
+
self.read_catalog
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def file_system
|
|
48
|
+
:pascal
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
#reads the catalog, and populate the "files" array with files
|
|
52
|
+
def read_catalog
|
|
53
|
+
catalog=get_block(2)
|
|
54
|
+
#we've read the first block in the catalog, now read the rest
|
|
55
|
+
catalog_size=catalog[2]
|
|
56
|
+
3.upto(catalog_size-1) do |i|
|
|
57
|
+
catalog<<get_block(i)
|
|
58
|
+
end
|
|
59
|
+
# 06 VOLUME NAME LENGTH (1 byte)
|
|
60
|
+
# 07..0D VOLUME NAME (17 bytes)
|
|
61
|
+
# 0E..0F VOLUME SIZE (WORD)
|
|
62
|
+
# 10 NUMBER OF FILES (BYTE)
|
|
63
|
+
volume_name_length=catalog[6]
|
|
64
|
+
self.volume_name=catalog[7..6+volume_name_length]
|
|
65
|
+
files_in_volume=catalog[0x10]
|
|
66
|
+
#read in all the files
|
|
67
|
+
|
|
68
|
+
# 00..01 FIRST BLOCK (word)
|
|
69
|
+
# 02..03 LAST BLOCK+1 (word)
|
|
70
|
+
# 04 FILE TYPE (byte) = untypedfile,xdskfile,codefile,textfile,infofile,datafile,graffile,fotofile,securdir
|
|
71
|
+
# 05 STATUS (byte)
|
|
72
|
+
# 06 FILENAME LENGTH (1 byte)
|
|
73
|
+
# 07..15 FILENAME (15 bytes)
|
|
74
|
+
# 16..17 BYTES IN LAST BLOCK (word)
|
|
75
|
+
# 18.1A FILE ACCESS DATE
|
|
76
|
+
1.upto(files_in_volume) do |file_no|
|
|
77
|
+
file_record=catalog[file_no*0x1a..(file_no*0x1a+0x19)]
|
|
78
|
+
first_block=file_record[0]+file_record[1]*0x100
|
|
79
|
+
first_block_in_next_file=file_record[2]+file_record[3]*0x100
|
|
80
|
+
last_block=first_block_in_next_file-1
|
|
81
|
+
file_type=file_record[4]
|
|
82
|
+
file_name_length=file_record[6]
|
|
83
|
+
file_name=file_record[7..6+file_name_length]
|
|
84
|
+
bytes_in_last_block=file_record[0x16]+file_record[0x17]*0x100
|
|
85
|
+
file_contents=""
|
|
86
|
+
first_block.upto(last_block) do |block_no|
|
|
87
|
+
this_block=get_block(block_no)
|
|
88
|
+
if block_no==last_block then
|
|
89
|
+
file_contents<<this_block[0..bytes_in_last_block-1]
|
|
90
|
+
else
|
|
91
|
+
file_contents<<this_block
|
|
92
|
+
end
|
|
93
|
+
files[file_name]=PascalFile.new(file_name,file_contents,file_type)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
# == Author
|
|
99
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
100
|
+
#
|
|
101
|
+
# == Copyright
|
|
102
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
|
103
|
+
#
|
|
104
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
105
|
+
#a copy of this software and associated documentation files (the
|
|
106
|
+
#"Software"), to deal in the Software without restriction, including
|
|
107
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
108
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
109
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
110
|
+
#the following conditions:
|
|
111
|
+
|
|
112
|
+
# The above copyright notice and this permission notice shall be
|
|
113
|
+
# included in all copies or substantial portions of the Software.
|
|
114
|
+
|
|
115
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
116
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
117
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
118
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
119
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
120
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
121
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/lib/PascalFile.rb
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
require 'DSKFile'
|
|
5
|
+
require 'HGR'
|
|
6
|
+
#Pascal file
|
|
7
|
+
class PascalFile < DSKFile
|
|
8
|
+
attr_accessor :file_type
|
|
9
|
+
|
|
10
|
+
PASCAL_FILE_TYPES=[:untyped,:xdsk,:code,:text,:info,:data,:graf,:foto,:securedir]
|
|
11
|
+
|
|
12
|
+
def initialize(filename,contents,file_type)
|
|
13
|
+
raise "filename too long - #{filename}" unless filename.length<=15
|
|
14
|
+
@filename=filename
|
|
15
|
+
@contents=contents
|
|
16
|
+
@file_type=PASCAL_FILE_TYPES[file_type]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def to_s
|
|
20
|
+
s=""
|
|
21
|
+
@contents.each_byte{|b| s<<(b%0x80).chr.tr(0x0D.chr,"\n")}
|
|
22
|
+
s
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def file_extension
|
|
26
|
+
return "."+@file_type.downcase
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def can_be_picture?
|
|
30
|
+
|
|
31
|
+
file_type==:foto && HGR.can_be_hgr_screen?(@contents)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def to_png(pallete_mode=:amber)
|
|
35
|
+
HGR.buffer_to_png(@contents,pallete_mode)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# == Author
|
|
40
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
41
|
+
#
|
|
42
|
+
# == Copyright
|
|
43
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
|
44
|
+
#
|
|
45
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
46
|
+
#a copy of this software and associated documentation files (the
|
|
47
|
+
#"Software"), to deal in the Software without restriction, including
|
|
48
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
49
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
50
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
51
|
+
#the following conditions:
|
|
52
|
+
|
|
53
|
+
# The above copyright notice and this permission notice shall be
|
|
54
|
+
# included in all copies or substantial portions of the Software.
|
|
55
|
+
|
|
56
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
57
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
58
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
59
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
60
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
61
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
62
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|