koffi 1.3.8 → 1.3.11

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 (95) hide show
  1. package/ChangeLog.md +24 -0
  2. package/build/qemu/1.3.11/koffi_darwin_arm64.tar.gz +0 -0
  3. package/build/qemu/1.3.11/koffi_darwin_x64.tar.gz +0 -0
  4. package/build/qemu/1.3.11/koffi_freebsd_arm64.tar.gz +0 -0
  5. package/build/qemu/1.3.11/koffi_freebsd_ia32.tar.gz +0 -0
  6. package/build/qemu/1.3.11/koffi_freebsd_x64.tar.gz +0 -0
  7. package/build/qemu/1.3.11/koffi_linux_arm32hf.tar.gz +0 -0
  8. package/build/qemu/1.3.11/koffi_linux_arm64.tar.gz +0 -0
  9. package/build/qemu/1.3.11/koffi_linux_ia32.tar.gz +0 -0
  10. package/build/qemu/1.3.11/koffi_linux_riscv64hf64.tar.gz +0 -0
  11. package/build/qemu/1.3.11/koffi_linux_x64.tar.gz +0 -0
  12. package/build/qemu/1.3.11/koffi_openbsd_ia32.tar.gz +0 -0
  13. package/build/qemu/1.3.11/koffi_openbsd_x64.tar.gz +0 -0
  14. package/build/qemu/1.3.11/koffi_win32_arm64.tar.gz +0 -0
  15. package/build/qemu/1.3.11/koffi_win32_ia32.tar.gz +0 -0
  16. package/build/qemu/1.3.11/koffi_win32_x64.tar.gz +0 -0
  17. package/doc/benchmarks.md +2 -2
  18. package/doc/conf.py +1 -1
  19. package/doc/contribute.md +1 -1
  20. package/doc/dist/doctrees/benchmarks.doctree +0 -0
  21. package/doc/dist/doctrees/changes.doctree +0 -0
  22. package/doc/dist/doctrees/contribute.doctree +0 -0
  23. package/doc/dist/doctrees/environment.pickle +0 -0
  24. package/doc/dist/doctrees/functions.doctree +0 -0
  25. package/doc/dist/doctrees/index.doctree +0 -0
  26. package/doc/dist/doctrees/memory.doctree +0 -0
  27. package/doc/dist/doctrees/platforms.doctree +0 -0
  28. package/doc/dist/doctrees/start.doctree +0 -0
  29. package/doc/dist/doctrees/types.doctree +0 -0
  30. package/doc/dist/html/.buildinfo +1 -1
  31. package/doc/dist/html/_sources/benchmarks.md.txt +2 -2
  32. package/doc/dist/html/_sources/contribute.md.txt +1 -2
  33. package/doc/dist/html/_sources/functions.md.txt +137 -15
  34. package/doc/dist/html/_sources/index.rst.txt +2 -0
  35. package/doc/dist/html/_sources/memory.md.txt +1 -1
  36. package/doc/dist/html/_sources/types.md.txt +27 -11
  37. package/doc/dist/html/_static/basic.css +14 -12
  38. package/doc/dist/html/_static/pygments.css +54 -54
  39. package/doc/dist/html/benchmarks.html +3 -3
  40. package/doc/dist/html/changes.html +9 -1
  41. package/doc/dist/html/contribute.html +2 -3
  42. package/doc/dist/html/functions.html +206 -86
  43. package/doc/dist/html/genindex.html +1 -1
  44. package/doc/dist/html/index.html +7 -7
  45. package/doc/dist/html/memory.html +4 -4
  46. package/doc/dist/html/objects.inv +0 -0
  47. package/doc/dist/html/platforms.html +2 -2
  48. package/doc/dist/html/search.html +1 -1
  49. package/doc/dist/html/searchindex.js +1 -1
  50. package/doc/dist/html/start.html +55 -55
  51. package/doc/dist/html/types.html +172 -159
  52. package/doc/functions.md +9 -7
  53. package/doc/index.rst +2 -0
  54. package/doc/memory.md +1 -1
  55. package/doc/poetry.lock +692 -0
  56. package/doc/pyproject.toml +18 -0
  57. package/doc/{_static → static}/bench_linux.png +0 -0
  58. package/doc/{_static → static}/bench_windows.png +0 -0
  59. package/doc/{_static → static}/custom.css +0 -0
  60. package/doc/{_static → static}/perf_linux_20220623.png +0 -0
  61. package/doc/{_static → static}/perf_linux_20220623_2.png +0 -0
  62. package/doc/{_static → static}/perf_linux_20220627.png +0 -0
  63. package/doc/{_static → static}/perf_linux_20220628.png +0 -0
  64. package/doc/{_static → static}/perf_windows_20220623.png +0 -0
  65. package/doc/{_static → static}/perf_windows_20220623_2.png +0 -0
  66. package/doc/{_static → static}/perf_windows_20220627.png +0 -0
  67. package/doc/{_static → static}/perf_windows_20220628.png +0 -0
  68. package/doc/types.md +1 -1
  69. package/package.json +1 -1
  70. package/qemu/qemu.js +3 -3
  71. package/qemu/registry/machines.json +1 -1
  72. package/src/abi_arm32.cc +3 -3
  73. package/src/abi_riscv64.cc +1 -1
  74. package/src/abi_x64_sysv.cc +1 -1
  75. package/src/abi_x64_win.cc +1 -1
  76. package/src/abi_x64_win_fwd.asm +2 -2
  77. package/src/abi_x86.cc +5 -5
  78. package/src/parser.cc +2 -1
  79. package/test/misc.c +1 -1
  80. package/test/sync.js +2 -2
  81. package/build/qemu/1.3.8/koffi_darwin_arm64.tar.gz +0 -0
  82. package/build/qemu/1.3.8/koffi_darwin_x64.tar.gz +0 -0
  83. package/build/qemu/1.3.8/koffi_freebsd_arm64.tar.gz +0 -0
  84. package/build/qemu/1.3.8/koffi_freebsd_ia32.tar.gz +0 -0
  85. package/build/qemu/1.3.8/koffi_freebsd_x64.tar.gz +0 -0
  86. package/build/qemu/1.3.8/koffi_linux_arm32hf.tar.gz +0 -0
  87. package/build/qemu/1.3.8/koffi_linux_arm64.tar.gz +0 -0
  88. package/build/qemu/1.3.8/koffi_linux_ia32.tar.gz +0 -0
  89. package/build/qemu/1.3.8/koffi_linux_riscv64hf64.tar.gz +0 -0
  90. package/build/qemu/1.3.8/koffi_linux_x64.tar.gz +0 -0
  91. package/build/qemu/1.3.8/koffi_openbsd_ia32.tar.gz +0 -0
  92. package/build/qemu/1.3.8/koffi_openbsd_x64.tar.gz +0 -0
  93. package/build/qemu/1.3.8/koffi_win32_arm64.tar.gz +0 -0
  94. package/build/qemu/1.3.8/koffi_win32_ia32.tar.gz +0 -0
  95. package/build/qemu/1.3.8/koffi_win32_x64.tar.gz +0 -0
@@ -4,7 +4,7 @@
4
4
  <meta name="viewport" content="width=device-width,initial-scale=1"/>
5
5
  <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search" />
6
6
 
7
- <meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/><title>Index - Koffi</title>
7
+ <meta name="generator" content="sphinx-5.0.1, furo 2022.06.04.1"/><title>Index - Koffi</title>
8
8
  <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
9
9
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
10
10
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
@@ -5,7 +5,7 @@
5
5
  <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
6
6
  <link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Requirements" href="platforms" />
7
7
 
8
- <meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
8
+ <meta name="generator" content="sphinx-5.0.1, furo 2022.06.04.1"/>
9
9
  <title>Koffi</title>
10
10
  <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
11
11
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
@@ -204,7 +204,7 @@
204
204
  </div>
205
205
  <article role="main">
206
206
  <section id="koffi-version">
207
- <h1>Koffi 1.3.8<a class="headerlink" href="#koffi-version" title="Permalink to this heading">#</a></h1>
207
+ <h1>Koffi 1.3.7<a class="headerlink" href="#koffi-version" title="Permalink to this heading">#</a></h1>
208
208
  <section id="overview">
209
209
  <h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading">#</a></h2>
210
210
  <p>Koffi is a <strong>fast and easy-to-use C FFI module for Node.js</strong>, featuring:</p>
@@ -215,6 +215,7 @@
215
215
  <li><p>Well-tested code base for <a class="reference internal" href="platforms#supported-platforms"><span class="std std-ref">popular OS/architecture combinations</span></a></p></li>
216
216
  </ul>
217
217
  <p>Koffi requires a recent <a class="reference external" href="https://nodejs.org/">Node.js</a> version with N-API version 8 support, see <a class="reference internal" href="platforms#node-js"><span class="std std-ref">this page</span></a> for more information.</p>
218
+ <p>The source code is available here: <a class="reference external" href="https://github.com/Koromix/luigi/">https://github.com/Koromix/luigi/</a> (in the <em>koffi</em> subdirectory).</p>
218
219
  </section>
219
220
  <section id="table-of-contents">
220
221
  <h2>Table of contents<a class="headerlink" href="#table-of-contents" title="Permalink to this heading">#</a></h2>
@@ -241,10 +242,8 @@
241
242
  </li>
242
243
  <li class="toctree-l1"><a class="reference internal" href="functions">Function calls</a><ul>
243
244
  <li class="toctree-l2"><a class="reference internal" href="functions#function-definitions">Function definitions</a></li>
244
- <li class="toctree-l2"><a class="reference internal" href="functions#synchronous-calls">Synchronous calls</a></li>
245
- <li class="toctree-l2"><a class="reference internal" href="functions#asynchronous-calls">Asynchronous calls</a></li>
246
- <li class="toctree-l2"><a class="reference internal" href="functions#variadic-functions">Variadic functions</a></li>
247
- <li class="toctree-l2"><a class="reference internal" href="functions#output-parameters">Output parameters</a></li>
245
+ <li class="toctree-l2"><a class="reference internal" href="functions#id1">Function calls</a></li>
246
+ <li class="toctree-l2"><a class="reference internal" href="functions#c-to-js-conversion-gotchas">C to JS conversion gotchas</a></li>
248
247
  <li class="toctree-l2"><a class="reference internal" href="functions#javascript-callbacks">Javascript callbacks</a></li>
249
248
  <li class="toctree-l2"><a class="reference internal" href="functions#thread-safety">Thread safety</a></li>
250
249
  </ul>
@@ -270,6 +269,7 @@
270
269
  </ul>
271
270
  </li>
272
271
  <li class="toctree-l1"><a class="reference internal" href="changes">Changelog</a><ul>
272
+ <li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-9">Koffi 1.3.9</a></li>
273
273
  <li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-8">Koffi 1.3.8</a></li>
274
274
  <li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-7">Koffi 1.3.7</a></li>
275
275
  <li class="toctree-l2"><a class="reference internal" href="changes#koffi-1-3-6">Koffi 1.3.6</a></li>
@@ -341,7 +341,7 @@
341
341
  <div class="toc-tree-container">
342
342
  <div class="toc-tree">
343
343
  <ul>
344
- <li><a class="reference internal" href="#">Koffi 1.3.8</a><ul>
344
+ <li><a class="reference internal" href="#">Koffi 1.3.7</a><ul>
345
345
  <li><a class="reference internal" href="#overview">Overview</a></li>
