kibi-swipl-linux-x64-gnu 1.0.0

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 (550) hide show
  1. package/README.md +29 -0
  2. package/bin/swipl +0 -0
  3. package/bin/swipl-win +0 -0
  4. package/build-manifest.json +70 -0
  5. package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
  6. package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
  7. package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
  8. package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
  9. package/lib/swipl/ABI +1 -0
  10. package/lib/swipl/LICENSE +41 -0
  11. package/lib/swipl/README.md +116 -0
  12. package/lib/swipl/app/README.md +25 -0
  13. package/lib/swipl/app/app.pl +87 -0
  14. package/lib/swipl/app/pack.pl +350 -0
  15. package/lib/swipl/app/qlf.pl +521 -0
  16. package/lib/swipl/app/splfr.pl +177 -0
  17. package/lib/swipl/app/sys.pl +310 -0
  18. package/lib/swipl/bin/swipl.home +1 -0
  19. package/lib/swipl/boot/apply.pl +73 -0
  20. package/lib/swipl/boot/attvar.pl +344 -0
  21. package/lib/swipl/boot/autoload.pl +1226 -0
  22. package/lib/swipl/boot/bags.pl +283 -0
  23. package/lib/swipl/boot/dcg.pl +388 -0
  24. package/lib/swipl/boot/dicts.pl +193 -0
  25. package/lib/swipl/boot/dwim.pl +485 -0
  26. package/lib/swipl/boot/engines.pl +152 -0
  27. package/lib/swipl/boot/expand.pl +1628 -0
  28. package/lib/swipl/boot/gc.pl +65 -0
  29. package/lib/swipl/boot/history.pl +304 -0
  30. package/lib/swipl/boot/init.pl +4682 -0
  31. package/lib/swipl/boot/iri.pl +64 -0
  32. package/lib/swipl/boot/license.pl +390 -0
  33. package/lib/swipl/boot/load.pl +81 -0
  34. package/lib/swipl/boot/messages.pl +2521 -0
  35. package/lib/swipl/boot/packs.pl +306 -0
  36. package/lib/swipl/boot/predopts.pl +154 -0
  37. package/lib/swipl/boot/qlf.pl +141 -0
  38. package/lib/swipl/boot/rc.pl +263 -0
  39. package/lib/swipl/boot/syspred.pl +1634 -0
  40. package/lib/swipl/boot/tabling.pl +2321 -0
  41. package/lib/swipl/boot/threads.pl +42 -0
  42. package/lib/swipl/boot/toplevel.pl +2248 -0
  43. package/lib/swipl/boot/topvars.pl +261 -0
  44. package/lib/swipl/boot.prc +0 -0
  45. package/lib/swipl/cmake/swipl.cmake +131 -0
  46. package/lib/swipl/customize/README.md +23 -0
  47. package/lib/swipl/customize/edit +101 -0
  48. package/lib/swipl/customize/init.pl +164 -0
  49. package/lib/swipl/demo/README.md +33 -0
  50. package/lib/swipl/demo/likes.pl +44 -0
  51. package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
  52. package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
  53. package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
  54. package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
  55. package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
  56. package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
  57. package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
  58. package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
  59. package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
  60. package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
  61. package/lib/swipl/doc/packages/examples/http/README.md +98 -0
  62. package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
  63. package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
  64. package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
  65. package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
  66. package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
  67. package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
  68. package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
  69. package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
  70. package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
  71. package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
  72. package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
  73. package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
  74. package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
  75. package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
  76. package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
  77. package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
  78. package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
  79. package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
  80. package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
  81. package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
  82. package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
  83. package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
  84. package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
  85. package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
  86. package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
  87. package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
  88. package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
  89. package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
  90. package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
  91. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
  92. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
  93. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
  94. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
  95. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
  96. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
  97. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
  98. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
  99. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
  100. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
  101. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
  102. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
  103. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
  104. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
  105. package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
  106. package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
  107. package/lib/swipl/include/SWI-Prolog.h +1544 -0
  108. package/lib/swipl/include/SWI-Stream.h +537 -0
  109. package/lib/swipl/include/Yap/YapInterface.h +283 -0
  110. package/lib/swipl/include/sicstus/sicstus.h +452 -0
  111. package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
  112. package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
  113. package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
  114. package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
  115. package/lib/swipl/lib/x86_64-linux/files.so +0 -0
  116. package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
  117. package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
  118. package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
  119. package/lib/swipl/lib/x86_64-linux/json.so +0 -0
  120. package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
  121. package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
  122. package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
  123. package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
  124. package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
  125. package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
  126. package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
  127. package/lib/swipl/lib/x86_64-linux/process.so +0 -0
  128. package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
  129. package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
  130. package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
  131. package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
  132. package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
  133. package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
  134. package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
  135. package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
  136. package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
  137. package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
  138. package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
  139. package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
  140. package/lib/swipl/lib/x86_64-linux/time.so +0 -0
  141. package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
  142. package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
  143. package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
  144. package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
  145. package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
  146. package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
  147. package/lib/swipl/library/INDEX.pl +1020 -0
  148. package/lib/swipl/library/aggregate.pl +755 -0
  149. package/lib/swipl/library/ansi_term.pl +653 -0
  150. package/lib/swipl/library/apply.pl +426 -0
  151. package/lib/swipl/library/apply_macros.pl +497 -0
  152. package/lib/swipl/library/arithmetic.pl +320 -0
  153. package/lib/swipl/library/assoc.pl +522 -0
  154. package/lib/swipl/library/atom.pl +169 -0
  155. package/lib/swipl/library/backcomp.pl +688 -0
  156. package/lib/swipl/library/base32.pl +291 -0
  157. package/lib/swipl/library/base64.pl +441 -0
  158. package/lib/swipl/library/broadcast.pl +161 -0
  159. package/lib/swipl/library/build/cmake.pl +137 -0
  160. package/lib/swipl/library/build/conan.pl +232 -0
  161. package/lib/swipl/library/build/make.pl +168 -0
  162. package/lib/swipl/library/build/tools.pl +825 -0
  163. package/lib/swipl/library/charsio.pl +195 -0
  164. package/lib/swipl/library/check.pl +1097 -0
  165. package/lib/swipl/library/check_installation.pl +912 -0
  166. package/lib/swipl/library/clp/INDEX.pl +157 -0
  167. package/lib/swipl/library/clp/bounds.pl +2036 -0
  168. package/lib/swipl/library/clp/clp_distinct.pl +263 -0
  169. package/lib/swipl/library/clp/clp_events.pl +92 -0
  170. package/lib/swipl/library/clp/clpb.pl +1896 -0
  171. package/lib/swipl/library/clp/clpfd.pl +7906 -0
  172. package/lib/swipl/library/clp/simplex.pl +1580 -0
  173. package/lib/swipl/library/codesio.pl +182 -0
  174. package/lib/swipl/library/coinduction.pl +183 -0
  175. package/lib/swipl/library/console_input.pl +289 -0
  176. package/lib/swipl/library/csv.pl +611 -0
  177. package/lib/swipl/library/ctypes.pl +161 -0
  178. package/lib/swipl/library/date.pl +370 -0
  179. package/lib/swipl/library/dcg/INDEX.pl +35 -0
  180. package/lib/swipl/library/dcg/basics.pl +514 -0
  181. package/lib/swipl/library/dcg/high_order.pl +227 -0
  182. package/lib/swipl/library/debug.pl +499 -0
  183. package/lib/swipl/library/dialect/bim.pl +186 -0
  184. package/lib/swipl/library/dialect/commons.pl +77 -0
  185. package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
  186. package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
  187. package/lib/swipl/library/dialect/hprolog.pl +314 -0
  188. package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
  189. package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
  190. package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
  191. package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
  192. package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
  193. package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
  194. package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
  195. package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
  196. package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
  197. package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
  198. package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
  199. package/lib/swipl/library/dialect/sicstus.pl +582 -0
  200. package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
  201. package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
  202. package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
  203. package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
  204. package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
  205. package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
  206. package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
  207. package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
  208. package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
  209. package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
  210. package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
  211. package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
  212. package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
  213. package/lib/swipl/library/dialect/sicstus4.pl +200 -0
  214. package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
  215. package/lib/swipl/library/dialect/xsb/README.md +20 -0
  216. package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
  217. package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
  218. package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
  219. package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
  220. package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
  221. package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
  222. package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
  223. package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
  224. package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
  225. package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
  226. package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
  227. package/lib/swipl/library/dialect/xsb/source.pl +308 -0
  228. package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
  229. package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
  230. package/lib/swipl/library/dialect/xsb/string.pl +76 -0
  231. package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
  232. package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
  233. package/lib/swipl/library/dialect/xsb.pl +688 -0
  234. package/lib/swipl/library/dialect/yap/README.TXT +8 -0
  235. package/lib/swipl/library/dialect/yap.pl +283 -0
  236. package/lib/swipl/library/dialect.pl +123 -0
  237. package/lib/swipl/library/dicts.pl +399 -0
  238. package/lib/swipl/library/dif.pl +426 -0
  239. package/lib/swipl/library/edinburgh.pl +138 -0
  240. package/lib/swipl/library/edit.pl +783 -0
  241. package/lib/swipl/library/error.pl +495 -0
  242. package/lib/swipl/library/exceptions.pl +231 -0
  243. package/lib/swipl/library/explain.pl +543 -0
  244. package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
  245. package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
  246. package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
  247. package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
  248. package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
  249. package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
  250. package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
  251. package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
  252. package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
  253. package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
  254. package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
  255. package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
  256. package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
  257. package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
  258. package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
  259. package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
  260. package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
  261. package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
  262. package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
  263. package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
  264. package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
  265. package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
  266. package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
  267. package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
  268. package/lib/swipl/library/ext/chr/chr.pl +686 -0
  269. package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
  270. package/lib/swipl/library/ext/clib/cgi.pl +86 -0
  271. package/lib/swipl/library/ext/clib/crypt.pl +44 -0
  272. package/lib/swipl/library/ext/clib/filesex.pl +644 -0
  273. package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
  274. package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
  275. package/lib/swipl/library/ext/clib/md5.pl +68 -0
  276. package/lib/swipl/library/ext/clib/memfile.pl +61 -0
  277. package/lib/swipl/library/ext/clib/process.pl +573 -0
  278. package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
  279. package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
  280. package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
  281. package/lib/swipl/library/ext/clib/sched.pl +85 -0
  282. package/lib/swipl/library/ext/clib/sha.pl +162 -0
  283. package/lib/swipl/library/ext/clib/socket.pl +1102 -0
  284. package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
  285. package/lib/swipl/library/ext/clib/streampool.pl +136 -0
  286. package/lib/swipl/library/ext/clib/syslog.pl +180 -0
  287. package/lib/swipl/library/ext/clib/time.pl +194 -0
  288. package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
  289. package/lib/swipl/library/ext/clib/uid.pl +220 -0
  290. package/lib/swipl/library/ext/clib/unix.pl +317 -0
  291. package/lib/swipl/library/ext/clib/uri.pl +530 -0
  292. package/lib/swipl/library/ext/clib/uuid.pl +207 -0
  293. package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
  294. package/lib/swipl/library/ext/http/http/README.md +34 -0
  295. package/lib/swipl/library/ext/http/http/ax.pl +189 -0
  296. package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
  297. package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
  298. package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
  299. package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
  300. package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
  301. package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
  302. package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
  303. package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
  304. package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
  305. package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
  306. package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
  307. package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
  308. package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
  309. package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
  310. package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
  311. package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
  312. package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
  313. package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
  314. package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
  315. package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
  316. package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
  317. package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
  318. package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
  319. package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
  320. package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
  321. package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
  322. package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
  323. package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
  324. package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
  325. package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
  326. package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
  327. package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
  328. package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
  329. package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
  330. package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
  331. package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
  332. package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
  333. package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
  334. package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
  335. package/lib/swipl/library/ext/http/http/hub.pl +600 -0
  336. package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
  337. package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
  338. package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
  339. package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
  340. package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
  341. package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
  342. package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
  343. package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
  344. package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
  345. package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
  346. package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
  347. package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
  348. package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
  349. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
  350. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
  351. package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
  352. package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
  353. package/lib/swipl/library/ext/json/INDEX.pl +36 -0
  354. package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
  355. package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
  356. package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
  357. package/lib/swipl/library/ext/json/http/json.pl +48 -0
  358. package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
  359. package/lib/swipl/library/ext/json/json.pl +1215 -0
  360. package/lib/swipl/library/ext/json/json_convert.pl +681 -0
  361. package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
  362. package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
  363. package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
  364. package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
  365. package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
  366. package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
  367. package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
  368. package/lib/swipl/library/ext/nlp/isub.pl +162 -0
  369. package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
  370. package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
  371. package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
  372. package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
  373. package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
  374. package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
  375. package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
  376. package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
  377. package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
  378. package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
  379. package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
  380. package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
  381. package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
  382. package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
  383. package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
  384. package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
  385. package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
  386. package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
  387. package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
  388. package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
  389. package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
  390. package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
  391. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
  392. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
  393. package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
  394. package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
  395. package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
  396. package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
  397. package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
  398. package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
  399. package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
  400. package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
  401. package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
  402. package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
  403. package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
  404. package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
  405. package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
  406. package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
  407. package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
  408. package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
  409. package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
  410. package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
  411. package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
  412. package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
  413. package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
  414. package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
  415. package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
  416. package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
  417. package/lib/swipl/library/ext/ssl/saml.pl +609 -0
  418. package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
  419. package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
  420. package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
  421. package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
  422. package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
  423. package/lib/swipl/library/fastrw.pl +105 -0
  424. package/lib/swipl/library/files.pl +80 -0
  425. package/lib/swipl/library/gensym.pl +111 -0
  426. package/lib/swipl/library/git.pl +1027 -0
  427. package/lib/swipl/library/hashtable.pl +365 -0
  428. package/lib/swipl/library/heaps.pl +252 -0
  429. package/lib/swipl/library/hotfix.pl +239 -0
  430. package/lib/swipl/library/http/jquery.pl +103 -0
  431. package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
  432. package/lib/swipl/library/increval.pl +217 -0
  433. package/lib/swipl/library/intercept.pl +263 -0
  434. package/lib/swipl/library/iostream.pl +237 -0
  435. package/lib/swipl/library/iri_scheme/file.pl +70 -0
  436. package/lib/swipl/library/lazy_lists.pl +481 -0
  437. package/lib/swipl/library/listing.pl +1362 -0
  438. package/lib/swipl/library/lists.pl +860 -0
  439. package/lib/swipl/library/lynx/INDEX.pl +14 -0
  440. package/lib/swipl/library/lynx/format.pl +380 -0
  441. package/lib/swipl/library/lynx/html_style.pl +129 -0
  442. package/lib/swipl/library/lynx/html_text.pl +865 -0
  443. package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
  444. package/lib/swipl/library/macros.pl +451 -0
  445. package/lib/swipl/library/main.pl +1200 -0
  446. package/lib/swipl/library/make.pl +197 -0
  447. package/lib/swipl/library/modules.pl +129 -0
  448. package/lib/swipl/library/nb_rbtrees.pl +267 -0
  449. package/lib/swipl/library/nb_set.pl +203 -0
  450. package/lib/swipl/library/obfuscate.pl +115 -0
  451. package/lib/swipl/library/occurs.pl +241 -0
  452. package/lib/swipl/library/operators.pl +182 -0
  453. package/lib/swipl/library/option.pl +388 -0
  454. package/lib/swipl/library/optparse.pl +966 -0
  455. package/lib/swipl/library/ordsets.pl +518 -0
  456. package/lib/swipl/library/oset.pl +160 -0
  457. package/lib/swipl/library/pairs.pl +187 -0
  458. package/lib/swipl/library/persistency.pl +713 -0
  459. package/lib/swipl/library/pio.pl +47 -0
  460. package/lib/swipl/library/portray_text.pl +277 -0
  461. package/lib/swipl/library/pprint.pl +940 -0
  462. package/lib/swipl/library/predicate_options.pl +975 -0
  463. package/lib/swipl/library/prolog_autoload.pl +233 -0
  464. package/lib/swipl/library/prolog_breakpoints.pl +396 -0
  465. package/lib/swipl/library/prolog_clause.pl +1104 -0
  466. package/lib/swipl/library/prolog_code.pl +416 -0
  467. package/lib/swipl/library/prolog_codewalk.pl +1248 -0
  468. package/lib/swipl/library/prolog_colour.pl +3301 -0
  469. package/lib/swipl/library/prolog_colour.qlf +0 -0
  470. package/lib/swipl/library/prolog_config.pl +154 -0
  471. package/lib/swipl/library/prolog_coverage.pl +1333 -0
  472. package/lib/swipl/library/prolog_debug.pl +404 -0
  473. package/lib/swipl/library/prolog_deps.pl +675 -0
  474. package/lib/swipl/library/prolog_evaluable.pl +234 -0
  475. package/lib/swipl/library/prolog_format.pl +219 -0
  476. package/lib/swipl/library/prolog_history.pl +161 -0
  477. package/lib/swipl/library/prolog_jiti.pl +333 -0
  478. package/lib/swipl/library/prolog_locale.pl +61 -0
  479. package/lib/swipl/library/prolog_metainference.pl +307 -0
  480. package/lib/swipl/library/prolog_pack.pl +3906 -0
  481. package/lib/swipl/library/prolog_profile.pl +346 -0
  482. package/lib/swipl/library/prolog_qlfmake.pl +533 -0
  483. package/lib/swipl/library/prolog_source.pl +1188 -0
  484. package/lib/swipl/library/prolog_stack.pl +794 -0
  485. package/lib/swipl/library/prolog_trace.pl +365 -0
  486. package/lib/swipl/library/prolog_versions.pl +347 -0
  487. package/lib/swipl/library/prolog_wrap.pl +164 -0
  488. package/lib/swipl/library/prolog_xref.pl +3090 -0
  489. package/lib/swipl/library/prolog_xref.qlf +0 -0
  490. package/lib/swipl/library/pure_input.pl +266 -0
  491. package/lib/swipl/library/qpforeign.pl +695 -0
  492. package/lib/swipl/library/qsave.pl +1516 -0
  493. package/lib/swipl/library/quasi_quotations.pl +300 -0
  494. package/lib/swipl/library/quintus.pl +437 -0
  495. package/lib/swipl/library/random.pl +459 -0
  496. package/lib/swipl/library/rbtrees.pl +1153 -0
  497. package/lib/swipl/library/readln.pl +256 -0
  498. package/lib/swipl/library/readutil.pl +304 -0
  499. package/lib/swipl/library/record.pl +544 -0
  500. package/lib/swipl/library/rwlocks.pl +172 -0
  501. package/lib/swipl/library/sandbox.pl +1384 -0
  502. package/lib/swipl/library/semweb/dc.rdfs +198 -0
  503. package/lib/swipl/library/semweb/eor.rdfs +95 -0
  504. package/lib/swipl/library/semweb/owl.owl +287 -0
  505. package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
  506. package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
  507. package/lib/swipl/library/settings.pl +755 -0
  508. package/lib/swipl/library/shell.pl +462 -0
  509. package/lib/swipl/library/shlib.pl +670 -0
  510. package/lib/swipl/library/solution_sequences.pl +439 -0
  511. package/lib/swipl/library/sort.pl +119 -0
  512. package/lib/swipl/library/statistics.pl +541 -0
  513. package/lib/swipl/library/streams.pl +118 -0
  514. package/lib/swipl/library/strings.pl +469 -0
  515. package/lib/swipl/library/system.pl +95 -0
  516. package/lib/swipl/library/tables.pl +381 -0
  517. package/lib/swipl/library/tableutil.pl +771 -0
  518. package/lib/swipl/library/tabling.pl +42 -0
  519. package/lib/swipl/library/terms.pl +457 -0
  520. package/lib/swipl/library/theme/auto.pl +61 -0
  521. package/lib/swipl/library/theme/dark.pl +455 -0
  522. package/lib/swipl/library/theme/light.pl +45 -0
  523. package/lib/swipl/library/thread.pl +810 -0
  524. package/lib/swipl/library/thread_pool.pl +508 -0
  525. package/lib/swipl/library/threadutil.pl +574 -0
  526. package/lib/swipl/library/tty.pl +316 -0
  527. package/lib/swipl/library/ugraphs.pl +644 -0
  528. package/lib/swipl/library/unicode/INDEX.pl +6 -0
  529. package/lib/swipl/library/unicode/blocks.pl +414 -0
  530. package/lib/swipl/library/url.pl +1129 -0
  531. package/lib/swipl/library/utf8.pl +145 -0
  532. package/lib/swipl/library/varnumbers.pl +221 -0
  533. package/lib/swipl/library/vm.pl +251 -0
  534. package/lib/swipl/library/wfs.pl +205 -0
  535. package/lib/swipl/library/when.pl +263 -0
  536. package/lib/swipl/library/writef.pl +278 -0
  537. package/lib/swipl/library/www_browser.pl +251 -0
  538. package/lib/swipl/library/yall.pl +574 -0
  539. package/lib/swipl/library/zip.pl +211 -0
  540. package/lib/swipl/swipl.home +1 -0
  541. package/lib/vendor/libcrypto.so.3 +0 -0
  542. package/lib/vendor/libpcre2-8.so.0 +0 -0
  543. package/lib/vendor/libssl.so.3 +0 -0
  544. package/lib/vendor/libz.so.1 +0 -0
  545. package/licenses/OpenSSL-LICENSE.txt +177 -0
  546. package/licenses/PCRE2-COPYING +5 -0
  547. package/licenses/README.md +12 -0
  548. package/licenses/SWI-Prolog-LICENSE +41 -0
  549. package/licenses/zlib-LICENSE +22 -0
  550. package/package.json +27 -0
