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,574 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker
4
+ E-mail: jan@swi-prolog.org
5
+ WWW: https://www.swi-prolog.org
6
+ Copyright (c) 1999-2026, University of Amsterdam
7
+ VU University Amsterdam
8
+ SWI-Prolog Solutions b.v.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions
12
+ are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright
15
+ notice, this list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright
18
+ notice, this list of conditions and the following disclaimer in
19
+ the documentation and/or other materials provided with the
20
+ distribution.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ POSSIBILITY OF SUCH DAMAGE.
34
+ */
35
+
36
+ :- module(thread_util,
37
+ [ threads/0, % List available threads
38
+ join_threads/0, % Join all terminated threads
39
+ with_stopped_threads/2, % :Goal, +Options
40
+ thread_has_console/0, % True if thread has a console
41
+ attach_console/0, % Create a new console for thread.
42
+ attach_console/1, % ?Title
43
+
44
+ tspy/1, % :Spec
45
+ tspy/2, % :Spec, +ThreadId
46
+ tdebug/0,
47
+ tdebug/1, % +ThreadId
48
+ tnodebug/0,
49
+ tnodebug/1, % +ThreadId
50
+ tprofile/1, % +ThreadId
51
+ tbacktrace/1, % +ThreadId,
52
+ tbacktrace/2, % +ThreadId, +Options
53
+ thread_alias/1 % +Alias
54
+ ]).
55
+ :- if(current_prolog_flag(xpce, true)).
56
+ :- export(( interactor/0,
57
+ interactor/1 % ?Title
58
+ )).
59
+ :- autoload(library(epilog), [epilog/1, epilog_attach/1, ep_has_console/1]).
60
+ :- endif.
61
+ :- meta_predicate with_stopped_threads(0, +).
62
+ :- autoload(library(apply), [maplist/3, convlist/3]).
63
+ :- autoload(library(backcomp), [thread_at_exit/1]).
64
+ :- autoload(library(edinburgh), [nodebug/0]).
65
+ :- autoload(library(lists), [max_list/2, append/2]).
66
+ :- autoload(library(option), [merge_options/3, option/3, option/2]).
67
+ :- autoload(library(prolog_stack),
68
+ [print_prolog_backtrace/2, get_prolog_backtrace/3]).
69
+ :- autoload(library(statistics), [thread_statistics/2]).
70
+ :- autoload(library(prolog_profile), [show_profile/1]).
71
+ :- autoload(library(thread), [call_in_thread/2]).
72
+ :- autoload(library(broadcast), [broadcast/1]).
73
+ :- autoload(library(prolog_debug), [spy/1]).
74
+ :- autoload(library(dcg/high_order), [sequence/5]).
75
+ :- autoload(library(gui_tracer), [guitracer/0, ensure_guitracer/0]).
76
+
77
+ :- set_prolog_flag(generate_debug_info, false).
78
+
79
+ :- module_transparent
80
+ tspy/1,
81
+ tspy/2.
82
+
83
+ /** <module> Interactive thread utilities
84
+
85
+ This library provides utilities that are primarily intended for
86
+ interactive usage in a threaded Prolog environment. It allows for
87
+ inspecting threads, manage I/O of background threads (depending on the
88
+ environment) and manipulating the debug status of threads.
89
+ */
90
+
91
+ %! threads
92
+ %
93
+ % List currently known threads with their status. For each thread it
94
+ % lists the _id_, _class_, _status_, _debug status_, _CPU time_ and
95
+ % current _stack usage_. If a thread is listed with _Debug_ set to
96
+ % `X', it cannot be debugged. If the _Debug_ is show as `V', it is
97
+ % running in debug mode (see debug/0) and responds to _spy points_ and
98
+ % _break points_.
99
+
100
+ threads :-
101
+ threads(Threads),
102
+ print_message(information, threads(Threads)).
103
+
104
+ threads(Threads) :-
105
+ findall(Thread, thread_data(Thread), Threads).
106
+
107
+ thread_data(Data) :-
108
+ thread_statistics(TID, Stats),
109
+ thread_property(TID, debug(Debug)),
110
+ ( Debug == true
111
+ -> thread_property(TID, debug_mode(DebugMode)),
112
+ put_dict(debug, Stats, DebugMode, Stats1)
113
+ ; Stats1 = Stats
114
+ ),
115
+ ( thread_property(TID, class(Class))
116
+ -> put_dict(class, Stats1, Class, Data)
117
+ ; Data = Stats
118
+ ).
119
+
120
+ %! join_threads
121
+ %
122
+ % Join all terminated threads. For normal applications, dealing with
123
+ % terminated threads must be part of the application logic, either
124
+ % detaching the thread before termination or making sure it will be
125
+ % joined. The predicate join_threads/0 is intended for interactive
126
+ % sessions to reclaim resources from threads that died unexpectedly
127
+ % during development.
128
+
129
+ join_threads :-
130
+ findall(Ripped, rip_thread(Ripped), AllRipped),
131
+ ( AllRipped == []
132
+ -> true
133
+ ; print_message(informational, joined_threads(AllRipped))
134
+ ).
135
+
136
+ rip_thread(thread{id:id, status:Status}) :-
137
+ thread_property(Id, status(Status)),
138
+ Status \== running,
139
+ \+ thread_self(Id),
140
+ thread_join(Id, _).
141
+
142
+ %! with_stopped_threads(:Goal, Options) is det.
143
+ %
144
+ % Stop all threads except the caller while running once(Goal). Note
145
+ % that this is in the thread user utilities as this is not something
146
+ % that should be used by normal applications. Notably, this may
147
+ % _deadlock_ if the current thread requires input from some other
148
+ % thread to complete Goal or one of the stopped threads has a lock.
149
+ % Options:
150
+ %
151
+ % - stop_nodebug_threads(+Boolean)
152
+ % If `true` (default `false`), also stop threads created with
153
+ % the debug(false) option.
154
+ % - except(+List)
155
+ % Do not stop threads from this list.
156
+ %
157
+ % @bug Note that the threads are stopped when they process signals. As
158
+ % signal handling may be delayed, this implies they need not be
159
+ % stopped before Goal starts.
160
+
161
+ :- dynamic stopped_except/1.
162
+
163
+ with_stopped_threads(_, _) :-
164
+ stopped_except(_),
165
+ !.
166
+ with_stopped_threads(Goal, Options) :-
167
+ thread_self(Me),
168
+ setup_call_cleanup(
169
+ asserta(stopped_except(Me), Ref),
170
+ ( stop_other_threads(Me, Options),
171
+ once(Goal)
172
+ ),
173
+ erase(Ref)).
174
+
175
+ stop_other_threads(Me, Options) :-
176
+ findall(T, stop_thread(Me, T, Options), Stopped),
177
+ broadcast(stopped_threads(Stopped)).
178
+
179
+ stop_thread(Me, Thread, Options) :-
180
+ option(except(Except), Options, []),
181
+ ( option(stop_nodebug_threads(true), Options)
182
+ -> thread_property(Thread, status(running))
183
+ ; debug_target(Thread)
184
+ ),
185
+ Me \== Thread,
186
+ \+ memberchk(Thread, Except),
187
+ catch(thread_signal(Thread, stopped_except), error(_,_), fail).
188
+
189
+ stopped_except :-
190
+ thread_wait(\+ stopped_except(_),
191
+ [ wait_preds([stopped_except/1])
192
+ ]).
193
+
194
+ %! thread_has_console is semidet.
195
+ %
196
+ % True when the calling thread has an attached console.
197
+ %
198
+ % @see attach_console/0
199
+
200
+ thread_has_console(main) :-
201
+ !,
202
+ \+ current_prolog_flag(epilog, true).
203
+ thread_has_console(Id) :-
204
+ thread_property(Id, class(console)),
205
+ !.
206
+ :- if(current_predicate(ep_has_console/1)).
207
+ thread_has_console(Id) :-
208
+ ep_has_console(Id).
209
+ :- endif.
210
+
211
+
212
+ thread_has_console :-
213
+ current_prolog_flag(break_level, _),
214
+ !.
215
+ thread_has_console :-
216
+ thread_self(Id),
217
+ thread_has_console(Id),
218
+ !.
219
+
220
+ %! attach_console is det.
221
+ %! attach_console(+Title) is det.
222
+ %
223
+ % Create a new console and make the standard Prolog streams point to
224
+ % it. If not provided, the title is built using the thread id. Does
225
+ % nothing if the current thread already has a console attached.
226
+
227
+ attach_console :-
228
+ attach_console(_).
229
+
230
+ attach_console(_) :-
231
+ thread_has_console,
232
+ !.
233
+ :- if(current_predicate(epilog_attach/1)).
234
+ attach_console(Title) :-
235
+ thread_self(Me),
236
+ console_title(Me, Title),
237
+ epilog_attach([ title(Title)
238
+ ]).
239
+ :- endif.
240
+ attach_console(Title) :-
241
+ print_message(error, cannot_attach_console(Title)),
242
+ fail.
243
+
244
+ console_title(Thread, Title) :-
245
+ current_prolog_flag(system_thread_id, SysId),
246
+ human_thread_id(Thread, Id),
247
+ format(atom(Title),
248
+ 'SWI-Prolog Thread ~w (~d) Interactor',
249
+ [Id, SysId]).
250
+
251
+ human_thread_id(Thread, Alias) :-
252
+ thread_property(Thread, alias(Alias)),
253
+ !.
254
+ human_thread_id(Thread, Id) :-
255
+ thread_property(Thread, id(Id)).
256
+
257
+ %! interactor is det.
258
+ %! interactor(+Title) is det.
259
+ %
260
+ % Run a Prolog toplevel in another thread with a new console window.
261
+ % If Title is given, this will be used as the window title. As of
262
+ % SWI-Prolog version 10, the console is provided by the XPCE graphics
263
+ % library using library(epilog).
264
+
265
+ interactor :-
266
+ interactor(_).
267
+
268
+ :- if(current_predicate(epilog/1)).
269
+ interactor(Title) :-
270
+ !,
271
+ ( nonvar(Title)
272
+ -> Options = [title(Title)]
273
+ ; Options = []
274
+ ),
275
+ epilog([ init(true)
276
+ | Options
277
+ ]).
278
+ :- endif.
279
+ interactor(Title) :-
280
+ print_message(error, cannot_attach_console(Title)),
281
+ fail.
282
+
283
+
284
+ /*******************************
285
+ * DEBUGGING *
286
+ *******************************/
287
+
288
+ %! tspy(:Spec) is det.
289
+ %! tspy(:Spec, +ThreadOrClass) is det.
290
+ %
291
+ % Trap the graphical debugger on reaching Spec. The predicate tspy/0
292
+ % enabled debug mode in all threads using tdebug/0 while tspy/1
293
+ % enables debug mode using tdebug/1.
294
+
295
+ tspy(Spec) :-
296
+ spy(Spec),
297
+ tdebug.
298
+
299
+ tspy(Spec, ThreadID) :-
300
+ spy(Spec),
301
+ tdebug(ThreadID).
302
+
303
+
304
+ %! tdebug is det.
305
+ %! tdebug(+ThreadOrClass) is det.
306
+ %! tnodebug is det.
307
+ %! tnodebug(+ThreadOrClass) is det.
308
+ %
309
+ % Enable or disable a thread or group of threads for debugging using
310
+ % the graphical tracer. A group of threads is addressed based on the
311
+ % `class` property of a thread set by thread_create/3 or set_thread/2.
312
+ % This implies loading the graphical tracer and switching the thread
313
+ % to debug mode using debug/0. New threads created inherit their debug
314
+ % mode from the thread that created them.
315
+ %
316
+ % Thread classes have been introduced in SWI-Prolog 10.0.2/10.1.5.
317
+ % This allows for more selective debugging as well as ensuring
318
+ % debugging works in newly created threads. For example, the HTTP
319
+ % server creates all its _worker threads_ in the class `http`. Using
320
+ % query below, we reliable make sure spy points are trapped in HTTP
321
+ % handler threads, regardless of whether the worker existed or is
322
+ % lazily created and regardless of whether the user switched to
323
+ % _nodebug_ mode while tracing a previous event (see
324
+ % debug_reset_from_class/0).
325
+ %
326
+ % ?- tdebug(http).
327
+
328
+ tdebug :-
329
+ guitracer,
330
+ forall(debug_target(Id), set_thread(Id, debug_mode(true))).
331
+
332
+ tdebug(ThreadOrClass) :-
333
+ ensure_guitracer,
334
+ tdebug_(ThreadOrClass, true).
335
+
336
+ tdebug_(ThreadID, Mode),
337
+ is_thread(ThreadID) =>
338
+ set_thread(ThreadID, debug_mode(Mode)).
339
+ tdebug_(Class, Mode),
340
+ atom(Class) =>
341
+ '$debug_thread_class'(Class, Mode, Matching, Set),
342
+ print_message(informational, tdebug(Class, Mode, Matching, Set)).
343
+
344
+ tnodebug :-
345
+ forall(debug_target(Id), set_thread(Id, set_thread(false))).
346
+
347
+ tnodebug(ThreadOrClass) :-
348
+ tdebug_(ThreadOrClass, false).
349
+
350
+ debug_target(Thread) :-
351
+ thread_property(Thread, status(running)),
352
+ thread_property(Thread, debug(true)).
353
+
354
+ %! tbacktrace(+Thread) is det.
355
+ %! tbacktrace(+Thread, +Options) is det.
356
+ %
357
+ % Print a backtrace for Thread to the stream `user_error` of the
358
+ % calling thread. This is achieved by inserting an interrupt into
359
+ % Thread using call_in_thread/2. Options:
360
+ %
361
+ % - depth(+MaxFrames)
362
+ % Number of stack frames to show. Default is the current Prolog
363
+ % flag `backtrace_depth` or 20.
364
+ %
365
+ % Other options are passed to get_prolog_backtrace/3.
366
+ %
367
+ % @bug call_in_thread/2 may not process the event.
368
+
369
+ tbacktrace(Thread) :-
370
+ tbacktrace(Thread, []).
371
+
372
+ tbacktrace(Thread, Options) :-
373
+ merge_options(Options, [clause_references(false)], Options1),
374
+ ( current_prolog_flag(backtrace_depth, Default)
375
+ -> true
376
+ ; Default = 20
377
+ ),
378
+ option(depth(Depth), Options1, Default),
379
+ call_in_thread(Thread, thread_get_prolog_backtrace(Depth, Stack, Options1)),
380
+ print_prolog_backtrace(user_error, Stack).
381
+
382
+ %! thread_get_prolog_backtrace(+Depth, -Stack, +Options)
383
+ %
384
+ % As get_prolog_backtrace/3, but starts above the C callback, hiding
385
+ % the overhead inside call_in_thread/2.
386
+
387
+ thread_get_prolog_backtrace(Depth, Stack, Options) :-
388
+ prolog_current_frame(Frame),
389
+ signal_frame(Frame, SigFrame),
390
+ get_prolog_backtrace(Depth, Stack, [frame(SigFrame)|Options]).
391
+
392
+ signal_frame(Frame, SigFrame) :-
393
+ prolog_frame_attribute(Frame, clause, _),
394
+ !,
395
+ ( prolog_frame_attribute(Frame, parent, Parent)
396
+ -> signal_frame(Parent, SigFrame)
397
+ ; SigFrame = Frame
398
+ ).
399
+ signal_frame(Frame, SigFrame) :-
400
+ ( prolog_frame_attribute(Frame, parent, Parent)
401
+ -> SigFrame = Parent
402
+ ; SigFrame = Frame
403
+ ).
404
+
405
+
406
+
407
+ /*******************************
408
+ * REMOTE PROFILING *
409
+ *******************************/
410
+
411
+ %! tprofile(+Thread) is det.
412
+ %
413
+ % Profile the operation of Thread until the user hits a key.
414
+
415
+ tprofile(Thread) :-
416
+ init_pce,
417
+ thread_signal(Thread,
418
+ ( reset_profiler,
419
+ profiler(_, true)
420
+ )),
421
+ format('Running profiler in thread ~w (press RET to show results) ...',
422
+ [Thread]),
423
+ flush_output,
424
+ get_code(_),
425
+ thread_signal(Thread,
426
+ ( profiler(_, false),
427
+ show_profile([])
428
+ )).
429
+
430
+
431
+ %! init_pce
432
+ %
433
+ % Make sure XPCE is running if it is attached, so we can use the
434
+ % graphical display using in_pce_thread/1.
435
+
436
+ :- if(exists_source(library(pce))).
437
+ init_pce :-
438
+ current_prolog_flag(gui, true),
439
+ !,
440
+ autoload_call(send(@(display), open)).
441
+ :- endif.
442
+ init_pce.
443
+
444
+
445
+ /*******************************
446
+ * COMPATIBILITY *
447
+ *******************************/
448
+
449
+ %! thread_alias(+Alias) is det.
450
+ %
451
+ % Set the alias for a thread.
452
+ %
453
+ % @deprecated Use set_thread/2 using alias(Alias).
454
+
455
+ thread_alias(Alias) :-
456
+ thread_self(Me),
457
+ set_thread(Me, alias(Alias)).
458
+
459
+
460
+ /*******************************
461
+ * HOOKS *
462
+ *******************************/
463
+
464
+ :- multifile
465
+ prolog:message_action/2.
466
+
467
+ prolog:message_action(trace_mode(on), _Level) :-
468
+ \+ thread_has_console,
469
+ \+ current_prolog_flag(gui_tracer, true),
470
+ catch(attach_console, error(_,_), fail).
471
+
472
+ :- multifile
473
+ prolog:message/3.
474
+
475
+ prolog:message(thread_welcome) -->
476
+ { thread_self(Self),
477
+ human_thread_id(Self, Id)
478
+ },
479
+ [ 'SWI-Prolog console for thread ~w'-[Id],
480
+ nl, nl
481
+ ].
482
+ prolog:message(joined_threads(Threads)) -->
483
+ [ 'Joined the following threads'-[], nl ],
484
+ thread_list(Threads).
485
+ prolog:message(threads(Threads)) -->
486
+ thread_list(Threads).
487
+ prolog:message(cannot_attach_console(_Title)) -->
488
+ [ 'Cannot attach a console (requires xpce package)' ].
489
+ prolog:message(tdebug(Class, Enable, Matched, Set)) -->
490
+ ( { var(Matched) }
491
+ -> [ 'Debug for threads in class '], thread_class(Class), [' was already ' ],
492
+ enabled(Enable)
493
+ ; 'Enabled'(Enable),
494
+ [ ' debug mode in ' ], change_counts(Matched, Set), [' threads in class ' ],
495
+ thread_class(Class)
496
+ ).
497
+
498
+ enabled(true) ==> ['enabled'].
499
+ enabled(false) ==> ['disabled'].
500
+
501
+ 'Enabled'(true) ==> ['Enabled'].
502
+ 'Enabled'(false) ==> ['Disabled'].
503
+
504
+ thread_class(Class) -->
505
+ [ ansi(code, '~q', [Class]) ].
506
+
507
+ change_counts(Set, Set) ==>
508
+ [ 'all ~D'-[Set] ].
509
+ change_counts(Matched, Set) ==>
510
+ [ '~D out of ~D'-[Set, Matched] ].
511
+
512
+ thread_list(Threads) -->
513
+ { maplist(th_id_len, Threads, Lens),
514
+ convlist(th_class_len, Threads, CLens),
515
+ max_list(Lens, MaxWidth0),
516
+ max_list(CLens, MaxWidth1),
517
+ LeftColWidth is max(6, MaxWidth0),
518
+ ClassColWidth is max(6, MaxWidth1+2),
519
+ Threads = [H|_]
520
+ },
521
+ thread_list_header(H, LeftColWidth, ClassColWidth),
522
+ sequence(thread_info(LeftColWidth, ClassColWidth), [nl], Threads).
523
+
524
+ th_id_len(Thread, IdLen) :-
525
+ write_length(Thread.id, IdLen, [quoted(true)]).
526
+ th_class_len(Thread, ClassLen) :-
527
+ write_length(Thread.get(class,''), ClassLen, [quoted(true)]).
528
+
529
+ thread_list_header(Thread, NW, CW) -->
530
+ { _{id:_, status:_, time:_, stacks:_} :< Thread,
531
+ !,
532
+ HrWidth is NW+CW+6+10+10+13
533
+ },
534
+ [ '~|~tThread~*+~tClass~*+~tStatus~10+~tDebug~6+~tTime~10+~tStack use~13+'-
535
+ [NW,CW], nl ],
536
+ [ '~|~`\u2015t~*+'-[HrWidth], nl ].
537
+ thread_list_header(Thread, NW, _CW) -->
538
+ { _{id:_, status:_} :< Thread,
539
+ !,
540
+ HrWidth is NW+7
541
+ },
542
+ [ '~|~tThread~*+ Status'-[NW], nl ],
543
+ [ '~|~`-t~*+'-[HrWidth], nl ].
544
+
545
+ thread_info(NW, CW, Thread) -->
546
+ { _{id:Id, status:Status, time:Time, stacks:Stacks} :< Thread,
547
+ Class = Thread.get(class, -),
548
+ debug_flag(Thread, Flag)
549
+ },
550
+ !,
551
+ [ '~|~t~q~*+~t~q~*+~t~w~10+ ~t~w~t~6+~t~3f~10+~t~D~13+'-
552
+ [ Id, NW, Class, CW, Status, Flag, Time.cpu, Stacks.total.usage
553
+ ]
554
+ ].
555
+ thread_info(NW, _CW, Thread) -->
556
+ { _{id:Id, status:Status} :< Thread },
557
+ !,
558
+ [ '~|~t~q~*+ ~w'-
559
+ [ Id, NW, Status
560
+ ]
561
+ ].
562
+
563
+ debug_flag(Thread, Flag) :-
564
+ get_dict(class, Thread, console),
565
+ !,
566
+ Flag = ''.
567
+ debug_flag(Thread, Flag) :-
568
+ get_dict(debug, Thread, Debug),
569
+ !,
570
+ ( Debug == true
571
+ -> Flag = '\u2714' % V
572
+ ; Flag = ''
573
+ ).
574
+ debug_flag(_, '\u2718'). % X