346
346
  <li><a class="reference internal" href="#table-of-contents">Table of contents</a></li>
347
347
  <li><a class="reference internal" href="#license">License</a></li>
@@ -5,7 +5,7 @@
5
5
  <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
6
6
  <link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Benchmarks" href="benchmarks" /><link rel="prev" title="Function calls" href="functions" />
7
7
 
8
- <meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
8
+ <meta name="generator" content="sphinx-5.0.1, furo 2022.06.04.1"/>
9
9
  <title>Memory usage - Koffi</title>
10
10
  <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
11
11
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
@@ -212,10 +212,10 @@
212
212
  <li><p>One to construct the C stack and assign registers, subsequently used by the platform-specific assembly code (1 MiB by default)</p></li>
213
213
  <li><p>One to allocate strings and big objects/structs (2 MiB by default)</p></li>
214
214
  </ul>
215
- <p>Unless very big strings or objects (at least more than one page of memory) are used, no extra allocation ever happens during calls or callbacks.</p>
215
+ <p>Unless very big strings or objects (at least more than one page of memory) are used, Koffi does not directly allocate any extra memory during calls or callbacks. However, please note that the JS engine (V8) might.</p>
216
216
  <p>The size (in bytes) of these preallocated blocks can be changed. Use <code class="docutils literal notranslate"><span class="pre">koffi.config()</span></code> to get an object with the settings, and <code class="docutils literal notranslate"><span class="pre">koffi.config(obj)</span></code> to apply new settings.</p>
217
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">let</span><span class="w"> </span><span class="nx">config</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">config</span><span class="p">();</span><span class="w"></span>
218
- <span class="linenos">2</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span><span class="w"></span>
217
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">let</span> <span class="nx">config</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">config</span><span class="p">();</span>
218
+ <span class="linenos">2</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
219
219
  </pre></div>
220
220
  </div>
221
221
  <p>The same is true for asynchronous calls. When an asynchronous call is made, Koffi will allocate new blocks unless there is an unused (resident) set of blocks still available. Once the asynchronous call is finished, these blocks are freed if there are more than <code class="docutils literal notranslate"><span class="pre">resident_async_pools</span></code> sets of blocks left around.</p>
Binary file
@@ -3,9 +3,9 @@
3
3
  <head><meta charset="utf-8"/>
4
4
  <meta name="viewport" content="width=device-width,initial-scale=1"/>
5
5
  <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
6
- <link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Quick start" href="start" /><link rel="prev" title="Koffi 1.3.8" href="index" />
6
+ <link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Quick start" href="start" /><link rel="prev" title="Koffi 1.3.7" href="index" />
7
7
 
8
- <meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
8
+ <meta name="generator" content="sphinx-5.0.1, furo 2022.06.04.1"/>
9
9
  <title>Requirements - Koffi</title>
10
10
  <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
11
11
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
@@ -4,7 +4,7 @@
4
4
  <meta name="viewport" content="width=device-width,initial-scale=1"/>
5
5
  <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="#" />
6
6
 
7
- <meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/><title>Search - Koffi</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
7
+ <meta name="generator" content="sphinx-5.0.1, furo 2022.06.04.1"/><title>Search - Koffi</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
8
8
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
9
9
  <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
10
10
  <link rel="stylesheet" type="text/css" href="_static/custom.css" />
