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,695 @@
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) 2001-2014, University of Amsterdam, VU University 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(qp_foreign,
36
+ [ load_foreign_files/0, %
37
+ load_foreign_files/2, % +Files, +Libs
38
+ load_foreign_files/3, % +Object, +Files, +Libs
39
+ make_shared_object/3, % +Object, +Files, +Libs
40
+ make_foreign_wrapper_file/1, % +OutBase
41
+ make_foreign_wrapper_file/2, % +OFiles, +OutBase
42
+ % SICStus stuff
43
+ make_foreign_resource_wrapper/3, % +Resource, +ResBase, +FileBase
44
+ load_foreign_resource/2 % +Resource, +Dir
45
+ ]).
46
+
47
+ :- autoload(library(apply),[exclude/3]).
48
+ :- autoload(library(error),[existence_error/2]).
49
+ :- autoload(library(gensym),[gensym/2]).
50
+ :- autoload(library(lists),[member/2,append/3,select/3]).
51
+ :- autoload(library(shlib),[load_foreign_library/1]).
52
+
53
+
54
+ /** <module> Quintus compatible foreign loader
55
+
56
+ This module defines a Quintus compatible foreign language interface
57
+ based on the foreign_file/2 and foreign/3 declarations.
58
+
59
+ Predicates:
60
+
61
+ * load_foreign_files
62
+ Load all foreign files defined with foreign_file/2 statement
63
+ in the current module.
64
+
65
+ * load_foreign_files(+Files, +Libs)
66
+ Load specified foreign files, linking them with the given
67
+ libraries
68
+
69
+ * load_foreign_files(+SharedObject, +Files, +Libs)
70
+ As load_foreign_files/2, but first tries to load `SharedObject'.
71
+ If the SharedObject exists it is loaded using load_foreign_library/1.
72
+ Otherwise it is first created with make_shared_object/3.
73
+
74
+ * make_shared_object(+SharedObject, +Files, +Libs)
75
+ Generate a wrapper and link it using plld to the given SharedObject.
76
+
77
+ * make_foreign_wrapper_file(+Files, +OutBase)
78
+ Generate wrapper for the named object files in OutBase.c.
79
+
80
+ * make_foreign_wrapper_file(+Files)
81
+ Generate wrapper for all declared object files in OutBase.c.
82
+
83
+ Example:
84
+
85
+ ==
86
+ foreign_file('-lm', [sin/2]).
87
+ foreign(sin, c, sin(+float, [-float])).
88
+ :- load_foreign_files,
89
+ abolish(foreign_file, 2),
90
+ abolish(foreign, 3).
91
+ ==
92
+
93
+ Supported types:
94
+
95
+ | *Spec* | *Prolog* | *C* |
96
+ | integer | integer | long |
97
+ | float | float,integer | double |
98
+ | single | float,integer | single |
99
+ | string | atom,string | char * |
100
+ | atom | atom | atom identifier (type atomic) |
101
+
102
+ *NOTE* This modules requires a correctly functioning swipl-ld and
103
+ load_foreign_library/1 on your system. If this isn't the
104
+ case use make_foreign_wrapper_file/[1,2] to generate a
105
+ wrapper and use static embedding.
106
+
107
+ @bug Only supports C-interface
108
+ @bug Insufficient checking for misusage.
109
+ @bug Documentation is too short and very outdated
110
+ */
111
+
112
+ :- module_transparent
113
+ load_foreign_files/0.
114
+
115
+ :- meta_predicate
116
+ load_foreign_files(:, +),
117
+ load_foreign_files(+, :, +),
118
+ make_shared_object(+, :, +),
119
+ make_foreign_wrapper_file(:),
120
+ make_foreign_wrapper_file(:, +),
121
+ % SICStus
122
+ make_foreign_resource_wrapper(:, +, +),
123
+ load_foreign_resource(:, +).
124
+
125
+ setting(linker, 'swipl-ld').
126
+
127
+ hook(M:Goal) :-
128
+ M:Goal.
129
+
130
+ %! make_wrappers(+PrologHeads, +Module, +OutStream)
131
+
132
+ make_wrappers([], _, _).
133
+ make_wrappers([H|T], M, Out) :-
134
+ make_wrapper(Out, M:H),
135
+ make_wrappers(T, M, Out).
136
+
137
+ %! make_wrapper(+Stream, :PrologHead)
138
+ %
139
+ % Generates a C-wrapper function for the given foreign defined
140
+ % Prolog predicate. The wrapper is called _plw_<predname><arity>.
141
+
142
+ make_wrapper(Out, Spec) :-
143
+ get_foreign_head(Spec, Func, Head),
144
+ !,
145
+ ( check_head(Head)
146
+ -> wrapper_name(Head, WrapName, ArgN),
147
+ make_C_header(Out, WrapName, ArgN),
148
+ make_C_decls(Out, Head),
149
+ make_C_prototype(Out, Head),
150
+ make_C_input_conversions(Out, Head),
151
+ make_C_wrapper_setup(Out),
152
+ make_C_call(Out, Head, Func),
153
+ make_C_wrapper_check(Out),
154
+ make_C_output_conversions(Out, Head),
155
+ make_C_footer(Out)
156
+ ; fail
157
+ ).
158
+ make_wrapper(_, Spec) :-
159
+ existence_error(foreign_declaration, Spec).
160
+
161
+ %! get_foreign_head(:Spec, -Func, -Head)
162
+ %
163
+ % Get 3rd argument of relevant foreign/3 clause. Seems there are
164
+ % two versions. In Quintus Spec was a predicate specification and
165
+ % in SICStus it seems to be a (C) function name.
166
+
167
+ get_foreign_head(M:Function, Function, M:Head) :-
168
+ prolog_load_context(dialect, sicstus),
169
+ !,
170
+ hook(M:foreign(Function, c, Head)).
171
+ get_foreign_head(M:Spec, Func, M:Head) :-
172
+ ( atom(Spec),
173
+ hook(M:foreign(Spec, c, Head)),
174
+ functor(Head, Spec, _)
175
+ -> true
176
+ ; Spec = Name/Arity
177
+ -> functor(Head, Name, Arity),
178
+ hook(M:foreign(Func, c, Head))
179
+ ; Head = Spec,
180
+ hook(M:foreign(Func, c, Head))
181
+ ).
182
+
183
+
184
+ check_head(_:Head) :-
185
+ functor(Head, _, Arity),
186
+ ( Arity == 0
187
+ -> true
188
+ ; arg(_, Head, [-T]),
189
+ \+ valid_type(T)
190
+ -> warning('Bad return type ~w in ~w', [T, Head]),
191
+ fail
192
+ ; arg(N, Head, [-_T]),
193
+ N \== Arity
194
+ -> warning('Return type must be last in ~w', Head),
195
+ fail
196
+ ; (arg(_, Head, -T) ; arg(_, Head, +T)),
197
+ \+ valid_type(T)
198
+ -> warning('Bad type ~w in ~w', [T, Head]),
199
+ fail
200
+ ; true
201
+ ).
202
+
203
+ valid_type(int).
204
+ valid_type(integer).
205
+ valid_type(size_t).
206
+ valid_type(float).
207
+ valid_type(single).
208
+ valid_type(string).
209
+ valid_type(chars). % actually, `codes'!
210
+ valid_type(atom).
211
+ valid_type(term).
212
+ valid_type(address).
213
+ valid_type(address(_)).
214
+
215
+ %! cvt_name(+Type, +IO, -Suffix) is det.
216
+
217
+ cvt_name(chars, _, codes) :- !.
218
+ cvt_name(address(_), _, address) :- !.
219
+ cvt_name(int, o, int64) :- !.
220
+ cvt_name(integer, o, int64) :- !.
221
+ cvt_name(size_t, o, int64) :- !.
222
+ cvt_name(integer, i, long) :- !.
223
+ cvt_name(Type, _, Type).
224
+
225
+
226
+ %! make_C_header(+Stream, +WrapperName, +Arity)
227
+ %
228
+ % Write function-header for the wrapper. This is easy as the
229
+ % the return-type is always foreign_t and the arguments are
230
+ % always of type `term_t'. The arguments are simply named `a',
231
+ % `b', ...
232
+
233
+ make_C_header(Out, WrapName, ArgN) :-
234
+ format(Out, '~n~nstatic foreign_t~n~w(', [WrapName]),
235
+ forall(between(1, ArgN, A),
236
+ ( (A \== 1 -> format(Out, ', ', []) ; true)
237
+ , arg_name(A, AName),
238
+ format(Out, 'term_t ~w', [AName])
239
+ )),
240
+ format(Out, ')~n{ ', []).
241
+
242
+ %! make_C_decls(+Stream, :PrologHead)
243
+ %
244
+ % Writes the C variable declarations. If the return value is used
245
+ % a variable named `rval' is created. For each input parameter a C
246
+ % variable named i<argname> is created; for each output variable
247
+ % o<argname>.
248
+
249
+ make_C_decls(Out, _:Head) :-
250
+ compound(Head),
251
+ arg(_, Head, [-PlType]),
252
+ map_C_type(PlType, CType),
253
+ format(Out, '~wrval;~n ', [CType]),
254
+ fail.
255
+ make_C_decls(Out, _:Head) :-
256
+ compound(Head),
257
+ arg(N, Head, -PlType),
258
+ arg_name(N, AName),
259
+ ( PlType == term
260
+ -> format(Out, 'term_t o_~w = PL_new_term_ref();~n ', [AName])
261
+ ; map_C_type(PlType, CType),
262
+ format(Out, '~wo_~w;~n ', [CType, AName])
263
+ ),
264
+ fail.
265
+ make_C_decls(Out, _:Head) :-
266
+ compound(Head),
267
+ arg(N, Head, +PlType),
268
+ PlType \== term,
269
+ map_C_type(PlType, CType),
270
+ CType \== term,
271
+ arg_name(N, AName),
272
+ format(Out, '~wi_~w;~n ', [CType, AName]),
273
+ fail.
274
+ make_C_decls(Out, _) :-
275
+ format(Out, '~n', []).
276
+
277
+ %! make_C_prototype(+Stream, :PrologHead)
278
+ %
279
+ % If the function handles floats or doubles, make a prototype
280
+ % declaration for it to avoid unwanted conversions.
281
+
282
+ make_C_prototype(Out, M:Head) :-
283
+ ( compound(Head),
284
+ arg(_, Head, [-Type])
285
+ -> map_C_type(Type, CType)
286
+ ; CType = 'void '
287
+ ),
288
+ copy_term(Head, H2), % don't bind Head
289
+ hook(M:foreign(CFunc, c, H2)),
290
+ !,
291
+ format(Out, ' extern ~w~w(', [CType, CFunc]),
292
+ ( compound(Head),
293
+ arg(N, Head, AType),
294
+ AType \= [_], % return-type
295
+ (N > 1 -> format(Out, ', ', []) ; true),
296
+ ( AType = +T2
297
+ -> map_C_type(T2, CT2),
298
+ format(Out, '~w', [CT2])
299
+ ; AType == -term
300
+ -> format(Out, term_t, [])
301
+ ; AType = -T2
302
+ -> map_C_type(T2, CT2),
303
+ format(Out, '~w *', [CT2])
304
+ ),
305
+ fail
306
+ ; format(Out, ');~n~n', [])
307
+ ).
308
+ make_C_prototype(_, _).
309
+
310
+
311
+ %! make_C_input_conversions(+Stream, :PrologHead)
312
+ %
313
+ % Generate the input checking and conversion code. Assumes
314
+ % boolean functions that take a Prolog term_t as first argument
315
+ % and a pointer to the requested C-type as a second argument.
316
+ % Function returns 0 if the conversion fails.
317
+
318
+ make_C_input_conversions(Out, _:Head) :-
319
+ findall(N-T, (compound(Head),arg(N, Head, +T)), IArgs0),
320
+ exclude(term_arg, IArgs0, IArgs),
321
+ ( IArgs == []
322
+ -> true
323
+ ; format(Out, ' if ( ', []),
324
+ ( member(N-T, IArgs),
325
+ T \== term,
326
+ (IArgs \= [N-T|_] -> format(Out, ' ||~n ', []) ; true),
327
+ arg_name(N, AName),
328
+ atom_concat(i_, AName, IName),
329
+ cvt_name(T, i, CVT),
330
+ format(Out, '!PL_cvt_i_~w(~w, &~w)', [CVT, AName, IName]),
331
+ fail
332
+ ; true
333
+ ),
334
+ format(Out, ' )~n return FALSE;~n~n', [])
335
+ ).
336
+
337
+ term_arg(_-term).
338
+
339
+
340
+ %! make_C_call(+Stream, :PrologHead, +CFunction)
341
+ %
342
+ % Generate the actual call to the foreign function. Input
343
+ % variables may be handed directly; output variables as a pointer
344
+ % to the o<var>, except for output-variables of type term.
345
+
346
+ make_C_call(Out, _:Head, CFunc) :-
347
+ ( compound(Head),
348
+ arg(_, Head, [-_])
349
+ -> format(Out, ' rval = ~w(', [CFunc])
350
+ ; format(Out, ' (void) ~w(', [CFunc])
351
+ ),
352
+ compound(Head),
353
+ arg(N, Head, Arg),
354
+ Arg \= [_],
355
+ (N \== 1 -> format(Out, ', ', []) ; true),
356
+ arg_name(N, AName),
357
+ ( Arg = -term
358
+ -> format(Out, 'o_~w', [AName])
359
+ ; Arg = -_
360
+ -> format(Out, '&o_~w', [AName])
361
+ ; Arg = +term
362
+ -> format(Out, '~w', [AName])
363
+ ; format(Out, 'i_~w', [AName])
364
+ ),
365
+ fail.
366
+ make_C_call(Out, _, _) :-
367
+ format(Out, ');~n', []).
368
+
369
+ %! make_C_wrapper_setup(+Stream)
370
+ %
371
+ % Call SP_WRAP_INIT() when running on SICStus. This supports
372
+ % SP_fail() and SP_raise_exception().
373
+
374
+ make_C_wrapper_setup(Stream) :-
375
+ prolog_load_context(dialect, sicstus),
376
+ !,
377
+ format(Stream, ' SP_WRAP_INIT();~n', []).
378
+ make_C_wrapper_setup(_).
379
+
380
+
381
+ %! make_C_wrapper_check(+Stream)
382
+ %
383
+ % Call SP_WRAP_CHECK_STATE() when running on SICStus. This
384
+ % supports SP_fail() and SP_raise_exception().
385
+
386
+ make_C_wrapper_check(Stream) :-
387
+ prolog_load_context(dialect, sicstus),
388
+ !,
389
+ format(Stream, ' SP_WRAP_CHECK_STATE();~n', []).
390
+ make_C_wrapper_check(_).
391
+
392
+
393
+ %! make_C_output_conversions(+Stream, :PrologHead)
394
+ %
395
+ % Generate conversions for the output arguments and unify them
396
+ % with the Prolog term_t arguments.
397
+
398
+ make_C_output_conversions(Out, _:Head) :-
399
+ findall(N-T, (compound(Head),arg(N, Head, -T)), OArgs0),
400
+ ( compound(Head),
401
+ arg(_, Head, [-RT])
402
+ -> OArgs = [rval-RT|OArgs0]
403
+ ; OArgs = OArgs0
404
+ ),
405
+ ( OArgs == []
406
+ -> true
407
+ ; format(Out, '~n if ( ', []),
408
+ ( member(N-T, OArgs),
409
+ ( N == rval
410
+ -> OName = rval,
411
+ arg(RN, Head, [-_]),
412
+ arg_name(RN, AName)
413
+ ; arg_name(N, AName),
414
+ atom_concat(o_, AName, OName)
415
+ ),
416
+ (OArgs = [N-T|_] -> true ; format(Out, ' ||~n ', [])),
417
+ ( T == term
418
+ -> format(Out, '!PL_unify(~w, ~w)', [OName, AName])
419
+ ; cvt_name(T, o, CVT),
420
+ format(Out, '!PL_cvt_o_~w(~w, ~w)', [CVT, OName, AName])
421
+ ),
422
+ fail
423
+ ; true
424
+ ),
425
+ format(Out, ' )~n return FALSE;~n', [])
426
+ ).
427
+
428
+
429
+ make_C_footer(Out) :-
430
+ format(Out, '~n return TRUE;~n}~n', []).
431
+
432
+ /*******************************
433
+ * INIT STATEMENT *
434
+ *******************************/
435
+
436
+ %! make_C_init(+Stream, +InstallFunc, +InitFunc, +Module, +PredList)
437
+ %
438
+ % Generate an array of PL_extension structures, that may be used
439
+ % to create a statically linked image as well as through the
440
+ % PL_load_extensions() call.
441
+ %
442
+ % Of the supported PL_FA_<FLAGS>, TRANSPARENT may be declared by
443
+ % looking at the transparent (meta_predivate) attribute of the
444
+ % predicate.
445
+
446
+ make_C_init(Out, InstallFunc, Init, M, Preds) :-
447
+ format(Out, '~n~nstatic PL_extension predicates [] =~n{~n', []),
448
+ format(Out, '/*{ "name", arity, function, PL_FA_<flags> },*/~n', []),
449
+ ( member(Pred, Preds),
450
+ get_foreign_head(M:Pred, _Func, Head),
451
+ Head = M:H,
452
+ functor(H, Name, Arity),
453
+ wrapper_name(Head, Wrapper, Arity),
454
+ foreign_attributes(M:H, Atts),
455
+ format(Out, ' { "~w", ~d, ~w, ~w },~n',
456
+ [Name, Arity, Wrapper, Atts]),
457
+ fail
458
+ ; true
459
+ ),
460
+ format(Out, ' { NULL, 0, NULL, 0 } /* terminator */~n};~n~n', []),
461
+ format(Out, 'install_t~n~w()~n{ PL_load_extensions(predicates);~n',
462
+ [InstallFunc]),
463
+ sicstus_init_function(Out, Init),
464
+ format(Out, '}~n', []).
465
+
466
+ sicstus_init_function(_, -) :- !.
467
+ sicstus_init_function(Out, Init) :-
468
+ format(Out, ' extern void ~w(int);~n', [Init]),
469
+ format(Out, ' ~w(0);~n', [Init]).
470
+
471
+ foreign_attributes(Head, Atts) :-
472
+ findall(A, foreign_attribute(Head, A), A0),
473
+ ( A0 == []
474
+ -> Atts = 0
475
+ ; atomic_list_concat(A0, '|', Atts)
476
+ ).
477
+
478
+ foreign_attribute(Head, 'PL_FA_TRANSPARENT') :-
479
+ predicate_property(Head, transparent).
480
+
481
+ %! make_C_deinit(+Stream, +UninstallFunc, +DeInitFunc) is det.
482
+ %
483
+ % Write the uninstall function
484
+
485
+ make_C_deinit(_, _, -) :- !.
486
+ make_C_deinit(Out, Func, DeInit) :-
487
+ format(Out, '~ninstall_t~n', []),
488
+ format(Out, '~w()~n', [Func]),
489
+ format(Out, '{ extern void ~w(int);~n', [DeInit]),
490
+ format(Out, ' ~w(0);~n', [DeInit]),
491
+ format(Out, '}~n', []).
492
+
493
+
494
+ %! make_C_file_header(+Stream)
495
+ %
496
+ % Output the generic header declarations needed and some comments
497
+
498
+ make_C_file_header(Out) :-
499
+ current_prolog_flag(version_data, swi(Major, Minor, Patch, _)),
500
+ get_time(Time),
501
+ format_time(string(When), '%F %H:%M', Time),
502
+ format(Out, '/* SWI-Prolog link wrapper~n', []),
503
+ format(Out, ' Generated by SWI-Prolog version ~w.~w.~w~n',
504
+ [Major, Minor, Patch]),
505
+ format(Out, ' At ~s~n', [When]),
506
+ ( source_location(File, Line)
507
+ -> format(Out, ' Source context ~w:~d~n', [File, Line])
508
+ ; true
509
+ ),
510
+ format(Out, '*/~n~n', []),
511
+ format(Out, '#include <SWI-Prolog.h>~n', []),
512
+ make_C_compat_file_header(Out),
513
+ format(Out, '#ifndef NULL~n', []),
514
+ format(Out, '#define NULL ((void *)0)~n', []),
515
+ format(Out, '#endif~n~n', []).
516
+
517
+
518
+ make_C_compat_file_header(Out) :-
519
+ prolog_load_context(dialect, sicstus),
520
+ !,
521
+ format(Out, '#define SP_WRAPPER 1~n', []),
522
+ format(Out, '#include <sicstus/sicstus.h>~n', []).
523
+ make_C_compat_file_header(_).
524
+
525
+
526
+ /*******************************
527
+ * TOPLEVEL *
528
+ *******************************/
529
+
530
+ %! load_foreign_files is det.
531
+ %! load_foreign_files(:Files, +Libs) is det.
532
+ %! load_foreign_files(+SharedObject, :Files, +Libs) is det.
533
+ %
534
+ % Calls make_foreign_wrapper_file(+File), compiles the wrapper
535
+ % and loads the predicates.
536
+
537
+ load_foreign_files :-
538
+ context_module(M),
539
+ findall(File, hook(M:foreign_file(File, _)), OFiles),
540
+ load_foreign_files(M:OFiles, []).
541
+ load_foreign_files(OFiles, Libs) :-
542
+ gensym(link, LinkBase),
543
+ load_foreign_files(LinkBase, OFiles, Libs).
544
+
545
+ load_foreign_files(LinkBase, M:_, _) :-
546
+ catch(load_foreign_library(M:LinkBase), _, fail),
547
+ !.
548
+ load_foreign_files(LinkBase, OFiles, Libs) :-
549
+ make_shared_object(LinkBase, OFiles, Libs),
550
+ OFiles = M:_List,
551
+ load_foreign_library(M:LinkBase).
552
+
553
+ %! make_shared_object(+Object, :Files, +Libs) is det.
554
+ %
555
+ % Generate a wrapper and link it using plld to the given
556
+ % SharedObject.
557
+
558
+ make_shared_object(LinkBase, M:OFiles, Libs) :-
559
+ make_foreign_wrapper_file(M:OFiles, LinkBase),
560
+ file_name_extension(LinkBase, c, CFile),
561
+ build_shared_object(LinkBase, [CFile|OFiles], Libs).
562
+
563
+ %! make_foreign_wrapper_file(:OutFile) is det.
564
+ %! make_foreign_wrapper_file(:Files, +OutFile) is det.
565
+ %
566
+ % Just output the wrapper file to the named .c file. May be used
567
+ % to prepare for static linking or the preparation of the native
568
+ % SWI-Prolog foreign-file.
569
+
570
+ make_foreign_wrapper_file(M:CFile) :-
571
+ findall(File, hook(M:foreign_file(File, _)), OFiles),
572
+ make_foreign_wrapper_file(M:OFiles, CFile).
573
+ make_foreign_wrapper_file(M:OFiles, Base) :-
574
+ file_name_extension(Base, c, CFile),
575
+ file_base_name(Base, FuncBase),
576
+ atom_concat(install_, FuncBase, InstallFunc),
577
+ collect_foreign_predicates(OFiles, M, Preds),
578
+ open(CFile, write, Out),
579
+ make_C_file_header(Out),
580
+ make_wrappers(Preds, M, Out),
581
+ make_C_init(Out, InstallFunc, -, M, Preds),
582
+ close(Out).
583
+
584
+
585
+ collect_foreign_predicates([], _, []).
586
+ collect_foreign_predicates([File|Files], M, Preds) :-
587
+ hook(M:foreign_file(File, P0)),
588
+ collect_foreign_predicates(Files, M, P1),
589
+ append(P0, P1, Preds).
590
+
591
+ build_shared_object(Object, Files, Libs) :-
592
+ current_prolog_flag(shared_object_extension, Ext),
593
+ file_name_extension(Object, Ext, SharedObject),
594
+ append(Files, Libs, Input),
595
+ atomic_list_concat(Input, ' ', InputAtom),
596
+ setting(linker, Linker),
597
+ format(string(Command),
598
+ '~w -shared -o ~w ~w', [Linker, SharedObject, InputAtom]),
599
+ shell(Command).
600
+
601
+
602
+ /*******************************
603
+ * SICSTUS *
604
+ *******************************/
605
+
606
+ %! make_foreign_resource_wrapper(:Resource, +ResBase, +FileBase)
607
+ %
608
+ % Create a wrapper-file for the given foreign resource
609
+
610
+ make_foreign_resource_wrapper(M:Resource, ResBase, FileBase) :-
611
+ hook(M:foreign_resource(Resource, Functions)),
612
+ take(init(Init), Functions, Functions1, -),
613
+ take(deinit(DeInit), Functions1, Preds, -),
614
+ file_name_extension(FileBase, c, CFile),
615
+ file_base_name(ResBase, FuncBase),
616
+ atom_concat(install_, FuncBase, InstallFunc),
617
+ atom_concat(uninstall_, FuncBase, UninstallFunc),
618
+ open(CFile, write, Out),
619
+ make_C_file_header(Out),
620
+ make_wrappers(Preds, M, Out),
621
+ make_C_init(Out, InstallFunc, Init, M, Preds),
622
+ make_C_deinit(Out, UninstallFunc, DeInit),
623
+ close(Out).
624
+
625
+ take(Term, List, Rest, Default) :-
626
+ ( select(Term, List, Rest)
627
+ -> true
628
+ ; arg(1, Term, Default),
629
+ Rest = List
630
+ ).
631
+
632
+
633
+ %! load_foreign_resource(:Resource, +Dir)
634
+ %
635
+ % Load a foreign module. First try to load from the same direcory
636
+ % as the Prolog file. Otherwise load using SWI-Prolog's default
637
+ % search path.
638
+
639
+ load_foreign_resource(M:Resource, Source) :-
640
+ absolute_file_name(Resource, Object,
641
+ [ file_type(executable),
642
+ relative_to(Source),
643
+ file_errors(fail)
644
+ ]),
645
+ !,
646
+ load_foreign_library(M:Object).
647
+ load_foreign_resource(M:Resource, _) :-
648
+ load_foreign_library(M:foreign(Resource)).
649
+
650
+
651
+ /*******************************
652
+ * UTIL *
653
+ *******************************/
654
+
655
+ arg_name(N, Name) :-
656
+ C is N + 0'a - 1,
657
+ atom_codes(Name, [C]).
658
+
659
+ wrapper_name(_:Head, Wrapper, Arity) :-
660
+ functor(Head, Name, Arity),
661
+ atomic_list_concat(['_plw_', Name, Arity], Wrapper).
662
+
663
+ %! map_C_type(+Prolog, -C)
664
+ %
665
+ % Map Prolog interface type declarations into C types.
666
+
667
+ map_C_type(X, Y) :-
668
+ map_C_type_(X, Y),
669
+ !.
670
+ map_C_type(X, X).
671
+
672
+ map_C_type_(int, 'int ').
673
+ map_C_type_(integer, 'long ').
674
+ map_C_type_(size_t, 'size_t ').
675
+ map_C_type_(float, 'double ').
676
+ map_C_type_(string, 'char *').
677
+ map_C_type_(chars, 'char *').
678
+ map_C_type_(address, 'void *').
679
+ map_C_type_(address(Of), Type) :-
680
+ atom_concat(Of, ' *', Type).
681
+ map_C_type_(term, 'term_t ').
682
+
683
+ warning(Fmt, Args) :-
684
+ print_message(warning, format(Fmt, Args)).
685
+
686
+
687
+ /*******************************
688
+ * XREF *
689
+ *******************************/
690
+
691
+ :- multifile
692
+ prolog:hook/1.
693
+
694
+ prolog:hook(foreign(_,_,_)).
695
+ prolog:hook(foreign_resource(_,_)).