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
data/doc/rdoc-style.css
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
|
|
2
|
+
body {
|
|
3
|
+
font-family: Verdana,Arial,Helvetica,sans-serif;
|
|
4
|
+
font-size: 90%;
|
|
5
|
+
margin: 0;
|
|
6
|
+
margin-left: 40px;
|
|
7
|
+
padding: 0;
|
|
8
|
+
background: white;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
|
|
12
|
+
h1 { font-size: 150%; }
|
|
13
|
+
h2,h3,h4 { margin-top: 1em; }
|
|
14
|
+
|
|
15
|
+
a { background: #eef; color: #039; text-decoration: none; }
|
|
16
|
+
a:hover { background: #039; color: #eef; }
|
|
17
|
+
|
|
18
|
+
/* Override the base stylesheet's Anchor inside a table cell */
|
|
19
|
+
td > a {
|
|
20
|
+
background: transparent;
|
|
21
|
+
color: #039;
|
|
22
|
+
text-decoration: none;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* and inside a section title */
|
|
26
|
+
.section-title > a {
|
|
27
|
+
background: transparent;
|
|
28
|
+
color: #eee;
|
|
29
|
+
text-decoration: none;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* === Structural elements =================================== */
|
|
33
|
+
|
|
34
|
+
div#index {
|
|
35
|
+
margin: 0;
|
|
36
|
+
margin-left: -40px;
|
|
37
|
+
padding: 0;
|
|
38
|
+
font-size: 90%;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
div#index a {
|
|
43
|
+
margin-left: 0.7em;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
div#index .section-bar {
|
|
47
|
+
margin-left: 0px;
|
|
48
|
+
padding-left: 0.7em;
|
|
49
|
+
background: #ccc;
|
|
50
|
+
font-size: small;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
div#classHeader, div#fileHeader {
|
|
55
|
+
width: auto;
|
|
56
|
+
color: white;
|
|
57
|
+
padding: 0.5em 1.5em 0.5em 1.5em;
|
|
58
|
+
margin: 0;
|
|
59
|
+
margin-left: -40px;
|
|
60
|
+
border-bottom: 3px solid #006;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
div#classHeader a, div#fileHeader a {
|
|
64
|
+
background: inherit;
|
|
65
|
+
color: white;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
div#classHeader td, div#fileHeader td {
|
|
69
|
+
background: inherit;
|
|
70
|
+
color: white;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
div#fileHeader {
|
|
75
|
+
background: #057;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
div#classHeader {
|
|
79
|
+
background: #048;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
.class-name-in-header {
|
|
84
|
+
font-size: 180%;
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
div#bodyContent {
|
|
90
|
+
padding: 0 1.5em 0 1.5em;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
div#description {
|
|
94
|
+
padding: 0.5em 1.5em;
|
|
95
|
+
background: #efefef;
|
|
96
|
+
border: 1px dotted #999;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
div#description h1,h2,h3,h4,h5,h6 {
|
|
100
|
+
color: #125;;
|
|
101
|
+
background: transparent;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
div#validator-badges {
|
|
105
|
+
text-align: center;
|
|
106
|
+
}
|
|
107
|
+
div#validator-badges img { border: 0; }
|
|
108
|
+
|
|
109
|
+
div#copyright {
|
|
110
|
+
color: #333;
|
|
111
|
+
background: #efefef;
|
|
112
|
+
font: 0.75em sans-serif;
|
|
113
|
+
margin-top: 5em;
|
|
114
|
+
margin-bottom: 0;
|
|
115
|
+
padding: 0.5em 2em;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
/* === Classes =================================== */
|
|
120
|
+
|
|
121
|
+
table.header-table {
|
|
122
|
+
color: white;
|
|
123
|
+
font-size: small;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.type-note {
|
|
127
|
+
font-size: small;
|
|
128
|
+
color: #DEDEDE;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.xxsection-bar {
|
|
132
|
+
background: #eee;
|
|
133
|
+
color: #333;
|
|
134
|
+
padding: 3px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.section-bar {
|
|
138
|
+
color: #333;
|
|
139
|
+
border-bottom: 1px solid #999;
|
|
140
|
+
margin-left: -20px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
.section-title {
|
|
145
|
+
background: #79a;
|
|
146
|
+
color: #eee;
|
|
147
|
+
padding: 3px;
|
|
148
|
+
margin-top: 2em;
|
|
149
|
+
margin-left: -30px;
|
|
150
|
+
border: 1px solid #999;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.top-aligned-row { vertical-align: top }
|
|
154
|
+
.bottom-aligned-row { vertical-align: bottom }
|
|
155
|
+
|
|
156
|
+
/* --- Context section classes ----------------------- */
|
|
157
|
+
|
|
158
|
+
.context-row { }
|
|
159
|
+
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
|
|
160
|
+
.context-item-value { font-size: small; color: #448; }
|
|
161
|
+
.context-item-desc { color: #333; padding-left: 2em; }
|
|
162
|
+
|
|
163
|
+
/* --- Method classes -------------------------- */
|
|
164
|
+
.method-detail {
|
|
165
|
+
background: #efefef;
|
|
166
|
+
padding: 0;
|
|
167
|
+
margin-top: 0.5em;
|
|
168
|
+
margin-bottom: 1em;
|
|
169
|
+
border: 1px dotted #ccc;
|
|
170
|
+
}
|
|
171
|
+
.method-heading {
|
|
172
|
+
color: black;
|
|
173
|
+
background: #ccc;
|
|
174
|
+
border-bottom: 1px solid #666;
|
|
175
|
+
padding: 0.2em 0.5em 0 0.5em;
|
|
176
|
+
}
|
|
177
|
+
.method-signature { color: black; background: inherit; }
|
|
178
|
+
.method-name { font-weight: bold; }
|
|
179
|
+
.method-args { font-style: italic; }
|
|
180
|
+
.method-description { padding: 0 0.5em 0 0.5em; }
|
|
181
|
+
|
|
182
|
+
/* --- Source code sections -------------------- */
|
|
183
|
+
|
|
184
|
+
a.source-toggle { font-size: 90%; }
|
|
185
|
+
div.method-source-code {
|
|
186
|
+
background: #262626;
|
|
187
|
+
color: #ffdead;
|
|
188
|
+
margin: 1em;
|
|
189
|
+
padding: 0.5em;
|
|
190
|
+
border: 1px dashed #999;
|
|
191
|
+
overflow: hidden;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
195
|
+
|
|
196
|
+
/* --- Ruby keyword styles --------------------- */
|
|
197
|
+
|
|
198
|
+
.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
|
|
199
|
+
|
|
200
|
+
.ruby-constant { color: #7fffd4; background: transparent; }
|
|
201
|
+
.ruby-keyword { color: #00ffff; background: transparent; }
|
|
202
|
+
.ruby-ivar { color: #eedd82; background: transparent; }
|
|
203
|
+
.ruby-operator { color: #00ffee; background: transparent; }
|
|
204
|
+
.ruby-identifier { color: #ffdead; background: transparent; }
|
|
205
|
+
.ruby-node { color: #ffa07a; background: transparent; }
|
|
206
|
+
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
|
|
207
|
+
.ruby-regexp { color: #ffa07a; background: transparent; }
|
|
208
|
+
.ruby-value { color: #7fffd4; background: transparent; }
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
class DumpUtilities
|
|
2
|
+
|
|
3
|
+
def DumpUtilities.hex_dump(buffer)
|
|
4
|
+
s=""
|
|
5
|
+
(0..(buffer.length/16)).each {|line_number|
|
|
6
|
+
lhs=""
|
|
7
|
+
rhs=""
|
|
8
|
+
start_byte=line_number*16
|
|
9
|
+
line=buffer[start_byte..start_byte+15]
|
|
10
|
+
if line.length>0 then
|
|
11
|
+
line.each_byte {|byte|
|
|
12
|
+
lhs+= sprintf("%02X ", byte)
|
|
13
|
+
rhs+= (byte%128).chr.sub(/[\x00-\x1f]/,'.')
|
|
14
|
+
}
|
|
15
|
+
lhs+=" "*(16-line.length)*3
|
|
16
|
+
s+=sprintf("%02X\t%s %s\n",start_byte,lhs,rhs)
|
|
17
|
+
end
|
|
18
|
+
}
|
|
19
|
+
s
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def DumpUtilities.font_dump(buffer)
|
|
23
|
+
#treat buffer as a set 8 bit wide characters
|
|
24
|
+
s=""
|
|
25
|
+
c=0
|
|
26
|
+
buffer.each_byte do |byte|
|
|
27
|
+
s<<sprintf(";char %02x\n",c>>3) if c%8==0
|
|
28
|
+
s<<sprintf("%08b\n",byte).tr("1","#").tr("0"," ")
|
|
29
|
+
c+=1
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
s
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/FileCache.rb
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
require 'open-uri'
|
|
4
|
+
require 'digest/md5'
|
|
5
|
+
require 'RipXploreLog'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class FileCacheItem < File
|
|
9
|
+
def set_path(path)
|
|
10
|
+
@path=path
|
|
11
|
+
end
|
|
12
|
+
def path
|
|
13
|
+
@path
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
#creates and manages a local cache of files, so an URL can be requested, if it is in the cache, the local copy is used, otherwise the file is downloaded to the local cache
|
|
18
|
+
class FileCache
|
|
19
|
+
attr_accessor :cache_dir
|
|
20
|
+
|
|
21
|
+
#create a local_name for a URL. format of local_name "#{cache_dir}/#{Digest::MD5.hexdigest(url)}"
|
|
22
|
+
def local_name(url)
|
|
23
|
+
"#{cache_dir}/#{Digest::MD5.hexdigest(url)}.cached"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def initialize(cache_dir)
|
|
27
|
+
@cache_dir=cache_dir
|
|
28
|
+
Dir.mkdir(cache_dir) unless File.exists?(cache_dir)
|
|
29
|
+
raise "cache directory #{cache_dir} invalid" unless File.directory?(cache_dir)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def purge(url)
|
|
33
|
+
local_file_name=local_name(url)
|
|
34
|
+
if File.exists?(local_file_name) then
|
|
35
|
+
RipXploreLog.log "purging local copy of #{url}"
|
|
36
|
+
File.delete(local_file_name)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def get(url)
|
|
41
|
+
local_file_name=local_name(url)
|
|
42
|
+
if !File.exists?(local_file_name) then
|
|
43
|
+
RipXploreLog.log "downloading #{url}"
|
|
44
|
+
remote_file=open(url,"rb")
|
|
45
|
+
local_file=File.open(local_file_name,"wb")
|
|
46
|
+
local_file<<remote_file.read
|
|
47
|
+
local_file.close
|
|
48
|
+
local_file_info_filename="#{local_file_name}.info"
|
|
49
|
+
local_file_info_file=File.open(local_file_info_filename,"w")
|
|
50
|
+
local_file_info_file<<url
|
|
51
|
+
local_file_info_file.close
|
|
52
|
+
end
|
|
53
|
+
file=FileCacheItem.open(local_file_name,"rb")
|
|
54
|
+
file.set_path(url)
|
|
55
|
+
file
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# == Author
|
|
62
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
63
|
+
#
|
|
64
|
+
# == Copyright
|
|
65
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
66
|
+
#
|
|
67
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
68
|
+
#a copy of this software and associated documentation files (the
|
|
69
|
+
#"Software"), to deal in the Software without restriction, including
|
|
70
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
71
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
72
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
73
|
+
#the following conditions:
|
|
74
|
+
|
|
75
|
+
# The above copyright notice and this permission notice shall be
|
|
76
|
+
# included in all copies or substantial portions of the Software.
|
|
77
|
+
|
|
78
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
79
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
80
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
81
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
82
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
83
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
84
|
+
# 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
|
+
#FileContainer is a container for holding files, files can then be retrieved either by a number or a name
|
|
5
|
+
#retrieving by number is necessary when multiple files can have the same name (which is possible on CBM disks especially)
|
|
6
|
+
class FileContainer<Array
|
|
7
|
+
def [](index)
|
|
8
|
+
return super(index) if index.kind_of?(Integer)
|
|
9
|
+
each do |f|
|
|
10
|
+
if f.respond_to?(:full_filename)
|
|
11
|
+
return f if f.full_filename.upcase==index.upcase
|
|
12
|
+
else
|
|
13
|
+
puts "not a file - #{f.class}"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
nil
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# == Author
|
|
23
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
24
|
+
#
|
|
25
|
+
# == Copyright
|
|
26
|
+
# Copyright (c) 2008 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.
|
data/lib/FileSystem.rb
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
require 'open-uri'
|
|
4
|
+
require 'SubclassTracking'
|
|
5
|
+
require 'RipXploreLog'
|
|
6
|
+
require 'FileContainer'
|
|
7
|
+
#
|
|
8
|
+
#
|
|
9
|
+
class FileSystem
|
|
10
|
+
FileSystem.extend SubclassTracking
|
|
11
|
+
|
|
12
|
+
def FileSystem.all_file_systems
|
|
13
|
+
FileSystem.subclasses
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def FileSystem.matching_score
|
|
17
|
+
0
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def FileSystem.non_matching_score
|
|
21
|
+
-1
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#each subclass needs to overide this function to calculate how good a match the specified combination of FileSystem and ImageFormat is for the bytestream in question
|
|
25
|
+
def FileSystem.compatability_score(filesystem_image)
|
|
26
|
+
FileSystem.matching_score
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
#each subclass needs to overide this function to extract files from a file_system_image
|
|
30
|
+
def FileSystem.files(file_system_image)
|
|
31
|
+
[]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@@code_for_tests={}
|
|
36
|
+
def self.code_for_tests
|
|
37
|
+
@@code_for_tests[self] || []
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.is_valid_file_system_if(code_for_test)
|
|
41
|
+
#puts "adding test for #{self}: #{code_for_test.source}"
|
|
42
|
+
@@code_for_tests[self] ||=[]
|
|
43
|
+
@@code_for_tests[self]<<code_for_test.source
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.compatability_score(file_system_image)
|
|
47
|
+
final_score=1
|
|
48
|
+
code_for_tests.each do |code_for_test|
|
|
49
|
+
result = eval code_for_test,binding
|
|
50
|
+
# puts "test for #{file_system_image.filename}#{self} : #{code_for_test} : #{result}"
|
|
51
|
+
final_score+=1
|
|
52
|
+
return 0 unless (result)
|
|
53
|
+
end
|
|
54
|
+
return final_score
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# == Author
|
|
61
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
62
|
+
#
|
|
63
|
+
# == Copyright
|
|
64
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
|
65
|
+
#
|
|
66
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
67
|
+
#a copy of this software and associated documentation files (the
|
|
68
|
+
#"Software"), to deal in the Software without restriction, including
|
|
69
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
70
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
71
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
72
|
+
#the following conditions:
|
|
73
|
+
|
|
74
|
+
# The above copyright notice and this permission notice shall be
|
|
75
|
+
# included in all copies or substantial portions of the Software.
|
|
76
|
+
|
|
77
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
78
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
79
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
80
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
81
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
82
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
83
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
require 'open-uri'
|
|
4
|
+
require 'RipXploreLog'
|
|
5
|
+
|
|
6
|
+
class FileSystemImage
|
|
7
|
+
|
|
8
|
+
attr_reader :file_system, :image_format,:filename
|
|
9
|
+
attr_accessor :volume_name
|
|
10
|
+
|
|
11
|
+
def FileSystemImage.is_file_system_image_filename?(filename)
|
|
12
|
+
extension=File.extname(File.basename(filename,".gz")).downcase
|
|
13
|
+
ImageFormat.all_possible_extensions.include?(extension)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#given a bytestream (and, optionally, filename the bytes are from), return the class that is the best match for this class
|
|
17
|
+
def FileSystemImage.best_fit(file_bytes,filename=nil)
|
|
18
|
+
candidates=[]
|
|
19
|
+
file_ext=File.extname(filename.sub(/\.gz$/,"")).downcase
|
|
20
|
+
RipXploreLog.debug("looking for best fit for image format for #{filename} : extension #{file_ext}")
|
|
21
|
+
ImageFormat.all_image_formats.each do |image_format|
|
|
22
|
+
if !file_ext.nil? && !image_format.possible_extensions.include?(file_ext) then
|
|
23
|
+
RipXploreLog.debug("skipping #{image_format} - unmatched extension #{file_ext}")
|
|
24
|
+
else
|
|
25
|
+
image_format.possible_file_systems.each do |file_system|
|
|
26
|
+
RipXploreLog.debug("checking image format #{image_format} and file system #{file_system}")
|
|
27
|
+
candidate=FileSystemImage.new(file_bytes,file_system,image_format,filename)
|
|
28
|
+
RipXploreLog.debug("score - #{candidate.compatability_score}")
|
|
29
|
+
candidates<<candidate
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if candidates.length==0 then
|
|
36
|
+
RipXploreLog.debug( 'no valid combination of file system and image format found')
|
|
37
|
+
return nil
|
|
38
|
+
end
|
|
39
|
+
best_candidate=candidates.sort{|a,b| b.compatability_score<=>a.compatability_score}[0]
|
|
40
|
+
RipXploreLog.debug("best candidate = #{best_candidate.file_system}/#{best_candidate.image_format} score: #{best_candidate.compatability_score}")
|
|
41
|
+
best_candidate
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
@compatability_score=nil
|
|
45
|
+
def compatability_score
|
|
46
|
+
if @compatability_score.nil? then
|
|
47
|
+
image_format_compatability_score=image_format.compatability_score(self)
|
|
48
|
+
if image_format_compatability_score>0 then #if we don't have a valid image_format, don't bother checking the file_system!
|
|
49
|
+
file_system_compatability_score=file_system.compatability_score(self)
|
|
50
|
+
@compatability_score=file_system_compatability_score*image_format_compatability_score
|
|
51
|
+
else
|
|
52
|
+
@compatability_score=0
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
@compatability_score
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def file_bytes
|
|
59
|
+
return image_format.file_bytes
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def get_sector(track,sector)
|
|
63
|
+
image_format.get_sector(track,sector)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#how many tracks are in this particular image?
|
|
67
|
+
def track_count
|
|
68
|
+
image_format.track_count
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def initialize(file_bytes,file_system,image_format,filename=nil)
|
|
72
|
+
#@file_bytes=file_bytes
|
|
73
|
+
@file_system=file_system
|
|
74
|
+
@image_format=image_format.new(file_bytes)
|
|
75
|
+
@filename=filename
|
|
76
|
+
@files=file_system.files(self) if compatability_score>0
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def files
|
|
81
|
+
@files=file_system.files(self) if @files.nil?
|
|
82
|
+
@files
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
#return an array containing a list of numbers of valid tracks on this image
|
|
86
|
+
def track_list
|
|
87
|
+
image_format.track_list
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
#return a list of all valid sectors in the specified track on this image
|
|
92
|
+
def sectors_in_track(track_no)
|
|
93
|
+
image_format.sectors_in_track(track_no)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def start_track
|
|
97
|
+
image_format.host_system.start_track
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def end_track
|
|
101
|
+
image_format.end_track
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def to_hex_dump
|
|
105
|
+
s=""
|
|
106
|
+
track_list.each {|track| s<<dump_track(track)}
|
|
107
|
+
s
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
#return a formatted hex dump of a single 256 byte sector
|
|
111
|
+
def dump_sector(track,sector)
|
|
112
|
+
s=hline
|
|
113
|
+
s<<sprintf("TRACK: $%02X SECTOR $%02X\n",track,sector)
|
|
114
|
+
sector_data=get_sector(track,sector)
|
|
115
|
+
s<< file_system.host_system.hex_dump(sector_data)
|
|
116
|
+
s
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
#return a formatted hex dump of all sectors in a track
|
|
120
|
+
def dump_track(track)
|
|
121
|
+
s=""
|
|
122
|
+
sector_list_for_track(track).each do |sector|
|
|
123
|
+
s<<dump_sector(track,sector)
|
|
124
|
+
end
|
|
125
|
+
s
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def host_system
|
|
129
|
+
file_system.host_system
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
#produce a list of all files contained in this file system images
|
|
133
|
+
def catalog
|
|
134
|
+
s="\n%-32s %-16s %04s %s\n\n" % ["FILENAME","TYPE","LENGTH","LOAD ADDRESS"]
|
|
135
|
+
self.files.sort.each do |file|
|
|
136
|
+
raise "bogus file '#{file.filename}'" if file.contents.nil?
|
|
137
|
+
s<<"%-32s %-16s $%04x $%04x\n" % [file.filename,file.type_description,file.contents.length,file.load_address]
|
|
138
|
+
end
|
|
139
|
+
s
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
private
|
|
144
|
+
|
|
145
|
+
def hline
|
|
146
|
+
"-"*79+"\n"
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
FileSystemImage.extend SubclassTracking
|
|
152
|
+
|
|
153
|
+
# == Author
|
|
154
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
155
|
+
#
|
|
156
|
+
# == Copyright
|
|
157
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
158
|
+
#
|
|
159
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
160
|
+
#a copy of this software and associated documentation files (the
|
|
161
|
+
#"Software"), to deal in the Software without restriction, including
|
|
162
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
163
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
164
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
165
|
+
#the following conditions:
|
|
166
|
+
|
|
167
|
+
# The above copyright notice and this permission notice shall be
|
|
168
|
+
# included in all copies or substantial portions of the Software.
|
|
169
|
+
|
|
170
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
171
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
172
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
173
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
174
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
175
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
176
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|