@@ -1 +1 @@
1
- Search.setIndex({"docnames": ["benchmarks", "changes", "contribute", "functions", "index", "memory", "platforms", "start", "types"], "filenames": ["benchmarks.md", "changes.md", "contribute.md", "functions.md", "index.rst", "memory.md", "platforms.md", "start.md", "types.md"], "titles": ["Benchmarks", "Changelog", "Contributing", "Function calls", "Koffi 1.3.8", "Memory usage", "Requirements", "Quick start", "Data types"], "terms": {"here": [0, 2, 3, 4, 8], "quick": [0, 4], "execut": [0, 3], "time": [0, 2, 5, 7], "koffi": [0, 2, 3, 5, 6, 8], "call": [0, 1, 4, 5, 6, 7, 8], "three": [0, 7, 8], "where": [0, 3, 8], "compar": 0, "theoret": 0, "ideal": 0, "ffi": [0, 1, 3, 4, 7], "implement": [0, 8], "approxim": [0, 8], "pre": 0, "compil": [0, 1, 6], "static": 0, "n": [0, 2, 4, 6, 7, 8], "api": [0, 2, 3, 4, 6, 7, 8], "glue": 0, "code": [0, 1, 3, 4, 5], "The": [0, 1, 2, 3, 5, 6, 7, 8], "first": [0, 2, 3, 7, 8], "base": [0, 3, 4, 8], "second": [0, 3, 7, 8], "third": 0, "These": [0, 2, 3, 8], "ar": [0, 1, 2, 3, 5, 6, 7, 8], "detail": 0, "explain": 0, "below": [0, 1, 2, 3, 7, 8], "node": [0, 1, 2, 3, 4, 7], "napi": 0, "present": 0, "were": 0, "measur": 0, "my": [0, 2], "machin": [0, 2], "intel": 0, "core": 0, "i5": 0, "4460": 0, "thi": [0, 1, 2, 3, 4, 7, 8], "test": [0, 1, 4, 6], "around": [0, 5, 8], "repeat": 0, "simpl": [0, 2, 3, 8], "standard": [0, 3, 8], "c": [0, 1, 2, 4, 5, 6, 7], "function": [0, 1, 2, 4, 7, 8], "ha": [0, 2, 3, 8], "one": [0, 2, 3, 5, 7, 8], "refer": [0, 4, 8], "through": [0, 3, 8], "an": [0, 3, 5, 8], "modul": [0, 1, 4], "close": [0, 8], "limit": [0, 1], "perfect": 0, "overhead": [0, 4], "js": [0, 1, 2, 3, 4, 8], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8], "offici": [0, 2, 6], "iter": [0, 8], "rel": 0, "perform": [0, 4], "rand_napi": 0, "644": 0, "ns": 0, "x1": 0, "00": 0, "ref": 0, "rand_koffi": 0, "950": 0, "x0": 0, "68": 0, "48": 0, "rand_node_ffi": 0, "30350": 0, "02": 0, "4613": 0, "becaus": [0, 2, 3, 8], "pretti": [0, 2], "small": [0, 3, 4], "clearli": 0, "visibl": 0, "similar": [0, 3], "which": [0, 2, 6, 7], "take": [0, 3, 8], "string": [0, 1, 2, 3, 5, 7], "paramet": [0, 4, 7, 8], "javascript": [0, 4, 8], "v8": [0, 3], "convers": [0, 1, 8], "slow": [0, 2], "heavi": 0, "atoi_napi": 0, "1104": 0, "atoi_koffi": 0, "1778": 0, "62": 0, "61": 0, "atoi_node_ffi": 0, "125300": 0, "009": 0, "11250": 0, "cpu": 0, "imag": 0, "draw": 0, "much": [0, 2], "heavier": 0, "than": [0, 5], "thu": 0, "reduc": [0, 1], "In": [0, 3, 8], "baselin": 0, "full": [0, 2, 8], "version": [0, 1, 3, 4, 6, 8], "nativ": [0, 3], "wrapper": [0, 2], "raylib_cc": 0, "215": 0, "7": [0, 4, 7], "\u00b5s": 0, "20": 0, "17": [0, 6], "raylib_node_raylib": 0, "258": 0, "9": [0, 1], "raylib_koffi": 0, "311": 0, "6": [0, 3, 4, 7, 8], "83": 0, "raylib_node_ffi": 0, "928": 0, "4": [0, 4, 8], "28": 0, "259": 0, "965": 0, "1248": 0, "77": 0, "29": 0, "41500": 0, "4203": 0, "1393": 0, "2246": 0, "157550": 0, "11210": 0, "without": [0, 2, 6], "ani": [0, 2, 4, 8], "211": 0, "8": [0, 2, 3, 6, 7, 8], "25": 0, "264": 0, "318": 0, "21": 0, "1146": 0, "2": [0, 4, 5, 6, 8], "23": 0, "334": 0, "pleas": 0, "note": [0, 2, 8], "order": [0, 2, 3], "get": [0, 2, 5, 7, 8], "fair": 0, "number": [0, 1, 5, 8], "wa": 0, "recompil": 0, "clang": [0, 1, 8], "cl": 0, "befor": [0, 1, 2, 8], "follow": [0, 2, 3, 6, 8], "command": [0, 2], "cd": [0, 2], "node_modul": 0, "rmdir": 0, "s": [0, 3, 8], "q": [0, 2], "bin": 0, "build": [0, 1, 4, 6, 8], "npx": 0, "cmake": [0, 2], "t": 0, "clangcl": 0, "open": [0, 3, 8], "consol": [0, 3, 5, 8], "go": [0, 2], "cnoke": [0, 2], "do": [0, 2, 3, 7, 8], "anyth": 0, "els": [0, 8], "all": [0, 1, 6, 8], "made": [0, 5], "built": 0, "binari": [0, 1, 2, 6], "prefer": [0, 2, 3], "onc": [0, 2, 3, 5, 7, 8], "everyth": [0, 2], "readi": 0, "main": [1, 3], "fix": [1, 2, 4], "prevent": [1, 8], "callback": [1, 4, 5, 6, 8], "reus": 1, "beyond": 1, "increas": [], "trampolin": [], "32": 3, "other": [1, 3, 8], "chang": [1, 2, 3, 5, 8], "harmon": 1, "few": [1, 8], "error": [1, 3, 8], "messag": [1, 7], "crash": [1, 3], "when": [1, 2, 3, 5, 8], "insid": 1, "struct": [1, 2, 4, 5, 7], "support": [1, 2, 3, 4, 8], "null": [1, 3, 7, 8], "record": 1, "member": [1, 3, 8], "add": [1, 2, 8], "intptr_t": [1, 8], "uintptr_t": [1, 8], "primit": [1, 3, 4], "type": [1, 2, 3, 4, 7], "str": [1, 3, 7, 8], "str16": [1, 7, 8], "alias": 1, "string16": [1, 8], "variou": [1, 2], "document": [1, 8], "improv": [1, 2], "instal": [1, 2, 4, 6], "15": [1, 6, 8], "window": [1, 4, 6], "system": [1, 2, 7], "bug": [1, 4], "detect": 1, "incompat": 1, "prebuild": 1, "x64": 1, "linux": [1, 2, 4, 6], "memori": [1, 2, 3, 4, 8], "leak": 1, "mani": [1, 3, 8], "async": [1, 3], "run": [1, 3, 4, 5, 7], "configur": [1, 2], "maximum": [1, 5], "max_async_cal": [1, 5], "default": [1, 2, 3, 4, 8], "stack": [1, 5], "heap": [1, 2, 5], "size": [1, 2, 4, 5], "possibl": [1, 2, 8], "openbsd": [1, 6], "i386": 1, "void": [1, 3, 7, 8], "misconvers": 1, "sign": [1, 8], "integ": [1, 3, 8], "return": [1, 3, 8], "valu": [1, 3, 4, 7, 8], "unsign": [1, 3, 7, 8], "empti": 1, "signatur": 1, "disabl": [1, 2], "unsaf": 1, "optim": [1, 2], "14": [1, 6, 8], "mode": 1, "grace": 1, "degrad": 1, "older": [1, 6], "toolchain": 1, "debian": [1, 2], "prebuilt": [1, 2, 6], "rebuild": 1, "happen": [1, 3, 5, 8], "fail": [1, 2, 3, 8], "load": [1, 3, 7, 8], "major": 1, "expand": 1, "move": 1, "http": [1, 2, 4], "dev": [1, 2], "arrai": [1, 2, 4], "typedarrai": [1, 8], "pointer": [1, 3, 4], "argument": [1, 3, 7, 8], "input": [1, 3, 8], "output": [1, 4, 7, 8], "mix": [1, 2, 8], "convert": [1, 3, 8], "instead": [1, 2, 8], "hint": [1, 8], "char": [1, 3, 7, 8], "char16": [1, 8], "char16_t": [1, 8], "definit": [1, 4, 8], "long": [1, 8], "llp64": [1, 8], "model": 1, "restrict": [1, 2], "automat": [1, 2, 3, 8], "float": [1, 3, 6, 8], "point": [1, 8], "abi": [1, 2, 6, 8], "arm32": [1, 6], "risc": [1, 6], "v": [1, 6], "forbid": 1, "duplic": 1, "name": [1, 2, 3, 8], "new": [1, 3, 5, 8], "featur": [1, 4], "arm64": [1, 2, 6], "now": [1, 2, 7, 8], "A": [1, 6, 8], "maco": [1, 2, 6], "m1": 1, "includ": [1, 2, 3, 6, 8], "entri": 1, "sinc": [1, 4], "can": [1, 2, 3, 4, 5, 6, 7, 8], "cdecl": [1, 3, 6], "stdcall": [1, 3, 6, 7], "platform": [1, 3, 4, 5, 8], "64": [1, 3, 5, 6, 8], "lp64d": [1, 6], "lp64": [1, 6, 8], "untest": [1, 6], "expos": [1, 8], "set": [1, 2, 4], "usag": [1, 4], "synchron": [1, 4, 5], "asynchron": [1, 4, 5], "transpar": [1, 8], "between": [1, 3], "buffer": [1, 8], "tent": 1, "excess": 1, "align": [1, 8], "x86": [1, 3, 6, 7], "potenti": [1, 8], "problem": 1, "big": [1, 3, 5, 8], "int64_t": [1, 7, 8], "uint64_t": [1, 8], "layout": 1, "push": [1, 8], "pop": 1, "issu": [1, 2, 3], "incomplet": 1, "buggi": 1, "hfa": [1, 2], "caus": [1, 3], "miss": [1, 2], "map_stack": 1, "flag": 1, "non": [1, 3, 8], "sens": 1, "intern": [1, 8], "fals": [1, 8], "normal": [1, 5, 8], "make": [1, 2], "sure": [1, 2], "we": [1, 2, 8], "have": [1, 2, 7, 8], "redzon": 1, "architectur": [1, 2, 3, 4, 6, 8], "slower": 1, "alloc": [1, 2, 5, 8], "object": [1, 2, 3, 5, 8], "repositori": 2, "luigi": 2, "monorepo": 2, "contain": [2, 8], "multipl": 2, "project": 2, "idea": 2, "github": 2, "com": 2, "koromix": 2, "provid": [2, 3, 8], "packag": [2, 6], "npm": [2, 6, 7], "archiv": 2, "so": [2, 3, 7, 8], "most": [2, 3, 8], "case": [2, 3, 8], "should": 2, "If": [2, 3, 8], "you": [2, 3, 4, 6, 7, 8], "want": [2, 7], "hack": 2, "specif": [2, 5], "instruct": [2, 3], "start": [2, 3, 4], "clone": 2, "git": 2, "As": 2, "said": 2, "monorepositori": 2, "conta": 2, "henc": 2, "depend": [2, 3, 8], "met": 2, "desktop": 2, "develop": 2, "workload": 2, "visual": 2, "studio": 2, "2022": 2, "2019": 2, "tool": 2, "option": [2, 3, 4, 8], "compon": 2, "meta": 2, "12": [2, 6], "later": [2, 4, 6], "done": [2, 3, 8], "benchmark": [2, 4], "directori": [2, 8], "what": 2, "gcc": 2, "g": [2, 3, 8], "3": [2, 6, 8], "newer": [2, 6], "gnu": [2, 4], "81": 2, "emul": 2, "acceler": 2, "qemu": 2, "need": [2, 3, 8], "even": 2, "gui": 2, "ubuntu": 2, "directli": [2, 8], "licens": 2, "reason": [2, 8], "thei": [2, 3, 8], "avail": [2, 5], "file": [2, 3, 8], "For": [2, 3, 5, 6, 8], "exampl": [2, 4, 8], "wget": 2, "o": [2, 8], "qemu_debian_arm64": 2, "tar": 2, "zst": 2, "zstd": 2, "d": [2, 3, 8], "xv": 2, "sha256sum": 2, "ignor": [2, 3], "registri": 2, "txt": 2, "disk": 2, "content": [2, 8], "mai": [2, 3], "each": [2, 3, 8], "checksum": 2, "been": [2, 3], "least": [2, 5], "And": [2, 7], "sever": [2, 3], "help": 2, "patient": 2, "ccach": 2, "subsequ": [2, 5], "step": 2, "more": [2, 3, 4, 5, 6, 8], "toler": 2, "By": [2, 3, 8], "stop": 2, "But": [2, 8], "ahead": 2, "shut": 2, "down": 2, "again": 2, "also": [2, 8], "subset": 2, "cycl": 2, "debian_x64": 2, "debian_i386": 2, "separ": 2, "shutdown": 2, "final": [2, 8], "join": 2, "ssh": 2, "shortcut": 2, "some": [2, 8], "debug": 2, "manual": 2, "procedur": [2, 3], "vnc": 2, "server": 2, "local": [2, 7], "access": 2, "displai": 2, "krdc": 2, "compat": 2, "viewer": 2, "info": 2, "port": 2, "plan": 2, "necessarili": 2, "better": 2, "wai": [2, 7, 8], "deal": [2, 3, 8], "caller": 2, "etc": [2, 3], "pass": [2, 3, 8], "avoid": [2, 8], "properti": 2, "helper": 2, "autom": 2, "aarch64": [2, 6], "how": [2, 3, 4, 8], "thank": [2, 8], "appl": 2, "creat": [2, 3, 8], "real": 2, "world": [2, 3, 7, 8], "librari": [2, 3, 7, 8], "raylib": 2, "sqlite": [2, 3], "libsodium": 2, "illustr": [2, 7, 8], "parser": [2, 3], "encod": [2, 8], "decod": 2, "byte": [2, 5, 8], "union": 2, "powerpc": 2, "power9": 2, "assembl": [2, 5], "unwind": 2, "cfi": 2, "direct": [2, 8], "experi": 2, "program": [2, 3, 4], "It": [2, 3, 7, 8], "addon": 2, "interact": 2, "person": 2, "goe": 2, "rather": 2, "like": [2, 7, 8], "care": 2, "templat": 2, "mainli": 2, "littl": 2, "orient": [2, 8], "i": [2, 8], "strongli": 2, "tag": 2, "over": 2, "inherit": 2, "virtual": 2, "method": 2, "except": [1, 2, 3], "To": 3, "declar": [3, 7, 8], "share": [3, 7, 8], "filenam": [3, 8], "const": [3, 7, 8], "requir": [3, 4, 7, 8], "lib": [3, 7, 8], "path": [3, 8], "extens": 3, "dll": [3, 7, 8], "dylib": 3, "from": [3, 4, 6, 8], "two": [3, 5, 8], "inspir": 3, "specifi": [3, 8], "its": [3, 8], "mangl": 3, "ellipsi": 3, "last": [3, 8], "printf": [3, 7], "func": [3, 7, 8], "int": [3, 7, 8], "atoi": 3, "tri": 3, "convent": [3, 6, 7], "see": [3, 4, 8], "section": [3, 8], "inform": [3, 4, 8], "subject": 3, "shown": 3, "fmt": 3, "onli": [3, 6, 8], "per": 3, "process": 3, "bit": [3, 8], "form": 3, "descript": [3, 5], "__stdcall": [3, 8], "within": 3, "win32": [3, 7, 8], "fastcal": [3, 6], "__fastcal": 3, "rare": [3, 8], "ecx": 3, "edx": 3, "thiscal": [3, 6], "__thiscal": 3, "safe": 3, "simpli": [3, 8], "find": [3, 4, 7, 8], "show": [3, 7, 8], "user32": [3, 7], "equival": [3, 8], "messageboxa_1": 3, "messageboxa": [3, 7], "uint": [3, 7, 8], "messageboxa_2": 3, "hwnd": 3, "text": 3, "caption": 3, "err": 3, "re": 3, "libc": [3, 7], "1257": 3, "log": [3, 5, 8], "result": [3, 7, 8], "hello": [3, 7, 8], "print": [3, 7, 8], "worker": 3, "your": [3, 4], "respons": 3, "data": [3, 4], "multi": 3, "easili": 3, "style": [3, 4], "promis": 3, "util": 3, "promisifi": 3, "cannot": [3, 5, 8], "must": 3, "addit": [3, 8], "expect": [3, 6, 8], "5": [3, 4, 8], "doubl": [3, 6, 8], "THE": 3, "end": 3, "On": 3, "forward": [3, 6], "howev": [3, 8], "simplic": 3, "semant": [3, 8], "marshal": 3, "out": [3, 8], "e": [3, 8], "timev": [3, 7], "inout": 3, "dual": 3, "same": [3, 5, 8], "msdn": 3, "qualifi": 3, "_out_": [3, 7, 8], "_inout_": [3, 8], "posix": 3, "gettimeofdai": [3, 7], "tv_sec": [3, 7], "tv_usec": [3, 7], "timezon": [3, 7], "tz_minuteswest": [3, 7], "tz_dsttime": [3, 7], "tv": [3, 7], "tz": [3, 7], "let": [3, 5, 7, 8], "databas": 3, "sqlite3_db": 3, "copi": [3, 8], "after": 3, "sqlite3_open_v2": 3, "sqlite3_close_v2": 3, "sqlite_open_readwrit": 3, "0x2": 3, "sqlite_open_cr": 3, "0x4": [3, 7], "db": 3, "0": [3, 4, 6, 8], "throw": [3, 8], "With": 3, "noth": 3, "examplecallback": 3, "sum": [3, 8], "adddoublefloat": 3, "f": [3, 8], "part": 3, "h": [3, 8], "transfertoj": 3, "ag": 3, "cb": 3, "buf": 3, "snprintf": 3, "sizeof": [3, 8], "transfercallback": 3, "ret": [3, 7], "niel": 3, "27": 3, "42": [3, 8], "precis": [3, 6], "intepret": 3, "anoth": [3, 7, 8], "undefin": [3, 8], "behavior": [3, 8], "lead": 3, "mess": [3, 8], "ve": 3, "warn": 3, "fast": 4, "easi": 4, "low": 4, "aggreg": 4, "both": [4, 8], "well": 4, "popular": 4, "os": [4, 6, 8], "combin": [4, 6], "recent": [4, 6], "page": [4, 5], "introspect": 4, "variad": [4, 7], "thread": 4, "safeti": 4, "work": 4, "x86_64": [4, 6], "contribut": 4, "request": 4, "sourc": [4, 6], "todo": 4, "list": [4, 8], "changelog": 4, "free": [4, 8], "softwar": 4, "redistribut": 4, "modifi": [4, 8], "under": 4, "term": 4, "affero": 4, "gener": [4, 8], "public": 4, "publish": 4, "foundat": 4, "either": [4, 8], "www": 4, "org": 4, "prealloc": 5, "block": 5, "One": 5, "construct": 5, "assign": [5, 8], "regist": [5, 8], "1": [5, 6, 7, 8], "mib": 5, "unless": 5, "veri": 5, "extra": 5, "ever": 5, "dure": 5, "config": 5, "obj": 5, "appli": [5, 8], "true": [5, 8], "unus": 5, "resid": 5, "still": 5, "finish": 5, "freed": 5, "resident_async_pool": 5, "left": 5, "There": 5, "sync_stack_s": 5, "sync_heap_s": 5, "async_stack_s": 5, "256": 5, "kib": 5, "async_heap_s": 5, "512": 5, "pool": 5, "ongo": 5, "22": 6, "x": [6, 8], "16": [6, 7, 8], "nvm": 6, "distribut": 6, "moment": 6, "isa": 6, "freebsd": 6, "ia32": 6, "ye": 6, "amd64": 6, "le": [6, 8], "probabl": 6, "fulli": 6, "green": 6, "check": 6, "mark": 6, "mean": [6, 8], "ms": 6, "hard": 6, "vfp": 6, "coprocessor": 6, "differ": [6, 8], "softfp": 6, "soft": 6, "theori": 6, "lp64f": 6, "prototyp": 7, "languag": 7, "syntax": 7, "localtime_r": 7, "current": [7, 8], "time_t": 7, "tm": 7, "tm_sec": 7, "tm_min": 7, "tm_hour": 7, "tm_mdai": 7, "tm_mon": 7, "tm_year": 7, "tm_wdai": 7, "tm_ydai": 7, "tm_isdst": 7, "format": 7, "02d": 7, "target": 7, "messagebox": 7, "user": [7, 8], "utf": [7, 8], "constant": 7, "mb_ok": 7, "0x0": 7, "mb_yesno": 7, "mb_iconquest": 7, "0x20": 7, "mb_iconinform": 7, "0x40": 7, "idok": 7, "idy": 7, "idno": 7, "messageboxw": 7, "box": 7, "while": 8, "allow": 8, "variat": 8, "enforc": 8, "signed": 8, "valid": 8, "int8": 8, "int8_t": 8, "uint8": 8, "uint8_t": 8, "uchar": 8, "int16": 8, "int16_t": 8, "uint16": 8, "uint16_t": 8, "short": 8, "int32": 8, "int32_t": 8, "uint32": 8, "uint32_t": 8, "int64": 8, "uint64": 8, "longlong": 8, "ulonglong": 8, "float32": 8, "float64": 8, "accept": 8, "bigint": 8, "exce": 8, "rang": 8, "revers": 8, "defin": 8, "boolean": 8, "bool": 8, "usual": 8, "ulong": 8, "intptr": 8, "width": 8, "uintptr": 8, "line": 8, "struct1": 8, "dummi": 8, "struct2": 8, "vice": 8, "versa": 8, "unlik": 8, "omit": 8, "anonym": 8, "typedef": 8, "b": 8, "d1": 8, "d2": 8, "rule": 8, "regard": 8, "pad": 8, "latter": 8, "function1": 8, "function2": 8, "differenti": 8, "purpos": 8, "import": 8, "distinguish": 8, "them": 8, "fall": 8, "expens": 8, "doe": 8, "someth": 8, "stabil": 8, "dynam": 8, "termin": 8, "sentinel": 8, "length": 8, "lot": 8, "getcursorpo": 8, "retriev": 8, "cursor": 8, "posit": 8, "kernel32": 8, "y": 8, "po": 8, "kind": 8, "pair": 8, "dedic": 8, "delet": 8, "obviou": 8, "found": 8, "stdio": 8, "fopen": 8, "fclose": 8, "manipul": 8, "fread": 8, "ftell": 8, "manag": 8, "builder": 8, "concaten": 8, "fizzbuzz": 8, "hidden": 8, "behind": 8, "destroi": 8, "concatnew": 8, "concatnewout": 8, "concatfre": 8, "fpic": 8, "wall": 8, "o2": 8, "stdlib": 8, "stdbool": 8, "errno": 8, "fragment": 8, "next": 8, "size_t": 8, "len": 8, "concat": 8, "total": 8, "malloc": 8, "fprintf": 8, "stderr": 8, "strerror": 8, "concatappend": 8, "frag": 8, "strlen": 8, "memcpi": 8, "concatbuild": 8, "r": 8, "stupid": 8, "try": 8, "failur": 8, "30": 8, "buzz": 8, "fizz": 8, "infer": 8, "itself": 8, "translat": 8, "proper": 8, "notion": 8, "fat": 8, "yourself": 8, "calcul": 8, "stdint": 8, "computetotallength": 8, "ptr": 8, "just": 8, "findfirstfilew": 8, "findnextfilew": 8, "filetim": 8, "dwlowdatetim": 8, "dwhighdatetim": 8, "win32_find_data": 8, "dwfileattribut": 8, "ftcreationtim": 8, "ftlastaccesstim": 8, "ftlastwritetim": 8, "nfilesizehigh": 8, "nfilesizelow": 8, "dwreserved0": 8, "dwreserved1": 8, "cfilenam": 8, "260": 8, "calternatefilenam": 8, "dwfiletyp": 8, "obsolet": 8, "dwcreatortyp": 8, "wfinderflag": 8, "ushort": 8, "findfirstfil": 8, "findnextfil": 8, "findclos": 8, "getlasterror": 8, "dirnam": 8, "error_file_not_found": 8, "18": 8, "error_no_more_fil": 8, "among": 8, "variabl": 8, "invol": 8, "list1": 8, "list2": 8, "singl": 8, "element": 8, "store": 8, "addint": 8, "dest": 8, "36": 8, "degener": 8, "emb": 8, "correct": 8, "uint8arrai": 8, "those": 8, "exactli": 8, "foo1": 8, "foo": 8, "a16": 8, "foo2": 8, "hypothet": 8, "returnfoo1": 8, "returnfoo": 8, "p": 8, "returnfoo2": 8, "int16arrai": 8, "fill": 8, "truncat": 8, "alwai": 8, "nul": 8, "explicitli": 8, "ask": 8, "explor": 8, "alignof": 8, "bti": 1, "aaarch64": 1}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"benchmark": 0, "overview": [0, 4], "linux": [0, 7], "x86_64": 0, "rand": 0, "result": 0, "atoi": 0, "raylib": 0, "window": [0, 2, 7], "run": [0, 2], "changelog": 1, "koffi": [1, 4, 7], "1": [1, 4], "3": [1, 4], "8": [1, 4], "7": 1, "6": 1, "5": 1, "4": 1, "2": 1, "0": 1, "contribut": 2, "bug": 2, "featur": 2, "request": 2, "build": 2, "from": 2, "sourc": 2, "other": 2, "platform": [2, 6], "test": 2, "todo": 2, "list": 2, "code": 2, "style": 2, "function": 3, "call": 3, "definit": 3, "classic": 3, "syntax": 3, "c": [3, 8], "like": 3, "prototyp": 3, "synchron": 3, "asynchron": 3, "variad": 3, "output": 3, "paramet": 3, "struct": [3, 8], "exampl": [3, 7], "opaqu": [3, 8], "handl": [3, 8], "javascript": 3, "callback": 3, "thread": 3, "safeti": 3, "tabl": 4, "content": 4, "licens": 4, "memori": 5, "usag": 5, "how": 5, "work": 5, "default": 5, "set": 5, "requir": 6, "node": 6, "js": 6, "support": 6, "quick": 7, "start": 7, "instal": 7, "small": 7, "data": 8, "type": 8, "primit": 8, "pointer": 8, "arrai": 8, "fix": 8, "size": 8, "string": 8, "introspect": 8}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}})
1
+ Search.setIndex({"docnames": ["benchmarks", "changes", "contribute", "functions", "index", "memory", "platforms", "start", "types"], "filenames": ["benchmarks.md", "changes.md", "contribute.md", "functions.md", "index.rst", "memory.md", "platforms.md", "start.md", "types.md"], "titles": ["Benchmarks", "Changelog", "Contributing", "Function calls", "Koffi 1.3.7", "Memory usage", "Requirements", "Quick start", "Data types"], "terms": {"here": [0, 2, 3, 4, 8], "quick": [0, 4], "execut": [0, 3], "time": [0, 2, 3, 5, 7], "koffi": [0, 2, 3, 5, 6, 8], "call": [0, 1, 4, 5, 6, 7, 8], "three": [0, 7, 8], "where": [0, 3, 8], "compar": 0, "theoret": 0, "ideal": 0, "ffi": [0, 1, 3, 4, 7], "implement": [0, 3, 8], "approxim": [0, 8], "pre": 0, "compil": [0, 1, 6], "static": [0, 3], "n": [0, 2, 4, 6, 7, 8], "api": [0, 2, 3, 4, 6, 7, 8], "glue": 0, "code": [0, 1, 3, 4, 5], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8], "first": [0, 2, 3, 7, 8], "base": [0, 3, 4, 8], "second": [0, 3, 7, 8], "third": 0, "These": [0, 2, 3, 8], "ar": [0, 1, 2, 3, 5, 6, 7, 8], "detail": 0, "explain": 0, "below": [0, 1, 2, 3, 7, 8], "node": [0, 1, 2, 3, 4, 7], "napi": 0, "present": 0, "were": [0, 3, 8], "measur": 0, "my": [0, 2], "machin": [0, 2], "intel": 0, "core": 0, "i5": 0, "4460": 0, "thi": [0, 1, 2, 3, 4, 7, 8], "test": [0, 1, 4, 6], "around": [0, 5, 8], "repeat": 0, "simpl": [0, 2, 3, 8], "standard": [0, 3, 8], "c": [0, 1, 2, 4, 5, 6, 7], "function": [0, 1, 2, 4, 7, 8], "ha": [0, 2, 3, 8], "one": [0, 2, 3, 5, 7, 8], "refer": [0, 4, 8], "through": [0, 3, 8], "an": [0, 3, 5, 8], "modul": [0, 1, 4], "close": [0, 8], "limit": [0, 1, 3], "perfect": 0, "overhead": [0, 4], "js": [0, 1, 2, 4, 5, 8], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8], "offici": [0, 2, 6], "iter": [0, 8], "rel": 0, "perform": [0, 4], "rand_napi": 0, "644": 0, "ns": 0, "x1": 0, "00": 0, "ref": 0, "rand_koffi": 0, "950": 0, "x0": 0, "68": 0, "48": 0, "rand_node_ffi": 0, "30350": 0, "02": 0, "4613": 0, "becaus": [0, 2, 3, 8], "pretti": [0, 2], "small": [0, 3, 4], "clearli": 0, "visibl": 0, "similar": [0, 3], "which": [0, 2, 3, 6, 7], "take": [0, 3, 8], "string": [0, 1, 3, 5, 7], "paramet": [0, 7, 8], "javascript": [0, 4, 8], "v8": [0, 3, 5], "convers": [0, 1, 4, 8], "slow": [0, 2], "heavi": 0, "atoi_napi": 0, "1104": 0, "atoi_koffi": 0, "1778": 0, "62": 0, "61": 0, "atoi_node_ffi": 0, "125300": 0, "009": 0, "11250": 0, "cpu": 0, "imag": 0, "draw": 0, "much": [0, 2], "heavier": 0, "than": [0, 5], "thu": [0, 3], "reduc": [0, 1], "In": [0, 3, 8], "baselin": 0, "full": [0, 2, 8], "version": [0, 1, 3, 4, 6, 8], "nativ": [0, 3], "wrapper": [0, 2], "raylib_cc": 0, "215": 0, "7": [0, 7], "\u00b5s": 0, "20": 0, "17": [0, 6], "raylib_node_raylib": 0, "258": 0, "9": [0, 4], "raylib_koffi": 0, "311": 0, "6": [0, 3, 4, 7, 8], "83": 0, "raylib_node_ffi": 0, "928": 0, "4": [0, 4, 8], "28": 0, "259": 0, "965": 0, "1248": 0, "77": 0, "29": 0, "41500": 0, "4203": 0, "1393": 0, "2246": 0, "157550": 0, "11210": 0, "without": [0, 2, 6], "ani": [0, 2, 3, 4, 5, 8], "211": 0, "8": [0, 2, 3, 4, 6, 7, 8], "25": 0, "264": 0, "318": 0, "21": 0, "1146": 0, "2": [0, 3, 4, 5, 6, 8], "23": 0, "334": 0, "pleas": [0, 5], "note": [0, 2, 5, 8], "order": [0, 2, 3], "get": [0, 2, 3, 5, 7, 8], "fair": 0, "number": [0, 1, 3, 5, 8], "wa": 0, "recompil": 0, "clang": [0, 1, 8], "cl": 0, "befor": [0, 1, 2, 8], "follow": [0, 2, 3, 6, 8], "command": [0, 2], "cd": [0, 2], "node_modul": 0, "rmdir": 0, "s": [0, 3, 8], "q": [0, 2], "bin": 0, "build": [0, 1, 4, 6, 8], "npx": 0, "cmake": [0, 2], "t": [0, 3], "clangcl": 0, "open": [0, 3, 8], "consol": [0, 3, 5, 8], "go": [0, 2], "cnoke": [0, 2], "do": [0, 2, 3, 7, 8], "anyth": 0, "els": [0, 8], "all": [0, 1, 3, 6, 8], "made": [0, 3, 5, 8], "built": 0, "binari": [0, 1, 2, 6], "prefer": [0, 2, 3], "onc": [0, 2, 3, 5, 7, 8], "everyth": [0, 2], "readi": 0, "main": [1, 3], "fix": [1, 2, 4], "prebuild": 1, "compat": [1, 2, 3], "electron": 1, "window": [1, 3, 4, 6], "x64": 1, "chang": [1, 2, 3, 5, 8], "prevent": [1, 8], "callback": [1, 4, 5, 6, 8], "reus": 1, "beyond": 1, "add": [1, 2, 8], "bti": 1, "support": [1, 2, 3, 4, 8], "aaarch64": 1, "platform": [1, 3, 4, 5, 8], "except": [1, 2], "other": [1, 3, 8], "harmon": 1, "few": [1, 8], "error": [1, 3, 8], "messag": [1, 7], "crash": [1, 3], "when": [1, 2, 3, 5, 8], "insid": [1, 3], "struct": [1, 2, 4, 5, 7], "null": [1, 3, 7, 8], "record": 1, "member": [1, 3, 8], "intptr_t": [1, 8], "uintptr_t": [1, 8], "primit": [1, 3, 4], "type": [1, 2, 3, 4, 7], "str": [1, 3, 7, 8], "str16": [1, 3, 7, 8], "alias": 1, "string16": [1, 8], "variou": [1, 2], "document": [1, 8], "improv": [1, 2], "instal": [1, 2, 4, 6], "15": [1, 6, 8], "system": [1, 2, 7], "bug": [1, 4], "detect": [1, 3], "incompat": 1, "linux": [1, 2, 4, 6], "memori": [1, 3, 4, 8], "leak": [1, 3], "mani": [1, 3, 8], "async": [1, 3], "run": [1, 3, 4, 5, 7], "configur": [1, 2], "maximum": [1, 3, 5], "max_async_cal": [1, 5], "default": [1, 2, 3, 4, 8], "stack": [1, 5], "heap": [1, 5], "size": [1, 2, 4, 5], "possibl": [1, 2, 8], "openbsd": [1, 6], "i386": 1, "void": [1, 3, 7, 8], "misconvers": 1, "sign": [1, 8], "integ": [1, 3, 8], "return": [1, 3, 8], "valu": [1, 4, 7, 8], "unsign": [1, 3, 7, 8], "empti": 1, "signatur": 1, "disabl": [1, 2], "unsaf": 1, "optim": [1, 2], "14": [1, 6, 8], "mode": [1, 3], "grace": 1, "degrad": 1, "older": [1, 6], "toolchain": 1, "debian": [1, 2], "prebuilt": [1, 2, 6], "rebuild": 1, "happen": [1, 3, 8], "fail": [1, 2, 3, 8], "load": [1, 3, 7, 8], "major": 1, "expand": 1, "move": 1, "http": [1, 2, 4], "dev": [1, 2], "arrai": [1, 2, 4], "typedarrai": [1, 8], "pointer": [1, 3, 4], "argument": [1, 3, 7, 8], "input": [1, 3, 8], "output": [1, 7, 8], "mix": [1, 2, 8], "convert": [1, 3, 8], "instead": [1, 2, 8], "hint": [1, 8], "char": [1, 3, 7, 8], "char16": [1, 8], "char16_t": [1, 8], "definit": [1, 4, 8], "long": [1, 8], "llp64": [1, 8], "model": 1, "restrict": [1, 2, 3], "automat": [1, 3, 8], "float": [1, 3, 6, 8], "point": [1, 8], "abi": [1, 2, 3, 6, 8], "arm32": [1, 6], "risc": [1, 6], "v": [1, 6], "forbid": 1, "duplic": 1, "name": [1, 2, 3, 8], "new": [1, 3, 5, 8], "featur": [1, 4], "arm64": [1, 2, 6], "now": [1, 2, 3, 7, 8], "A": [1, 3, 6, 8], "maco": [1, 2, 6], "m1": 1, "includ": [1, 2, 3, 6, 8], "entri": 1, "sinc": [1, 4], "can": [1, 2, 3, 4, 5, 6, 7, 8], "cdecl": [1, 3, 6], "stdcall": [1, 3, 6, 7], "64": [1, 3, 5, 6, 8], "lp64d": [1, 6], "lp64": [1, 6, 8], "untest": [1, 6], "expos": [1, 8], "set": [1, 2, 4], "usag": [1, 4], "synchron": [1, 3, 5], "asynchron": [1, 5], "transpar": [1, 8], "between": [1, 3], "buffer": [1, 8], "tent": 1, "excess": 1, "align": [1, 8], "x86": [1, 3, 6, 7], "potenti": [1, 8], "problem": 1, "big": [1, 3, 5, 8], "int64_t": [1, 7, 8], "uint64_t": [1, 8], "layout": 1, "push": [1, 8], "pop": 1, "issu": [1, 3], "incomplet": 1, "buggi": 1, "hfa": [1, 2], "caus": [1, 3], "miss": [1, 2], "map_stack": 1, "flag": 1, "non": [1, 3, 8], "sens": 1, "intern": [1, 8], "fals": [1, 8], "normal": [1, 5, 8], "make": [1, 2, 3], "sure": [1, 2], "we": [1, 2, 8], "have": [1, 2, 3, 7, 8], "redzon": 1, "architectur": [1, 2, 3, 4, 6, 8], "slower": 1, "alloc": [1, 5, 8], "object": [1, 2, 3, 5, 8], "repositori": 2, "luigi": [2, 4], "monorepo": 2, "contain": [2, 8], "multipl": 2, "project": 2, "idea": 2, "github": [2, 4], "com": [2, 4], "koromix": [2, 4], "provid": [2, 3, 8], "packag": [2, 6], "npm": [2, 6, 7], "archiv": 2, "so": [2, 3, 7, 8], "most": [2, 3, 8], "case": [2, 3, 8], "should": 2, "If": [2, 3, 8], "you": [2, 3, 4, 6, 7, 8], "want": [2, 7], "hack": 2, "specif": [2, 5], "instruct": [2, 3], "start": [2, 3, 4], "clone": 2, "git": 2, "As": 2, "said": 2, "monorepositori": 2, "conta": 2, "henc": 2, "depend": [2, 3, 8], "met": 2, "desktop": 2, "develop": 2, "workload": 2, "visual": 2, "studio": 2, "2022": 2, "2019": 2, "tool": 2, "option": [2, 3, 4, 8], "compon": 2, "meta": 2, "12": [2, 6], "later": [2, 3, 4, 6], "done": [2, 3, 8], "benchmark": [2, 4], "directori": [2, 8], "what": 2, "gcc": 2, "g": [2, 3, 8], "3": [2, 6, 8], "newer": [2, 3, 6], "gnu": [2, 4], "81": 2, "emul": 2, "acceler": 2, "qemu": 2, "need": [2, 3, 8], "even": 2, "gui": 2, "ubuntu": 2, "directli": [2, 3, 5, 8], "licens": 2, "reason": [2, 8], "thei": [2, 3, 8], "avail": [2, 4, 5], "file": [2, 3, 8], "For": [2, 3, 5, 6, 8], "exampl": [2, 4, 8], "wget": 2, "o": [2, 8], "qemu_debian_arm64": 2, "tar": 2, "zst": 2, "zstd": 2, "d": [2, 3, 8], "xv": 2, "sha256sum": 2, "ignor": [2, 3, 8], "registri": 2, "txt": 2, "disk": 2, "content": [2, 8], "mai": [2, 3], "each": [2, 3, 8], "checksum": 2, "been": [2, 3], "least": [2, 5], "And": [2, 7], "sever": [2, 3], "help": 2, "patient": 2, "ccach": 2, "subsequ": [2, 3, 5], "step": 2, "more": [2, 3, 4, 5, 6, 8], "toler": 2, "By": [2, 3, 8], "stop": 2, "But": [2, 3, 8], "ahead": 2, "shut": 2, "down": 2, "again": 2, "also": [2, 3, 8], "subset": 2, "cycl": 2, "debian_x64": 2, "debian_i386": 2, "separ": 2, "shutdown": 2, "final": [2, 8], "join": 2, "ssh": 2, "shortcut": [2, 3], "some": [2, 3, 8], "debug": 2, "manual": [2, 3], "procedur": [2, 3], "vnc": 2, "server": 2, "local": [2, 7], "access": [2, 3], "displai": 2, "krdc": 2, "viewer": 2, "info": 2, "port": 2, "plan": 2, "necessarili": 2, "pass": [2, 3, 8], "avoid": [2, 3, 8], "properti": 2, "helper": 2, "autom": 2, "aarch64": [2, 6], "how": [2, 3, 4, 8], "thank": [2, 8], "appl": 2, "creat": [2, 3, 8], "real": 2, "world": [2, 3, 7, 8], "librari": [2, 3, 7, 8], "raylib": 2, "sqlite": [2, 3], "libsodium": 2, "illustr": [2, 3, 7, 8], "parser": [2, 3], "wai": [2, 3, 7, 8], "encod": [2, 8], "decod": 2, "byte": [2, 5, 8], "union": 2, "powerpc": 2, "power9": 2, "assembl": [2, 5], "unwind": 2, "cfi": 2, "direct": [2, 8], "better": 2, "experi": 2, "program": [2, 3, 4], "It": [2, 3, 7, 8], "addon": 2, "interact": 2, "person": 2, "goe": 2, "rather": 2, "like": [2, 7, 8], "care": [2, 3, 8], "templat": 2, "mainli": 2, "littl": 2, "orient": [2, 8], "i": [2, 8], "strongli": 2, "tag": 2, "over": 2, "inherit": 2, "virtual": 2, "method": 2, "To": 3, "declar": [3, 7, 8], "share": [3, 7, 8], "filenam": [3, 8], "const": [3, 7, 8], "requir": [3, 4, 7, 8], "lib": [3, 7, 8], "path": [3, 8], "extens": 3, "dll": [3, 7, 8], "dylib": 3, "etc": 3, "from": [3, 4, 6, 8], "two": [3, 5, 8], "inspir": 3, "specifi": [3, 8], "its": [3, 8], "mangl": 3, "ellipsi": 3, "last": [3, 8], "printf": [3, 7], "func": [3, 7, 8], "int": [3, 7, 8], "atoi": 3, "tri": 3, "convent": [6, 7], "see": [3, 4, 8], "section": [3, 8], "inform": [3, 4, 8], "subject": 3, "shown": [3, 8], "fmt": 3, "onli": [3, 6, 8], "per": 3, "process": 3, "32": 3, "bit": [3, 8], "form": 3, "descript": [3, 5], "__stdcall": [3, 8], "within": 3, "win32": [3, 7, 8], "fastcal": [3, 6], "__fastcal": 3, "rare": [3, 8], "ecx": 3, "edx": 3, "thiscal": [3, 6], "__thiscal": 3, "safe": 3, "simpli": [3, 8], "find": [3, 4, 7, 8], "show": [3, 7, 8], "user32": [3, 7], "equival": [3, 8], "messageboxa_1": 3, "messageboxa": [3, 7], "uint": [3, 7, 8], "messageboxa_2": 3, "hwnd": 3, "text": 3, "caption": 3, "err": 3, "re": 3, "libc": [3, 7], "1257": 3, "log": [3, 5, 8], "result": [3, 7, 8], "hello": [3, 7, 8], "print": [3, 7, 8], "worker": 3, "your": [3, 4], "respons": 3, "deal": [3, 8], "data": [3, 4], "multi": 3, "easili": 3, "style": [3, 4], "promis": 3, "util": 3, "promisifi": 3, "cannot": [3, 5, 8], "must": [3, 8], "addit": [3, 8], "expect": [3, 6, 8], "5": [3, 4, 8], "doubl": [3, 6, 8], "THE": 3, "end": 3, "On": 3, "forward": [3, 6], "howev": [3, 5, 8], "simplic": 3, "semant": [3, 8], "marshal": 3, "out": [3, 8], "e": [3, 8], "timev": [3, 7], "inout": 3, "dual": 3, "same": [3, 5, 8], "msdn": 3, "qualifi": 3, "_out_": [3, 7, 8], "_inout_": [3, 8], "posix": 3, "gettimeofdai": [3, 7], "tv_sec": [3, 7], "tv_usec": [3, 7], "timezon": [3, 7], "tz_minuteswest": [3, 7], "tz_dsttime": [3, 7], "tv": [3, 7], "tz": [3, 7], "let": [3, 5, 7, 8], "databas": 3, "sqlite3_db": 3, "copi": [3, 8], "after": 3, "sqlite3_open_v2": 3, "sqlite3_close_v2": 3, "sqlite_open_readwrit": 3, "0x2": 3, "sqlite_open_cr": 3, "0x4": [3, 7], "db": 3, "0": [3, 4, 6, 8], "throw": [3, 8], "while": [3, 8], "doe": [3, 5, 8], "know": 3, "someth": [3, 8], "freed": [3, 5], "matter": 3, "explicitli": [3, 8], "fclose": [3, 8], "them": [3, 8], "implicitli": 3, "lose": 3, "origin": 3, "dispos": 3, "deriv": 3, "anoth": [3, 7, 8], "differ": [3, 6, 8], "being": 3, "anymor": 3, "omit": [3, 8], "anonym": [3, 8], "free": [3, 4, 8], "ptr": [3, 8], "under": [3, 4], "hood": 3, "anonheapstr": 3, "namedheapstr": 3, "heapstr": 3, "thing": 3, "usabl": [3, 8], "explicitfre": 3, "heapstr16": 3, "strdup": 3, "asprintf": 3, "either": [3, 4, 8], "Be": 3, "crt": 3, "msvcrt": 3, "could": [3, 8], "malloc": [3, 8], "undefin": [3, 8], "behavior": [3, 8], "With": 3, "noth": 3, "examplecallback": 3, "sum": [3, 8], "adddoublefloat": 3, "f": [3, 8], "1": [3, 5, 6, 7, 8], "x": [3, 6, 8], "defin": [3, 8], "obscur": [3, 8], "underli": [3, 8], "callit": 3, "callbacktyp": 3, "becom": 3, "predefin": 3, "trampolin": 3, "gener": [3, 4, 8], "runtim": 3, "harden": 3, "w": 3, "migit": 3, "pax": 3, "mprotect": 3, "impos": 3, "durat": 3, "distinguish": [3, 8], "invalid": 3, "though": 3, "thrown": 3, "guarante": 3, "don": 3, "special": 3, "unregist": 3, "exist": 3, "qsort": 3, "progress": 3, "sqlite3_exec": 3, "part": [3, 8], "h": [3, 8], "transfertoj": 3, "ag": 3, "cb": 3, "buf": 3, "snprintf": 3, "sizeof": [3, 8], "fake": 3, "transfercallback": 3, "ret": [3, 7], "niel": 3, "27": 3, "42": [3, 8], "handler": 3, "event": 3, "fopencooki": 3, "funopen": 3, "releas": 3, "slot": 3, "16": [3, 6, 7, 8], "failur": [3, 8], "registr": 3, "delai": 3, "g_cb1": 3, "g_cb2": 3, "registerfunct": 3, "cb1": 3, "cb2": 3, "sayit": 3, "getcallback": 3, "printcallback": 3, "kyoto": 3, "receiv": 3, "yourself": [3, 8], "try": [3, 8], "catch": 3, "precis": [3, 6], "intepret": 3, "lead": 3, "mess": [3, 8], "ve": 3, "warn": 3, "fast": 4, "easi": 4, "low": 4, "aggreg": 4, "both": [4, 8], "well": 4, "popular": 4, "os": [4, 6, 8], "combin": [4, 6], "recent": [4, 6], "page": [4, 5], "sourc": [4, 6], "subdirectori": 4, "introspect": 4, "gotcha": 4, "thread": 4, "safeti": 4, "work": 4, "x86_64": [4, 6], "contribut": 4, "request": 4, "todo": 4, "list": [4, 8], "changelog": 4, "softwar": 4, "redistribut": 4, "modifi": [4, 8], "term": 4, "affero": 4, "public": 4, "publish": 4, "foundat": 4, "www": 4, "org": 4, "prealloc": 5, "block": 5, "One": 5, "construct": 5, "assign": [5, 8], "regist": [5, 8], "mib": 5, "unless": 5, "veri": 5, "extra": 5, "dure": 5, "engin": 5, "might": 5, "config": 5, "obj": 5, "appli": [5, 8], "true": [5, 8], "unus": 5, "resid": 5, "still": 5, "finish": 5, "resident_async_pool": 5, "left": 5, "There": 5, "sync_stack_s": 5, "sync_heap_s": 5, "async_stack_s": 5, "256": 5, "kib": 5, "async_heap_s": 5, "512": 5, "pool": 5, "ongo": 5, "22": 6, "nvm": 6, "distribut": 6, "moment": 6, "isa": 6, "freebsd": 6, "ia32": 6, "ye": 6, "amd64": 6, "le": [6, 8], "probabl": [3, 6], "fulli": 6, "green": 6, "check": 6, "mark": 6, "mean": [6, 8], "ms": 6, "hard": 6, "vfp": 6, "coprocessor": 6, "softfp": 6, "soft": 6, "theori": 6, "lp64f": 6, "prototyp": 7, "languag": 7, "syntax": 7, "localtime_r": 7, "current": [7, 8], "time_t": 7, "tm": 7, "tm_sec": 7, "tm_min": 7, "tm_hour": 7, "tm_mdai": 7, "tm_mon": 7, "tm_year": 7, "tm_wdai": 7, "tm_ydai": 7, "tm_isdst": 7, "format": 7, "variad": 7, "02d": 7, "target": 7, "messagebox": 7, "user": [7, 8], "utf": [7, 8], "constant": 7, "mb_ok": 7, "0x0": 7, "mb_yesno": 7, "mb_iconquest": 7, "0x20": 7, "mb_iconinform": 7, "0x40": 7, "idok": 7, "idy": 7, "idno": 7, "messageboxw": 7, "box": 7, "allow": 8, "variat": 8, "enforc": 8, "signed": 8, "valid": 8, "int8": 8, "int8_t": 8, "uint8": 8, "uint8_t": 8, "uchar": 8, "int16": 8, "int16_t": 8, "uint16": 8, "uint16_t": 8, "short": 8, "int32": 8, "int32_t": 8, "uint32": 8, "uint32_t": 8, "int64": 8, "uint64": 8, "longlong": 8, "ulonglong": 8, "float32": 8, "float64": 8, "accept": 8, "bigint": 8, "exce": 8, "rang": 8, "revers": 8, "boolean": 8, "bool": 8, "usual": 8, "ulong": 8, "intptr": 8, "width": 8, "uintptr": 8, "line": 8, "struct1": 8, "dummi": 8, "struct2": 8, "vice": 8, "versa": 8, "unlik": 8, "typedef": 8, "b": 8, "d1": 8, "d2": 8, "rule": 8, "regard": 8, "pad": 8, "latter": 8, "function1": 8, "function2": 8, "differenti": 8, "purpos": 8, "import": 8, "fall": 8, "expens": 8, "stabil": 8, "dynam": 8, "termin": 8, "sentinel": 8, "length": 8, "lot": 8, "getcursorpo": 8, "retriev": 8, "cursor": 8, "posit": 8, "kernel32": 8, "y": 8, "po": 8, "kind": 8, "pair": 8, "dedic": 8, "delet": 8, "obviou": 8, "found": 8, "stdio": 8, "fopen": 8, "manipul": 8, "fread": 8, "ftell": 8, "manag": 8, "look": 8, "concatnewout": 8, "describ": 8, "builder": 8, "concaten": 8, "fizzbuzz": 8, "hidden": 8, "behind": 8, "destroi": 8, "concatnew": 8, "concatfre": 8, "fpic": 8, "wall": 8, "o2": 8, "stdlib": 8, "stdbool": 8, "errno": 8, "fragment": 8, "next": 8, "size_t": 8, "len": 8, "concat": 8, "total": 8, "fprintf": 8, "stderr": 8, "strerror": 8, "concatappend": 8, "frag": 8, "strlen": 8, "memcpi": 8, "concatbuild": 8, "r": 8, "stupid": 8, "30": 8, "buzz": 8, "fizz": 8, "infer": 8, "itself": 8, "translat": 8, "proper": 8, "notion": 8, "fat": 8, "calcul": 8, "stdint": 8, "computetotallength": 8, "just": 8, "findfirstfilew": 8, "findnextfilew": 8, "filetim": 8, "dwlowdatetim": 8, "dwhighdatetim": 8, "win32_find_data": 8, "dwfileattribut": 8, "ftcreationtim": 8, "ftlastaccesstim": 8, "ftlastwritetim": 8, "nfilesizehigh": 8, "nfilesizelow": 8, "dwreserved0": 8, "dwreserved1": 8, "cfilenam": 8, "260": 8, "calternatefilenam": 8, "dwfiletyp": 8, "obsolet": 8, "dwcreatortyp": 8, "wfinderflag": 8, "ushort": 8, "findfirstfil": 8, "findnextfil": 8, "findclos": 8, "getlasterror": 8, "dirnam": 8, "error_file_not_found": 8, "18": 8, "error_no_more_fil": 8, "among": 8, "variabl": 8, "invol": 8, "list1": 8, "list2": 8, "singl": 8, "element": 8, "store": 8, "addint": 8, "dest": 8, "36": 8, "degener": 8, "emb": 8, "correct": [3, 8], "uint8arrai": 8, "those": 8, "exactli": 8, "foo1": 8, "foo": 8, "a16": 8, "foo2": 8, "hypothet": 8, "returnfoo1": 8, "returnfoo": 8, "p": 8, "returnfoo2": 8, "int16arrai": 8, "fill": 8, "truncat": 8, "alwai": 8, "nul": 8, "ask": 8, "explor": 8, "alignof": 8, "about": 8, "caller": []}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"benchmark": 0, "overview": [0, 4], "linux": [0, 7], "x86_64": 0, "rand": 0, "result": 0, "atoi": 0, "raylib": 0, "window": [0, 2, 7], "run": [0, 2], "changelog": 1, "koffi": [1, 4, 7], "1": [1, 4], "3": [1, 4], "9": 1, "8": 1, "7": [1, 4], "6": 1, "5": 1, "4": 1, "2": 1, "0": 1, "contribut": 2, "bug": 2, "featur": 2, "request": 2, "build": 2, "from": 2, "sourc": 2, "other": 2, "platform": [2, 6], "test": 2, "todo": 2, "list": 2, "code": 2, "style": 2, "function": 3, "call": 3, "definit": 3, "classic": 3, "syntax": 3, "c": [3, 8], "like": 3, "prototyp": 3, "synchron": [], "asynchron": 3, "variad": 3, "js": [3, 6], "convers": 3, "gotcha": 3, "output": 3, "paramet": 3, "struct": [3, 8], "exampl": [3, 7], "opaqu": [3, 8], "handl": [3, 8], "heap": 3, "alloc": 3, "valu": 3, "javascript": 3, "callback": 3, "transient": 3, "regist": 3, "except": 3, "thread": 3, "safeti": 3, "tabl": 4, "content": 4, "licens": 4, "memori": 5, "usag": 5, "how": 5, "work": 5, "default": 5, "set": 5, "requir": 6, "node": 6, "support": 6, "quick": 7, "start": 7, "instal": 7, "small": 7, "data": 8, "type": 8, "primit": 8, "pointer": 8, "arrai": 8, "fix": 8, "size": 8, "string": 8, "introspect": 8, "convent": 3}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}})
@@ -5,7 +5,7 @@
5
5
  <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