@@ -0,0 +1,354 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Matt Lilley
4
+ E-mail: thetrime@gmail.com
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2004-2016, SWI-Prolog Foundation
7
+ VU University Amsterdam
8
+ All rights reserved.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions
12
+ are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright
15
+ notice, this list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright
18
+ notice, this list of conditions and the following disclaimer in
19
+ the documentation and/or other materials provided with the
20
+ distribution.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ POSSIBILITY OF SUCH DAMAGE.
34
+ */
35
+
36
+
37
+ :-module(xmlenc,
38
+ [ decrypt_xml/4, % +EncryptedXML, -DecryptedXML, :KeyCallback, +Options
39
+ load_certificate_from_base64_string/2 % +Base64String, -Certificate
40
+ ]).
41
+ :- autoload(library(base64),[base64/2]).
42
+ :- autoload(library(crypto),
43
+ [crypto_data_decrypt/6,rsa_private_decrypt/4,hex_bytes/2]).
44
+ :- autoload(library(error),[existence_error/2,domain_error/2]).
45
+ :- autoload(library(lists),[append/3]).
46
+ :- autoload(library(sgml),[load_structure/3]).
47
+ :- autoload(library(ssl),[load_certificate/2]).
48
+ :- autoload(library(uri),[uri_components/2]).
49
+ :- autoload(library(http/http_open),[http_open/3]).
50
+
51
+ :- meta_predicate
52
+ decrypt_xml(+, -, 3, +).
53
+
54
+ /** <module> XML encryption library
55
+
56
+ This library is a partial implementation of the XML encryption standard.
57
+ It implements the _decryption_ part, which is needed by SAML clients.
58
+
59
+ @see https://www.w3.org/TR/xmlenc-core1/
60
+ @see https://en.wikipedia.org/wiki/Security_Assertion_Markup_Language
61
+ */
62
+
63
+ % These are the 4 mandatory block cipher algorithms
64
+ % (actually aes-192-cbc is not mandatory, but it is easy to support)
65
+ ssl_algorithm('http://www.w3.org/2001/04/xmlenc#tripledes-cbc', 'des3', 8).
66
+ ssl_algorithm('http://www.w3.org/2001/04/xmlenc#aes128-cbc', 'aes-128-cbc', 16).
67
+ ssl_algorithm('http://www.w3.org/2001/04/xmlenc#aes256-cbc', 'aes-256-cbc', 32).
68
+ ssl_algorithm('http://www.w3.org/2001/04/xmlenc#aes192-cbc', 'aes-192-cbc', 24).
69
+
70
+ %! decrypt_xml(+DOMIn, -DOMOut, :KeyCallback, +Options) is det.
71
+ %
72
+ % @arg KeyCallback may be called as follows:
73
+ % - call(KeyCallback, name, KeyName, Key)
74
+ % - call(KeyCallback, public_key, public_key(RSA), Key)
75
+ % - call(KeyCallback, certificate, Certificate, Key)
76
+
77
+ decrypt_xml([], [], _, _):- !.
78
+ decrypt_xml([element(ns(_, 'http://www.w3.org/2001/04/xmlenc#'):'EncryptedData',
79
+ Attributes, EncryptedData)|Siblings],
80
+ [Decrypted|NewSiblings], KeyCallback, Options) :-
81
+ !,
82
+ decrypt_element(Attributes, EncryptedData, Decrypted, KeyCallback, Options),
83
+ decrypt_xml(Siblings, NewSiblings, KeyCallback, Options).
84
+
85
+ decrypt_xml([element(Tag, Attributes, Children)|Siblings],
86
+ [element(Tag, Attributes, NewChildren)|NewSiblings], KeyCallback, Options) :-
87
+ !,
88
+ decrypt_xml(Children, NewChildren, KeyCallback, Options),
89
+ decrypt_xml(Siblings, NewSiblings, KeyCallback, Options).
90
+ decrypt_xml([Other|Siblings], [Other|NewSiblings], KeyCallback, Options):-
91
+ decrypt_xml(Siblings, NewSiblings, KeyCallback, Options).
92
+
93
+ %! decrypt_element(+Attributes,
94
+ %! +EncryptedData,
95
+ %! -DecryptedElement,
96
+ %! +Options).
97
+ %
98
+ % Decrypt an EncryptedData element with Attributes and child
99
+ % EncryptedData DecryptedElement will either be an element/3 term
100
+ % or a string as dictacted by the Type attribute in Attributes.
101
+ % If Attributes does not contain a Type attribute then we assume
102
+ % it is a string
103
+
104
+ :-meta_predicate(decrypt_element(+, +, -, 3, +)).
105
+
106
+ decrypt_element(Attributes, EncryptedData, Decrypted, KeyCallback, Options):-
107
+ XENC = ns(_, 'http://www.w3.org/2001/04/xmlenc#'),
108
+ ( memberchk(element(XENC:'CipherData', _, CipherData), EncryptedData)
109
+ -> true
110
+ ; existence_error(cipher_data, EncryptedData)
111
+ ),
112
+ % The Type attribute is not mandatory. However, 3.1 states that
113
+ % "Without this information, the decryptor will be unable to automatically restore the XML document to its original cleartext form."
114
+ ( memberchk('Type'=Type, Attributes)
115
+ -> true
116
+ ; Type = 'http://www.w3.org/2001/04/xmlenc#Content'
117
+ ),
118
+
119
+ % First of all, determine the algorithm used to encrypt the data
120
+ determine_encryption_algorithm(EncryptedData, Algorithm, IVSize),
121
+
122
+ % There are now two tasks remaining, and they seem like they ought to be quite simple, but unfortunately they are not
123
+ % First, we must determine the key used to encrypt the message
124
+ determine_key(EncryptedData, Key, KeyCallback, Options),
125
+
126
+ % Then, we must determine what the encrypted data even IS
127
+ % If the message includes a CipherValue then this is straightfoward - the encrypted data is the base64-encoded child
128
+ % of this element.
129
+ ( memberchk(element(XENC:'CipherValue', _, CipherValueElement), CipherData)
130
+ -> base64_element(CipherValueElement, CipherValueWithIV),
131
+ string_codes(CipherValueWithIV, CipherValueWithIVCodes),
132
+ length(IVCodes, IVSize),
133
+ append(IVCodes, CipherCodes, CipherValueWithIVCodes),
134
+ string_codes(IV, IVCodes),
135
+ string_codes(CipherText, CipherCodes),
136
+ length(CipherValueWithIVCodes, _),
137
+ crypto_data_decrypt(CipherText, Algorithm, Key, IV, DecryptedStringWithPadding, [padding(none), encoding(octet)])
138
+ ; memberchk(element(XENC:'CipherReference', CipherReferenceAttributes, CipherReference), CipherData)->
139
+ % However, it is allowed to include CipherReference instead. This is an arbitrary URI and a list of transforms to convert the
140
+ % data identified by that URI into the raw octets that represent the encrypted data
141
+ % The URI attribute of the CipherReference element is mandatory
142
+ memberchk('URI'=CipherURI, CipherReferenceAttributes),
143
+ % The transforms attribute is optional, though.
144
+ ( memberchk(element('Transforms', _, Transforms), CipherReference)
145
+ -> true
146
+ ; Transforms = []
147
+ ),
148
+ uri_components(CipherURI, uri_components(Scheme, _, _, _, _)),
149
+ ( ( Scheme == 'http' ; Scheme == 'https')
150
+ % FIXME: URI may not be an *absolute* URL
151
+ -> with_output_to(string(RawCipherValue),
152
+ setup_call_cleanup(http_open(CipherURI, HTTPStream, []),
153
+ copy_stream_data(HTTPStream, current_output),
154
+ close(HTTPStream)))
155
+ ; domain_error(resolvable_uri, CipherURI)
156
+ ),
157
+ apply_ciphertext_transforms(RawCipherValue, Transforms, CipherValue),
158
+ sub_string(CipherValue, 0, IVSize, _, IV),
159
+ sub_string(CipherValue, IVSize, _, 0, CipherText),
160
+ crypto_data_decrypt(CipherText, Algorithm, Key, IV, DecryptedStringWithPadding, [padding(none), encoding(octet)])
161
+ ),
162
+ % The XML-ENC padding scheme does not comply with RFC-1423. This has been noted a few times by people trying to write
163
+ % XML-ENC decryptors backed by OpenSSL, which insists on compliance. The only recourse we have is to disable padding entirely
164
+ % and do it in our application
165
+ xmlenc_padding(DecryptedStringWithPadding, DecryptedString),
166
+ % Now that we have the decrypted data, we can decide whether to turn it into an element or leave it as
167
+ % content
168
+ ( Type == 'http://www.w3.org/2001/04/xmlenc#Element'
169
+ -> setup_call_cleanup(open_string(DecryptedString, StringStream),
170
+ load_structure(StringStream, [Decrypted], [dialect(xmlns), keep_prefix(true)]),
171
+ close(StringStream))
172
+ ; Decrypted = DecryptedString
173
+ ).
174
+
175
+ xmlenc_padding(DecryptedStringWithPadding, DecryptedString):-
176
+ string_length(DecryptedStringWithPadding, _),
177
+ string_codes(DecryptedStringWithPadding, Codes),
178
+ append(_, [LastCode], Codes),
179
+ length(Padding, LastCode),
180
+ append(DecryptedCodes, Padding, Codes),
181
+ !,
182
+ string_codes(DecryptedString, DecryptedCodes).
183
+
184
+ apply_ciphertext_transforms(CipherValue, [], CipherValue):- !.
185
+ apply_ciphertext_transforms(_, [_AnythingElse|_], _):-
186
+ % FIXME: Not implemented
187
+ throw(error(implementation_missing('CipherReference transforms are not implemented', _))).
188
+
189
+ :- meta_predicate determine_key(+,-,3,+).
190
+ determine_key(EncryptedData, Key, KeyCallback, Options):-
191
+ DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
192
+ ( memberchk(element(DS:'KeyInfo', _, KeyInfo), EncryptedData)
193
+ -> true
194
+ ; % Technically the KeyInfo is not mandatory. However, without a key we cannot decrypt
195
+ % so raise an error. In the future Options could contain a key if it is agreed upon
196
+ % by some other channel
197
+ existence_error(key_info, EncryptedData)
198
+ ),
199
+ resolve_key(KeyInfo, Key, KeyCallback, Options).
200
+
201
+ :- meta_predicate resolve_key(+,-,3,+).
202
+
203
+ resolve_key(Info, Key, KeyCallback, Options):-
204
+ % EncryptedKey
205
+ XENC = 'http://www.w3.org/2001/04/xmlenc#',
206
+ memberchk(element(ns(_, XENC):'EncryptedKey', _KeyAttributes, EncryptedKey), Info),
207
+ !,
208
+ % The EncryptedKey is slightly different to EncryptedData. For a start, the algorithms used to decrypt the
209
+ % key are orthogonal to those used for EncryptedData. However we can recursively search for the keys then
210
+ % decrypt them using the different algorithms as needed
211
+ memberchk(element(ns(_, XENC):'EncryptionMethod', MethodAttributes, EncryptionMethod), EncryptedKey),
212
+ memberchk('Algorithm'=Algorithm, MethodAttributes),
213
+
214
+ % Now find the KeyInfo
215
+ determine_key(EncryptedKey, PrivateKey, KeyCallback, Options),
216
+
217
+ memberchk(element(ns(_, XENC):'CipherData', _, CipherData), EncryptedKey),
218
+ memberchk(element(ns(_, XENC):'CipherValue', _, CipherValueElement), CipherData),
219
+ base64_element(CipherValueElement, CipherValue),
220
+ ( Algorithm == 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p'
221
+ -> rsa_private_decrypt(PrivateKey, CipherValue, Key, [encoding(octet), padding(pkcs1_oaep)])
222
+ ; Algorithm == 'http://www.w3.org/2009/xmlenc11#rsa-oaep',
223
+ memberchk(element(ns(_, 'http://www.w3.org/2009/xmlenc11#'):'MGF', MGFAttributes, _), EncryptionMethod),
224
+ memberchk('Algorithm'='http://www.w3.org/2009/xmlenc11#mgf1sha1', MGFAttributes) % This is just the same as rsa-oaep-mgf1p!
225
+ -> rsa_private_decrypt(PrivateKey, CipherValue, Key, [encoding(octet), padding(pkcs1_oaep)])
226
+ ; Algorithm == 'http://www.w3.org/2001/04/xmlenc#rsa-1_5'
227
+ -> rsa_private_decrypt(PrivateKey, CipherValue, Key, [encoding(octet), padding(pkcs1)])
228
+ ; domain_error(key_transport, Algorithm)
229
+ ).
230
+ resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
231
+ % AgreementMethod. FIXME: Not implemented
232
+ XENC = ns(_, 'http://www.w3.org/2001/04/xmlenc#'),
233
+ memberchk(element(XENC:'AgreementMethod', _KeyAttributes, _AgreementMethod), KeyInfo),
234
+ !,
235
+ throw(not_implemented).
236
+ % Additionally, we are allowed to use any elements from XML-DSIG
237
+ resolve_key(KeyInfo, Key, KeyCallback, _Options):-
238
+ % KeyName. Use the callback with type=name and hint=KeyName
239
+ DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
240
+ memberchk(element(DS:'KeyName', _KeyAttributes, [KeyName]), KeyInfo),
241
+ !,
242
+ call(KeyCallback, name, KeyName, Key).
243
+ resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
244
+ % RetrievalMethod. FIXME: Not implemented
245
+ DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
246
+ memberchk(element(DS:'RetrievalMethod', _KeyAttributes, _RetrievalMethod), KeyInfo),
247
+ !,
248
+ throw(not_implemented).
249
+ resolve_key(KeyInfo, Key, KeyCallback, _Options):-
250
+ % KeyValue.
251
+ DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
252
+ memberchk(element(DS:'KeyValue', _KeyAttributes, KeyValue), KeyInfo),
253
+ !,
254
+ ( memberchk(element(DS:'RSAKeyValue', _, RSAKeyValue), KeyInfo)
255
+ -> memberchk(element(DS:'Modulus', _, [ModulusBase64]), RSAKeyValue),
256
+ memberchk(element(DS:'Exponent', _, [ExponentBase64]), RSAKeyValue),
257
+ base64_to_hex(ModulusBase64, Modulus),
258
+ base64_to_hex(ExponentBase64, Exponent),
259
+ call(KeyCallback, public_key, public_key(rsa(Modulus, Exponent, -, -, -, -, -, -)), Key)
260
+ ; memberchk(element(DS:'DSAKeyValue', _, _DSAKeyValue), KeyInfo)
261
+ -> throw(error(not_implemented(dsa_key), _)) % FIXME: Not implemented
262
+ ; existence_error(usable_key_value, KeyValue)
263
+ ).
264
+ resolve_key(KeyInfo, Key, KeyCallback, _Options):-
265
+ % X509Data.
266
+ DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
267
+ memberchk(element(DS:'X509Data', _, X509Data), KeyInfo),
268
+ memberchk(element(DS:'X509Certificate', _, [X509Certificate]), X509Data),
269
+ !,
270
+ load_certificate_from_base64_string(X509Certificate, Certificate),
271
+ call(KeyCallback, certificate, Certificate, Key).
272
+ resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
273
+ % PGPData. FIXME: Not implemented
274
+ DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
275
+ memberchk(element(DS:'PGPData', _KeyAttributes, _PGPData), KeyInfo),
276
+ !,
277
+ throw(not_implemented).
278
+ resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
279
+ % SPKIData. FIXME: Not implemented
280
+ DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
281
+ memberchk(element(DS:'SPKIData', _KeyAttributes, _SPKIData), KeyInfo),
282
+ !,
283
+ throw(not_implemented).
284
+ resolve_key(KeyInfo, _Key, _KeyCallback, _Options):-
285
+ % MgmtData. FIXME: Not implemented
286
+ DS = ns(_, 'http://www.w3.org/2000/09/xmldsig#'),
287
+ memberchk(element(DS:'MgmtData', _KeyAttributes, _SPKIData), KeyInfo),
288
+ !,
289
+ throw(not_implemented).
290
+ resolve_key(Info, _, _, _):-
291
+ % The XML-ENC standard allows for arbitrary other means of transmitting keys in application-specific
292
+ % protocols. This is not supported here, though. In the future a callback could be provided in Options
293
+ % to obtain the key information from a KeyInfo structure.
294
+ existence_error(usable_key, Info).
295
+
296
+
297
+ base64_to_hex(Base64, Hex):-
298
+ base64(Raw, Base64),
299
+ atom_codes(Raw, Codes),
300
+ hex_bytes(Hex0, Codes),
301
+ string_upper(Hex0, Hex).
302
+
303
+
304
+ determine_encryption_algorithm(EncryptedData, Algorithm, IVSize):-
305
+ XENC = ns(_, 'http://www.w3.org/2001/04/xmlenc#'),
306
+ ( memberchk(element(XENC:'EncryptionMethod', EncryptionMethodAttributes, _), EncryptedData)
307
+ -> % This is a mandatory attribute
308
+ memberchk('Algorithm'=XMLAlgorithm, EncryptionMethodAttributes),
309
+ ( ssl_algorithm(XMLAlgorithm, Algorithm, IVSize)
310
+ -> true
311
+ ; domain_error(block_cipher, XMLAlgorithm)
312
+ )
313
+ % In theory the EncryptionMethod is optional. In pracitse though, if the method is not supplied we
314
+ % cannot decrypt the data. In the future we could support encryption_algorithm/1 as an option to
315
+ % decrypt_element/3 but for now raise an exception
316
+ ; existence_error(encryption_method, EncryptedData)
317
+ ).
318
+
319
+ base64_element([CipherValueElement], CipherValue):-
320
+ atom_codes(CipherValueElement, Base64Codes),
321
+ delete_newlines(Base64Codes, TrimmedCodes),
322
+ string_codes(Trimmed, TrimmedCodes),
323
+ base64(CipherValue, Trimmed).
324
+
325
+ delete_newlines([], []):- !.
326
+ delete_newlines([13|As], B):- !, delete_newlines(As, B).
327
+ delete_newlines([10|As], B):- !, delete_newlines(As, B).
328
+ delete_newlines([A|As], [A|B]):- !, delete_newlines(As, B).
329
+
330
+
331
+
332
+ %! load_certificate_from_base64_string(+String, -Certificate) is det.
333
+ %
334
+ % Loads a certificate from a string, adding newlines and header
335
+ % where appropriate so that OpenSSL 1.0.1+ will be able to parse it
336
+
337
+ load_certificate_from_base64_string(UnnormalizedData, Certificate):-
338
+ normalize_space(codes(Codes), UnnormalizedData),
339
+ % Break into 64-byte chunks
340
+ chunk_certificate(Codes, Chunks),
341
+ atomics_to_string(["-----BEGIN CERTIFICATE-----"|Chunks], '\n', CompleteCertificate),
342
+ setup_call_cleanup(open_string(CompleteCertificate, StringStream),
343
+ load_certificate(StringStream, Certificate),
344
+ close(StringStream)).
345
+
346
+ chunk_certificate(Codes, [Chunk|Chunks]):-
347
+ length(ChunkCodes, 64),
348
+ append(ChunkCodes, Rest, Codes),
349
+ !,
350
+ string_codes(Chunk, ChunkCodes),
351
+ chunk_certificate(Rest, Chunks).
352
+ chunk_certificate([], ["-----END CERTIFICATE-----\n"]):- !.
353
+ chunk_certificate(LastCodes, [LastChunk, "-----END CERTIFICATE-----\n"]):-
354
+ string_codes(LastChunk, LastCodes).
@@ -0,0 +1,8 @@
1
+ /* Creator: make/0
2
+
3
+ Purpose: Provide index for autoload
4
+ */
5
+
6
+ index(zopen(?,?,?), zlib, zlib).
7
+ index(gzopen(?,?,?), zlib, zlib).
8
+ index(gzopen(?,?,?,?), zlib, zlib).
@@ -0,0 +1,112 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker
4
+ E-mail: J.Wielemaker@vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2006-2016, University of Amsterdam
7
+ VU University Amsterdam
8
+ All rights reserved.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions
12
+ are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright
15
+ notice, this list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright
18
+ notice, this list of conditions and the following disclaimer in
19
+ the documentation and/or other materials provided with the
20
+ distribution.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ POSSIBILITY OF SUCH DAMAGE.
34
+ */
35
+
36
+ :- module(zlib,
37
+ [ zopen/3, % +Stream, -ZStream, +Option
38
+ gzopen/3, % +File, +Mode, -Stream
39
+ gzopen/4 % +File, +Mode, -Stream, +Options
40
+ ]).
41
+ :- autoload(library(apply),[partition/4]).
42
+ :- autoload(library(error),[must_be/2]).
43
+ :- autoload(library(option),[merge_options/3,option/2]).
44
+
45
+ :- predicate_options(zopen/3, 3,
46
+ [ format(oneof([gzip,deflate,raw_deflate])),
47
+ multi_part(boolean),
48
+ close_parent(boolean),
49
+ level(between(0,9))
50
+ ]).
51
+ :- predicate_options(gzopen/4, 4,
52
+ [ pass_to(zopen/3, 3),
53
+ pass_to(system:open/4, 4)
54
+ ]).
55
+
56
+ /** <module> Zlib wrapper for SWI-Prolog
57
+
58
+ Read/write compressed data based on the zlib library.
59
+
60
+ @author Jan Wielemaker
61
+ @see http://www.zlib.net/
62
+ @see http://www.swi-prolog.org/packages/zlib.html
63
+ */
64
+
65
+ :- use_foreign_library(foreign(zlib4pl)).
66
+ :- public zdebug/1. % Set debug level
67
+
68
+ %! gzopen(+File, +Mode, -Stream) is det.
69
+ %! gzopen(+File, +Mode, -Stream, +Options) is det.
70
+ %
71
+ % Open a file compatible with the gzip program. Note that if a
72
+ % file is opened in =append= mode, a second gzip image will be
73
+ % added to the end of the file. The gzip standard defines that a
74
+ % file can hold multiple gzip images and inflating the file
75
+ % results in a concatenated stream of all inflated images.
76
+ %
77
+ % Options are passed to open/4 and zopen/3. Default format is
78
+ % =gzip=.
79
+
80
+ gzopen(File, Mode, Stream) :-
81
+ gzopen(File, Mode, Stream, []).
82
+
83
+ gzopen(File, Mode, Stream, Options) :-
84
+ must_be(oneof([read,write,append]), Mode),
85
+ partition(zoption, Options, ZOptions0, OpenOptions),
86
+ merge_options(ZOptions0,
87
+ [ format(gzip),
88
+ close_parent(true)
89
+ ], ZOptions),
90
+ open(File, Mode, Stream0, OpenOptions),
91
+ zopen(Stream0, Stream, ZOptions),
92
+ set_stream(Stream, file_name(File)),
93
+ ( option(alias(Alias), ZOptions)
94
+ -> set_stream(Stream, alias(Alias))
95
+ ; true
96
+ ).
97
+
98
+
99
+ zoption(format(_)).
100
+ zoption(multi_part(_)).
101
+ zoption(level(_)).
102
+ zoption(alias(_)).
103
+
104
+ %! http:encoding_filter(+Encoding, +In0, -In) is semidet.
105
+ %
106
+ % Act as plugin for library(http/http_open) for processing content
107
+ % with =|Content-encoding: gzip|=
108
+
109
+ http:encoding_filter(gzip, In0, In) :-
110
+ zopen(In0, In,
111
+ [ close_parent(true)
112
+ ]).
@@ -0,0 +1,105 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker
4
+ E-mail: J.Wielemaker@vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2010-2021, VU University Amsterdam
7
+ SWI-Prolog Solutions b.v.
8
+ All rights reserved.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions
12
+ are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright
15
+ notice, this list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright
18
+ notice, this list of conditions and the following disclaimer in
19
+ the documentation and/or other materials provided with the
20
+ distribution.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ POSSIBILITY OF SUCH DAMAGE.
34
+ */
35
+
36
+ :- module(fastrw,
37
+ [ fast_read/1, % -Term
38
+ fast_write/1, % +Term
39
+ fast_read/2, % +Stream, -Term
40
+ fast_write/2, % +Stream, +Term
41
+ fast_write_to_string/3 % +Term, -String, ?Tail
42
+ ]).
43
+ :- autoload(library(lists),[append/3]).
44
+
45
+
46
+ /** <module> Fast reading and writing of terms
47
+
48
+ This library provides the SICStus and Ciao library(fastrw) interface.
49
+ The idea behind this library is to design a fast serialization for
50
+ Prolog terms. Ideally, this should be portable between Prolog
51
+ implementation. Unfortunately there is no portably binary term format
52
+ defined.
53
+
54
+ The current implementation is based on PL_record_external(), which
55
+ provides a binary representation of terms that is processed efficiently
56
+ and can handle subterm sharing, cycles and attributed variables. In
57
+ other words, this library can handle any Prolog term except _blobs_ such
58
+ as stream handles, database references, etc. We try to keep the format
59
+ compatible between versions, but this is not guaranteed. Conversion is
60
+ always possible by reading a database using the old version, dump it
61
+ using write_canonical/1 and read it into the new version.
62
+
63
+ This library is built upon the following built in predicates:
64
+
65
+ - fast_term_serialized/2 translates between a term and its
66
+ serialization as a byte string.
67
+ - fast_read/2 and fast_write/2 read/write binary serializations.
68
+
69
+ @tbd Establish a portable binary format.
70
+ @compat The format is not compatible to SICStus/Ciao (which are not
71
+ compatible either). Future versions of this library might
72
+ implement a different encoding.
73
+ @bug The current implementation of fast_read/1 __is not safe__.
74
+ It is guaranteed to safely read terms written using
75
+ fast_write/1, but may crash on arbitrary input. The
76
+ implementation does perform some basic sanity checks,
77
+ including validation of the magic start byte.
78
+ */
79
+
80
+ %! fast_read(-Term)
81
+ %
82
+ % The next term is read from current standard input and is unified
83
+ % with Term. The syntax of the term must agree with fast_read /
84
+ % fast_write format. If the end of the input has been reached,
85
+ % Term is unified with the term =end_of_file=.
86
+
87
+ fast_read(Term) :-
88
+ fast_read(current_input, Term).
89
+
90
+ %! fast_write(+Term)
91
+ %
92
+ % Output Term in a way that fast_read/1 and fast_read/2 will be
93
+ % able to read it back.
94
+
95
+ fast_write(Term) :-
96
+ fast_write(current_output, Term).
97
+
98
+ %! fast_write_to_string(+Term, -String, ?Tail)
99
+ %
100
+ % Perform a fast-write to the difference-slist String\Tail.
101
+
102
+ fast_write_to_string(T, S, R) :-
103
+ fast_term_serialized(T, String),
104
+ string_codes(String, Codes),
105
+ append(Codes, R, S).
@@ -0,0 +1,80 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker
4
+ E-mail: J.Wielemaker@vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 1985-2002, University of Amsterdam
7
+ All rights reserved.
8
+
9
+ Redistribution and use in source and binary forms, with or without
10
+ modification, are permitted provided that the following conditions
11
+ are met:
12
+
13
+ 1. Redistributions of source code must retain the above copyright
14
+ notice, this list of conditions and the following disclaimer.
15
+
16
+ 2. Redistributions in binary form must reproduce the above copyright
17
+ notice, this list of conditions and the following disclaimer in
18
+ the documentation and/or other materials provided with the
19
+ distribution.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
+ POSSIBILITY OF SUCH DAMAGE.
33
+ */
34
+
35
+ :- module(files,
36
+ [ can_open_file/2, % +Path, +Mode
37
+ chdir/1 % +Dir
38
+ ]).
39
+
40
+ %! can_open_file(+Path, +Mode)
41
+ %
42
+ % Succeeds if the user has access to `File' in mode `Mode'. Fails
43
+ % silently if this is not the case. `Mode' is one of {read,
44
+ % write, both}. This used to be difficult. Since we have
45
+ % access_file/2 it is merely a Quintus compatibility predicate
46
+ % and should be in quintus.pl. We will leave it here for compatibility
47
+ % reasons.
48
+ %
49
+ % @deprecated Use access_file/2.
50
+
51
+ can_open_file(File, read) :-
52
+ !,
53
+ access_file(File, read).
54
+ can_open_file(File, write) :-
55
+ !,
56
+ ( exists_file(File)
57
+ -> access_file(File, write)
58
+ ; path_dir_name(File, Dir),
59
+ access_file(Dir, write)
60
+ ).
61
+ can_open_file(File, both) :-
62
+ access_file(File, read),
63
+ access_file(File, write).
64
+
65
+ path_dir_name(File, Dir) :-
66
+ file_base_name(File, Base),
67
+ atom_concat(RawDir, Base, File),
68
+ ( RawDir == ''
69
+ -> Dir = '.'
70
+ ; Dir = RawDir
71
+ ).
72
+
73
+ %! chdir(+Dir) is det.
74
+ %
75
+ % Change Working Directory.
76
+ %
77
+ % @deprecated Use using working_directory/2.
78
+
79
+ chdir(Dir) :-
80
+ working_directory(_Old, Dir).