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,1317 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker, Johan Romme
4
+ E-mail: J.Wielemaker@cs.vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2012-2016, 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(ifprolog,
36
+ [ calling_context/1, % -Module
37
+ context/2, % :Goal, +Mapping
38
+ block/3, % :Goal, +Tag, :Recovery
39
+ exit_block/1, % +Tag
40
+ cut_block/1, % +Tag
41
+
42
+ modify_mode/3, % +PI, -Old, +New
43
+ debug_mode/3, % +PI, -Old, +New
44
+ ifprolog_debug/1, % :Goal,
45
+ debug_config/3, % +Key, +Current, +Value
46
+ float_format/2, % -Old, +New
47
+ program_parameters/1, % -Argv
48
+ user_parameters/1, % -Argv
49
+ match/2, % +Mask, +Atom
50
+ match/3, % +Mask, +Atom, ?Replacements
51
+ lower_upper/2, % ?Lower, ?Upper
52
+ current_error/1, % -Stream
53
+ writeq_atom/2, % +Term, -Atom
54
+ write_atom/2, % +Term, -Atom
55
+ write_formatted_atom/3, % -Atom, +Format, +ArgList
56
+ write_formatted/2, % +Format, +ArgList
57
+ write_formatted/3, % +Stream, +Format, +ArgList
58
+ atom_part/4, % +Atom, +Pos, +Len, -Sub
59
+ atom_prefix/3, % +Atom, +Len, -Sub
60
+ atom_suffix/3, % +Atom, +Len, -Sub
61
+ atom_split/3, % +Atom, +Delimiter, ?Subatoms
62
+ if_concat_atom/2, % +List, ?Atom
63
+ if_concat_atom/3, % +List, +Delimiter, ?Atom
64
+ getchar/3, % +Atom, +Pos, -Char
65
+ parse_atom/6, % +Atom, +StartPos, ?EndPos,
66
+ % ?Term, ?VarList, ?Error
67
+ index/3, % +Atom, +String, -Position
68
+ list_length/2, % +List, ?Length
69
+ load/1, % :FileName
70
+ % unload/1, % +Module
71
+ file_test/2, % +File, +Mode
72
+ filepos/2, % @Stream, -Line
73
+ filepos/3, % @Stream, -Line, -Column
74
+ getcwd/1, % -Dir
75
+ assign_alias/2, % +Alias, @Stream
76
+ get_until/3, % +SearchChar, ?Text, ?EndChar
77
+ get_until/4, % @In, +SearchChar, ?Text, ?EndChar
78
+ for/3, % +Start, ?Counter, +End
79
+ prolog_version/1, % -Atom
80
+ proroot/1, % -Atom
81
+ system_name/1, % -Atom
82
+ localtime/9, % +Time, ?Year, ?Month,
83
+ % ?Day, ?DoW, ?DoY,
84
+ % ?Hour, ?Min, ?Sec
85
+
86
+ asserta_with_names/2, % @Term, +VarNames
87
+ assertz_with_names/2, % @Term, +VarNames
88
+ clause_with_names/3, % ?Head, ?Body, ?VarNames
89
+ retract_with_names/2, % ?Clause, ?VarNames
90
+ predicate_type/2, % @Predicate, ?Type
91
+ current_visible/2, % @Module, @Predicate
92
+ current_signal/2, % ?Signal, ?Mode
93
+ digit/1, % +Character
94
+ letter/1, % +Character
95
+
96
+ current_global/1, % +Name
97
+ get_global/2, % +Name, ?Value
98
+ set_global/2, % +Name, ?Value
99
+ unset_global/1, % +Name
100
+
101
+ current_default_module/1, % -Module
102
+ set_default_module/1, % +Module
103
+
104
+ op(1150, fx, (meta)),
105
+ op(1150, fx, (export)),
106
+ op(100, xfx, @),
107
+ op(900, xfx, =>),
108
+ op(900, fy, not)
109
+ ]).
110
+ :- use_module(library(debug)).
111
+ :- use_module(library(arithmetic)).
112
+ :- use_module(library(memfile)).
113
+ :- use_module(library(apply)).
114
+ :- set_prolog_flag(double_quotes, codes).
115
+
116
+ /** <module> IF/Prolog compatibility package
117
+
118
+ This library realises emulation of IF/Prolog. As with all the emulation
119
+ layers in the dialect directory, the emulation has been established on
120
+ `as needed' basis from porting programs. This implies that the emulation
121
+ is incomplete. Emumated directives, predicates and libraries are often
122
+ not 100% compatible with the IF/Prolog version.
123
+
124
+ Note that this emulation layer targets primarily IF/Prolog version 5.
125
+
126
+ Please help extending this library and submit patches to
127
+ bugs@swi-prolog.org.
128
+ */
129
+
130
+ :- module_transparent
131
+ calling_context/1.
132
+
133
+ :- meta_predicate
134
+ context(0, +),
135
+ block(0, +, 0),
136
+ modify_mode(:, -, +),
137
+ debug_mode(:, -, +),
138
+ ifprolog_debug(0),
139
+ load(:),
140
+ asserta_with_names(:, +),
141
+ assertz_with_names(:, +),
142
+ clause_with_names(:, -, -),
143
+ retract_with_names(:, -),
144
+ predicate_type(:, -),
145
+ current_global(:),
146
+ get_global(:, -),
147
+ set_global(:, +),
148
+ unset_global(:).
149
+
150
+
151
+ /*******************************
152
+ * EXPANSION *
153
+ *******************************/
154
+
155
+ :- multifile
156
+ user:goal_expansion/2,
157
+ user:term_expansion/2,
158
+ user:file_search_path/2,
159
+ user:prolog_file_type/2,
160
+ ifprolog_goal_expansion/2,
161
+ ifprolog_term_expansion/2.
162
+ :- dynamic
163
+ user:goal_expansion/2,
164
+ user:term_expansion/2,
165
+ user:file_search_path/2,
166
+ user:prolog_file_type/2.
167
+
168
+ :- dynamic
169
+ in_module_interface/1.
170
+
171
+ user:goal_expansion(In, Out) :-
172
+ prolog_load_context(dialect, ifprolog),
173
+ ifprolog_goal_expansion(In, Out).
174
+
175
+ user:term_expansion(In, Out) :-
176
+ prolog_load_context(dialect, ifprolog),
177
+ ifprolog_term_expansion(In, Out).
178
+
179
+ %% ifprolog_goal_expansion(+In, +Out)
180
+ %
181
+ % goal_expansion rules to emulate IF/Prolog behaviour in
182
+ % SWI-Prolog. The expansions below maintain optimization from
183
+ % compilation. Defining them as predicates would loose
184
+ % compilation.
185
+
186
+ %% context(:Goal, Handler)
187
+ %
188
+ % Is mapped to catch(Goal, Error, Recover) is Handler is
189
+ % =|error(_,_) => Recover|=. Other cases are not covered by the
190
+ % emulation.
191
+
192
+ %% asserta(Head,Body) is det.
193
+ %% assertz(Head,Body) is det.
194
+ %% retract(Head,Body) is det.
195
+ %
196
+ % Mapped to asserta((Head:-Body)), etc. Note that this masks
197
+ % SWI-Prolog's asserta/2, etc.
198
+
199
+ ifprolog_goal_expansion(Module:Goal, Expanded) :-
200
+ Module == system, nonvar(Goal), !,
201
+ expand_goal(Goal, ExpandedGoal),
202
+ head_pi(ExpandedGoal, PI),
203
+ ( current_predicate(ifprolog:PI),
204
+ \+ predicate_property(ExpandedGoal, imported_from(_))
205
+ -> Expanded = ifprolog:ExpandedGoal
206
+ ; Expanded = ExpandedGoal
207
+ ).
208
+ ifprolog_goal_expansion(Goal, Expanded) :-
209
+ if_goal_expansion(Goal, Expanded).
210
+
211
+ if_goal_expansion(context(Goal, [Error => Recover]),
212
+ catch(Goal, Error, Recover)) :-
213
+ assertion(Error = error(_,_)).
214
+ if_goal_expansion(assertz(Head,Body),
215
+ assertz((Head:-Body))).
216
+ if_goal_expansion(asserta(Head,Body),
217
+ asserta((Head:-Body))).
218
+ if_goal_expansion(retract(Head,Body),
219
+ retract((Head:-Body))).
220
+ if_goal_expansion(Call@Module, call((Module:Goal)@Module)) :-
221
+ nonvar(Call),
222
+ Call = call(Goal).
223
+ if_goal_expansion(concat_atom(L,A), if_concat_atom(L,A)).
224
+ if_goal_expansion(concat_atom(L,D,A), if_concat_atom(L,D,A)).
225
+
226
+
227
+ head_pi(M:Head, M:PI) :- !,
228
+ head_pi(Head, PI).
229
+ head_pi(Head, Name/Arity) :-
230
+ functor(Head, Name, Arity).
231
+
232
+
233
+ %% ifprolog_term_expansion(+In, +Out)
234
+ %
235
+ % term_expansion rules to emulate IF/Prolog behaviour in
236
+ % SWI-Prolog.
237
+
238
+ %% meta(+ListOfPI)
239
+ %
240
+ % Mapped to module_transparent/1. Not sure whether this is
241
+ % correct. It surely is not very elegant to map to a deprecated
242
+ % feature. Luckily, although the module_transparent/1 API is
243
+ % deprecated, the underlying functionality is still core of the
244
+ % module system.
245
+ %
246
+ % Note that if :- meta appears inside a module interface, the
247
+ % predicate is also exported.
248
+
249
+ %% export(+ListOfPI) is det.
250
+ %% discontiguous(+ListOfPI) is det.
251
+ %
252
+ % Mapped to comma-lists
253
+
254
+ %% module(+Name).
255
+ %% begin_module(+Name).
256
+ %% end_module(+Name).
257
+ %
258
+ % These are emulated correctly, provided module/1 is the first
259
+ % term of the file and the implementation is part of the same
260
+ % file. Begin/end are ignored.
261
+
262
+ ifprolog_term_expansion((:- meta([])), []).
263
+ ifprolog_term_expansion((:- meta(List)),
264
+ [ (:- module_transparent(Spec))
265
+ | Export
266
+ ]) :-
267
+ pi_list_to_pi_term(List, Spec),
268
+ ( in_module_interface(_)
269
+ -> Export = [(:- export(Spec))]
270
+ ; Export = []
271
+ ).
272
+
273
+ ifprolog_term_expansion((:- export([])), []).
274
+ ifprolog_term_expansion((:- export(List)),
275
+ (:- export(Spec))) :-
276
+ is_list(List),
277
+ pi_list_to_pi_term(List, Spec).
278
+
279
+ ifprolog_term_expansion((:- private(_)), []).
280
+
281
+ ifprolog_term_expansion((:- discontiguous([])), []).
282
+ ifprolog_term_expansion((:- discontiguous(List)),
283
+ (:- discontiguous(Spec))) :-
284
+ is_list(List),
285
+ pi_list_to_pi_term(List, Spec).
286
+
287
+ ifprolog_term_expansion((:- multifile([])), []).
288
+ ifprolog_term_expansion((:- multifile(List)),
289
+ (:- multifile(Spec))) :-
290
+ is_list(List),
291
+ pi_list_to_pi_term(List, Spec).
292
+
293
+ ifprolog_term_expansion((:- module(Name)),
294
+ (:- module(Name, []))) :-
295
+ asserta(in_module_interface(Name)).
296
+ ifprolog_term_expansion((:- begin_module(Name)), []) :-
297
+ prolog_load_context(module, Loading),
298
+ assertion(Name == Loading),
299
+ retract(in_module_interface(Name)).
300
+ ifprolog_term_expansion((:- end_module(_)), []).
301
+ ifprolog_term_expansion((:- end_module), []).
302
+ ifprolog_term_expansion((:- nonotify), []). % TBD: set verbosity
303
+
304
+
305
+ ifprolog_term_expansion((:- import(Module)),
306
+ (:- use_module(File))) :-
307
+ ( module_property(Module, file(File))
308
+ -> true
309
+ ; existence_error(module, Module)
310
+ ).
311
+ ifprolog_term_expansion((:- import(Module, ImportList)),
312
+ (:- use_module(File, ImportList))) :-
313
+ ( module_property(Module, file(File))
314
+ -> true
315
+ ; existence_error(module, Module)
316
+ ).
317
+
318
+ %% pi_list_to_pi_term(+List, -CommaList) is det.
319
+
320
+ pi_list_to_pi_term([PI], PI) :- !.
321
+ pi_list_to_pi_term([H|T], (H,CommaList)) :-
322
+ pi_list_to_pi_term(T, CommaList).
323
+
324
+ /*******************************
325
+ * LIBRARY SETUP *
326
+ *******************************/
327
+
328
+ %% push_ifprolog_library
329
+ %
330
+ % Pushes searching for dialect/ifprolog in front of every library
331
+ % directory that contains such as sub-directory.
332
+
333
+ push_ifprolog_library :-
334
+ ( absolute_file_name(library(dialect/ifprolog), Dir,
335
+ [ file_type(directory),
336
+ access(read),
337
+ solutions(all),
338
+ file_errors(fail)
339
+ ]),
340
+ asserta((user:file_search_path(library, Dir) :-
341
+ prolog_load_context(dialect, ifprolog))),
342
+ fail
343
+ ; true
344
+ ).
345
+
346
+ %% push_ifprolog_file_extension
347
+ %
348
+ % Looks for .pro files before looking for .pl files if the current
349
+ % dialect is =pro=. If the dialect is not active, the .pro files
350
+ % are found as last resort.
351
+
352
+ push_ifprolog_file_extension :-
353
+ asserta((user:prolog_file_type(pro, prolog) :-
354
+ prolog_load_context(dialect, ifprolog))).
355
+
356
+ user:prolog_file_type(pro, prolog) :-
357
+ \+ prolog_load_context(dialect, ifprolog).
358
+
359
+ :- push_ifprolog_library,
360
+ push_ifprolog_file_extension.
361
+
362
+
363
+ /*******************************
364
+ * PREDICATES *
365
+ *******************************/
366
+
367
+ %% calling_context(-Context)
368
+ %
369
+ % Mapped to context_module/1.
370
+
371
+ calling_context(Context) :-
372
+ context_module(Context).
373
+
374
+ %% context(:Goal, +Mapping)
375
+ %
376
+ % IF/Prolog context/2 construct. This is the true predicate. This
377
+ % is normally mapped by goal-expansion.
378
+ %
379
+ % @bug Does not deal with IF/Prolog signal mapping
380
+
381
+ context(M:Goal, Mapping) :-
382
+ member(Error => Action, Mapping),
383
+ nonvar(Error),
384
+ Error = error(_,_), !,
385
+ catch(M:Goal, Error, Action).
386
+ context(M:Goal, _Mapping) :-
387
+ M:Goal.
388
+
389
+ %% block(:Goal, +Tag, :Recovery).
390
+ %% exit_block(+Tag).
391
+ %% cut_block(+Tag) is semidet.
392
+ %
393
+ % The control construct block/3 runs Goal in a block labelled Tag.
394
+ % If Goal calls exit_block/1 using a matching Tag, the execution
395
+ % of Goal is abandoned using exception handling and execution
396
+ % continues by running Recovery. Goal can call cut_block/1. If
397
+ % there is a block with matching Tag, all choice points created
398
+ % since the block was started are destroyed.
399
+ %
400
+ % @bug The block control structure is implemented on top of
401
+ % catch/3 and throw/1. If catch/3 is used inside Goal,
402
+ % the user must ensure that either (1) the protected
403
+ % goal does not call exit_block/1 or cut_block/1 or (2)
404
+ % the _Catcher_ of the catch/3 call does *not* unify with
405
+ % a term block(_,_).
406
+
407
+ block(Goal, Tag, Recovery) :-
408
+ prolog_current_choice(Choice),
409
+ catch(Goal, block(Tag, Choice), Recovery).
410
+
411
+ exit_block(Tag) :-
412
+ throw(block(Tag, _)).
413
+
414
+ cut_block(Tag) :-
415
+ prolog_current_frame(Frame),
416
+ findall(Choice, % use findall/3 to avoid binding
417
+ prolog_frame_attribute(
418
+ Frame, parent_goal,
419
+ system:catch(_, block(Tag, Choice), _)),
420
+ [Choice]),
421
+ nonvar(Choice),
422
+ prolog_cut_to(Choice).
423
+
424
+ %% modify_mode(+PI, -OldMode, +NewMode) is det.
425
+ %
426
+ % Switch between static and dynamic code. Fully supported, but
427
+ % notably changing static to dynamic code is not allowed if the
428
+ % predicate has clauses.
429
+
430
+ modify_mode(PI, OldMode, NewMode) :-
431
+ pi_head(PI, Head),
432
+ old_mode(Head, OldMode),
433
+ set_mode(PI, OldMode, NewMode).
434
+
435
+ old_mode(Head, Mode) :-
436
+ ( predicate_property(Head, dynamic)
437
+ -> Mode = on
438
+ ; Mode = off
439
+ ).
440
+
441
+ set_mode(_, Old, Old) :- !.
442
+ set_mode(PI, _, on) :- !,
443
+ dynamic(PI).
444
+ set_mode(PI, _, off) :-
445
+ compile_predicates([PI]).
446
+
447
+ pi_head(M:PI, M:Head) :- !,
448
+ pi_head(PI, Head).
449
+ pi_head(Name/Arity, Term) :-
450
+ functor(Term, Name, Arity).
451
+
452
+ %% debug_mode(:PI, -Old, +New)
453
+ %
454
+ % Old is not unified. Only New == off is mapped to disable
455
+ % debugging of a predicate.
456
+
457
+ debug_mode(PI, _, off) :- !,
458
+ '$hide'(PI).
459
+ debug_mode(_, _, on).
460
+
461
+ %% ifprolog_debug(:Goal)
462
+ %
463
+ % Map IF/Prolog debug(Goal)@Module. This should run Goal in debug
464
+ % mode. We rarely needs this type of measures in SWI-Prolog.
465
+
466
+ ifprolog_debug(Goal) :-
467
+ Goal.
468
+
469
+ %% debug_config(+Key, -Current, +Value)
470
+ %
471
+ % Ignored. Prints a message.
472
+
473
+ debug_config(Key,Current,Value) :-
474
+ print_message(informational, ignored(debug_config(Key,Current,Value))).
475
+
476
+ %% float_format(-Old, +New)
477
+ %
478
+ % Ignored. Prints a message. Cannot be emulated. Printing floats
479
+ % with a specified precision can only be done using format/2.
480
+
481
+ float_format(Old, New) :-
482
+ print_message(informational, ignored(float_format(Old, New))).
483
+
484
+ %% program_parameters(-List:atom)
485
+ %
486
+ % All command-line argument, including the executable,
487
+
488
+ program_parameters(Argv) :-
489
+ current_prolog_flag(os_argv, Argv).
490
+
491
+ %% user_parameters(-List:atom)
492
+ %
493
+ % Parameters after =|--|=.
494
+
495
+ user_parameters(Argv) :-
496
+ current_prolog_flag(argv, Argv).
497
+
498
+ %% match(+Mask, +Atom) is semidet.
499
+ %
500
+ % Same as once(match(Mask, Atom, _Replacements)).
501
+
502
+ match(Mask, Atom) :-
503
+ match(Mask, Atom, _), !.
504
+
505
+ %% match(+Mask, +Atom, ?Replacements) is nondet.
506
+ %
507
+ % Pattern matching. This emulation should be complete. Can be
508
+ % optimized using caching of the pattern-analysis or doing the
509
+ % analysis at compile-time.
510
+
511
+ match(Mask, Atom, Replacements) :-
512
+ atom_codes(Mask, MaskCodes),
513
+ atom_codes(Atom, Codes),
514
+ phrase(match_pattern(Pattern), MaskCodes), !,
515
+ pattern_goal(Pattern, Codes, Replacements, Goal),
516
+ Goal.
517
+
518
+ pattern_goal([], [], [], true).
519
+ pattern_goal([string(String)|T], Codes, Replacements, Goal) :- !,
520
+ append(String, Rest, Codes),
521
+ pattern_goal(T, Rest, Replacements, Goal).
522
+ pattern_goal([star|T], Codes, [Atom|Replacements], Goal) :-
523
+ append(Replacement, Rest, Codes),
524
+ Goal = (atom_codes(Atom, Replacement),Goal2),
525
+ pattern_goal(T, Rest, Replacements, Goal2).
526
+ pattern_goal([set(S)|T], [C|Rest], [Atom|Replacements], Goal) :-
527
+ memberchk(C, S), !,
528
+ Goal = (char_code(Atom, C),Goal2),
529
+ pattern_goal(T, Rest, Replacements, Goal2).
530
+ pattern_goal([any|T], [C|Rest], [Atom|Replacements], Goal) :-
531
+ Goal = (char_code(Atom, C),Goal2),
532
+ pattern_goal(T, Rest, Replacements, Goal2).
533
+
534
+ match_pattern([set(S)|T]) -->
535
+ "[",
536
+ match_set(S), !,
537
+ match_pattern(T).
538
+ match_pattern([string(List)|T]) -->
539
+ non_special(List),
540
+ { List \== [] }, !,
541
+ match_pattern(T).
542
+ match_pattern([star|T]) -->
543
+ "*", !,
544
+ match_pattern(T).
545
+ match_pattern([any|T]) -->
546
+ "?", !,
547
+ match_pattern(T).
548
+ match_pattern([]) --> [].
549
+
550
+ match_set([]) --> "]", !.
551
+ match_set(L) -->
552
+ [C0], "-", [C1],
553
+ { C1 \= 0'],
554
+ C0 =< C1,
555
+ numlist(C0, C1, Range),
556
+ append(Range, T, L)
557
+ },
558
+ match_set(T).
559
+ match_set([C|L]) -->
560
+ [C],
561
+ match_set(L).
562
+
563
+ non_special([H|T]) -->
564
+ [H],
565
+ { \+ special(H) }, !,
566
+ non_special(T).
567
+ non_special([]) --> [].
568
+
569
+ special(0'*).
570
+ special(0'?).
571
+ special(0'[).
572
+
573
+ %% lower_upper(+Lower, -Upper) is det.
574
+ %% lower_upper(-Lower, +Upper) is det.
575
+ %
576
+ % Multi-moded combination of upcase_atom/2 and downcase_atom/2.
577
+
578
+
579
+ lower_upper(Lower, Upper) :-
580
+ nonvar(Lower), !,
581
+ upcase_atom(Lower, Upper).
582
+ lower_upper(Lower, Upper) :-
583
+ downcase_atom(Upper, Lower).
584
+
585
+ %% load(File)
586
+ %
587
+ % Mapped to consult. I think that the compatible version should
588
+ % only load .qlf (compiled) code.
589
+
590
+ load(File) :-
591
+ consult(File).
592
+
593
+ %% unload(+Module) is det.
594
+ %
595
+ % Unload the named module.
596
+ %
597
+ % @bug: What to do with modules that are not associated to a
598
+ % file?
599
+
600
+ unload(Module) :-
601
+ module_property(Module, file(File)), !,
602
+ unload_file(File).
603
+ unload(_Module) :-
604
+ assertion(fail).
605
+
606
+ %% file_test(+File, +Mode)
607
+ %
608
+ % Mapped to access_file/2 (which understand more modes). Note that
609
+ % this predicate is defined in the module =system= to allow for
610
+ % direct calling.
611
+
612
+ file_test(File, Mode) :-
613
+ access_file(File, Mode).
614
+
615
+ %% filepos(@Stream, -Line)
616
+ %
617
+ % from the IF/Prolog documentation The predicate filepos/2
618
+ % determines the current line position of the specified input
619
+ % stream and unifies the result with Line. The current line
620
+ % position is the number of line processed + 1
621
+
622
+ filepos(Stream, Line) :-
623
+ line_count(Stream, L),
624
+ Line is L + 1.
625
+
626
+
627
+ %% getcwd(-Dir)
628
+ %
629
+ % The predicate getcwd/1 unifies Dir with the full pathname of the
630
+ % current working directory.
631
+
632
+ getcwd(Dir) :-
633
+ working_directory(Dir, Dir).
634
+
635
+ %% filepos(@Stream, -Line, -Column)
636
+ %
637
+ % from the IF/Prolog documentation The predicate filepos/2
638
+ % determines the current line position of the specified input
639
+ % stream and unifies the result with Line. The current line
640
+ % position is the number of line processed + 1
641
+
642
+ filepos(Stream, Line, Column) :-
643
+ line_count(Stream, L),
644
+ line_position(Stream, C),
645
+ Line is L + 1,
646
+ Column is C + 1.
647
+
648
+ %% assign_alias(+Alias, @Stream) is det.
649
+ %
650
+
651
+ assign_alias(Alias, Stream) :-
652
+ set_stream(Stream, alias(Alias)).
653
+
654
+ %% writeq_atom(+Term, -Atom)
655
+ %
656
+ % Use writeq/1 to write Term to Atom.
657
+
658
+ writeq_atom(Term, Atom) :-
659
+ with_output_to(atom(Atom), writeq(Term)).
660
+
661
+ %% write_atom(+Term, -Atom)
662
+ %
663
+ % Use write/1 to write Term to Atom.
664
+
665
+ write_atom(Term, Atom) :-
666
+ with_output_to(atom(Atom), write(Term)).
667
+
668
+ %% current_error(-Stream)
669
+ %
670
+ % Doesn't exist in SWI-Prolog, but =user_error= is always an alias
671
+ % to the current error stream.
672
+
673
+ current_error(user_error).
674
+
675
+
676
+ /*******************************
677
+ * FORMATTED WRITE *
678
+ *******************************/
679
+
680
+ %% write_formatted_atom(-Atom, +Format, +ArgList) is det.
681
+ %% write_formatted(+Format, +ArgList) is det.
682
+ %% write_formatted(@Stream, +Format, +ArgList) is det.
683
+ %
684
+ % Emulation of IF/Prolog formatted write. The emulation is very
685
+ % incomplete. Notable asks for dealing with aligned fields, etc.
686
+ %
687
+ % @bug Not all format characters are processed
688
+ % @bug Incomplete processing of modifiers, fieldwidth and precision
689
+ % @tbd This should become goal-expansion based to process
690
+ % format specifiers at compile-time.
691
+
692
+ write_formatted_atom(Atom, Format, ArgList) :-
693
+ with_output_to(atom(Atom), write_formatted(Format, ArgList)).
694
+
695
+ write_formatted(Format, ArgList) :-
696
+ write_formatted(current_output, Format, ArgList).
697
+
698
+ write_formatted(Out, Format, ArgList) :-
699
+ atom_codes(Format, Codes),
700
+ phrase(format_string(FormatCodes), Codes), !,
701
+ string_codes(FormatString, FormatCodes),
702
+ format(Out, FormatString, ArgList).
703
+
704
+ format_string([]) --> [].
705
+ format_string(Fmt) -->
706
+ "%", format_modifiers(Flags, FieldLen, Precision), [IFC], !,
707
+ { map_format([IFC], Flags, FieldLen, Precision, Repl)
708
+ -> append(Repl, T, Fmt)
709
+ ; print_message(warning, ifprolog_format(IFC)),
710
+ %backtrace(20),
711
+ T = Fmt
712
+ },
713
+ format_string(T).
714
+ format_string([H|T]) -->
715
+ [H],
716
+ format_string(T).
717
+
718
+ map_format(Format, [], default, default, Mapped) :- !,
719
+ map_format(Format, Mapped).
720
+ map_format(Format, Flags, Width, Precision, Mapped) :-
721
+ integer(Width), !, % left/right aligned in Width
722
+ map_format(Format, Field),
723
+ format_precision(Precision, Field, PrecField),
724
+ fill_code(Flags, [Fill]),
725
+ ( memberchk(-, Flags) % left aligned
726
+ -> format(codes(Mapped), '~~|~s~~`~ct~~~d+', [PrecField, Fill, Width])
727
+ ; format(codes(Mapped), '~~|~~`~ct~s~~~d+', [Fill, PrecField, Width])
728
+ ).
729
+ map_format(Format, Flags, _, _, Mapped) :-
730
+ memberchk(#, Flags),
731
+ can_format(Format, Mapped), !.
732
+ map_format(Format, _, _, Precision, Mapped) :-
733
+ map_format(Format, Field),
734
+ format_precision(Precision, Field, Mapped).
735
+
736
+ can_format("o", "0~8r").
737
+ can_format("x", "0x~16r").
738
+ can_format("X", "0x~16R").
739
+ can_format("w", "~k").
740
+
741
+ map_format("t", "~w").
742
+ map_format("q", "~q").
743
+ map_format("s", "~a").
744
+ map_format("f", "~f").
745
+ map_format("e", "~e").
746
+ map_format("E", "~E").
747
+ map_format("g", "~G").
748
+ map_format("d", "~d").
749
+ map_format("x", "~16r").
750
+ map_format("o", "~8r").
751
+ map_format("X", "~16R").
752
+ map_format("O", "~8R").
753
+ map_format("c", "~c").
754
+ map_format("%", "%").
755
+
756
+ have_precision("d").
757
+ have_precision("D").
758
+ have_precision("e").
759
+ have_precision("E").
760
+ have_precision("f").
761
+ have_precision("g").
762
+ have_precision("G").
763
+
764
+ format_precision(N, [0'~|C], [0'~|Field]) :-
765
+ integer(N),
766
+ have_precision(C),
767
+ !,
768
+ format(codes(Field), '~d~s', [N, C]).
769
+ format_precision(_, Field, Field).
770
+
771
+ fill_code(Flags, "0") :- memberchk(0, Flags), !.
772
+ fill_code(_, " ").
773
+
774
+ %% format_modifiers(-Flags, -FieldLength, -Precision) is det.
775
+ %
776
+ % Read the IF/Prolog format modifiers. We currently do not process
777
+ % any of the modifiers! Some code seems to be using e.g. %07lx. We
778
+ % assume this is the same as -07x (assuming l=left).
779
+
780
+ format_modifiers(Flags, FieldLength, Precision) -->
781
+ format_flags(Flags0),
782
+ digits(FieldLengthDigits),
783
+ { FieldLengthDigits == []
784
+ -> FieldLength = default
785
+ ; number_codes(FieldLength, FieldLengthDigits)
786
+ },
787
+ ( "."
788
+ -> digits(PrecisionDigits),
789
+ { number_codes(Precision, PrecisionDigits) }
790
+ ; { Precision = default }
791
+ ),
792
+ opt_alignment(Flags0, Flags).
793
+
794
+ format_flags([H|T]) -->
795
+ format_flag(H), !,
796
+ format_flags(T).
797
+ format_flags([]) --> [].
798
+
799
+ format_flag(+) --> "+". % Always prefix number with a sign
800
+ format_flag(-) --> "-". % Left-justify
801
+ format_flag(space) --> " ". % Space before positive numbers
802
+ format_flag(#) --> "#". % Canonical output
803
+ format_flag(0) --> "0". % Use leading 0 for integers
804
+
805
+ digits([D0|T]) -->
806
+ digit(D0), !,
807
+ digits(T).
808
+ digits([]) --> [].
809
+
810
+ digit(D) --> [D], {between(0'0, 0'9, D)}.
811
+
812
+ opt_alignment(L, [-|L]) --> "l", !.
813
+ opt_alignment(L, L) --> [].
814
+
815
+
816
+ %% get_until(+SearchChar, -Text, -EndChar) is det.
817
+ %% get_until(@Stream, +SearchChar, -Text, -EndChar) is det.
818
+ %
819
+ % Read input from Stream until SearchChar. Unify EndChar with
820
+ % either SearchChar or the atom =end_of_file=.
821
+
822
+ get_until(SearchChar, Text, EndChar) :-
823
+ get_until(current_input, SearchChar, Text, EndChar).
824
+
825
+ get_until(In, SearchChar, Text, EndChar) :-
826
+ get_char(In, C0),
827
+ get_until(C0, In, SearchChar, Codes, EndChar),
828
+ atom_chars(Text, Codes).
829
+
830
+ get_until(C0, _, C0, [], C0) :- !.
831
+ get_until(end_of_file, _, _, [], end_of_file) :- !.
832
+ get_until(C0, In, Search, [C0|T], End) :-
833
+ get_char(In, C1),
834
+ get_until(C1, In, Search, T, End).
835
+
836
+
837
+ /*******************************
838
+ * PARSE *
839
+ *******************************/
840
+
841
+ %% atom_part(+Atom, +Pos, +Len, -Sub) is det.
842
+ %
843
+ % True when Sub is part of the atom [Pos,Pos+Len). Unifies Sub
844
+ % with '' if Pos or Len is out of range!?
845
+
846
+ atom_part(_, Pos, _, Sub) :-
847
+ Pos < 1, !,
848
+ Sub = ''.
849
+ atom_part(_, _, Len, Sub) :-
850
+ Len < 1, !,
851
+ Sub = ''.
852
+ atom_part(Atom, Pos, _, Sub) :-
853
+ atom_length(Atom, Len),
854
+ Pos > Len, !,
855
+ Sub = ''.
856
+ atom_part(Atom, Pos, Len, Sub) :-
857
+ Pos >= 1,
858
+ Pos0 is Pos - 1,
859
+ atom_length(Atom, ALen),
860
+ Len0 is min(Len, ALen-Pos0),
861
+ sub_atom(Atom, Pos0, Len0, _, Sub).
862
+
863
+ %% atom_prefix(+Atom, +Len, -Sub) is det.
864
+ %
865
+ % Unifies Sub with the atom formed by the first Len characters in
866
+ % atom.
867
+ %
868
+ % - If Len < 1, Sub is unified with the null atom ''.
869
+ % - If Len > length of Atom, Sub is unified with Atom.
870
+
871
+ atom_prefix(_, Len, Sub) :-
872
+ Len < 1, !,
873
+ Sub = ''.
874
+ atom_prefix(Atom, Len, Sub) :-
875
+ atom_length(Atom, AtomLen),
876
+ Len > AtomLen, !,
877
+ Sub = Atom.
878
+ atom_prefix(Atom, Len, Sub) :-
879
+ sub_atom(Atom, 0, Len, _, Sub).
880
+
881
+ %% atom_suffix(+Atom, +Len, -Sub) is det.
882
+ %
883
+ % Unifies Sub with the atom formed by the last Len characters in
884
+ % atom.
885
+ %
886
+ % - If Len < 1, Sub is unified with the null atom ''.
887
+ % - If Len > length of Atom, Sub is unified with Atom.
888
+
889
+ atom_suffix(_, Len, Sub) :-
890
+ Len < 1, !,
891
+ Sub = ''.
892
+ atom_suffix(Atom, Len, Sub) :-
893
+ atom_length(Atom, AtomLen),
894
+ Len > AtomLen, !,
895
+ Sub = Atom.
896
+ atom_suffix(Atom, Len, Sub) :-
897
+ atom_length(Atom, AtomLen),
898
+ Pos is AtomLen - Len,
899
+ sub_atom(Atom, Pos, Len, _, Sub).
900
+
901
+ %% atom_split( +Atom, +Delimiter, ?Subatoms )
902
+ %
903
+ % Split Atom over Delimiter and unify the parts with Subatoms.
904
+
905
+ atom_split(Atom, Delimiter, Subatoms) :-
906
+ atomic_list_concat(Subatoms, Delimiter, Atom).
907
+
908
+ %% if_concat_atom(+List, +Delimiter, -Atom) is det.
909
+ %
910
+ % True when Atom is the concatenation of the lexical form of all
911
+ % elements from List, using Delimiter to delimit the elements.
912
+ %
913
+ % The behavior of this ifprolog predicate is different w.r.t.
914
+ % SWI-Prolog in two respect: it supports arbitrary terms in List
915
+ % rather than only atomic and it does _not_ work in mode -,+,+.
916
+
917
+ if_concat_atom(List, Delimiter, Atom) :-
918
+ maplist(write_term_to_atom, List, AtomList),
919
+ atomic_list_concat(AtomList, Delimiter, Atom).
920
+
921
+ write_term_to_atom(Term, Atom) :-
922
+ ( atomic(Term)
923
+ -> Atom = Term
924
+ ; with_output_to(string(Atom), write(Term))
925
+ ).
926
+
927
+ %% if_concat_atom(+List, -Atom) is det.
928
+ %
929
+ % True when Atom is the concatenation of the lexical form of all
930
+ % elements from List. Same as if_concat_atom/3 using '' as
931
+ % delimiter.
932
+
933
+ if_concat_atom(List, Atom) :-
934
+ maplist(write_term_to_atom, List, AtomList),
935
+ atomic_list_concat(AtomList, Atom).
936
+
937
+ %% getchar(+Atom, +Pos, -Char)
938
+ %
939
+ % Unifies Char with the Position-th character in Atom
940
+ % If Pos < 1 or Pos > length of Atom, then fail.
941
+
942
+ getchar(_, Pos, _) :-
943
+ Pos < 1, !,
944
+ fail.
945
+ getchar(Atom, Pos, _) :-
946
+ atom_length(Atom, Len),
947
+ Pos > Len, !,
948
+ fail.
949
+ getchar(Atom, Pos, Char) :-
950
+ P is Pos - 1,
951
+ sub_atom(Atom, P, 1, _, Char).
952
+
953
+
954
+ %% parse_atom(+Atom, +StartPos, ?EndPos, ?Term, ?VarList, ?Error)
955
+ %
956
+ % Read from an atom.
957
+ %
958
+ % @param StartPos is 1-based position to start reading
959
+ % @param Error is the 1-based position of a syntax error or 0 if
960
+ % there is no error.
961
+
962
+ parse_atom(Atom, StartPos, EndPos, Term, VarList, Error) :-
963
+ setup_call_cleanup(
964
+ ( atom_to_memory_file(Atom, MemF),
965
+ open_memory_file(MemF, read, In)
966
+ ),
967
+ ( StartPos0 is StartPos-1,
968
+ seek(In, StartPos0, bof, _),
969
+ catch(read_term(In, Term, [variable_names(VarList)]), E, true),
970
+ parse_atom_error(E, Error),
971
+ character_count(In, EndPos0),
972
+ EndPos is EndPos0+1
973
+ ),
974
+ ( close(In),
975
+ free_memory_file(MemF)
976
+ )).
977
+
978
+ parse_atom_error(Var, Pos) :-
979
+ var(Var), !, Pos = 0.
980
+ parse_atom_error(error(_, stream(_Stream, _, _, Pos)), Pos1) :-
981
+ Pos1 is Pos+1.
982
+
983
+
984
+ %% index(+Atom, +String, -Position) is semidet.
985
+ %
986
+ % True when Position is the first occurrence of String in Atom.
987
+ % Position is 1-based.
988
+
989
+ index(Atom, String, Position) :-
990
+ sub_string(Atom, Pos0, _, _, String), !,
991
+ Position is Pos0 + 1.
992
+
993
+ %% list_length(+List, ?Length) is det.
994
+ %
995
+ % Deterministic version of length/2. Current implementation simply
996
+ % calls length/2.
997
+
998
+ list_length(List, Length) :-
999
+ length(List, Length).
1000
+
1001
+
1002
+ /*******************************
1003
+ * MISC *
1004
+ *******************************/
1005
+
1006
+ %% for(+Start, ?Count, +End) is nondet.
1007
+ %
1008
+ % Similar to between/3, but can count down if Start > End.
1009
+
1010
+ for(Start, Count, End) :-
1011
+ Start =< End, !,
1012
+ between(Start, End, Count).
1013
+ for(Start, Count, End) :-
1014
+ nonvar(Count), !,
1015
+ between(End, Start, Count).
1016
+ for(Start, Count, End) :-
1017
+ Range is Start-End,
1018
+ between(0, Range, X),
1019
+ Count is Start-X.
1020
+
1021
+ %% prolog_version(-Version)
1022
+ %
1023
+ % Return IF/Prolog simulated version string
1024
+
1025
+ prolog_version(Version) :-
1026
+ current_prolog_flag(version_data, swi(Major, Minor, Patch, _)),
1027
+ atomic_list_concat([Major, Minor, Patch], '.', Version).
1028
+
1029
+ %% proroot(-Path)
1030
+ %
1031
+ % True when Path is the installation location of the Prolog
1032
+ % system.
1033
+
1034
+ proroot(Path) :-
1035
+ current_prolog_flag(home, Path).
1036
+
1037
+ %% system_name(-SystemName)
1038
+ %
1039
+ % True when SystemName identifies the operating system. Note that
1040
+ % this returns the SWI-Prolog =arch= flag, and not the IF/Prolog
1041
+ % identifiers.
1042
+
1043
+ system_name(SystemName) :-
1044
+ current_prolog_flag(arch, SystemName).
1045
+
1046
+ %% localtime(+Time, ?Year, ?Month, ?Day, ?DoW, ?DoY, ?Hour, ?Min, ?Sec)
1047
+ %
1048
+ % Break system time into its components. Deefines components:
1049
+ %
1050
+ % | Year | Year number | 4 digits |
1051
+ % | Month | Month number | 1..12 |
1052
+ % | Day | Day of month | 1..31 |
1053
+ % | DoW | Day of week | 1..7 (Mon-Sun) |
1054
+ % | DoY | Day in year | 1..366 |
1055
+ % | Hour | Hours | 0..23 |
1056
+ % | Min | Minutes | 0..59 |
1057
+ % | Sec | Seconds | 0..59 |
1058
+ %
1059
+ % Note that in IF/Prolog V4, Year is 0..99, while it is a
1060
+ % four-digit number in IF/Prolog V5. We emulate IF/Prolog V5.
1061
+
1062
+ localtime(TimeExpr, Year, Month, Day, DoW, DoY, Hour, Min, Sec) :-
1063
+ arithmetic_expression_value(TimeExpr, Time),
1064
+ stamp_date_time(Time, date(Year, Month, Day,
1065
+ Hour, Min, SecFloat,
1066
+ _Off, _TZ, _DST), local),
1067
+ Sec is floor(SecFloat),
1068
+ Date = date(Year,Month,Day),
1069
+ day_of_the_year(Date, DoY),
1070
+ day_of_the_week(Date, DoW).
1071
+
1072
+
1073
+ %% current_global(+Name) is semidet.
1074
+ %% get_global(+Name, ?Value) is det.
1075
+ %% set_global(+Name, ?Value) is det.
1076
+ %% unset_global(+Name) is det.
1077
+ %
1078
+ % IF/Prolog global variables, mapped to SWI-Prolog's nb_*
1079
+ % predicates.
1080
+
1081
+ current_global(Name) :-
1082
+ gvar_name(Name, GName),
1083
+ nb_current(GName, _).
1084
+
1085
+ get_global(Name, Value) :-
1086
+ gvar_name(Name, GName),
1087
+ nb_getval(GName, Value).
1088
+
1089
+ set_global(Name, Value) :-
1090
+ gvar_name(Name, GName),
1091
+ nb_setval(GName, Value).
1092
+
1093
+ unset_global(Name) :-
1094
+ gvar_name(Name, GName),
1095
+ nb_delete(GName).
1096
+
1097
+ gvar_name(Module:Name, GName) :-
1098
+ atomic_list_concat([Module, :, Name], GName).
1099
+
1100
+
1101
+ %% current_default_module(-Module) is det.
1102
+ %
1103
+ % Name of the toplevel typein module.
1104
+
1105
+ current_default_module(Module) :-
1106
+ '$current_typein_module'(Module).
1107
+
1108
+ %% set_default_module(+Module) is det.
1109
+ %
1110
+ % Set the default toplevel module.
1111
+
1112
+ set_default_module(Module) :-
1113
+ module(Module).
1114
+
1115
+
1116
+ /*******************************
1117
+ * DATABASE *
1118
+ *******************************/
1119
+
1120
+ :- dynamic
1121
+ names/2.
1122
+
1123
+ %% asserta_with_names(@Clause, +VarNames) is det.
1124
+ %% assertz_with_names(@Clause, +VarNames) is det.
1125
+ %% clause_with_names(?Head, ?Body, -VarNames) is det.
1126
+ %% retract_with_names(?Clause, -VarNames) is det.
1127
+ %
1128
+ % Predicates that manage the database while keeping track of
1129
+ % variable names.
1130
+
1131
+ asserta_with_names(M:Clause, VarNames) :-
1132
+ term_varnames(Clause, VarNames, VarTerm),
1133
+ system:asserta(M:Clause, Ref),
1134
+ asserta(names(Ref, VarTerm)).
1135
+ assertz_with_names(M:Clause, VarNames) :-
1136
+ term_varnames(Clause, VarNames, VarTerm),
1137
+ system:assertz(M:Clause, Ref),
1138
+ asserta(names(Ref, VarTerm)).
1139
+
1140
+ term_varnames(Term, VarNames, VarTerm) :-
1141
+ findall(Vars,
1142
+ ( term_variables(Term, Vars),
1143
+ bind_names(VarNames)
1144
+ ),
1145
+ [ VarList ]),
1146
+ VarTerm =.. [ v | VarList ].
1147
+
1148
+ bind_names([]).
1149
+ bind_names([Name=Var|T]) :-
1150
+ Name=Var,
1151
+ bind_names(T).
1152
+
1153
+
1154
+ clause_with_names(M:Head, Body, VarNames) :-
1155
+ clause(M:Head, Body, Ref),
1156
+ ( names(Ref, VarTerm)
1157
+ -> term_variables((Head:-Body), Vars),
1158
+ VarTerm =.. [v|NameList],
1159
+ make_bindings(NameList, Vars, VarNames)
1160
+ ; VarNames = []
1161
+ ).
1162
+
1163
+ retract_with_names(M:Term, VarNames) :-
1164
+ clause(M:Term, Ref),
1165
+ erase(Ref),
1166
+ ( retract(names(Ref, VarTerm))
1167
+ -> term_variables((Term), Vars),
1168
+ VarTerm =.. [v|NameList],
1169
+ make_bindings(NameList, Vars, VarNames)
1170
+ ; VarNames = []
1171
+ ).
1172
+
1173
+ make_bindings([], [], []).
1174
+ make_bindings([Name|NT], [Var|VT], [Name=Var|BT]) :-
1175
+ make_bindings(NT, VT, BT).
1176
+
1177
+
1178
+ %% predicate_type(:PI, -Type) is det.
1179
+ %
1180
+ % True when Type describes the type of PI. Note that the value
1181
+ % =linear= seems to mean you can use clause/2 on it, which is true
1182
+ % for any SWI-Prolog predicate that is defined. Therefore, we use
1183
+ % it for any predicate that is defined.
1184
+
1185
+ predicate_type(M:Name/Arity, Type) :-
1186
+ functor(Head, Name, Arity),
1187
+ Pred = M:Head,
1188
+ ( ( predicate_property(Pred, built_in)
1189
+ ; predicate_property(Pred, foreign)
1190
+ )
1191
+ -> Type = builtin
1192
+ ; predicate_property(Pred, imported_from(_))
1193
+ -> Type = imported
1194
+ ; predicate_property(Pred, dynamic)
1195
+ -> Type = linear
1196
+ ; control(Head)
1197
+ -> Type = control
1198
+ ; Name == call
1199
+ -> Type = control
1200
+ ; current_predicate(M:Name/Arity)
1201
+ -> Type = linear
1202
+ ; Type = undefined
1203
+ ).
1204
+
1205
+ control((_,_)).
1206
+ control((_;_)).
1207
+ control((_->_)).
1208
+ control((_*->_)).
1209
+ control((!)).
1210
+
1211
+ %% current_visible(@Module, @PredicateIndicator).
1212
+ %
1213
+ % FIXME check with documentation
1214
+
1215
+ current_visible(Module, Name/Arity) :-
1216
+ atom(Name), integer(Arity), !,
1217
+ functor(Head, Name, Arity),
1218
+ predicate_property(Module:Head, visible).
1219
+ current_visible(Module, Name/Arity) :-
1220
+ predicate_property(Module:Head, visible),
1221
+ functor(Head, Name, Arity).
1222
+
1223
+ %% current_signal(?Signal, ?Mode) is nondet.
1224
+ %
1225
+ % True when Mode is the current mode for handling Signal. Modes
1226
+ % are =on=, =off=, =default=, =ignore=. Signals are =abort=,
1227
+ % =alarm=, =interrupt=, =pipe=, =quit=, =termination=, =user_1=
1228
+ % and =user_2=.
1229
+ %
1230
+ % @tbd Implement
1231
+
1232
+ current_signal(_,_) :- fail.
1233
+
1234
+
1235
+ %% digit(+A).
1236
+ %
1237
+ % Is the character A a digit [0-9]
1238
+ digit(A) :-
1239
+ char_type(A, digit).
1240
+
1241
+ %% letter(+A).
1242
+ %
1243
+ % Is the character A a letter [A-Za-z]
1244
+ letter(A) :-
1245
+ char_type(A, alpha).
1246
+
1247
+ /*******************************
1248
+ * ARITHMETIC *
1249
+ *******************************/
1250
+
1251
+ :- arithmetic_function(system:time/0).
1252
+ :- arithmetic_function(system:trunc/1).
1253
+ :- arithmetic_function(system:ln/1).
1254
+ :- arithmetic_function(system:minint/0).
1255
+ :- arithmetic_function(system:maxint/0).
1256
+ :- arithmetic_function(system:dbsize/0).
1257
+ :- arithmetic_function(system:dbused/0).
1258
+ :- arithmetic_function(system:ssize/0).
1259
+ :- arithmetic_function(system:gused/0).
1260
+ :- arithmetic_function(system:lused/0).
1261
+ :- arithmetic_function(system:tused/0).
1262
+
1263
+ system:time(Time) :-
1264
+ get_time(GetTime),
1265
+ Time is round(GetTime). % Time in seconds since 1970-01-01 00:00:00 UTC
1266
+ system:trunc(Val, Trunc) :-
1267
+ Trunc is truncate(Val).
1268
+ system:ln(Val, Log) :-
1269
+ Log is log(Val).
1270
+ system:minint(MinInt) :-
1271
+ MinInt is -1<<31.
1272
+ system:maxint(MaxInt) :-
1273
+ MaxInt is 1<<31 - 1.
1274
+ system:dbsize(0).
1275
+ system:dbused(0).
1276
+ system:ssize(Size) :-
1277
+ statistics(globallimit, Size).
1278
+ system:gused(Size) :-
1279
+ statistics(globalused, Size).
1280
+ system:lused(Size) :-
1281
+ statistics(localused, Size).
1282
+ system:tused(Size) :-
1283
+ statistics(trailused, Size).
1284
+
1285
+
1286
+ /*******************************
1287
+ * MESSAGES *
1288
+ *******************************/
1289
+
1290
+ prolog:message(ifprolog_format(IFC)) -->
1291
+ [ 'Unknown specifier for write_formatted/3: ~c'-[IFC] ].
1292
+
1293
+
1294
+ /*******************************
1295
+ * COLOUR SUPPORT *
1296
+ *******************************/
1297
+
1298
+ :- multifile
1299
+ prolog_colour:style/2,
1300
+ prolog_colour:goal_colours/2.
1301
+
1302
+ prolog_colour:goal_colours(meta(_),
1303
+ ifprolog-[predicates]).
1304
+ prolog_colour:goal_colours(private(_),
1305
+ ifprolog-[predicates]).
1306
+ prolog_colour:goal_colours(import(Module,_),
1307
+ ifprolog-[module(Module),predicates]).
1308
+ prolog_colour:goal_colours(begin_module(Module),
1309
+ ifprolog-[module(Module)]).
1310
+ prolog_colour:goal_colours(end_module(Module),
1311
+ ifprolog-[module(Module)]).
1312
+ prolog_colour:goal_colours(end_module,
1313
+ ifprolog-[]).
1314
+ prolog_colour:goal_colours(nonotify,
1315
+ ifprolog-[]).
1316
+
1317
+ prolog_colour:style(goal(ifprolog,_), [ colour(blue), background(lightcyan) ]).