6
6
  <link rel="index" title="Index" href="genindex" /><link rel="search" title="Search" href="search" /><link rel="next" title="Data types" href="types" /><link rel="prev" title="Requirements" href="platforms" />
7
7
 
8
- <meta name="generator" content="sphinx-5.0.2, furo 2022.06.21"/>
8
+ <meta name="generator" content="sphinx-5.0.1, furo 2022.06.04.1"/>
9
9
  <title>Quick start - Koffi</title>
10
10
  <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
11
11
  <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=40978830699223671f4072448e654b5958f38b89" />
@@ -212,7 +212,7 @@
212
212
  </pre></div>
213
213
  </div>
214
214
  <p>Once you have installed Koffi, you can start by loading it this way:</p>
215
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">koffi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span><span class="w"></span>
215
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span> <span class="nx">koffi</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span>
216
216
  </pre></div>
217
217
  </div>
218
218
  <p>Below you can find three examples:</p>
@@ -225,47 +225,47 @@
225
225
  <h2>Small Linux example<a class="headerlink" href="#small-linux-example" title="Permalink to this heading">#</a></h2>
226
226
  <p>This is a small example for Linux systems, which uses <code class="docutils literal notranslate"><span class="pre">gettimeofday()</span></code>, <code class="docutils literal notranslate"><span class="pre">localtime_r()</span></code> and <code class="docutils literal notranslate"><span class="pre">printf()</span></code> to print the current time.</p>
