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.
Files changed (454) hide show
  1. data/bin/ripxplore.rb +188 -0
  2. data/doc/classes/A2Dsk.html +226 -0
  3. data/doc/classes/A2Dsk.src/M000005.html +18 -0
  4. data/doc/classes/A2Dsk.src/M000006.html +18 -0
  5. data/doc/classes/A2Dsk.src/M000007.html +18 -0
  6. data/doc/classes/A2Dsk.src/M000008.html +18 -0
  7. data/doc/classes/A2Dsk.src/M000009.html +18 -0
  8. data/doc/classes/A2Dsk.src/M000010.html +22 -0
  9. data/doc/classes/A2DskDosOrder.html +139 -0
  10. data/doc/classes/A2DskDosOrder.src/M000242.html +18 -0
  11. data/doc/classes/A2DskPhysicalOrder.html +139 -0
  12. data/doc/classes/A2DskPhysicalOrder.src/M000019.html +18 -0
  13. data/doc/classes/Apple2.html +187 -0
  14. data/doc/classes/Apple2.src/M000128.html +18 -0
  15. data/doc/classes/Apple2.src/M000129.html +18 -0
  16. data/doc/classes/Apple2.src/M000130.html +18 -0
  17. data/doc/classes/Apple2.src/M000131.html +19 -0
  18. data/doc/classes/AppleBinary.html +193 -0
  19. data/doc/classes/AppleBinary.src/M000089.html +20 -0
  20. data/doc/classes/AppleBinary.src/M000090.html +18 -0
  21. data/doc/classes/AppleBinary.src/M000091.html +18 -0
  22. data/doc/classes/AppleBinary.src/M000092.html +18 -0
  23. data/doc/classes/AppleCPM.html +228 -0
  24. data/doc/classes/AppleCPM.src/M000243.html +18 -0
  25. data/doc/classes/AppleCPM.src/M000244.html +18 -0
  26. data/doc/classes/AppleCPM.src/M000245.html +21 -0
  27. data/doc/classes/AppleCPM.src/M000246.html +40 -0
  28. data/doc/classes/AppleDos.html +275 -0
  29. data/doc/classes/AppleDos.src/M000161.html +18 -0
  30. data/doc/classes/AppleDos.src/M000162.html +18 -0
  31. data/doc/classes/AppleDos.src/M000163.html +18 -0
  32. data/doc/classes/AppleDos.src/M000164.html +86 -0
  33. data/doc/classes/AppleHiResPic.html +279 -0
  34. data/doc/classes/AppleHiResPic.src/M000083.html +22 -0
  35. data/doc/classes/AppleHiResPic.src/M000084.html +18 -0
  36. data/doc/classes/AppleHiResPic.src/M000085.html +22 -0
  37. data/doc/classes/AppleHiResPic.src/M000086.html +57 -0
  38. data/doc/classes/AppleHiResPic.src/M000087.html +18 -0
  39. data/doc/classes/AppleHiResPic.src/M000088.html +18 -0
  40. data/doc/classes/AppleText.html +156 -0
  41. data/doc/classes/AppleText.src/M000142.html +21 -0
  42. data/doc/classes/AppleText.src/M000143.html +20 -0
  43. data/doc/classes/AppleWorksWP.html +160 -0
  44. data/doc/classes/AppleWorksWP.src/M000081.html +20 -0
  45. data/doc/classes/AppleWorksWP.src/M000082.html +45 -0
  46. data/doc/classes/Applesoft.html +169 -0
  47. data/doc/classes/Applesoft.src/M000175.html +21 -0
  48. data/doc/classes/Applesoft.src/M000176.html +75 -0
  49. data/doc/classes/Atari800.html +169 -0
  50. data/doc/classes/Atari800.src/M000177.html +23 -0
  51. data/doc/classes/Atari800.src/M000178.html +18 -0
  52. data/doc/classes/Atari800.src/M000179.html +19 -0
  53. data/doc/classes/AtariBasic.html +215 -0
  54. data/doc/classes/AtariBasic.src/M000204.html +20 -0
  55. data/doc/classes/AtariBasic.src/M000205.html +108 -0
  56. data/doc/classes/AtariBinary.html +193 -0
  57. data/doc/classes/AtariBinary.src/M000238.html +20 -0
  58. data/doc/classes/AtariBinary.src/M000239.html +18 -0
  59. data/doc/classes/AtariBinary.src/M000240.html +18 -0
  60. data/doc/classes/AtariBinary.src/M000241.html +18 -0
  61. data/doc/classes/AtariDos.html +186 -0
  62. data/doc/classes/AtariDos.src/M000047.html +18 -0
  63. data/doc/classes/AtariDos.src/M000048.html +43 -0
  64. data/doc/classes/AtariText.html +159 -0
  65. data/doc/classes/AtariText.src/M000002.html +20 -0
  66. data/doc/classes/AtariText.src/M000003.html +18 -0
  67. data/doc/classes/Atr.html +271 -0
  68. data/doc/classes/Atr.src/M000208.html +18 -0
  69. data/doc/classes/Atr.src/M000209.html +18 -0
  70. data/doc/classes/Atr.src/M000210.html +19 -0
  71. data/doc/classes/Atr.src/M000211.html +18 -0
  72. data/doc/classes/Atr.src/M000212.html +18 -0
  73. data/doc/classes/Atr.src/M000213.html +19 -0
  74. data/doc/classes/Atr.src/M000214.html +19 -0
  75. data/doc/classes/C64.html +206 -0
  76. data/doc/classes/C64.src/M000020.html +18 -0
  77. data/doc/classes/C64.src/M000021.html +31 -0
  78. data/doc/classes/C64.src/M000022.html +22 -0
  79. data/doc/classes/C64.src/M000023.html +19 -0
  80. data/doc/classes/C64.src/M000024.html +19 -0
  81. data/doc/classes/C64BasicPrg.html +201 -0
  82. data/doc/classes/C64BasicPrg.src/M000035.html +20 -0
  83. data/doc/classes/C64BasicPrg.src/M000036.html +59 -0
  84. data/doc/classes/C64Prg.html +190 -0
  85. data/doc/classes/C64Prg.src/M000169.html +20 -0
  86. data/doc/classes/C64Prg.src/M000170.html +18 -0
  87. data/doc/classes/C64Prg.src/M000171.html +18 -0
  88. data/doc/classes/C64Prg.src/M000172.html +20 -0
  89. data/doc/classes/C64PrgText.html +139 -0
  90. data/doc/classes/C64PrgText.src/M000237.html +18 -0
  91. data/doc/classes/C64Seq.html +156 -0
  92. data/doc/classes/C64Seq.src/M000013.html +20 -0
  93. data/doc/classes/C64Seq.src/M000014.html +18 -0
  94. data/doc/classes/CPMFile.html +156 -0
  95. data/doc/classes/CPMFile.src/M000108.html +20 -0
  96. data/doc/classes/CPMFile.src/M000109.html +18 -0
  97. data/doc/classes/CbmDos.html +172 -0
  98. data/doc/classes/CbmDos.src/M000182.html +18 -0
  99. data/doc/classes/CbmDos.src/M000183.html +42 -0
  100. data/doc/classes/CbmFile.html +156 -0
  101. data/doc/classes/CbmFile.src/M000235.html +20 -0
  102. data/doc/classes/CbmFile.src/M000236.html +18 -0
  103. data/doc/classes/D64.html +247 -0
  104. data/doc/classes/D64.src/M000037.html +18 -0
  105. data/doc/classes/D64.src/M000038.html +18 -0
  106. data/doc/classes/D64.src/M000039.html +18 -0
  107. data/doc/classes/D64.src/M000040.html +22 -0
  108. data/doc/classes/D64.src/M000041.html +18 -0
  109. data/doc/classes/D64.src/M000042.html +21 -0
  110. data/doc/classes/D65.html +170 -0
  111. data/doc/classes/D65.src/M000049.html +22 -0
  112. data/doc/classes/D65.src/M000050.html +68 -0
  113. data/doc/classes/DumpUtilities.html +152 -0
  114. data/doc/classes/DumpUtilities.src/M000077.html +33 -0
  115. data/doc/classes/DumpUtilities.src/M000078.html +27 -0
  116. data/doc/classes/FileCache.html +210 -0
  117. data/doc/classes/FileCache.src/M000135.html +18 -0
  118. data/doc/classes/FileCache.src/M000136.html +20 -0
  119. data/doc/classes/FileCache.src/M000137.html +22 -0
  120. data/doc/classes/FileCache.src/M000138.html +32 -0
  121. data/doc/classes/FileCacheItem.html +152 -0
  122. data/doc/classes/FileCacheItem.src/M000165.html +18 -0
  123. data/doc/classes/FileCacheItem.src/M000166.html +18 -0
  124. data/doc/classes/FileContainer.html +146 -0
  125. data/doc/classes/FileContainer.src/M000232.html +26 -0
  126. data/doc/classes/FileSystem.html +252 -0
  127. data/doc/classes/FileSystem.src/M000069.html +18 -0
  128. data/doc/classes/FileSystem.src/M000070.html +18 -0
  129. data/doc/classes/FileSystem.src/M000071.html +18 -0
  130. data/doc/classes/FileSystem.src/M000072.html +18 -0
  131. data/doc/classes/FileSystem.src/M000073.html +18 -0
  132. data/doc/classes/FileSystem.src/M000074.html +18 -0
  133. data/doc/classes/FileSystem.src/M000075.html +20 -0
  134. data/doc/classes/FileSystem.src/M000076.html +25 -0
  135. data/doc/classes/FileSystemImage.html +430 -0
  136. data/doc/classes/FileSystemImage.src/M000215.html +19 -0
  137. data/doc/classes/FileSystemImage.src/M000216.html +41 -0
  138. data/doc/classes/FileSystemImage.src/M000217.html +27 -0
  139. data/doc/classes/FileSystemImage.src/M000218.html +18 -0
  140. data/doc/classes/FileSystemImage.src/M000219.html +18 -0
  141. data/doc/classes/FileSystemImage.src/M000220.html +18 -0
  142. data/doc/classes/FileSystemImage.src/M000221.html +22 -0
  143. data/doc/classes/FileSystemImage.src/M000222.html +19 -0
  144. data/doc/classes/FileSystemImage.src/M000223.html +18 -0
  145. data/doc/classes/FileSystemImage.src/M000224.html +18 -0
  146. data/doc/classes/FileSystemImage.src/M000225.html +18 -0
  147. data/doc/classes/FileSystemImage.src/M000226.html +18 -0
  148. data/doc/classes/FileSystemImage.src/M000227.html +20 -0
  149. data/doc/classes/FileSystemImage.src/M000228.html +22 -0
  150. data/doc/classes/FileSystemImage.src/M000229.html +22 -0
  151. data/doc/classes/FileSystemImage.src/M000230.html +18 -0
  152. data/doc/classes/FileSystemImage.src/M000231.html +23 -0
  153. data/doc/classes/G64.html +257 -0
  154. data/doc/classes/G64.src/M000093.html +30 -0
  155. data/doc/classes/G64.src/M000094.html +18 -0
  156. data/doc/classes/G64.src/M000095.html +18 -0
  157. data/doc/classes/G64.src/M000096.html +17 -0
  158. data/doc/classes/G64.src/M000097.html +18 -0
  159. data/doc/classes/G64.src/M000098.html +18 -0
  160. data/doc/classes/G64.src/M000099.html +21 -0
  161. data/doc/classes/GenericFile.html +157 -0
  162. data/doc/classes/GenericFile.src/M000167.html +20 -0
  163. data/doc/classes/GenericFile.src/M000168.html +18 -0
  164. data/doc/classes/HostSystem.html +225 -0
  165. data/doc/classes/HostSystem.src/M000025.html +22 -0
  166. data/doc/classes/HostSystem.src/M000026.html +18 -0
  167. data/doc/classes/HostSystem.src/M000027.html +18 -0
  168. data/doc/classes/HostSystem.src/M000028.html +22 -0
  169. data/doc/classes/HostSystem.src/M000029.html +33 -0
  170. data/doc/classes/HostSystem.src/M000030.html +18 -0
  171. data/doc/classes/ImageFormat.html +415 -0
  172. data/doc/classes/ImageFormat.src/M000144.html +18 -0
  173. data/doc/classes/ImageFormat.src/M000145.html +18 -0
  174. data/doc/classes/ImageFormat.src/M000146.html +18 -0
  175. data/doc/classes/ImageFormat.src/M000147.html +18 -0
  176. data/doc/classes/ImageFormat.src/M000148.html +18 -0
  177. data/doc/classes/ImageFormat.src/M000149.html +22 -0
  178. data/doc/classes/ImageFormat.src/M000150.html +19 -0
  179. data/doc/classes/ImageFormat.src/M000151.html +18 -0
  180. data/doc/classes/ImageFormat.src/M000152.html +18 -0
  181. data/doc/classes/ImageFormat.src/M000153.html +18 -0
  182. data/doc/classes/ImageFormat.src/M000154.html +18 -0
  183. data/doc/classes/ImageFormat.src/M000155.html +18 -0
  184. data/doc/classes/ImageFormat.src/M000156.html +18 -0
  185. data/doc/classes/ImageFormat.src/M000157.html +18 -0
  186. data/doc/classes/ImageFormat.src/M000158.html +20 -0
  187. data/doc/classes/ImageFormat.src/M000159.html +26 -0
  188. data/doc/classes/ImageFormat.src/M000160.html +18 -0
  189. data/doc/classes/ImageSniffing.html +152 -0
  190. data/doc/classes/ImageSniffing.src/M000051.html +57 -0
  191. data/doc/classes/ImageSniffing.src/M000052.html +131 -0
  192. data/doc/classes/IntegerBASIC.html +247 -0
  193. data/doc/classes/IntegerBASIC.src/M000206.html +20 -0
  194. data/doc/classes/IntegerBASIC.src/M000207.html +86 -0
  195. data/doc/classes/MBasic.html +182 -0
  196. data/doc/classes/MBasic.src/M000011.html +20 -0
  197. data/doc/classes/MBasic.src/M000012.html +22 -0
  198. data/doc/classes/NADOLDos.html +187 -0
  199. data/doc/classes/NADOLDos.src/M000180.html +18 -0
  200. data/doc/classes/NADOLDos.src/M000181.html +52 -0
  201. data/doc/classes/NADOLFile.html +157 -0
  202. data/doc/classes/NADOLFile.src/M000045.html +20 -0
  203. data/doc/classes/NADOLFile.src/M000046.html +18 -0
  204. data/doc/classes/NADOLTokens.html +170 -0
  205. data/doc/classes/NADOLTokens.src/M000018.html +41 -0
  206. data/doc/classes/NativeFileType.html +444 -0
  207. data/doc/classes/NativeFileType.src/M000110.html +22 -0
  208. data/doc/classes/NativeFileType.src/M000111.html +18 -0
  209. data/doc/classes/NativeFileType.src/M000112.html +18 -0
  210. data/doc/classes/NativeFileType.src/M000113.html +18 -0
  211. data/doc/classes/NativeFileType.src/M000114.html +18 -0
  212. data/doc/classes/NativeFileType.src/M000115.html +18 -0
  213. data/doc/classes/NativeFileType.src/M000116.html +18 -0
  214. data/doc/classes/NativeFileType.src/M000117.html +23 -0
  215. data/doc/classes/NativeFileType.src/M000118.html +18 -0
  216. data/doc/classes/NativeFileType.src/M000119.html +18 -0
  217. data/doc/classes/NativeFileType.src/M000120.html +24 -0
  218. data/doc/classes/NativeFileType.src/M000121.html +35 -0
  219. data/doc/classes/NativeFileType.src/M000122.html +24 -0
  220. data/doc/classes/NativeFileType.src/M000123.html +18 -0
  221. data/doc/classes/NativeFileType.src/M000124.html +18 -0
  222. data/doc/classes/NativeFileType.src/M000125.html +18 -0
  223. data/doc/classes/NativeFileType.src/M000126.html +20 -0
  224. data/doc/classes/NativeFileType.src/M000127.html +27 -0
  225. data/doc/classes/PNG/Canvas.html +273 -0
  226. data/doc/classes/PNG/Canvas.src/M000196.html +20 -0
  227. data/doc/classes/PNG/Canvas.src/M000197.html +20 -0
  228. data/doc/classes/PNG/Canvas.src/M000198.html +20 -0
  229. data/doc/classes/PNG/Canvas.src/M000199.html +22 -0
  230. data/doc/classes/PNG/Canvas.src/M000200.html +18 -0
  231. data/doc/classes/PNG/Canvas.src/M000201.html +73 -0
  232. data/doc/classes/PNG/Color.html +338 -0
  233. data/doc/classes/PNG/Color.src/M000189.html +18 -0
  234. data/doc/classes/PNG/Color.src/M000190.html +16 -0
  235. data/doc/classes/PNG/Color.src/M000191.html +16 -0
  236. data/doc/classes/PNG/Color.src/M000192.html +16 -0
  237. data/doc/classes/PNG/Color.src/M000193.html +16 -0
  238. data/doc/classes/PNG/Color.src/M000194.html +21 -0
  239. data/doc/classes/PNG/Color.src/M000195.html +18 -0
  240. data/doc/classes/PNG.html +229 -0
  241. data/doc/classes/PNG.src/M000185.html +18 -0
  242. data/doc/classes/PNG.src/M000186.html +21 -0
  243. data/doc/classes/PNG.src/M000187.html +26 -0
  244. data/doc/classes/PNG.src/M000188.html +26 -0
  245. data/doc/classes/PascalDos.html +203 -0
  246. data/doc/classes/PascalDos.src/M000132.html +18 -0
  247. data/doc/classes/PascalDos.src/M000133.html +21 -0
  248. data/doc/classes/PascalDos.src/M000134.html +62 -0
  249. data/doc/classes/PascalFile.html +169 -0
  250. data/doc/classes/PascalFile.src/M000173.html +20 -0
  251. data/doc/classes/PascalFile.src/M000174.html +18 -0
  252. data/doc/classes/ProDos.html +164 -0
  253. data/doc/classes/ProDos.src/M000102.html +18 -0
  254. data/doc/classes/ProDos.src/M000103.html +22 -0
  255. data/doc/classes/ProDosFile.html +187 -0
  256. data/doc/classes/ProDosFile.src/M000015.html +20 -0
  257. data/doc/classes/ProDosFile.src/M000016.html +18 -0
  258. data/doc/classes/ProDosFile.src/M000017.html +19 -0
  259. data/doc/classes/Proc.html +315 -0
  260. data/doc/classes/Proc.src/M000053.html +21 -0
  261. data/doc/classes/Proc.src/M000054.html +19 -0
  262. data/doc/classes/Proc.src/M000055.html +22 -0
  263. data/doc/classes/Proc.src/M000056.html +22 -0
  264. data/doc/classes/Proc.src/M000057.html +22 -0
  265. data/doc/classes/Proc.src/M000058.html +19 -0
  266. data/doc/classes/Proc.src/M000059.html +16 -0
  267. data/doc/classes/Proc.src/M000060.html +20 -0
  268. data/doc/classes/Proc.src/M000061.html +18 -0
  269. data/doc/classes/Proc.src/M000062.html +16 -0
  270. data/doc/classes/Proc.src/M000063.html +16 -0
  271. data/doc/classes/ProcSource.html +146 -0
  272. data/doc/classes/ProcSource.src/M000248.html +38 -0
  273. data/doc/classes/ProcSource.src/M000249.html +109 -0
  274. data/doc/classes/RDoc.html +135 -0
  275. data/doc/classes/RDoc.src/M000247.html +40 -0
  276. data/doc/classes/RawDisk.html +157 -0
  277. data/doc/classes/RawDisk.src/M000100.html +18 -0
  278. data/doc/classes/RawDisk.src/M000101.html +18 -0
  279. data/doc/classes/RipXplore.html +124 -0
  280. data/doc/classes/RipXploreLog.html +167 -0
  281. data/doc/classes/RipXploreLog.src/M000139.html +18 -0
  282. data/doc/classes/RipXploreLog.src/M000140.html +20 -0
  283. data/doc/classes/RipXploreLog.src/M000141.html +18 -0
  284. data/doc/classes/ScAsm.html +145 -0
  285. data/doc/classes/ScAsm.src/M000004.html +45 -0
  286. data/doc/classes/SubclassTracking.html +138 -0
  287. data/doc/classes/SubclassTracking.src/M000250.html +23 -0
  288. data/doc/classes/TestFileCache.html +137 -0
  289. data/doc/classes/TestFileCache.src/M000184.html +21 -0
  290. data/doc/classes/Trs80.html +157 -0
  291. data/doc/classes/Trs80.src/M000043.html +18 -0
  292. data/doc/classes/Trs80.src/M000044.html +18 -0
  293. data/doc/classes/Trs80Cmd.html +217 -0
  294. data/doc/classes/Trs80Cmd.src/M000104.html +19 -0
  295. data/doc/classes/Trs80Cmd.src/M000105.html +24 -0
  296. data/doc/classes/Trs80Cmd.src/M000106.html +20 -0
  297. data/doc/classes/Trs80Cmd.src/M000107.html +35 -0
  298. data/doc/classes/Trs80Jcl.html +156 -0
  299. data/doc/classes/Trs80Jcl.src/M000233.html +20 -0
  300. data/doc/classes/Trs80Jcl.src/M000234.html +18 -0
  301. data/doc/classes/Trs80Jv1Dsk.html +211 -0
  302. data/doc/classes/Trs80Jv1Dsk.src/M000064.html +18 -0
  303. data/doc/classes/Trs80Jv1Dsk.src/M000065.html +18 -0
  304. data/doc/classes/Trs80Jv1Dsk.src/M000066.html +18 -0
  305. data/doc/classes/Trs80Jv1Dsk.src/M000067.html +18 -0
  306. data/doc/classes/Trs80Jv1Dsk.src/M000068.html +19 -0
  307. data/doc/classes/Trs80LevelIIBasic.html +169 -0
  308. data/doc/classes/Trs80LevelIIBasic.src/M000079.html +20 -0
  309. data/doc/classes/Trs80LevelIIBasic.src/M000080.html +43 -0
  310. data/doc/classes/Trs80PascalSource.html +156 -0
  311. data/doc/classes/Trs80PascalSource.src/M000202.html +20 -0
  312. data/doc/classes/Trs80PascalSource.src/M000203.html +30 -0
  313. data/doc/classes/TrsDos.html +255 -0
  314. data/doc/classes/TrsDos.src/M000031.html +18 -0
  315. data/doc/classes/TrsDos.src/M000032.html +18 -0
  316. data/doc/classes/TrsDos.src/M000033.html +18 -0
  317. data/doc/classes/TrsDos.src/M000034.html +62 -0
  318. data/doc/created.rid +1 -0
  319. data/doc/files/bin/ripxplore_rb.html +150 -0
  320. data/doc/files/lib/DumpUtilities_rb.html +101 -0
  321. data/doc/files/lib/FileCache_rb.html +110 -0
  322. data/doc/files/lib/FileContainer_rb.html +101 -0
  323. data/doc/files/lib/FileSystemImage_rb.html +109 -0
  324. data/doc/files/lib/FileSystem_rb.html +111 -0
  325. data/doc/files/lib/HostSystem_rb.html +110 -0
  326. data/doc/files/lib/ImageFormat_rb.html +111 -0
  327. data/doc/files/lib/NativeFileType_rb.html +111 -0
  328. data/doc/files/lib/PatchedPNG_rb.html +116 -0
  329. data/doc/files/lib/RipXploreLog_rb.html +108 -0
  330. data/doc/files/lib/RipXplore_rb.html +114 -0
  331. data/doc/files/lib/SubclassTracking_rb.html +108 -0
  332. data/doc/files/lib/disassemblers/D65_rb.html +101 -0
  333. data/doc/files/lib/file_systems/AppleCPM_rb.html +108 -0
  334. data/doc/files/lib/file_systems/AppleDos_rb.html +108 -0
  335. data/doc/files/lib/file_systems/AtariDos_rb.html +108 -0
  336. data/doc/files/lib/file_systems/CbmDos_rb.html +108 -0
  337. data/doc/files/lib/file_systems/NADOLDos_rb.html +108 -0
  338. data/doc/files/lib/file_systems/PascalDos_rb.html +108 -0
  339. data/doc/files/lib/file_systems/ProDos_rb.html +108 -0
  340. data/doc/files/lib/file_systems/RawDisk_rb.html +108 -0
  341. data/doc/files/lib/file_systems/TrsDos_rb.html +108 -0
  342. data/doc/files/lib/host_systems/Apple2_rb.html +109 -0
  343. data/doc/files/lib/host_systems/Atari800_rb.html +109 -0
  344. data/doc/files/lib/host_systems/C64_rb.html +109 -0
  345. data/doc/files/lib/host_systems/Trs80_rb.html +108 -0
  346. data/doc/files/lib/image_formats/A2Dsk_rb.html +108 -0
  347. data/doc/files/lib/image_formats/Atr_rb.html +108 -0
  348. data/doc/files/lib/image_formats/D64_rb.html +108 -0
  349. data/doc/files/lib/image_formats/G64_rb.html +108 -0
  350. data/doc/files/lib/image_formats/Trs80Jv1Dsk_rb.html +108 -0
  351. data/doc/files/lib/native_file_types/apple2/AppleBinary_rb.html +108 -0
  352. data/doc/files/lib/native_file_types/apple2/AppleHiResPic_rb.html +108 -0
  353. data/doc/files/lib/native_file_types/apple2/AppleText_rb.html +108 -0
  354. data/doc/files/lib/native_file_types/apple2/AppleWorksWP_rb.html +108 -0
  355. data/doc/files/lib/native_file_types/apple2/Applesoft_rb.html +108 -0
  356. data/doc/files/lib/native_file_types/apple2/IntegerBASIC_rb.html +108 -0
  357. data/doc/files/lib/native_file_types/apple2/NADOLFile_rb.html +108 -0
  358. data/doc/files/lib/native_file_types/apple2/PascalFile_rb.html +108 -0
  359. data/doc/files/lib/native_file_types/apple2/ProDosFile_rb.html +108 -0
  360. data/doc/files/lib/native_file_types/apple2/ScAsm_rb.html +101 -0
  361. data/doc/files/lib/native_file_types/atari800/AtariBasic_rb.html +108 -0
  362. data/doc/files/lib/native_file_types/atari800/AtariBinary_rb.html +108 -0
  363. data/doc/files/lib/native_file_types/atari800/AtariText_rb.html +108 -0
  364. data/doc/files/lib/native_file_types/c64/C64BasicPrg_rb.html +109 -0
  365. data/doc/files/lib/native_file_types/c64/C64PrgText_rb.html +109 -0
  366. data/doc/files/lib/native_file_types/c64/C64Prg_rb.html +109 -0
  367. data/doc/files/lib/native_file_types/c64/C64Seq_rb.html +109 -0
  368. data/doc/files/lib/native_file_types/c64/CbmFile_rb.html +108 -0
  369. data/doc/files/lib/native_file_types/cpm/CPMFile_rb.html +108 -0
  370. data/doc/files/lib/native_file_types/cpm/MBasic_rb.html +108 -0
  371. data/doc/files/lib/native_file_types/generic/GenericFile_rb.html +101 -0
  372. data/doc/files/lib/native_file_types/trs80/Trs80Cmd_rb.html +108 -0
  373. data/doc/files/lib/native_file_types/trs80/Trs80Jcl_rb.html +108 -0
  374. data/doc/files/lib/native_file_types/trs80/Trs80LevelIIBasic_rb.html +108 -0
  375. data/doc/files/lib/native_file_types/trs80/Trs80PascalSource_rb.html +108 -0
  376. data/doc/files/lib/proc_source_rb.html +182 -0
  377. data/doc/files/lib/proc_source_rb.src/M000001.html +24 -0
  378. data/doc/files/lib/rdoc_patch_rb.html +108 -0
  379. data/doc/files/test/tc_file_cache_rb.html +108 -0
  380. data/doc/files/test/tc_image_sniffing_rb.html +108 -0
  381. data/doc/files/test/testhelper_rb.html +129 -0
  382. data/doc/files/test/ts_test_all_rb.html +108 -0
  383. data/doc/fr_class_index.html +26 -0
  384. data/doc/fr_file_index.html +27 -0
  385. data/doc/fr_method_index.html +26 -0
  386. data/doc/index.html +24 -0
  387. data/doc/rdoc-style.css +208 -0
  388. data/lib/DumpUtilities.rb +34 -0
  389. data/lib/FileCache.rb +84 -0
  390. data/lib/FileContainer.rb +45 -0
  391. data/lib/FileSystem.rb +83 -0
  392. data/lib/FileSystemImage.rb +176 -0
  393. data/lib/HostSystem.rb +84 -0
  394. data/lib/ImageFormat.rb +127 -0
  395. data/lib/NativeFileType.rb +168 -0
  396. data/lib/PatchedPNG.rb +303 -0
  397. data/lib/RipXplore.rb +77 -0
  398. data/lib/RipXploreLog.rb +63 -0
  399. data/lib/SubclassTracking.rb +11 -0
  400. data/lib/disassemblers/D65.rb +181 -0
  401. data/lib/file_systems/AppleCPM.rb +123 -0
  402. data/lib/file_systems/AppleDos.rb +211 -0
  403. data/lib/file_systems/AtariDos.rb +80 -0
  404. data/lib/file_systems/CbmDos.rb +75 -0
  405. data/lib/file_systems/NADOLDos.rb +110 -0
  406. data/lib/file_systems/PascalDos.rb +131 -0
  407. data/lib/file_systems/ProDos.rb +155 -0
  408. data/lib/file_systems/RawDisk.rb +45 -0
  409. data/lib/file_systems/TrsDos.rb +148 -0
  410. data/lib/host_systems/Apple2.rb +57 -0
  411. data/lib/host_systems/Atari800.rb +57 -0
  412. data/lib/host_systems/C64.rb +82 -0
  413. data/lib/host_systems/Trs80.rb +48 -0
  414. data/lib/host_systems/a2_symbols.yaml +199 -0
  415. data/lib/host_systems/atari_800_symbols.yaml +496 -0
  416. data/lib/host_systems/c64_symbols.yaml +636 -0
  417. data/lib/image_formats/A2Dsk.rb +77 -0
  418. data/lib/image_formats/Atr.rb +83 -0
  419. data/lib/image_formats/D64.rb +87 -0
  420. data/lib/image_formats/G64.rb +174 -0
  421. data/lib/image_formats/Trs80Jv1Dsk.rb +65 -0
  422. data/lib/native_file_types/apple2/AppleBinary.rb +51 -0
  423. data/lib/native_file_types/apple2/AppleHiResPic.rb +166 -0
  424. data/lib/native_file_types/apple2/AppleText.rb +43 -0
  425. data/lib/native_file_types/apple2/AppleWorksWP.rb +68 -0
  426. data/lib/native_file_types/apple2/Applesoft.rb +115 -0
  427. data/lib/native_file_types/apple2/IntegerBASIC.rb +217 -0
  428. data/lib/native_file_types/apple2/NADOLFile.rb +205 -0
  429. data/lib/native_file_types/apple2/PascalFile.rb +48 -0
  430. data/lib/native_file_types/apple2/ProDosFile.rb +112 -0
  431. data/lib/native_file_types/apple2/ScAsm.rb +110 -0
  432. data/lib/native_file_types/atari800/AtariBasic.rb +396 -0
  433. data/lib/native_file_types/atari800/AtariBinary.rb +53 -0
  434. data/lib/native_file_types/atari800/AtariText.rb +49 -0
  435. data/lib/native_file_types/c64/C64BasicPrg.rb +333 -0
  436. data/lib/native_file_types/c64/C64Prg.rb +57 -0
  437. data/lib/native_file_types/c64/C64PrgText.rb +45 -0
  438. data/lib/native_file_types/c64/C64Seq.rb +47 -0
  439. data/lib/native_file_types/c64/CbmFile.rb +41 -0
  440. data/lib/native_file_types/cpm/CPMFile.rb +40 -0
  441. data/lib/native_file_types/cpm/MBasic.rb +311 -0
  442. data/lib/native_file_types/generic/GenericFile.rb +43 -0
  443. data/lib/native_file_types/trs80/Trs80Cmd.rb +130 -0
  444. data/lib/native_file_types/trs80/Trs80Jcl.rb +43 -0
  445. data/lib/native_file_types/trs80/Trs80LevelIIBasic.rb +201 -0
  446. data/lib/native_file_types/trs80/Trs80PascalSource.rb +58 -0
  447. data/lib/proc_source.rb +238 -0
  448. data/lib/rdoc_patch.rb +32 -0
  449. data/test/tc_file_cache.rb +11 -0
  450. data/test/tc_image_sniffing.rb +165 -0
  451. data/test/testhelper.rb +14 -0
  452. data/test/testlog.txt +30755 -0
  453. data/test/ts_test_all.rb +3 -0
  454. 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.