zzip.nim 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #
  2. #
  3. # Nim's Runtime Library
  4. # (c) Copyright 2008 Andreas Rumpf
  5. #
  6. # See the file "copying.txt", included in this
  7. # distribution, for details about the copyright.
  8. #
  9. ## This module is an interface to the zzip library.
  10. # Author:
  11. # Guido Draheim <guidod@gmx.de>
  12. # Tomi Ollila <Tomi.Ollila@iki.fi>
  13. # Copyright (c) 1999,2000,2001,2002,2003,2004 Guido Draheim
  14. # All rights reserved,
  15. # usage allowed under the restrictions of the
  16. # Lesser GNU General Public License
  17. # or alternatively the restrictions
  18. # of the Mozilla Public License 1.1
  19. when defined(windows):
  20. const
  21. dllname = "zzip.dll"
  22. else:
  23. const
  24. dllname = "libzzip.so"
  25. type
  26. TZZipError* = int32 # Name conflict if we drop the `T`
  27. const
  28. ZZIP_ERROR* = -4096'i32
  29. ZZIP_NO_ERROR* = 0'i32 # no error, may be used if user sets it.
  30. ZZIP_OUTOFMEM* = ZZIP_ERROR - 20'i32 # out of memory
  31. ZZIP_DIR_OPEN* = ZZIP_ERROR - 21'i32 # failed to open zipfile, see errno for details
  32. ZZIP_DIR_STAT* = ZZIP_ERROR - 22'i32 # failed to fstat zipfile, see errno for details
  33. ZZIP_DIR_SEEK* = ZZIP_ERROR - 23'i32 # failed to lseek zipfile, see errno for details
  34. ZZIP_DIR_READ* = ZZIP_ERROR - 24'i32 # failed to read zipfile, see errno for details
  35. ZZIP_DIR_TOO_SHORT* = ZZIP_ERROR - 25'i32
  36. ZZIP_DIR_EDH_MISSING* = ZZIP_ERROR - 26'i32
  37. ZZIP_DIRSIZE* = ZZIP_ERROR - 27'i32
  38. ZZIP_ENOENT* = ZZIP_ERROR - 28'i32
  39. ZZIP_UNSUPP_COMPR* = ZZIP_ERROR - 29'i32
  40. ZZIP_CORRUPTED* = ZZIP_ERROR - 31'i32
  41. ZZIP_UNDEF* = ZZIP_ERROR - 32'i32
  42. ZZIP_DIR_LARGEFILE* = ZZIP_ERROR - 33'i32
  43. ZZIP_CASELESS* = 1'i32 shl 12'i32
  44. ZZIP_NOPATHS* = 1'i32 shl 13'i32
  45. ZZIP_PREFERZIP* = 1'i32 shl 14'i32
  46. ZZIP_ONLYZIP* = 1'i32 shl 16'i32
  47. ZZIP_FACTORY* = 1'i32 shl 17'i32
  48. ZZIP_ALLOWREAL* = 1'i32 shl 18'i32
  49. ZZIP_THREADED* = 1'i32 shl 19'i32
  50. type
  51. ZZipDir* {.final, pure.} = object
  52. ZZipFile* {.final, pure.} = object
  53. ZZipPluginIO* {.final, pure.} = object
  54. ZZipDirent* {.final, pure.} = object
  55. d_compr*: int32 ## compression method
  56. d_csize*: int32 ## compressed size
  57. st_size*: int32 ## file size / decompressed size
  58. d_name*: cstring ## file name / strdupped name
  59. ZZipStat* = ZZipDirent
  60. {.deprecated: [TZZipDir: ZzipDir, TZZipFile: ZzipFile,
  61. TZZipPluginIO: ZzipPluginIO, TZZipDirent: ZzipDirent,
  62. TZZipStat: ZZipStat].}
  63. proc zzip_strerror*(errcode: int32): cstring {.cdecl, dynlib: dllname,
  64. importc: "zzip_strerror".}
  65. proc zzip_strerror_of*(dir: ptr ZZipDir): cstring {.cdecl, dynlib: dllname,
  66. importc: "zzip_strerror_of".}
  67. proc zzip_errno*(errcode: int32): int32 {.cdecl, dynlib: dllname,
  68. importc: "zzip_errno".}
  69. proc zzip_geterror*(dir: ptr ZZipDir): int32 {.cdecl, dynlib: dllname,
  70. importc: "zzip_error".}
  71. proc zzip_seterror*(dir: ptr ZZipDir, errcode: int32) {.cdecl, dynlib: dllname,
  72. importc: "zzip_seterror".}
  73. proc zzip_compr_str*(compr: int32): cstring {.cdecl, dynlib: dllname,
  74. importc: "zzip_compr_str".}
  75. proc zzip_dirhandle*(fp: ptr ZZipFile): ptr ZZipDir {.cdecl, dynlib: dllname,
  76. importc: "zzip_dirhandle".}
  77. proc zzip_dirfd*(dir: ptr ZZipDir): int32 {.cdecl, dynlib: dllname,
  78. importc: "zzip_dirfd".}
  79. proc zzip_dir_real*(dir: ptr ZZipDir): int32 {.cdecl, dynlib: dllname,
  80. importc: "zzip_dir_real".}
  81. proc zzip_file_real*(fp: ptr ZZipFile): int32 {.cdecl, dynlib: dllname,
  82. importc: "zzip_file_real".}
  83. proc zzip_realdir*(dir: ptr ZZipDir): pointer {.cdecl, dynlib: dllname,
  84. importc: "zzip_realdir".}
  85. proc zzip_realfd*(fp: ptr ZZipFile): int32 {.cdecl, dynlib: dllname,
  86. importc: "zzip_realfd".}
  87. proc zzip_dir_alloc*(fileext: cstringArray): ptr ZZipDir {.cdecl,
  88. dynlib: dllname, importc: "zzip_dir_alloc".}
  89. proc zzip_dir_free*(para1: ptr ZZipDir): int32 {.cdecl, dynlib: dllname,
  90. importc: "zzip_dir_free".}
  91. proc zzip_dir_fdopen*(fd: int32, errcode_p: ptr TZZipError): ptr ZZipDir {.cdecl,
  92. dynlib: dllname, importc: "zzip_dir_fdopen".}
  93. proc zzip_dir_open*(filename: cstring, errcode_p: ptr TZZipError): ptr ZZipDir {.
  94. cdecl, dynlib: dllname, importc: "zzip_dir_open".}
  95. proc zzip_dir_close*(dir: ptr ZZipDir) {.cdecl, dynlib: dllname,
  96. importc: "zzip_dir_close".}
  97. proc zzip_dir_read*(dir: ptr ZZipDir, dirent: ptr ZZipDirent): int32 {.cdecl,
  98. dynlib: dllname, importc: "zzip_dir_read".}
  99. proc zzip_opendir*(filename: cstring): ptr ZZipDir {.cdecl, dynlib: dllname,
  100. importc: "zzip_opendir".}
  101. proc zzip_closedir*(dir: ptr ZZipDir) {.cdecl, dynlib: dllname,
  102. importc: "zzip_closedir".}
  103. proc zzip_readdir*(dir: ptr ZZipDir): ptr ZZipDirent {.cdecl, dynlib: dllname,
  104. importc: "zzip_readdir".}
  105. proc zzip_rewinddir*(dir: ptr ZZipDir) {.cdecl, dynlib: dllname,
  106. importc: "zzip_rewinddir".}
  107. proc zzip_telldir*(dir: ptr ZZipDir): int {.cdecl, dynlib: dllname,
  108. importc: "zzip_telldir".}
  109. proc zzip_seekdir*(dir: ptr ZZipDir, offset: int) {.cdecl, dynlib: dllname,
  110. importc: "zzip_seekdir".}
  111. proc zzip_file_open*(dir: ptr ZZipDir, name: cstring, flags: int32): ptr ZZipFile {.
  112. cdecl, dynlib: dllname, importc: "zzip_file_open".}
  113. proc zzip_file_close*(fp: ptr ZZipFile) {.cdecl, dynlib: dllname,
  114. importc: "zzip_file_close".}
  115. proc zzip_file_read*(fp: ptr ZZipFile, buf: pointer, length: int): int {.
  116. cdecl, dynlib: dllname, importc: "zzip_file_read".}
  117. proc zzip_open*(name: cstring, flags: int32): ptr ZZipFile {.cdecl,
  118. dynlib: dllname, importc: "zzip_open".}
  119. proc zzip_close*(fp: ptr ZZipFile) {.cdecl, dynlib: dllname,
  120. importc: "zzip_close".}
  121. proc zzip_read*(fp: ptr ZZipFile, buf: pointer, length: int): int {.
  122. cdecl, dynlib: dllname, importc: "zzip_read".}
  123. proc zzip_freopen*(name: cstring, mode: cstring, para3: ptr ZZipFile): ptr ZZipFile {.
  124. cdecl, dynlib: dllname, importc: "zzip_freopen".}
  125. proc zzip_fopen*(name: cstring, mode: cstring): ptr ZZipFile {.cdecl,
  126. dynlib: dllname, importc: "zzip_fopen".}
  127. proc zzip_fread*(p: pointer, size: int, nmemb: int,
  128. file: ptr ZZipFile): int {.cdecl, dynlib: dllname,
  129. importc: "zzip_fread".}
  130. proc zzip_fclose*(fp: ptr ZZipFile) {.cdecl, dynlib: dllname,
  131. importc: "zzip_fclose".}
  132. proc zzip_rewind*(fp: ptr ZZipFile): int32 {.cdecl, dynlib: dllname,
  133. importc: "zzip_rewind".}
  134. proc zzip_seek*(fp: ptr ZZipFile, offset: int, whence: int32): int {.
  135. cdecl, dynlib: dllname, importc: "zzip_seek".}
  136. proc zzip_tell*(fp: ptr ZZipFile): int {.cdecl, dynlib: dllname,
  137. importc: "zzip_tell".}
  138. proc zzip_dir_stat*(dir: ptr ZZipDir, name: cstring, zs: ptr ZZipStat,
  139. flags: int32): int32 {.cdecl, dynlib: dllname,
  140. importc: "zzip_dir_stat".}
  141. proc zzip_file_stat*(fp: ptr ZZipFile, zs: ptr ZZipStat): int32 {.cdecl,
  142. dynlib: dllname, importc: "zzip_file_stat".}
  143. proc zzip_fstat*(fp: ptr ZZipFile, zs: ptr ZZipStat): int32 {.cdecl, dynlib: dllname,
  144. importc: "zzip_fstat".}
  145. proc zzip_open_shared_io*(stream: ptr ZZipFile, name: cstring,
  146. o_flags: int32, o_modes: int32, ext: cstringArray,
  147. io: ptr ZZipPluginIO): ptr ZZipFile {.cdecl,
  148. dynlib: dllname, importc: "zzip_open_shared_io".}
  149. proc zzip_open_ext_io*(name: cstring, o_flags: int32, o_modes: int32,
  150. ext: cstringArray, io: ptr ZZipPluginIO): ptr ZZipFile {.
  151. cdecl, dynlib: dllname, importc: "zzip_open_ext_io".}
  152. proc zzip_opendir_ext_io*(name: cstring, o_modes: int32,
  153. ext: cstringArray, io: ptr ZZipPluginIO): ptr ZZipDir {.
  154. cdecl, dynlib: dllname, importc: "zzip_opendir_ext_io".}
  155. proc zzip_dir_open_ext_io*(filename: cstring, errcode_p: ptr TZZipError,
  156. ext: cstringArray, io: ptr ZZipPluginIO): ptr ZZipDir {.
  157. cdecl, dynlib: dllname, importc: "zzip_dir_open_ext_io".}