finishm 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 (554) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/Gemfile +31 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +59 -0
  8. data/Rakefile +51 -0
  9. data/VERSION +1 -0
  10. data/bin/assembly_visualiser +106 -0
  11. data/bin/check_primer_combinations.rb +73 -0
  12. data/bin/contig_joiner.rb +244 -0
  13. data/bin/contigs_against_assembly.rb +153 -0
  14. data/bin/finishm +143 -0
  15. data/bin/finishm_assembler +55 -0
  16. data/bin/finishm_gap_closer.rb +241 -0
  17. data/bin/kmer_abundance_file_tool.rb +49 -0
  18. data/bin/kmer_pattern_to_assembly.rb +377 -0
  19. data/bin/kmer_profile_finder.rb +92 -0
  20. data/bin/kmers_count_parse.d +52 -0
  21. data/bin/kmers_count_tabulate.d +123 -0
  22. data/bin/kmers_count_tabulate.rb +84 -0
  23. data/bin/pcr_result_parser.rb +108 -0
  24. data/bin/primer_finder.rb +119 -0
  25. data/bin/read_selection_by_kmer.d +174 -0
  26. data/bin/scaffold_by_pattern.rb +119 -0
  27. data/bin/scaffold_connection_possibilities_to_knowns.rb +193 -0
  28. data/bin/scaffold_end_coverages.rb +69 -0
  29. data/bin/trail_validator.rb +84 -0
  30. data/ext/mkrf_conf.rb +56 -0
  31. data/ext/src/Makefile +140 -0
  32. data/ext/src/src/allocArray.c +305 -0
  33. data/ext/src/src/allocArray.h +86 -0
  34. data/ext/src/src/autoOpen.c +107 -0
  35. data/ext/src/src/autoOpen.h +18 -0
  36. data/ext/src/src/binarySequences.c +813 -0
  37. data/ext/src/src/binarySequences.h +125 -0
  38. data/ext/src/src/concatenatedGraph.c +233 -0
  39. data/ext/src/src/concatenatedGraph.h +30 -0
  40. data/ext/src/src/concatenatedPreGraph.c +262 -0
  41. data/ext/src/src/concatenatedPreGraph.h +29 -0
  42. data/ext/src/src/correctedGraph.c +2643 -0
  43. data/ext/src/src/correctedGraph.h +32 -0
  44. data/ext/src/src/dfib.c +509 -0
  45. data/ext/src/src/dfib.h +69 -0
  46. data/ext/src/src/dfibHeap.c +89 -0
  47. data/ext/src/src/dfibHeap.h +39 -0
  48. data/ext/src/src/dfibpriv.h +105 -0
  49. data/ext/src/src/fib.c +628 -0
  50. data/ext/src/src/fib.h +78 -0
  51. data/ext/src/src/fibHeap.c +79 -0
  52. data/ext/src/src/fibHeap.h +41 -0
  53. data/ext/src/src/fibpriv.h +110 -0
  54. data/ext/src/src/globals.h +154 -0
  55. data/ext/src/src/graph.c +3932 -0
  56. data/ext/src/src/graph.h +233 -0
  57. data/ext/src/src/graphReConstruction.c +1472 -0
  58. data/ext/src/src/graphReConstruction.h +30 -0
  59. data/ext/src/src/graphStats.c +2167 -0
  60. data/ext/src/src/graphStats.h +72 -0
  61. data/ext/src/src/graphStructures.h +52 -0
  62. data/ext/src/src/kmer.c +652 -0
  63. data/ext/src/src/kmer.h +73 -0
  64. data/ext/src/src/kmerOccurenceTable.c +236 -0
  65. data/ext/src/src/kmerOccurenceTable.h +44 -0
  66. data/ext/src/src/kseq.h +223 -0
  67. data/ext/src/src/locallyCorrectedGraph.c +557 -0
  68. data/ext/src/src/locallyCorrectedGraph.h +40 -0
  69. data/ext/src/src/passageMarker.c +677 -0
  70. data/ext/src/src/passageMarker.h +137 -0
  71. data/ext/src/src/preGraph.c +1717 -0
  72. data/ext/src/src/preGraph.h +106 -0
  73. data/ext/src/src/preGraphConstruction.c +990 -0
  74. data/ext/src/src/preGraphConstruction.h +26 -0
  75. data/ext/src/src/probe_node_finder.c +84 -0
  76. data/ext/src/src/probe_node_finder.h +6 -0
  77. data/ext/src/src/readCoherentGraph.c +557 -0
  78. data/ext/src/src/readCoherentGraph.h +30 -0
  79. data/ext/src/src/readSet.c +1734 -0
  80. data/ext/src/src/readSet.h +67 -0
  81. data/ext/src/src/readToNode.c +218 -0
  82. data/ext/src/src/readToNode.h +35 -0
  83. data/ext/src/src/recycleBin.c +199 -0
  84. data/ext/src/src/recycleBin.h +58 -0
  85. data/ext/src/src/roadMap.c +342 -0
  86. data/ext/src/src/roadMap.h +65 -0
  87. data/ext/src/src/run.c +318 -0
  88. data/ext/src/src/run.h +52 -0
  89. data/ext/src/src/run2.c +744 -0
  90. data/ext/src/src/runReadToNode.c +29 -0
  91. data/ext/src/src/scaffold.c +1876 -0
  92. data/ext/src/src/scaffold.h +64 -0
  93. data/ext/src/src/shortReadPairs.c +1243 -0
  94. data/ext/src/src/shortReadPairs.h +32 -0
  95. data/ext/src/src/splay.c +259 -0
  96. data/ext/src/src/splay.h +43 -0
  97. data/ext/src/src/splayTable.c +1315 -0
  98. data/ext/src/src/splayTable.h +31 -0
  99. data/ext/src/src/tightString.c +362 -0
  100. data/ext/src/src/tightString.h +82 -0
  101. data/ext/src/src/utility.c +199 -0
  102. data/ext/src/src/utility.h +98 -0
  103. data/ext/src/third-party/zlib-1.2.3/ChangeLog +855 -0
  104. data/ext/src/third-party/zlib-1.2.3/FAQ +339 -0
  105. data/ext/src/third-party/zlib-1.2.3/INDEX +51 -0
  106. data/ext/src/third-party/zlib-1.2.3/Makefile +154 -0
  107. data/ext/src/third-party/zlib-1.2.3/Makefile.in +154 -0
  108. data/ext/src/third-party/zlib-1.2.3/README +125 -0
  109. data/ext/src/third-party/zlib-1.2.3/adler32.c +149 -0
  110. data/ext/src/third-party/zlib-1.2.3/adler32.o +0 -0
  111. data/ext/src/third-party/zlib-1.2.3/algorithm.txt +209 -0
  112. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.pup +66 -0
  113. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.sas +65 -0
  114. data/ext/src/third-party/zlib-1.2.3/as400/bndsrc +132 -0
  115. data/ext/src/third-party/zlib-1.2.3/as400/compile.clp +123 -0
  116. data/ext/src/third-party/zlib-1.2.3/as400/readme.txt +111 -0
  117. data/ext/src/third-party/zlib-1.2.3/as400/zlib.inc +331 -0
  118. data/ext/src/third-party/zlib-1.2.3/compress.c +79 -0
  119. data/ext/src/third-party/zlib-1.2.3/compress.o +0 -0
  120. data/ext/src/third-party/zlib-1.2.3/configure +459 -0
  121. data/ext/src/third-party/zlib-1.2.3/contrib/README.contrib +71 -0
  122. data/ext/src/third-party/zlib-1.2.3/contrib/ada/buffer_demo.adb +106 -0
  123. data/ext/src/third-party/zlib-1.2.3/contrib/ada/mtest.adb +156 -0
  124. data/ext/src/third-party/zlib-1.2.3/contrib/ada/read.adb +156 -0
  125. data/ext/src/third-party/zlib-1.2.3/contrib/ada/readme.txt +65 -0
  126. data/ext/src/third-party/zlib-1.2.3/contrib/ada/test.adb +463 -0
  127. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.adb +225 -0
  128. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.ads +114 -0
  129. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.adb +141 -0
  130. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.ads +450 -0
  131. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.adb +701 -0
  132. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.ads +328 -0
  133. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.gpr +20 -0
  134. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/README.586 +43 -0
  135. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/match.S +364 -0
  136. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/README.686 +34 -0
  137. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/match.S +329 -0
  138. data/ext/src/third-party/zlib-1.2.3/contrib/blast/Makefile +8 -0
  139. data/ext/src/third-party/zlib-1.2.3/contrib/blast/README +4 -0
  140. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.c +444 -0
  141. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.h +71 -0
  142. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.pk +0 -0
  143. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.txt +1 -0
  144. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLib.pas +557 -0
  145. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLibConst.pas +11 -0
  146. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/readme.txt +76 -0
  147. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/zlibd32.mak +93 -0
  148. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.build +33 -0
  149. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.chm +0 -0
  150. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.sln +21 -0
  151. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  152. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  153. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  154. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  155. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  156. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  157. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  158. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  159. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  160. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  161. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  162. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/readme.txt +58 -0
  163. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/README +1 -0
  164. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.c +608 -0
  165. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.h +37 -0
  166. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inffix9.h +107 -0
  167. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inflate9.h +47 -0
  168. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.c +323 -0
  169. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.h +55 -0
  170. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffas86.c +1157 -0
  171. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffast.S +1368 -0
  172. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/test.cpp +24 -0
  173. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.cpp +329 -0
  174. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.h +128 -0
  175. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream.h +307 -0
  176. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream_test.cpp +25 -0
  177. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/README +35 -0
  178. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/TODO +17 -0
  179. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/test.cc +50 -0
  180. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.cc +479 -0
  181. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.h +466 -0
  182. data/ext/src/third-party/zlib-1.2.3/contrib/masm686/match.asm +413 -0
  183. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/bld_ml64.bat +2 -0
  184. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.asm +513 -0
  185. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.obj +0 -0
  186. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffas8664.c +186 -0
  187. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.asm +392 -0
  188. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.obj +0 -0
  189. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/readme.txt +28 -0
  190. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/bld_ml32.bat +2 -0
  191. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.asm +972 -0
  192. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.obj +0 -0
  193. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32c.c +62 -0
  194. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.asm +1083 -0
  195. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.obj +0 -0
  196. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/mkasm.bat +3 -0
  197. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/readme.txt +21 -0
  198. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ChangeLogUnzip +67 -0
  199. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/Makefile +25 -0
  200. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/crypt.h +132 -0
  201. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.c +177 -0
  202. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.h +75 -0
  203. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.c +270 -0
  204. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.h +21 -0
  205. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/miniunz.c +585 -0
  206. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/minizip.c +420 -0
  207. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.c +281 -0
  208. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.h +31 -0
  209. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.c +1598 -0
  210. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.h +354 -0
  211. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.c +1219 -0
  212. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.h +235 -0
  213. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/example.pas +599 -0
  214. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/readme.txt +76 -0
  215. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibd32.mak +93 -0
  216. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibpas.pas +236 -0
  217. data/ext/src/third-party/zlib-1.2.3/contrib/puff/Makefile +8 -0
  218. data/ext/src/third-party/zlib-1.2.3/contrib/puff/README +63 -0
  219. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.c +837 -0
  220. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.h +31 -0
  221. data/ext/src/third-party/zlib-1.2.3/contrib/puff/zeros.raw +0 -0
  222. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.c +275 -0
  223. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.txt +10 -0
  224. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile +14 -0
  225. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile.msc +17 -0
  226. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/untgz.c +674 -0
  227. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/readme.txt +73 -0
  228. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/miniunz.vcproj +126 -0
  229. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/minizip.vcproj +126 -0
  230. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/testzlib.vcproj +126 -0
  231. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlib.rc +32 -0
  232. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibstat.vcproj +246 -0
  233. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.def +92 -0
  234. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.sln +78 -0
  235. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.vcproj +445 -0
  236. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/miniunz.vcproj +566 -0
  237. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/minizip.vcproj +563 -0
  238. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlib.vcproj +948 -0
  239. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlibdll.vcproj +567 -0
  240. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlib.rc +32 -0
  241. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibstat.vcproj +870 -0
  242. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.def +92 -0
  243. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.sln +144 -0
  244. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.vcproj +1219 -0
  245. data/ext/src/third-party/zlib-1.2.3/crc32.c +423 -0
  246. data/ext/src/third-party/zlib-1.2.3/crc32.h +441 -0
  247. data/ext/src/third-party/zlib-1.2.3/crc32.o +0 -0
  248. data/ext/src/third-party/zlib-1.2.3/deflate.c +1736 -0
  249. data/ext/src/third-party/zlib-1.2.3/deflate.h +331 -0
  250. data/ext/src/third-party/zlib-1.2.3/deflate.o +0 -0
  251. data/ext/src/third-party/zlib-1.2.3/example +0 -0
  252. data/ext/src/third-party/zlib-1.2.3/example.c +565 -0
  253. data/ext/src/third-party/zlib-1.2.3/examples/README.examples +42 -0
  254. data/ext/src/third-party/zlib-1.2.3/examples/fitblk.c +233 -0
  255. data/ext/src/third-party/zlib-1.2.3/examples/gun.c +693 -0
  256. data/ext/src/third-party/zlib-1.2.3/examples/gzappend.c +500 -0
  257. data/ext/src/third-party/zlib-1.2.3/examples/gzjoin.c +448 -0
  258. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.c +413 -0
  259. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.h +58 -0
  260. data/ext/src/third-party/zlib-1.2.3/examples/zlib_how.html +523 -0
  261. data/ext/src/third-party/zlib-1.2.3/examples/zpipe.c +191 -0
  262. data/ext/src/third-party/zlib-1.2.3/examples/zran.c +404 -0
  263. data/ext/src/third-party/zlib-1.2.3/gzio.c +1026 -0
  264. data/ext/src/third-party/zlib-1.2.3/gzio.o +0 -0
  265. data/ext/src/third-party/zlib-1.2.3/infback.c +623 -0
  266. data/ext/src/third-party/zlib-1.2.3/infback.o +0 -0
  267. data/ext/src/third-party/zlib-1.2.3/inffast.c +318 -0
  268. data/ext/src/third-party/zlib-1.2.3/inffast.h +11 -0
  269. data/ext/src/third-party/zlib-1.2.3/inffast.o +0 -0
  270. data/ext/src/third-party/zlib-1.2.3/inffixed.h +94 -0
  271. data/ext/src/third-party/zlib-1.2.3/inflate.c +1368 -0
  272. data/ext/src/third-party/zlib-1.2.3/inflate.h +115 -0
  273. data/ext/src/third-party/zlib-1.2.3/inflate.o +0 -0
  274. data/ext/src/third-party/zlib-1.2.3/inftrees.c +329 -0
  275. data/ext/src/third-party/zlib-1.2.3/inftrees.h +55 -0
  276. data/ext/src/third-party/zlib-1.2.3/inftrees.o +0 -0
  277. data/ext/src/third-party/zlib-1.2.3/libz.a +0 -0
  278. data/ext/src/third-party/zlib-1.2.3/make_vms.com +461 -0
  279. data/ext/src/third-party/zlib-1.2.3/minigzip +0 -0
  280. data/ext/src/third-party/zlib-1.2.3/minigzip.c +322 -0
  281. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.bor +109 -0
  282. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.dj2 +104 -0
  283. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.emx +69 -0
  284. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.msc +106 -0
  285. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.tc +94 -0
  286. data/ext/src/third-party/zlib-1.2.3/old/Makefile.riscos +151 -0
  287. data/ext/src/third-party/zlib-1.2.3/old/README +3 -0
  288. data/ext/src/third-party/zlib-1.2.3/old/descrip.mms +48 -0
  289. data/ext/src/third-party/zlib-1.2.3/old/os2/Makefile.os2 +136 -0
  290. data/ext/src/third-party/zlib-1.2.3/old/os2/zlib.def +51 -0
  291. data/ext/src/third-party/zlib-1.2.3/old/visual-basic.txt +160 -0
  292. data/ext/src/third-party/zlib-1.2.3/old/zlib.html +971 -0
  293. data/ext/src/third-party/zlib-1.2.3/projects/README.projects +41 -0
  294. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/README.txt +73 -0
  295. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/example.dsp +278 -0
  296. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/minigzip.dsp +278 -0
  297. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsp +609 -0
  298. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsw +59 -0
  299. data/ext/src/third-party/zlib-1.2.3/qnx/package.qpg +141 -0
  300. data/ext/src/third-party/zlib-1.2.3/trees.c +1219 -0
  301. data/ext/src/third-party/zlib-1.2.3/trees.h +128 -0
  302. data/ext/src/third-party/zlib-1.2.3/trees.o +0 -0
  303. data/ext/src/third-party/zlib-1.2.3/uncompr.c +61 -0
  304. data/ext/src/third-party/zlib-1.2.3/uncompr.o +0 -0
  305. data/ext/src/third-party/zlib-1.2.3/win32/DLL_FAQ.txt +397 -0
  306. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.bor +107 -0
  307. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.emx +69 -0
  308. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.gcc +141 -0
  309. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.msc +126 -0
  310. data/ext/src/third-party/zlib-1.2.3/win32/VisualC.txt +3 -0
  311. data/ext/src/third-party/zlib-1.2.3/win32/zlib.def +60 -0
  312. data/ext/src/third-party/zlib-1.2.3/win32/zlib1.rc +39 -0
  313. data/ext/src/third-party/zlib-1.2.3/zconf.h +332 -0
  314. data/ext/src/third-party/zlib-1.2.3/zconf.in.h +332 -0
  315. data/ext/src/third-party/zlib-1.2.3/zlib.3 +159 -0
  316. data/ext/src/third-party/zlib-1.2.3/zlib.h +1357 -0
  317. data/ext/src/third-party/zlib-1.2.3/zutil.c +318 -0
  318. data/ext/src/third-party/zlib-1.2.3/zutil.h +269 -0
  319. data/ext/src/third-party/zlib-1.2.3/zutil.o +0 -0
  320. data/lib/assembly/a_b_visualiser.rb +169 -0
  321. data/lib/assembly/acyclic_connection_finder.rb +81 -0
  322. data/lib/assembly/all_orfs.rb +615 -0
  323. data/lib/assembly/bad_format_writer.rb +46 -0
  324. data/lib/assembly/bam_probe_read_selector.rb +48 -0
  325. data/lib/assembly/bubbly_assembler.rb +842 -0
  326. data/lib/assembly/c_probe_node_finder.rb +38 -0
  327. data/lib/assembly/connection_interpreter.rb +350 -0
  328. data/lib/assembly/contig_printer.rb +400 -0
  329. data/lib/assembly/coverage_based_graph_filter.rb +68 -0
  330. data/lib/assembly/depth_first_search.rb +63 -0
  331. data/lib/assembly/dijkstra.rb +216 -0
  332. data/lib/assembly/fluffer.rb +253 -0
  333. data/lib/assembly/graph_explorer.rb +85 -0
  334. data/lib/assembly/graph_generator.rb +315 -0
  335. data/lib/assembly/height_finder.rb +355 -0
  336. data/lib/assembly/hybrid_velvet_graph.rb +70 -0
  337. data/lib/assembly/input_genome.rb +182 -0
  338. data/lib/assembly/kmer_coverage_based_path_filter.rb +65 -0
  339. data/lib/assembly/node_finder.rb +171 -0
  340. data/lib/assembly/oriented_node_trail.rb +507 -0
  341. data/lib/assembly/paired_end_assembler.rb +53 -0
  342. data/lib/assembly/paired_end_neighbour_finder.rb +176 -0
  343. data/lib/assembly/probed_graph.rb +105 -0
  344. data/lib/assembly/read_input.rb +79 -0
  345. data/lib/assembly/read_to_node.rb +37 -0
  346. data/lib/assembly/scaffold_breaker.rb +126 -0
  347. data/lib/assembly/sequence_hasher.rb +71 -0
  348. data/lib/assembly/single_coherent_paths_between_nodes.rb +533 -0
  349. data/lib/assembly/single_coherent_wanderer.rb +261 -0
  350. data/lib/assembly/single_ended_assembler.rb +441 -0
  351. data/lib/assembly/velvet_c_binding.rb +54 -0
  352. data/lib/assembly/velvet_graph_sequence_extractor.rb +123 -0
  353. data/lib/external/VERSION +1 -0
  354. data/lib/finishm/assemble.rb +224 -0
  355. data/lib/finishm/explore.rb +217 -0
  356. data/lib/finishm/finisher.rb +303 -0
  357. data/lib/finishm/fluff.rb +122 -0
  358. data/lib/finishm/gapfiller.rb +325 -0
  359. data/lib/finishm/orfs_finder.rb +88 -0
  360. data/lib/finishm/path_counter.rb +90 -0
  361. data/lib/finishm/primers.rb +425 -0
  362. data/lib/finishm/primers_check.rb +176 -0
  363. data/lib/finishm/roundup.rb +344 -0
  364. data/lib/finishm/sequence.rb +142 -0
  365. data/lib/finishm/visualise.rb +430 -0
  366. data/lib/finishm/wander.rb +270 -0
  367. data/lib/kmer_abundance_pattern.rb +79 -0
  368. data/lib/kmer_multi_abundance_file.rb +48 -0
  369. data/lib/oligo_designer.rb +88 -0
  370. data/lib/priner.rb +66 -0
  371. data/spec/acyclic_connection_finder_spec.rb +551 -0
  372. data/spec/all_orfs_spec.rb +443 -0
  373. data/spec/assemble_spec.rb +186 -0
  374. data/spec/bubbly_assembler_spec.rb +707 -0
  375. data/spec/c_node_finder_spec.rb +58 -0
  376. data/spec/connection_interpreter_spec.rb +284 -0
  377. data/spec/contig_printer_spec.rb +291 -0
  378. data/spec/coverage_based_graph_filter_spec.rb +102 -0
  379. data/spec/data/6_3e4e5e6e.1vANME.bam +0 -0
  380. data/spec/data/6_3e4e5e6e.1vANME.bam.bai +0 -0
  381. data/spec/data/acyclic_connection_finder/1/probes.fa +5 -0
  382. data/spec/data/acyclic_connection_finder/1/random1.fa +2 -0
  383. data/spec/data/acyclic_connection_finder/1/random1.sammy.fa.gz +0 -0
  384. data/spec/data/acyclic_connection_finder/1/random2.fa +2 -0
  385. data/spec/data/acyclic_connection_finder/1/random2.sammy.fa.gz +0 -0
  386. data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.fa +39 -0
  387. data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.slightly_changed.fa +39 -0
  388. data/spec/data/assembly/1_simple_bubble_uneven_coverage/reads_combined.fa.gz +0 -0
  389. data/spec/data/assembly_visualiser/Contig_6_1_to_250.fa.kmers31 +220 -0
  390. data/spec/data/assembly_visualiser/Contig_7_1_to_250.fa.kmers31 +220 -0
  391. data/spec/data/assembly_visualiser/Graph +46 -0
  392. data/spec/data/assembly_visualiser/start_kmers1 +2 -0
  393. data/spec/data/bands.csv +1 -0
  394. data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq +0 -0
  395. data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq.names +544 -0
  396. data/spec/data/c_probe_node_finder/1/Graph2 +668 -0
  397. data/spec/data/c_probe_node_finder/1/LastGraph +668 -0
  398. data/spec/data/c_probe_node_finder/1/Log +756 -0
  399. data/spec/data/c_probe_node_finder/1/PreGraph +11 -0
  400. data/spec/data/c_probe_node_finder/1/Roadmaps +2009 -0
  401. data/spec/data/c_probe_node_finder/1/contigs.fa +29 -0
  402. data/spec/data/c_probe_node_finder/1/stats.txt +6 -0
  403. data/spec/data/contig_printer/1/HOWTO_RECREATE +17 -0
  404. data/spec/data/contig_printer/1/contigs.fa +4 -0
  405. data/spec/data/contig_printer/1/seq.fa +2408 -0
  406. data/spec/data/contig_printer/1/seq.fa.svg +153 -0
  407. data/spec/data/contig_printer/1/seq.fa.velvet/Graph2 +2953 -0
  408. data/spec/data/contig_printer/1/seq.fa.velvet/LastGraph +2953 -0
  409. data/spec/data/contig_printer/1/seq.fa.velvet/Log +21 -0
  410. data/spec/data/contig_printer/1/seq.fa.velvet/PreGraph +27 -0
  411. data/spec/data/contig_printer/1/seq.fa.velvet/Roadmaps +5182 -0
  412. data/spec/data/contig_printer/1/seq.fa.velvet/Sequences +3612 -0
  413. data/spec/data/contig_printer/1/seq.fa.velvet/contigs.fa +36 -0
  414. data/spec/data/contig_printer/1/seq.fa.velvet/stats.txt +14 -0
  415. data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam +0 -0
  416. data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam.bai +0 -0
  417. data/spec/data/contig_printer/1/seq.node12.fa +4 -0
  418. data/spec/data/contig_printer/1/seq1_1to550.fa +2 -0
  419. data/spec/data/contig_printer/1/seq2_1to550.fa +2 -0
  420. data/spec/data/contig_printer/1/seq2_1to550.fa.fai +1 -0
  421. data/spec/data/explore/1/2seqs.sammy.fa +12004 -0
  422. data/spec/data/explore/1/HOWTO_RECREATE.txt +6 -0
  423. data/spec/data/explore/1/a.fa +2 -0
  424. data/spec/data/explore/1/seq1_and_a.fa +3 -0
  425. data/spec/data/explore/1/seq2.fa +2 -0
  426. data/spec/data/fluff/1/2seqs.sammy.fa +12004 -0
  427. data/spec/data/fluff/1/HOWTO_RECREATE.txt +5 -0
  428. data/spec/data/fluff/1/seq1.fa +2 -0
  429. data/spec/data/fluff/1/seq2.fa +2 -0
  430. data/spec/data/gapfilling/1/reads.fa +171 -0
  431. data/spec/data/gapfilling/1/trail_with_Ns.fa +5 -0
  432. data/spec/data/gapfilling/1/velvetAssembly/Graph2 +130 -0
  433. data/spec/data/gapfilling/1/velvetAssembly/LastGraph +130 -0
  434. data/spec/data/gapfilling/1/velvetAssembly/Log +199 -0
  435. data/spec/data/gapfilling/1/velvetAssembly/PreGraph +7 -0
  436. data/spec/data/gapfilling/1/velvetAssembly/Roadmaps +239 -0
  437. data/spec/data/gapfilling/1/velvetAssembly/Sequences +281 -0
  438. data/spec/data/gapfilling/1/velvetAssembly/contigs.fa +12 -0
  439. data/spec/data/gapfilling/1/velvetAssembly/stats.txt +4 -0
  440. data/spec/data/gapfilling/2/HOWTO_recreate +17 -0
  441. data/spec/data/gapfilling/2/reference.fa +2 -0
  442. data/spec/data/gapfilling/2/reference_part1.fa +4 -0
  443. data/spec/data/gapfilling/2/reference_part2.fa +4 -0
  444. data/spec/data/gapfilling/2/sammy_reads.fa.gz +0 -0
  445. data/spec/data/gapfilling/2/with_gaps.fa +4 -0
  446. data/spec/data/gapfilling/3/HOWTO_recreate +4 -0
  447. data/spec/data/gapfilling/3/reads.fa.gz +0 -0
  448. data/spec/data/gapfilling/3/reference_part1.fa +4 -0
  449. data/spec/data/gapfilling/3/reference_part2.fa +4 -0
  450. data/spec/data/gapfilling/3/with_gaps.fa +4 -0
  451. data/spec/data/gapfilling/4/HOWTO_recreate +1 -0
  452. data/spec/data/gapfilling/4/reads.fa.gz +0 -0
  453. data/spec/data/gapfilling/5/HOWTO_RECREATE +7 -0
  454. data/spec/data/gapfilling/5/answer.fna +2 -0
  455. data/spec/data/gapfilling/5/gappy.fna +2 -0
  456. data/spec/data/gapfilling/5/reads.fa +17961 -0
  457. data/spec/data/gapfilling/5/velvet51_3.5/LastGraph +8337 -0
  458. data/spec/data/gapfilling/5/velvet51_3.5/Sequences +20921 -0
  459. data/spec/data/gapfilling/6/random1.fa +28 -0
  460. data/spec/data/gapfilling/6/random2.fa +28 -0
  461. data/spec/data/gapfilling/6/random_sequence_length_2000 +0 -0
  462. data/spec/data/gapfilling/6/reads.random1.fa.gz +0 -0
  463. data/spec/data/gapfilling/6/reads.random2.fa.gz +0 -0
  464. data/spec/data/gapfilling/6/to_gapfill.fa +22 -0
  465. data/spec/data/kmer_profile_to_assembly/multiple_abundance_file1.csv +2 -0
  466. data/spec/data/kmers_count1.csv +2 -0
  467. data/spec/data/kmers_count2.csv +3 -0
  468. data/spec/data/out +3 -0
  469. data/spec/data/positive_latching_pair.fa +2 -0
  470. data/spec/data/primers.csv +4 -0
  471. data/spec/data/read_selection_by_kmer/blacklist1.txt +1 -0
  472. data/spec/data/read_selection_by_kmer/input.fasta +6 -0
  473. data/spec/data/read_selection_by_kmer/whitelist1.txt +1 -0
  474. data/spec/data/read_selection_by_kmer/whitelist2.txt +2 -0
  475. data/spec/data/read_to_node/1_a_graph/HOWTO_RECREATE.txt +2 -0
  476. data/spec/data/read_to_node/1_a_graph/LastGraph +6695 -0
  477. data/spec/data/read_to_node/1_a_graph/ReadToNode.bin +0 -0
  478. data/spec/data/read_to_node/2_no_read256_or_259/HOWTO_RECREATE.txt +3 -0
  479. data/spec/data/read_to_node/2_no_read256_or_259/LastGraph +6693 -0
  480. data/spec/data/read_to_node/2_no_read256_or_259/ReadToNode.bin +0 -0
  481. data/spec/data/read_to_node/3_no_last_read/LastGraph +6694 -0
  482. data/spec/data/read_to_node/3_no_last_read/ReadToNode.bin +0 -0
  483. data/spec/data/t/details.txt +5 -0
  484. data/spec/data/t/details.txt.srt +5 -0
  485. data/spec/data/t/location.txt +3 -0
  486. data/spec/data/t/location.txt.srt +3 -0
  487. data/spec/data/tweak/1_gap_then_unscaffolded/answer.fa +2 -0
  488. data/spec/data/tweak/1_gap_then_unscaffolded/reads.fa.gz +0 -0
  489. data/spec/data/tweak/1_gap_then_unscaffolded/scaffolds.fa +6 -0
  490. data/spec/data/tweak/2_second_genome/answer2.fa +2 -0
  491. data/spec/data/tweak/2_second_genome/reads.fa.gz +0 -0
  492. data/spec/data/tweak/3_variant/answer.fa +2 -0
  493. data/spec/data/tweak/3_variant/lesser_answer.fa +2 -0
  494. data/spec/data/tweak/3_variant/reads.fa.gz +0 -0
  495. data/spec/data/tweak/3_variant/with_gaps.fa +2 -0
  496. data/spec/data/velvet_test_trails/Assem/Graph +17 -0
  497. data/spec/data/velvet_test_trails/Assem/Graph2 +40 -0
  498. data/spec/data/velvet_test_trails/Assem/LastGraph +40 -0
  499. data/spec/data/velvet_test_trails/Assem/Log +35 -0
  500. data/spec/data/velvet_test_trails/Assem/PreGraph +9 -0
  501. data/spec/data/velvet_test_trails/Assem/Roadmaps +89 -0
  502. data/spec/data/velvet_test_trails/Assem/Sequences +50 -0
  503. data/spec/data/velvet_test_trails/Assem/a.svg +53 -0
  504. data/spec/data/velvet_test_trails/Assem/contigs.fa +15 -0
  505. data/spec/data/velvet_test_trails/Assem/stats.txt +5 -0
  506. data/spec/data/velvet_test_trails/node_fwds.fa +8 -0
  507. data/spec/data/velvet_test_trails/node_seqs.fa +9 -0
  508. data/spec/data/velvet_test_trails/nodes_fwd_rev.fa +16 -0
  509. data/spec/data/velvet_test_trails/read1.fa +2 -0
  510. data/spec/data/velvet_test_trails/reads.fa +50 -0
  511. data/spec/data/velvet_test_trails_reverse/Assem/LastGraph +17 -0
  512. data/spec/data/velvet_test_trails_reverse/Assem/a.svg +53 -0
  513. data/spec/data/velvet_test_trails_reverse/reads_reversed.fa +10 -0
  514. data/spec/data/visualise/1/LastGraph +6695 -0
  515. data/spec/data/visualise/2_paired_end/HOWTO_RECREATE.txt +10 -0
  516. data/spec/data/visualise/2_paired_end/rand1.fa +2 -0
  517. data/spec/data/visualise/2_paired_end/rand2.fa +2 -0
  518. data/spec/data/visualise/2_paired_end/with_gaps.fa +8 -0
  519. data/spec/data/visualise/2_paired_end/with_gaps.read_pairs.fa.gz +0 -0
  520. data/spec/data/wander/1/random1.fa +2 -0
  521. data/spec/data/wander/1/random1.sammy.fa +804 -0
  522. data/spec/depth_first_search_spec.rb +190 -0
  523. data/spec/dijkstra_spec.rb +143 -0
  524. data/spec/explore_spec.rb +29 -0
  525. data/spec/fluffer_spec.rb +155 -0
  526. data/spec/gapfiller_spec.rb +107 -0
  527. data/spec/graph_explorer_spec.rb +475 -0
  528. data/spec/graph_generator_spec.rb +99 -0
  529. data/spec/height_finder_spec.rb +306 -0
  530. data/spec/kmer_abundance_pattern_spec.rb +56 -0
  531. data/spec/kmer_coverage_based_path_filter_spec.rb +73 -0
  532. data/spec/kmer_profile_finder_spec.rb +38 -0
  533. data/spec/kmers_count_tabulate_spec.rb +120 -0
  534. data/spec/oriented_node_trail_spec.rb +221 -0
  535. data/spec/paired_end_neighbours_spec.rb +126 -0
  536. data/spec/paths_between_nodes_spec.rb +349 -0
  537. data/spec/priner_spec.rb +7 -0
  538. data/spec/read_input_spec.rb +23 -0
  539. data/spec/read_selection_by_kmer_spec.rb +166 -0
  540. data/spec/read_to_node_spec.rb +35 -0
  541. data/spec/roundup_spec.rb +366 -0
  542. data/spec/scaffold_breaker_spec.rb +144 -0
  543. data/spec/sequence_spec.rb +43 -0
  544. data/spec/single_coherent_paths_between_nodes_spec.rb +492 -0
  545. data/spec/single_coherent_wanderer_spec.rb +120 -0
  546. data/spec/single_ended_assembler_spec.rb +398 -0
  547. data/spec/spec_helper.rb +310 -0
  548. data/spec/velvet_graph_sequence_extractor_spec.rb +80 -0
  549. data/spec/visualise_spec.rb +105 -0
  550. data/spec/wander_spec.rb +119 -0
  551. data/spec/watch_for_changes.sh +16 -0
  552. data/validation/fasta_compare.rb +72 -0
  553. data/validation/gapfill_simulate_perfect.rb +108 -0
  554. metadata +899 -0