227
227
  <p>It illustrates the use of output parameters.</p>
228
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span><span class="w"> </span><span class="nx">koffi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span><span class="w"></span>
228
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span> <span class="nx">koffi</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span>
229
229
  <span class="linenos"> 2</span>
230
- <span class="linenos"> 3</span><span class="c1">// Load the shared library</span><span class="w"></span>
231
- <span class="linenos"> 4</span><span class="kd">const</span><span class="w"> </span><span class="nx">lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;libc.so.6&#39;</span><span class="p">);</span><span class="w"></span>
230
+ <span class="linenos"> 3</span><span class="c1">// Load the shared library</span>
231
+ <span class="linenos"> 4</span><span class="kd">const</span> <span class="nx">lib</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;libc.so.6&#39;</span><span class="p">);</span>
232
232
  <span class="linenos"> 5</span>
233
- <span class="linenos"> 6</span><span class="c1">// Declare struct types</span><span class="w"></span>
234
- <span class="linenos"> 7</span><span class="kd">const</span><span class="w"> </span><span class="nx">timeval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;timeval&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
235
- <span class="linenos"> 8</span><span class="w"> </span><span class="nx">tv_sec</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;unsigned int&#39;</span><span class="p">,</span><span class="w"></span>
236
- <span class="linenos"> 9</span><span class="w"> </span><span class="nx">tv_usec</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;unsigned int&#39;</span><span class="w"></span>
237
- <span class="linenos">10</span><span class="p">});</span><span class="w"></span>
238
- <span class="linenos">11</span><span class="kd">const</span><span class="w"> </span><span class="nx">timezone</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;timezone&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
239
- <span class="linenos">12</span><span class="w"> </span><span class="nx">tz_minuteswest</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
240
- <span class="linenos">13</span><span class="w"> </span><span class="nx">tz_dsttime</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="w"></span>
241
- <span class="linenos">14</span><span class="p">});</span><span class="w"></span>
242
- <span class="linenos">15</span><span class="kd">const</span><span class="w"> </span><span class="nx">time_t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;time_t&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">value</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int64_t&#39;</span><span class="w"> </span><span class="p">});</span><span class="w"></span>
243
- <span class="linenos">16</span><span class="kd">const</span><span class="w"> </span><span class="nx">tm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;tm&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
244
- <span class="linenos">17</span><span class="w"> </span><span class="nx">tm_sec</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
245
- <span class="linenos">18</span><span class="w"> </span><span class="nx">tm_min</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
246
- <span class="linenos">19</span><span class="w"> </span><span class="nx">tm_hour</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
247
- <span class="linenos">20</span><span class="w"> </span><span class="nx">tm_mday</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
248
- <span class="linenos">21</span><span class="w"> </span><span class="nx">tm_mon</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
249
- <span class="linenos">22</span><span class="w"> </span><span class="nx">tm_year</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
250
- <span class="linenos">23</span><span class="w"> </span><span class="nx">tm_wday</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
251
- <span class="linenos">24</span><span class="w"> </span><span class="nx">tm_yday</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
252
- <span class="linenos">25</span><span class="w"> </span><span class="nx">tm_isdst</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="w"></span>
253
- <span class="linenos">26</span><span class="p">});</span><span class="w"></span>
233
+ <span class="linenos"> 6</span><span class="c1">// Declare struct types</span>
234
+ <span class="linenos"> 7</span><span class="kd">const</span> <span class="nx">timeval</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;timeval&#39;</span><span class="p">,</span> <span class="p">{</span>
235
+ <span class="linenos"> 8</span> <span class="nx">tv_sec</span><span class="o">:</span> <span class="s1">&#39;unsigned int&#39;</span><span class="p">,</span>
236
+ <span class="linenos"> 9</span> <span class="nx">tv_usec</span><span class="o">:</span> <span class="s1">&#39;unsigned int&#39;</span>
237
+ <span class="linenos">10</span><span class="p">});</span>
238
+ <span class="linenos">11</span><span class="kd">const</span> <span class="nx">timezone</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;timezone&#39;</span><span class="p">,</span> <span class="p">{</span>
239
+ <span class="linenos">12</span> <span class="nx">tz_minuteswest</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
240
+ <span class="linenos">13</span> <span class="nx">tz_dsttime</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span>
241
+ <span class="linenos">14</span><span class="p">});</span>
242
+ <span class="linenos">15</span><span class="kd">const</span> <span class="nx">time_t</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;time_t&#39;</span><span class="p">,</span> <span class="p">{</span> <span class="nx">value</span><span class="o">:</span> <span class="s1">&#39;int64_t&#39;</span> <span class="p">});</span>
243
+ <span class="linenos">16</span><span class="kd">const</span> <span class="nx">tm</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;tm&#39;</span><span class="p">,</span> <span class="p">{</span>
244
+ <span class="linenos">17</span> <span class="nx">tm_sec</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
245
+ <span class="linenos">18</span> <span class="nx">tm_min</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
246
+ <span class="linenos">19</span> <span class="nx">tm_hour</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
247
+ <span class="linenos">20</span> <span class="nx">tm_mday</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
248
+ <span class="linenos">21</span> <span class="nx">tm_mon</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
249
+ <span class="linenos">22</span> <span class="nx">tm_year</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
250
+ <span class="linenos">23</span> <span class="nx">tm_wday</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
251
+ <span class="linenos">24</span> <span class="nx">tm_yday</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
252
+ <span class="linenos">25</span> <span class="nx">tm_isdst</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span>
253
+ <span class="linenos">26</span><span class="p">});</span>
254
254
  <span class="linenos">27</span>
