dsktool 0.2.1 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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/DOSDisk.rb
CHANGED
@@ -84,23 +84,58 @@ require 'DOSFile'
|
|
84
84
|
|
85
85
|
class DOSDisk < DSK
|
86
86
|
|
87
|
-
def dump_catalog
|
88
|
-
|
89
|
-
|
90
|
-
|
87
|
+
def dump_catalog
|
88
|
+
s=""
|
89
|
+
files.keys.sort.each { |file_name|
|
90
|
+
file=files[file_name]
|
91
|
+
s<< "#{file.locked ? '*':' '}#{file.file_type} #{sprintf('%04d',file.contents.length)} #{file.filename}\n"
|
92
|
+
}
|
93
|
+
s
|
94
|
+
end
|
95
|
+
|
96
|
+
def file_system
|
97
|
+
:dos
|
91
98
|
end
|
92
99
|
|
93
100
|
|
94
|
-
def initialize(file_bytes)
|
95
|
-
super(file_bytes)
|
101
|
+
def initialize(file_bytes,sector_order)
|
102
|
+
super(file_bytes,sector_order)
|
96
103
|
self.read_vtoc
|
97
104
|
end
|
98
|
-
|
105
|
+
|
106
|
+
#default file type is TextFile
|
107
|
+
#Tokenisation not currently implemented
|
108
|
+
def make_file(filename,contents,file_options={})
|
109
|
+
raise "Tokenisation not currently supported for DOS files" if (file_options[:tokenise])
|
110
|
+
file_type = case file_options[:filetype]
|
111
|
+
when nil then 0x00
|
112
|
+
when 'T' then 0x00
|
113
|
+
when 'I' then 0x01
|
114
|
+
when 'A' then 0x02
|
115
|
+
when 'B' then 0x04
|
116
|
+
else file_options[:filetype].tr("$","").hex
|
117
|
+
end
|
118
|
+
if file_type==4 && !(file_options[:base].nil?) then
|
119
|
+
base=file_options[:base].tr("$","").hex
|
120
|
+
s="\0\0\0\0"
|
121
|
+
s[0]=base%256
|
122
|
+
s[1]=base/256
|
123
|
+
s[2]=contents.length%256
|
124
|
+
s[3]=contents.length/256
|
125
|
+
contents=s+contents
|
126
|
+
end
|
127
|
+
new_file=DOSFile.new(filename,contents,false,file_type)
|
128
|
+
return new_file
|
129
|
+
end
|
99
130
|
|
131
|
+
|
132
|
+
#reads the VTOC, and populate the "files" array with files
|
100
133
|
def read_vtoc
|
134
|
+
@files={}
|
101
135
|
vtoc_sector=get_sector(17,0)
|
102
136
|
catalog_sector=get_sector(vtoc_sector[01],vtoc_sector[02])
|
103
|
-
done=false
|
137
|
+
done=false
|
138
|
+
visited_sectors={}
|
104
139
|
while !done
|
105
140
|
break if catalog_sector.nil?
|
106
141
|
(0..6).each {|file_number|
|
@@ -108,8 +143,9 @@ class DOSDisk < DSK
|
|
108
143
|
file_descriptive_entry=catalog_sector[file_descriptive_entry_start..file_descriptive_entry_start+35]
|
109
144
|
break if (file_descriptive_entry[0]==0xFF) # skip deleted files
|
110
145
|
filename=""
|
111
|
-
file_descriptive_entry[3..32].to_s.each_byte{|b| filename+=(b.%128).chr}
|
112
|
-
filename.
|
146
|
+
file_descriptive_entry[3..32].to_s.each_byte{|b| filename+=(b.%128).chr}
|
147
|
+
filename.gsub!(/ *$/,"") #strip off trailing spaces
|
148
|
+
filename.tr!("\x00-\x1f","\x40-\x5f") #convert non-printable chars to corresponding uppercase letter
|
113
149
|
locked=(file_descriptive_entry[2]>=0x80)
|
114
150
|
sector_count=file_descriptive_entry[0x21]+file_descriptive_entry[0x22]*256
|
115
151
|
|
@@ -135,30 +171,224 @@ class DOSDisk < DSK
|
|
135
171
|
end
|
136
172
|
if contents.length>0 then
|
137
173
|
@files[filename]= case file_type_code
|
138
|
-
when 0x00 then TextFile.new(filename,locked
|
139
|
-
when 0x01 then SCAsmFile.can_be_scasm_file?(contents)? SCAsmFile.new(filename,locked
|
140
|
-
when 0x02 then AppleSoftFile.new(filename,locked
|
141
|
-
when 0x04 then BinaryFile.new(filename,locked
|
174
|
+
when 0x00 then TextFile.new(filename,contents,locked)
|
175
|
+
when 0x01 then SCAsmFile.can_be_scasm_file?(contents)? SCAsmFile.new(filename,contents,locked): IntegerBasicFile.new(filename,contents,locked)
|
176
|
+
when 0x02 then AppleSoftFile.new(filename,contents,locked)
|
177
|
+
when 0x04 then BinaryFile.new(filename,contents,locked)
|
142
178
|
# when 0x08 then "S" #S type file
|
143
179
|
# when 0x10 then "R" #RELOCATABLE object module file
|
144
180
|
# when 0x20 then "a" #??
|
145
181
|
# when 0x40 then "b" #??
|
146
|
-
else DOSFile.new(filename,
|
182
|
+
else DOSFile.new(filename,contents,locked,file_type_code)
|
147
183
|
end
|
148
184
|
end
|
149
185
|
end
|
150
186
|
}
|
151
187
|
next_track=catalog_sector[1]
|
152
|
-
next_sector=catalog_sector[2]
|
188
|
+
next_sector=catalog_sector[2]%0x10
|
153
189
|
if (next_track==0) &&( next_sector==0) then
|
154
190
|
done=true
|
155
|
-
else
|
156
|
-
|
191
|
+
else
|
192
|
+
#check we haven't got into an endless loop
|
193
|
+
s="#{next_track}/#{next_sector}"
|
194
|
+
if (!visited_sectors[s].nil?) then
|
195
|
+
done=true
|
196
|
+
end
|
197
|
+
visited_sectors[s]=true
|
198
|
+
catalog_sector=get_sector(next_track,next_sector)
|
157
199
|
end
|
158
200
|
end
|
159
201
|
|
160
202
|
end
|
203
|
+
#iterate through the CATALOG to find either the named file or (if nil is passed in) an empty slot
|
204
|
+
def find_catalog_slot(filename)
|
205
|
+
vtoc_sector=get_sector(17,0)
|
206
|
+
catalog_filename=DOSFile.catalog_filename(filename.upcase) unless filename.nil?
|
207
|
+
catalog_track_no=vtoc_sector[01]
|
208
|
+
catalog_sector_no=vtoc_sector[02]
|
209
|
+
|
210
|
+
while (catalog_track_no+catalog_sector_no>0) do
|
211
|
+
catalog=get_sector(catalog_track_no,catalog_sector_no)
|
212
|
+
(0..7).each do |slot_no|
|
213
|
+
slot_start=slot_no*0x23+0x0B
|
214
|
+
if filename.nil? && (catalog[slot_start]==0x00)|| (catalog[slot_start]==0xFF) then
|
215
|
+
return DSKTrackSector.new(catalog_track_no,catalog_sector_no,slot_start)
|
216
|
+
end
|
217
|
+
if (!filename.nil?) && (catalog[slot_start+0x03..slot_start+0x20]==catalog_filename) then
|
218
|
+
return DSKTrackSector.new(catalog_track_no,catalog_sector_no,slot_start)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
catalog_track_no=catalog[01]
|
222
|
+
catalog_sector_no=catalog[02]
|
223
|
+
end
|
224
|
+
nil
|
225
|
+
end
|
226
|
+
|
227
|
+
|
228
|
+
#iterate through the sector usage bitmap, return a list of [track,sector] for sectors marked available
|
229
|
+
def free_sector_list
|
230
|
+
end_of_sector_usage_bitmap=(track_count*4+0x38)-1
|
231
|
+
sector_usage_bitmap=get_sector(0x11,0)[0x38..end_of_sector_usage_bitmap]
|
232
|
+
free_sectors=[]
|
233
|
+
#skip track 0 - even if sectors there are unused, we can't include them in a catalog or track/sector list
|
234
|
+
(1..track_count-1).each do |track|
|
235
|
+
track_bitmap_lo=sector_usage_bitmap[track*4+1]
|
236
|
+
track_bitmap_hi=sector_usage_bitmap[track*4]
|
237
|
+
(0..7).each do |sector|
|
238
|
+
if ((track_bitmap_lo & (2**(sector)))!=0) then
|
239
|
+
free_sectors<<DSKTrackSector.new(track,sector)
|
240
|
+
end
|
241
|
+
if ((track_bitmap_hi & (2**(sector)))!=0) then
|
242
|
+
free_sectors<<DSKTrackSector.new(track,sector+8)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
free_sectors.sort
|
247
|
+
end
|
248
|
+
|
249
|
+
|
250
|
+
#given a track and sector, treat it as a track/sector list and return an array containing track/sector pairs
|
251
|
+
def get_track_sector_list(ts_list_track_no,ts_list_sector_no)
|
252
|
+
ts_list_sector=get_sector(ts_list_track_no,ts_list_sector_no)
|
253
|
+
ts_list=[]
|
254
|
+
for entry_number in 0..121
|
255
|
+
data_track_no=ts_list_sector[entry_number*2+0x0C]
|
256
|
+
data_sector_no=ts_list_sector[entry_number*2+0x0D]
|
257
|
+
if( (data_track_no!=0 || data_sector_no!=0) && data_track_no<track_count && data_sector_no<=0x0f) then
|
258
|
+
ts_list<<DSKTrackSector.new(data_track_no,data_sector_no)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
ts_list
|
262
|
+
end
|
263
|
+
|
264
|
+
def delete_file(filename)
|
265
|
+
this_files_catalog_slot=find_catalog_slot(filename)
|
266
|
+
#if file not in catalog, do nothing
|
267
|
+
return if this_files_catalog_slot.nil?
|
268
|
+
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+0x22]
|
269
|
+
|
270
|
+
#mark sector as free in sector usage list
|
271
|
+
sector_usage_bitmap_sector=get_sector(0x11,0)
|
272
|
+
sectors_to_mark_available=get_track_sector_list(file_descriptive_entry[0x00],file_descriptive_entry[0x01])
|
273
|
+
sectors_to_mark_available<<DSKTrackSector.new(file_descriptive_entry[0x01],file_descriptive_entry[0x00])
|
274
|
+
|
275
|
+
sectors_to_mark_available.each do |ts|
|
276
|
+
offset_of_byte_containing_this_sector=0x38+(ts.track_no*4)
|
277
|
+
if ts.sector_no<8 then
|
278
|
+
offset_of_byte_containing_this_sector+=1
|
279
|
+
end
|
280
|
+
byte_containing_this_sector=sector_usage_bitmap_sector[offset_of_byte_containing_this_sector]
|
281
|
+
byte_containing_this_sector=byte_containing_this_sector|(2**(ts.sector_no%8))
|
282
|
+
sector_usage_bitmap_sector[offset_of_byte_containing_this_sector]=byte_containing_this_sector
|
283
|
+
end
|
284
|
+
set_sector(0x11,0,sector_usage_bitmap_sector)
|
285
|
+
|
286
|
+
#mark slot as available in catalog
|
287
|
+
catalog_sector=get_sector(this_files_catalog_slot.track_no,this_files_catalog_slot.sector_no)
|
288
|
+
catalog_sector[this_files_catalog_slot.offset+0x20]=catalog_sector[this_files_catalog_slot.offset] #save the current "first track no" in last byte of filename
|
289
|
+
catalog_sector[this_files_catalog_slot.offset]=0xFF
|
290
|
+
set_sector(this_files_catalog_slot.track_no,this_files_catalog_slot.sector_no,catalog_sector)
|
291
|
+
end
|
292
|
+
|
293
|
+
|
294
|
+
def set_sector(track,sector,contents)
|
295
|
+
super(track,sector,contents)
|
296
|
+
|
297
|
+
#now mark sector as used in sector usage list
|
298
|
+
if ((track!=0x11) || (sector!=00)) then #don't bother marking the VTOC sectors used
|
299
|
+
sector_usage_bitmap_sector=get_sector(0x11,0)
|
300
|
+
offset_of_byte_containing_this_sector=0x38+(track*4)
|
301
|
+
if sector<8 then
|
302
|
+
offset_of_byte_containing_this_sector+=1
|
303
|
+
end
|
304
|
+
byte_containing_this_sector=sector_usage_bitmap_sector[offset_of_byte_containing_this_sector]
|
305
|
+
byte_containing_this_sector=byte_containing_this_sector&(0xff-(2**(sector%8)))
|
306
|
+
sector_usage_bitmap_sector[offset_of_byte_containing_this_sector]=byte_containing_this_sector
|
307
|
+
set_sector(0x11,0,sector_usage_bitmap_sector)
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
|
312
|
+
def add_file(file)
|
313
|
+
raise "only DOSFiles may be added to DOS format disks!" unless file.kind_of?(DOSFile)
|
314
|
+
|
315
|
+
#if this file exists, delete it first
|
316
|
+
delete_file(file.filename) unless files[file.filename].nil?
|
317
|
+
catalog_slot=find_catalog_slot(nil)
|
318
|
+
raise "CATALOG IS FULL!" if catalog_slot.nil?
|
319
|
+
free_sectors=free_sector_list
|
320
|
+
sectors_needed=1+file.length_in_sectors
|
321
|
+
raise "not enough free space - #{sectors_needed} sectors needed, #{free_sector_list.length} available " unless sectors_needed<=free_sectors.length
|
322
|
+
|
323
|
+
#TODO - allow files of more than 122 sectors
|
324
|
+
raise "only files up to 122 sectors currently supported " if sectors_needed>122
|
325
|
+
|
326
|
+
#TRACK/SECTOR LIST FORMAT (from Beneath Apple DOS p 4-6)
|
327
|
+
# 00 Not used
|
328
|
+
# 01 Track number of next T/S list of one is needed or zero if no more t/s list
|
329
|
+
# 02 Sector number of next T/S list (if one is present)
|
330
|
+
# 03-04 Not used
|
331
|
+
# 05-06 Sector offset in file of the first sector described by this list
|
332
|
+
# 07-oB Not used
|
333
|
+
# 0C-0D Track and sector of first data sector or zeros
|
334
|
+
# 0E-0F Track and sector of second data sector or zeros
|
335
|
+
# 10-FF Up to 120 more track and sector pairs
|
336
|
+
track_sector_list="\0"*256
|
337
|
+
track_sector_list_sector=free_sectors[0]
|
338
|
+
|
339
|
+
(0..sectors_needed-2).each do |sector_in_file|
|
340
|
+
sector_to_use=free_sectors[sector_in_file+1]
|
341
|
+
track_sector_list[(sector_in_file*2)+0x0C]=sector_to_use.track_no
|
342
|
+
track_sector_list[(sector_in_file*2)+0X0D]=sector_to_use.sector_no
|
343
|
+
sector_contents=file.contents[(sector_in_file*256)..(sector_in_file*256)+255] || ""
|
344
|
+
set_sector(sector_to_use.track_no,sector_to_use.sector_no,sector_contents)
|
345
|
+
end
|
346
|
+
#write the track/sector list
|
347
|
+
set_sector(track_sector_list_sector.track_no,track_sector_list_sector.sector_no,track_sector_list)
|
348
|
+
|
349
|
+
#update the catalog file descriptive entry
|
350
|
+
#FILE DESCRIPTIVE ENTRY (from Beneath Apple DOS p 4-6)
|
351
|
+
# 00 Track of first track/sector list sector, if this is a deleted file this contains FF
|
352
|
+
# and the original track number is copied to the last byte of the file name (BYTE 20)
|
353
|
+
# If this byte contains a 00, the entry is assumed to never have been used and is
|
354
|
+
# available for use. (This means track 0 can never be used for data even if the DOS image
|
355
|
+
# is 'wiped' from the disk)
|
356
|
+
#
|
357
|
+
# 01 Sector of first track/sector list sector
|
358
|
+
# 02 File type and flags:
|
359
|
+
# 80+file type - file is locked
|
360
|
+
# 00+file type - file is not locked
|
361
|
+
#
|
362
|
+
# 00 - TEXT file
|
363
|
+
# 01 - INTEGER BASIC file
|
364
|
+
# 02 - APPLESOFT BASIC file
|
365
|
+
# 04 - BINARY file
|
366
|
+
# 08 - S type file
|
367
|
+
# 10 - RELOCATABLE object module file
|
368
|
+
# 20 - a type file
|
369
|
+
# 40 - b type file
|
370
|
+
#
|
371
|
+
# 03-20 File Name (30 characters)
|
372
|
+
# 21-22 Length of file in sectors (LO/HI format)
|
373
|
+
|
374
|
+
catalog_sector=get_sector(catalog_slot.track_no,catalog_slot.sector_no)
|
375
|
+
file_descriptive_entry="\0"*0x23
|
376
|
+
file_descriptive_entry[0]=track_sector_list_sector.track_no
|
377
|
+
file_descriptive_entry[1]=track_sector_list_sector.sector_no
|
378
|
+
file_descriptive_entry[2]=file.file_type_byte
|
379
|
+
file_descriptive_entry[3..0x20]=file.catalog_filename
|
380
|
+
file_descriptive_entry[0x21]=(sectors_needed-1)%256
|
381
|
+
file_descriptive_entry[0x22]=(sectors_needed-1)/256
|
382
|
+
|
383
|
+
catalog_sector[catalog_slot.offset..catalog_slot.offset+0x22]=file_descriptive_entry
|
384
|
+
|
385
|
+
set_sector(catalog_slot.track_no,catalog_slot.sector_no,catalog_sector)
|
386
|
+
|
387
|
+
raise "catalog not updated correctly!" if find_catalog_slot(file.filename).nil?
|
388
|
+
#reread the catalog to populate the files list
|
389
|
+
read_vtoc
|
161
390
|
|
391
|
+
end
|
162
392
|
end
|
163
393
|
# == Author
|
164
394
|
# Jonno Downes (jonno@jamtronix.com)
|
data/lib/DOSFile.rb
CHANGED
@@ -2,44 +2,48 @@ $:.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
|
+
require 'DSKFile'
|
6
|
+
require 'HGR'
|
5
7
|
|
6
8
|
#Apple DOS 3.3 file
|
7
|
-
class DOSFile
|
9
|
+
class DOSFile < DSKFile
|
8
10
|
|
9
|
-
attr_accessor(:filename,:locked,:
|
10
|
-
def initialize(filename,
|
11
|
+
attr_accessor(:filename,:contents,:locked,:file_type_byte)
|
12
|
+
def initialize(filename,contents,locked=false,file_type_byte=nil)
|
11
13
|
@filename=filename
|
12
14
|
@locked=locked
|
13
|
-
@sector_count=sector_count
|
14
|
-
@file_type= file_type
|
15
15
|
@contents=contents
|
16
|
-
|
16
|
+
@file_type_byte=file_type_byte
|
17
|
+
@file_type=sprintf("$%02X",file_type_byte)
|
18
|
+
end
|
19
|
+
|
17
20
|
|
18
21
|
#File type as displayed in Apple DOS 3.3 Catalog
|
19
22
|
def file_type
|
20
23
|
@file_type
|
24
|
+
end
|
25
|
+
def file_type_byte
|
26
|
+
@file_type_byte
|
21
27
|
end
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
s
|
42
|
-
end
|
28
|
+
|
29
|
+
#render a filename in form suitable for inclusion in a DOS catalog
|
30
|
+
def DOSFile.catalog_filename(filename)
|
31
|
+
s=""
|
32
|
+
for i in 0..29
|
33
|
+
c=(filename[i])
|
34
|
+
if c.nil? then
|
35
|
+
c=0xA0
|
36
|
+
else
|
37
|
+
c=(c|0x80)
|
38
|
+
end
|
39
|
+
s+=c.chr
|
40
|
+
end
|
41
|
+
s
|
42
|
+
end
|
43
|
+
|
44
|
+
def catalog_filename
|
45
|
+
DOSFile.catalog_filename(filename)
|
46
|
+
end
|
43
47
|
|
44
48
|
end
|
45
49
|
|
@@ -47,6 +51,10 @@ class TextFile < DOSFile
|
|
47
51
|
def file_type
|
48
52
|
"T"
|
49
53
|
end
|
54
|
+
|
55
|
+
def file_type_byte
|
56
|
+
0x00
|
57
|
+
end
|
50
58
|
|
51
59
|
def file_extension
|
52
60
|
".txt"
|
@@ -54,23 +62,41 @@ class TextFile < DOSFile
|
|
54
62
|
|
55
63
|
def to_s
|
56
64
|
s=""
|
57
|
-
@contents.each_byte{|b| s+=(b%0x80).chr.tr(0x0D.chr,"\n")}
|
58
|
-
|
65
|
+
@contents.each_byte{|b| s+=(b%0x80).chr.tr(0x0D.chr,"\n")}
|
66
|
+
return s.sub(/\0*$/,"")
|
59
67
|
end
|
68
|
+
|
60
69
|
end
|
61
70
|
|
62
71
|
class BinaryFile < DOSFile
|
63
72
|
def file_type
|
64
73
|
"B"
|
65
74
|
end
|
66
|
-
|
75
|
+
|
76
|
+
def file_type_byte
|
77
|
+
0x04
|
78
|
+
end
|
79
|
+
|
67
80
|
def file_extension
|
68
81
|
".bin"
|
69
82
|
end
|
70
|
-
|
83
|
+
|
84
|
+
def contents_without_header
|
85
|
+
file_length=contents[2]+contents[3]*256
|
86
|
+
@contents[4..file_length+3]
|
87
|
+
end
|
71
88
|
def disassembly
|
72
|
-
|
73
|
-
|
89
|
+
start_address=(@contents[0]+@contents[1]*256)
|
90
|
+
D65.disassemble(contents_without_header,start_address)
|
91
|
+
end
|
92
|
+
|
93
|
+
def can_be_picture?
|
94
|
+
start_address=(@contents[0]+@contents[1]*256)
|
95
|
+
HGR.can_be_hgr_screen?(contents_without_header,start_address)
|
96
|
+
end
|
97
|
+
|
98
|
+
def to_png(pallete_mode=:amber)
|
99
|
+
HGR.buffer_to_png(contents_without_header,pallete_mode)
|
74
100
|
end
|
75
101
|
end
|
76
102
|
|
@@ -130,6 +156,10 @@ class IntegerBasicFile < DOSFile
|
|
130
156
|
".bas"
|
131
157
|
end
|
132
158
|
|
159
|
+
def file_type_byte
|
160
|
+
0x01
|
161
|
+
end
|
162
|
+
|
133
163
|
#display file with all INTEGER BASIC tokens expanded to ASCII
|
134
164
|
def to_s
|
135
165
|
buffer_as_integer_basic_file(@contents)
|
@@ -270,25 +300,18 @@ INTEGER_BASIC_TOKENS= [
|
|
270
300
|
|
271
301
|
end
|
272
302
|
|
273
|
-
|
274
|
-
#
|
275
|
-
#Applesoft file format:
|
276
|
-
# <Length_of_file> (16-bit little endian)
|
277
|
-
# <Line>
|
278
|
-
# ......
|
279
|
-
# <Line>
|
280
|
-
# where <Line> is:
|
281
|
-
# <Next addr> (16-bit little endian)
|
282
|
-
# <Line no> (16-bit little endian: 0-65535)
|
283
|
-
# <Tokens and/or characters>
|
284
|
-
# <End-of-line marker: $00 >
|
285
|
-
#
|
303
|
+
|
286
304
|
class AppleSoftFile < DOSFile
|
287
305
|
|
288
306
|
|
289
307
|
def file_type
|
290
308
|
"A"
|
291
309
|
end
|
310
|
+
|
311
|
+
def file_type_byte
|
312
|
+
0x02
|
313
|
+
end
|
314
|
+
|
292
315
|
#display file with all AppleSoft BASIC tokens expanded to ASCII
|
293
316
|
def to_s
|
294
317
|
buffer_as_applesoft_file(@contents)
|
@@ -298,64 +321,7 @@ class AppleSoftFile < DOSFile
|
|
298
321
|
".bas"
|
299
322
|
end
|
300
323
|
|
301
|
-
|
302
|
-
|
303
|
-
APPLESOFT_TOKENS = [
|
304
|
-
"END","FOR","NEXT","DATA","INPUT","DEL","DIM","READ",
|
305
|
-
"GR","TEXT","PR#","IN#","CALL","PLOT","HLIN","VLIN",
|
306
|
-
"HGR2","HGR","HCOLOR=","HPLOT","DRAW","XDRAW","HTAB",
|
307
|
-
"HOME","ROT=","SCALE=","SHLOAD","TRACE","NOTRACE",
|
308
|
-
"NORMAL","INVERSE","FLASH","COLOR=","POP","VTAB",
|
309
|
-
"HIMEM=","LOMEM=","ONERR","RESUME","RECALL","STORE",
|
310
|
-
"SPEED=","LET","GOTO","RUN","IF","RESTORE","&","GOSUB",
|
311
|
-
"RETURN","REM","STOP","ON","WAIT","LOAD","SAVE","DEF",
|
312
|
-
"POKE","PRINT","CONT","LIST","CLEAR","GET","NEW",
|
313
|
-
"TAB(","TO","FN","SPC(","THEN","AT","NOT","STEP","+",
|
314
|
-
"-","*","/","^","AND","OR",">","=","<","SGN","INT",
|
315
|
-
"ABS","USR","FRE","SCRN(","PDL","POS","SQR","RND",
|
316
|
-
"LOG","EXP","COS","SIN","TAN","ATN","PEEK","LEN",
|
317
|
-
"STR$","VAL","ASC","CHR$", "LEFT$","RIGHT$","MID$","?",
|
318
|
-
"?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"
|
319
|
-
]
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
def buffer_as_applesoft_file(buffer)
|
324
|
-
|
325
|
-
length=buffer[0]+buffer[1]*256
|
326
|
-
index=2
|
327
|
-
s=""
|
328
|
-
while (index<length)
|
329
|
-
index+=2 #skip over the "next address" field
|
330
|
-
break if buffer[index].nil?
|
331
|
-
break if buffer[index+1].nil?
|
332
|
-
line_no=buffer[index]+buffer[index+1]*256
|
333
|
-
index+=2 #skip over the "line number" field
|
334
|
-
s+=sprintf("%u",line_no)
|
335
|
-
done_line=false
|
336
|
-
last_char_space=false
|
337
|
-
while (!done_line)
|
338
|
-
b=buffer[index]
|
339
|
-
break if b.nil?
|
340
|
-
if b>=0x80 then
|
341
|
-
if !last_char_space then
|
342
|
-
s+=" "
|
343
|
-
end
|
344
|
-
s+=APPLESOFT_TOKENS[b-0x80]+" "
|
345
|
-
last_char_space=true
|
346
|
-
else
|
347
|
-
s+=b.chr
|
348
|
-
last_char_space=false
|
349
|
-
end
|
350
|
-
index+=1
|
351
|
-
done_line=(index>=length)||(buffer[index]==0)
|
352
|
-
end
|
353
|
-
s+="\n"
|
354
|
-
index+=1 # skip over "end of line" marker
|
355
|
-
end
|
356
|
-
s
|
357
|
-
end
|
358
|
-
end
|
324
|
+
|
359
325
|
|
360
326
|
# Adapted from FID.C -- a utility to browse Apple II .DSK image files by Paul Schlyter (pausch@saaf.se)
|
361
327
|
#
|
@@ -382,6 +348,11 @@ class SCAsmFile < DOSFile
|
|
382
348
|
def file_type
|
383
349
|
"I"
|
384
350
|
end
|
351
|
+
|
352
|
+
def file_type_byte
|
353
|
+
0x01
|
354
|
+
end
|
355
|
+
|
385
356
|
#display file with all tokens expanded
|
386
357
|
def to_s
|
387
358
|
SCAsmFile.buffer_as_scasm_file(@contents)
|