@@ -0,0 +1,274 @@
1
+ //
2
+ // � Copyright Henrik Ravn 2004
3
+ //
4
+ // Use, modification and distribution are subject to the Boost Software License, Version 1.0.
5
+ // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+
8
+ using System;
9
+ using System.Collections;
10
+ using System.IO;
11
+
12
+ // uncomment the define below to include unit tests
13
+ //#define nunit
14
+ #if nunit
15
+ using NUnit.Framework;
16
+
17
+ // Unit tests for the DotZLib class library
18
+ // ----------------------------------------
19
+ //
20
+ // Use this with NUnit 2 from http://www.nunit.org
21
+ //
22
+
23
+ namespace DotZLibTests
24
+ {
25
+ using DotZLib;
26
+
27
+ // helper methods
28
+ internal class Utils
29
+ {
30
+ public static bool byteArrEqual( byte[] lhs, byte[] rhs )
31
+ {
32
+ if (lhs.Length != rhs.Length)
33
+ return false;
34
+ for (int i = lhs.Length-1; i >= 0; --i)
35
+ if (lhs[i] != rhs[i])
36
+ return false;
37
+ return true;
38
+ }
39
+
40
+ }
41
+
42
+
43
+ [TestFixture]
44
+ public class CircBufferTests
45
+ {
46
+ #region Circular buffer tests
47
+ [Test]
48
+ public void SinglePutGet()
49
+ {
50
+ CircularBuffer buf = new CircularBuffer(10);
51
+ Assert.AreEqual( 0, buf.Size );
52
+ Assert.AreEqual( -1, buf.Get() );
53
+
54
+ Assert.IsTrue(buf.Put( 1 ));
55
+ Assert.AreEqual( 1, buf.Size );
56
+ Assert.AreEqual( 1, buf.Get() );
57
+ Assert.AreEqual( 0, buf.Size );
58
+ Assert.AreEqual( -1, buf.Get() );
59
+ }
60
+
61
+ [Test]
62
+ public void BlockPutGet()
63
+ {
64
+ CircularBuffer buf = new CircularBuffer(10);
65
+ byte[] arr = {1,2,3,4,5,6,7,8,9,10};
66
+ Assert.AreEqual( 10, buf.Put(arr,0,10) );
67
+ Assert.AreEqual( 10, buf.Size );
68
+ Assert.IsFalse( buf.Put(11) );
69
+ Assert.AreEqual( 1, buf.Get() );
70
+ Assert.IsTrue( buf.Put(11) );
71
+
72
+ byte[] arr2 = (byte[])arr.Clone();
73
+ Assert.AreEqual( 9, buf.Get(arr2,1,9) );
74
+ Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );
75
+ }
76
+
77
+ #endregion
78
+ }
79
+
80
+ [TestFixture]
81
+ public class ChecksumTests
82
+ {
83
+ #region CRC32 Tests
84
+ [Test]
85
+ public void CRC32_Null()
86
+ {
87
+ CRC32Checksum crc32 = new CRC32Checksum();
88
+ Assert.AreEqual( 0, crc32.Value );
89
+
90
+ crc32 = new CRC32Checksum(1);
91
+ Assert.AreEqual( 1, crc32.Value );
92
+
93
+ crc32 = new CRC32Checksum(556);
94
+ Assert.AreEqual( 556, crc32.Value );
95
+ }
96
+
97
+ [Test]
98
+ public void CRC32_Data()
99
+ {
100
+ CRC32Checksum crc32 = new CRC32Checksum();
101
+ byte[] data = { 1,2,3,4,5,6,7 };
102
+ crc32.Update(data);
103
+ Assert.AreEqual( 0x70e46888, crc32.Value );
104
+
105
+ crc32 = new CRC32Checksum();
106
+ crc32.Update("penguin");
107
+ Assert.AreEqual( 0x0e5c1a120, crc32.Value );
108
+
109
+ crc32 = new CRC32Checksum(1);
110
+ crc32.Update("penguin");
111
+ Assert.AreEqual(0x43b6aa94, crc32.Value);
112
+
113
+ }
114
+ #endregion
115
+
116
+ #region Adler tests
117
+
118
+ [Test]
119
+ public void Adler_Null()
120
+ {
121
+ AdlerChecksum adler = new AdlerChecksum();
122
+ Assert.AreEqual(0, adler.Value);
123
+
124
+ adler = new AdlerChecksum(1);
125
+ Assert.AreEqual( 1, adler.Value );
126
+
127
+ adler = new AdlerChecksum(556);
128
+ Assert.AreEqual( 556, adler.Value );
129
+ }
130
+
131
+ [Test]
132
+ public void Adler_Data()
133
+ {
134
+ AdlerChecksum adler = new AdlerChecksum(1);
135
+ byte[] data = { 1,2,3,4,5,6,7 };
136
+ adler.Update(data);
137
+ Assert.AreEqual( 0x5b001d, adler.Value );
138
+
139
+ adler = new AdlerChecksum();
140
+ adler.Update("penguin");
141
+ Assert.AreEqual(0x0bcf02f6, adler.Value );
142
+
143
+ adler = new AdlerChecksum(1);
144
+ adler.Update("penguin");
145
+ Assert.AreEqual(0x0bd602f7, adler.Value);
146
+
147
+ }
148
+ #endregion
149
+ }
150
+
151
+ [TestFixture]
152
+ public class InfoTests
153
+ {
154
+ #region Info tests
155
+ [Test]
156
+ public void Info_Version()
157
+ {
158
+ Info info = new Info();
159
+ Assert.AreEqual("1.2.3", Info.Version);
160
+ Assert.AreEqual(32, info.SizeOfUInt);
161
+ Assert.AreEqual(32, info.SizeOfULong);
162
+ Assert.AreEqual(32, info.SizeOfPointer);
163
+ Assert.AreEqual(32, info.SizeOfOffset);
164
+ }
165
+ #endregion
166
+ }
167
+
168
+ [TestFixture]
169
+ public class DeflateInflateTests
170
+ {
171
+ #region Deflate tests
172
+ [Test]
173
+ public void Deflate_Init()
174
+ {
175
+ using (Deflater def = new Deflater(CompressLevel.Default))
176
+ {
177
+ }
178
+ }
179
+
180
+ private ArrayList compressedData = new ArrayList();
181
+ private uint adler1;
182
+
183
+ private ArrayList uncompressedData = new ArrayList();
184
+ private uint adler2;
185
+
186
+ public void CDataAvail(byte[] data, int startIndex, int count)
187
+ {
188
+ for (int i = 0; i < count; ++i)
189
+ compressedData.Add(data[i+startIndex]);
190
+ }
191
+
192
+ [Test]
193
+ public void Deflate_Compress()
194
+ {
195
+ compressedData.Clear();
196
+
197
+ byte[] testData = new byte[35000];
198
+ for (int i = 0; i < testData.Length; ++i)
199
+ testData[i] = 5;
200
+
201
+ using (Deflater def = new Deflater((CompressLevel)5))
202
+ {
203
+ def.DataAvailable += new DataAvailableHandler(CDataAvail);
204
+ def.Add(testData);
205
+ def.Finish();
206
+ adler1 = def.Checksum;
207
+ }
208
+ }
209
+ #endregion
210
+
211
+ #region Inflate tests
212
+ [Test]
213
+ public void Inflate_Init()
214
+ {
215
+ using (Inflater inf = new Inflater())
216
+ {
217
+ }
218
+ }
219
+
220
+ private void DDataAvail(byte[] data, int startIndex, int count)
221
+ {
222
+ for (int i = 0; i < count; ++i)
223
+ uncompressedData.Add(data[i+startIndex]);
224
+ }
225
+
226
+ [Test]
227
+ public void Inflate_Expand()
228
+ {
229
+ uncompressedData.Clear();
230
+
231
+ using (Inflater inf = new Inflater())
232
+ {
233
+ inf.DataAvailable += new DataAvailableHandler(DDataAvail);
234
+ inf.Add((byte[])compressedData.ToArray(typeof(byte)));
235
+ inf.Finish();
236
+ adler2 = inf.Checksum;
237
+ }
238
+ Assert.AreEqual( adler1, adler2 );
239
+ }
240
+ #endregion
241
+ }
242
+
243
+ [TestFixture]
244
+ public class GZipStreamTests
245
+ {
246
+ #region GZipStream test
247
+ [Test]
248
+ public void GZipStream_WriteRead()
249
+ {
250
+ using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best))
251
+ {
252
+ BinaryWriter writer = new BinaryWriter(gzOut);
253
+ writer.Write("hi there");
254
+ writer.Write(Math.PI);
255
+ writer.Write(42);
256
+ }
257
+
258
+ using (GZipStream gzIn = new GZipStream("gzstream.gz"))
259
+ {
260
+ BinaryReader reader = new BinaryReader(gzIn);
261
+ string s = reader.ReadString();
262
+ Assert.AreEqual("hi there",s);
263
+ double d = reader.ReadDouble();
264
+ Assert.AreEqual(Math.PI, d);
265
+ int i = reader.ReadInt32();
266
+ Assert.AreEqual(42,i);
267
+ }
268
+
269
+ }
270
+ #endregion
271
+ }
272
+ }
273
+
274
+ #endif
@@ -0,0 +1,23 @@
1
+ Boost Software License - Version 1.0 - August 17th, 2003
2
+
3
+ Permission is hereby granted, free of charge, to any person or organization
4
+ obtaining a copy of the software and accompanying documentation covered by
5
+ this license (the "Software") to use, reproduce, display, distribute,
6
+ execute, and transmit the Software, and to prepare derivative works of the
7
+ Software, and to permit third-parties to whom the Software is furnished to
8
+ do so, all subject to the following:
9
+
10
+ The copyright notices in the Software and this entire statement, including
11
+ the above license grant, this restriction and the following disclaimer,
12
+ must be included in all copies of the Software, in whole or in part, and
13
+ all derivative works of the Software, unless such copies or derivative
14
+ works are solely in the form of machine-executable object code generated by
15
+ a source language processor.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
20
+ SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
21
+ FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
22
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
+ DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,58 @@
1
+ This directory contains a .Net wrapper class library for the ZLib1.dll
2
+
3
+ The wrapper includes support for inflating/deflating memory buffers,
4
+ .Net streaming wrappers for the gz streams part of zlib, and wrappers
5
+ for the checksum parts of zlib. See DotZLib/UnitTests.cs for examples.
6
+
7
+ Directory structure:
8
+ --------------------
9
+
10
+ LICENSE_1_0.txt - License file.
11
+ readme.txt - This file.
12
+ DotZLib.chm - Class library documentation
13
+ DotZLib.build - NAnt build file
14
+ DotZLib.sln - Microsoft Visual Studio 2003 solution file
15
+
16
+ DotZLib\*.cs - Source files for the class library
17
+
18
+ Unit tests:
19
+ -----------
20
+ The file DotZLib/UnitTests.cs contains unit tests for use with NUnit 2.1 or higher.
21
+ To include unit tests in the build, define nunit before building.
22
+
23
+
24
+ Build instructions:
25
+ -------------------
26
+
27
+ 1. Using Visual Studio.Net 2003:
28
+ Open DotZLib.sln in VS.Net and build from there. Output file (DotZLib.dll)
29
+ will be found ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on
30
+ you are building the release or debug version of the library. Check
31
+ DotZLib/UnitTests.cs for instructions on how to include unit tests in the
32
+ build.
33
+
34
+ 2. Using NAnt:
35
+ Open a command prompt with access to the build environment and run nant
36
+ in the same directory as the DotZLib.build file.
37
+ You can define 2 properties on the nant command-line to control the build:
38
+ debug={true|false} to toggle between release/debug builds (default=true).
39
+ nunit={true|false} to include or esclude unit tests (default=true).
40
+ Also the target clean will remove binaries.
41
+ Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release
42
+ or ./DotZLib/bin/debug, depending on whether you are building the release
43
+ or debug version of the library.
44
+
45
+ Examples:
46
+ nant -D:debug=false -D:nunit=false
47
+ will build a release mode version of the library without unit tests.
48
+ nant
49
+ will build a debug version of the library with unit tests
50
+ nant clean
51
+ will remove all previously built files.
52
+
53
+
54
+ ---------------------------------
55
+ Copyright (c) Henrik Ravn 2004
56
+
57
+ Use, modification and distribution are subject to the Boost Software License, Version 1.0.
58
+ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -0,0 +1 @@
1
+ See infback9.h for what this is and how to use it.
@@ -0,0 +1,608 @@
1
+ /* infback9.c -- inflate deflate64 data using a call-back interface
2
+ * Copyright (C) 1995-2003 Mark Adler
3
+ * For conditions of distribution and use, see copyright notice in zlib.h
4
+ */
5
+
6
+ #include "zutil.h"
7
+ #include "infback9.h"
8
+ #include "inftree9.h"
9
+ #include "inflate9.h"
10
+
11
+ #define WSIZE 65536UL
12
+
13
+ /*
14
+ strm provides memory allocation functions in zalloc and zfree, or
15
+ Z_NULL to use the library memory allocation functions.
16
+
17
+ window is a user-supplied window and output buffer that is 64K bytes.
18
+ */
19
+ int ZEXPORT inflateBack9Init_(strm, window, version, stream_size)
20
+ z_stream FAR *strm;
21
+ unsigned char FAR *window;
22
+ const char *version;
23
+ int stream_size;
24
+ {
25
+ struct inflate_state FAR *state;
26
+
27
+ if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
28
+ stream_size != (int)(sizeof(z_stream)))
29
+ return Z_VERSION_ERROR;
30
+ if (strm == Z_NULL || window == Z_NULL)
31
+ return Z_STREAM_ERROR;
32
+ strm->msg = Z_NULL; /* in case we return an error */
33
+ if (strm->zalloc == (alloc_func)0) {
34
+ strm->zalloc = zcalloc;
35
+ strm->opaque = (voidpf)0;
36
+ }
37
+ if (strm->zfree == (free_func)0) strm->zfree = zcfree;
38
+ state = (struct inflate_state FAR *)ZALLOC(strm, 1,
39
+ sizeof(struct inflate_state));
40
+ if (state == Z_NULL) return Z_MEM_ERROR;
41
+ Tracev((stderr, "inflate: allocated\n"));
42
+ strm->state = (voidpf)state;
43
+ state->window = window;
44
+ return Z_OK;
45
+ }
46
+
47
+ /*
48
+ Build and output length and distance decoding tables for fixed code
49
+ decoding.
50
+ */
51
+ #ifdef MAKEFIXED
52
+ #include <stdio.h>
53
+
54
+ void makefixed9(void)
55
+ {
56
+ unsigned sym, bits, low, size;
57
+ code *next, *lenfix, *distfix;
58
+ struct inflate_state state;
59
+ code fixed[544];
60
+
61
+ /* literal/length table */
62
+ sym = 0;
63
+ while (sym < 144) state.lens[sym++] = 8;
64
+ while (sym < 256) state.lens[sym++] = 9;
65
+ while (sym < 280) state.lens[sym++] = 7;
66
+ while (sym < 288) state.lens[sym++] = 8;
67
+ next = fixed;
68
+ lenfix = next;
69
+ bits = 9;
70
+ inflate_table9(LENS, state.lens, 288, &(next), &(bits), state.work);
71
+
72
+ /* distance table */
73
+ sym = 0;
74
+ while (sym < 32) state.lens[sym++] = 5;
75
+ distfix = next;
76
+ bits = 5;
77
+ inflate_table9(DISTS, state.lens, 32, &(next), &(bits), state.work);
78
+
79
+ /* write tables */
80
+ puts(" /* inffix9.h -- table for decoding deflate64 fixed codes");
81
+ puts(" * Generated automatically by makefixed9().");
82
+ puts(" */");
83
+ puts("");
84
+ puts(" /* WARNING: this file should *not* be used by applications.");
85
+ puts(" It is part of the implementation of this library and is");
86
+ puts(" subject to change. Applications should only use zlib.h.");
87
+ puts(" */");
88
+ puts("");
89
+ size = 1U << 9;
90
+ printf(" static const code lenfix[%u] = {", size);
91
+ low = 0;
92
+ for (;;) {
93
+ if ((low % 6) == 0) printf("\n ");
94
+ printf("{%u,%u,%d}", lenfix[low].op, lenfix[low].bits,
95
+ lenfix[low].val);
96
+ if (++low == size) break;
97
+ putchar(',');
98
+ }
99
+ puts("\n };");
100
+ size = 1U << 5;
101
+ printf("\n static const code distfix[%u] = {", size);
102
+ low = 0;
103
+ for (;;) {
104
+ if ((low % 5) == 0) printf("\n ");
105
+ printf("{%u,%u,%d}", distfix[low].op, distfix[low].bits,
106
+ distfix[low].val);
107
+ if (++low == size) break;
108
+ putchar(',');
109
+ }
110
+ puts("\n };");
111
+ }
112
+ #endif /* MAKEFIXED */
113
+
114
+ /* Macros for inflateBack(): */
115
+
116
+ /* Clear the input bit accumulator */
117
+ #define INITBITS() \
118
+ do { \
119
+ hold = 0; \
120
+ bits = 0; \
121
+ } while (0)
122
+
123
+ /* Assure that some input is available. If input is requested, but denied,
124
+ then return a Z_BUF_ERROR from inflateBack(). */
125
+ #define PULL() \
126
+ do { \
127
+ if (have == 0) { \
128
+ have = in(in_desc, &next); \
129
+ if (have == 0) { \
130
+ next = Z_NULL; \
131
+ ret = Z_BUF_ERROR; \
132
+ goto inf_leave; \
133
+ } \
134
+ } \
135
+ } while (0)
136
+
137
+ /* Get a byte of input into the bit accumulator, or return from inflateBack()
138
+ with an error if there is no input available. */
139
+ #define PULLBYTE() \
140
+ do { \
141
+ PULL(); \
142
+ have--; \
143
+ hold += (unsigned long)(*next++) << bits; \
144
+ bits += 8; \
145
+ } while (0)
146
+
147
+ /* Assure that there are at least n bits in the bit accumulator. If there is
148
+ not enough available input to do that, then return from inflateBack() with
149
+ an error. */
150
+ #define NEEDBITS(n) \
151
+ do { \
152
+ while (bits < (unsigned)(n)) \
153
+ PULLBYTE(); \
154
+ } while (0)
155
+
156
+ /* Return the low n bits of the bit accumulator (n <= 16) */
157
+ #define BITS(n) \
158
+ ((unsigned)hold & ((1U << (n)) - 1))
159
+
160
+ /* Remove n bits from the bit accumulator */
161
+ #define DROPBITS(n) \
162
+ do { \
163
+ hold >>= (n); \
164
+ bits -= (unsigned)(n); \
165
+ } while (0)
166
+
167
+ /* Remove zero to seven bits as needed to go to a byte boundary */
168
+ #define BYTEBITS() \
169
+ do { \
170
+ hold >>= bits & 7; \
171
+ bits -= bits & 7; \
172
+ } while (0)
173
+
174
+ /* Assure that some output space is available, by writing out the window
175
+ if it's full. If the write fails, return from inflateBack() with a
176
+ Z_BUF_ERROR. */
177
+ #define ROOM() \
178
+ do { \
179
+ if (left == 0) { \
180
+ put = window; \
181
+ left = WSIZE; \
182
+ wrap = 1; \
183
+ if (out(out_desc, put, (unsigned)left)) { \
184
+ ret = Z_BUF_ERROR; \
185
+ goto inf_leave; \
186
+ } \
187
+ } \
188
+ } while (0)
189
+
190
+ /*
191
+ strm provides the memory allocation functions and window buffer on input,
192
+ and provides information on the unused input on return. For Z_DATA_ERROR
193
+ returns, strm will also provide an error message.
194
+
195
+ in() and out() are the call-back input and output functions. When
196
+ inflateBack() needs more input, it calls in(). When inflateBack() has
197
+ filled the window with output, or when it completes with data in the
198
+ window, it calls out() to write out the data. The application must not
199
+ change the provided input until in() is called again or inflateBack()
200
+ returns. The application must not change the window/output buffer until
201
+ inflateBack() returns.
202
+
203
+ in() and out() are called with a descriptor parameter provided in the
204
+ inflateBack() call. This parameter can be a structure that provides the
205
+ information required to do the read or write, as well as accumulated
206
+ information on the input and output such as totals and check values.
207
+
208
+ in() should return zero on failure. out() should return non-zero on
209
+ failure. If either in() or out() fails, than inflateBack() returns a
210
+ Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it
211
+ was in() or out() that caused in the error. Otherwise, inflateBack()
212
+ returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
213
+ error, or Z_MEM_ERROR if it could not allocate memory for the state.
214
+ inflateBack() can also return Z_STREAM_ERROR if the input parameters
215
+ are not correct, i.e. strm is Z_NULL or the state was not initialized.
216
+ */
217
+ int ZEXPORT inflateBack9(strm, in, in_desc, out, out_desc)
218
+ z_stream FAR *strm;
219
+ in_func in;
220
+ void FAR *in_desc;
221
+ out_func out;
222
+ void FAR *out_desc;
223
+ {
224
+ struct inflate_state FAR *state;
225
+ unsigned char FAR *next; /* next input */
226
+ unsigned char FAR *put; /* next output */
227
+ unsigned have; /* available input */
228
+ unsigned long left; /* available output */
229
+ inflate_mode mode; /* current inflate mode */
230
+ int lastblock; /* true if processing last block */
231
+ int wrap; /* true if the window has wrapped */
232
+ unsigned long write; /* window write index */
233
+ unsigned char FAR *window; /* allocated sliding window, if needed */
234
+ unsigned long hold; /* bit buffer */
235
+ unsigned bits; /* bits in bit buffer */
236
+ unsigned extra; /* extra bits needed */
237
+ unsigned long length; /* literal or length of data to copy */
238
+ unsigned long offset; /* distance back to copy string from */
239
+ unsigned long copy; /* number of stored or match bytes to copy */
240
+ unsigned char FAR *from; /* where to copy match bytes from */
241
+ code const FAR *lencode; /* starting table for length/literal codes */
242
+ code const FAR *distcode; /* starting table for distance codes */
243
+ unsigned lenbits; /* index bits for lencode */
244
+ unsigned distbits; /* index bits for distcode */
245
+ code this; /* current decoding table entry */
246
+ code last; /* parent table entry */
247
+ unsigned len; /* length to copy for repeats, bits to drop */
248
+ int ret; /* return code */
249
+ static const unsigned short order[19] = /* permutation of code lengths */
250
+ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
251
+ #include "inffix9.h"
252
+
253
+ /* Check that the strm exists and that the state was initialized */
254
+ if (strm == Z_NULL || strm->state == Z_NULL)
255
+ return Z_STREAM_ERROR;
256
+ state = (struct inflate_state FAR *)strm->state;
257
+
258
+ /* Reset the state */
259
+ strm->msg = Z_NULL;
260
+ mode = TYPE;
261
+ lastblock = 0;
262
+ write = 0;
263
+ wrap = 0;
264
+ window = state->window;
265
+ next = strm->next_in;
266
+ have = next != Z_NULL ? strm->avail_in : 0;
267
+ hold = 0;
268
+ bits = 0;
269
+ put = window;
270
+ left = WSIZE;
271
+ lencode = Z_NULL;
272
+ distcode = Z_NULL;
273
+
274
+ /* Inflate until end of block marked as last */
275
+ for (;;)
276
+ switch (mode) {
277
+ case TYPE:
278
+ /* determine and dispatch block type */
279
+ if (lastblock) {
280
+ BYTEBITS();
281
+ mode = DONE;
282
+ break;
283
+ }
284
+ NEEDBITS(3);
285
+ lastblock = BITS(1);
286
+ DROPBITS(1);
287
+ switch (BITS(2)) {
288
+ case 0: /* stored block */
289
+ Tracev((stderr, "inflate: stored block%s\n",
290
+ lastblock ? " (last)" : ""));
291
+ mode = STORED;
292
+ break;
293
+ case 1: /* fixed block */
294
+ lencode = lenfix;
295
+ lenbits = 9;
296
+ distcode = distfix;
297
+ distbits = 5;
298
+ Tracev((stderr, "inflate: fixed codes block%s\n",
299
+ lastblock ? " (last)" : ""));
300
+ mode = LEN; /* decode codes */
301
+ break;
302
+ case 2: /* dynamic block */
303
+ Tracev((stderr, "inflate: dynamic codes block%s\n",
304
+ lastblock ? " (last)" : ""));
305
+ mode = TABLE;
306
+ break;
307
+ case 3:
308
+ strm->msg = (char *)"invalid block type";
309
+ mode = BAD;
310
+ }
311
+ DROPBITS(2);
312
+ break;
313
+
314
+ case STORED:
315
+ /* get and verify stored block length */
316
+ BYTEBITS(); /* go to byte boundary */
317
+ NEEDBITS(32);
318
+ if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
319
+ strm->msg = (char *)"invalid stored block lengths";
320
+ mode = BAD;
321
+ break;
322
+ }
323
+ length = (unsigned)hold & 0xffff;
324
+ Tracev((stderr, "inflate: stored length %lu\n",
325
+ length));
326
+ INITBITS();
327
+
328
+ /* copy stored block from input to output */
329
+ while (length != 0) {
330
+ copy = length;
331
+ PULL();
332
+ ROOM();
333
+ if (copy > have) copy = have;
334
+ if (copy > left) copy = left;
335
+ zmemcpy(put, next, copy);
336
+ have -= copy;
337
+ next += copy;
338
+ left -= copy;
339
+ put += copy;
340
+ length -= copy;
341
+ }
342
+ Tracev((stderr, "inflate: stored end\n"));
343
+ mode = TYPE;
344
+ break;
345
+
346
+ case TABLE:
347
+ /* get dynamic table entries descriptor */
348
+ NEEDBITS(14);
349
+ state->nlen = BITS(5) + 257;
350
+ DROPBITS(5);
351
+ state->ndist = BITS(5) + 1;
352
+ DROPBITS(5);
353
+ state->ncode = BITS(4) + 4;
354
+ DROPBITS(4);
355
+ if (state->nlen > 286) {
356
+ strm->msg = (char *)"too many length symbols";
357
+ mode = BAD;
358
+ break;
359
+ }
360
+ Tracev((stderr, "inflate: table sizes ok\n"));
361
+
362
+ /* get code length code lengths (not a typo) */
363
+ state->have = 0;
364
+ while (state->have < state->ncode) {
365
+ NEEDBITS(3);
366
+ state->lens[order[state->have++]] = (unsigned short)BITS(3);
367
+ DROPBITS(3);
368
+ }
369
+ while (state->have < 19)
370
+ state->lens[order[state->have++]] = 0;
371
+ state->next = state->codes;
372
+ lencode = (code const FAR *)(state->next);
373
+ lenbits = 7;
374
+ ret = inflate_table9(CODES, state->lens, 19, &(state->next),
375
+ &(lenbits), state->work);
376
+ if (ret) {
377
+ strm->msg = (char *)"invalid code lengths set";
378
+ mode = BAD;
379
+ break;
380
+ }
381
+ Tracev((stderr, "inflate: code lengths ok\n"));
382
+
383
+ /* get length and distance code code lengths */
384
+ state->have = 0;
385
+ while (state->have < state->nlen + state->ndist) {
386
+ for (;;) {
387
+ this = lencode[BITS(lenbits)];
388
+ if ((unsigned)(this.bits) <= bits) break;
389
+ PULLBYTE();
390
+ }
391
+ if (this.val < 16) {
392
+ NEEDBITS(this.bits);
393
+ DROPBITS(this.bits);
394
+ state->lens[state->have++] = this.val;
395
+ }
396
+ else {
397
+ if (this.val == 16) {
398
+ NEEDBITS(this.bits + 2);
399
+ DROPBITS(this.bits);
400
+ if (state->have == 0) {
401
+ strm->msg = (char *)"invalid bit length repeat";
402
+ mode = BAD;
403
+ break;
404
+ }
405
+ len = (unsigned)(state->lens[state->have - 1]);
406
+ copy = 3 + BITS(2);
407
+ DROPBITS(2);
408
+ }
409
+ else if (this.val == 17) {
410
+ NEEDBITS(this.bits + 3);
411
+ DROPBITS(this.bits);
412
+ len = 0;
413
+ copy = 3 + BITS(3);
414
+ DROPBITS(3);
415
+ }
416
+ else {
417
+ NEEDBITS(this.bits + 7);
418
+ DROPBITS(this.bits);
419
+ len = 0;
420
+ copy = 11 + BITS(7);
421
+ DROPBITS(7);
422
+ }
423
+ if (state->have + copy > state->nlen + state->ndist) {
424
+ strm->msg = (char *)"invalid bit length repeat";
425
+ mode = BAD;
426
+ break;
427
+ }
428
+ while (copy--)
429
+ state->lens[state->have++] = (unsigned short)len;
430
+ }
431
+ }
432
+
433
+ /* handle error breaks in while */
434
+ if (mode == BAD) break;
435
+
436
+ /* build code tables */
437
+ state->next = state->codes;
438
+ lencode = (code const FAR *)(state->next);
439
+ lenbits = 9;
440
+ ret = inflate_table9(LENS, state->lens, state->nlen,
441
+ &(state->next), &(lenbits), state->work);
442
+ if (ret) {
443
+ strm->msg = (char *)"invalid literal/lengths set";
444
+ mode = BAD;
445
+ break;
446
+ }
447
+ distcode = (code const FAR *)(state->next);
448
+ distbits = 6;
449
+ ret = inflate_table9(DISTS, state->lens + state->nlen,
450
+ state->ndist, &(state->next), &(distbits),
451
+ state->work);
452
+ if (ret) {
453
+ strm->msg = (char *)"invalid distances set";
454
+ mode = BAD;
455
+ break;
456
+ }
457
+ Tracev((stderr, "inflate: codes ok\n"));
458
+ mode = LEN;
459
+
460
+ case LEN:
461
+ /* get a literal, length, or end-of-block code */
462
+ for (;;) {
463
+ this = lencode[BITS(lenbits)];
464
+ if ((unsigned)(this.bits) <= bits) break;
465
+ PULLBYTE();
466
+ }
467
+ if (this.op && (this.op & 0xf0) == 0) {
468
+ last = this;
469
+ for (;;) {
470
+ this = lencode[last.val +
471
+ (BITS(last.bits + last.op) >> last.bits)];
472
+ if ((unsigned)(last.bits + this.bits) <= bits) break;
473
+ PULLBYTE();
474
+ }
475
+ DROPBITS(last.bits);
476
+ }
477
+ DROPBITS(this.bits);
478
+ length = (unsigned)this.val;
479
+
480
+ /* process literal */
481
+ if (this.op == 0) {
482
+ Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
483
+ "inflate: literal '%c'\n" :
484
+ "inflate: literal 0x%02x\n", this.val));
485
+ ROOM();
486
+ *put++ = (unsigned char)(length);
487
+ left--;
488
+ mode = LEN;
489
+ break;
490
+ }
491
+
492
+ /* process end of block */
493
+ if (this.op & 32) {
494
+ Tracevv((stderr, "inflate: end of block\n"));
495
+ mode = TYPE;
496
+ break;
497
+ }
498
+
499
+ /* invalid code */
500
+ if (this.op & 64) {
501
+ strm->msg = (char *)"invalid literal/length code";
502
+ mode = BAD;
503
+ break;
504
+ }
505
+
506
+ /* length code -- get extra bits, if any */
507
+ extra = (unsigned)(this.op) & 31;
508
+ if (extra != 0) {
509
+ NEEDBITS(extra);
510
+ length += BITS(extra);
511
+ DROPBITS(extra);
512
+ }
513
+ Tracevv((stderr, "inflate: length %lu\n", length));
514
+
515
+ /* get distance code */
516
+ for (;;) {
517
+ this = distcode[BITS(distbits)];
518
+ if ((unsigned)(this.bits) <= bits) break;
519
+ PULLBYTE();
520
+ }
521
+ if ((this.op & 0xf0) == 0) {
522
+ last = this;
523
+ for (;;) {
524
+ this = distcode[last.val +
525
+ (BITS(last.bits + last.op) >> last.bits)];
526
+ if ((unsigned)(last.bits + this.bits) <= bits) break;
527
+ PULLBYTE();
528
+ }
529
+ DROPBITS(last.bits);
530
+ }
531
+ DROPBITS(this.bits);
532
+ if (this.op & 64) {
533
+ strm->msg = (char *)"invalid distance code";
534
+ mode = BAD;
535
+ break;
536
+ }
537
+ offset = (unsigned)this.val;
538
+
539
+ /* get distance extra bits, if any */
540
+ extra = (unsigned)(this.op) & 15;
541
+ if (extra != 0) {
542
+ NEEDBITS(extra);
543
+ offset += BITS(extra);
544
+ DROPBITS(extra);
545
+ }
546
+ if (offset > WSIZE - (wrap ? 0: left)) {
547
+ strm->msg = (char *)"invalid distance too far back";
548
+ mode = BAD;
549
+ break;
550
+ }
551
+ Tracevv((stderr, "inflate: distance %lu\n", offset));
552
+
553
+ /* copy match from window to output */
554
+ do {
555
+ ROOM();
556
+ copy = WSIZE - offset;
557
+ if (copy < left) {
558
+ from = put + copy;
559
+ copy = left - copy;
560
+ }
561
+ else {
562
+ from = put - offset;
563
+ copy = left;
564
+ }
565
+ if (copy > length) copy = length;
566
+ length -= copy;
567
+ left -= copy;
568
+ do {
569
+ *put++ = *from++;
570
+ } while (--copy);
571
+ } while (length != 0);
572
+ break;
573
+
574
+ case DONE:
575
+ /* inflate stream terminated properly -- write leftover output */
576
+ ret = Z_STREAM_END;
577
+ if (left < WSIZE) {
578
+ if (out(out_desc, window, (unsigned)(WSIZE - left)))
579
+ ret = Z_BUF_ERROR;
580
+ }
581
+ goto inf_leave;
582
+
583
+ case BAD:
584
+ ret = Z_DATA_ERROR;
585
+ goto inf_leave;
586
+
587
+ default: /* can't happen, but makes compilers happy */
588
+ ret = Z_STREAM_ERROR;
589
+ goto inf_leave;
590
+ }
591
+
592
+ /* Return unused input */
593
+ inf_leave:
594
+ strm->next_in = next;
595
+ strm->avail_in = have;
596
+ return ret;
597
+ }
598
+
599
+ int ZEXPORT inflateBack9End(strm)
600
+ z_stream FAR *strm;
601
+ {
602
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
603
+ return Z_STREAM_ERROR;
604
+ ZFREE(strm, strm->state);
605
+ strm->state = Z_NULL;
606
+ Tracev((stderr, "inflate: end\n"));
607
+ return Z_OK;
608
+ }