255
- <span class="linenos">28</span><span class="c1">// Find functions</span><span class="w"></span>
256
- <span class="linenos">29</span><span class="kd">const</span><span class="w"> </span><span class="nx">gettimeofday</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;int gettimeofday(_Out_ timeval *tv, _Out_ timezone *tz)&#39;</span><span class="p">);</span><span class="w"></span>
257
- <span class="linenos">30</span><span class="kd">const</span><span class="w"> </span><span class="nx">localtime_r</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;tm *localtime_r(const time_t *timeval, _Out_ tm *result)&#39;</span><span class="p">);</span><span class="w"></span>
258
- <span class="linenos">31</span><span class="kd">const</span><span class="w"> </span><span class="nx">printf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;int printf(const char *format, ...)&#39;</span><span class="p">);</span><span class="w"></span>
255
+ <span class="linenos">28</span><span class="c1">// Find functions</span>
256
+ <span class="linenos">29</span><span class="kd">const</span> <span class="nx">gettimeofday</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;int gettimeofday(_Out_ timeval *tv, _Out_ timezone *tz)&#39;</span><span class="p">);</span>
257
+ <span class="linenos">30</span><span class="kd">const</span> <span class="nx">localtime_r</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;tm *localtime_r(const time_t *timeval, _Out_ tm *result)&#39;</span><span class="p">);</span>
258
+ <span class="linenos">31</span><span class="kd">const</span> <span class="nx">printf</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;int printf(const char *format, ...)&#39;</span><span class="p">);</span>
259
259
  <span class="linenos">32</span>
