ripxplore 0.0.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/ripxplore.rb +188 -0
- data/doc/classes/A2Dsk.html +226 -0
- data/doc/classes/A2Dsk.src/M000005.html +18 -0
- data/doc/classes/A2Dsk.src/M000006.html +18 -0
- data/doc/classes/A2Dsk.src/M000007.html +18 -0
- data/doc/classes/A2Dsk.src/M000008.html +18 -0
- data/doc/classes/A2Dsk.src/M000009.html +18 -0
- data/doc/classes/A2Dsk.src/M000010.html +22 -0
- data/doc/classes/A2DskDosOrder.html +139 -0
- data/doc/classes/A2DskDosOrder.src/M000242.html +18 -0
- data/doc/classes/A2DskPhysicalOrder.html +139 -0
- data/doc/classes/A2DskPhysicalOrder.src/M000019.html +18 -0
- data/doc/classes/Apple2.html +187 -0
- data/doc/classes/Apple2.src/M000128.html +18 -0
- data/doc/classes/Apple2.src/M000129.html +18 -0
- data/doc/classes/Apple2.src/M000130.html +18 -0
- data/doc/classes/Apple2.src/M000131.html +19 -0
- data/doc/classes/AppleBinary.html +193 -0
- data/doc/classes/AppleBinary.src/M000089.html +20 -0
- data/doc/classes/AppleBinary.src/M000090.html +18 -0
- data/doc/classes/AppleBinary.src/M000091.html +18 -0
- data/doc/classes/AppleBinary.src/M000092.html +18 -0
- data/doc/classes/AppleCPM.html +228 -0
- data/doc/classes/AppleCPM.src/M000243.html +18 -0
- data/doc/classes/AppleCPM.src/M000244.html +18 -0
- data/doc/classes/AppleCPM.src/M000245.html +21 -0
- data/doc/classes/AppleCPM.src/M000246.html +40 -0
- data/doc/classes/AppleDos.html +275 -0
- data/doc/classes/AppleDos.src/M000161.html +18 -0
- data/doc/classes/AppleDos.src/M000162.html +18 -0
- data/doc/classes/AppleDos.src/M000163.html +18 -0
- data/doc/classes/AppleDos.src/M000164.html +86 -0
- data/doc/classes/AppleHiResPic.html +279 -0
- data/doc/classes/AppleHiResPic.src/M000083.html +22 -0
- data/doc/classes/AppleHiResPic.src/M000084.html +18 -0
- data/doc/classes/AppleHiResPic.src/M000085.html +22 -0
- data/doc/classes/AppleHiResPic.src/M000086.html +57 -0
- data/doc/classes/AppleHiResPic.src/M000087.html +18 -0
- data/doc/classes/AppleHiResPic.src/M000088.html +18 -0
- data/doc/classes/AppleText.html +156 -0
- data/doc/classes/AppleText.src/M000142.html +21 -0
- data/doc/classes/AppleText.src/M000143.html +20 -0
- data/doc/classes/AppleWorksWP.html +160 -0
- data/doc/classes/AppleWorksWP.src/M000081.html +20 -0
- data/doc/classes/AppleWorksWP.src/M000082.html +45 -0
- data/doc/classes/Applesoft.html +169 -0
- data/doc/classes/Applesoft.src/M000175.html +21 -0
- data/doc/classes/Applesoft.src/M000176.html +75 -0
- data/doc/classes/Atari800.html +169 -0
- data/doc/classes/Atari800.src/M000177.html +23 -0
- data/doc/classes/Atari800.src/M000178.html +18 -0
- data/doc/classes/Atari800.src/M000179.html +19 -0
- data/doc/classes/AtariBasic.html +215 -0
- data/doc/classes/AtariBasic.src/M000204.html +20 -0
- data/doc/classes/AtariBasic.src/M000205.html +108 -0
- data/doc/classes/AtariBinary.html +193 -0
- data/doc/classes/AtariBinary.src/M000238.html +20 -0
- data/doc/classes/AtariBinary.src/M000239.html +18 -0
- data/doc/classes/AtariBinary.src/M000240.html +18 -0
- data/doc/classes/AtariBinary.src/M000241.html +18 -0
- data/doc/classes/AtariDos.html +186 -0
- data/doc/classes/AtariDos.src/M000047.html +18 -0
- data/doc/classes/AtariDos.src/M000048.html +43 -0
- data/doc/classes/AtariText.html +159 -0
- data/doc/classes/AtariText.src/M000002.html +20 -0
- data/doc/classes/AtariText.src/M000003.html +18 -0
- data/doc/classes/Atr.html +271 -0
- data/doc/classes/Atr.src/M000208.html +18 -0
- data/doc/classes/Atr.src/M000209.html +18 -0
- data/doc/classes/Atr.src/M000210.html +19 -0
- data/doc/classes/Atr.src/M000211.html +18 -0
- data/doc/classes/Atr.src/M000212.html +18 -0
- data/doc/classes/Atr.src/M000213.html +19 -0
- data/doc/classes/Atr.src/M000214.html +19 -0
- data/doc/classes/C64.html +206 -0
- data/doc/classes/C64.src/M000020.html +18 -0
- data/doc/classes/C64.src/M000021.html +31 -0
- data/doc/classes/C64.src/M000022.html +22 -0
- data/doc/classes/C64.src/M000023.html +19 -0
- data/doc/classes/C64.src/M000024.html +19 -0
- data/doc/classes/C64BasicPrg.html +201 -0
- data/doc/classes/C64BasicPrg.src/M000035.html +20 -0
- data/doc/classes/C64BasicPrg.src/M000036.html +59 -0
- data/doc/classes/C64Prg.html +190 -0
- data/doc/classes/C64Prg.src/M000169.html +20 -0
- data/doc/classes/C64Prg.src/M000170.html +18 -0
- data/doc/classes/C64Prg.src/M000171.html +18 -0
- data/doc/classes/C64Prg.src/M000172.html +20 -0
- data/doc/classes/C64PrgText.html +139 -0
- data/doc/classes/C64PrgText.src/M000237.html +18 -0
- data/doc/classes/C64Seq.html +156 -0
- data/doc/classes/C64Seq.src/M000013.html +20 -0
- data/doc/classes/C64Seq.src/M000014.html +18 -0
- data/doc/classes/CPMFile.html +156 -0
- data/doc/classes/CPMFile.src/M000108.html +20 -0
- data/doc/classes/CPMFile.src/M000109.html +18 -0
- data/doc/classes/CbmDos.html +172 -0
- data/doc/classes/CbmDos.src/M000182.html +18 -0
- data/doc/classes/CbmDos.src/M000183.html +42 -0
- data/doc/classes/CbmFile.html +156 -0
- data/doc/classes/CbmFile.src/M000235.html +20 -0
- data/doc/classes/CbmFile.src/M000236.html +18 -0
- data/doc/classes/D64.html +247 -0
- data/doc/classes/D64.src/M000037.html +18 -0
- data/doc/classes/D64.src/M000038.html +18 -0
- data/doc/classes/D64.src/M000039.html +18 -0
- data/doc/classes/D64.src/M000040.html +22 -0
- data/doc/classes/D64.src/M000041.html +18 -0
- data/doc/classes/D64.src/M000042.html +21 -0
- data/doc/classes/D65.html +170 -0
- data/doc/classes/D65.src/M000049.html +22 -0
- data/doc/classes/D65.src/M000050.html +68 -0
- data/doc/classes/DumpUtilities.html +152 -0
- data/doc/classes/DumpUtilities.src/M000077.html +33 -0
- data/doc/classes/DumpUtilities.src/M000078.html +27 -0
- data/doc/classes/FileCache.html +210 -0
- data/doc/classes/FileCache.src/M000135.html +18 -0
- data/doc/classes/FileCache.src/M000136.html +20 -0
- data/doc/classes/FileCache.src/M000137.html +22 -0
- data/doc/classes/FileCache.src/M000138.html +32 -0
- data/doc/classes/FileCacheItem.html +152 -0
- data/doc/classes/FileCacheItem.src/M000165.html +18 -0
- data/doc/classes/FileCacheItem.src/M000166.html +18 -0
- data/doc/classes/FileContainer.html +146 -0
- data/doc/classes/FileContainer.src/M000232.html +26 -0
- data/doc/classes/FileSystem.html +252 -0
- data/doc/classes/FileSystem.src/M000069.html +18 -0
- data/doc/classes/FileSystem.src/M000070.html +18 -0
- data/doc/classes/FileSystem.src/M000071.html +18 -0
- data/doc/classes/FileSystem.src/M000072.html +18 -0
- data/doc/classes/FileSystem.src/M000073.html +18 -0
- data/doc/classes/FileSystem.src/M000074.html +18 -0
- data/doc/classes/FileSystem.src/M000075.html +20 -0
- data/doc/classes/FileSystem.src/M000076.html +25 -0
- data/doc/classes/FileSystemImage.html +430 -0
- data/doc/classes/FileSystemImage.src/M000215.html +19 -0
- data/doc/classes/FileSystemImage.src/M000216.html +41 -0
- data/doc/classes/FileSystemImage.src/M000217.html +27 -0
- data/doc/classes/FileSystemImage.src/M000218.html +18 -0
- data/doc/classes/FileSystemImage.src/M000219.html +18 -0
- data/doc/classes/FileSystemImage.src/M000220.html +18 -0
- data/doc/classes/FileSystemImage.src/M000221.html +22 -0
- data/doc/classes/FileSystemImage.src/M000222.html +19 -0
- data/doc/classes/FileSystemImage.src/M000223.html +18 -0
- data/doc/classes/FileSystemImage.src/M000224.html +18 -0
- data/doc/classes/FileSystemImage.src/M000225.html +18 -0
- data/doc/classes/FileSystemImage.src/M000226.html +18 -0
- data/doc/classes/FileSystemImage.src/M000227.html +20 -0
- data/doc/classes/FileSystemImage.src/M000228.html +22 -0
- data/doc/classes/FileSystemImage.src/M000229.html +22 -0
- data/doc/classes/FileSystemImage.src/M000230.html +18 -0
- data/doc/classes/FileSystemImage.src/M000231.html +23 -0
- data/doc/classes/G64.html +257 -0
- data/doc/classes/G64.src/M000093.html +30 -0
- data/doc/classes/G64.src/M000094.html +18 -0
- data/doc/classes/G64.src/M000095.html +18 -0
- data/doc/classes/G64.src/M000096.html +17 -0
- data/doc/classes/G64.src/M000097.html +18 -0
- data/doc/classes/G64.src/M000098.html +18 -0
- data/doc/classes/G64.src/M000099.html +21 -0
- data/doc/classes/GenericFile.html +157 -0
- data/doc/classes/GenericFile.src/M000167.html +20 -0
- data/doc/classes/GenericFile.src/M000168.html +18 -0
- data/doc/classes/HostSystem.html +225 -0
- data/doc/classes/HostSystem.src/M000025.html +22 -0
- data/doc/classes/HostSystem.src/M000026.html +18 -0
- data/doc/classes/HostSystem.src/M000027.html +18 -0
- data/doc/classes/HostSystem.src/M000028.html +22 -0
- data/doc/classes/HostSystem.src/M000029.html +33 -0
- data/doc/classes/HostSystem.src/M000030.html +18 -0
- data/doc/classes/ImageFormat.html +415 -0
- data/doc/classes/ImageFormat.src/M000144.html +18 -0
- data/doc/classes/ImageFormat.src/M000145.html +18 -0
- data/doc/classes/ImageFormat.src/M000146.html +18 -0
- data/doc/classes/ImageFormat.src/M000147.html +18 -0
- data/doc/classes/ImageFormat.src/M000148.html +18 -0
- data/doc/classes/ImageFormat.src/M000149.html +22 -0
- data/doc/classes/ImageFormat.src/M000150.html +19 -0
- data/doc/classes/ImageFormat.src/M000151.html +18 -0
- data/doc/classes/ImageFormat.src/M000152.html +18 -0
- data/doc/classes/ImageFormat.src/M000153.html +18 -0
- data/doc/classes/ImageFormat.src/M000154.html +18 -0
- data/doc/classes/ImageFormat.src/M000155.html +18 -0
- data/doc/classes/ImageFormat.src/M000156.html +18 -0
- data/doc/classes/ImageFormat.src/M000157.html +18 -0
- data/doc/classes/ImageFormat.src/M000158.html +20 -0
- data/doc/classes/ImageFormat.src/M000159.html +26 -0
- data/doc/classes/ImageFormat.src/M000160.html +18 -0
- data/doc/classes/ImageSniffing.html +152 -0
- data/doc/classes/ImageSniffing.src/M000051.html +57 -0
- data/doc/classes/ImageSniffing.src/M000052.html +131 -0
- data/doc/classes/IntegerBASIC.html +247 -0
- data/doc/classes/IntegerBASIC.src/M000206.html +20 -0
- data/doc/classes/IntegerBASIC.src/M000207.html +86 -0
- data/doc/classes/MBasic.html +182 -0
- data/doc/classes/MBasic.src/M000011.html +20 -0
- data/doc/classes/MBasic.src/M000012.html +22 -0
- data/doc/classes/NADOLDos.html +187 -0
- data/doc/classes/NADOLDos.src/M000180.html +18 -0
- data/doc/classes/NADOLDos.src/M000181.html +52 -0
- data/doc/classes/NADOLFile.html +157 -0
- data/doc/classes/NADOLFile.src/M000045.html +20 -0
- data/doc/classes/NADOLFile.src/M000046.html +18 -0
- data/doc/classes/NADOLTokens.html +170 -0
- data/doc/classes/NADOLTokens.src/M000018.html +41 -0
- data/doc/classes/NativeFileType.html +444 -0
- data/doc/classes/NativeFileType.src/M000110.html +22 -0
- data/doc/classes/NativeFileType.src/M000111.html +18 -0
- data/doc/classes/NativeFileType.src/M000112.html +18 -0
- data/doc/classes/NativeFileType.src/M000113.html +18 -0
- data/doc/classes/NativeFileType.src/M000114.html +18 -0
- data/doc/classes/NativeFileType.src/M000115.html +18 -0
- data/doc/classes/NativeFileType.src/M000116.html +18 -0
- data/doc/classes/NativeFileType.src/M000117.html +23 -0
- data/doc/classes/NativeFileType.src/M000118.html +18 -0
- data/doc/classes/NativeFileType.src/M000119.html +18 -0
- data/doc/classes/NativeFileType.src/M000120.html +24 -0
- data/doc/classes/NativeFileType.src/M000121.html +35 -0
- data/doc/classes/NativeFileType.src/M000122.html +24 -0
- data/doc/classes/NativeFileType.src/M000123.html +18 -0
- data/doc/classes/NativeFileType.src/M000124.html +18 -0
- data/doc/classes/NativeFileType.src/M000125.html +18 -0
- data/doc/classes/NativeFileType.src/M000126.html +20 -0
- data/doc/classes/NativeFileType.src/M000127.html +27 -0
- data/doc/classes/PNG/Canvas.html +273 -0
- data/doc/classes/PNG/Canvas.src/M000196.html +20 -0
- data/doc/classes/PNG/Canvas.src/M000197.html +20 -0
- data/doc/classes/PNG/Canvas.src/M000198.html +20 -0
- data/doc/classes/PNG/Canvas.src/M000199.html +22 -0
- data/doc/classes/PNG/Canvas.src/M000200.html +18 -0
- data/doc/classes/PNG/Canvas.src/M000201.html +73 -0
- data/doc/classes/PNG/Color.html +338 -0
- data/doc/classes/PNG/Color.src/M000189.html +18 -0
- data/doc/classes/PNG/Color.src/M000190.html +16 -0
- data/doc/classes/PNG/Color.src/M000191.html +16 -0
- data/doc/classes/PNG/Color.src/M000192.html +16 -0
- data/doc/classes/PNG/Color.src/M000193.html +16 -0
- data/doc/classes/PNG/Color.src/M000194.html +21 -0
- data/doc/classes/PNG/Color.src/M000195.html +18 -0
- data/doc/classes/PNG.html +229 -0
- data/doc/classes/PNG.src/M000185.html +18 -0
- data/doc/classes/PNG.src/M000186.html +21 -0
- data/doc/classes/PNG.src/M000187.html +26 -0
- data/doc/classes/PNG.src/M000188.html +26 -0
- data/doc/classes/PascalDos.html +203 -0
- data/doc/classes/PascalDos.src/M000132.html +18 -0
- data/doc/classes/PascalDos.src/M000133.html +21 -0
- data/doc/classes/PascalDos.src/M000134.html +62 -0
- data/doc/classes/PascalFile.html +169 -0
- data/doc/classes/PascalFile.src/M000173.html +20 -0
- data/doc/classes/PascalFile.src/M000174.html +18 -0
- data/doc/classes/ProDos.html +164 -0
- data/doc/classes/ProDos.src/M000102.html +18 -0
- data/doc/classes/ProDos.src/M000103.html +22 -0
- data/doc/classes/ProDosFile.html +187 -0
- data/doc/classes/ProDosFile.src/M000015.html +20 -0
- data/doc/classes/ProDosFile.src/M000016.html +18 -0
- data/doc/classes/ProDosFile.src/M000017.html +19 -0
- data/doc/classes/Proc.html +315 -0
- data/doc/classes/Proc.src/M000053.html +21 -0
- data/doc/classes/Proc.src/M000054.html +19 -0
- data/doc/classes/Proc.src/M000055.html +22 -0
- data/doc/classes/Proc.src/M000056.html +22 -0
- data/doc/classes/Proc.src/M000057.html +22 -0
- data/doc/classes/Proc.src/M000058.html +19 -0
- data/doc/classes/Proc.src/M000059.html +16 -0
- data/doc/classes/Proc.src/M000060.html +20 -0
- data/doc/classes/Proc.src/M000061.html +18 -0
- data/doc/classes/Proc.src/M000062.html +16 -0
- data/doc/classes/Proc.src/M000063.html +16 -0
- data/doc/classes/ProcSource.html +146 -0
- data/doc/classes/ProcSource.src/M000248.html +38 -0
- data/doc/classes/ProcSource.src/M000249.html +109 -0
- data/doc/classes/RDoc.html +135 -0
- data/doc/classes/RDoc.src/M000247.html +40 -0
- data/doc/classes/RawDisk.html +157 -0
- data/doc/classes/RawDisk.src/M000100.html +18 -0
- data/doc/classes/RawDisk.src/M000101.html +18 -0
- data/doc/classes/RipXplore.html +124 -0
- data/doc/classes/RipXploreLog.html +167 -0
- data/doc/classes/RipXploreLog.src/M000139.html +18 -0
- data/doc/classes/RipXploreLog.src/M000140.html +20 -0
- data/doc/classes/RipXploreLog.src/M000141.html +18 -0
- data/doc/classes/ScAsm.html +145 -0
- data/doc/classes/ScAsm.src/M000004.html +45 -0
- data/doc/classes/SubclassTracking.html +138 -0
- data/doc/classes/SubclassTracking.src/M000250.html +23 -0
- data/doc/classes/TestFileCache.html +137 -0
- data/doc/classes/TestFileCache.src/M000184.html +21 -0
- data/doc/classes/Trs80.html +157 -0
- data/doc/classes/Trs80.src/M000043.html +18 -0
- data/doc/classes/Trs80.src/M000044.html +18 -0
- data/doc/classes/Trs80Cmd.html +217 -0
- data/doc/classes/Trs80Cmd.src/M000104.html +19 -0
- data/doc/classes/Trs80Cmd.src/M000105.html +24 -0
- data/doc/classes/Trs80Cmd.src/M000106.html +20 -0
- data/doc/classes/Trs80Cmd.src/M000107.html +35 -0
- data/doc/classes/Trs80Jcl.html +156 -0
- data/doc/classes/Trs80Jcl.src/M000233.html +20 -0
- data/doc/classes/Trs80Jcl.src/M000234.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.html +211 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000064.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000065.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000066.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000067.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000068.html +19 -0
- data/doc/classes/Trs80LevelIIBasic.html +169 -0
- data/doc/classes/Trs80LevelIIBasic.src/M000079.html +20 -0
- data/doc/classes/Trs80LevelIIBasic.src/M000080.html +43 -0
- data/doc/classes/Trs80PascalSource.html +156 -0
- data/doc/classes/Trs80PascalSource.src/M000202.html +20 -0
- data/doc/classes/Trs80PascalSource.src/M000203.html +30 -0
- data/doc/classes/TrsDos.html +255 -0
- data/doc/classes/TrsDos.src/M000031.html +18 -0
- data/doc/classes/TrsDos.src/M000032.html +18 -0
- data/doc/classes/TrsDos.src/M000033.html +18 -0
- data/doc/classes/TrsDos.src/M000034.html +62 -0
- data/doc/created.rid +1 -0
- data/doc/files/bin/ripxplore_rb.html +150 -0
- data/doc/files/lib/DumpUtilities_rb.html +101 -0
- data/doc/files/lib/FileCache_rb.html +110 -0
- data/doc/files/lib/FileContainer_rb.html +101 -0
- data/doc/files/lib/FileSystemImage_rb.html +109 -0
- data/doc/files/lib/FileSystem_rb.html +111 -0
- data/doc/files/lib/HostSystem_rb.html +110 -0
- data/doc/files/lib/ImageFormat_rb.html +111 -0
- data/doc/files/lib/NativeFileType_rb.html +111 -0
- data/doc/files/lib/PatchedPNG_rb.html +116 -0
- data/doc/files/lib/RipXploreLog_rb.html +108 -0
- data/doc/files/lib/RipXplore_rb.html +114 -0
- data/doc/files/lib/SubclassTracking_rb.html +108 -0
- data/doc/files/lib/disassemblers/D65_rb.html +101 -0
- data/doc/files/lib/file_systems/AppleCPM_rb.html +108 -0
- data/doc/files/lib/file_systems/AppleDos_rb.html +108 -0
- data/doc/files/lib/file_systems/AtariDos_rb.html +108 -0
- data/doc/files/lib/file_systems/CbmDos_rb.html +108 -0
- data/doc/files/lib/file_systems/NADOLDos_rb.html +108 -0
- data/doc/files/lib/file_systems/PascalDos_rb.html +108 -0
- data/doc/files/lib/file_systems/ProDos_rb.html +108 -0
- data/doc/files/lib/file_systems/RawDisk_rb.html +108 -0
- data/doc/files/lib/file_systems/TrsDos_rb.html +108 -0
- data/doc/files/lib/host_systems/Apple2_rb.html +109 -0
- data/doc/files/lib/host_systems/Atari800_rb.html +109 -0
- data/doc/files/lib/host_systems/C64_rb.html +109 -0
- data/doc/files/lib/host_systems/Trs80_rb.html +108 -0
- data/doc/files/lib/image_formats/A2Dsk_rb.html +108 -0
- data/doc/files/lib/image_formats/Atr_rb.html +108 -0
- data/doc/files/lib/image_formats/D64_rb.html +108 -0
- data/doc/files/lib/image_formats/G64_rb.html +108 -0
- data/doc/files/lib/image_formats/Trs80Jv1Dsk_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/AppleBinary_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/AppleHiResPic_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/AppleText_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/AppleWorksWP_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/Applesoft_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/IntegerBASIC_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/NADOLFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/PascalFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/ProDosFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/ScAsm_rb.html +101 -0
- data/doc/files/lib/native_file_types/atari800/AtariBasic_rb.html +108 -0
- data/doc/files/lib/native_file_types/atari800/AtariBinary_rb.html +108 -0
- data/doc/files/lib/native_file_types/atari800/AtariText_rb.html +108 -0
- data/doc/files/lib/native_file_types/c64/C64BasicPrg_rb.html +109 -0
- data/doc/files/lib/native_file_types/c64/C64PrgText_rb.html +109 -0
- data/doc/files/lib/native_file_types/c64/C64Prg_rb.html +109 -0
- data/doc/files/lib/native_file_types/c64/C64Seq_rb.html +109 -0
- data/doc/files/lib/native_file_types/c64/CbmFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/cpm/CPMFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/cpm/MBasic_rb.html +108 -0
- data/doc/files/lib/native_file_types/generic/GenericFile_rb.html +101 -0
- data/doc/files/lib/native_file_types/trs80/Trs80Cmd_rb.html +108 -0
- data/doc/files/lib/native_file_types/trs80/Trs80Jcl_rb.html +108 -0
- data/doc/files/lib/native_file_types/trs80/Trs80LevelIIBasic_rb.html +108 -0
- data/doc/files/lib/native_file_types/trs80/Trs80PascalSource_rb.html +108 -0
- data/doc/files/lib/proc_source_rb.html +182 -0
- data/doc/files/lib/proc_source_rb.src/M000001.html +24 -0
- data/doc/files/lib/rdoc_patch_rb.html +108 -0
- data/doc/files/test/tc_file_cache_rb.html +108 -0
- data/doc/files/test/tc_image_sniffing_rb.html +108 -0
- data/doc/files/test/testhelper_rb.html +129 -0
- data/doc/files/test/ts_test_all_rb.html +108 -0
- data/doc/fr_class_index.html +26 -0
- data/doc/fr_file_index.html +27 -0
- data/doc/fr_method_index.html +26 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/DumpUtilities.rb +34 -0
- data/lib/FileCache.rb +84 -0
- data/lib/FileContainer.rb +45 -0
- data/lib/FileSystem.rb +83 -0
- data/lib/FileSystemImage.rb +176 -0
- data/lib/HostSystem.rb +84 -0
- data/lib/ImageFormat.rb +127 -0
- data/lib/NativeFileType.rb +168 -0
- data/lib/PatchedPNG.rb +303 -0
- data/lib/RipXplore.rb +77 -0
- data/lib/RipXploreLog.rb +63 -0
- data/lib/SubclassTracking.rb +11 -0
- data/lib/disassemblers/D65.rb +181 -0
- data/lib/file_systems/AppleCPM.rb +123 -0
- data/lib/file_systems/AppleDos.rb +211 -0
- data/lib/file_systems/AtariDos.rb +80 -0
- data/lib/file_systems/CbmDos.rb +75 -0
- data/lib/file_systems/NADOLDos.rb +110 -0
- data/lib/file_systems/PascalDos.rb +131 -0
- data/lib/file_systems/ProDos.rb +155 -0
- data/lib/file_systems/RawDisk.rb +45 -0
- data/lib/file_systems/TrsDos.rb +148 -0
- data/lib/host_systems/Apple2.rb +57 -0
- data/lib/host_systems/Atari800.rb +57 -0
- data/lib/host_systems/C64.rb +82 -0
- data/lib/host_systems/Trs80.rb +48 -0
- data/lib/host_systems/a2_symbols.yaml +199 -0
- data/lib/host_systems/atari_800_symbols.yaml +496 -0
- data/lib/host_systems/c64_symbols.yaml +636 -0
- data/lib/image_formats/A2Dsk.rb +77 -0
- data/lib/image_formats/Atr.rb +83 -0
- data/lib/image_formats/D64.rb +87 -0
- data/lib/image_formats/G64.rb +174 -0
- data/lib/image_formats/Trs80Jv1Dsk.rb +65 -0
- data/lib/native_file_types/apple2/AppleBinary.rb +51 -0
- data/lib/native_file_types/apple2/AppleHiResPic.rb +166 -0
- data/lib/native_file_types/apple2/AppleText.rb +43 -0
- data/lib/native_file_types/apple2/AppleWorksWP.rb +68 -0
- data/lib/native_file_types/apple2/Applesoft.rb +115 -0
- data/lib/native_file_types/apple2/IntegerBASIC.rb +217 -0
- data/lib/native_file_types/apple2/NADOLFile.rb +205 -0
- data/lib/native_file_types/apple2/PascalFile.rb +48 -0
- data/lib/native_file_types/apple2/ProDosFile.rb +112 -0
- data/lib/native_file_types/apple2/ScAsm.rb +110 -0
- data/lib/native_file_types/atari800/AtariBasic.rb +396 -0
- data/lib/native_file_types/atari800/AtariBinary.rb +53 -0
- data/lib/native_file_types/atari800/AtariText.rb +49 -0
- data/lib/native_file_types/c64/C64BasicPrg.rb +333 -0
- data/lib/native_file_types/c64/C64Prg.rb +57 -0
- data/lib/native_file_types/c64/C64PrgText.rb +45 -0
- data/lib/native_file_types/c64/C64Seq.rb +47 -0
- data/lib/native_file_types/c64/CbmFile.rb +41 -0
- data/lib/native_file_types/cpm/CPMFile.rb +40 -0
- data/lib/native_file_types/cpm/MBasic.rb +311 -0
- data/lib/native_file_types/generic/GenericFile.rb +43 -0
- data/lib/native_file_types/trs80/Trs80Cmd.rb +130 -0
- data/lib/native_file_types/trs80/Trs80Jcl.rb +43 -0
- data/lib/native_file_types/trs80/Trs80LevelIIBasic.rb +201 -0
- data/lib/native_file_types/trs80/Trs80PascalSource.rb +58 -0
- data/lib/proc_source.rb +238 -0
- data/lib/rdoc_patch.rb +32 -0
- data/test/tc_file_cache.rb +11 -0
- data/test/tc_image_sniffing.rb +165 -0
- data/test/testhelper.rb +14 -0
- data/test/testlog.txt +30755 -0
- data/test/ts_test_all.rb +3 -0
- metadata +601 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
require 'FileSystem'
|
|
9
|
+
|
|
10
|
+
#http://atrey.karlin.mff.cuni.cz/~pavel/atari/atr2.html
|
|
11
|
+
#http://www.atarimax.com/jindroush.atari.org/afmt.html
|
|
12
|
+
class AtariDos<FileSystem
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def self.host_system
|
|
16
|
+
Atari800
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
#for now, assume that anything on an Atari compatable image format is Atari DOS
|
|
20
|
+
is_valid_file_system_if lambda {true}
|
|
21
|
+
|
|
22
|
+
ATARI_DOS_FILE_RECORD_LENGTH=16
|
|
23
|
+
ATARI_DOS_CATALOG_START_SECTOR=361
|
|
24
|
+
ATARI_DOS_CATALOG_END_SECTOR=368
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def self.files(file_system_image)
|
|
28
|
+
files=FileContainer.new
|
|
29
|
+
# @file_start_sectors={}
|
|
30
|
+
ATARI_DOS_CATALOG_START_SECTOR.upto(ATARI_DOS_CATALOG_END_SECTOR) do |sector_no|
|
|
31
|
+
catalog_sector_data=file_system_image.get_sector(0,sector_no)
|
|
32
|
+
0.upto(7) do |record_no|
|
|
33
|
+
catalog_record_data=catalog_sector_data[record_no*ATARI_DOS_FILE_RECORD_LENGTH,ATARI_DOS_FILE_RECORD_LENGTH]
|
|
34
|
+
directory_flag,file_length,start_sector,filename_prefix,filename_ext=catalog_record_data.unpack("CvvA8A3")
|
|
35
|
+
file_name="#{filename_prefix}.#{filename_ext}"
|
|
36
|
+
# puts "%08b %02x %02x %s" % [directory_flag,file_length,start_sector,file_name]
|
|
37
|
+
if (start_sector>0 && start_sector<file_system_image.image_format.sector_count&& (directory_flag & 0x80 !=0x80)) then
|
|
38
|
+
current_sector=start_sector
|
|
39
|
+
file_contents=""
|
|
40
|
+
while current_sector!=0 && current_sector<=file_system_image.image_format.sector_count
|
|
41
|
+
file_sector_data=file_system_image.get_sector(0,current_sector)
|
|
42
|
+
#raise "invalid sector #{current_sector} in #{file_name}" if file_sector_data.nil?
|
|
43
|
+
bytes_used=(file_sector_data[127] & 0x7F)
|
|
44
|
+
file_contents+=file_sector_data[0,bytes_used]
|
|
45
|
+
next_sector_hi=(file_sector_data[125] & 0b00000011)
|
|
46
|
+
next_sector_lo=file_sector_data[126]
|
|
47
|
+
current_sector=next_sector_hi*0x100+next_sector_lo
|
|
48
|
+
end
|
|
49
|
+
files<<NativeFileType.best_fit(file_system_image,file_name,file_contents,filename_ext)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
files
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# == Author
|
|
58
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
59
|
+
#
|
|
60
|
+
# == Copyright
|
|
61
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
62
|
+
#
|
|
63
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
64
|
+
#a copy of this software and associated documentation files (the
|
|
65
|
+
#"Software"), to deal in the Software without restriction, including
|
|
66
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
67
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
68
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
69
|
+
#the following conditions:
|
|
70
|
+
|
|
71
|
+
# The above copyright notice and this permission notice shall be
|
|
72
|
+
# included in all copies or substantial portions of the Software.
|
|
73
|
+
|
|
74
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
75
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
76
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
77
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
78
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
79
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
80
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
require 'FileSystem'
|
|
9
|
+
#
|
|
10
|
+
#
|
|
11
|
+
class CbmDos<FileSystem
|
|
12
|
+
|
|
13
|
+
def self.host_system
|
|
14
|
+
C64
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
DIRECTORY_ENTRY_SIZE=0x20
|
|
18
|
+
FILE_TYPES=[:del,:seq,:prg,:usr,:rel,:unk,:unk,:unk]
|
|
19
|
+
|
|
20
|
+
#for now, assume that anything on a CBM compatable image format is a CBM DOS
|
|
21
|
+
is_valid_file_system_if lambda {true}
|
|
22
|
+
|
|
23
|
+
def self.files(file_system_image)
|
|
24
|
+
files=FileContainer.new
|
|
25
|
+
dir_track_no=18
|
|
26
|
+
dir_sector_no=1
|
|
27
|
+
until dir_track_no==0 || dir_track_no> file_system_image.end_track do
|
|
28
|
+
directory_sector=file_system_image.get_sector(dir_track_no,dir_sector_no)
|
|
29
|
+
dir_track_no=directory_sector[0]
|
|
30
|
+
dir_sector_no=directory_sector[1]
|
|
31
|
+
0.upto(7) do |entry_number|
|
|
32
|
+
directory_entry=directory_sector[DIRECTORY_ENTRY_SIZE*entry_number,DIRECTORY_ENTRY_SIZE]
|
|
33
|
+
file_name=C64.s_to_ascii(directory_entry[0x05..0x14]).strip
|
|
34
|
+
file_type=FILE_TYPES[directory_entry[0x02]%8]
|
|
35
|
+
file_track_no=directory_entry[0x03]
|
|
36
|
+
file_sector_no=directory_entry[0x04]
|
|
37
|
+
file_contents=""
|
|
38
|
+
until file_track_no==0 || file_track_no> file_system_image.end_track do
|
|
39
|
+
file_sector=file_system_image.get_sector(file_track_no,file_sector_no)
|
|
40
|
+
break if file_sector.nil?
|
|
41
|
+
file_track_no=file_sector[0]
|
|
42
|
+
file_sector_no=file_sector[1]
|
|
43
|
+
file_contents+=file_sector[2..255]
|
|
44
|
+
end
|
|
45
|
+
files<<NativeFileType.best_fit(file_system_image,file_name,file_contents,file_type)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
files
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# == Author
|
|
53
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
54
|
+
#
|
|
55
|
+
# == Copyright
|
|
56
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
57
|
+
#
|
|
58
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
59
|
+
#a copy of this software and associated documentation files (the
|
|
60
|
+
#"Software"), to deal in the Software without restriction, including
|
|
61
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
62
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
63
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
64
|
+
#the following conditions:
|
|
65
|
+
|
|
66
|
+
# The above copyright notice and this permission notice shall be
|
|
67
|
+
# included in all copies or substantial portions of the Software.
|
|
68
|
+
|
|
69
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
70
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
71
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
72
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
73
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
74
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
75
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
require 'FileSystem'
|
|
9
|
+
# Disk image in NADOL format
|
|
10
|
+
#
|
|
11
|
+
#CATALOG will be at track $00, sector $03 to track $00, sector $09
|
|
12
|
+
#each entry consists of $10 bytes, which are:
|
|
13
|
+
# 00-0B - filename - if file is deleted, first byte will be FF
|
|
14
|
+
# 0C-0D - filesize (low byte first)
|
|
15
|
+
# 0E - track of track sector list sector
|
|
16
|
+
# 0F - sector of track sector list sector
|
|
17
|
+
#
|
|
18
|
+
#TRACK/SECTOR LIST FORMAT
|
|
19
|
+
# pairs of track/sectors in order. up to 128 entries [assumes that no file can be > 128 sectors]
|
|
20
|
+
#
|
|
21
|
+
#SECTOR USAGE BITMAP
|
|
22
|
+
#is at Track $00, Sector $2, from bytes $20 .. $65
|
|
23
|
+
#bitmap is of form:
|
|
24
|
+
#
|
|
25
|
+
# ----hi bit--
|
|
26
|
+
# | |
|
|
27
|
+
# 01234567 89ABCDEF
|
|
28
|
+
# ^^^^^^ ^^^^^^^
|
|
29
|
+
# low byte hi byte
|
|
30
|
+
class NADOLDos<FileSystem
|
|
31
|
+
|
|
32
|
+
def self.host_system
|
|
33
|
+
Apple2
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
#if the filesystem on a DSK is NADOL, we don't have to worry about sector interleaves
|
|
38
|
+
is_valid_file_system_if lambda {! file_system_image.image_format.is_a?(A2DskDosOrder)}
|
|
39
|
+
|
|
40
|
+
# check that track $00, sector $02 , bytes $11 - "NADOL"
|
|
41
|
+
is_valid_file_system_if lambda {
|
|
42
|
+
test_sector=file_system_image.get_sector(0,2)
|
|
43
|
+
(!test_sector.nil?) && test_sector[0x11..0x15]=="NADOL"
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
def NADOLDos.files(file_system_image)
|
|
47
|
+
files=FileContainer.new
|
|
48
|
+
track=0
|
|
49
|
+
sector=3
|
|
50
|
+
while (sector<=9) do
|
|
51
|
+
sector_data=file_system_image.get_sector(track,sector)
|
|
52
|
+
(0..15).each do |slot_no|
|
|
53
|
+
slot_offset=slot_no*0x10
|
|
54
|
+
file_descriptive_entry=sector_data[slot_offset..slot_offset+0x10]
|
|
55
|
+
if (file_descriptive_entry[0]!=0xFF && file_descriptive_entry[0]!=0x00) then # skip deleted /empty files
|
|
56
|
+
filename=""
|
|
57
|
+
file_descriptive_entry[0..11].to_s.each_byte{|b| filename+=(b.%128).chr} #strip off high bit
|
|
58
|
+
filename.sub!(/ *$/,"") #strip off trailing spaces
|
|
59
|
+
file_size=file_descriptive_entry[0x0D]*256+file_descriptive_entry[0x0C]
|
|
60
|
+
if (file_size>0) then
|
|
61
|
+
contents=""
|
|
62
|
+
ts_list_track_no=file_descriptive_entry[0x0E]
|
|
63
|
+
ts_list_sector_no=file_descriptive_entry[0x0F]
|
|
64
|
+
ts_list_sector=file_system_image.get_sector(ts_list_track_no,ts_list_sector_no)
|
|
65
|
+
|
|
66
|
+
for entry_number in 0..0x7f
|
|
67
|
+
data_track_no=ts_list_sector[entry_number*2]
|
|
68
|
+
data_sector_no=ts_list_sector[entry_number*2+1]
|
|
69
|
+
if( (data_track_no!=0 || data_sector_no!=0) && data_sector_no<=0x0f) then
|
|
70
|
+
contents<<file_system_image.get_sector(data_track_no,data_sector_no)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
contents=contents[0,file_size]
|
|
74
|
+
files<<NativeFileType.best_fit(file_system_image,filename,contents)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
sector+=1
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
files
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
# == Author
|
|
88
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
89
|
+
#
|
|
90
|
+
# == Copyright
|
|
91
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
92
|
+
#
|
|
93
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
94
|
+
#a copy of this software and associated documentation files (the
|
|
95
|
+
#"Software"), to deal in the Software without restriction, including
|
|
96
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
97
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
98
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
99
|
+
#the following conditions:
|
|
100
|
+
|
|
101
|
+
# The above copyright notice and this permission notice shall be
|
|
102
|
+
# included in all copies or substantial portions of the Software.
|
|
103
|
+
|
|
104
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
105
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
106
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
107
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
108
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
109
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
110
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
require 'FileSystem'
|
|
9
|
+
# Disk image with Pascal File System
|
|
10
|
+
#catalog will be at block 2.
|
|
11
|
+
#each entry consists of $1A bytes, which are:
|
|
12
|
+
#VOLUME HEADER
|
|
13
|
+
# 00..01 FIRST BLOCK (word)
|
|
14
|
+
# 02..03 LAST BLOCK+1 (word)
|
|
15
|
+
# 04 FILE TYPE (byte) = untypedfile,xdskfile,codefile,textfile,infofile,datafile,graffile,fotofile,securdir
|
|
16
|
+
# 05 FILLER
|
|
17
|
+
# 06 VOLUME NAME LENGTH (1 byte)
|
|
18
|
+
# 07..0D VOLUME NAME (17 bytes)
|
|
19
|
+
# 0E..0F VOLUME SIZE (WORD)
|
|
20
|
+
# 10 NUMBER OF FILES (BYTE)
|
|
21
|
+
# 11..1A FILLER
|
|
22
|
+
#
|
|
23
|
+
#FILES
|
|
24
|
+
# 00..01 FIRST BLOCK (word)
|
|
25
|
+
# 02..03 LAST BLOCK+1 (word)
|
|
26
|
+
# 04 FILE TYPE (byte) = untypedfile,xdskfile,codefile,textfile,infofile,datafile,graffile,fotofile,securdir
|
|
27
|
+
# 05 STATUS (byte)
|
|
28
|
+
# 06 FILENAME LENGTH (1 byte)
|
|
29
|
+
# 07..16 FILENAME (15 bytes)
|
|
30
|
+
# 17..18 BYTES IN LAST BLOCK (word)
|
|
31
|
+
# 19..1A FILE ACCESS DATE
|
|
32
|
+
class PascalDos<FileSystem
|
|
33
|
+
|
|
34
|
+
def self.host_system
|
|
35
|
+
Apple2
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def self.get_block(file_system_image,block_no)
|
|
40
|
+
track=(block_no / 8).to_i
|
|
41
|
+
first_sector=2*(block_no % 8)
|
|
42
|
+
raise "illegal block no #{block_no}" if track>=file_system_image.track_count
|
|
43
|
+
return file_system_image.get_sector(track,first_sector)+file_system_image.get_sector(track,first_sector+1)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
#on a valid Pascal disk,
|
|
47
|
+
#block $02 - bytes $00..$01 are both $00, byte $06 is < 8 and
|
|
48
|
+
#bytes $0E-$0F = sectors ( 0x118 on a 35 track 5.25" disk)
|
|
49
|
+
|
|
50
|
+
is_valid_file_system_if lambda {
|
|
51
|
+
first_sector_in_block_2=file_system_image.get_sector(0,4)
|
|
52
|
+
is_valid=true
|
|
53
|
+
is_valid= false if first_sector_in_block_2.nil?
|
|
54
|
+
is_valid && (first_sector_in_block_2[0..1]=="\x00\x00") && (first_sector_in_block_2[6]<=7) && (first_sector_in_block_2[0x0E]+first_sector_in_block_2[0x0F]*0x100==file_system_image.track_count*8)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
def self.files(file_system_image)
|
|
58
|
+
files=FileContainer.new
|
|
59
|
+
catalog=get_block(file_system_image,2)
|
|
60
|
+
#we've read the first block in the catalog, now read the rest
|
|
61
|
+
catalog_size=catalog[2]
|
|
62
|
+
3.upto(catalog_size-1) do |i|
|
|
63
|
+
catalog<<get_block(file_system_image,i)
|
|
64
|
+
end
|
|
65
|
+
# 06 VOLUME NAME LENGTH (1 byte)
|
|
66
|
+
# 07..0D VOLUME NAME (17 bytes)
|
|
67
|
+
# 0E..0F VOLUME SIZE (WORD)
|
|
68
|
+
# 10 NUMBER OF FILES (BYTE)
|
|
69
|
+
volume_name_length=catalog[6]
|
|
70
|
+
file_system_image.volume_name=catalog[7..6+volume_name_length]
|
|
71
|
+
files_in_volume=catalog[0x10]
|
|
72
|
+
#read in all the files
|
|
73
|
+
|
|
74
|
+
# 00..01 FIRST BLOCK (word)
|
|
75
|
+
# 02..03 LAST BLOCK+1 (word)
|
|
76
|
+
# 04 FILE TYPE (byte) = untypedfile,xdskfile,codefile,textfile,infofile,datafile,graffile,fotofile,securdir
|
|
77
|
+
# 05 STATUS (byte)
|
|
78
|
+
# 06 FILENAME LENGTH (1 byte)
|
|
79
|
+
# 07..15 FILENAME (15 bytes)
|
|
80
|
+
# 16..17 BYTES IN LAST BLOCK (word)
|
|
81
|
+
# 18.1A FILE ACCESS DATE
|
|
82
|
+
1.upto(files_in_volume) do |file_no|
|
|
83
|
+
file_record=catalog[file_no*0x1a..(file_no*0x1a+0x19)]
|
|
84
|
+
first_block=file_record[0]+file_record[1]*0x100
|
|
85
|
+
first_block_in_next_file=file_record[2]+file_record[3]*0x100
|
|
86
|
+
last_block=first_block_in_next_file-1
|
|
87
|
+
file_type=file_record[4]
|
|
88
|
+
file_name_length=file_record[6]
|
|
89
|
+
file_name=file_record[7..6+file_name_length]
|
|
90
|
+
bytes_in_last_block=file_record[0x16]+file_record[0x17]*0x100
|
|
91
|
+
file_contents=""
|
|
92
|
+
first_block.upto(last_block) do |block_no|
|
|
93
|
+
this_block=get_block(file_system_image,block_no)
|
|
94
|
+
if block_no==last_block then
|
|
95
|
+
file_contents<<this_block[0..bytes_in_last_block-1]
|
|
96
|
+
else
|
|
97
|
+
file_contents<<this_block
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
files<<NativeFileType.best_fit(file_system_image,file_name,file_contents,file_type)
|
|
101
|
+
end
|
|
102
|
+
files
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# == Author
|
|
109
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
110
|
+
#
|
|
111
|
+
# == Copyright
|
|
112
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
113
|
+
#
|
|
114
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
115
|
+
#a copy of this software and associated documentation files (the
|
|
116
|
+
#"Software"), to deal in the Software without restriction, including
|
|
117
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
118
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
119
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
120
|
+
#the following conditions:
|
|
121
|
+
|
|
122
|
+
# The above copyright notice and this permission notice shall be
|
|
123
|
+
# included in all copies or substantial portions of the Software.
|
|
124
|
+
|
|
125
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
126
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
127
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
128
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
129
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
130
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
131
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
require 'FileSystem'
|
|
9
|
+
#Disk image in ProDOS format
|
|
10
|
+
class ProDos<FileSystem
|
|
11
|
+
|
|
12
|
+
def self.host_system
|
|
13
|
+
Apple2
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#block $02 - bytes $00/$01 are both $00, byte $04 is $F?,
|
|
17
|
+
#bytes $29-$2A = number of sectors ( 0x118 on a 35 track 5.25" disk)
|
|
18
|
+
is_valid_file_system_if lambda {
|
|
19
|
+
first_sector_in_block_2=file_system_image.get_sector(0,4)
|
|
20
|
+
((!first_sector_in_block_2.nil?) && (first_sector_in_block_2[0..1]=="\x00\x00") &&
|
|
21
|
+
(first_sector_in_block_2[4]>=0xF0) &&
|
|
22
|
+
(first_sector_in_block_2[0x29]+first_sector_in_block_2[0x2a]*0x100==file_system_image.track_count*8)
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
#returns a FileContainer of of the native files contained in file system image
|
|
27
|
+
|
|
28
|
+
def self.files(file_system_image)
|
|
29
|
+
files=FileContainer.new
|
|
30
|
+
ProDos.read_catalog(file_system_image,2,"").flatten.each do |file|
|
|
31
|
+
files<<file
|
|
32
|
+
end
|
|
33
|
+
files
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def self.get_block(file_system_image,block_no)
|
|
39
|
+
track=(block_no / 8).to_i
|
|
40
|
+
first_sector=2*(block_no % 8)
|
|
41
|
+
raise "illegal block no #{block_no}" if track>=file_system_image.track_count
|
|
42
|
+
return file_system_image.get_sector(track,first_sector)+file_system_image.get_sector(track,first_sector+1)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.read_catalog(file_system_image,starting_block,dir_path)
|
|
46
|
+
files=FileContainer.new
|
|
47
|
+
next_block_no=starting_block
|
|
48
|
+
while (next_block_no!=0)
|
|
49
|
+
block=ProDos.get_block(file_system_image,next_block_no)
|
|
50
|
+
offset=4
|
|
51
|
+
while (offset<(0x200-0x27))
|
|
52
|
+
directory_entry=block[offset..offset+0x27]
|
|
53
|
+
storage_type=directory_entry[0]>>4
|
|
54
|
+
name_length=directory_entry[0]%0x10
|
|
55
|
+
name=directory_entry[1..name_length]
|
|
56
|
+
file_type=directory_entry[0x10]
|
|
57
|
+
key_pointer=directory_entry[0x11]+directory_entry[0x12]*0x100
|
|
58
|
+
blocks_used=directory_entry[0x13]+directory_entry[0x14]*0x100
|
|
59
|
+
file_length=directory_entry[0x15]+directory_entry[0x16]*0x100+directory_entry[0x17]*0x10000
|
|
60
|
+
aux_code=directory_entry[0x1f]+directory_entry[0x20]*0x100
|
|
61
|
+
full_filename="#{dir_path}#{name}"
|
|
62
|
+
case storage_type
|
|
63
|
+
when 0x00 then
|
|
64
|
+
#nop
|
|
65
|
+
when 0x01 then #it's a seedling
|
|
66
|
+
file_contents=ProDos.get_block(file_system_image,key_pointer)
|
|
67
|
+
files<<NativeFileType.best_fit(file_system_image,full_filename,file_contents,file_type,aux_code)
|
|
68
|
+
#files<<ProDOSFile.new(name,file_contents,file_type,aux_code,full_filename)
|
|
69
|
+
when 0x02 then #it's a sapling
|
|
70
|
+
block_list=[]
|
|
71
|
+
index_block=get_block(file_system_image,key_pointer)
|
|
72
|
+
0.upto((file_length/0x200)) do |i|
|
|
73
|
+
block_list<<index_block[i]+(index_block[i+0x100]*0x100)
|
|
74
|
+
end
|
|
75
|
+
file_contents=""
|
|
76
|
+
block_list.each do |next_block_no|
|
|
77
|
+
if next_block_no==0 then
|
|
78
|
+
file_contents+="\x00"*0x200
|
|
79
|
+
else
|
|
80
|
+
file_contents+=get_block(file_system_image,next_block_no)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
file_contents=file_contents[0..file_length-1]
|
|
84
|
+
files<<NativeFileType.best_fit(file_system_image,full_filename,file_contents,file_type,aux_code)
|
|
85
|
+
when 0x03 then #it's a tree
|
|
86
|
+
master_index_block=get_block(file_system_image,key_pointer)
|
|
87
|
+
block_list=[]
|
|
88
|
+
number_of_index_entries=1+(file_length/0x200)
|
|
89
|
+
number_of_index_blocks=1+(number_of_index_entries/0x100)
|
|
90
|
+
number_of_index_entries_in_last_block=number_of_index_entries-(number_of_index_blocks-1)*0x100
|
|
91
|
+
0.upto(number_of_index_blocks-1) do |i|
|
|
92
|
+
index_block_no=master_index_block[i]+master_index_block[i+0x100]*0x100
|
|
93
|
+
index_block=get_block(file_system_image,index_block_no)
|
|
94
|
+
if i==number_of_index_blocks-1 then
|
|
95
|
+
entries_in_this_index_block=number_of_index_entries_in_last_block
|
|
96
|
+
else
|
|
97
|
+
entries_in_this_index_block=256
|
|
98
|
+
end
|
|
99
|
+
0.upto(entries_in_this_index_block-1) do |j|
|
|
100
|
+
block_list<<index_block[j]+(index_block[j+0x100]*0x100)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
file_contents=""
|
|
104
|
+
block_list.each do |next_block_no|
|
|
105
|
+
if next_block_no==0 then
|
|
106
|
+
file_contents+="\x00"*0x200
|
|
107
|
+
else
|
|
108
|
+
file_contents+=get_block(file_system_image,next_block_no)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
file_contents=file_contents[0..file_length-1]
|
|
112
|
+
files<<NativeFileType.best_fit(file_system_image,full_filename,file_contents,file_type,aux_code)
|
|
113
|
+
when 0x0D then #it's a subdirectory pointer
|
|
114
|
+
files+=read_catalog(file_system_image,key_pointer,"#{dir_path}#{name}/")
|
|
115
|
+
when 0x0E then #it's a subdirectory header
|
|
116
|
+
#do nothing
|
|
117
|
+
when 0x0F then #it's a volume
|
|
118
|
+
@volume_name=name
|
|
119
|
+
else
|
|
120
|
+
RipXploreLog.warn("skipping unknown storage_type #{sprintf '%02X',storage_type} for #{dir_path}#{name}")
|
|
121
|
+
end
|
|
122
|
+
offset+=0x27
|
|
123
|
+
end
|
|
124
|
+
next_block_no=block[2]+block[3]*256
|
|
125
|
+
end
|
|
126
|
+
files
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
# == Author
|
|
133
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
134
|
+
#
|
|
135
|
+
# == Copyright
|
|
136
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
137
|
+
#
|
|
138
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
139
|
+
#a copy of this software and associated documentation files (the
|
|
140
|
+
#"Software"), to deal in the Software without restriction, including
|
|
141
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
142
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
143
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
144
|
+
#the following conditions:
|
|
145
|
+
|
|
146
|
+
# The above copyright notice and this permission notice shall be
|
|
147
|
+
# included in all copies or substantial portions of the Software.
|
|
148
|
+
|
|
149
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
150
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
151
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
152
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
153
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
154
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
155
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
require 'FileSystem'
|
|
9
|
+
class RawDisk<FileSystem
|
|
10
|
+
|
|
11
|
+
def self.host_system
|
|
12
|
+
HostSystem
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
#this should be the file system of last resort
|
|
16
|
+
def self.compatability_score(filesystem_image)
|
|
17
|
+
return 0.1
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# == Author
|
|
23
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
24
|
+
#
|
|
25
|
+
# == Copyright
|
|
26
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
|
27
|
+
#
|
|
28
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
29
|
+
#a copy of this software and associated documentation files (the
|
|
30
|
+
#"Software"), to deal in the Software without restriction, including
|
|
31
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
32
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
33
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
34
|
+
#the following conditions:
|
|
35
|
+
|
|
36
|
+
# The above copyright notice and this permission notice shall be
|
|
37
|
+
# included in all copies or substantial portions of the Software.
|
|
38
|
+
|
|
39
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
40
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
41
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
42
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
43
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
44
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
45
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|