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,644 @@
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) 2002-2023, University of Amsterdam
7
+ VU University Amsterdam
8
+ CWI, Amsterdam
9
+ SWI-Prolog Solutions b.v.
10
+ All rights reserved.
11
+
12
+ Redistribution and use in source and binary forms, with or without
13
+ modification, are permitted provided that the following conditions
14
+ are met:
15
+
16
+ 1. Redistributions of source code must retain the above copyright
17
+ notice, this list of conditions and the following disclaimer.
18
+
19
+ 2. Redistributions in binary form must reproduce the above copyright
20
+ notice, this list of conditions and the following disclaimer in
21
+ the documentation and/or other materials provided with the
22
+ distribution.
23
+
24
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ :- module(files_ex,
39
+ [ set_time_file/3, % +File, -OldTimes, +NewTimes
40
+ link_file/3, % +OldPath, +NewPath, +Type
41
+ chmod/2, % +File, +Mode
42
+ relative_file_name/3, % ?AbsPath, +RelTo, ?RelPath
43
+ directory_file_path/3, % +Dir, +File, -Path
44
+ directory_member/3, % +Dir, -Member, +Options
45
+ copy_file/2, % +From, +To
46
+ make_directory_path/1, % +Directory
47
+ ensure_directory/1, % +Directory
48
+ copy_directory/2, % +Source, +Destination
49
+ delete_directory_and_contents/1, % +Dir
50
+ delete_directory_contents/1 % +Dir
51
+ ]).
52
+ :- autoload(library(apply), [maplist/2, maplist/3, foldl/4]).
53
+ :- autoload(library(error),
54
+ [ permission_error/3,
55
+ must_be/2,
56
+ domain_error/2,
57
+ instantiation_error/1
58
+ ]).
59
+ :- autoload(library(lists), [member/2]).
60
+ :- autoload(library(nb_set), [empty_nb_set/1, add_nb_set/3]).
61
+ :- autoload(library(option), [dict_options/2]).
62
+
63
+
64
+ /** <module> Extended operations on files
65
+
66
+ This module provides additional operations on files. This covers both
67
+ more obscure and possible non-portable low-level operations and
68
+ high-level utilities.
69
+
70
+ Using these Prolog primitives is typically to be preferred over using
71
+ operating system primitives through shell/1 or process_create/3 because
72
+ (1) there are no potential file name quoting issues, (2) there is no
73
+ dependency on operating system commands and (3) using the
74
+ implementations from this library is usually faster.
75
+ */
76
+
77
+ :- predicate_options(directory_member/3, 3,
78
+ [ recursive(boolean),
79
+ follow_links(boolean),
80
+ file_type(atom),
81
+ extensions(list(atom)),
82
+ file_errors(oneof([fail,warning,error])),
83
+ access(oneof([read,write,execute])),
84
+ matches(text),
85
+ exclude(text),
86
+ exclude_directory(text),
87
+ hidden(boolean)
88
+ ]).
89
+
90
+
91
+ :- use_foreign_library(foreign(files)).
92
+
93
+ %! set_time_file(+File, -OldTimes, +NewTimes) is det.
94
+ %
95
+ % Query and set POSIX time attributes of a file. Both OldTimes and
96
+ % NewTimes are lists of option-terms. Times are represented in
97
+ % SWI-Prolog's standard floating point numbers. New times may be
98
+ % specified as =now= to indicate the current time. Defined options
99
+ % are:
100
+ %
101
+ % * access(Time)
102
+ % Describes the time of last access of the file. This value
103
+ % can be read and written.
104
+ %
105
+ % * modified(Time)
106
+ % Describes the time the contents of the file was last
107
+ % modified. This value can be read and written.
108
+ %
109
+ % * changed(Time)
110
+ % Describes the time the file-structure itself was changed by
111
+ % adding (link()) or removing (unlink()) names.
112
+ %
113
+ % Below are some example queries. The first retrieves the
114
+ % access-time, while the second sets the last-modified time to the
115
+ % current time.
116
+ %
117
+ % ==
118
+ % ?- set_time_file(foo, [access(Access)], []).
119
+ % ?- set_time_file(foo, [], [modified(now)]).
120
+ % ==
121
+
122
+ %! link_file(+OldPath, +NewPath, +Type) is det.
123
+ %
124
+ % Create a link in the filesystem from NewPath to OldPath. Type
125
+ % defines the type of link and is one of =hard= or =symbolic=.
126
+ %
127
+ % With some limitations, these functions also work on Windows. First
128
+ % of all, the underlying filesystem must support links. This requires
129
+ % NTFS. Second, symbolic links are only supported in Vista and later.
130
+ %
131
+ % @error domain_error(link_type, Type) if the requested link-type
132
+ % is unknown or not supported on the target OS.
133
+
134
+ %! relative_file_name(+Path:atom, +RelToFile:atom, -RelPath:atom) is det.
135
+ %! relative_file_name(-Path:atom, +RelToFile:atom, +RelPath:atom) is det.
136
+ %
137
+ % True when RelPath is Path, relative to the _file_ RelToFile. Path and
138
+ % RelTo are first handed to absolute_file_name/2, which makes the
139
+ % absolute *and* canonical. Below are two examples:
140
+ %
141
+ % ```
142
+ % ?- relative_file_name('/home/janw/nice',
143
+ % '/home/janw/deep/dir/file', Path).
144
+ % Path = '../../nice'.
145
+ %
146
+ % ?- relative_file_name(Path, '/home/janw/deep/dir/file', '../../nice').
147
+ % Path = '/home/janw/nice'.
148
+ % ```
149
+ %
150
+ % Add a terminating `/` to get a path relative to a _directory_, e.g.
151
+ %
152
+ % ?- relative_file_name('/home/janw/deep/dir/file', './', Path).
153
+ % Path = 'deep/dir/file'.
154
+ %
155
+ % @param All paths must be in canonical POSIX notation, i.e.,
156
+ % using / to separate segments in the path. See
157
+ % prolog_to_os_filename/2.
158
+ % @bug It would probably have been cleaner to use a directory
159
+ % as second argument. We can not do such dynamically as this
160
+ % predicate is defined as a _syntactical_ operation, which
161
+ % implies it may be used for non-existing paths and URLs.
162
+
163
+ relative_file_name(Path, RelTo, RelPath) :- % +,+,-
164
+ nonvar(Path),
165
+ !,
166
+ absolute_file_name(Path, AbsPath),
167
+ absolute_file_name(RelTo, AbsRelTo),
168
+ atomic_list_concat(PL, /, AbsPath),
169
+ atomic_list_concat(RL, /, AbsRelTo),
170
+ delete_common_prefix(PL, RL, PL1, PL2),
171
+ to_dot_dot(PL2, DotDot, PL1),
172
+ ( DotDot == []
173
+ -> RelPath = '.'
174
+ ; atomic_list_concat(DotDot, /, RelPath)
175
+ ).
176
+ relative_file_name(Path, RelTo, RelPath) :-
177
+ ( is_absolute_file_name(RelPath)
178
+ -> Path = RelPath
179
+ ; file_directory_name(RelTo, RelToDir),
180
+ directory_file_path(RelToDir, RelPath, Path0),
181
+ absolute_file_name(Path0, Path)
182
+ ).
183
+
184
+ delete_common_prefix([H|T01], [H|T02], T1, T2) :-
185
+ !,
186
+ delete_common_prefix(T01, T02, T1, T2).
187
+ delete_common_prefix(T1, T2, T1, T2).
188
+
189
+ to_dot_dot([], Tail, Tail).
190
+ to_dot_dot([_], Tail, Tail) :- !.
191
+ to_dot_dot([_|T0], ['..'|T], Tail) :-
192
+ to_dot_dot(T0, T, Tail).
193
+
194
+
195
+ %! directory_file_path(+Directory, +File, -Path) is det.
196
+ %! directory_file_path(?Directory, ?File, +Path) is det.
197
+ %
198
+ % True when Path is the full path-name for File in Dir. This is
199
+ % comparable to atom_concat(Directory, File, Path), but it ensures
200
+ % there is exactly one / between the two parts. Notes:
201
+ %
202
+ % * In mode (+,+,-), if File is given and absolute, Path
203
+ % is unified to File.
204
+ % * Mode (-,-,+) uses file_directory_name/2 and file_base_name/2
205
+
206
+ directory_file_path(Dir, File, Path) :-
207
+ nonvar(Dir), nonvar(File),
208
+ !,
209
+ ( ( is_absolute_file_name(File)
210
+ ; Dir == '.'
211
+ ; Dir == ''
212
+ )
213
+ -> Path = File
214
+ ; sub_atom(Dir, _, _, 0, /)
215
+ -> atom_concat(Dir, File, Path)
216
+ ; atomic_list_concat([Dir, /, File], Path)
217
+ ).
218
+ directory_file_path(Dir, File, Path) :-
219
+ nonvar(Path),
220
+ !,
221
+ ( nonvar(Dir)
222
+ -> ( ( Dir == '.'
223
+ -> true
224
+ ; Dir == ''
225
+ ),
226
+ \+ is_absolute_file_name(Path)
227
+ -> File = Path
228
+ ; sub_atom(Dir, _, _, 0, /)
229
+ -> atom_concat(Dir, File, Path)
230
+ ; atom_concat(Dir, /, TheDir)
231
+ -> atom_concat(TheDir, File, Path)
232
+ )
233
+ ; nonvar(File)
234
+ -> atom_concat(Dir0, File, Path),
235
+ strip_trailing_slash(Dir0, Dir)
236
+ ; file_directory_name(Path, Dir),
237
+ file_base_name(Path, File)
238
+ ).
239
+ directory_file_path(Dir, _, _) :-
240
+ instantiation_error(Dir).
241
+
242
+ strip_trailing_slash(Dir0, Dir) :-
243
+ ( atom_concat(D, /, Dir0),
244
+ D \== ''
245
+ -> Dir = D
246
+ ; Dir = Dir0
247
+ ).
248
+
249
+
250
+ %! directory_member(+Directory, -Member, +Options) is nondet.
251
+ %
252
+ % True when Member is a path inside Directory. Options defined are:
253
+ %
254
+ % - recursive(+Boolean)
255
+ % If `true` (default `false`), recurse into subdirectories
256
+ % - follow_links(+Boolean)
257
+ % If `true` (default), follow symbolic links.
258
+ % - file_type(+Type)
259
+ % See absolute_file_name/3.
260
+ % - extensions(+List)
261
+ % Only return entries whose extension appears in List.
262
+ % - file_errors(+Errors)
263
+ % How to handle errors. One of `fail`, `warning` or `error`.
264
+ % Default is `warning`. Errors notably happen if a directory is
265
+ % unreadable or a link points nowhere.
266
+ % - access(+Access)
267
+ % Only return entries with Access
268
+ % - matches(+GlobPattern)
269
+ % Only return files that match GlobPattern.
270
+ % - exclude(+GlobPattern)
271
+ % Exclude files matching GlobPattern.
272
+ % - exclude_directory(+GlobPattern)
273
+ % Do not recurse into directories matching GlobPattern.
274
+ % - hidden(+Boolean)
275
+ % If `true` (default), also return _hidden_ files.
276
+ %
277
+ % This predicate is safe against cycles introduced by symbolic links
278
+ % to directories.
279
+ %
280
+ % The idea for a non-deterministic file search predicate comes from
281
+ % Nicos Angelopoulos.
282
+
283
+ directory_member(Directory, Member, Options) :-
284
+ dict_options(Dict, Options),
285
+ ( Dict.get(recursive) == true,
286
+ \+ Dict.get(follow_links) == false
287
+ -> empty_nb_set(Visited),
288
+ DictOptions = Dict.put(visited, Visited)
289
+ ; DictOptions = Dict
290
+ ),
291
+ directory_member_dict(Directory, Member, DictOptions).
292
+
293
+ directory_member_dict(Directory, Member, Dict) :-
294
+ directory_files(Directory, Files, Dict),
295
+ member(Entry, Files),
296
+ \+ special(Entry),
297
+ directory_file_path(Directory, Entry, AbsEntry),
298
+ filter_link(AbsEntry, Dict),
299
+ ( exists_directory(AbsEntry)
300
+ -> ( filter_dir_member(AbsEntry, Entry, Dict),
301
+ Member = AbsEntry
302
+ ; filter_directory(Entry, Dict),
303
+ Dict.get(recursive) == true,
304
+ \+ hidden_file(Entry, Dict),
305
+ no_link_cycle(AbsEntry, Dict),
306
+ directory_member_dict(AbsEntry, Member, Dict)
307
+ )
308
+ ; filter_dir_member(AbsEntry, Entry, Dict),
309
+ Member = AbsEntry
310
+ ).
311
+
312
+ directory_files(Directory, Files, Dict) :-
313
+ Errors = Dict.get(file_errors),
314
+ !,
315
+ errors_directory_files(Errors, Directory, Files).
316
+ directory_files(Directory, Files, _Dict) :-
317
+ errors_directory_files(warning, Directory, Files).
318
+
319
+ errors_directory_files(fail, Directory, Files) :-
320
+ catch(directory_files(Directory, Files), _, fail).
321
+ errors_directory_files(warning, Directory, Files) :-
322
+ catch(directory_files(Directory, Files), E,
323
+ ( print_message(warning, E),
324
+ fail)).
325
+ errors_directory_files(error, Directory, Files) :-
326
+ directory_files(Directory, Files).
327
+
328
+
329
+ filter_link(File, Dict) :-
330
+ \+ ( Dict.get(follow_links) == false,
331
+ read_link(File, _, _)
332
+ ).
333
+
334
+ no_link_cycle(Directory, Dict) :-
335
+ Visited = Dict.get(visited),
336
+ !,
337
+ absolute_file_name(Directory, Canonical,
338
+ [ file_type(directory)
339
+ ]),
340
+ add_nb_set(Canonical, Visited, true).
341
+ no_link_cycle(_, _).
342
+
343
+ hidden_file(Entry, Dict) :-
344
+ false == Dict.get(hidden),
345
+ sub_atom(Entry, 0, _, _, '.').
346
+
347
+ %! filter_dir_member(+Absolute, +BaseName, +Options)
348
+ %
349
+ % True when the given file satisfies the filter expressions.
350
+
351
+ filter_dir_member(_AbsEntry, Entry, Dict) :-
352
+ Exclude = Dict.get(exclude),
353
+ wildcard_match(Exclude, Entry),
354
+ !, fail.
355
+ filter_dir_member(_AbsEntry, Entry, Dict) :-
356
+ Include = Dict.get(matches),
357
+ \+ wildcard_match(Include, Entry),
358
+ !, fail.
359
+ filter_dir_member(AbsEntry, _Entry, Dict) :-
360
+ Type = Dict.get(file_type),
361
+ \+ matches_type(Type, AbsEntry),
362
+ !, fail.
363
+ filter_dir_member(_AbsEntry, Entry, Dict) :-
364
+ ExtList = Dict.get(extensions),
365
+ file_name_extension(_, Ext, Entry),
366
+ \+ memberchk(Ext, ExtList),
367
+ !, fail.
368
+ filter_dir_member(AbsEntry, _Entry, Dict) :-
369
+ Access = Dict.get(access),
370
+ \+ access_file(AbsEntry, Access),
371
+ !, fail.
372
+ filter_dir_member(_AbsEntry, Entry, Dict) :-
373
+ hidden_file(Entry, Dict),
374
+ !, fail.
375
+ filter_dir_member(_, _, _).
376
+
377
+ matches_type(directory, Entry) :-
378
+ !,
379
+ exists_directory(Entry).
380
+ matches_type(regular, Entry) :-
381
+ !,
382
+ exists_file(Entry).
383
+ matches_type(Type, Entry) :-
384
+ \+ exists_directory(Entry),
385
+ user:prolog_file_type(Ext, Type),
386
+ file_name_extension(_, Ext, Entry).
387
+
388
+
389
+ %! filter_directory(+Entry, +Dict) is semidet.
390
+ %
391
+ % Implement the exclude_directory(+GlobPattern) option.
392
+
393
+ filter_directory(Entry, Dict) :-
394
+ Exclude = Dict.get(exclude_directory),
395
+ wildcard_match(Exclude, Entry),
396
+ !, fail.
397
+ filter_directory(_, _).
398
+
399
+
400
+ %! copy_file(+From, +To) is det.
401
+ %
402
+ % Copy a file into a new file or directory. The data is copied as
403
+ % binary data.
404
+
405
+ copy_file(From, To) :-
406
+ destination_file(To, From, Dest),
407
+ setup_call_cleanup(
408
+ open(Dest, write, Out, [type(binary)]),
409
+ copy_from(From, Out),
410
+ close(Out)).
411
+
412
+ copy_from(File, Stream) :-
413
+ setup_call_cleanup(
414
+ open(File, read, In, [type(binary)]),
415
+ copy_stream_data(In, Stream),
416
+ close(In)).
417
+
418
+ destination_file(Dir, File, Dest) :-
419
+ exists_directory(Dir),
420
+ !,
421
+ file_base_name(File, Base),
422
+ directory_file_path(Dir, Base, Dest).
423
+ destination_file(Dest, _, Dest).
424
+
425
+
426
+ %! make_directory_path(+Dir) is det.
427
+ %
428
+ % Create Dir and all required components (like mkdir -p). Can
429
+ % raise various file-specific exceptions.
430
+
431
+ make_directory_path(Dir) :-
432
+ make_directory_path_2(Dir),
433
+ !.
434
+ make_directory_path(Dir) :-
435
+ permission_error(create, directory, Dir).
436
+
437
+ make_directory_path_2(Dir) :-
438
+ exists_directory(Dir),
439
+ !.
440
+ make_directory_path_2(Dir) :-
441
+ atom_concat(RealDir, '/', Dir),
442
+ RealDir \== '',
443
+ !,
444
+ make_directory_path_2(RealDir).
445
+ make_directory_path_2(Dir) :-
446
+ Dir \== (/),
447
+ !,
448
+ file_directory_name(Dir, Parent),
449
+ make_directory_path_2(Parent),
450
+ ensure_directory_(Dir).
451
+
452
+ %! ensure_directory(+Dir) is det.
453
+ %
454
+ % Ensure the directory Dir exists. Similar to make_directory_path/1,
455
+ % but creates at most one new directory, i.e., the directory or its
456
+ % direct parent must exist.
457
+
458
+ ensure_directory(Dir) :-
459
+ exists_directory(Dir),
460
+ !.
461
+ ensure_directory(Dir) :-
462
+ atom_concat(RealDir, '/', Dir),
463
+ RealDir \== '',
464
+ !,
465
+ ensure_directory(RealDir).
466
+ ensure_directory(Dir) :-
467
+ ensure_directory_(Dir).
468
+
469
+ ensure_directory_(Dir) :-
470
+ E = error(existence_error(directory, _), _),
471
+ catch(make_directory(Dir), E,
472
+ ( exists_directory(Dir)
473
+ -> true
474
+ ; throw(E)
475
+ )).
476
+
477
+
478
+ %! copy_directory(+From, +To) is det.
479
+ %
480
+ % Copy the contents of the directory From to To (recursively). If
481
+ % To is the name of an existing directory, the _contents_ of From
482
+ % are copied into To. I.e., no subdirectory using the basename of
483
+ % From is created.
484
+
485
+ copy_directory(From, To) :-
486
+ ( exists_directory(To)
487
+ -> true
488
+ ; make_directory(To)
489
+ ),
490
+ directory_files(From, Entries),
491
+ maplist(copy_directory_content(From, To), Entries).
492
+
493
+ copy_directory_content(_From, _To, Special) :-
494
+ special(Special),
495
+ !.
496
+ copy_directory_content(From, To, Entry) :-
497
+ directory_file_path(From, Entry, Source),
498
+ directory_file_path(To, Entry, Dest),
499
+ ( exists_directory(Source)
500
+ -> copy_directory(Source, Dest)
501
+ ; copy_file(Source, Dest)
502
+ ).
503
+
504
+ special(.).
505
+ special(..).
506
+
507
+ %! delete_directory_and_contents(+Dir) is det.
508
+ %
509
+ % Recursively remove the directory Dir and its contents. If Dir is
510
+ % a symbolic link or symbolic links inside Dir are encountered,
511
+ % the links are removed rather than their content. Use with care!
512
+
513
+ delete_directory_and_contents(Dir) :-
514
+ read_link(Dir, _, _),
515
+ !,
516
+ delete_file(Dir).
517
+ delete_directory_and_contents(Dir) :-
518
+ directory_files(Dir, Files),
519
+ maplist(delete_directory_contents(Dir), Files),
520
+ E = error(existence_error(directory, _), _),
521
+ catch(delete_directory(Dir), E,
522
+ ( \+ exists_directory(Dir)
523
+ -> true
524
+ ; throw(E)
525
+ )).
526
+
527
+ delete_directory_contents(_, Entry) :-
528
+ special(Entry),
529
+ !.
530
+ delete_directory_contents(Dir, Entry) :-
531
+ directory_file_path(Dir, Entry, Delete),
532
+ ( exists_directory(Delete)
533
+ -> delete_directory_and_contents(Delete)
534
+ ; E = error(existence_error(file, _), _),
535
+ catch(delete_file(Delete), E,
536
+ ( \+ exists_file(Delete)
537
+ -> true
538
+ ; throw(E)))
539
+ ).
540
+
541
+ %! delete_directory_contents(+Dir) is det.
542
+ %
543
+ % Remove all content from directory Dir, without removing Dir
544
+ % itself. Similar to delete_directory_and_contents/2, if symbolic
545
+ % links are encountered in Dir, the links are removed rather than
546
+ % their content.
547
+
548
+ delete_directory_contents(Dir) :-
549
+ directory_files(Dir, Files),
550
+ maplist(delete_directory_contents(Dir), Files).
551
+
552
+
553
+ %! chmod(+File, +Spec) is det.
554
+ %
555
+ % Set the mode of the target file. Spec is one of `+Mode`, `-Mode` or
556
+ % a plain `Mode`, which adds new permissions, revokes permissions or
557
+ % sets the exact permissions. `Mode` itself is an integer, a POSIX
558
+ % mode name or a list of POSIX mode names. Defines names are `suid`,
559
+ % `sgid`, `svtx` and all names defined by the regular expression
560
+ % =|[ugo]*[rwx]*|=. Specifying none of "ugo" is the same as specifying
561
+ % all of them. For example, to make a file executable for the owner
562
+ % (user) and group, we can use:
563
+ %
564
+ % ```
565
+ % ?- chmod(myfile, +ugx).
566
+ % ```
567
+
568
+ chmod(File, +Spec) :-
569
+ must_be(ground, Spec),
570
+ !,
571
+ mode_bits(Spec, Bits),
572
+ file_mode_(File, Mode0),
573
+ Mode is Mode0 \/ Bits,
574
+ chmod_(File, Mode).
575
+ chmod(File, -Spec) :-
576
+ must_be(ground, Spec),
577
+ !,
578
+ mode_bits(Spec, Bits),
579
+ file_mode_(File, Mode0),
580
+ Mode is Mode0 /\ \Bits,
581
+ chmod_(File, Mode).
582
+ chmod(File, Spec) :-
583
+ must_be(ground, Spec),
584
+ !,
585
+ mode_bits(Spec, Bits),
586
+ chmod_(File, Bits).
587
+
588
+ mode_bits(Spec, Spec) :-
589
+ integer(Spec),
590
+ !.
591
+ mode_bits(Name, Bits) :-
592
+ atom(Name),
593
+ !,
594
+ ( file_mode(Name, Bits)
595
+ -> true
596
+ ; domain_error(posix_file_mode, Name)
597
+ ).
598
+ mode_bits(Spec, Bits) :-
599
+ must_be(list(atom), Spec),
600
+ phrase(mode_bits(0, Bits), Spec).
601
+
602
+ mode_bits(Bits0, Bits) -->
603
+ [Spec], !,
604
+ ( { file_mode(Spec, B), Bits1 is Bits0\/B }
605
+ -> mode_bits(Bits1, Bits)
606
+ ; { domain_error(posix_file_mode, Spec) }
607
+ ).
608
+ mode_bits(Bits, Bits) -->
609
+ [].
610
+
611
+ file_mode(suid, 0o4000).
612
+ file_mode(sgid, 0o2000).
613
+ file_mode(svtx, 0o1000).
614
+ file_mode(Name, Bits) :-
615
+ atom_chars(Name, Chars),
616
+ phrase(who_mask(0, WMask0), Chars, Rest),
617
+ ( WMask0 =:= 0
618
+ -> WMask = 0o0777
619
+ ; WMask = WMask0
620
+ ),
621
+ maplist(mode_char, Rest, MBits),
622
+ foldl(or, MBits, 0, Mask),
623
+ Bits is Mask /\ WMask.
624
+
625
+ who_mask(M0, M) -->
626
+ [C],
627
+ { who_mask(C,M1), !,
628
+ M2 is M0\/M1
629
+ },
630
+ who_mask(M2,M).
631
+ who_mask(M, M) -->
632
+ [].
633
+
634
+ who_mask(o, 0o0007).
635
+ who_mask(g, 0o0070).
636
+ who_mask(u, 0o0700).
637
+
638
+ mode_char(r, 0o0444).
639
+ mode_char(w, 0o0222).
640
+ mode_char(x, 0o0111).
641
+
642
+ or(B1, B2, B) :-
643
+ B is B1\/B2.
644
+