260
- <span class="linenos">33</span><span class="c1">// Get local time</span><span class="w"></span>
261
- <span class="linenos">34</span><span class="kd">let</span><span class="w"> </span><span class="nx">tv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{};</span><span class="w"></span>
262
- <span class="linenos">35</span><span class="kd">let</span><span class="w"> </span><span class="nx">now</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{};</span><span class="w"></span>
263
- <span class="linenos">36</span><span class="nx">gettimeofday</span><span class="p">(</span><span class="nx">tv</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">);</span><span class="w"></span>
264
- <span class="linenos">37</span><span class="nx">localtime_r</span><span class="p">({</span><span class="w"> </span><span class="nx">value</span><span class="o">:</span><span class="w"> </span><span class="nx">tv</span><span class="p">.</span><span class="nx">tv_sec</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="nx">now</span><span class="p">);</span><span class="w"></span>
260
+ <span class="linenos">33</span><span class="c1">// Get local time</span>
261
+ <span class="linenos">34</span><span class="kd">let</span> <span class="nx">tv</span> <span class="o">=</span> <span class="p">{};</span>
262
+ <span class="linenos">35</span><span class="kd">let</span> <span class="nx">now</span> <span class="o">=</span> <span class="p">{};</span>
263
+ <span class="linenos">36</span><span class="nx">gettimeofday</span><span class="p">(</span><span class="nx">tv</span><span class="p">,</span> <span class="kc">null</span><span class="p">);</span>
264
+ <span class="linenos">37</span><span class="nx">localtime_r</span><span class="p">({</span> <span class="nx">value</span><span class="o">:</span> <span class="nx">tv</span><span class="p">.</span><span class="nx">tv_sec</span> <span class="p">},</span> <span class="nx">now</span><span class="p">);</span>
265
265
  <span class="linenos">38</span>
266
- <span class="linenos">39</span><span class="c1">// And format it with printf (variadic function)</span><span class="w"></span>
267
- <span class="linenos">40</span><span class="nx">printf</span><span class="p">(</span><span class="s1">&#39;Hello World!\n&#39;</span><span class="p">);</span><span class="w"></span>
268
- <span class="linenos">41</span><span class="nx">printf</span><span class="p">(</span><span class="s1">&#39;Local time: %02d:%02d:%02d\n&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="nx">now</span><span class="p">.</span><span class="nx">tm_hour</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="nx">now</span><span class="p">.</span><span class="nx">tm_min</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="nx">now</span><span class="p">.</span><span class="nx">tm_sec</span><span class="p">);</span><span class="w"></span>
266
+ <span class="linenos">39</span><span class="c1">// And format it with printf (variadic function)</span>
267
+ <span class="linenos">40</span><span class="nx">printf</span><span class="p">(</span><span class="s1">&#39;Hello World!\n&#39;</span><span class="p">);</span>
268
+ <span class="linenos">41</span><span class="nx">printf</span><span class="p">(</span><span class="s1">&#39;Local time: %02d:%02d:%02d\n&#39;</span><span class="p">,</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span> <span class="nx">now</span><span class="p">.</span><span class="nx">tm_hour</span><span class="p">,</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span> <span class="nx">now</span><span class="p">.</span><span class="nx">tm_min</span><span class="p">,</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span> <span class="nx">now</span><span class="p">.</span><span class="nx">tm_sec</span><span class="p">);</span>
269
269
  </pre></div>
270
270
  </div>
271
271
  </section>
@@ -273,27 +273,27 @@
273
273
  <h2>Small Windows example<a class="headerlink" href="#small-windows-example" title="Permalink to this heading">#</a></h2>
274
274
  <p>This is a small example targeting the Win32 API, using <code class="docutils literal notranslate"><span class="pre">MessageBox()</span></code> to show a <em>Hello World!</em> message to the user.</p>
275
275
  <p>It illustrates the use of the x86 stdcall calling convention, and the use of UTF-8 and UTF-16 string arguments.</p>
276
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span><span class="w"> </span><span class="nx">koffi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span><span class="w"></span>
276
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span> <span class="nx">koffi</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span>
277
277
  <span class="linenos"> 2</span>
278
- <span class="linenos"> 3</span><span class="c1">// Load the shared library</span><span class="w"></span>
279
- <span class="linenos"> 4</span><span class="kd">const</span><span class="w"> </span><span class="nx">lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;user32.dll&#39;</span><span class="p">);</span><span class="w"></span>
278
+ <span class="linenos"> 3</span><span class="c1">// Load the shared library</span>
279
+ <span class="linenos"> 4</span><span class="kd">const</span> <span class="nx">lib</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;user32.dll&#39;</span><span class="p">);</span>
280
280
  <span class="linenos"> 5</span>
281
- <span class="linenos"> 6</span><span class="c1">// Declare constants</span><span class="w"></span>
282
- <span class="linenos"> 7</span><span class="kd">const</span><span class="w"> </span><span class="nx">MB_OK</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0x0</span><span class="p">;</span><span class="w"></span>
283
- <span class="linenos"> 8</span><span class="kd">const</span><span class="w"> </span><span class="nx">MB_YESNO</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0x4</span><span class="p">;</span><span class="w"></span>
284
- <span class="linenos"> 9</span><span class="kd">const</span><span class="w"> </span><span class="nx">MB_ICONQUESTION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0x20</span><span class="p">;</span><span class="w"></span>
285
- <span class="linenos">10</span><span class="kd">const</span><span class="w"> </span><span class="nx">MB_ICONINFORMATION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mh">0x40</span><span class="p">;</span><span class="w"></span>
286
- <span class="linenos">11</span><span class="kd">const</span><span class="w"> </span><span class="nx">IDOK</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span><span class="w"></span>
287
- <span class="linenos">12</span><span class="kd">const</span><span class="w"> </span><span class="nx">IDYES</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">6</span><span class="p">;</span><span class="w"></span>
288
- <span class="linenos">13</span><span class="kd">const</span><span class="w"> </span><span class="nx">IDNO</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">7</span><span class="p">;</span><span class="w"></span>
281
+ <span class="linenos"> 6</span><span class="c1">// Declare constants</span>
282
+ <span class="linenos"> 7</span><span class="kd">const</span> <span class="nx">MB_OK</span> <span class="o">=</span> <span class="mh">0x0</span><span class="p">;</span>
283
+ <span class="linenos"> 8</span><span class="kd">const</span> <span class="nx">MB_YESNO</span> <span class="o">=</span> <span class="mh">0x4</span><span class="p">;</span>
284
+ <span class="linenos"> 9</span><span class="kd">const</span> <span class="nx">MB_ICONQUESTION</span> <span class="o">=</span> <span class="mh">0x20</span><span class="p">;</span>
285
+ <span class="linenos">10</span><span class="kd">const</span> <span class="nx">MB_ICONINFORMATION</span> <span class="o">=</span> <span class="mh">0x40</span><span class="p">;</span>
286
+ <span class="linenos">11</span><span class="kd">const</span> <span class="nx">IDOK</span> <span class="o">=</span> <span class="mf">1</span><span class="p">;</span>
287
+ <span class="linenos">12</span><span class="kd">const</span> <span class="nx">IDYES</span> <span class="o">=</span> <span class="mf">6</span><span class="p">;</span>
288
+ <span class="linenos">13</span><span class="kd">const</span> <span class="nx">IDNO</span> <span class="o">=</span> <span class="mf">7</span><span class="p">;</span>
289
289
  <span class="linenos">14</span>
290
- <span class="linenos">15</span><span class="c1">// Find functions</span><span class="w"></span>
291
- <span class="linenos">16</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxA</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">&#39;MessageBoxA&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;void *&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;str&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;str&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">]);</span><span class="w"></span>
292
- <span class="linenos">17</span><span class="kd">const</span><span class="w"> </span><span class="nx">MessageBoxW</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">&#39;MessageBoxW&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;void *&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;str16&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;str16&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">]);</span><span class="w"></span>
290
+ <span class="linenos">15</span><span class="c1">// Find functions</span>
291
+ <span class="linenos">16</span><span class="kd">const</span> <span class="nx">MessageBoxA</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">&#39;MessageBoxA&#39;</span><span class="p">,</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;void *&#39;</span><span class="p">,</span> <span class="s1">&#39;str&#39;</span><span class="p">,</span> <span class="s1">&#39;str&#39;</span><span class="p">,</span> <span class="s1">&#39;uint&#39;</span><span class="p">]);</span>
292
+ <span class="linenos">17</span><span class="kd">const</span> <span class="nx">MessageBoxW</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">stdcall</span><span class="p">(</span><span class="s1">&#39;MessageBoxW&#39;</span><span class="p">,</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;void *&#39;</span><span class="p">,</span> <span class="s1">&#39;str16&#39;</span><span class="p">,</span> <span class="s1">&#39;str16&#39;</span><span class="p">,</span> <span class="s1">&#39;uint&#39;</span><span class="p">]);</span>
293
293
  <span class="linenos">18</span>
294
- <span class="linenos">19</span><span class="kd">let</span><span class="w"> </span><span class="nx">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">MessageBoxA</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Do you want another message box?&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Koffi&#39;</span><span class="p">,</span><span class="w"> </span><span class="nx">MB_YESNO</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">MB_ICONQUESTION</span><span class="p">);</span><span class="w"></span>
295
- <span class="linenos">20</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">ret</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">IDYES</span><span class="p">)</span><span class="w"></span>
296
- <span class="linenos">21</span><span class="w"> </span><span class="nx">MessageBoxW</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Hello World!&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Koffi&#39;</span><span class="p">,</span><span class="w"> </span><span class="nx">MB_ICONINFORMATION</span><span class="p">);</span><span class="w"></span>
294
+ <span class="linenos">19</span><span class="kd">let</span> <span class="nx">ret</span> <span class="o">=</span> <span class="nx">MessageBoxA</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="s1">&#39;Do you want another message box?&#39;</span><span class="p">,</span> <span class="s1">&#39;Koffi&#39;</span><span class="p">,</span> <span class="nx">MB_YESNO</span> <span class="o">|</span> <span class="nx">MB_ICONQUESTION</span><span class="p">);</span>
295
+ <span class="linenos">20</span><span class="k">if</span> <span class="p">(</span><span class="nx">ret</span> <span class="o">==</span> <span class="nx">IDYES</span><span class="p">)</span>
296
+ <span class="linenos">21</span> <span class="nx">MessageBoxW</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="s1">&#39;Hello World!&#39;</span><span class="p">,</span> <span class="s1">&#39;Koffi&#39;</span><span class="p">,</span> <span class="nx">MB_ICONINFORMATION</span><span class="p">);</span>
297
297
  </pre></div>
298
298
  </div>
299
299
  </section>