{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.Ih0n9poW/b1/allegro5_5.2.9.1+dfsg-2_arm64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.Ih0n9poW/b2/allegro5_5.2.9.1+dfsg-2_arm64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n- c479a1b7969c78e8f5c114ae5e5e6843 1394356 doc optional allegro5-doc_5.2.9.1+dfsg-2_all.deb\n+ ce271a2ecc8235481aa0901770775fc1 1390432 doc optional allegro5-doc_5.2.9.1+dfsg-2_all.deb\n 6b00acf5f9eee09980ae3253a40edfc8 18612 libdevel optional liballegro-acodec5-dev_5.2.9.1+dfsg-2_arm64.deb\n edb760eb4d4de71446910b1db7e7520c 61904 debug optional liballegro-acodec5.2t64-dbgsym_5.2.9.1+dfsg-2_arm64.deb\n ed1646f7ef04d546ad16fe409e8d88a7 36540 libs optional liballegro-acodec5.2t64_5.2.9.1+dfsg-2_arm64.deb\n 487239f6fd08d199d31715ab1d1e644a 21416 libdevel optional liballegro-audio5-dev_5.2.9.1+dfsg-2_arm64.deb\n 5b9d9c6676fe5102f6055d7b751e714d 106764 debug optional liballegro-audio5.2t64-dbgsym_5.2.9.1+dfsg-2_arm64.deb\n c9beb6da55609180fc76853d8b2d2d5a 56272 libs optional liballegro-audio5.2t64_5.2.9.1+dfsg-2_arm64.deb\n 9f846c7116745f5fec3095fc8a1bb437 19656 libdevel optional liballegro-dialog5-dev_5.2.9.1+dfsg-2_arm64.deb\n"}, {"source1": "allegro5-doc_5.2.9.1+dfsg-2_all.deb", "source2": "allegro5-doc_5.2.9.1+dfsg-2_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2024-05-03 10:28:35.000000 debian-binary\n--rw-r--r-- 0 0 0 31560 2024-05-03 10:28:35.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1362604 2024-05-03 10:28:35.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 31564 2024-05-03 10:28:35.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 1358676 2024-05-03 10:28:35.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./control", "source2": "./control", "unified_diff": "@@ -1,13 +1,13 @@\n Package: allegro5-doc\n Source: allegro5\n Version: 2:5.2.9.1+dfsg-2\n Architecture: all\n Maintainer: Debian Games Team \n-Installed-Size: 5603\n+Installed-Size: 5525\n Depends: fonts-dejavu-core\n Section: doc\n Priority: optional\n Multi-Arch: foreign\n Homepage: https://liballeg.org/\n Description: documentation for the Allegro 5 library\n This package contains the Allegro documentation in various formats,\n"}, {"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -198,65 +198,65 @@\n -rw-r--r-- 0 root (0) root (0) 5396 2024-01-20 03:16:21.000000 ./usr/share/doc/allegro5-doc/examples/ex_window_maximized.c\n -rw-r--r-- 0 root (0) root (0) 2660 2024-01-20 03:16:21.000000 ./usr/share/doc/allegro5-doc/examples/ex_window_title.c\n -rw-r--r-- 0 root (0) root (0) 6446 2024-01-20 03:16:21.000000 ./usr/share/doc/allegro5-doc/examples/ex_windows.c\n -rw-r--r-- 0 root (0) root (0) 1674 2024-01-20 03:16:21.000000 ./usr/share/doc/allegro5-doc/examples/ex_winfull.c\n -rw-r--r-- 0 root (0) root (0) 19521 2024-01-20 03:16:21.000000 ./usr/share/doc/allegro5-doc/examples/nihgui.cpp\n -rw-r--r-- 0 root (0) root (0) 6456 2024-01-20 03:16:21.000000 ./usr/share/doc/allegro5-doc/examples/nihgui.hpp\n drwxr-xr-x 0 root (0) root (0) 0 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/\n--rw-r--r-- 0 root (0) root (0) 11781 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/acodec.html\n--rw-r--r-- 0 root (0) root (0) 231960 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/audio.html\n+-rw-r--r-- 0 root (0) root (0) 11396 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/acodec.html\n+-rw-r--r-- 0 root (0) root (0) 204825 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/audio.html\n -rw-r--r-- 0 root (0) root (0) 36350 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/autosuggest.js\n--rw-r--r-- 0 root (0) root (0) 66986 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/color.html\n--rw-r--r-- 0 root (0) root (0) 37787 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/config.html\n--rw-r--r-- 0 root (0) root (0) 17711 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/direct3d.html\n--rw-r--r-- 0 root (0) root (0) 85624 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/display.html\n--rw-r--r-- 0 root (0) root (0) 81432 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/events.html\n--rw-r--r-- 0 root (0) root (0) 62307 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/file.html\n+-rw-r--r-- 0 root (0) root (0) 62103 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/color.html\n+-rw-r--r-- 0 root (0) root (0) 37149 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/config.html\n+-rw-r--r-- 0 root (0) root (0) 17576 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/direct3d.html\n+-rw-r--r-- 0 root (0) root (0) 85327 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/display.html\n+-rw-r--r-- 0 root (0) root (0) 79069 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/events.html\n+-rw-r--r-- 0 root (0) root (0) 61454 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/file.html\n -rw-r--r-- 0 root (0) root (0) 56555 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/fixed.html\n--rw-r--r-- 0 root (0) root (0) 95348 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/font.html\n--rw-r--r-- 0 root (0) root (0) 42368 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/fshook.html\n--rw-r--r-- 0 root (0) root (0) 13487 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/fullscreen_mode.html\n+-rw-r--r-- 0 root (0) root (0) 87415 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/font.html\n+-rw-r--r-- 0 root (0) root (0) 42129 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/fshook.html\n+-rw-r--r-- 0 root (0) root (0) 13212 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/fullscreen_mode.html\n -rw-r--r-- 0 root (0) root (0) 17054 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/getting_started.html\n--rw-r--r-- 0 root (0) root (0) 223208 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/graphics.html\n--rw-r--r-- 0 root (0) root (0) 69779 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/haptic.html\n--rw-r--r-- 0 root (0) root (0) 12422 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/image.html\n+-rw-r--r-- 0 root (0) root (0) 221340 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/graphics.html\n+-rw-r--r-- 0 root (0) root (0) 69023 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/haptic.html\n+-rw-r--r-- 0 root (0) root (0) 12033 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/image.html\n drwxr-xr-x 0 root (0) root (0) 0 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/images/\n -rw-r--r-- 0 root (0) root (0) 21480 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/images/LINE_CAP.png\n -rw-r--r-- 0 root (0) root (0) 15893 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/images/LINE_JOIN.png\n -rw-r--r-- 0 root (0) root (0) 65065 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/images/audio.png\n -rw-r--r-- 0 root (0) root (0) 16058 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/images/primitives1.png\n -rw-r--r-- 0 root (0) root (0) 25805 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/images/primitives2.png\n -rw-r--r-- 0 root (0) root (0) 6772 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/index.html\n -rw-r--r-- 0 root (0) root (0) 110368 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/index_all.html\n--rw-r--r-- 0 root (0) root (0) 35288 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/joystick.html\n--rw-r--r-- 0 root (0) root (0) 24123 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/keyboard.html\n+-rw-r--r-- 0 root (0) root (0) 34596 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/joystick.html\n+-rw-r--r-- 0 root (0) root (0) 23770 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/keyboard.html\n -rw-r--r-- 0 root (0) root (0) 9012 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/main.html\n--rw-r--r-- 0 root (0) root (0) 10520 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/memfile.html\n--rw-r--r-- 0 root (0) root (0) 24141 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/memory.html\n--rw-r--r-- 0 root (0) root (0) 10393 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/misc.html\n--rw-r--r-- 0 root (0) root (0) 17870 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/monitor.html\n--rw-r--r-- 0 root (0) root (0) 41698 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/mouse.html\n--rw-r--r-- 0 root (0) root (0) 78259 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/native_dialog.html\n+-rw-r--r-- 0 root (0) root (0) 10381 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/memfile.html\n+-rw-r--r-- 0 root (0) root (0) 23335 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/memory.html\n+-rw-r--r-- 0 root (0) root (0) 10026 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/misc.html\n+-rw-r--r-- 0 root (0) root (0) 17490 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/monitor.html\n+-rw-r--r-- 0 root (0) root (0) 41344 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/mouse.html\n+-rw-r--r-- 0 root (0) root (0) 72747 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/native_dialog.html\n -rw-r--r-- 0 root (0) root (0) 27232 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/opengl.html\n -rw-r--r-- 0 root (0) root (0) 3973 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/pandoc.css\n--rw-r--r-- 0 root (0) root (0) 38118 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/path.html\n--rw-r--r-- 0 root (0) root (0) 11853 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/physfs.html\n--rw-r--r-- 0 root (0) root (0) 26616 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/platform.html\n--rw-r--r-- 0 root (0) root (0) 145969 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/primitives.html\n+-rw-r--r-- 0 root (0) root (0) 38127 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/path.html\n+-rw-r--r-- 0 root (0) root (0) 11715 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/physfs.html\n+-rw-r--r-- 0 root (0) root (0) 26339 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/platform.html\n+-rw-r--r-- 0 root (0) root (0) 136390 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/primitives.html\n -rw-r--r-- 0 root (0) root (0) 72016 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/search_index.js\n--rw-r--r-- 0 root (0) root (0) 45919 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/shader.html\n--rw-r--r-- 0 root (0) root (0) 15870 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/state.html\n--rw-r--r-- 0 root (0) root (0) 71004 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/system.html\n--rw-r--r-- 0 root (0) root (0) 35451 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/threads.html\n--rw-r--r-- 0 root (0) root (0) 12631 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/time.html\n--rw-r--r-- 0 root (0) root (0) 26614 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/timer.html\n--rw-r--r-- 0 root (0) root (0) 22266 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/touch.html\n--rw-r--r-- 0 root (0) root (0) 82432 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/transformations.html\n--rw-r--r-- 0 root (0) root (0) 103250 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/utf8.html\n--rw-r--r-- 0 root (0) root (0) 31894 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/video.html\n+-rw-r--r-- 0 root (0) root (0) 45272 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/shader.html\n+-rw-r--r-- 0 root (0) root (0) 15502 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/state.html\n+-rw-r--r-- 0 root (0) root (0) 70634 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/system.html\n+-rw-r--r-- 0 root (0) root (0) 34706 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/threads.html\n+-rw-r--r-- 0 root (0) root (0) 12474 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/time.html\n+-rw-r--r-- 0 root (0) root (0) 26113 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/timer.html\n+-rw-r--r-- 0 root (0) root (0) 22268 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/touch.html\n+-rw-r--r-- 0 root (0) root (0) 81996 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/transformations.html\n+-rw-r--r-- 0 root (0) root (0) 90320 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/utf8.html\n+-rw-r--r-- 0 root (0) root (0) 29997 2024-05-03 10:28:35.000000 ./usr/share/doc/allegro5-doc/refman/video.html\n drwxr-xr-x 0 root (0) root (0) 0 2024-05-03 10:28:35.000000 ./usr/share/doc-base/\n -rw-r--r-- 0 root (0) root (0) 300 2024-03-20 15:11:29.000000 ./usr/share/doc-base/allegro5-doc.allegro5\n drwxr-xr-x 0 root (0) root (0) 0 2024-05-03 10:28:35.000000 ./usr/share/man/\n drwxr-xr-x 0 root (0) root (0) 0 2024-05-03 10:28:35.000000 ./usr/share/man/man3/\n -rw-r--r-- 0 root (0) root (0) 405 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_AUDIO_DEPTH.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 254 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_AUDIO_DEVICE.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 554 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_AUDIO_EVENT_TYPE.3alleg5.gz\n@@ -267,17 +267,17 @@\n -rw-r--r-- 0 root (0) root (0) 247 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_BITMAP.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 459 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_BITMAP_WRAP.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 250 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_BPM_TO_SECS.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 245 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_BPS_TO_SECS.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 281 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_CHANNEL_CONF.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 313 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_COLOR.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 244 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_COND.3alleg5.gz\n--rw-r--r-- 0 root (0) root (0) 220 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_CONFIG.3alleg5.gz\n--rw-r--r-- 0 root (0) root (0) 288 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_CONFIG_ENTRY.3alleg5.gz\n--rw-r--r-- 0 root (0) root (0) 286 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_CONFIG_SECTION.3alleg5.gz\n+-rw-r--r-- 0 root (0) root (0) 235 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_CONFIG.3alleg5.gz\n+-rw-r--r-- 0 root (0) root (0) 303 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_CONFIG_ENTRY.3alleg5.gz\n+-rw-r--r-- 0 root (0) root (0) 300 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_CONFIG_SECTION.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 247 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_DISPLAY.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 458 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_DISPLAY_MODE.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 5011 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_EVENT.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 364 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_EVENT_QUEUE.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 398 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_EVENT_SOURCE.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 295 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_EVENT_TYPE.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 307 2024-05-03 10:28:35.000000 ./usr/share/man/man3/ALLEGRO_EVENT_TYPE_IS_USER.3alleg5.gz\n"}, {"source1": "./usr/share/doc/allegro5-doc/refman/acodec.html", "source2": "./usr/share/doc/allegro5-doc/refman/acodec.html", "unified_diff": "@@ -209,23 +209,14 @@\n href=\"audio.html#al_load_sample_f\">al_load_sample_f and must be\n streamed with al_load_audio_stream or al_load_audio_stream_f.

\n
  • .voc file streaming is unimplemented.

  • \n \n

    Return true on success.

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    \n al_is_acodec_addon_initialized\n
    bool al_is_acodec_addon_initialized(void)
    \n

    Source\n Code

    \n

    Returns true if the acodec addon is initialized, otherwise returns\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -64,18 +64,14 @@\n * Module files (.it, .mod, .s3m, .xm) are often composed with streaming in\n mind, and sometimes cannot be easily rendered into a finite length\n sample. Therefore they cannot be loaded with _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bs_\ba_\bm_\bp_\bl_\be/\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bf and must be streamed with _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm or\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf.\n * .voc file streaming is unimplemented.\n Return true on success.\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_a\bac\bco\bod\bde\bec\bc_\b_a\bad\bdd\bdo\bon\bn_\b_i\bin\bni\bit\bti\bia\bal\bli\biz\bze\bed\bd *\b**\b**\b**\b**\b**\b*\n bool al_is_acodec_addon_initialized(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if the acodec addon is initialized, otherwise returns false.\n Since: 5.2.6\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bal\bll\ble\beg\bgr\bro\bo_\b_a\bac\bco\bod\bde\bec\bc_\b_v\bve\ber\brs\bsi\bio\bon\bn *\b**\b**\b**\b**\b**\b*\n uint32_t al_get_allegro_acodec_version(void)\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/audio.html", "source2": "./usr/share/doc/allegro5-doc/refman/audio.html", "unified_diff": "@@ -564,19 +564,14 @@\n Code

    \n

    An ALLEGRO_SAMPLE_ID represents a sample being played via al_play_sample. It can be used to\n later stop the sample with al_stop_sample. The underlying\n ALLEGRO_SAMPLE_INSTANCE can be extracted using al_lock_sample_id.

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_simple.c
    • \n-
    \n

    al_install_audio

    \n
    bool al_install_audio(void)
    \n

    Source\n Code

    \n

    Install the audio subsystem.

    \n

    Returns true on success, false on failure.

    \n@@ -587,40 +582,22 @@\n this.

    \n \n

    See also: al_reserve_samples, al_uninstall_audio, al_is_audio_installed, al_init_acodec_addon

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_devices.c
    • \n-
    • ex_saw.c
    • \n-
    • ex_stream_file.c
    • \n-
    \n

    al_uninstall_audio

    \n
    void al_uninstall_audio(void)
    \n

    Source\n Code

    \n

    Uninstalls the audio subsystem.

    \n

    See also: al_install_audio

    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    \n

    al_is_audio_installed

    \n
    bool al_is_audio_installed(void)
    \n

    Source\n Code

    \n

    Returns true if al_install_audio was called\n@@ -647,23 +624,14 @@\n sample instance N\n

    Returns true on success, false on error. al_install_audio must have been\n called first.

    \n

    See also: al_set_default_mixer, al_play_sample

    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_audio_props.cpp
    • \n-
    • ex_resample_test.c
    • \n-
    \n

    al_play_sample

    \n
    bool al_play_sample(ALLEGRO_SAMPLE *spl, float gain, float pan, float speed,\n    ALLEGRO_PLAYMODE loop, ALLEGRO_SAMPLE_ID *ret_id)
    \n

    Source\n Code

    \n

    Plays a sample on one of the sample instances created by See also: al_load_sample, ALLEGRO_PLAYMODE, ALLEGRO_AUDIO_PAN_NONE, ALLEGRO_SAMPLE_ID, al_stop_sample, al_stop_samples, al_lock_sample_id.

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_stop_sample

    \n
    void al_stop_sample(ALLEGRO_SAMPLE_ID *spl_id)
    \n

    Source\n Code

    \n

    Stop the sample started by al_play_sample.

    \n

    See also: al_stop_samples

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_stop_samples

    \n
    void al_stop_samples(void)
    \n

    Source\n Code

    \n

    Stop all samples started by al_play_sample.

    \n

    See also: al_stop_sample

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_simple.c
    • \n-
    \n

    al_lock_sample_id

    \n
    ALLEGRO_SAMPLE_INSTANCE* al_lock_sample_id(ALLEGRO_SAMPLE_ID *spl_id)
    \n

    Source\n Code

    \n

    Locks a ALLEGRO_SAMPLE_ID,\n returning the underlying See also: al_play_sample, al_unlock_sample_id

    \n

    Since: 5.2.3

    \n
    \n

    Unstable\n API: New API.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_audio_simple.c
    • \n-
    \n

    al_unlock_sample_id

    \n
    void al_unlock_sample_id(ALLEGRO_SAMPLE_ID *spl_id)
    \n

    Source\n Code

    \n

    Unlocks a ALLEGRO_SAMPLE_ID, allowing\n@@ -780,19 +720,14 @@\n

    See also: al_play_sample, al_lock_sample_id

    \n

    Since: 5.2.3

    \n
    \n

    Unstable\n API: New API.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_audio_simple.c
    • \n-
    \n

    al_play_audio_stream

    \n
    ALLEGRO_AUDIO_STREAM *al_play_audio_stream(const char *filename)
    \n

    Source\n Code

    \n

    Loads and plays an audio file, streaming from disk as it is needed.\n This API can only play one audio stream at a time. This requires a\n@@ -812,19 +747,14 @@\n href=\"audio.html#al_play_audio_stream_f\">al_play_audio_stream_f, al_load_audio_stream

    \n

    Since: 5.2.8

    \n
    \n

    Unstable\n API: New API.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_audio_simple.c
    • \n-
    \n

    al_play_audio_stream_f

    \n
    ALLEGRO_AUDIO_STREAM *al_play_audio_stream_f(ALLEGRO_FILE *fp, const char *ident)
    \n

    Source\n Code

    \n

    Loads and plays an audio file from ALLEGRO_FILE stream, streaming it is\n@@ -862,23 +792,14 @@\n

    An ALLEGRO_SAMPLE object stores the data necessary for playing\n pre-defined digital audio. It holds a user-specified PCM data buffer and\n information about its format (data length, depth, frequency, channel\n configuration). You can have the same ALLEGRO_SAMPLE playing multiple\n times simultaneously.

    \n

    See also: ALLEGRO_SAMPLE_INSTANCE

    \n-

    Examples:

    \n-
      \n-
    • ex_glext.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    \n

    al_create_sample

    \n
    ALLEGRO_SAMPLE *al_create_sample(void *buf, unsigned int samples,\n    unsigned int freq, ALLEGRO_AUDIO_DEPTH depth,\n    ALLEGRO_CHANNEL_CONF chan_conf, bool free_buf)
    \n

    Source\n Code

    \n@@ -902,23 +823,14 @@\n * al_get_audio_depth_size(depth);\n int bytes = samples * sample_size;\n void *buffer = al_malloc(bytes);\n

    See also: al_destroy_sample, ALLEGRO_AUDIO_DEPTH, ALLEGRO_CHANNEL_CONF

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_load_sample

    \n
    ALLEGRO_SAMPLE *al_load_sample(const char *filename)
    \n

    Source\n Code

    \n

    Loads a few different audio file formats based on their\n extension.

    \n@@ -931,23 +843,14 @@\n

    Note: the allegro_audio library does not support any audio\n file formats by default. You must use the allegro_acodec addon, or\n register your own format handler.

    \n \n

    See also: al_register_sample_loader,\n al_init_acodec_addon

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_load_sample_f

    \n
    ALLEGRO_SAMPLE *al_load_sample_f(ALLEGRO_FILE* fp, const char *ident)
    \n

    Source\n Code

    \n

    Loads an audio file from an ALLEGRO_FILE stream into an This function will stop any sample instances which may be playing the\n buffer referenced by the ALLEGRO_SAMPLE.

    \n

    See also: al_destroy_sample_instance,\n al_stop_sample, al_stop_samples

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_get_sample_channels

    \n
    ALLEGRO_CHANNEL_CONF al_get_sample_channels(const ALLEGRO_SAMPLE *spl)
    \n

    Source\n Code

    \n

    Return the channel configuration of the sample.

    \n

    See also:

    \n

    Return a pointer to the raw sample data.

    \n

    See also: al_get_sample_channels, al_get_sample_depth, al_get_sample_frequency,\n al_get_sample_length

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_timer.c
    • \n-
    \n

    Advanced Audio

    \n

    For more fine-grained control over audio output, here\u2019s a short\n description of the basic concepts:

    \n

    Voices represent audio devices on the system. Basically, every audio\n output chain that you want to be heard needs to end up in a voice. As\n voices are on the hardware/driver side of things, there is only limited\n control over their parameters (frequency, sample format, channel\n@@ -1196,212 +1085,126 @@\n instances may be created from the same ALLEGRO_SAMPLE. An ALLEGRO_SAMPLE\n must not be destroyed while there are instances which reference it.

    \n

    To actually produce audio output, an ALLEGRO_SAMPLE_INSTANCE must be\n attached to an ALLEGRO_MIXER\n which eventually reaches an ALLEGRO_VOICE object.

    \n

    See also: ALLEGRO_SAMPLE

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_create_sample_instance

    \n
    ALLEGRO_SAMPLE_INSTANCE *al_create_sample_instance(ALLEGRO_SAMPLE *sample_data)
    \n

    Source\n Code

    \n

    Creates a sample instance, using the supplied sample data. The\n instance must be attached to a mixer (or voice) in order to actually\n produce output.

    \n

    The argument may be NULL. You can then set the sample data later with\n al_set_sample.

    \n

    See also: al_destroy_sample_instance

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_destroy_sample_instance

    \n
    void al_destroy_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Detaches the sample instance from anything it may be attached to and\n frees it (the sample data, i.e.\u00a0its ALLEGRO_SAMPLE, is not\n freed!).

    \n

    See also: al_create_sample_instance

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_play_sample_instance

    \n
    bool al_play_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Play the sample instance. Returns true on success, false on\n failure.

    \n

    See also: al_stop_sample_instance

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_stop_sample_instance

    \n
    bool al_stop_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Stop an sample instance playing.

    \n

    See also: al_play_sample_instance

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n al_get_sample_instance_channels\n
    ALLEGRO_CHANNEL_CONF al_get_sample_instance_channels(\n    const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the channel configuration of the sample instance\u2019s sample\n data.

    \n

    See also: ALLEGRO_CHANNEL_CONF.

    \n-

    Examples:

    \n-
      \n-
    • ex_kcm_direct.c
    • \n-
    • ex_acodec.c
    • \n-
    \n

    al_get_sample_instance_depth

    \n
    ALLEGRO_AUDIO_DEPTH al_get_sample_instance_depth(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the audio depth of the sample instance\u2019s sample data.

    \n

    See also: ALLEGRO_AUDIO_DEPTH.

    \n-

    Examples:

    \n-
      \n-
    • ex_kcm_direct.c
    • \n-
    \n al_get_sample_instance_frequency\n
    unsigned int al_get_sample_instance_frequency(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the frequency (in Hz) of the sample instance\u2019s sample\n data.

    \n-

    Examples:

    \n-
      \n-
    • ex_kcm_direct.c
    • \n-
    \n al_get_sample_instance_length\n
    unsigned int al_get_sample_instance_length(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the length of the sample instance in sample values. This\n property may differ from the length of the instance\u2019s sample data.

    \n

    See also: al_set_sample_instance_length,\n al_get_sample_instance_time

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_props.cpp
    • \n-
    • ex_audio_simple.c
    • \n-
    \n al_set_sample_instance_length\n
    bool al_set_sample_instance_length(ALLEGRO_SAMPLE_INSTANCE *spl,\n    unsigned int val)
    \n

    Source\n Code

    \n

    Set the length of the sample instance in sample values. This can be\n used to play only parts of the underlying sample. Be careful not to\n exceed the actual length of the sample data, though.

    \n

    Return true on success, false on failure. Will fail if the sample\n instance is currently playing.

    \n

    See also: al_get_sample_instance_length

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_props.cpp
    • \n-
    \n al_get_sample_instance_position\n
    unsigned int al_get_sample_instance_position(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Get the playback position of a sample instance.

    \n

    See also: al_set_sample_instance_position

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_chain.cpp
    • \n-
    \n al_set_sample_instance_position\n
    bool al_set_sample_instance_position(ALLEGRO_SAMPLE_INSTANCE *spl,\n    unsigned int val)
    \n

    Source\n Code

    \n

    Set the playback position of a sample instance.

    \n

    Returns true on success, false on failure.

    \n

    See also: al_get_sample_instance_position

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_simple.c
    • \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_get_sample_instance_speed

    \n
    float al_get_sample_instance_speed(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the relative playback speed of the sample instance.

    \n

    See also:

    \n

    Set the relative playback speed of the sample instance. 1.0 means\n normal speed.

    \n

    Return true on success, false on failure. Will fail if the sample\n instance is attached directly to a voice.

    \n

    See also: al_get_sample_instance_speed

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_props.cpp
    • \n-
    • ex_audio_simple.c
    • \n-
    \n

    al_get_sample_instance_gain

    \n
    float al_get_sample_instance_gain(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the playback gain of the sample instance.

    \n

    See also: al_set_sample_instance_gain

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_set_sample_instance_gain

    \n
    bool al_set_sample_instance_gain(ALLEGRO_SAMPLE_INSTANCE *spl, float val)
    \n

    Source\n Code

    \n

    Set the playback gain of the sample instance.

    \n

    Returns true on success, false on failure. Will fail if the sample\n instance is attached directly to a voice.

    \n

    See also: al_get_sample_instance_gain

    \n-

    Examples:

    \n-
      \n-
    • ex_mixer_chain.c
    • \n-
    • ex_acodec.c
    • \n-
    • ex_audio_props.cpp
    • \n-
    \n

    al_get_sample_instance_pan

    \n
    float al_get_sample_instance_pan(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Get the pan value of the sample instance.

    \n

    See also: \n

    Returns true on success, false on failure. Will fail if the sample\n instance is attached directly to a voice.

    \n

    See also: al_get_sample_instance_pan,\n ALLEGRO_AUDIO_PAN_NONE

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_props.cpp
    • \n-
    • ex_audio_simple.c
    • \n-
    \n

    al_get_sample_instance_time

    \n
    float al_get_sample_instance_time(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the length of the sample instance in seconds, assuming a\n playback speed of 1.0.

    \n

    See also: al_get_sample_instance_length

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n al_get_sample_instance_playmode\n
    ALLEGRO_PLAYMODE al_get_sample_instance_playmode(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the playback mode of the sample instance.

    \n@@ -1528,57 +1294,36 @@\n href=\"https://github.com/liballeg/allegro5/blob/master/addons/audio/kcm_instance.c#L518\">Source\n Code

    \n

    Set the playback mode of the sample instance.

    \n

    Returns true on success, false on failure.

    \n

    See also: ALLEGRO_PLAYMODE,\n al_get_sample_instance_playmode

    \n-

    Examples:

    \n-
      \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    • ex_acodec.c
    • \n-
    \n al_get_sample_instance_playing\n
    bool al_get_sample_instance_playing(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return true if the sample instance is in the playing state. This may\n be true even if the instance is not attached to anything.

    \n

    See also: al_set_sample_instance_playing

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_chain.cpp
    • \n-
    \n al_set_sample_instance_playing\n
    bool al_set_sample_instance_playing(ALLEGRO_SAMPLE_INSTANCE *spl, bool val)
    \n

    Source\n Code

    \n

    Change whether the sample instance is playing.

    \n

    The instance does not need to be attached to anything (since:\n 5.1.8).

    \n

    Returns true on success, false on failure.

    \n

    See also: al_get_sample_instance_playing

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_props.cpp
    • \n-
    • ex_audio_chain.cpp
    • \n-
    \n al_get_sample_instance_attached\n
    bool al_get_sample_instance_attached(const ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return whether the sample instance is attached to something.

    \n@@ -1598,19 +1343,14 @@\n

    Returns true on success.

    \n

    See also: al_attach_sample_instance_to_mixer,\n al_attach_sample_instance_to_voice,\n al_get_sample_instance_attached

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_get_sample

    \n
    ALLEGRO_SAMPLE *al_get_sample(ALLEGRO_SAMPLE_INSTANCE *spl)
    \n

    Source\n Code

    \n

    Return the sample data that the sample instance plays.

    \n

    Note this returns a pointer to an internal structure, not\n@@ -1618,23 +1358,14 @@\n have passed to al_set_sample.\n However, the sample buffer of the returned ALLEGRO_SAMPLE will be the\n same as the one that was used to create the sample (passed to al_create_sample). You can use al_get_sample_data on the\n return value to retrieve and compare it.

    \n

    See also: al_set_sample

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    al_set_sample

    \n
    bool al_set_sample(ALLEGRO_SAMPLE_INSTANCE *spl, ALLEGRO_SAMPLE *data)
    \n

    Source\n Code

    \n

    Change the sample data that a sample instance plays. This can be\n quite an involved process.

    \n@@ -1647,23 +1378,14 @@\n Reattaching may not always succeed.

    \n

    On success, the sample remains stopped. The playback position and\n loop end points are reset to their default values. The loop mode remains\n unchanged.

    \n

    Returns true on success, false on failure. On failure, the sample\n will be stopped and detached from its parent.

    \n

    See also: al_get_sample

    \n-

    Examples:

    \n-
      \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    • ex_acodec.c
    • \n-
    \n al_set_sample_instance_channel_matrix\n
    bool al_set_sample_instance_channel_matrix(ALLEGRO_SAMPLE_INSTANCE *spl, const float *matrix)
    \n

    Source\n Code

    \n

    Set the matrix used to mix the channels coming from this instance\n@@ -1689,19 +1411,14 @@\n

    Returns true on success, false on failure (e.g.\u00a0if this is not\n attached to a mixer).

    \n

    Since: 5.2.3

    \n
    \n

    Unstable\n API: New API.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_acodec.c
    • \n-
    \n

    Audio streams

    \n

    ALLEGRO_AUDIO_STREAM

    \n
    typedef struct ALLEGRO_AUDIO_STREAM ALLEGRO_AUDIO_STREAM;
    \n

    Source\n Code

    \n

    An ALLEGRO_AUDIO_STREAM object is used to stream generated audio to\n@@ -1738,23 +1455,14 @@\n you\u2019re finished with supplying data to the stream.

    \n

    If the stream is created by al_load_audio_stream or al_play_audio_stream then it\n will also generate an ALLEGRO_EVENT_AUDIO_STREAM_FINISHED\n event if it reaches the end of the file and is not set to loop.

    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_stream_file.c
    • \n-
    • ex_resample_test.c
    • \n-
    \n

    al_create_audio_stream

    \n
    ALLEGRO_AUDIO_STREAM *al_create_audio_stream(size_t fragment_count,\n    unsigned int frag_samples, unsigned int freq, ALLEGRO_AUDIO_DEPTH depth,\n    ALLEGRO_CHANNEL_CONF chan_conf)
    \n

    Source\n Code

    \n@@ -1803,23 +1511,14 @@\n
    \n

    Note: Unlike many Allegro objects, audio streams are not\n implicitly destroyed when Allegro is shut down. You must destroy them\n manually with al_destroy_audio_stream\n before the audio system is shut down.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_resample_test.c
    • \n-
    • ex_synth.cpp
    • \n-
    \n

    al_load_audio_stream

    \n
    ALLEGRO_AUDIO_STREAM *al_load_audio_stream(const char *filename,\n    size_t buffer_count, unsigned int samples)
    \n

    Source\n Code

    \n

    Loads an audio file from disk as it is needed.

    \n@@ -1837,23 +1536,14 @@\n file formats by default. You must use the allegro_acodec addon, or\n register your own format handler.

    \n \n

    See also: al_load_audio_stream_f, al_register_audio_stream_loader,\n al_init_acodec_addon

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_mixer_pp.c
    • \n-
    • ex_stream_seek.c
    • \n-
    \n

    al_load_audio_stream_f

    \n
    ALLEGRO_AUDIO_STREAM *al_load_audio_stream_f(ALLEGRO_FILE* fp, const char *ident,\n    size_t buffer_count, unsigned int samples)
    \n

    Source\n Code

    \n

    Loads an audio file from \n

    Note: If the stream is still attached to a mixer or voice,\n al_detach_audio_stream\n is automatically called on it first.

    \n \n

    See also: al_drain_audio_stream.

    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_stream_file.c
    • \n-
    • ex_resample_test.c
    • \n-
    \n al_get_audio_stream_event_source\n
    ALLEGRO_EVENT_SOURCE *al_get_audio_stream_event_source(\n    ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Retrieve the associated event source.

    \n

    See al_get_audio_stream_fragment\n for a description of the ALLEGRO_EVENT_AUDIO_STREAM_FRAGMENT\n event that audio streams emit.

    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_stream_file.c
    • \n-
    • ex_resample_test.c
    • \n-
    \n

    al_drain_audio_stream

    \n
    void al_drain_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    You should call this to finalise an audio stream that you will no\n longer be feeding, to wait for all pending buffers to finish playing.\n The stream\u2019s playing state will change to false.

    \n

    See also: al_destroy_audio_stream

    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_resample_test.c
    • \n-
    • ex_record.c
    • \n-
    \n

    al_rewind_audio_stream

    \n
    bool al_rewind_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Set the streaming file playing position to the beginning. Returns\n true on success. Currently this can only be called on streams created\n with al_load_audio_stream,\n al_play_audio_stream, al_load_audio_stream_f or\n al_play_audio_stream_f.

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_seek.c
    • \n-
    \n al_get_audio_stream_frequency\n
    unsigned int al_get_audio_stream_frequency(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return the stream frequency (in Hz).

    \n@@ -1990,19 +1648,14 @@\n href=\"audio.html#allegro_audio_depth\">ALLEGRO_AUDIO_DEPTH.

    \n

    al_get_audio_stream_length

    \n
    unsigned int al_get_audio_stream_length(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return the stream length in samples.

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_seek.c
    • \n-
    \n

    al_get_audio_stream_speed

    \n
    float al_get_audio_stream_speed(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return the relative playback speed of the stream.

    \n

    See also:

    float al_get_audio_stream_gain(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return the playback gain of the stream.

    \n

    See also: al_set_audio_stream_gain.

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_set_audio_stream_gain

    \n
    bool al_set_audio_stream_gain(ALLEGRO_AUDIO_STREAM *stream, float val)
    \n

    Source\n Code

    \n

    Set the playback gain of the stream.

    \n

    Returns true on success, false on failure. Will fail if the audio\n stream is attached directly to a voice.

    \n

    See also: al_get_audio_stream_gain.

    \n-

    Examples:

    \n-
      \n-
    • ex_synth.cpp
    • \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_get_audio_stream_pan

    \n
    float al_get_audio_stream_pan(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Get the pan value of the stream.

    \n

    See also: \n

    Returns true on success, false on failure. Will fail if the audio\n stream is attached directly to a voice.

    \n

    See also: al_get_audio_stream_pan,\n ALLEGRO_AUDIO_PAN_NONE

    \n-

    Examples:

    \n-
      \n-
    • ex_synth.cpp
    • \n-
    \n

    al_get_audio_stream_playing

    \n
    bool al_get_audio_stream_playing(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return true if the stream is playing.

    \n

    See also: al_set_audio_stream_playing.

    \n-

    Examples:

    \n-
      \n-
    • ex_record.c
    • \n-
    • ex_stream_seek.c
    • \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_set_audio_stream_playing

    \n
    bool al_set_audio_stream_playing(ALLEGRO_AUDIO_STREAM *stream, bool val)
    \n

    Source\n Code

    \n

    Change whether the stream is playing.

    \n

    Returns true on success, false on failure.

    \n

    See also: al_get_audio_stream_playing

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_simple.c
    • \n-
    • ex_record.c
    • \n-
    • ex_stream_seek.c
    • \n-
    \n

    al_get_audio_stream_playmode

    \n
    ALLEGRO_PLAYMODE al_get_audio_stream_playmode(\n    const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return the playback mode of the stream.

    \n@@ -2130,23 +1748,14 @@\n href=\"https://github.com/liballeg/allegro5/blob/master/addons/audio/kcm_stream.c#L461\">Source\n Code

    \n

    Set the playback mode of the stream.

    \n

    Returns true on success, false on failure.

    \n

    See also: ALLEGRO_PLAYMODE,\n al_get_audio_stream_playmode.

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_mixer_pp.c
    • \n-
    • ex_stream_seek.c
    • \n-
    \n

    al_get_audio_stream_attached

    \n
    bool al_get_audio_stream_attached(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return whether the stream is attached to something.

    \n

    See also: Detach the stream from whatever it\u2019s attached to, if anything.

    \n

    See also: al_attach_audio_stream_to_mixer,\n al_attach_audio_stream_to_voice,\n al_get_audio_stream_attached.

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_chain.cpp
    • \n-
    \n al_get_audio_stream_played_samples\n
    uint64_t al_get_audio_stream_played_samples(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Get the number of samples consumed by the parent since the audio\n@@ -2214,43 +1818,25 @@\n href=\"audio.html#al_get_audio_stream_frequency\">al_get_audio_stream_frequency,\n al_get_audio_stream_channels,\n al_get_audio_stream_depth,\n al_get_audio_stream_length

    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_resample_test.c
    • \n-
    • ex_synth.cpp
    • \n-
    \n

    al_set_audio_stream_fragment

    \n
    bool al_set_audio_stream_fragment(ALLEGRO_AUDIO_STREAM *stream, void *val)
    \n

    Source\n Code

    \n

    This function needs to be called for every successful call of al_get_audio_stream_fragment\n to indicate that the buffer (pointed to by val) is filled\n with new data.

    \n

    See also: al_get_audio_stream_fragment

    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_resample_test.c
    • \n-
    • ex_synth.cpp
    • \n-
    \n al_get_audio_stream_fragments\n
    unsigned int al_get_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Returns the number of fragments this stream uses. This is the same\n@@ -2284,19 +1870,14 @@\n href=\"audio.html#al_load_audio_stream_f\">al_load_audio_stream_f or\n al_play_audio_stream_f.

    \n

    See also: al_get_audio_stream_position_secs,\n al_get_audio_stream_length_secs

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_seek.c
    • \n-
    \n al_get_audio_stream_position_secs\n
    double al_get_audio_stream_position_secs(ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return the position of the stream in seconds. Currently this can only\n@@ -2304,19 +1885,14 @@\n href=\"audio.html#al_load_audio_stream\">al_load_audio_stream, al_play_audio_stream, al_load_audio_stream_f or\n al_play_audio_stream_f.

    \n

    See also: al_get_audio_stream_length_secs

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_seek.c
    • \n-
    \n al_get_audio_stream_length_secs\n
    double al_get_audio_stream_length_secs(ALLEGRO_AUDIO_STREAM *stream)
    \n

    Source\n Code

    \n

    Return the length of the stream in seconds, if known. Otherwise\n@@ -2325,38 +1901,28 @@\n href=\"audio.html#al_load_audio_stream\">al_load_audio_stream, al_play_audio_stream, al_load_audio_stream_f or\n al_play_audio_stream_f.

    \n

    See also: al_get_audio_stream_position_secs

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_seek.c
    • \n-
    \n al_set_audio_stream_loop_secs\n
    bool al_set_audio_stream_loop_secs(ALLEGRO_AUDIO_STREAM *stream,\n    double start, double end)
    \n

    Source\n Code

    \n

    Sets the loop points for the stream in seconds. Currently this can\n only be called on streams created with al_load_audio_stream, al_play_audio_stream, al_load_audio_stream_f or\n al_play_audio_stream_f.

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_seek.c
    • \n-
    \n al_set_audio_stream_channel_matrix\n

    Source Code

    \n

    Like al_set_sample_instance_channel_matrix\n but for streams.

    \n

    Since: 5.2.3

    \n@@ -2566,21 +2132,14 @@\n Code

    \n

    An opaque datatype that represents a recording device.

    \n

    Since: 5.1.1

    \n
    \n

    Unstable\n API: The API may need a slight redesign.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_record_name.c
    • \n-
    • ex_record.c
    • \n-
    \n

    ALLEGRO_AUDIO_RECORDER_EVENT

    \n
    typedef struct ALLEGRO_AUDIO_RECORDER_EVENT ALLEGRO_AUDIO_RECORDER_EVENT;
    \n

    Source\n Code

    \n

    Structure that holds the audio recorder event data. Every event type\n@@ -2596,21 +2155,14 @@\n

    Since 5.1.1

    \n

    See also: al_get_audio_recorder_event

    \n
    \n

    Unstable\n API: The API may need a slight redesign.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_record_name.c
    • \n-
    • ex_record.c
    • \n-
    \n

    al_create_audio_recorder

    \n
    ALLEGRO_AUDIO_RECORDER *al_create_audio_recorder(size_t fragment_count,\n unsigned int samples, unsigned int frequency,\n ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
    \n

    Source\n@@ -2643,21 +2195,14 @@\n href=\"audio.html#al_start_audio_recorder\">al_start_audio_recorder.

    \n

    On failure, returns NULL.

    \n

    Since: 5.1.1

    \n
    \n

    Unstable\n API: The API may need a slight redesign.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_record_name.c
    • \n-
    • ex_record.c
    • \n-
    \n

    al_start_audio_recorder

    \n
    bool al_start_audio_recorder(ALLEGRO_AUDIO_RECORDER *r)
    \n

    Source\n Code

    \n

    Begin recording into the fragment buffer. Once a complete fragment\n@@ -2668,21 +2213,14 @@\n event will be triggered.

    \n

    Returns true if it was able to begin recording.

    \n

    Since: 5.1.1

    \n
    \n

    Unstable\n API: The API may need a slight redesign.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_record_name.c
    • \n-
    • ex_record.c
    • \n-
    \n

    al_stop_audio_recorder

    \n
    void al_stop_audio_recorder(ALLEGRO_AUDIO_RECORDER *r)
    \n

    Source\n Code

    \n

    Stop capturing audio data. Note that the audio recorder is still\n@@ -2721,42 +2259,28 @@\n

    Returns the event as an ALLEGRO_AUDIO_RECORDER_EVENT.

    \n

    Since: 5.1.1

    \n
    \n

    Unstable\n API: The API may need a slight redesign.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_record_name.c
    • \n-
    • ex_record.c
    • \n-
    \n al_get_audio_recorder_event_source\n
    ALLEGRO_EVENT_SOURCE *al_get_audio_recorder_event_source(ALLEGRO_AUDIO_RECORDER *r)
    \n

    Source\n Code

    \n

    Returns the event source for the recorder that generates the various\n recording events.

    \n

    Since: 5.1.1

    \n
    \n

    Unstable\n API: The API may need a slight redesign.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_record_name.c
    • \n-
    • ex_record.c
    • \n-
    \n

    al_destroy_audio_recorder

    \n
    void al_destroy_audio_recorder(ALLEGRO_AUDIO_RECORDER *r)
    \n

    Source\n Code

    \n

    Destroys the audio recorder and frees all resources associated with\n@@ -2764,98 +2288,62 @@\n

    You may receive events after the recorder has been destroyed. They\n must be ignored, as the fragment buffer will no longer be valid.

    \n

    Since: 5.1.1

    \n
    \n

    Unstable\n API: The API may need a slight redesign.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_record_name.c
    • \n-
    • ex_record.c
    • \n-
    \n

    Audio devices

    \n

    ALLEGRO_AUDIO_DEVICE

    \n
    typedef struct ALLEGRO_AUDIO_DEVICE ALLEGRO_AUDIO_DEVICE;
    \n

    Source\n Code

    \n

    An opaque datatype that represents an audio device.

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_devices.c
    • \n-
    \n al_get_num_audio_output_devices\n
    int al_get_num_audio_output_devices()
    \n

    Source\n Code

    \n

    Get the number of available audio output devices on the system.

    \n

    Since: 5.2.8

    \n

    return -1 for unsupported drivers.

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_devices.c
    • \n-
    \n

    al_get_audio_output_device

    \n
    const ALLEGRO_AUDIO_DEVICE* al_get_audio_output_device(int index)
    \n

    Source\n Code

    \n

    Get the output audio device of the specified index.

    \n

    Since: 5.2.8

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_devices.c
    • \n-
    \n

    al_get_audio_device_name

    \n
    const char* al_get_audio_device_name(const ALLEGRO_AUDIO_DEVICE * device)
    \n

    Source\n Code

    \n

    Get the user friendly display name of the device.

    \n

    Since: 5.2.8

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_devices.c
    • \n-
    \n

    Voices

    \n

    ALLEGRO_VOICE

    \n
    typedef struct ALLEGRO_VOICE ALLEGRO_VOICE;
    \n

    Source\n Code

    \n

    A voice represents an audio device on the system, which may be a real\n device, or an abstract device provided by the operating system. To play\n back audio, you would attach a mixer, sample instance or audio stream to\n a voice.

    \n

    See also: ALLEGRO_MIXER, ALLEGRO_SAMPLE, ALLEGRO_AUDIO_STREAM

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    \n

    al_create_voice

    \n
    ALLEGRO_VOICE *al_create_voice(unsigned int freq,\n ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
    \n

    Source\n Code

    \n@@ -2871,42 +2359,24 @@\n make sure to not rely on the parameters passed to this function, but\n instead query the returned voice for the actual settings.

    \n

    Reasonable default arguments are:

    \n
    al_create_voice(44100, ALLEGRO_AUDIO_DEPTH_INT16, ALLEGRO_CHANNEL_CONF_2)
    \n

    See also: al_destroy_voice

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    \n

    al_destroy_voice

    \n
    void al_destroy_voice(ALLEGRO_VOICE *voice)
    \n

    Source\n Code

    \n

    Destroys the voice and deallocates it from the digital driver. Does\n nothing if the voice is NULL.

    \n

    See also: al_create_voice

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    \n

    al_detach_voice

    \n
    void al_detach_voice(ALLEGRO_VOICE *voice)
    \n

    Source\n Code

    \n

    Detaches the mixer, sample instance or audio stream from the\n@@ -2934,42 +2404,26 @@\n The stream position, speed, gain and panning cannot be changed. At this\n time, we don\u2019t recommend attaching audio streams directly to voices. Use\n a mixer inbetween.

    \n

    Returns true on success, false on failure.

    \n

    See also: al_detach_voice,\n al_voice_has_attachments

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_attach_mixer_to_voice

    \n
    bool al_attach_mixer_to_voice(ALLEGRO_MIXER *mixer, ALLEGRO_VOICE *voice)
    \n

    Source\n Code

    \n

    Attaches a mixer to a voice. It must have the same frequency and\n channel configuration, but the depth may be different.

    \n

    Returns true on success, false on failure.

    \n

    See also: al_detach_voice,\n al_voice_has_attachments

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n al_attach_sample_instance_to_voice\n
    bool al_attach_sample_instance_to_voice(ALLEGRO_SAMPLE_INSTANCE *spl,\n ALLEGRO_VOICE *voice)
    \n

    Source\n@@ -2981,21 +2435,14 @@\n preloading sample data.

    \n

    At this time, we don\u2019t recommend attaching sample instances directly\n to voices. Use a mixer inbetween.

    \n

    Returns true on success, false on failure.

    \n

    See also: al_detach_voice,\n al_voice_has_attachments

    \n-

    Examples:

    \n-
      \n-
    • ex_kcm_direct.c
    • \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_get_voice_frequency

    \n
    unsigned int al_get_voice_frequency(const ALLEGRO_VOICE *voice)
    \n

    Source\n Code

    \n

    Return the frequency of the voice (in Hz), e.g.\u00a044100.

    \n@@ -3022,36 +2469,26 @@\n class=\"sourceCode c\">bool al_get_voice_playing(const ALLEGRO_VOICE *voice)\n

    Source\n Code

    \n

    Return true if the voice is currently playing.

    \n

    See also: al_set_voice_playing

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_set_voice_playing

    \n
    bool al_set_voice_playing(ALLEGRO_VOICE *voice, bool val)
    \n

    Source\n Code

    \n

    Change whether a voice is playing or not. This can only work if the\n voice has a non-streaming object attached to it, e.g.\u00a0a sample instance.\n On success the voice\u2019s current sample position is reset.

    \n

    Returns true on success, false on failure.

    \n

    See also: al_get_voice_playing

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_get_voice_position

    \n
    unsigned int al_get_voice_position(const ALLEGRO_VOICE *voice)
    \n

    Source\n Code

    \n

    When the voice has a non-streaming object attached to it, e.g.\u00a0a\n@@ -3097,23 +2534,14 @@\n accordingly. You can control the quality of this conversion using\n ALLEGRO_MIXER_QUALITY.

    \n

    When going from mono to stereo (and above), the mixer reduces the\n volume of both channels by sqrt(2). When going from stereo\n (and above) to mono, the mixer reduces the volume of the left and right\n channels by sqrt(2) before adding them to the center\n channel (if present).

    \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    ALLEGRO_MIXER_QUALITY

    \n
    enum ALLEGRO_MIXER_QUALITY
    \n

    Source\n Code

    \n
      \n@@ -3140,41 +2568,23 @@\n

      Reasonable default arguments are:

      \n
      al_create_mixer(44100, ALLEGRO_AUDIO_DEPTH_FLOAT32, ALLEGRO_CHANNEL_CONF_2)
      \n

      Returns true on success, false on error.

      \n

      See also: al_destroy_mixer,\n ALLEGRO_AUDIO_DEPTH, ALLEGRO_CHANNEL_CONF

      \n-

      Examples:

      \n-
        \n-
      • ex_stream_file.c
      • \n-
      • ex_acodec_multi.c
      • \n-
      • ex_mixer_chain.c
      • \n-
      \n

      al_destroy_mixer

      \n
      void al_destroy_mixer(ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Destroys the mixer.

      \n

      See also: al_create_mixer

      \n-

      Examples:

      \n-
        \n-
      • ex_stream_file.c
      • \n-
      • ex_acodec_multi.c
      • \n-
      • ex_mixer_chain.c
      • \n-
      \n

      al_get_default_mixer

      \n
      ALLEGRO_MIXER *al_get_default_mixer(void)
      \n

      Source\n Code

      \n

      Return the default mixer, or NULL if one has not been set. Although\n@@ -3182,23 +2592,14 @@\n a single mixer attached to a voice is what you want. The default mixer\n is used by al_play_sample.

      \n

      See also: al_reserve_samples, al_play_sample, al_set_default_mixer, al_restore_default_mixer

      \n-

      Examples:

      \n-
        \n-
      • ex_saw.c
      • \n-
      • ex_audio_props.cpp
      • \n-
      • ex_resample_test.c
      • \n-
      \n

      al_set_default_mixer

      \n
      bool al_set_default_mixer(ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Sets the default mixer. All samples started with \n

      Returns true on success, false on error.

      \n

      It is invalid to attach a mixer to itself.

      \n

      See also: al_detach_mixer.

      \n-

      Examples:

      \n-
        \n-
      • ex_mixer_chain.c
      • \n-
      • ex_audio_chain.cpp
      • \n-
      \n al_attach_sample_instance_to_mixer\n
      bool al_attach_sample_instance_to_mixer(ALLEGRO_SAMPLE_INSTANCE *spl,\n ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Attach a sample instance to a mixer. The instance must not already be\n attached to anything.

      \n

      Returns true on success, false on failure.

      \n

      See also: al_detach_sample_instance.

      \n-

      Examples:

      \n-
        \n-
      • ex_acodec_multi.c
      • \n-
      • ex_mixer_chain.c
      • \n-
      • ex_acodec.c
      • \n-
      \n al_attach_audio_stream_to_mixer\n
      bool al_attach_audio_stream_to_mixer(ALLEGRO_AUDIO_STREAM *stream, ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Attach an audio stream to a mixer. The stream must not already be\n attached to anything.

      \n

      Returns true on success, false on failure.

      \n

      See also: al_detach_audio_stream.

      \n-

      Examples:

      \n-
        \n-
      • ex_saw.c
      • \n-
      • ex_stream_file.c
      • \n-
      • ex_resample_test.c
      • \n-
      \n

      al_get_mixer_frequency

      \n
      unsigned int al_get_mixer_frequency(const ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Return the mixer frequency (in Hz).

      \n@@ -3345,66 +2721,44 @@\n class=\"sourceCode c\">ALLEGRO_CHANNEL_CONF al_get_mixer_channels(const ALLEGRO_MIXER *mixer)\n

      Source\n Code

      \n

      Return the mixer channel configuration.

      \n

      See also: ALLEGRO_CHANNEL_CONF.

      \n-

      Examples:

      \n-
        \n-
      • ex_synth.cpp
      • \n-
      \n

      al_get_mixer_depth

      \n
      ALLEGRO_AUDIO_DEPTH al_get_mixer_depth(const ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Return the mixer audio depth.

      \n

      See also: ALLEGRO_AUDIO_DEPTH.

      \n-

      Examples:

      \n-
        \n-
      • ex_synth.cpp
      • \n-
      \n

      al_get_mixer_gain

      \n
      float al_get_mixer_gain(const ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Return the mixer gain (amplification factor). The default is 1.0.

      \n

      Since: 5.0.6, 5.1.0

      \n

      See also: al_set_mixer_gain.

      \n-

      Examples:

      \n-
        \n-
      • ex_audio_chain.cpp
      • \n-
      \n

      al_set_mixer_gain

      \n
      bool al_set_mixer_gain(ALLEGRO_MIXER *mixer, float new_gain)
      \n

      Source\n Code

      \n

      Set the mixer gain (amplification factor).

      \n

      Returns true on success, false on failure.

      \n

      Since: 5.0.6, 5.1.0

      \n

      See also: al_get_mixer_gain

      \n-

      Examples:

      \n-
        \n-
      • ex_audio_props.cpp
      • \n-
      • ex_audio_chain.cpp
      • \n-
      \n

      al_get_mixer_quality

      \n
      ALLEGRO_MIXER_QUALITY al_get_mixer_quality(const ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Return the mixer quality.

      \n@@ -3428,34 +2782,24 @@\n class=\"sourceCode c\">bool al_get_mixer_playing(const ALLEGRO_MIXER *mixer)\n

      Source\n Code

      \n

      Return true if the mixer is playing.

      \n

      See also: al_set_mixer_playing.

      \n-

      Examples:

      \n-
        \n-
      • ex_audio_chain.cpp
      • \n-
      \n

      al_set_mixer_playing

      \n
      bool al_set_mixer_playing(ALLEGRO_MIXER *mixer, bool val)
      \n

      Source\n Code

      \n

      Change whether the mixer is playing.

      \n

      Returns true on success, false on failure.

      \n

      See also: al_get_mixer_playing.

      \n-

      Examples:

      \n-
        \n-
      • ex_audio_chain.cpp
      • \n-
      \n

      al_get_mixer_attached

      \n
      bool al_get_mixer_attached(const ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Return true if the mixer is attached to something.

      \n@@ -3489,19 +2833,14 @@\n class=\"sourceCode c\">bool al_detach_mixer(ALLEGRO_MIXER *mixer)\n

      Source\n Code

      \n

      Detach the mixer from whatever it is attached to, if anything.

      \n

      See also: al_attach_mixer_to_mixer.

      \n-

      Examples:

      \n-
        \n-
      • ex_audio_chain.cpp
      • \n-
      \n al_set_mixer_postprocess_callback\n
      bool al_set_mixer_postprocess_callback(ALLEGRO_MIXER *mixer,\n void (*pp_callback)(void *buf, unsigned int samples, void *data),\n void *pp_callback_userdata)
      \n

      \n

      \n

      Note: The callback is called from a dedicated audio\n thread.

      \n
      \n-

      Examples:

      \n-
        \n-
      • ex_resample_test.c
      • \n-
      • ex_synth.cpp
      • \n-
      • ex_mixer_pp.c
      • \n-
      \n

      Miscelaneous

      \n

      ALLEGRO_AUDIO_DEPTH

      \n
      enum ALLEGRO_AUDIO_DEPTH
      \n

      Source\n Code

      \n@@ -3543,23 +2873,14 @@\n
    \n

    For convenience:

    \n
      \n
    • ALLEGRO_AUDIO_DEPTH_UINT8
    • \n
    • ALLEGRO_AUDIO_DEPTH_UINT16
    • \n
    • ALLEGRO_AUDIO_DEPTH_UINT24
    • \n
    \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    \n

    ALLEGRO_AUDIO_PAN_NONE

    \n
    #define ALLEGRO_AUDIO_PAN_NONE (-1000.0f)
    \n

    Source\n Code

    \n

    A special value for the pan property of sample instances and audio\n@@ -3569,19 +2890,14 @@\n

    ALLEGRO_AUDIO_PAN_NONE is different from a pan value of 0.0\n (centered) because, when panning is enabled, we try to maintain a\n constant sound power level as a sample is panned from left to right. A\n sound coming out of one speaker should sound as loud as it does when\n split over two speakers. As a consequence, a sample with pan value 0.0\n will be 3 dB softer than the original level.

    \n

    (Please correct us if this is wrong.)

    \n-

    Examples:

    \n-
      \n-
    • ex_audio_props.cpp
    • \n-
    \n

    ALLEGRO_CHANNEL_CONF

    \n
    enum ALLEGRO_CHANNEL_CONF
    \n

    Source\n Code

    \n

    Speaker configuration (mono, stereo, 2.1, etc).

    \n@@ -3590,23 +2906,14 @@\n
  • ALLEGRO_CHANNEL_CONF_2
  • \n
  • ALLEGRO_CHANNEL_CONF_3
  • \n
  • ALLEGRO_CHANNEL_CONF_4
  • \n
  • ALLEGRO_CHANNEL_CONF_5_1
  • \n
  • ALLEGRO_CHANNEL_CONF_6_1
  • \n
  • ALLEGRO_CHANNEL_CONF_7_1
  • \n \n-

    Examples:

    \n-
      \n-
    • ex_saw.c
    • \n-
    • ex_stream_file.c
    • \n-
    • ex_acodec_multi.c
    • \n-
    \n

    ALLEGRO_PLAYMODE

    \n
    enum ALLEGRO_PLAYMODE
    \n

    Source\n Code

    \n

    Sample and stream playback mode.

    \n@@ -3620,23 +2927,14 @@\n respects the loop end point.\n
  • ALLEGRO_PLAYMODE_BIDIR - the sample is played from start to finish\n (or between the two loop points). When it reaches the end, it reverses\n the playback direction and plays until it reaches the beginning when it\n reverses the direction back to normal. This is mode is rarely supported\n for streams.
  • \n \n-

    Examples:

    \n-
      \n-
    • ex_stream_file.c
    • \n-
    • ex_kcm_direct.c
    • \n-
    • ex_mixer_chain.c
    • \n-
    \n

    ALLEGRO_AUDIO_EVENT_TYPE

    \n
    enum ALLEGRO_AUDIO_EVENT_TYPE
    \n

    Source\n Code

    \n

    Events sent by size_t al_get_audio_depth_size(ALLEGRO_AUDIO_DEPTH depth)\n

    Source\n Code

    \n

    Return the size of a sample, in bytes, for the given format. The\n format is one of the values listed under ALLEGRO_AUDIO_DEPTH.

    \n-

    Examples:

    \n-
      \n-
    • ex_synth.cpp
    • \n-
    \n

    al_get_channel_count

    \n
    size_t al_get_channel_count(ALLEGRO_CHANNEL_CONF conf)
    \n

    Source\n Code

    \n

    Return the number of channels for the given channel configuration,\n which is one of the values listed under ALLEGRO_CHANNEL_CONF.

    \n-

    Examples:

    \n-
      \n-
    • ex_acodec.c
    • \n-
    \n

    al_fill_silence

    \n
    void al_fill_silence(void *buf, unsigned int samples,\n ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
    \n

    Source\n Code

    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -232,38 +232,28 @@\n the basic API only supports one such audio stream playing at once.\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_S\bSA\bAM\bMP\bPL\bLE\bE_\b_I\bID\bD *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_SAMPLE_ID ALLEGRO_SAMPLE_ID;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An ALLEGRO_SAMPLE_ID represents a sample being played via _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be. It\n can be used to later stop the sample with _\ba_\bl_\b__\bs_\bt_\bo_\bp_\b__\bs_\ba_\bm_\bp_\bl_\be. The underlying\n ALLEGRO_SAMPLE_INSTANCE can be extracted using _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bd.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bns\bst\bta\bal\bll\bl_\b_a\bau\bud\bdi\bio\bo *\b**\b**\b**\b**\b*\n bool al_install_audio(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Install the audio subsystem.\n Returns true on success, false on failure.\n Note: most users will call _\ba_\bl_\b__\br_\be_\bs_\be_\br_\bv_\be_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs and\n _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\ba_\bd_\bd_\bo_\bn after this.\n See also: _\ba_\bl_\b__\br_\be_\bs_\be_\br_\bv_\be_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs, _\ba_\bl_\b__\bu_\bn_\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\ba_\bu_\bd_\bi_\bo, _\ba_\bl_\b__\bi_\bs_\b__\ba_\bu_\bd_\bi_\bo_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\be_\bd,\n _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\ba_\bd_\bd_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bd_\be_\bv_\bi_\bc_\be_\bs_\b._\bc\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bni\bin\bns\bst\bta\bal\bll\bl_\b_a\bau\bud\bdi\bio\bo *\b**\b**\b**\b**\b*\n void al_uninstall_audio(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Uninstalls the audio subsystem.\n See also: _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\ba_\bu_\bd_\bi_\bo\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_a\bau\bud\bdi\bio\bo_\b_i\bin\bns\bst\bta\bal\bll\ble\bed\bd *\b**\b**\b**\b**\b*\n bool al_is_audio_installed(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\ba_\bu_\bd_\bi_\bo was called previously and returned\n successfully.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bes\bse\ber\brv\bve\be_\b_s\bsa\bam\bmp\bpl\ble\bes\bs *\b**\b**\b**\b**\b*\n bool al_reserve_samples(int reserve_samples)\n@@ -280,18 +270,14 @@\n / sample instance 2\n default voice <-- default mixer <--- .\n \\ .\n sample instance N\n Returns true on success, false on error. _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\ba_\bu_\bd_\bi_\bo must have been called\n first.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt_\b__\bm_\bi_\bx_\be_\br, _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_p\bpl\bla\bay\by_\b_s\bsa\bam\bmp\bpl\ble\be *\b**\b**\b**\b**\b*\n bool al_play_sample(ALLEGRO_SAMPLE *spl, float gain, float pan, float speed,\n ALLEGRO_PLAYMODE loop, ALLEGRO_SAMPLE_ID *ret_id)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Plays a sample on one of the sample instances created by _\ba_\bl_\b__\br_\be_\bs_\be_\br_\bv_\be_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs.\n Returns true on success, false on failure. Playback may fail because all the\n reserved sample instances are currently used.\n@@ -304,34 +290,24 @@\n ALLEGRO_PLAYMODE_BIDIR\n * ret_id - if non-NULL the variable which this points to will be assigned\n an id representing the sample being played. If _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be returns\n false, then the contents of ret_id are invalid and must not be used as\n argument to other functions.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bs_\ba_\bm_\bp_\bl_\be, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bL_\bA_\bY_\bM_\bO_\bD_\bE, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bP_\bA_\bN_\b__\bN_\bO_\bN_\bE,\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE_\b__\bI_\bD, _\ba_\bl_\b__\bs_\bt_\bo_\bp_\b__\bs_\ba_\bm_\bp_\bl_\be, _\ba_\bl_\b__\bs_\bt_\bo_\bp_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bd.\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bst\bto\bop\bp_\b_s\bsa\bam\bmp\bpl\ble\be *\b**\b**\b**\b**\b*\n void al_stop_sample(ALLEGRO_SAMPLE_ID *spl_id)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Stop the sample started by _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be.\n See also: _\ba_\bl_\b__\bs_\bt_\bo_\bp_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bst\bto\bop\bp_\b_s\bsa\bam\bmp\bpl\ble\bes\bs *\b**\b**\b**\b**\b*\n void al_stop_samples(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Stop all samples started by _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be.\n See also: _\ba_\bl_\b__\bs_\bt_\bo_\bp_\b__\bs_\ba_\bm_\bp_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boc\bck\bk_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bid\bd *\b**\b**\b**\b**\b*\n ALLEGRO_SAMPLE_INSTANCE* al_lock_sample_id(ALLEGRO_SAMPLE_ID *spl_id)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Locks a _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE_\b__\bI_\bD, returning the underlying _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE_\b__\bI_\bN_\bS_\bT_\bA_\bN_\bC_\bE.\n This allows you to adjust the various properties of the instance (such as\n volume, pan, etc) while the sound is playing.\n This function will return NULL if the sound corresponding to the id is no\n@@ -339,28 +315,24 @@\n While locked, ALLEGRO_SAMPLE_ID will be unavailable to additional calls to\n _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be, even if the sound stops while locked. To put the\n ALLEGRO_SAMPLE_ID back into the pool for reuse, make sure to call\n al_unlock_sample_id when you\u2019re done with the instance.\n See also: _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be, _\ba_\bl_\b__\bu_\bn_\bl_\bo_\bc_\bk_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bd\n Since: 5.2.3\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: New API.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bnl\blo\boc\bck\bk_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bid\bd *\b**\b**\b**\b**\b*\n void al_unlock_sample_id(ALLEGRO_SAMPLE_ID *spl_id)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Unlocks a _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE_\b__\bI_\bD, allowing future calls to _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be to reuse\n it if possible. Note that after the id is unlocked, the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE_\b__\bI_\bN_\bS_\bT_\bA_\bN_\bC_\bE\n that was previously returned by _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bd will possibly be playing a\n different sound, so you should only use it after locking the id again.\n See also: _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bd\n Since: 5.2.3\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: New API.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_p\bpl\bla\bay\by_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_STREAM *al_play_audio_stream(const char *filename)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Loads and plays an audio file, streaming from disk as it is needed. This API\n can only play one audio stream at a time. This requires a default mixer to be\n set, which is typically done via _\ba_\bl_\b__\br_\be_\bs_\be_\br_\bv_\be_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs, but can also be done via\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt_\b__\bm_\bi_\bx_\be_\br.\n@@ -369,16 +341,14 @@\n down.\n N\bNo\bot\bte\be:\b: the allegro_audio library does not support any audio file\n formats by default. You must use the allegro_acodec addon, or\n register your own format handler.\n See also: _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm\n Since: 5.2.8\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: New API.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_p\bpl\bla\bay\by_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_f\bf *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_STREAM *al_play_audio_stream_f(ALLEGRO_FILE *fp, const char\n *ident)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Loads and plays an audio file from _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bF_\bI_\bL_\bE stream, streaming it is needed.\n This API can only play one audio stream at a time. This requires a default\n mixer to be set, which is typically done via _\ba_\bl_\b__\br_\be_\bs_\be_\br_\bv_\be_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs, but can also\n@@ -401,18 +371,14 @@\n typedef struct ALLEGRO_SAMPLE ALLEGRO_SAMPLE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An ALLEGRO_SAMPLE object stores the data necessary for playing pre-defined\n digital audio. It holds a user-specified PCM data buffer and information about\n its format (data length, depth, frequency, channel configuration). You can have\n the same ALLEGRO_SAMPLE playing multiple times simultaneously.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE_\b__\bI_\bN_\bS_\bT_\bA_\bN_\bC_\bE\n-Examples:\n- * _\be_\bx_\b__\bg_\bl_\be_\bx_\bt_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_s\bsa\bam\bmp\bpl\ble\be *\b**\b**\b**\b**\b*\n ALLEGRO_SAMPLE *al_create_sample(void *buf, unsigned int samples,\n unsigned int freq, ALLEGRO_AUDIO_DEPTH depth,\n ALLEGRO_CHANNEL_CONF chan_conf, bool free_buf)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a sample data structure from the supplied buffer. If free_buf is true\n then the buffer will be freed with _\ba_\bl_\b__\bf_\br_\be_\be when the sample data structure is\n@@ -426,34 +392,26 @@\n A single sample, then, refers to the LR pair in this example.\n To allocate a buffer of the correct size, you can use something like this:\n int sample_size = al_get_channel_count(chan_conf)\n * al_get_audio_depth_size(depth);\n int bytes = samples * sample_size;\n void *buffer = al_malloc(bytes);\n See also: _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bs_\ba_\bm_\bp_\bl_\be, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bD_\bE_\bP_\bT_\bH, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bH_\bA_\bN_\bN_\bE_\bL_\b__\bC_\bO_\bN_\bF\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_s\bsa\bam\bmp\bpl\ble\be *\b**\b**\b**\b**\b*\n ALLEGRO_SAMPLE *al_load_sample(const char *filename)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Loads a few different audio file formats based on their extension.\n Note that this stores the entire file in memory at once, which may be time\n consuming. To read the file as it is needed, use _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm or\n _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm.\n Returns the sample on success, NULL on failure.\n N\bNo\bot\bte\be:\b: the allegro_audio library does not support any audio file\n formats by default. You must use the allegro_acodec addon, or\n register your own format handler.\n See also: _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bl_\bo_\ba_\bd_\be_\br, _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\ba_\bd_\bd_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_s\bsa\bam\bmp\bpl\ble\be_\b_f\bf *\b**\b**\b**\b**\b*\n ALLEGRO_SAMPLE *al_load_sample_f(ALLEGRO_FILE* fp, const char *ident)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Loads an audio file from an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bF_\bI_\bL_\bE stream into an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE. The\n file type is determined by the passed \u2018ident\u2019 parameter, which is a file name\n extension including the leading dot.\n Note that this stores the entire file in memory at once, which may be time\n@@ -489,18 +447,14 @@\n void al_destroy_sample(ALLEGRO_SAMPLE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Free the sample data structure. If it was created with the free_buf parameter\n set to true, then the buffer will be freed with _\ba_\bl_\b__\bf_\br_\be_\be.\n This function will stop any sample instances which may be playing the buffer\n referenced by the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE.\n See also: _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be, _\ba_\bl_\b__\bs_\bt_\bo_\bp_\b__\bs_\ba_\bm_\bp_\bl_\be, _\ba_\bl_\b__\bs_\bt_\bo_\bp_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_c\bch\bha\ban\bnn\bne\bel\bls\bs *\b**\b**\b**\b**\b*\n ALLEGRO_CHANNEL_CONF al_get_sample_channels(const ALLEGRO_SAMPLE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the channel configuration of the sample.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bH_\bA_\bN_\bN_\bE_\bL_\b__\bC_\bO_\bN_\bF, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bd_\be_\bp_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bf_\br_\be_\bq_\bu_\be_\bn_\bc_\by,\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bl_\be_\bn_\bg_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bd_\ba_\bt_\ba\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_d\bde\bep\bpt\bth\bh *\b**\b**\b**\b**\b*\n@@ -523,16 +477,14 @@\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bd_\ba_\bt_\ba\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_d\bda\bat\bta\ba *\b**\b**\b**\b**\b*\n void *al_get_sample_data(const ALLEGRO_SAMPLE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return a pointer to the raw sample data.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bc_\bh_\ba_\bn_\bn_\be_\bl_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bd_\be_\bp_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bf_\br_\be_\bq_\bu_\be_\bn_\bc_\by,\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bl_\be_\bn_\bg_\bt_\bh\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bt_\bi_\bm_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAd\bdv\bva\ban\bnc\bce\bed\bd A\bAu\bud\bdi\bio\bo *\b**\b**\b**\b**\b**\b*\n For more fine-grained control over audio output, here\u2019s a short description of\n the basic concepts:\n Voices represent audio devices on the system. Basically, every audio output\n chain that you want to be heard needs to end up in a voice. As voices are on\n the hardware/driver side of things, there is only limited control over their\n parameters (frequency, sample format, channel configuration). The number of\n@@ -612,154 +564,108 @@\n instance is currently playing or paused is also one of its properties.\n An instance uses the data from an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE object. Multiple instances may\n be created from the same ALLEGRO_SAMPLE. An ALLEGRO_SAMPLE must not be\n destroyed while there are instances which reference it.\n To actually produce audio output, an ALLEGRO_SAMPLE_INSTANCE must be attached\n to an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bM_\bI_\bX_\bE_\bR which eventually reaches an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bO_\bI_\bC_\bE object.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be *\b**\b**\b**\b**\b*\n ALLEGRO_SAMPLE_INSTANCE *al_create_sample_instance(ALLEGRO_SAMPLE *sample_data)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates a sample instance, using the supplied sample data. The instance must be\n attached to a mixer (or voice) in order to actually produce output.\n The argument may be NULL. You can then set the sample data later with\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be.\n See also: _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be *\b**\b**\b**\b**\b*\n void al_destroy_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Detaches the sample instance from anything it may be attached to and frees it\n (the sample data, i.e.\u00a0its ALLEGRO_SAMPLE, is n\bno\bot\bt freed!).\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_p\bpl\bla\bay\by_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be *\b**\b**\b**\b**\b*\n bool al_play_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Play the sample instance. Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bs_\bt_\bo_\bp_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bst\bto\bop\bp_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be *\b**\b**\b**\b**\b*\n bool al_stop_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Stop an sample instance playing.\n See also: _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_c\bch\bha\ban\bnn\bne\bel\bls\bs *\b**\b**\b**\b**\b*\n ALLEGRO_CHANNEL_CONF al_get_sample_instance_channels(\n const ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the channel configuration of the sample instance\u2019s sample data.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bH_\bA_\bN_\bN_\bE_\bL_\b__\bC_\bO_\bN_\bF.\n-Examples:\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_d\bde\bep\bpt\bth\bh *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_DEPTH al_get_sample_instance_depth(const ALLEGRO_SAMPLE_INSTANCE\n *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the audio depth of the sample instance\u2019s sample data.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bD_\bE_\bP_\bT_\bH.\n-Examples:\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_f\bfr\bre\beq\bqu\bue\ben\bnc\bcy\by *\b**\b**\b**\b**\b*\n unsigned int al_get_sample_instance_frequency(const ALLEGRO_SAMPLE_INSTANCE\n *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the frequency (in Hz) of the sample instance\u2019s sample data.\n-Examples:\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_l\ble\ben\bng\bgt\bth\bh *\b**\b**\b**\b**\b*\n unsigned int al_get_sample_instance_length(const ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the length of the sample instance in sample values. This property may\n differ from the length of the instance\u2019s sample data.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bl_\be_\bn_\bg_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bt_\bi_\bm_\be\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_l\ble\ben\bng\bgt\bth\bh *\b**\b**\b**\b**\b*\n bool al_set_sample_instance_length(ALLEGRO_SAMPLE_INSTANCE *spl,\n unsigned int val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the length of the sample instance in sample values. This can be used to\n play only parts of the underlying sample. Be careful not to exceed the actual\n length of the sample data, though.\n Return true on success, false on failure. Will fail if the sample instance is\n currently playing.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bl_\be_\bn_\bg_\bt_\bh\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n unsigned int al_get_sample_instance_position(const ALLEGRO_SAMPLE_INSTANCE\n *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get the playback position of a sample instance.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n bool al_set_sample_instance_position(ALLEGRO_SAMPLE_INSTANCE *spl,\n unsigned int val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the playback position of a sample instance.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_s\bsp\bpe\bee\bed\bd *\b**\b**\b**\b**\b*\n float al_get_sample_instance_speed(const ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the relative playback speed of the sample instance.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bs_\bp_\be_\be_\bd\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_s\bsp\bpe\bee\bed\bd *\b**\b**\b**\b**\b*\n bool al_set_sample_instance_speed(ALLEGRO_SAMPLE_INSTANCE *spl, float val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the relative playback speed of the sample instance. 1.0 means normal speed.\n Return true on success, false on failure. Will fail if the sample instance is\n attached directly to a voice.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bs_\bp_\be_\be_\bd\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_g\bga\bai\bin\bn *\b**\b**\b**\b**\b*\n float al_get_sample_instance_gain(const ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the playback gain of the sample instance.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bg_\ba_\bi_\bn\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_g\bga\bai\bin\bn *\b**\b**\b**\b**\b*\n bool al_set_sample_instance_gain(ALLEGRO_SAMPLE_INSTANCE *spl, float val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the playback gain of the sample instance.\n Returns true on success, false on failure. Will fail if the sample instance is\n attached directly to a voice.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bg_\ba_\bi_\bn\n-Examples:\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_p\bpa\ban\bn *\b**\b**\b**\b**\b*\n float al_get_sample_instance_pan(const ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get the pan value of the sample instance.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bp_\ba_\bn.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_p\bpa\ban\bn *\b**\b**\b**\b**\b*\n bool al_set_sample_instance_pan(ALLEGRO_SAMPLE_INSTANCE *spl, float val)\n@@ -769,91 +675,69 @@\n speaker; 0.0 means the sample is centre balanced. A special value\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bP_\bA_\bN_\b__\bN_\bO_\bN_\bE disables panning and plays the sample at its original\n level. This will be louder than a pan value of 0.0.\n Note: panning samples with more than two channels doesn\u2019t work yet.\n Returns true on success, false on failure. Will fail if the sample instance is\n attached directly to a voice.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bp_\ba_\bn, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bP_\bA_\bN_\b__\bN_\bO_\bN_\bE\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_t\bti\bim\bme\be *\b**\b**\b**\b**\b*\n float al_get_sample_instance_time(const ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the length of the sample instance in seconds, assuming a playback speed\n of 1.0.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bl_\be_\bn_\bg_\bt_\bh\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_p\bpl\bla\bay\bym\bmo\bod\bde\be *\b**\b**\b**\b**\b*\n ALLEGRO_PLAYMODE al_get_sample_instance_playmode(const ALLEGRO_SAMPLE_INSTANCE\n *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the playback mode of the sample instance.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bL_\bA_\bY_\bM_\bO_\bD_\bE, _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bp_\bl_\ba_\by_\bm_\bo_\bd_\be\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_p\bpl\bla\bay\bym\bmo\bod\bde\be *\b**\b**\b**\b**\b*\n bool al_set_sample_instance_playmode(ALLEGRO_SAMPLE_INSTANCE *spl,\n ALLEGRO_PLAYMODE val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the playback mode of the sample instance.\n Returns true on success, false on failure.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bL_\bA_\bY_\bM_\bO_\bD_\bE, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bp_\bl_\ba_\by_\bm_\bo_\bd_\be\n-Examples:\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b*\n bool al_get_sample_instance_playing(const ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return true if the sample instance is in the playing state. This may be true\n even if the instance is not attached to anything.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bp_\bl_\ba_\by_\bi_\bn_\bg\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b*\n bool al_set_sample_instance_playing(ALLEGRO_SAMPLE_INSTANCE *spl, bool val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Change whether the sample instance is playing.\n The instance does not need to be attached to anything (since: 5.1.8).\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bp_\bl_\ba_\by_\bi_\bn_\bg\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_a\bat\btt\bta\bac\bch\bhe\bed\bd *\b**\b**\b**\b**\b*\n bool al_get_sample_instance_attached(const ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return whether the sample instance is attached to something.\n See also: _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br,\n _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bt_\bo_\b__\bv_\bo_\bi_\bc_\be, _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bet\bta\bac\bch\bh_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be *\b**\b**\b**\b**\b*\n bool al_detach_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Detach the sample instance from whatever it\u2019s attached to, if anything.\n Returns true on success.\n See also: _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br,\n _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bt_\bo_\b__\bv_\bo_\bi_\bc_\be, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\ba_\bt_\bt_\ba_\bc_\bh_\be_\bd\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be *\b**\b**\b**\b**\b*\n ALLEGRO_SAMPLE *al_get_sample(ALLEGRO_SAMPLE_INSTANCE *spl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the sample data that the sample instance plays.\n Note this returns a pointer to an internal structure, n\bno\bot\bt the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE\n that you may have passed to _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be. However, the sample buffer of the\n returned ALLEGRO_SAMPLE will be the same as the one that was used to create the\n sample (passed to _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bs_\ba_\bm_\bp_\bl_\be). You can use _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bd_\ba_\bt_\ba on the\n return value to retrieve and compare it.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be *\b**\b**\b**\b**\b*\n bool al_set_sample(ALLEGRO_SAMPLE_INSTANCE *spl, ALLEGRO_SAMPLE *data)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Change the sample data that a sample instance plays. This can be quite an\n involved process.\n First, the sample is stopped if it is not already.\n Next, if data is NULL, the sample is detached from its parent (if any).\n@@ -862,18 +746,14 @@\n the same frequency, depth and channel configuration. Reattaching may not always\n succeed.\n On success, the sample remains stopped. The playback position and loop end\n points are reset to their default values. The loop mode remains unchanged.\n Returns true on success, false on failure. On failure, the sample will be\n stopped and detached from its parent.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_c\bch\bha\ban\bnn\bne\bel\bl_\b_m\bma\bat\btr\bri\bix\bx *\b**\b**\b**\b**\b*\n bool al_set_sample_instance_channel_matrix(ALLEGRO_SAMPLE_INSTANCE *spl, const\n float *matrix)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the matrix used to mix the channels coming from this instance into the\n mixer it is attached to. Normally Allegro derives the values of this matrix\n from the gain and pan settings, as well as the channel configurations of this\n@@ -893,16 +773,14 @@\n };\n \n al_set_sample_instance_channel_matrix(instance, matrix);\n Returns true on success, false on failure (e.g.\u00a0if this is not attached to a\n mixer).\n Since: 5.2.3\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: New API.\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAu\bud\bdi\bio\bo s\bst\btr\bre\bea\bam\bms\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_A\bAU\bUD\bDI\bIO\bO_\b_S\bST\bTR\bRE\bEA\bAM\bM *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_AUDIO_STREAM ALLEGRO_AUDIO_STREAM;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An ALLEGRO_AUDIO_STREAM object is used to stream generated audio to the sound\n device, in real-time. This is done by reading from a buffer, which is split\n into a number of fragments. Whenever a fragment has finished playing, the user\n@@ -923,18 +801,14 @@\n _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm.\n If you\u2019re late with supplying new data, the stream will be silent until new\n data is provided. You must call _\ba_\bl_\b__\bd_\br_\ba_\bi_\bn_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm when you\u2019re finished with\n supplying data to the stream.\n If the stream is created by _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm or _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm then\n it will also generate an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bA_\bU_\bD_\bI_\bO_\b__\bS_\bT_\bR_\bE_\bA_\bM_\b__\bF_\bI_\bN_\bI_\bS_\bH_\bE_\bD event if it\n reaches the end of the file and is not set to loop.\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_STREAM *al_create_audio_stream(size_t fragment_count,\n unsigned int frag_samples, unsigned int freq, ALLEGRO_AUDIO_DEPTH depth,\n ALLEGRO_CHANNEL_CONF chan_conf)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bS_\bT_\bR_\bE_\bA_\bM. The stream will be set to play by default. It\n will feed audio data from a buffer, which is split into a number of fragments.\n@@ -967,18 +841,14 @@\n al_get_audio_depth_size(depth);\n samples = bytes_per_fragment / sample_size;\n The size of the complete buffer is:\n buffer_size = bytes_per_fragment * fragment_count\n N\bNo\bot\bte\be:\b: Unlike many Allegro objects, audio streams are not implicitly\n destroyed when Allegro is shut down. You must destroy them manually\n with _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm before the audio system is shut down.\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_STREAM *al_load_audio_stream(const char *filename,\n size_t buffer_count, unsigned int samples)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Loads an audio file from disk as it is needed.\n Unlike regular streams, the one returned by this function need not be fed by\n the user; the library will automatically read more of the file as it is needed.\n@@ -988,18 +858,14 @@\n details.\n Returns the stream on success, NULL on failure.\n N\bNo\bot\bte\be:\b: the allegro_audio library does not support any audio file\n formats by default. You must use the allegro_acodec addon, or\n register your own format handler.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf, _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bl_\bo_\ba_\bd_\be_\br,\n _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\ba_\bd_\bd_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bp_\bp_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_f\bf *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_STREAM *al_load_audio_stream_f(ALLEGRO_FILE* fp, const char\n *ident,\n size_t buffer_count, unsigned int samples)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Loads an audio file from _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bF_\bI_\bL_\bE stream as it is needed.\n Unlike regular streams, the one returned by this function need not be fed by\n@@ -1022,49 +888,35 @@\n void al_destroy_audio_stream(ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroy an audio stream which was created with _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm or\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm.\n N\bNo\bot\bte\be:\b: If the stream is still attached to a mixer or voice,\n _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm is automatically called on it first.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bi_\bn_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm.\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b*\n ALLEGRO_EVENT_SOURCE *al_get_audio_stream_event_source(\n ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Retrieve the associated event source.\n See _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\br_\ba_\bg_\bm_\be_\bn_\bt for a description of the\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bA_\bU_\bD_\bI_\bO_\b__\bS_\bT_\bR_\bE_\bA_\bM_\b__\bF_\bR_\bA_\bG_\bM_\bE_\bN_\bT event that audio streams emit.\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\bai\bin\bn_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm *\b**\b**\b**\b**\b*\n void al_drain_audio_stream(ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n You should call this to finalise an audio stream that you will no longer be\n feeding, to wait for all pending buffers to finish playing. The stream\u2019s\n playing state will change to false.\n See also: _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bew\bwi\bin\bnd\bd_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm *\b**\b**\b**\b**\b*\n bool al_rewind_audio_stream(ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the streaming file playing position to the beginning. Returns true on\n success. Currently this can only be called on streams created with\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm, _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf or\n _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf.\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_f\bfr\bre\beq\bqu\bue\ben\bnc\bcy\by *\b**\b**\b**\b**\b*\n unsigned int al_get_audio_stream_frequency(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the stream frequency (in Hz).\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_c\bch\bha\ban\bnn\bne\bel\bls\bs *\b**\b**\b**\b**\b*\n ALLEGRO_CHANNEL_CONF al_get_audio_stream_channels(\n const ALLEGRO_AUDIO_STREAM *stream)\n@@ -1077,16 +929,14 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the stream audio depth.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bD_\bE_\bP_\bT_\bH.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_l\ble\ben\bng\bgt\bth\bh *\b**\b**\b**\b**\b*\n unsigned int al_get_audio_stream_length(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the stream length in samples.\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_s\bsp\bpe\bee\bed\bd *\b**\b**\b**\b**\b*\n float al_get_audio_stream_speed(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the relative playback speed of the stream.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\bp_\be_\be_\bd.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_s\bsp\bpe\bee\bed\bd *\b**\b**\b**\b**\b*\n bool al_set_audio_stream_speed(ALLEGRO_AUDIO_STREAM *stream, float val)\n@@ -1096,26 +946,21 @@\n attached directly to a voice.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\bp_\be_\be_\bd.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_g\bga\bai\bin\bn *\b**\b**\b**\b**\b*\n float al_get_audio_stream_gain(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the playback gain of the stream.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bg_\ba_\bi_\bn.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_g\bga\bai\bin\bn *\b**\b**\b**\b**\b*\n bool al_set_audio_stream_gain(ALLEGRO_AUDIO_STREAM *stream, float val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the playback gain of the stream.\n Returns true on success, false on failure. Will fail if the audio stream is\n attached directly to a voice.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bg_\ba_\bi_\bn.\n-Examples:\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_p\bpa\ban\bn *\b**\b**\b**\b**\b*\n float al_get_audio_stream_pan(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get the pan value of the stream.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bp_\ba_\bn.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_p\bpa\ban\bn *\b**\b**\b**\b**\b*\n bool al_set_audio_stream_pan(ALLEGRO_AUDIO_STREAM *stream, float val)\n@@ -1124,66 +969,50 @@\n only through the left speaker; +1.0 means only through the right speaker; 0.0\n means the sample is centre balanced. A special value _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bP_\bA_\bN_\b__\bN_\bO_\bN_\bE\n disables panning and plays the stream at its original level. This will be\n louder than a pan value of 0.0.\n Returns true on success, false on failure. Will fail if the audio stream is\n attached directly to a voice.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bp_\ba_\bn, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bP_\bA_\bN_\b__\bN_\bO_\bN_\bE\n-Examples:\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b*\n bool al_get_audio_stream_playing(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return true if the stream is playing.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bp_\bl_\ba_\by_\bi_\bn_\bg.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b*\n bool al_set_audio_stream_playing(ALLEGRO_AUDIO_STREAM *stream, bool val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Change whether the stream is playing.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bp_\bl_\ba_\by_\bi_\bn_\bg\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bi_\bm_\bp_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_p\bpl\bla\bay\bym\bmo\bod\bde\be *\b**\b**\b**\b**\b*\n ALLEGRO_PLAYMODE al_get_audio_stream_playmode(\n const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the playback mode of the stream.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bL_\bA_\bY_\bM_\bO_\bD_\bE, _\ba_\bl_\b__\bs_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bp_\bl_\ba_\by_\bm_\bo_\bd_\be.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_p\bpl\bla\bay\bym\bmo\bod\bde\be *\b**\b**\b**\b**\b*\n bool al_set_audio_stream_playmode(ALLEGRO_AUDIO_STREAM *stream,\n ALLEGRO_PLAYMODE val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the playback mode of the stream.\n Returns true on success, false on failure.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bL_\bA_\bY_\bM_\bO_\bD_\bE, _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bp_\bl_\ba_\by_\bm_\bo_\bd_\be.\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bp_\bp_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_a\bat\btt\bta\bac\bch\bhe\bed\bd *\b**\b**\b**\b**\b*\n bool al_get_audio_stream_attached(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return whether the stream is attached to something.\n See also: _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br, _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bt_\bo_\b__\bv_\bo_\bi_\bc_\be,\n _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bet\bta\bac\bch\bh_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm *\b**\b**\b**\b**\b*\n bool al_detach_audio_stream(ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Detach the stream from whatever it\u2019s attached to, if anything.\n See also: _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br, _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bt_\bo_\b__\bv_\bo_\bi_\bc_\be,\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\ba_\bt_\bt_\ba_\bc_\bh_\be_\bd.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_p\bpl\bla\bay\bye\bed\bd_\b_s\bsa\bam\bmp\bpl\ble\bes\bs *\b**\b**\b**\b**\b*\n uint64_t al_get_audio_stream_played_samples(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get the number of samples consumed by the parent since the audio stream was\n started.\n Since: 5.1.8\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_f\bfr\bra\bag\bgm\bme\ben\bnt\bt *\b**\b**\b**\b**\b*\n@@ -1201,29 +1030,21 @@\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bA_\bU_\bD_\bI_\bO_\b__\bS_\bT_\bR_\bE_\bA_\bM_\b__\bF_\bR_\bA_\bG_\bM_\bE_\bN_\bT event will be generated whenever\n a new fragment is ready. However, getting an event is n\bno\bot\bt a guarantee\n that _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\br_\ba_\bg_\bm_\be_\bn_\bt will not return NULL, so you still\n must check for it.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\br_\ba_\bg_\bm_\be_\bn_\bt, _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be,\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\br_\be_\bq_\bu_\be_\bn_\bc_\by, _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bc_\bh_\ba_\bn_\bn_\be_\bl_\bs,\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bd_\be_\bp_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bl_\be_\bn_\bg_\bt_\bh\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_f\bfr\bra\bag\bgm\bme\ben\bnt\bt *\b**\b**\b**\b**\b*\n bool al_set_audio_stream_fragment(ALLEGRO_AUDIO_STREAM *stream, void *val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function needs to be called for every successful call of\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\br_\ba_\bg_\bm_\be_\bn_\bt to indicate that the buffer (pointed to by val) is\n filled with new data.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\br_\ba_\bg_\bm_\be_\bn_\bt\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_f\bfr\bra\bag\bgm\bme\ben\bnt\bts\bs *\b**\b**\b**\b**\b*\n unsigned int al_get_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the number of fragments this stream uses. This is the same value as\n passed to _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm when a new stream is created.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bv_\ba_\bi_\bl_\ba_\bb_\bl_\be_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\br_\ba_\bg_\bm_\be_\bn_\bt_\bs\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bav\bva\bai\bil\bla\bab\bbl\ble\be_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_f\bfr\bra\bag\bgm\bme\ben\bnt\bts\bs *\b**\b**\b**\b**\b*\n@@ -1236,43 +1057,35 @@\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bee\bek\bk_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_s\bse\bec\bcs\bs *\b**\b**\b**\b**\b*\n bool al_seek_audio_stream_secs(ALLEGRO_AUDIO_STREAM *stream, double time)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the streaming file playing position to time. Returns true on success.\n Currently this can only be called on streams created with _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm,\n _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf or _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\b__\bs_\be_\bc_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bl_\be_\bn_\bg_\bt_\bh_\b__\bs_\be_\bc_\bs\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn_\b_s\bse\bec\bcs\bs *\b**\b**\b**\b**\b*\n double al_get_audio_stream_position_secs(ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the position of the stream in seconds. Currently this can only be called\n on streams created with _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm, _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm,\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf or _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bl_\be_\bn_\bg_\bt_\bh_\b__\bs_\be_\bc_\bs\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_l\ble\ben\bng\bgt\bth\bh_\b_s\bse\bec\bcs\bs *\b**\b**\b**\b**\b*\n double al_get_audio_stream_length_secs(ALLEGRO_AUDIO_STREAM *stream)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the length of the stream in seconds, if known. Otherwise returns zero.\n Currently this can only be called on streams created with _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm,\n _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf or _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\b__\bs_\be_\bc_\bs\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_l\blo\boo\bop\bp_\b_s\bse\bec\bcs\bs *\b**\b**\b**\b**\b*\n bool al_set_audio_stream_loop_secs(ALLEGRO_AUDIO_STREAM *stream,\n double start, double end)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sets the loop points for the stream in seconds. Currently this can only be\n called on streams created with _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm, _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm,\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf or _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf.\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_c\bch\bha\ban\bnn\bne\bel\bl_\b_m\bma\bat\btr\bri\bix\bx *\b**\b**\b**\b**\b*\n Source Code\n Like _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bc_\bh_\ba_\bn_\bn_\be_\bl_\b__\bm_\ba_\bt_\br_\bi_\bx but for streams.\n Since: 5.2.3\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: New API.\n *\b**\b**\b**\b**\b**\b* A\bAd\bdv\bva\ban\bnc\bce\bed\bd a\bau\bud\bdi\bio\bo f\bfi\bil\ble\be I\bI/\b/O\bO *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\beg\bgi\bis\bst\bte\ber\br_\b_s\bsa\bam\bmp\bpl\ble\be_\b_l\blo\boa\bad\bde\ber\br *\b**\b**\b**\b**\b*\n@@ -1402,32 +1215,26 @@\n drivers. Enumerating or choosing other recording devices is not yet supported.\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_A\bAU\bUD\bDI\bIO\bO_\b_R\bRE\bEC\bCO\bOR\bRD\bDE\bER\bR *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_AUDIO_RECORDER ALLEGRO_AUDIO_RECORDER;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque datatype that represents a recording device.\n Since: 5.1.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: The API may need a slight redesign.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_A\bAU\bUD\bDI\bIO\bO_\b_R\bRE\bEC\bCO\bOR\bRD\bDE\bER\bR_\b_E\bEV\bVE\bEN\bNT\bT *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_AUDIO_RECORDER_EVENT ALLEGRO_AUDIO_RECORDER_EVENT;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Structure that holds the audio recorder event data. Every event type will\n contain:\n * .source: pointer to the audio recorder\n The following will be available depending on the event type:\n * .buffer: pointer to buffer containing the audio samples\n * .samples: number of samples (not bytes) that are available\n Since 5.1.1\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\br_\be_\bc_\bo_\br_\bd_\be_\br_\b__\be_\bv_\be_\bn_\bt\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: The API may need a slight redesign.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_a\bau\bud\bdi\bio\bo_\b_r\bre\bec\bco\bor\brd\bde\ber\br *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_RECORDER *al_create_audio_recorder(size_t fragment_count,\n unsigned int samples, unsigned int frequency,\n ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates an audio recorder using the system\u2019s default recording device. (So if\n the returned device does not work, try updating the system\u2019s default recording\n@@ -1450,29 +1257,23 @@\n * 44100 - CD quality music (if 16-bit, stereo)\n For maximum compatibility, use a depth of ALLEGRO_AUDIO_DEPTH_UINT8 or\n ALLEGRO_AUDIO_DEPTH_INT16, and a single (mono) channel.\n The recorder will not record until you start it with _\ba_\bl_\b__\bs_\bt_\ba_\br_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\br_\be_\bc_\bo_\br_\bd_\be_\br.\n On failure, returns NULL.\n Since: 5.1.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: The API may need a slight redesign.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bst\bta\bar\brt\bt_\b_a\bau\bud\bdi\bio\bo_\b_r\bre\bec\bco\bor\brd\bde\ber\br *\b**\b**\b**\b**\b*\n bool al_start_audio_recorder(ALLEGRO_AUDIO_RECORDER *r)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Begin recording into the fragment buffer. Once a complete fragment has been\n captured (as specified in _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\ba_\bu_\bd_\bi_\bo_\b__\br_\be_\bc_\bo_\br_\bd_\be_\br), an\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bA_\bU_\bD_\bI_\bO_\b__\bR_\bE_\bC_\bO_\bR_\bD_\bE_\bR_\b__\bF_\bR_\bA_\bG_\bM_\bE_\bN_\bT event will be triggered.\n Returns true if it was able to begin recording.\n Since: 5.1.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: The API may need a slight redesign.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bst\bto\bop\bp_\b_a\bau\bud\bdi\bio\bo_\b_r\bre\bec\bco\bor\brd\bde\ber\br *\b**\b**\b**\b**\b*\n void al_stop_audio_recorder(ALLEGRO_AUDIO_RECORDER *r)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Stop capturing audio data. Note that the audio recorder is still active and\n consuming resources, so if you are finished recording you should destroy it\n with _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\ba_\bu_\bd_\bi_\bo_\b__\br_\be_\bc_\bo_\br_\bd_\be_\br.\n You may still receive a few events after you call this function as the device\n@@ -1490,81 +1291,60 @@\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: The API may need a slight redesign.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_r\bre\bec\bco\bor\brd\bde\ber\br_\b_e\bev\bve\ben\bnt\bt *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_RECORDER_EVENT *al_get_audio_recorder_event(ALLEGRO_EVENT *event)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the event as an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bR_\bE_\bC_\bO_\bR_\bD_\bE_\bR_\b__\bE_\bV_\bE_\bN_\bT.\n Since: 5.1.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: The API may need a slight redesign.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_r\bre\bec\bco\bor\brd\bde\ber\br_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b*\n ALLEGRO_EVENT_SOURCE *al_get_audio_recorder_event_source(ALLEGRO_AUDIO_RECORDER\n *r)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the event source for the recorder that generates the various recording\n events.\n Since: 5.1.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: The API may need a slight redesign.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_a\bau\bud\bdi\bio\bo_\b_r\bre\bec\bco\bor\brd\bde\ber\br *\b**\b**\b**\b**\b*\n void al_destroy_audio_recorder(ALLEGRO_AUDIO_RECORDER *r)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroys the audio recorder and frees all resources associated with it. It is\n safe to destroy a recorder that is recording.\n You may receive events after the recorder has been destroyed. They must be\n ignored, as the fragment buffer will no longer be valid.\n Since: 5.1.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: The API may need a slight redesign.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAu\bud\bdi\bio\bo d\bde\bev\bvi\bic\bce\bes\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_A\bAU\bUD\bDI\bIO\bO_\b_D\bDE\bEV\bVI\bIC\bCE\bE *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_AUDIO_DEVICE ALLEGRO_AUDIO_DEVICE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque datatype that represents an audio device.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bd_\be_\bv_\bi_\bc_\be_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_n\bnu\bum\bm_\b_a\bau\bud\bdi\bio\bo_\b_o\bou\but\btp\bpu\but\bt_\b_d\bde\bev\bvi\bic\bce\bes\bs *\b**\b**\b**\b**\b*\n int al_get_num_audio_output_devices()\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get the number of available audio output devices on the system.\n Since: 5.2.8\n return -1 for unsupported drivers.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bd_\be_\bv_\bi_\bc_\be_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_o\bou\but\btp\bpu\but\bt_\b_d\bde\bev\bvi\bic\bce\be *\b**\b**\b**\b**\b*\n const ALLEGRO_AUDIO_DEVICE* al_get_audio_output_device(int index)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get the output audio device of the specified index.\n Since: 5.2.8\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bd_\be_\bv_\bi_\bc_\be_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_d\bde\bev\bvi\bic\bce\be_\b_n\bna\bam\bme\be *\b**\b**\b**\b**\b*\n const char* al_get_audio_device_name(const ALLEGRO_AUDIO_DEVICE * device)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get the user friendly display name of the device.\n Since: 5.2.8\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bd_\be_\bv_\bi_\bc_\be_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* V\bVo\boi\bic\bce\bes\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_V\bVO\bOI\bIC\bCE\bE *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_VOICE ALLEGRO_VOICE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A voice represents an audio device on the system, which may be a real device,\n or an abstract device provided by the operating system. To play back audio, you\n would attach a mixer, sample instance or audio stream to a voice.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bM_\bI_\bX_\bE_\bR, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bA_\bM_\bP_\bL_\bE, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bS_\bT_\bR_\bE_\bA_\bM\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_v\bvo\boi\bic\bce\be *\b**\b**\b**\b**\b*\n ALLEGRO_VOICE *al_create_voice(unsigned int freq,\n ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates a voice structure and allocates a voice from the digital sound driver.\n The passed frequency (in Hz), sample format and channel configuration are used\n as a hint to what kind of data will be sent to the voice. However, the\n@@ -1574,28 +1354,20 @@\n all its input streams to the voice format and care does not have to be taken\n for this. However if you access the voice directly, make sure to not rely on\n the parameters passed to this function, but instead query the returned voice\n for the actual settings.\n Reasonable default arguments are:\n al_create_voice(44100, ALLEGRO_AUDIO_DEPTH_INT16, ALLEGRO_CHANNEL_CONF_2)\n See also: _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bv_\bo_\bi_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_v\bvo\boi\bic\bce\be *\b**\b**\b**\b**\b*\n void al_destroy_voice(ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroys the voice and deallocates it from the digital driver. Does nothing if\n the voice is NULL.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bv_\bo_\bi_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bet\bta\bac\bch\bh_\b_v\bvo\boi\bic\bce\be *\b**\b**\b**\b**\b*\n void al_detach_voice(ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Detaches the mixer, sample instance or audio stream from the voice.\n See also: _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bm_\bi_\bx_\be_\br_\b__\bt_\bo_\b__\bv_\bo_\bi_\bc_\be, _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bt_\bo_\b__\bv_\bo_\bi_\bc_\be,\n _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bt_\bo_\b__\bv_\bo_\bi_\bc_\be\n *\b**\b**\b**\b**\b* a\bal\bl_\b_a\bat\btt\bta\bac\bch\bh_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_t\bto\bo_\b_v\bvo\boi\bic\bce\be *\b**\b**\b**\b**\b*\n@@ -1607,44 +1379,34 @@\n create a voice with the buffer count and buffer size the stream uses.\n An audio stream attached directly to a voice has a number of limitations: The\n audio stream plays immediately and cannot be stopped. The stream position,\n speed, gain and panning cannot be changed. At this time, we don\u2019t recommend\n attaching audio streams directly to voices. Use a mixer inbetween.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\bv_\bo_\bi_\bc_\be, _\ba_\bl_\b__\bv_\bo_\bi_\bc_\be_\b__\bh_\ba_\bs_\b__\ba_\bt_\bt_\ba_\bc_\bh_\bm_\be_\bn_\bt_\bs\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_a\bat\btt\bta\bac\bch\bh_\b_m\bmi\bix\bxe\ber\br_\b_t\bto\bo_\b_v\bvo\boi\bic\bce\be *\b**\b**\b**\b**\b*\n bool al_attach_mixer_to_voice(ALLEGRO_MIXER *mixer, ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Attaches a mixer to a voice. It must have the same frequency and channel\n configuration, but the depth may be different.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\bv_\bo_\bi_\bc_\be, _\ba_\bl_\b__\bv_\bo_\bi_\bc_\be_\b__\bh_\ba_\bs_\b__\ba_\bt_\bt_\ba_\bc_\bh_\bm_\be_\bn_\bt_\bs\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_a\bat\btt\bta\bac\bch\bh_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_t\bto\bo_\b_v\bvo\boi\bic\bce\be *\b**\b**\b**\b**\b*\n bool al_attach_sample_instance_to_voice(ALLEGRO_SAMPLE_INSTANCE *spl,\n ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Attaches a sample instance to a voice, and allows it to play. The instance\u2019s\n gain and loop mode will be ignored, and it must have the same frequency,\n channel configuration and depth (including signed-ness) as the voice. This\n function may fail if the selected driver doesn\u2019t support preloading sample\n data.\n At this time, we don\u2019t recommend attaching sample instances directly to voices.\n Use a mixer inbetween.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\bv_\bo_\bi_\bc_\be, _\ba_\bl_\b__\bv_\bo_\bi_\bc_\be_\b__\bh_\ba_\bs_\b__\ba_\bt_\bt_\ba_\bc_\bh_\bm_\be_\bn_\bt_\bs\n-Examples:\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvo\boi\bic\bce\be_\b_f\bfr\bre\beq\bqu\bue\ben\bnc\bcy\by *\b**\b**\b**\b**\b*\n unsigned int al_get_voice_frequency(const ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the frequency of the voice (in Hz), e.g.\u00a044100.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvo\boi\bic\bce\be_\b_c\bch\bha\ban\bnn\bne\bel\bls\bs *\b**\b**\b**\b**\b*\n ALLEGRO_CHANNEL_CONF al_get_voice_channels(const ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n@@ -1656,26 +1418,22 @@\n Return the audio depth of the voice.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bD_\bE_\bP_\bT_\bH.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvo\boi\bic\bce\be_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b*\n bool al_get_voice_playing(const ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return true if the voice is currently playing.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bv_\bo_\bi_\bc_\be_\b__\bp_\bl_\ba_\by_\bi_\bn_\bg\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_v\bvo\boi\bic\bce\be_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b*\n bool al_set_voice_playing(ALLEGRO_VOICE *voice, bool val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Change whether a voice is playing or not. This can only work if the voice has a\n non-streaming object attached to it, e.g.\u00a0a sample instance. On success the\n voice\u2019s current sample position is reset.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bv_\bo_\bi_\bc_\be_\b__\bp_\bl_\ba_\by_\bi_\bn_\bg\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvo\boi\bic\bce\be_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n unsigned int al_get_voice_position(const ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n When the voice has a non-streaming object attached to it, e.g.\u00a0a sample,\n returns the voice\u2019s current sample position. Otherwise, returns zero.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bv_\bo_\bi_\bc_\be_\b__\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_v\bvo\boi\bic\bce\be_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n@@ -1700,18 +1458,14 @@\n it converts channel configurations, sample frequencies and audio depths of the\n attached sample instances and audio streams accordingly. You can control the\n quality of this conversion using ALLEGRO_MIXER_QUALITY.\n When going from mono to stereo (and above), the mixer reduces the volume of\n both channels by sqrt(2). When going from stereo (and above) to mono, the mixer\n reduces the volume of the left and right channels by sqrt(2) before adding them\n to the center channel (if present).\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_M\bMI\bIX\bXE\bER\bR_\b_Q\bQU\bUA\bAL\bLI\bIT\bTY\bY *\b**\b**\b**\b**\b*\n enum ALLEGRO_MIXER_QUALITY\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n * ALLEGRO_MIXER_QUALITY_POINT - point sampling\n * ALLEGRO_MIXER_QUALITY_LINEAR - linear interpolation\n * ALLEGRO_MIXER_QUALITY_CUBIC - cubic interpolation (since: 5.0.8, 5.1.4)\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_m\bmi\bix\bxe\ber\br *\b**\b**\b**\b**\b*\n@@ -1724,40 +1478,28 @@\n ALLEGRO_AUDIO_DEPTH_INT16 (not yet complete).\n To actually produce any output, the mixer will have to be attached to a voice\n using _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bm_\bi_\bx_\be_\br_\b__\bt_\bo_\b__\bv_\bo_\bi_\bc_\be.\n Reasonable default arguments are:\n al_create_mixer(44100, ALLEGRO_AUDIO_DEPTH_FLOAT32, ALLEGRO_CHANNEL_CONF_2)\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bm_\bi_\bx_\be_\br, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bD_\bE_\bP_\bT_\bH, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bH_\bA_\bN_\bN_\bE_\bL_\b__\bC_\bO_\bN_\bF\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_m\bmi\bix\bxe\ber\br *\b**\b**\b**\b**\b*\n void al_destroy_mixer(ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroys the mixer.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\bi_\bx_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_d\bde\bef\bfa\bau\bul\blt\bt_\b_m\bmi\bix\bxe\ber\br *\b**\b**\b**\b**\b*\n ALLEGRO_MIXER *al_get_default_mixer(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the default mixer, or NULL if one has not been set. Although different\n configurations of mixers and voices can be used, in most cases a single mixer\n attached to a voice is what you want. The default mixer is used by\n _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be.\n See also: _\ba_\bl_\b__\br_\be_\bs_\be_\br_\bv_\be_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs, _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be, _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt_\b__\bm_\bi_\bx_\be_\br,\n _\ba_\bl_\b__\br_\be_\bs_\bt_\bo_\br_\be_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt_\b__\bm_\bi_\bx_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_d\bde\bef\bfa\bau\bul\blt\bt_\b_m\bmi\bix\bxe\ber\br *\b**\b**\b**\b**\b*\n bool al_set_default_mixer(ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sets the default mixer. All samples started with _\ba_\bl_\b__\bp_\bl_\ba_\by_\b__\bs_\ba_\bm_\bp_\bl_\be will be stopped\n and all sample instances returned by _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bd will be invalidated. If\n you are using your own mixer, this should be called before _\ba_\bl_\b__\br_\be_\bs_\be_\br_\bv_\be_\b__\bs_\ba_\bm_\bp_\bl_\be_\bs.\n Returns true on success, false on error.\n@@ -1793,41 +1535,30 @@\n Attaches the mixer passed as the first argument onto the mixer passed as the\n second argument. The first mixer (that is going to be attached) must not\n already be attached to anything. Both mixers must use the same frequency, audio\n depth and channel configuration.\n Returns true on success, false on error.\n It is invalid to attach a mixer to itself.\n See also: _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\bm_\bi_\bx_\be_\br.\n-Examples:\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_a\bat\btt\bta\bac\bch\bh_\b_s\bsa\bam\bmp\bpl\ble\be_\b_i\bin\bns\bst\bta\ban\bnc\bce\be_\b_t\bto\bo_\b_m\bmi\bix\bxe\ber\br *\b**\b**\b**\b**\b*\n bool al_attach_sample_instance_to_mixer(ALLEGRO_SAMPLE_INSTANCE *spl,\n ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Attach a sample instance to a mixer. The instance must not already be attached\n to anything.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be.\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_a\bat\btt\bta\bac\bch\bh_\b_a\bau\bud\bdi\bio\bo_\b_s\bst\btr\bre\bea\bam\bm_\b_t\bto\bo_\b_m\bmi\bix\bxe\ber\br *\b**\b**\b**\b**\b*\n bool al_attach_audio_stream_to_mixer(ALLEGRO_AUDIO_STREAM *stream,\n ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Attach an audio stream to a mixer. The stream must not already be attached to\n anything.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm.\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_f\bfr\bre\beq\bqu\bue\ben\bnc\bcy\by *\b**\b**\b**\b**\b*\n unsigned int al_get_mixer_frequency(const ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the mixer frequency (in Hz).\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bm_\bi_\bx_\be_\br_\b__\bf_\br_\be_\bq_\bu_\be_\bn_\bc_\by\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_f\bfr\bre\beq\bqu\bue\ben\bnc\bcy\by *\b**\b**\b**\b**\b*\n bool al_set_mixer_frequency(ALLEGRO_MIXER *mixer, unsigned int val)\n@@ -1837,41 +1568,32 @@\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bi_\bx_\be_\br_\b__\bf_\br_\be_\bq_\bu_\be_\bn_\bc_\by\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_c\bch\bha\ban\bnn\bne\bel\bls\bs *\b**\b**\b**\b**\b*\n ALLEGRO_CHANNEL_CONF al_get_mixer_channels(const ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the mixer channel configuration.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bH_\bA_\bN_\bN_\bE_\bL_\b__\bC_\bO_\bN_\bF.\n-Examples:\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_d\bde\bep\bpt\bth\bh *\b**\b**\b**\b**\b*\n ALLEGRO_AUDIO_DEPTH al_get_mixer_depth(const ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the mixer audio depth.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bD_\bE_\bP_\bT_\bH.\n-Examples:\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_g\bga\bai\bin\bn *\b**\b**\b**\b**\b*\n float al_get_mixer_gain(const ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the mixer gain (amplification factor). The default is 1.0.\n Since: 5.0.6, 5.1.0\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bm_\bi_\bx_\be_\br_\b__\bg_\ba_\bi_\bn.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_g\bga\bai\bin\bn *\b**\b**\b**\b**\b*\n bool al_set_mixer_gain(ALLEGRO_MIXER *mixer, float new_gain)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the mixer gain (amplification factor).\n Returns true on success, false on failure.\n Since: 5.0.6, 5.1.0\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bi_\bx_\be_\br_\b__\bg_\ba_\bi_\bn\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_q\bqu\bua\bal\bli\bit\bty\by *\b**\b**\b**\b**\b*\n ALLEGRO_MIXER_QUALITY al_get_mixer_quality(const ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the mixer quality.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bM_\bI_\bX_\bE_\bR_\b__\bQ_\bU_\bA_\bL_\bI_\bT_\bY, _\ba_\bl_\b__\bs_\be_\bt_\b__\bm_\bi_\bx_\be_\br_\b__\bq_\bu_\ba_\bl_\bi_\bt_\by\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_q\bqu\bua\bal\bli\bit\bty\by *\b**\b**\b**\b**\b*\n bool al_set_mixer_quality(ALLEGRO_MIXER *mixer, ALLEGRO_MIXER_QUALITY\n@@ -1882,24 +1604,20 @@\n Returns true on success, false on failure.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bM_\bI_\bX_\bE_\bR_\b__\bQ_\bU_\bA_\bL_\bI_\bT_\bY, _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bi_\bx_\be_\br_\b__\bq_\bu_\ba_\bl_\bi_\bt_\by\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b*\n bool al_get_mixer_playing(const ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return true if the mixer is playing.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bm_\bi_\bx_\be_\br_\b__\bp_\bl_\ba_\by_\bi_\bn_\bg.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b*\n bool al_set_mixer_playing(ALLEGRO_MIXER *mixer, bool val)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Change whether the mixer is playing.\n Returns true on success, false on failure.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bi_\bx_\be_\br_\b__\bp_\bl_\ba_\by_\bi_\bn_\bg.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_a\bat\btt\bta\bac\bch\bhe\bed\bd *\b**\b**\b**\b**\b*\n bool al_get_mixer_attached(const ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return true if the mixer is attached to something.\n See also: _\ba_\bl_\b__\bm_\bi_\bx_\be_\br_\b__\bh_\ba_\bs_\b__\ba_\bt_\bt_\ba_\bc_\bh_\bm_\be_\bn_\bt_\bs, _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\ba_\bm_\bp_\bl_\be_\b__\bi_\bn_\bs_\bt_\ba_\bn_\bc_\be_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br,\n _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br, _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bm_\bi_\bx_\be_\br_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br, _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\bm_\bi_\bx_\be_\br\n *\b**\b**\b**\b**\b* a\bal\bl_\b_m\bmi\bix\bxe\ber\br_\b_h\bha\bas\bs_\b_a\bat\btt\bta\bac\bch\bhm\bme\ben\bnt\bts\bs *\b**\b**\b**\b**\b*\n@@ -1910,29 +1628,23 @@\n _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br, _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bm_\bi_\bx_\be_\br_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br, _\ba_\bl_\b__\bd_\be_\bt_\ba_\bc_\bh_\b__\bm_\bi_\bx_\be_\br\n Since: 5.2.9\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bet\bta\bac\bch\bh_\b_m\bmi\bix\bxe\ber\br *\b**\b**\b**\b**\b*\n bool al_detach_mixer(ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Detach the mixer from whatever it is attached to, if anything.\n See also: _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bm_\bi_\bx_\be_\br_\b__\bt_\bo_\b__\bm_\bi_\bx_\be_\br.\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bmi\bix\bxe\ber\br_\b_p\bpo\bos\bst\btp\bpr\bro\boc\bce\bes\bss\bs_\b_c\bca\bal\bll\blb\bba\bac\bck\bk *\b**\b**\b**\b**\b*\n bool al_set_mixer_postprocess_callback(ALLEGRO_MIXER *mixer,\n void (*pp_callback)(void *buf, unsigned int samples, void *data),\n void *pp_callback_userdata)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sets a post-processing filter function that\u2019s called after the attached streams\n have been mixed. The buffer\u2019s format will be whatever the mixer was created\n with. The sample count and user-data pointer is also passed.\n N\bNo\bot\bte\be:\b: The callback is called from a dedicated audio thread.\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bp_\bp_\b._\bc\n *\b**\b**\b**\b**\b**\b* M\bMi\bis\bsc\bce\bel\bla\ban\bne\beo\bou\bus\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_A\bAU\bUD\bDI\bIO\bO_\b_D\bDE\bEP\bPT\bTH\bH *\b**\b**\b**\b**\b*\n enum ALLEGRO_AUDIO_DEPTH\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sample depth and type as well as signedness. Mixers only use 32-bit signed\n float (-1..+1), or 16-bit signed integers. Signedness is determined by an\n \u201cunsigned\u201d bit-flag applied to the depth value.\n@@ -1941,47 +1653,37 @@\n * ALLEGRO_AUDIO_DEPTH_INT24\n * ALLEGRO_AUDIO_DEPTH_FLOAT32\n * ALLEGRO_AUDIO_DEPTH_UNSIGNED\n For convenience:\n * ALLEGRO_AUDIO_DEPTH_UINT8\n * ALLEGRO_AUDIO_DEPTH_UINT16\n * ALLEGRO_AUDIO_DEPTH_UINT24\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_A\bAU\bUD\bDI\bIO\bO_\b_P\bPA\bAN\bN_\b_N\bNO\bON\bNE\bE *\b**\b**\b**\b**\b*\n #define ALLEGRO_AUDIO_PAN_NONE (-1000.0f)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A special value for the pan property of sample instances and audio streams. Use\n this value to disable panning on sample instances and audio streams, and play\n them without attentuation implied by panning support.\n ALLEGRO_AUDIO_PAN_NONE is different from a pan value of 0.0 (centered) because,\n when panning is enabled, we try to maintain a constant sound power level as a\n sample is panned from left to right. A sound coming out of one speaker should\n sound as loud as it does when split over two speakers. As a consequence, a\n sample with pan value 0.0 will be 3 dB softer than the original level.\n (Please correct us if this is wrong.)\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_C\bCH\bHA\bAN\bNN\bNE\bEL\bL_\b_C\bCO\bON\bNF\bF *\b**\b**\b**\b**\b*\n enum ALLEGRO_CHANNEL_CONF\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Speaker configuration (mono, stereo, 2.1, etc).\n * ALLEGRO_CHANNEL_CONF_1\n * ALLEGRO_CHANNEL_CONF_2\n * ALLEGRO_CHANNEL_CONF_3\n * ALLEGRO_CHANNEL_CONF_4\n * ALLEGRO_CHANNEL_CONF_5_1\n * ALLEGRO_CHANNEL_CONF_6_1\n * ALLEGRO_CHANNEL_CONF_7_1\n-Examples:\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_P\bPL\bLA\bAY\bYM\bMO\bOD\bDE\bE *\b**\b**\b**\b**\b*\n enum ALLEGRO_PLAYMODE\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sample and stream playback mode.\n * ALLEGRO_PLAYMODE_ONCE - the sample/stream is played from start to finish\n an then it stops.\n * ALLEGRO_PLAYMODE_LOOP - the sample/stream is played from start to finish\n@@ -1990,18 +1692,14 @@\n * ALLEGRO_PLAYMODE_LOOP_ONCE - just like ALLEGRO_PLAYMODE_ONCE, but\n respects the loop end point.\n * ALLEGRO_PLAYMODE_BIDIR - the sample is played from start to finish (or\n between the two loop points). When it reaches the end, it reverses the\n playback direction and plays until it reaches the beginning when it\n reverses the direction back to normal. This is mode is rarely supported\n for streams.\n-Examples:\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_A\bAU\bUD\bDI\bIO\bO_\b_E\bEV\bVE\bEN\bNT\bT_\b_T\bTY\bYP\bPE\bE *\b**\b**\b**\b**\b*\n enum ALLEGRO_AUDIO_EVENT_TYPE\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Events sent by _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be or\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bu_\bd_\bi_\bo_\b__\br_\be_\bc_\bo_\br_\bd_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be.\n *\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_E\bEV\bVE\bEN\bNT\bT_\b_A\bAU\bUD\bDI\bIO\bO_\b_S\bST\bTR\bRE\bEA\bAM\bM_\b_F\bFR\bRA\bAG\bGM\bME\bEN\bNT\bT *\b**\b**\b**\b*\n Sent when a stream fragment is ready to be filled in. See\n@@ -2021,23 +1719,19 @@\n Returns the (compiled) version of the addon, in the same format as\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bl_\bl_\be_\bg_\br_\bo_\b__\bv_\be_\br_\bs_\bi_\bo_\bn.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bau\bud\bdi\bio\bo_\b_d\bde\bep\bpt\bth\bh_\b_s\bsi\biz\bze\be *\b**\b**\b**\b**\b*\n size_t al_get_audio_depth_size(ALLEGRO_AUDIO_DEPTH depth)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the size of a sample, in bytes, for the given format. The format is one\n of the values listed under _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bA_\bU_\bD_\bI_\bO_\b__\bD_\bE_\bP_\bT_\bH.\n-Examples:\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_c\bch\bha\ban\bnn\bne\bel\bl_\b_c\bco\bou\bun\bnt\bt *\b**\b**\b**\b**\b*\n size_t al_get_channel_count(ALLEGRO_CHANNEL_CONF conf)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the number of channels for the given channel configuration, which is one\n of the values listed under _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bH_\bA_\bN_\bN_\bE_\bL_\b__\bC_\bO_\bN_\bF.\n-Examples:\n- * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_f\bfi\bil\bll\bl_\b_s\bsi\bil\ble\ben\bnc\bce\be *\b**\b**\b**\b**\b*\n void al_fill_silence(void *buf, unsigned int samples,\n ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Fill a buffer with silence, for the given format and channel configuration. The\n buffer must have enough space for the given number of samples, and be properly\n aligned.\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/color.html", "source2": "./usr/share/doc/allegro5-doc/refman/color.html", "unified_diff": "@@ -272,33 +272,23 @@\n href=\"https://github.com/liballeg/allegro5/blob/master/addons/color/color.c#L480\">Source\n Code

    \n

    Return an ALLEGRO_COLOR\n structure from CMYK values (cyan, magenta, yellow, black).

    \n

    See also: al_color_cmyk_to_rgb, al_color_rgb_to_cmyk

    \n-

    Examples:

    \n-
      \n-
    • ex_color.cpp
    • \n-
    \n

    al_color_cmyk_to_rgb

    \n
    void al_color_cmyk_to_rgb(float cyan, float magenta, float yellow,\n     float key, float *red, float *green, float *blue)
    \n

    Source\n Code

    \n

    Convert CMYK values to RGB values.

    \n

    See also: al_color_cmyk, al_color_rgb_to_cmyk

    \n-

    Examples:

    \n-
      \n-
    • ex_color.cpp
    • \n-
    \n

    al_color_hsl

    \n
    ALLEGRO_COLOR al_color_hsl(float h, float s, float l)
    \n

    Source\n Code

    \n

    Return an ALLEGRO_COLOR\n structure from HSL (hue, saturation, lightness) values.

    \n@@ -307,23 +297,14 @@\n
  • hue - Color hue angle in the range 0..360
  • \n
  • saturation - Color saturation in the range 0..1
  • \n
  • lightness - Color lightness in the range 0..1
  • \n \n

    See also: al_color_hsl_to_rgb, al_color_hsv

    \n-

    Examples:

    \n-
      \n-
    • ex_color.cpp
    • \n-
    • ex_clip.c
    • \n-
    • ex_palette.c
    • \n-
    \n

    al_color_hsl_to_rgb

    \n
    void al_color_hsl_to_rgb(float hue, float saturation, float lightness,\n    float *red, float *green, float *blue)
    \n

    Source\n Code

    \n

    Convert values in HSL color model to RGB color model.

    \n@@ -334,21 +315,14 @@\n
  • lightness - Color lightness in the range 0..1
  • \n
  • red, green, blue - returned RGB values in the range 0..1
  • \n \n

    See also: al_color_rgb_to_hsl, al_color_hsl, al_color_hsv_to_rgb

    \n-

    Examples:

    \n-
      \n-
    • ex_color.cpp
    • \n-
    • ex_palette.c
    • \n-
    \n

    al_color_hsv

    \n
    ALLEGRO_COLOR al_color_hsv(float h, float s, float v)
    \n

    Source\n Code

    \n

    Return an ALLEGRO_COLOR\n structure from HSV (hue, saturation, value) values.

    \n@@ -357,23 +331,14 @@\n
  • hue - Color hue angle in the range 0..360
  • \n
  • saturation - Color saturation in the range 0..1
  • \n
  • value - Color value in the range 0..1
  • \n \n

    See also: al_color_hsv_to_rgb, al_color_hsl

    \n-

    Examples:

    \n-
      \n-
    • ex_font_multiline.cpp
    • \n-
    • ex_color.cpp
    • \n-
    • ex_multisample.c
    • \n-
    \n

    al_color_hsv_to_rgb

    \n
    void al_color_hsv_to_rgb(float hue, float saturation, float value,\n    float *red, float *green, float *blue)
    \n

    Source\n Code

    \n

    Convert values in HSV color model to RGB color model.

    \n@@ -384,19 +349,14 @@\n
  • value - Color value in the range 0..1
  • \n
  • red, green, blue - returned RGB values in the range 0..1
  • \n \n

    See also: al_color_rgb_to_hsv, al_color_hsv, al_color_hsl_to_rgb

    \n-

    Examples:

    \n-
      \n-
    • ex_color.cpp
    • \n-
    \n

    al_color_html

    \n
    ALLEGRO_COLOR al_color_html(char const *string)
    \n

    Source\n Code

    \n

    Interprets an HTML-style hex number (e.g.\u00a0#00faff) as a color. The\n accepted format is the same as \n

    Example:

    \n
    char html[8];\n al_color_rgb_to_html(1, 0, 0, html);
    \n

    Now html will contain \u201c#ff0000\u201d.

    \n

    See also: al_color_html, al_color_html_to_rgb

    \n-

    Examples:

    \n-
      \n-
    • ex_color.cpp
    • \n-
    \n

    al_color_name

    \n
    ALLEGRO_COLOR al_color_name(char const *name)
    \n

    Source\n Code

    \n

    Return an ALLEGRO_COLOR\n with the given name. If the color is not found then black is\n returned.

    \n

    See al_color_name_to_rgb for the\n list of names.

    \n-

    Examples:

    \n-
      \n-
    • ex_drag_and_drop.c
    • \n-
    • ex_multisample_target.c
    • \n-
    • ex_clip.c
    • \n-
    \n

    al_color_name_to_rgb

    \n
    bool al_color_name_to_rgb(char const *name, float *r, float *g, float *b)
    \n

    Source\n Code

    \n

    Parameters:

    \n
      \n@@ -532,72 +478,48 @@\n M = 1 - G\n Y = 1 - B\n K = 0\n

      This function will instead find the representation with the maximal\n value for K and minimal color components.

      \n

      See also: al_color_cmyk, al_color_cmyk_to_rgb

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      \n

      al_color_rgb_to_hsl

      \n
      void al_color_rgb_to_hsl(float red, float green, float blue,\n    float *hue, float *saturation, float *lightness)
      \n

      Source\n Code

      \n

      Given an RGB triplet with components in the range 0..1, return the\n hue in degrees from 0..360 and saturation and lightness in the range\n 0..1.

      \n

      See also: al_color_hsl_to_rgb, al_color_hsl

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      • ex_palette.c
      • \n-
      \n

      al_color_rgb_to_hsv

      \n
      void al_color_rgb_to_hsv(float red, float green, float blue,\n    float *hue, float *saturation, float *value)
      \n

      Source\n Code

      \n

      Given an RGB triplet with components in the range 0..1, return the\n hue in degrees from 0..360 and saturation and value in the range\n 0..1.

      \n

      See also: al_color_hsv_to_rgb, al_color_hsv

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      • ex_color_gradient.c
      • \n-
      \n

      al_color_rgb_to_name

      \n
      char const *al_color_rgb_to_name(float r, float g, float b)
      \n

      Source\n Code

      \n

      Given an RGB triplet with components in the range 0..1, find a color\n name describing it approximately.

      \n

      See also: al_color_name_to_rgb, al_color_name

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      \n

      al_color_rgb_to_xyz

      \n
      void al_color_rgb_to_xyz(float red, float green, float blue,\n    float *x, float *y, float *z)
      \n

      Source\n Code

      \n

      Convert RGB values to XYZ color space.

      \n@@ -676,19 +598,14 @@\n

      Source\n Code

      \n

      Convert RGB values to L*a*b* color space.

      \n

      Since: 5.2.3

      \n

      See also: al_color_lab, al_color_lab_to_rgb

      \n-

      Examples:

      \n-
        \n-
      • ex_color_gradient.c
      • \n-
      \n

      al_color_lab

      \n
      ALLEGRO_COLOR al_color_lab(float l, float a, float b)
      \n

      Source\n Code

      \n

      Return an ALLEGRO_COLOR\n structure from CIE L*a*b* values. The L* component corresponds to\n@@ -707,51 +624,34 @@\n -100 to +100. In that case divide all components by 100 before passing\n them to this function.

      \n \n

      Since: 5.2.3

      \n

      See also: al_color_lab_to_rgb, al_color_rgb_to_lab

      \n-

      Examples:

      \n-
        \n-
      • ex_color2.c
      • \n-
      • ex_color_gradient.c
      • \n-
      \n

      al_color_lab_to_rgb

      \n
      void al_color_lab_to_rgb(float l, float a, float b,\n     float *red, float *green, float *blue)
      \n

      Source\n Code

      \n

      Convert CIE L*a*b* color values to RGB color space.

      \n

      Since: 5.2.3

      \n

      See also: al_color_lab, al_color_rgb_to_lab

      \n-

      Examples:

      \n-
        \n-
      • ex_color2.c
      • \n-
      \n

      al_color_rgb_to_lch

      \n
      void al_color_rgb_to_lch(float red, float green, float blue,\n    float *l, float *c, float *h)
      \n

      Source\n Code

      \n

      Convert RGB values to CIE LCH color space.

      \n

      Since: 5.2.3

      \n

      See also: al_color_lch, al_color_lch_to_rgb

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      \n

      al_color_lch

      \n
      ALLEGRO_COLOR al_color_lch(float l, float c, float h)
      \n

      Source\n Code

      \n

      Return an ALLEGRO_COLOR\n structure from CIE LCH values. LCH colors are very similar to HSL, with\n@@ -763,34 +663,24 @@\n this:

      \n
      C = sqrt(a * a + b * b)\n H = atan2(b, a)
      \n

      Since: 5.2.3

      \n

      See also: al_color_lch_to_rgb, al_color_rgb_to_lch

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      \n

      al_color_lch_to_rgb

      \n
      void al_color_lch_to_rgb(float l, float c, float h,\n     float *red, float *green, float *blue)
      \n

      Source\n Code

      \n

      Convert CIE LCH color values to RGB color space.

      \n

      Since: 5.2.3

      \n

      See also: al_color_lch, al_color_rgb_to_lch

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      \n

      al_color_distance_ciede2000

      \n
      double al_color_distance_ciede2000(ALLEGRO_COLOR color1,\n       ALLEGRO_COLOR color2) {
      \n

      Source\n Code

      \n

      This function computes the CIEDE2000 color difference between two RGB\n@@ -809,62 +699,42 @@\n

      \n

      Note: This function uses al_color_lab internally which defines\n the L component to be in the range 0..1 (and not 0..100 as is sometimes\n seen).

      \n
      \n

      Since: 5.2.3

      \n-

      Examples:

      \n-
        \n-
      • ex_color2.c
      • \n-
      \n

      al_color_rgb_to_yuv

      \n
      void al_color_rgb_to_yuv(float red, float green, float blue,\n    float *y, float *u, float *v)
      \n

      Source\n Code

      \n

      Convert RGB values to YUV color space.

      \n

      See also: al_color_yuv, al_color_yuv_to_rgb

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      \n

      al_color_yuv

      \n
      ALLEGRO_COLOR al_color_yuv(float y, float u, float v)
      \n

      Source\n Code

      \n

      Return an ALLEGRO_COLOR\n structure from YUV values.

      \n

      See also: al_color_yuv_to_rgb, al_color_rgb_to_yuv

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      \n

      al_color_yuv_to_rgb

      \n
      void al_color_yuv_to_rgb(float y, float u, float v,\n     float *red, float *green, float *blue)
      \n

      Source\n Code

      \n

      Convert YUV color values to RGB color space.

      \n

      See also: al_color_yuv, al_color_rgb_to_yuv

      \n-

      Examples:

      \n-
        \n-
      • ex_color.cpp
      • \n-
      \n

      al_get_allegro_color_version

      \n
      uint32_t al_get_allegro_color_version(void)
      \n

      Source\n Code

      \n

      Returns the (compiled) version of the addon, in the same format as al_get_allegro_version.

      \n@@ -881,19 +751,14 @@\n

      Source\n Code

      \n

      Convert RGB values to the Oklab color space.

      \n

      Since: 5.2.8

      \n

      See also: al_color_oklab, al_color_oklab_to_rgb

      \n-

      Examples:

      \n-
        \n-
      • ex_color_gradient.c
      • \n-
      \n

      al_color_oklab

      \n
      ALLEGRO_COLOR al_color_oklab(float l, float a, float b)
      \n

      Source\n Code

      \n

      Return an ALLEGRO_COLOR\n structure from Oklab values. The L component corresponds to luminance\n@@ -905,19 +770,14 @@\n 0..1 range. You can check for that case with al_is_color_valid.

      \n \n

      Since: 5.2.8

      \n

      See also: al_color_oklab_to_rgb, al_color_rgb_to_oklab

      \n-

      Examples:

      \n-
        \n-
      • ex_color_gradient.c
      • \n-
      \n

      al_color_oklab_to_rgb

      \n
      void al_color_oklab_to_rgb(float ol, float oa, float ob,\n     float *red, float *green, float *blue)
      \n

      Source\n Code

      \n

      Convert Oklab color values to RGB.

      \n@@ -932,19 +792,14 @@\n Code

      \n

      Convert gamma corrected sRGB values (i.e.\u00a0normal RGB) to linear sRGB\n space.

      \n

      Since: 5.2.8

      \n

      See also: al_color_linear,\n al_color_linear_to_rgb

      \n-

      Examples:

      \n-
        \n-
      • ex_color_gradient.c
      • \n-
      \n

      al_color_linear

      \n
      ALLEGRO_COLOR al_color_linear(float r, float g, float b)
      \n

      Source\n Code

      \n

      Return an ALLEGRO_COLOR\n structure from linear sRGB values. Allegro RGB values are assumed to be\n@@ -963,19 +818,14 @@\n

      ALLEGRO_COLOR gray = al_color_linear(0.216, 0.216, 0.216);\n char html[8];\n al_color_rgb_to_html(gray.r, gray.g, gray.b, html); // "#808080"
      \n

      Since: 5.2.8

      \n

      See also: al_color_linear_to_rgb, al_color_rgb_to_linear

      \n-

      Examples:

      \n-
        \n-
      • ex_color_gradient.c
      • \n-
      \n

      al_color_linear_to_rgb

      \n
      void al_color_linear_to_rgb(float r, float g, float b,\n     float *red, float *green, float *blue)
      \n

      Source\n Code

      \n

      Convert linear sRGB color values to gamma corrected (i.e.\u00a0normal) RGB\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -103,77 +103,60 @@\n output of the monitor will be less than half).\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_c\bcm\bmy\byk\bk *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_cmyk(float c, float m, float y, float k)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure from CMYK values (cyan, magenta, yellow,\n black).\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bc_\bm_\by_\bk_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bc_\bm_\by_\bk\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_c\bcm\bmy\byk\bk_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n void al_color_cmyk_to_rgb(float cyan, float magenta, float yellow,\n float key, float *red, float *green, float *blue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert CMYK values to RGB values.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bc_\bm_\by_\bk, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bc_\bm_\by_\bk\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_h\bhs\bsl\bl *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_hsl(float h, float s, float l)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure from HSL (hue, saturation, lightness) values.\n Parameters:\n * hue - Color hue angle in the range 0..360\n * saturation - Color saturation in the range 0..1\n * lightness - Color lightness in the range 0..1\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bl_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bv\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bc_\bl_\bi_\bp_\b._\bc\n- * _\be_\bx_\b__\bp_\ba_\bl_\be_\bt_\bt_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_h\bhs\bsl\bl_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n void al_color_hsl_to_rgb(float hue, float saturation, float lightness,\n float *red, float *green, float *blue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert values in HSL color model to RGB color model.\n Parameters:\n * hue - Color hue angle in the range 0..360\n * saturation - Color saturation in the range 0..1\n * lightness - Color lightness in the range 0..1\n * red, green, blue - returned RGB values in the range 0..1\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bh_\bs_\bl, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bl, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bv_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bp_\ba_\bl_\be_\bt_\bt_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_h\bhs\bsv\bv *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_hsv(float h, float s, float v)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure from HSV (hue, saturation, value) values.\n Parameters:\n * hue - Color hue angle in the range 0..360\n * saturation - Color saturation in the range 0..1\n * value - Color value in the range 0..1\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bv_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bl\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bs_\ba_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_h\bhs\bsv\bv_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n void al_color_hsv_to_rgb(float hue, float saturation, float value,\n float *red, float *green, float *blue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert values in HSV color model to RGB color model.\n Parameters:\n * hue - Color hue angle in the range 0..360\n * saturation - Color saturation in the range 0..1\n * value - Color value in the range 0..1\n * red, green, blue - returned RGB values in the range 0..1\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bh_\bs_\bv, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bv, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bl_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_h\bht\btm\bml\bl *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_html(char const *string)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Interprets an HTML-style hex number (e.g.\u00a0#00faff) as a color. The accepted\n format is the same as _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bt_\bm_\bl_\b__\bt_\bo_\b__\br_\bg_\bb.\n Returns the interpreted color, or al_map_rgba(0, 0, 0, 0) if the string could\n not be parsed.\n@@ -202,26 +185,20 @@\n * string - A pointer to a buffer of at least 8 bytes, into which the result\n will be written (including the NUL terminator).\n Example:\n char html[8];\n al_color_rgb_to_html(1, 0, 0, html);\n Now html will contain \u201c#ff0000\u201d.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bt_\bm_\bl, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bt_\bm_\bl_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_n\bna\bam\bme\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_name(char const *name)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR with the given name. If the color is not found then\n black is returned.\n See _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bn_\ba_\bm_\be_\b__\bt_\bo_\b__\br_\bg_\bb for the list of names.\n-Examples:\n- * _\be_\bx_\b__\bd_\br_\ba_\bg_\b__\ba_\bn_\bd_\b__\bd_\br_\bo_\bp_\b._\bc\n- * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\bc_\bl_\bi_\bp_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_n\bna\bam\bme\be_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n bool al_color_name_to_rgb(char const *name, float *r, float *g, float *b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Parameters:\n * name - The (lowercase) name of the color.\n * r, g, b - If one of the recognized color names below is passed, the\n corresponding RGB values in the range 0..1 are written.\n@@ -266,44 +243,34 @@\n C = 1 - R\n M = 1 - G\n Y = 1 - B\n K = 0\n This function will instead find the representation with the maximal value for K\n and minimal color components.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bc_\bm_\by_\bk, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bc_\bm_\by_\bk_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_h\bhs\bsl\bl *\b**\b**\b**\b**\b**\b*\n void al_color_rgb_to_hsl(float red, float green, float blue,\n float *hue, float *saturation, float *lightness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Given an RGB triplet with components in the range 0..1, return the hue in\n degrees from 0..360 and saturation and lightness in the range 0..1.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bl_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bl\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bp_\ba_\bl_\be_\bt_\bt_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_h\bhs\bsv\bv *\b**\b**\b**\b**\b**\b*\n void al_color_rgb_to_hsv(float red, float green, float blue,\n float *hue, float *saturation, float *value)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Given an RGB triplet with components in the range 0..1, return the hue in\n degrees from 0..360 and saturation and value in the range 0..1.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bv_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bh_\bs_\bv\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_n\bna\bam\bme\be *\b**\b**\b**\b**\b**\b*\n char const *al_color_rgb_to_name(float r, float g, float b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Given an RGB triplet with components in the range 0..1, find a color name\n describing it approximately.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bn_\ba_\bm_\be_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bn_\ba_\bm_\be\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_x\bxy\byz\bz *\b**\b**\b**\b**\b**\b*\n void al_color_rgb_to_xyz(float red, float green, float blue,\n float *x, float *y, float *z)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert RGB values to XYZ color space.\n Since: 5.2.3\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bx_\by_\bz, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bx_\by_\bz_\b__\bt_\bo_\b__\br_\bg_\bb\n@@ -354,16 +321,14 @@\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_l\bla\bab\bb *\b**\b**\b**\b**\b**\b*\n void al_color_rgb_to_lab(float red, float green, float blue,\n float *l, float *a, float *b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert RGB values to L*a*b* color space.\n Since: 5.2.3\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\ba_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\ba_\bb_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_l\bla\bab\bb *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_lab(float l, float a, float b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure from CIE L*a*b* values. The L* component\n corresponds to luminance from 0..1. The a* and b* components are in the range -\n 1..+1.\n N\bNo\bot\bte\be:\b:\n@@ -372,59 +337,48 @@\n 0..1 range. You can check for that case with _\ba_\bl_\b__\bi_\bs_\b__\bc_\bo_\bl_\bo_\br_\b__\bv_\ba_\bl_\bi_\bd.\n N\bNo\bot\bte\be:\b:\n In some literature the range of L* is 0 to 100 and a* and b* are from\n -100 to +100. In that case divide all components by 100 before\n passing them to this function.\n Since: 5.2.3\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\ba_\bb_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bl_\ba_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b2_\b._\bc\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_l\bla\bab\bb_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n void al_color_lab_to_rgb(float l, float a, float b,\n float *red, float *green, float *blue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert CIE L*a*b* color values to RGB color space.\n Since: 5.2.3\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\ba_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bl_\ba_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b2_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_l\blc\bch\bh *\b**\b**\b**\b**\b**\b*\n void al_color_rgb_to_lch(float red, float green, float blue,\n float *l, float *c, float *h)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert RGB values to CIE LCH color space.\n Since: 5.2.3\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\bc_\bh, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\bc_\bh_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_l\blc\bch\bh *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_lch(float l, float c, float h)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure from CIE LCH values. LCH colors are very\n similar to HSL, with the same meaning of L and H and C corresponding to S.\n However LCH is more visually uniform. Furthermore, this function expects the\n angle for H in radians and not in degree.\n The CIE LCH color space is a cylindrical representation of the L*a*b* color\n space. The L component is the same and C and H are computed like this:\n C = sqrt(a * a + b * b)\n H = atan2(b, a)\n Since: 5.2.3\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\bc_\bh_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bl_\bc_\bh\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_l\blc\bch\bh_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n void al_color_lch_to_rgb(float l, float c, float h,\n float *red, float *green, float *blue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert CIE LCH color values to RGB color space.\n Since: 5.2.3\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\bc_\bh, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bl_\bc_\bh\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_d\bdi\bis\bst\bta\ban\bnc\bce\be_\b_c\bci\bie\bed\bde\be2\b20\b00\b00\b0 *\b**\b**\b**\b**\b**\b*\n double al_color_distance_ciede2000(ALLEGRO_COLOR color1,\n ALLEGRO_COLOR color2) {\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function computes the CIEDE2000 color difference between two RGB colors.\n This is a visually uniform color difference, unlike for example the RGB\n distance.\n@@ -436,39 +390,31 @@\n The CIEDE2000 formula contains some additional transformations to fix that.\n The returned color distance is roughly in the range 0 (identical color) to 1\n (completely different color) - but values greater than one are possible.\n Note: This function uses _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\ba_\bb internally which defines the L\n component to be in the range 0..1 (and not 0..100 as is sometimes\n seen).\n Since: 5.2.3\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b2_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_y\byu\buv\bv *\b**\b**\b**\b**\b**\b*\n void al_color_rgb_to_yuv(float red, float green, float blue,\n float *y, float *u, float *v)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert RGB values to YUV color space.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\by_\bu_\bv, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\by_\bu_\bv_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_y\byu\buv\bv *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_yuv(float y, float u, float v)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure from YUV values.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\by_\bu_\bv_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\by_\bu_\bv\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_y\byu\buv\bv_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n void al_color_yuv_to_rgb(float y, float u, float v,\n float *red, float *green, float *blue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert YUV color values to RGB color space.\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\by_\bu_\bv, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\by_\bu_\bv\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bal\bll\ble\beg\bgr\bro\bo_\b_c\bco\bol\blo\bor\br_\b_v\bve\ber\brs\bsi\bio\bon\bn *\b**\b**\b**\b**\b**\b*\n uint32_t al_get_allegro_color_version(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the (compiled) version of the addon, in the same format as\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bl_\bl_\be_\bg_\br_\bo_\b__\bv_\be_\br_\bs_\bi_\bo_\bn.\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_c\bco\bol\blo\bor\br_\b_v\bva\bal\bli\bid\bd *\b**\b**\b**\b**\b**\b*\n Source Code\n@@ -480,46 +426,40 @@\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_o\bok\bkl\bla\bab\bb *\b**\b**\b**\b**\b**\b*\n void al_color_rgb_to_oklab(float red, float green, float blue,\n float *ol, float *oa, float *ob)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert RGB values to the Oklab color space.\n Since: 5.2.8\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bo_\bk_\bl_\ba_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bo_\bk_\bl_\ba_\bb_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_o\bok\bkl\bla\bab\bb *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_oklab(float l, float a, float b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure from Oklab values. The L component\n corresponds to luminance from 0..1. The a and b components are in the range -\n 1..+1.\n N\bNo\bot\bte\be:\b:\n The Oklab color space can represent more colors than are visible in\n sRGB and therefore conversion may result in RGB values outside of the\n 0..1 range. You can check for that case with _\ba_\bl_\b__\bi_\bs_\b__\bc_\bo_\bl_\bo_\br_\b__\bv_\ba_\bl_\bi_\bd.\n Since: 5.2.8\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bo_\bk_\bl_\ba_\bb_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bo_\bk_\bl_\ba_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_o\bok\bkl\bla\bab\bb_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n void al_color_oklab_to_rgb(float ol, float oa, float ob,\n float *red, float *green, float *blue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert Oklab color values to RGB.\n Since: 5.2.8\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bo_\bk_\bl_\ba_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bo_\bk_\bl_\ba_\bb\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_r\brg\bgb\bb_\b_t\bto\bo_\b_l\bli\bin\bne\bea\bar\br *\b**\b**\b**\b**\b**\b*\n void al_color_rgb_to_linear(float red, float green, float blue,\n float *r, float *g, float *b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert gamma corrected sRGB values (i.e.\u00a0normal RGB) to linear sRGB space.\n Since: 5.2.8\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\bi_\bn_\be_\ba_\br, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\bi_\bn_\be_\ba_\br_\b__\bt_\bo_\b__\br_\bg_\bb\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_l\bli\bin\bne\bea\bar\br *\b**\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_color_linear(float r, float g, float b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure from linear sRGB values. Allegro RGB values\n are assumed to be sRGB. The sRGB standard is in wide use by various display\n devices. It accounts for a standard gamma correction applied to RGB colors\n before they get displayed.\n@@ -532,16 +472,14 @@\n For some applications it may be useful to specify a color in linear sRGB\n components, in which case you can use this function. For example:\n ALLEGRO_COLOR gray = al_color_linear(0.216, 0.216, 0.216);\n char html[8];\n al_color_rgb_to_html(gray.r, gray.g, gray.b, html); // \"#808080\"\n Since: 5.2.8\n See also: _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\bl_\bi_\bn_\be_\ba_\br_\b__\bt_\bo_\b__\br_\bg_\bb, _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bl_\bi_\bn_\be_\ba_\br\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bol\blo\bor\br_\b_l\bli\bin\bne\bea\bar\br_\b_t\bto\bo_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b**\b*\n void al_color_linear_to_rgb(float r, float g, float b,\n float *red, float *green, float *blue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert linear sRGB color values to gamma corrected (i.e.\u00a0normal) RGB values.\n Since: 5.2.8\n See also: [al_color_linera], _\ba_\bl_\b__\bc_\bo_\bl_\bo_\br_\b__\br_\bg_\bb_\b__\bt_\bo_\b__\bl_\bi_\bn_\be_\ba_\br\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/config.html", "source2": "./usr/share/doc/allegro5-doc/refman/config.html", "unified_diff": "@@ -258,55 +258,36 @@\n al_destroy_config(cfg);\n

      ALLEGRO_CONFIG

      \n
      typedef struct ALLEGRO_CONFIG ALLEGRO_CONFIG;
      \n

      Source\n Code

      \n

      An abstract configuration structure.

      \n-

      Examples:

      \n-
        \n-
      • ex_config.c
      • \n-
      • ex_vsync.c
      • \n-
      • ex_stream_seek.c
      • \n-
      \n

      ALLEGRO_CONFIG_SECTION

      \n
      typedef struct ALLEGRO_CONFIG_SECTION ALLEGRO_CONFIG_SECTION;
      \n

      Source\n Code

      \n

      An opaque structure used for iterating across sections in a\n configuration structure.

      \n

      See also: al_get_first_config_section,\n al_get_next_config_section

      \n-

      Examples:

      \n-
        \n-
      • ex_config.c
      • \n-
      \n

      ALLEGRO_CONFIG_ENTRY

      \n
      typedef struct ALLEGRO_CONFIG_ENTRY ALLEGRO_CONFIG_ENTRY;
      \n

      Source\n Code

      \n

      An opaque structure used for iterating across entries in a\n configuration section.

      \n

      See also: al_get_first_config_entry,\n al_get_next_config_entry

      \n-

      Examples:

      \n-
        \n-
      • ex_config.c
      • \n-
      \n

      al_create_config

      \n
      ALLEGRO_CONFIG *al_create_config(void)
      \n

      Source\n Code

      \n

      Create an empty configuration structure.

      \n

      See also: al_create_config, al_load_config_file

      \n

      Examples:

      \n
        \n
      • ex_config.c
      • \n
      • ex_vsync.c
      • \n-
      • ex_stream_seek.c
      • \n+
      • ex_vsync.c
      • \n
      \n

      al_load_config_file

      \n
      ALLEGRO_CONFIG *al_load_config_file(const char *filename)
      \n

      Source\n Code

      \n

      Read a configuration file from disk. Returns NULL on error. The\n@@ -352,17 +333,17 @@\n href=\"config.html#al_load_config_file_f\">al_load_config_file_f, al_save_config_file

      \n

      Examples:

      \n
        \n
      • ex_config.c
      • \n
      • ex_vsync.c
      • \n-
      • ex_stream_seek.c
      • \n+
      • ex_vsync.c
      • \n
      \n

      al_load_config_file_f

      \n
      ALLEGRO_CONFIG *al_load_config_file_f(ALLEGRO_FILE *file)
      \n

      Source\n Code

      \n

      Read a configuration file from an already open file.

      \n@@ -448,17 +429,17 @@\n

      See also: al_set_config_value

      \n

      Examples:

      \n
        \n
      • ex_config.c
      • \n
      • ex_vsync.c
      • \n-
      • ex_stream_seek.c
      • \n+
      • ex_vsync.c
      • \n
      \n

      al_set_config_value

      \n
      void al_set_config_value(ALLEGRO_CONFIG *config,\n    const char *section, const char *key, const char *value)
      \n

      Source\n Code

      \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -103,34 +103,26 @@\n printf(\"%s\\n\", al_get_config_value(cfg, \"weapon 1\", \"damage\")); /* Prints: 503\n */\n al_destroy_config(cfg);\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_C\bCO\bON\bNF\bFI\bIG\bG *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_CONFIG ALLEGRO_CONFIG;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An abstract configuration structure.\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b._\bc\n- * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n- * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_C\bCO\bON\bNF\bFI\bIG\bG_\b_S\bSE\bEC\bCT\bTI\bIO\bON\bN *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_CONFIG_SECTION ALLEGRO_CONFIG_SECTION;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque structure used for iterating across sections in a configuration\n structure.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bi_\br_\bs_\bt_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\bs_\be_\bc_\bt_\bi_\bo_\bn, _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\be_\bx_\bt_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\bs_\be_\bc_\bt_\bi_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_C\bCO\bON\bNF\bFI\bIG\bG_\b_E\bEN\bNT\bTR\bRY\bY *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_CONFIG_ENTRY ALLEGRO_CONFIG_ENTRY;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque structure used for iterating across entries in a configuration\n section.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bi_\br_\bs_\bt_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\be_\bn_\bt_\br_\by, _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\be_\bx_\bt_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\be_\bn_\bt_\br_\by\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_c\bco\bon\bnf\bfi\big\bg *\b**\b**\b**\b**\b**\b*\n ALLEGRO_CONFIG *al_create_config(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create an empty configuration structure.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\bf_\bi_\bl_\be, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bc_\bo_\bn_\bf_\bi_\bg\n Examples:\n * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n@@ -140,26 +132,26 @@\n void al_destroy_config(ALLEGRO_CONFIG *config)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Free the resources used by a configuration structure. Does nothing if passed\n NULL.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bc_\bo_\bn_\bf_\bi_\bg, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\bf_\bi_\bl_\be\n Examples:\n * _\be_\bx_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b._\bc\n- * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n+ * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_c\bco\bon\bnf\bfi\big\bg_\b_f\bfi\bil\ble\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_CONFIG *al_load_config_file(const char *filename)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Read a configuration file from disk. Returns NULL on error. The configuration\n structure should be destroyed with _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bc_\bo_\bn_\bf_\bi_\bg.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\bf_\bi_\bl_\be_\b__\bf, _\ba_\bl_\b__\bs_\ba_\bv_\be_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\bf_\bi_\bl_\be\n Examples:\n * _\be_\bx_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b._\bc\n- * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n+ * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_c\bco\bon\bnf\bfi\big\bg_\b_f\bfi\bil\ble\be_\b_f\bf *\b**\b**\b**\b**\b**\b*\n ALLEGRO_CONFIG *al_load_config_file_f(ALLEGRO_FILE *file)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Read a configuration file from an already open file.\n Returns NULL on error. The configuration structure should be destroyed with\n _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bc_\bo_\bn_\bf_\bi_\bg. The file remains open afterwards.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\bf_\bi_\bl_\be\n@@ -209,16 +201,16 @@\n Gets a pointer to an internal character buffer that will only remain valid as\n long as the ALLEGRO_CONFIG structure is not destroyed. Copy the value if you\n need a copy. The section can be NULL or \u201c\u201d for the global section. Returns NULL\n if the section or key do not exist.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b__\bv_\ba_\bl_\bu_\be\n Examples:\n * _\be_\bx_\b__\bc_\bo_\bn_\bf_\bi_\bg_\b._\bc\n- * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bs_\be_\be_\bk_\b._\bc\n+ * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_c\bco\bon\bnf\bfi\big\bg_\b_v\bva\bal\blu\bue\be *\b**\b**\b**\b**\b**\b*\n void al_set_config_value(ALLEGRO_CONFIG *config,\n const char *section, const char *key, const char *value)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set a value in a section of a configuration. If the section doesn\u2019t yet exist,\n it will be created. If a value already existed for the given key, it will be\n overwritten. The section can be NULL or \u201c\u201d for the global section.\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/direct3d.html", "source2": "./usr/share/doc/allegro5-doc/refman/direct3d.html", "unified_diff": "@@ -201,19 +201,14 @@\n
      LPDIRECT3DDEVICE9 al_get_d3d_device(ALLEGRO_DISPLAY *display)
      \n

      Source\n Code

      \n

      Returns the Direct3D device of the display. The return value is\n undefined if the display was not created with the Direct3D flag.

      \n

      Returns: A pointer to the Direct3D device.

      \n-

      Examples:

      \n-
        \n-
      • ex_d3d.cpp
      • \n-
      \n

      al_get_d3d_system_texture

      \n
      LPDIRECT3DTEXTURE9 al_get_d3d_system_texture(ALLEGRO_BITMAP *bitmap)
      \n

      Source\n Code

      \n

      Returns the system texture (stored with the D3DPOOL_SYSTEMMEM flags).\n This texture is used for the render-to-texture feature set.

      \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -57,16 +57,14 @@\n #include \n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_d\bd3\b3d\bd_\b_d\bde\bev\bvi\bic\bce\be *\b**\b**\b**\b**\b**\b*\n LPDIRECT3DDEVICE9 al_get_d3d_device(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the Direct3D device of the display. The return value is undefined if\n the display was not created with the Direct3D flag.\n R\bRe\bet\btu\bur\brn\bns\bs:\b: A pointer to the Direct3D device.\n-Examples:\n- * _\be_\bx_\b__\bd_\b3_\bd_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_d\bd3\b3d\bd_\b_s\bsy\bys\bst\bte\bem\bm_\b_t\bte\bex\bxt\btu\bur\bre\be *\b**\b**\b**\b**\b**\b*\n LPDIRECT3DTEXTURE9 al_get_d3d_system_texture(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the system texture (stored with the D3DPOOL_SYSTEMMEM flags). This\n texture is used for the render-to-texture feature set.\n R\bRe\bet\btu\bur\brn\bns\bs:\b: A pointer to the Direct3D system texture.\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_d\bd3\b3d\bd_\b_v\bvi\bid\bde\beo\bo_\b_t\bte\bex\bxt\btu\bur\bre\be *\b**\b**\b**\b**\b**\b*\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/display.html", "source2": "./usr/share/doc/allegro5-doc/refman/display.html", "unified_diff": "@@ -339,23 +339,14 @@\n

      Display creation

      \n

      ALLEGRO_DISPLAY

      \n
      typedef struct ALLEGRO_DISPLAY ALLEGRO_DISPLAY;
      \n

      Source\n Code

      \n

      An opaque type representing an open display or window.

      \n-

      Examples:

      \n-
        \n-
      • ex_monitorinfo.c
      • \n-
      • ex_d3d.cpp
      • \n-
      • ex_keyboard_focus.c
      • \n-
      \n

      al_create_display

      \n
      ALLEGRO_DISPLAY *al_create_display(int w, int h)
      \n

      Source\n Code

      \n

      Create a display, or window, with the specified dimensions. The\n parameters of the display are determined by the last calls to\n@@ -378,19 +369,19 @@\n al_set_new_window_title\n al_set_window_position

      \n

      Examples:

      \n
        \n
      • ex_audio_props.cpp
      • \n+
      • ex_d3d.cpp
      • \n
      • ex_keyboard_focus.c
      • \n-
      • ex_mouse_focus.c
      • \n
      \n

      al_destroy_display

      \n
      void al_destroy_display(ALLEGRO_DISPLAY *display)
      \n

      Source\n Code

      \n

      Destroy a display.

      \n@@ -570,19 +561,19 @@\n href=\"display.html#al_set_new_display_option\">al_set_new_display_option,\n al_get_display_option,\n al_set_display_option

      \n

      Examples:

      \n
        \n
      • ex_d3d.cpp
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_props.cpp#L176\">ex_audio_props.cpp\n
      • ex_opengl.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_d3d.cpp#L35\">ex_d3d.cpp\n
      • ex_opengl_pixel_shader.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_color.cpp#L201\">ex_color.cpp\n
      \n

      al_get_new_display_option

      \n
      int al_get_new_display_option(int option, int *importance)
      \n

      Source\n Code

      \n

      Retrieve an extra display setting which was previously set with Examples:

      \n
        \n
      • ex_d3d.cpp
      • \n
      • ex_glext.c
      • \n
      • ex_expose.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_font.c#L70\">ex_font.c\n
      \n

      al_reset_new_display_options

      \n
      void al_reset_new_display_options(void)
      \n

      Source\n Code

      \n

      This undoes any previous call to documentation on\n events for a list of the events displays will generate.

      \n

      Examples:

      \n
        \n
      • ex_keyboard_events.c
      • \n
      • ex_opengl.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_disable_screensaver.c#L46\">ex_disable_screensaver.c\n
      • ex_touch_input.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_opengl.c#L146\">ex_opengl.c\n
      \n

      al_get_backbuffer

      \n
      ALLEGRO_BITMAP *al_get_backbuffer(ALLEGRO_DISPLAY *display)
      \n

      Source\n Code

      \n

      Return a special bitmap representing the back-buffer of the\n@@ -940,19 +931,19 @@\n

      See also: al_set_new_display_flags,\n al_set_new_display_option

      \n

      Examples:

      \n
        \n
      • ex_audio_props.cpp
      • \n+
      • ex_d3d.cpp
      • \n
      • ex_keyboard_focus.c
      • \n-
      • ex_mouse_focus.c
      • \n
      \n

      al_update_display_region

      \n
      void al_update_display_region(int x, int y, int width, int height)
      \n

      Source\n Code

      \n

      Does the same as See also: al_get_display_height

      \n

      Examples:

      \n
        \n
      • ex_font_justify.cpp
      • \n
      • ex_bitmap.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_font_multiline.cpp#L65\">ex_font_multiline.cpp\n
      • ex_ogre3d.cpp
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_window_maximized.c#L100\">ex_window_maximized.c\n
      \n

      al_get_display_height

      \n
      int al_get_display_height(ALLEGRO_DISPLAY *display)
      \n

      Source\n Code

      \n

      Gets the height of the display. This is like SCREEN_H in Allegro\n 4.x.

      \n

      See also: al_get_display_width

      \n

      Examples:

      \n
        \n
      • ex_ogre3d.cpp
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_window_maximized.c#L101\">ex_window_maximized.c\n
      • ex_fs_resize.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/nihgui.cpp#L168\">nihgui.cpp\n
      • ex_window_maximized.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_chain.cpp#L985\">ex_audio_chain.cpp\n
      \n

      al_resize_display

      \n
      bool al_resize_display(ALLEGRO_DISPLAY *display, int width, int height)
      \n

      Source\n Code

      \n

      Resize the display. Returns true on success, or false on error. This\n@@ -1062,34 +1053,34 @@\n href=\"display.html#al_resize_display\">al_resize_display, ALLEGRO_EVENT

      \n

      Examples:

      \n
        \n
      • ex_touch_input.c
      • \n
      • ex_multiwin.c
      • \n-
      • ex_display_events.c
      • \n+
      • ex_window_maximized.c
      • \n
      \n

      al_get_window_position

      \n
      void al_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y)
      \n

      Source\n Code

      \n

      Gets the position of a non-fullscreen display.

      \n

      See also: al_set_window_position,\n al_get_window_borders

      \n

      Examples:

      \n
        \n
      • ex_windows.c
      • \n-
      • ex_multisample.c
      • \n+
      • ex_windows.c
      • \n
      \n

      al_set_window_position

      \n
      void al_set_window_position(ALLEGRO_DISPLAY *display, int x, int y)
      \n

      Source\n Code

      \n

      Sets the position on screen of a non-fullscreen display.

      \n@@ -1098,17 +1089,17 @@\n al_get_window_borders

      \n

      Examples:

      \n
        \n
      • ex_noframe.c
      • \n
      • ex_windows.c
      • \n-
      • ex_multisample.c
      • \n+
      • ex_windows.c
      • \n
      \n

      al_get_window_borders

      \n
      bool al_get_window_borders(ALLEGRO_DISPLAY *display, int *left, int *top, int *right, int *bottom)
      \n

      Source\n Code

      \n

      If that information is available returns TRUE and fills in the size\n@@ -1227,18 +1218,18 @@\n normally you should not care whether it is minimized or not.

      \n

      See also: al_set_new_display_flags,\n al_set_display_flag

      \n

      Examples:

      \n
        \n
      • ex_noframe.c
      • \n-
      • ex_fs_window.c
      • \n
      • ex_noframe.c
      • \n+
      • ex_resize2.c
      • \n
      \n

      al_set_display_flag

      \n
      bool al_set_display_flag(ALLEGRO_DISPLAY *display, int flag, bool onoff)
      \n

      Source\n Code

      \n@@ -1258,19 +1249,19 @@\n

      Since: 5.0.7, 5.1.2

      \n

      See also: al_set_new_display_flags,\n al_get_display_flags

      \n

      Examples:

      \n
        \n
      • ex_noframe.c
      • \n-
      • ex_fs_window.c
      • \n
      • ex_resize2.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_noframe.c#L60\">ex_noframe.c\n+
      • ex_video.c
      • \n
      \n

      al_get_display_option

      \n
      int al_get_display_option(ALLEGRO_DISPLAY *display, int option)
      \n

      Source\n Code

      \n

      Return an extra display setting of the display.

      \n@@ -1358,19 +1349,19 @@\n

      Set the title on a display.

      \n

      See also: al_set_display_icon, al_set_display_icons

      \n

      Examples:

      \n
        \n
      • ex_icon.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_synth.cpp#L459\">ex_synth.cpp\n
      • ex_window_title.c
      • \n
      • ex_bitmap.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_record.c#L145\">ex_record.c\n
      \n

      al_set_new_window_title

      \n
      void al_set_new_window_title(const char *title)
      \n

      Source\n Code

      \n

      Set the title that will be used when a new display is created.\n@@ -1484,15 +1475,15 @@\n

      Examples:

      \n
        \n
      • ex_touch_input.c
      • \n
      • ex_resize2.c
      • \n
      • ex_android.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_vertex_buffer.c#L194\">ex_vertex_buffer.c\n
      \n al_acknowledge_drawing_resume\n
      void al_acknowledge_drawing_resume(ALLEGRO_DISPLAY *display)
      \n

      Source\n Code

      \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -125,18 +125,14 @@\n In order to write a well-behaved application, it is necessary to remember that\n displays will also inform you about important _\be_\bv_\be_\bn_\bt_\bs via their _\be_\bv_\be_\bn_\bt_\b _\bs_\bo_\bu_\br_\bc_\be_\bs.\n *\b**\b**\b**\b**\b**\b* D\bDi\bis\bsp\bpl\bla\bay\by c\bcr\bre\bea\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_D\bDI\bIS\bSP\bPL\bLA\bAY\bY *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_DISPLAY ALLEGRO_DISPLAY;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque type representing an open display or window.\n-Examples:\n- * _\be_\bx_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\bi_\bn_\bf_\bo_\b._\bc\n- * _\be_\bx_\b__\bd_\b3_\bd_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_d\bdi\bis\bsp\bpl\bla\bay\by *\b**\b**\b**\b**\b*\n ALLEGRO_DISPLAY *al_create_display(int w, int h)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a display, or window, with the specified dimensions. The parameters of\n the display are determined by the last calls to al_set_new_display_*. Default\n parameters are used if none are set explicitly. Creating a new display will\n automatically make it the active one, with the backbuffer selected for drawing.\n@@ -144,17 +140,17 @@\n Each display that uses OpenGL as a backend has a distinct OpenGL rendering\n context associated with it. See _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\ba_\br_\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp for the discussion about\n rendering contexts.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn,\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\br_\be_\bf_\br_\be_\bs_\bh_\b__\br_\ba_\bt_\be, _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\ba_\bd_\ba_\bp_\bt_\be_\br,\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bt_\bi_\bt_\bl_\be _\ba_\bl_\b__\bs_\be_\bt_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn\n Examples:\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bd_\b3_\bd_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_d\bdi\bis\bsp\bpl\bla\bay\by *\b**\b**\b**\b**\b*\n void al_destroy_display(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroy a display.\n If the target bitmap of the calling thread is tied to the display, then it\n implies a call to \u201cal_set_target_bitmap(NULL);\u201d before the display is\n destroyed.\n@@ -265,17 +261,17 @@\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: This is an experimental feature and currently\n only works for the X11 backend.\n Since: 5.2.9\n 0 can be used for default values.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn, _\ba_\bl_\b__\bg_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn,\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn\n Examples:\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bd_\b3_\bd_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b._\bc\n- * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b__\bp_\bi_\bx_\be_\bl_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_n\bne\bew\bw_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_o\bop\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n int al_get_new_display_option(int option, int *importance)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Retrieve an extra display setting which was previously set with\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_n\bne\bew\bw_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_o\bop\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_set_new_display_option(int option, int value, int importance)\n@@ -393,15 +389,15 @@\n Specify the shader platform to use for the default shader. See\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bH_\bA_\bD_\bE_\bR_\b__\bP_\bL_\bA_\bT_\bF_\bO_\bR_\bM. The default is ALLEGRO_SHADER_AUTO.\n Since: 5.2.8\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn\n Examples:\n * _\be_\bx_\b__\bd_\b3_\bd_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bg_\bl_\be_\bx_\bt_\b._\bc\n- * _\be_\bx_\b__\be_\bx_\bp_\bo_\bs_\be_\b._\bc\n+ * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bes\bse\bet\bt_\b_n\bne\bew\bw_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_o\bop\bpt\bti\bio\bon\bns\bs *\b**\b**\b**\b**\b*\n void al_reset_new_display_options(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This undoes any previous call to _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn on the calling\n thread.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_n\bne\bew\bw_\b_w\bwi\bin\bnd\bdo\bow\bw_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_get_new_window_position(int *x, int *y)\n@@ -440,16 +436,16 @@\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b*\n ALLEGRO_EVENT_SOURCE *al_get_display_event_source(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Retrieve the associated event source. See the _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bn_\b _\be_\bv_\be_\bn_\bt_\bs for a\n list of the events displays will generate.\n Examples:\n * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n+ * _\be_\bx_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bs_\bc_\br_\be_\be_\bn_\bs_\ba_\bv_\be_\br_\b._\bc\n * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b._\bc\n- * _\be_\bx_\b__\bt_\bo_\bu_\bc_\bh_\b__\bi_\bn_\bp_\bu_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_b\bba\bac\bck\bkb\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n ALLEGRO_BITMAP *al_get_backbuffer(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return a special bitmap representing the back-buffer of the display.\n Care should be taken when using the backbuffer bitmap (and its sub-bitmaps) as\n the source bitmap (e.g as the bitmap argument to _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp). Only\n untransformed operations are hardware accelerated. These consist of\n@@ -484,17 +480,17 @@\n ALLEGRO_VSYNC is 2, this function will not wait for vsync. With many\n drivers the vsync behavior is controlled by the user and not the\n application, and ALLEGRO_VSYNC will not be set; in this case\n _\ba_\bl_\b__\bf_\bl_\bi_\bp_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by will wait for vsync depending on the settings set in the\n system\u2019s graphics preferences.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn\n Examples:\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bd_\b3_\bd_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bup\bpd\bda\bat\bte\be_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_r\bre\beg\bgi\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_update_display_region(int x, int y, int width, int height)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Does the same as _\ba_\bl_\b__\bf_\bl_\bi_\bp_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by, but tries to update only the specified\n region. With many drivers this is not possible, but for some it can improve\n performance. If this is not supported, this function falls back to the behavior\n of _\ba_\bl_\b__\bf_\bl_\bi_\bp_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by. You can query the support for this function using\n@@ -516,25 +512,25 @@\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_w\bwi\bid\bdt\bth\bh *\b**\b**\b**\b**\b*\n int al_get_display_width(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Gets the width of the display. This is like SCREEN_W in Allegro 4.x.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bh_\be_\bi_\bg_\bh_\bt\n Examples:\n * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n- * _\be_\bx_\b__\bo_\bg_\br_\be_\b3_\bd_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bm_\ba_\bx_\bi_\bm_\bi_\bz_\be_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_h\bhe\bei\big\bgh\bht\bt *\b**\b**\b**\b**\b*\n int al_get_display_height(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Gets the height of the display. This is like SCREEN_H in Allegro 4.x.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bw_\bi_\bd_\bt_\bh\n Examples:\n- * _\be_\bx_\b__\bo_\bg_\br_\be_\b3_\bd_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bf_\bs_\b__\br_\be_\bs_\bi_\bz_\be_\b._\bc\n * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bm_\ba_\bx_\bi_\bm_\bi_\bz_\be_\bd_\b._\bc\n+ * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bes\bsi\biz\bze\be_\b_d\bdi\bis\bsp\bpl\bla\bay\by *\b**\b**\b**\b**\b*\n bool al_resize_display(ALLEGRO_DISPLAY *display, int width, int height)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Resize the display. Returns true on success, or false on error. This works on\n both fullscreen and windowed displays, regardless of the ALLEGRO_RESIZABLE\n flag.\n Adjusts the clipping rectangle to the full size of the backbuffer.\n@@ -553,33 +549,33 @@\n resets the backbuffers projection transform to default orthographic transform\n (see _\ba_\bl_\b__\bu_\bs_\be_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm).\n Note that a resize event may be outdated by the time you acknowledge it; there\n could be further resize events generated in the meantime.\n See also: _\ba_\bl_\b__\br_\be_\bs_\bi_\bz_\be_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT\n Examples:\n * _\be_\bx_\b__\bt_\bo_\bu_\bc_\bh_\b__\bi_\bn_\bp_\bu_\bt_\b._\bc\n- * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bw_\bi_\bn_\b._\bc\n * _\be_\bx_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n+ * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bm_\ba_\bx_\bi_\bm_\bi_\bz_\be_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_w\bwi\bin\bnd\bdo\bow\bw_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Gets the position of a non-fullscreen display.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn, _\ba_\bl_\b__\bg_\be_\bt_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bb_\bo_\br_\bd_\be_\br_\bs\n Examples:\n- * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\bs_\b._\bc\n * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bs_\ba_\bm_\bp_\bl_\be_\b._\bc\n+ * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_w\bwi\bin\bnd\bdo\bow\bw_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_set_window_position(ALLEGRO_DISPLAY *display, int x, int y)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sets the position on screen of a non-fullscreen display.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn, _\ba_\bl_\b__\bg_\be_\bt_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bb_\bo_\br_\bd_\be_\br_\bs\n Examples:\n * _\be_\bx_\b__\bn_\bo_\bf_\br_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\bs_\b._\bc\n * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bs_\ba_\bm_\bp_\bl_\be_\b._\bc\n+ * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_w\bwi\bin\bnd\bdo\bow\bw_\b_b\bbo\bor\brd\bde\ber\brs\bs *\b**\b**\b**\b**\b*\n bool al_get_window_borders(ALLEGRO_DISPLAY *display, int *left, int *top, int\n *right, int *bottom)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n If that information is available returns TRUE and fills in the size of the\n window borders. You can pass NULL for borders you do not want to retrieve.\n If the border information is not available returns FALSE.\n@@ -646,16 +642,16 @@\n In addition to the flags set for the display at creation time with\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs it can also have the ALLEGRO_MINIMIZED flag set,\n indicating that the window is currently minimized. This flag is very platform-\n dependent as even a minimized application may still render a preview version so\n normally you should not care whether it is minimized or not.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg\n Examples:\n- * _\be_\bx_\b__\bn_\bo_\bf_\br_\ba_\bm_\be_\b._\bc\n * _\be_\bx_\b__\bf_\bs_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b._\bc\n+ * _\be_\bx_\b__\bn_\bo_\bf_\br_\ba_\bm_\be_\b._\bc\n * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b2_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_f\bfl\bla\bag\bg *\b**\b**\b**\b**\b*\n bool al_set_display_flag(ALLEGRO_DISPLAY *display, int flag, bool onoff)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Enable or disable one of the display flags. The flags are the same as for\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs. The only flags that can be changed after creation\n are:\n@@ -664,17 +660,17 @@\n * ALLEGRO_MAXIMIZED\n Returns true if the driver supports toggling the specified flag else false. You\n can use _\ba_\bl_\b__\bg_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs to query whether the given display property\n actually changed.\n Since: 5.0.7, 5.1.2\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs\n Examples:\n- * _\be_\bx_\b__\bn_\bo_\bf_\br_\ba_\bm_\be_\b._\bc\n * _\be_\bx_\b__\bf_\bs_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b2_\b._\bc\n+ * _\be_\bx_\b__\bn_\bo_\bf_\br_\ba_\bm_\be_\b._\bc\n+ * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_o\bop\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n int al_get_display_option(ALLEGRO_DISPLAY *display, int option)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return an extra display setting of the display.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn\n Examples:\n * _\be_\bx_\b__\bg_\bl_\be_\bx_\bt_\b._\bc\n@@ -722,17 +718,17 @@\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\br_\be_\bf_\br_\be_\bs_\bh_\b__\br_\ba_\bt_\be\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_w\bwi\bin\bnd\bdo\bow\bw_\b_t\bti\bit\btl\ble\be *\b**\b**\b**\b**\b*\n void al_set_window_title(ALLEGRO_DISPLAY *display, const char *title)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the title on a display.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bi_\bc_\bo_\bn, _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bi_\bc_\bo_\bn_\bs\n Examples:\n- * _\be_\bx_\b__\bi_\bc_\bo_\bn_\b._\bc\n+ * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bt_\bi_\bt_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n+ * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_n\bne\bew\bw_\b_w\bwi\bin\bnd\bdo\bow\bw_\b_t\bti\bit\btl\ble\be *\b**\b**\b**\b**\b*\n void al_set_new_window_title(const char *title)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the title that will be used when a new display is created. Allegro uses a\n static buffer of _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bN_\bE_\bW_\b__\bW_\bI_\bN_\bD_\bO_\bW_\b__\bT_\bI_\bT_\bL_\bE_\b__\bM_\bA_\bX_\b__\bS_\bI_\bZ_\bE to store this, so the length\n of the titme you set must be less than this.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bt_\bi_\bt_\bl_\be, _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\be_\bw_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bt_\bi_\bt_\bl_\be, _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by,\n@@ -793,15 +789,15 @@\n the operating system know that you have stopped drawing or if you call it to\n late the application likely will be considered misbehaving and get terminated.\n Since: 5.1.0\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bD_\bI_\bS_\bP_\bL_\bA_\bY_\b__\bH_\bA_\bL_\bT_\b__\bD_\bR_\bA_\bW_\bI_\bN_\bG\n Examples:\n * _\be_\bx_\b__\bt_\bo_\bu_\bc_\bh_\b__\bi_\bn_\bp_\bu_\bt_\b._\bc\n * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b2_\b._\bc\n- * _\be_\bx_\b__\ba_\bn_\bd_\br_\bo_\bi_\bd_\b._\bc\n+ * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_a\bac\bck\bkn\bno\bow\bwl\ble\bed\bdg\bge\be_\b_d\bdr\bra\baw\bwi\bin\bng\bg_\b_r\bre\bes\bsu\bum\bme\be *\b**\b**\b**\b**\b*\n void al_acknowledge_drawing_resume(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Call this in response to the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bD_\bI_\bS_\bP_\bL_\bA_\bY_\b__\bR_\bE_\bS_\bU_\bM_\bE_\b__\bD_\bR_\bA_\bW_\bI_\bN_\bG event.\n Since: 5.1.1\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bD_\bI_\bS_\bP_\bL_\bA_\bY_\b__\bR_\bE_\bS_\bU_\bM_\bE_\b__\bD_\bR_\bA_\bW_\bI_\bN_\bG\n Examples:\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/events.html", "source2": "./usr/share/doc/allegro5-doc/refman/events.html", "unified_diff": "@@ -344,23 +344,14 @@\n type-specific fields. The any.source field tells you which\n event source generated that particular event. The\n any.timestamp field tells you when the event was generated.\n The time is referenced to the same starting point as al_get_time.

      \n

      Each event is of one of the following types, with the usable fields\n given.

      \n-

      Examples:

      \n-
        \n-
      • ex_inject_events.c
      • \n-
      • ex_enet_server.c
      • \n-
      • ex_timer_pause.c
      • \n-
      \n

      ALLEGRO_EVENT_JOYSTICK_AXIS

      \n

      A joystick axis value changed.

      \n
      \n
      joystick.id (ALLEGRO_JOYSTICK *)
      \n
      \n The joystick which generated the event. This is not the same as the\n event source joystick.source.\n@@ -1048,63 +1039,40 @@\n Please see the documentation for ALLEGRO_GET_EVENT_TYPE for\n the rules you should follow when assigning identifiers.

      \n

      See also: al_emit_user_event, ALLEGRO_GET_EVENT_TYPE, al_init_user_event_source

      \n-

      Examples:

      \n-
        \n-
      • ex_user_events.c
      • \n-
      \n

      ALLEGRO_EVENT_QUEUE

      \n
      typedef struct ALLEGRO_EVENT_QUEUE ALLEGRO_EVENT_QUEUE;
      \n

      Source\n Code

      \n

      An event queue holds events that have been generated by event sources\n that are registered with the queue. Events are stored in the order they\n are generated. Access is in a strictly FIFO (first-in-first-out)\n order.

      \n

      See also: al_create_event_queue, al_destroy_event_queue

      \n-

      Examples:

      \n-
        \n-
      • ex_inject_events.c
      • \n-
      • ex_enet_server.c
      • \n-
      • ex_timer_pause.c
      • \n-
      \n

      ALLEGRO_EVENT_SOURCE

      \n
      typedef struct ALLEGRO_EVENT_SOURCE ALLEGRO_EVENT_SOURCE;
      \n

      Source\n Code

      \n

      An event source is any object which can generate events. For example,\n an ALLEGRO_DISPLAY can generate events, and you can get the\n ALLEGRO_EVENT_SOURCE pointer from an ALLEGRO_DISPLAY with al_get_display_event_source.

      \n

      You may create your own \u201cuser\u201d event sources that emit custom\n events.

      \n

      See also: ALLEGRO_EVENT, al_init_user_event_source,\n al_emit_user_event

      \n-

      Examples:

      \n-
        \n-
      • ex_inject_events.c
      • \n-
      • ex_user_events.c
      • \n-
      • nihgui.cpp
      • \n-
      \n

      ALLEGRO_EVENT_TYPE

      \n
      typedef unsigned int ALLEGRO_EVENT_TYPE;
      \n

      Source\n Code

      \n

      An integer used to distinguish between different types of events.

      \n

      See also: ALLEGRO_EVENT,

      #define ALLEGRO_GET_EVENT_TYPE(a, b, c, d)   AL_ID(a, b, c, d)
      \n

      Source\n Code

      \n

      Make an event type identifier, which is a 32-bit integer. Usually,\n but not necessarily, this will be made from four 8-bit character codes,\n for example:

      \n-
      Examples:\n-\n-* [ex_user_events.c](https://github.com/liballeg/allegro5/blob/master/examples/ex_user_events.c#L10)\n-* [ex_native_filechooser.c](https://github.com/liballeg/allegro5/blob/master/examples/ex_native_filechooser.c#L20)\n-\n-#defin  MY_EVENT_TYPE   ALLEGRO_GET_EVENT_TYPE('M','I','N','E')
      \n+
      #defin  MY_EVENT_TYPE   ALLEGRO_GET_EVENT_TYPE('M','I','N','E')
      \n

      IDs less than 1024 are reserved for Allegro or its addons. Don\u2019t use\n anything lower than ALLEGRO_GET_EVENT_TYPE(0, 0, 4, 0).

      \n

      You should try to make your IDs unique so they don\u2019t clash with any\n 3rd party code you may be using. Be creative. Numbering from 1024 is not\n creative.

      \n

      If you need multiple identifiers, you could define them like\n this:

      \n@@ -1163,19 +1126,19 @@\n

      See also: al_register_event_source,\n al_destroy_event_queue,\n ALLEGRO_EVENT_QUEUE

      \n

      Examples:

      \n
        \n
      • ex_inject_events.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_saw.c#L23\">ex_saw.c\n
      • ex_enet_server.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_stream_file.c#L83\">ex_stream_file.c\n
      • ex_timer_pause.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/common.c#L66\">common.c\n
      \n

      al_destroy_event_queue

      \n
      void al_destroy_event_queue(ALLEGRO_EVENT_QUEUE *queue)
      \n

      Source\n Code

      \n

      Destroy the event queue specified. All event sources currently\n@@ -1185,17 +1148,17 @@\n 5.2.9)

      \n

      See also: al_create_event_queue, ALLEGRO_EVENT_QUEUE

      \n

      Examples:

      \n
        \n
      • ex_inject_events.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_saw.c#L79\">ex_saw.c\n
      • ex_timer_pause.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_stream_file.c#L123\">ex_stream_file.c\n
      • common.c
      • \n
      \n

      al_register_event_source

      \n
      void al_register_event_source(ALLEGRO_EVENT_QUEUE *queue,\n    ALLEGRO_EVENT_SOURCE *source)
      \n

      \n

      See also: al_unregister_event_source,\n ALLEGRO_EVENT_SOURCE

      \n

      Examples:

      \n
        \n
      • ex_inject_events.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_saw.c#L24\">ex_saw.c\n
      • ex_enet_server.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_stream_file.c#L102\">ex_stream_file.c\n
      • ex_timer_pause.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/common.c#L67\">common.c\n
      \n

      al_unregister_event_source

      \n
      void al_unregister_event_source(ALLEGRO_EVENT_QUEUE *queue,\n    ALLEGRO_EVENT_SOURCE *source)
      \n

      Source\n Code

      \n@@ -1300,17 +1263,17 @@\n href=\"events.html#al_peek_next_event\">al_peek_next_event, al_wait_for_event

      \n

      Examples:

      \n
        \n
      • ex_opengl.c
      • \n
      • ex_winfull.c
      • \n-
      • ex_dualies.c
      • \n+
      • ex_winfull.c
      • \n
      \n

      al_peek_next_event

      \n
      bool al_peek_next_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)
      \n

      Source\n Code

      \n

      Copy the contents of the next event in the event queue specified into\n@@ -1359,19 +1322,19 @@\n href=\"events.html#al_wait_for_event_timed\">al_wait_for_event_timed,\n al_wait_for_event_until,\n al_get_next_event

      \n

      Examples:

      \n
        \n
      • ex_inject_events.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_saw.c#L36\">ex_saw.c\n
      • ex_enet_server.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_stream_file.c#L117\">ex_stream_file.c\n
      • ex_timer_pause.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/common.c#L69\">common.c\n
      \n

      al_wait_for_event_timed

      \n
      bool al_wait_for_event_timed(ALLEGRO_EVENT_QUEUE *queue,\n    ALLEGRO_EVENT *ret_event, float secs)
      \n

      Source\n Code

      \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -133,18 +133,14 @@\n any.timestamp (double)\n When the event was generated.\n By examining the type field you can then access type-specific fields. The\n any.source field tells you which event source generated that particular event.\n The any.timestamp field tells you when the event was generated. The time is\n referenced to the same starting point as _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\bi_\bm_\be.\n Each event is of one of the following types, with the usable fields given.\n-Examples:\n- * _\be_\bx_\b__\bi_\bn_\bj_\be_\bc_\bt_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bs_\be_\br_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_E\bEV\bVE\bEN\bNT\bT_\b_J\bJO\bOY\bYS\bST\bTI\bIC\bCK\bK_\b_A\bAX\bXI\bIS\bS *\b**\b**\b**\b**\b*\n A joystick axis value changed.\n joystick.id (ALLEGRO_JOYSTICK *)\n The joystick which generated the event. This is not the same as the event\n source joystick.source.\n joystick.stick (int)\n The stick number, counting from zero. Axes on a joystick are grouped into\n@@ -519,56 +515,39 @@\n my_event.user.data2 = &some_var;\n \n al_emit_user_event(&my_event_source, &my_event, NULL);\n Event type identifiers for user events are assigned by the user. Please see the\n documentation for _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bG_\bE_\bT_\b__\bE_\bV_\bE_\bN_\bT_\b__\bT_\bY_\bP_\bE for the rules you should follow when\n assigning identifiers.\n See also: _\ba_\bl_\b__\be_\bm_\bi_\bt_\b__\bu_\bs_\be_\br_\b__\be_\bv_\be_\bn_\bt, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bG_\bE_\bT_\b__\bE_\bV_\bE_\bN_\bT_\b__\bT_\bY_\bP_\bE, _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bu_\bs_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bs_\be_\br_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_E\bEV\bVE\bEN\bNT\bT_\b_Q\bQU\bUE\bEU\bUE\bE *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_EVENT_QUEUE ALLEGRO_EVENT_QUEUE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An event queue holds events that have been generated by event sources that are\n registered with the queue. Events are stored in the order they are generated.\n Access is in a strictly FIFO (first-in-first-out) order.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\be_\bv_\be_\bn_\bt_\b__\bq_\bu_\be_\bu_\be, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\be_\bv_\be_\bn_\bt_\b__\bq_\bu_\be_\bu_\be\n-Examples:\n- * _\be_\bx_\b__\bi_\bn_\bj_\be_\bc_\bt_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bs_\be_\br_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_E\bEV\bVE\bEN\bNT\bT_\b_S\bSO\bOU\bUR\bRC\bCE\bE *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_EVENT_SOURCE ALLEGRO_EVENT_SOURCE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An event source is any object which can generate events. For example, an\n ALLEGRO_DISPLAY can generate events, and you can get the ALLEGRO_EVENT_SOURCE\n pointer from an ALLEGRO_DISPLAY with _\ba_\bl_\b__\bg_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be.\n You may create your own \u201cuser\u201d event sources that emit custom events.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT, _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bu_\bs_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be, _\ba_\bl_\b__\be_\bm_\bi_\bt_\b__\bu_\bs_\be_\br_\b__\be_\bv_\be_\bn_\bt\n-Examples:\n- * _\be_\bx_\b__\bi_\bn_\bj_\be_\bc_\bt_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\bu_\bs_\be_\br_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_E\bEV\bVE\bEN\bNT\bT_\b_T\bTY\bYP\bPE\bE *\b**\b**\b**\b**\b**\b*\n typedef unsigned int ALLEGRO_EVENT_TYPE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An integer used to distinguish between different types of events.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bG_\bE_\bT_\b__\bE_\bV_\bE_\bN_\bT_\b__\bT_\bY_\bP_\bE, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bT_\bY_\bP_\bE_\b__\bI_\bS_\b__\bU_\bS_\bE_\bR\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_G\bGE\bET\bT_\b_E\bEV\bVE\bEN\bNT\bT_\b_T\bTY\bYP\bPE\bE *\b**\b**\b**\b**\b**\b*\n #define ALLEGRO_GET_EVENT_TYPE(a, b, c, d) AL_ID(a, b, c, d)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Make an event type identifier, which is a 32-bit integer. Usually, but not\n necessarily, this will be made from four 8-bit character codes, for example:\n-Examples:\n-\n-* [ex_user_events.c](https://github.com/liballeg/allegro5/blob/master/examples/\n-ex_user_events.c#L10)\n-* [ex_native_filechooser.c](https://github.com/liballeg/allegro5/blob/master/\n-examples/ex_native_filechooser.c#L20)\n-\n #defin MY_EVENT_TYPE ALLEGRO_GET_EVENT_TYPE('M','I','N','E')\n IDs less than 1024 are reserved for Allegro or its addons. Don\u2019t use anything\n lower than ALLEGRO_GET_EVENT_TYPE(0, 0, 4, 0).\n You should try to make your IDs unique so they don\u2019t clash with any 3rd party\n code you may be using. Be creative. Numbering from 1024 is not creative.\n If you need multiple identifiers, you could define them like this:\n #defin BASE_EVENT ALLEGRO_GET_EVENT_TYPE('M','I','N','E')\n@@ -591,41 +570,41 @@\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_e\bev\bve\ben\bnt\bt_\b_q\bqu\bue\beu\bue\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_EVENT_QUEUE *al_create_event_queue(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a new, empty event queue, returning a pointer to the newly created\n object if successful. Returns NULL on error.\n See also: _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\be_\bv_\be_\bn_\bt_\b__\bq_\bu_\be_\bu_\be, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bQ_\bU_\bE_\bU_\bE\n Examples:\n- * _\be_\bx_\b__\bi_\bn_\bj_\be_\bc_\bt_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bs_\be_\br_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n+ * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n+ * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n+ * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_e\bev\bve\ben\bnt\bt_\b_q\bqu\bue\beu\bue\be *\b**\b**\b**\b**\b**\b*\n void al_destroy_event_queue(ALLEGRO_EVENT_QUEUE *queue)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroy the event queue specified. All event sources currently registered with\n the queue will be automatically unregistered before the queue is destroyed.\n This function does nothing if queue is NULL. (since 5.2.9)\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\be_\bv_\be_\bn_\bt_\b__\bq_\bu_\be_\bu_\be, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bQ_\bU_\bE_\bU_\bE\n Examples:\n- * _\be_\bx_\b__\bi_\bn_\bj_\be_\bc_\bt_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n+ * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n+ * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\beg\bgi\bis\bst\bte\ber\br_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b**\b*\n void al_register_event_source(ALLEGRO_EVENT_QUEUE *queue,\n ALLEGRO_EVENT_SOURCE *source)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Register the event source with the event queue specified. An event source may\n be registered with any number of event queues simultaneously, or none. Trying\n to register an event source with the same event queue more than once does\n nothing.\n See also: _\ba_\bl_\b__\bu_\bn_\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bS_\bO_\bU_\bR_\bC_\bE\n Examples:\n- * _\be_\bx_\b__\bi_\bn_\bj_\be_\bc_\bt_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bs_\be_\br_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n+ * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n+ * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n+ * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bnr\bre\beg\bgi\bis\bst\bte\ber\br_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b**\b*\n void al_unregister_event_source(ALLEGRO_EVENT_QUEUE *queue,\n ALLEGRO_EVENT_SOURCE *source)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Unregister an event source with an event queue. If the event source is not\n actually registered with the event queue, nothing happens.\n If the queue had any events in it which originated from the event source, they\n@@ -672,16 +651,16 @@\n Take the next event out of the event queue specified, and copy the contents\n into ret_event, returning true. The original event will be removed from the\n queue. If the event queue is empty, return false and the contents of ret_event\n are unspecified.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT, _\ba_\bl_\b__\bp_\be_\be_\bk_\b__\bn_\be_\bx_\bt_\b__\be_\bv_\be_\bn_\bt, _\ba_\bl_\b__\bw_\ba_\bi_\bt_\b__\bf_\bo_\br_\b__\be_\bv_\be_\bn_\bt\n Examples:\n * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bf_\bu_\bl_\bl_\b._\bc\n * _\be_\bx_\b__\bd_\bu_\ba_\bl_\bi_\be_\bs_\b._\bc\n+ * _\be_\bx_\b__\bw_\bi_\bn_\bf_\bu_\bl_\bl_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_p\bpe\bee\bek\bk_\b_n\bne\bex\bxt\bt_\b_e\bev\bve\ben\bnt\bt *\b**\b**\b**\b**\b**\b*\n bool al_peek_next_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Copy the contents of the next event in the event queue specified into ret_event\n and return true. The original event packet will remain at the head of the\n queue. If the event queue is actually empty, this function returns false and\n the contents of ret_event are unspecified.\n@@ -704,17 +683,17 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Wait until the event queue specified is non-empty. If ret_event is not NULL,\n the first event in the queue will be copied into ret_event and removed from the\n queue. If ret_event is NULL the first event is left at the head of the queue.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT, _\ba_\bl_\b__\bw_\ba_\bi_\bt_\b__\bf_\bo_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bt_\bi_\bm_\be_\bd, _\ba_\bl_\b__\bw_\ba_\bi_\bt_\b__\bf_\bo_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bu_\bn_\bt_\bi_\bl,\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\be_\bx_\bt_\b__\be_\bv_\be_\bn_\bt\n Examples:\n- * _\be_\bx_\b__\bi_\bn_\bj_\be_\bc_\bt_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bs_\be_\br_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n+ * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n+ * _\be_\bx_\b__\bs_\bt_\br_\be_\ba_\bm_\b__\bf_\bi_\bl_\be_\b._\bc\n+ * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_w\bwa\bai\bit\bt_\b_f\bfo\bor\br_\b_e\bev\bve\ben\bnt\bt_\b_t\bti\bim\bme\bed\bd *\b**\b**\b**\b**\b**\b*\n bool al_wait_for_event_timed(ALLEGRO_EVENT_QUEUE *queue,\n ALLEGRO_EVENT *ret_event, float secs)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Wait until the event queue specified is non-empty. If ret_event is not NULL,\n the first event in the queue will be copied into ret_event and removed from the\n queue. If ret_event is NULL the first event is left at the head of the queue.\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/file.html", "source2": "./usr/share/doc/allegro5-doc/refman/file.html", "unified_diff": "@@ -242,23 +242,14 @@\n

      ALLEGRO_FILE

      \n
      typedef struct ALLEGRO_FILE ALLEGRO_FILE;
      \n

      Source\n Code

      \n

      An opaque object representing an open file. This could be a real file\n on disk or a virtual file.

      \n-

      Examples:

      \n-
        \n-
      • ex_file.c
      • \n-
      • ex_dir.c
      • \n-
      • ex_memfile.c
      • \n-
      \n

      ALLEGRO_FILE_INTERFACE

      \n
      typedef struct ALLEGRO_FILE_INTERFACE
      \n

      Source\n Code

      \n

      A structure containing function pointers to handle a type of \u201cfile\u201d,\n real or virtual. See the full discussion in al_fopen will also return NULL.

      \n

      The fi_fclose function must clean up and free the userdata, but\n Allegro will free the ALLEGRO_FILE\n handle.

      \n

      If fi_fungetc is NULL, then Allegro\u2019s default implementation of a 16\n char long buffer will be used.

      \n-

      Examples:

      \n-
        \n-
      • ex_curl.c
      • \n-
      \n

      ALLEGRO_SEEK

      \n
      typedef enum ALLEGRO_SEEK
      \n

      Source\n Code

      \n
        \n
      • ALLEGRO_SEEK_SET - seek relative to beginning of file
      • \n
      • ALLEGRO_SEEK_CUR - seek relative to current file position
      • \n
      • ALLEGRO_SEEK_END - seek relative to end of file
      • \n
      \n

      See also: al_fseek

      \n-

      Examples:

      \n-
        \n-
      • ex_file.c
      • \n-
      • ex_memfile.c
      • \n-
      • ex_file_slice.c
      • \n-
      \n

      al_fopen

      \n
      ALLEGRO_FILE *al_fopen(const char *path, const char *mode)
      \n

      Source\n Code

      \n

      Creates and opens a file (real or virtual) given the path and mode.\n The current file interface is used to open the file.

      \n@@ -343,17 +320,17 @@\n href=\"file.html#al_set_new_file_interface\">al_set_new_file_interface,\n al_fclose.

      \n

      Examples:

      \n
        \n
      • ex_file.c
      • \n
      • ex_file_slice.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_synth.cpp#L317\">ex_synth.cpp\n
      • ex_bitmap_file.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_file_slice.c#L29\">ex_file_slice.c\n
      \n

      al_fopen_interface

      \n
      ALLEGRO_FILE *al_fopen_interface(const ALLEGRO_FILE_INTERFACE *drv,\n    const char *path, const char *mode)
      \n

      Source\n Code

      \n@@ -414,17 +391,17 @@\n

      Returns true on success, false on failure. errno is set to indicate\n the error.

      \n

      Examples:

      \n
        \n
      • ex_file.c
      • \n
      • ex_memfile.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_synth.cpp#L518\">ex_synth.cpp\n
      • ex_file_slice.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_memfile.c#L104\">ex_memfile.c\n
      \n

      al_fread

      \n
      size_t al_fread(ALLEGRO_FILE *f, void *ptr, size_t size)
      \n

      Source\n Code

      \n

      Read \u2018size\u2019 bytes into the buffer pointed to by \u2018ptr\u2019, from the given\n@@ -464,19 +441,19 @@\n href=\"file.html#al_fwrite16be\">al_fwrite16be, al_fwrite16le, al_fwrite32be, al_fwrite32le

      \n

      Examples:

      \n
        \n
      • ex_synth.cpp
      • \n+
      • ex_memfile.c
      • \n
      • ex_file_slice.c
      • \n-
      • ex_synth.cpp
      • \n
      \n

      al_fflush

      \n
      bool al_fflush(ALLEGRO_FILE *f)
      \n

      Source\n Code

      \n

      Flush any pending writes to the given file.

      \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -88,18 +88,14 @@\n These functions are declared in the main Allegro header file:\n #include \n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_F\bFI\bIL\bLE\bE *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_FILE ALLEGRO_FILE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque object representing an open file. This could be a real file on disk\n or a virtual file.\n-Examples:\n- * _\be_\bx_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bd_\bi_\br_\b._\bc\n- * _\be_\bx_\b__\bm_\be_\bm_\bf_\bi_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_F\bFI\bIL\bLE\bE_\b_I\bIN\bNT\bTE\bER\bRF\bFA\bAC\bCE\bE *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_FILE_INTERFACE\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A structure containing function pointers to handle a type of \u201cfile\u201d, real or\n virtual. See the full discussion in _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bf_\bi_\bl_\be_\b__\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be.\n The fields are:\n void* (*fi_fopen)(const char *path, const char *mode);\n@@ -120,27 +116,21 @@\n with the file. The other functions can access that data by calling\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bi_\bl_\be_\b__\bu_\bs_\be_\br_\bd_\ba_\bt_\ba on the file handle. If fi_open returns NULL then _\ba_\bl_\b__\bf_\bo_\bp_\be_\bn\n will also return NULL.\n The fi_fclose function must clean up and free the userdata, but Allegro will\n free the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bF_\bI_\bL_\bE handle.\n If fi_fungetc is NULL, then Allegro\u2019s default implementation of a 16 char long\n buffer will be used.\n-Examples:\n- * _\be_\bx_\b__\bc_\bu_\br_\bl_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_S\bSE\bEE\bEK\bK *\b**\b**\b**\b**\b**\b*\n typedef enum ALLEGRO_SEEK\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n * ALLEGRO_SEEK_SET - seek relative to beginning of file\n * ALLEGRO_SEEK_CUR - seek relative to current file position\n * ALLEGRO_SEEK_END - seek relative to end of file\n See also: _\ba_\bl_\b__\bf_\bs_\be_\be_\bk\n-Examples:\n- * _\be_\bx_\b__\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bm_\be_\bm_\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bf_\bi_\bl_\be_\b__\bs_\bl_\bi_\bc_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_f\bfo\bop\bpe\ben\bn *\b**\b**\b**\b**\b**\b*\n ALLEGRO_FILE *al_fopen(const char *path, const char *mode)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates and opens a file (real or virtual) given the path and mode. The current\n file interface is used to open the file.\n Parameters:\n * path - path to the file to open\n@@ -155,16 +145,16 @@\n Newline translations can be useful for text files but is disastrous for binary\n files. To avoid this behaviour you need to open file streams in binary mode by\n using a mode argument containing a \u201cb\u201d, e.g.\u00a0\u201crb\u201d, \u201cwb\u201d.\n Returns a file handle on success, or NULL on error.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bf_\bi_\bl_\be_\b__\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be, _\ba_\bl_\b__\bf_\bc_\bl_\bo_\bs_\be.\n Examples:\n * _\be_\bx_\b__\bf_\bi_\bl_\be_\b._\bc\n+ * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bf_\bi_\bl_\be_\b__\bs_\bl_\bi_\bc_\be_\b._\bc\n- * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bi_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_f\bfo\bop\bpe\ben\bn_\b_i\bin\bnt\bte\ber\brf\bfa\bac\bce\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_FILE *al_fopen_interface(const ALLEGRO_FILE_INTERFACE *drv,\n const char *path, const char *mode)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Opens a file using the specified interface, instead of the interface set with\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bf_\bi_\bl_\be_\b__\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be.\n See also: _\ba_\bl_\b__\bf_\bo_\bp_\be_\bn\n@@ -205,16 +195,16 @@\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_f\bfc\bcl\blo\bos\bse\be *\b**\b**\b**\b**\b**\b*\n bool al_fclose(ALLEGRO_FILE *f)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Close the given file, writing any buffered output data (if any).\n Returns true on success, false on failure. errno is set to indicate the error.\n Examples:\n * _\be_\bx_\b__\bf_\bi_\bl_\be_\b._\bc\n+ * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bm_\be_\bm_\bf_\bi_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bf_\bi_\bl_\be_\b__\bs_\bl_\bi_\bc_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_f\bfr\bre\bea\bad\bd *\b**\b**\b**\b**\b**\b*\n size_t al_fread(ALLEGRO_FILE *f, void *ptr, size_t size)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Read \u2018size\u2019 bytes into the buffer pointed to by \u2018ptr\u2019, from the given file.\n Returns the number of bytes actually read. If an error occurs, or the end-of-\n file is reached, the return value is a short byte count (or zero).\n al_fread() does not distinguish between EOF and other errors. Use _\ba_\bl_\b__\bf_\be_\bo_\bf and\n@@ -229,17 +219,17 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Write \u2018size\u2019 bytes from the buffer pointed to by \u2018ptr\u2019 into the given file.\n Returns the number of bytes actually written. If an error occurs, the return\n value is a short byte count (or zero).\n See also: _\ba_\bl_\b__\bf_\bp_\bu_\bt_\bc, _\ba_\bl_\b__\bf_\bp_\bu_\bt_\bs, _\ba_\bl_\b__\bf_\bw_\br_\bi_\bt_\be_\b1_\b6_\bb_\be, _\ba_\bl_\b__\bf_\bw_\br_\bi_\bt_\be_\b1_\b6_\bl_\be, _\ba_\bl_\b__\bf_\bw_\br_\bi_\bt_\be_\b3_\b2_\bb_\be,\n _\ba_\bl_\b__\bf_\bw_\br_\bi_\bt_\be_\b3_\b2_\bl_\be\n Examples:\n+ * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bm_\be_\bm_\bf_\bi_\bl_\be_\b._\bc\n * _\be_\bx_\b__\bf_\bi_\bl_\be_\b__\bs_\bl_\bi_\bc_\be_\b._\bc\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_f\bff\bfl\blu\bus\bsh\bh *\b**\b**\b**\b**\b**\b*\n bool al_fflush(ALLEGRO_FILE *f)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Flush any pending writes to the given file.\n Returns true on success, false otherwise. errno is set to indicate the error.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\be_\br_\br_\bn_\bo\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_f\bft\bte\bel\bll\bl *\b**\b**\b**\b**\b**\b*\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/font.html", "source2": "./usr/share/doc/allegro5-doc/refman/font.html", "unified_diff": "@@ -294,23 +294,14 @@\n

      A handle identifying any kind of font. Usually you will create it\n with al_load_font which supports\n loading all kinds of TrueType fonts supported by the FreeType library.\n If you instead pass the filename of a bitmap file, it will be loaded\n with al_load_bitmap and a\n font in Allegro\u2019s bitmap font format will be created from it with al_grab_font_from_bitmap.

      \n-

      Examples:

      \n-
        \n-
      • ex_disable_screensaver.c
      • \n-
      • ex_font_justify.cpp
      • \n-
      • ex_display_events.c
      • \n-
      \n

      ALLEGRO_GLYPH

      \n
      typedef struct ALLEGRO_GLYPH ALLEGRO_GLYPH;
      \n

      Source\n Code

      \n

      A structure containing the properties of a character in a font.

      \n
      typedef struct ALLEGRO_GLYPH {\n@@ -337,19 +328,14 @@\n to the next character in a string and includes kerning.

      \n

      Since: 5.2.1

      \n
      \n

      Unstable\n API: This API is new and subject to refinement.

      \n
      \n

      See also: al_get_glyph

      \n-

      Examples:

      \n-
        \n-
      • ex_ttf.c
      • \n-
      \n

      al_init_font_addon

      \n
      bool al_init_font_addon(void)
      \n

      Source\n Code

      \n

      Initialise the font addon.

      \n

      Note that if you intend to load bitmap fonts, you will need to\n@@ -361,23 +347,14 @@\n function has no return value. You may wish to avoid checking the return\n value if your code needs to be compatible with Allegro 5.0. Currently,\n the function will never return false.

      \n

      See also: al_init_image_addon, al_init_ttf_addon, al_shutdown_font_addon

      \n-

      Examples:

      \n-
        \n-
      • ex_disable_screensaver.c
      • \n-
      • ex_font_justify.cpp
      • \n-
      • ex_display_events.c
      • \n-
      \n

      al_is_font_addon_initialized

      \n
      bool al_is_font_addon_initialized(void)
      \n

      Source\n Code

      \n

      Returns true if the font addon is initialized, otherwise returns\n false.

      \n@@ -408,40 +385,22 @@\n href=\"graphics.html#al_set_new_bitmap_flags\">bitmap flags at the\n time the font is loaded.

      \n

      See also: al_destroy_font, al_init_font_addon, al_register_font_loader, al_load_bitmap_font_flags,\n al_load_ttf_font

      \n-

      Examples:

      \n-
        \n-
      • ex_font_justify.cpp
      • \n-
      • ex_membmp.c
      • \n-
      • ex_window_title.c
      • \n-
      \n

      al_destroy_font

      \n
      void al_destroy_font(ALLEGRO_FONT *f)
      \n

      Source\n Code

      \n

      Frees the memory being used by a font structure. Does nothing if\n passed NULL.

      \n

      See also: al_load_font

      \n-

      Examples:

      \n-
        \n-
      • ex_disable_screensaver.c
      • \n-
      • ex_font_justify.cpp
      • \n-
      • ex_cpu.c
      • \n-
      \n

      al_register_font_loader

      \n
      bool al_register_font_loader(char const *extension,\n    ALLEGRO_FONT *(*load_font)(char const *filename, int size, int flags))
      \n

      Source\n Code

      \n

      Informs Allegro of a new font file type, telling it how to load files\n@@ -475,86 +434,53 @@\n | |\n descent |\n | |\n -------------------------

      \n

      See also: al_get_text_width, al_get_text_dimensions

      \n-

      Examples:

      \n-
        \n-
      • ex_font_justify.cpp
      • \n-
      • ex_membmp.c
      • \n-
      • ex_mouse_warp.c
      • \n-
      \n

      al_get_font_ascent

      \n
      int al_get_font_ascent(const ALLEGRO_FONT *f)
      \n

      Source\n Code

      \n

      Returns the ascent of the specified font.

      \n

      See also: al_get_font_descent, al_get_font_line_height

      \n-

      Examples:

      \n-
        \n-
      • ex_ttf.c
      • \n-
      \n

      al_get_font_descent

      \n
      int al_get_font_descent(const ALLEGRO_FONT *f)
      \n

      Source\n Code

      \n

      Returns the descent of the specified font.

      \n

      See also: al_get_font_ascent, al_get_font_line_height

      \n-

      Examples:

      \n-
        \n-
      • ex_ttf.c
      • \n-
      \n

      al_get_text_width

      \n
      int al_get_text_width(const ALLEGRO_FONT *f, const char *str)
      \n

      Source\n Code

      \n

      Calculates the length of a string in a particular font, in\n pixels.

      \n

      See also: al_get_ustr_width, al_get_font_line_height, al_get_text_dimensions

      \n-

      Examples:

      \n-
        \n-
      • ex_display_options.c
      • \n-
      • ex_record_name.c
      • \n-
      • ex_color_gradient.c
      • \n-
      \n

      al_get_ustr_width

      \n
      int al_get_ustr_width(const ALLEGRO_FONT *f, ALLEGRO_USTR const *ustr)
      \n

      Source\n Code

      \n

      Like al_get_text_width but\n expects an ALLEGRO_USTR.

      \n

      See also: al_get_text_width, al_get_ustr_dimensions

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      \n

      al_draw_text

      \n
      void al_draw_text(const ALLEGRO_FONT *font,\n    ALLEGRO_COLOR color, float x, float y, int flags,\n    char const *text) 
      \n

      Source\n Code

      \n@@ -580,45 +506,27 @@\n but you can use al_draw_multiline_text for\n multi line text output.

      \n

      See also: al_draw_ustr, al_draw_textf, al_draw_justified_text, al_draw_multiline_text.

      \n-

      Examples:

      \n-
        \n-
      • ex_disable_screensaver.c
      • \n-
      • ex_display_events.c
      • \n-
      • ex_membmp.c
      • \n-
      \n

      al_draw_ustr

      \n
      void al_draw_ustr(const ALLEGRO_FONT *font,\n    ALLEGRO_COLOR color, float x, float y, int flags,\n    const ALLEGRO_USTR *ustr) 
      \n

      Source\n Code

      \n

      Like al_draw_text, except the\n text is passed as an ALLEGRO_USTR instead of a NUL-terminated char\n array.

      \n

      See also: al_draw_text, al_draw_justified_ustr, al_draw_multiline_ustr

      \n-

      Examples:

      \n-
        \n-
      • ex_font_multiline.cpp
      • \n-
      • nihgui.cpp
      • \n-
      • ex_blend.c
      • \n-
      \n

      al_draw_justified_text

      \n
      void al_draw_justified_text(const ALLEGRO_FONT *font,\n    ALLEGRO_COLOR color, float x1, float x2,\n    float y, float diff, int flags, const char *text)
      \n

      Source\n Code

      \n@@ -633,19 +541,14 @@\n
        \n
      • ALLEGRO_ALIGN_INTEGER - Draw text aligned to integer pixel\n positions. Since: 5.0.8, 5.1.5
      • \n
      \n

      See also: al_draw_justified_textf, al_draw_justified_ustr

      \n-

      Examples:

      \n-
        \n-
      • ex_font_justify.cpp
      • \n-
      \n

      al_draw_justified_ustr

      \n
      void al_draw_justified_ustr(const ALLEGRO_FONT *font,\n    ALLEGRO_COLOR color, float x1, float x2,\n    float y, float diff, int flags, const ALLEGRO_USTR *ustr)
      \n

      Source\n Code

      \n@@ -664,23 +567,14 @@\n href=\"https://github.com/liballeg/allegro5/blob/master/addons/font/text.c#L213\">Source\n Code

      \n

      Formatted text output, using a printf() style format string. All\n parameters have the same meaning as with al_draw_text otherwise.

      \n

      See also: al_draw_text, al_draw_ustr

      \n-

      Examples:

      \n-
        \n-
      • ex_disable_screensaver.c
      • \n-
      • ex_display_events.c
      • \n-
      • ex_cpu.c
      • \n-
      \n

      al_draw_justified_textf

      \n
      void al_draw_justified_textf(const ALLEGRO_FONT *f,\n    ALLEGRO_COLOR color, float x1, float x2, float y,\n    float diff, int flags, const char *format, ...)
      \n

      Source\n Code

      \n@@ -710,21 +604,14 @@\n
    \n

    Note that glyphs may go to the left and upwards of the X, in which\n case x and y will have negative values.

    \n

    See also: al_get_text_width, al_get_font_line_height, al_get_ustr_dimensions

    \n-

    Examples:

    \n-
      \n-
    • ex_ttf.c
    • \n-
    • ex_logo.c
    • \n-
    \n

    al_get_ustr_dimensions

    \n
    void al_get_ustr_dimensions(const ALLEGRO_FONT *f,\n    ALLEGRO_USTR const *ustr,\n    int *bbx, int *bby, int *bbw, int *bbh)
    \n

    Source\n Code

    \n@@ -756,37 +643,27 @@\n unicode point in a range, the odd integers the last unicode point in a\n range.

    \n

    Returns the number of ranges contained in the font (even if it is\n bigger than ranges_count).

    \n

    Since: 5.1.4

    \n

    See also: al_grab_font_from_bitmap

    \n-

    Examples:

    \n-
      \n-
    • ex_ttf.c
    • \n-
    \n

    al_set_fallback_font

    \n
    void al_set_fallback_font(ALLEGRO_FONT *font, ALLEGRO_FONT *fallback)
    \n

    Source\n Code

    \n

    Sets a font which is used instead if a character is not present. Can\n be chained, but make sure there is no loop as that would crash the\n application! Pass NULL to remove a fallback font again.

    \n

    Since: 5.1.12

    \n

    See also: al_get_fallback_font, al_draw_glyph, al_draw_text

    \n-

    Examples:

    \n-
      \n-
    • ex_ttf.c
    • \n-
    \n

    al_get_fallback_font

    \n
    ALLEGRO_FONT *al_get_fallback_font(ALLEGRO_FONT *font)
    \n

    Source\n Code

    \n

    Retrieves the fallback font for this font or NULL.

    \n

    Since: 5.1.12

    \n@@ -826,21 +703,14 @@\n again with false as a parameter when done drawing the glyphs to further\n enhance performance.

    \n

    Since: 5.1.12

    \n

    See also: al_get_glyph_width, al_get_glyph_dimensions, al_get_glyph_advance.

    \n-

    Examples:

    \n-
      \n-
    • ex_font.c
    • \n-
    • ex_ttf.c
    • \n-
    \n

    al_get_glyph_width

    \n
    int al_get_glyph_width(const ALLEGRO_FONT *f, int codepoint)
    \n

    Source\n Code

    \n

    This function returns the width in pixels of the glyph that\n corresponds with codepoint in the font font.\n@@ -903,19 +773,14 @@\n | | * *|\n v | **** |\n +---+-------+\n

    Since: 5.1.12

    \n

    See also: al_draw_glyph, al_get_glyph_width, al_get_glyph_advance.

    \n-

    Examples:

    \n-
      \n-
    • ex_ttf.c
    • \n-
    \n

    al_get_glyph_advance

    \n
    int al_get_glyph_advance(const ALLEGRO_FONT *f, int codepoint1, int codepoint2)
    \n

    Source\n Code

    \n

    This function returns by how much the x position should be advanced\n for left to right text drawing when the glyph that corresponds to\n@@ -977,21 +842,14 @@\n / \\ |\n / \\ \\_ \n ---------------\n

    Since: 5.1.12

    \n

    See also: al_draw_glyph, al_get_glyph_width, al_get_glyph_dimensions.

    \n-

    Examples:

    \n-
      \n-
    • ex_font.c
    • \n-
    • ex_ttf.c
    • \n-
    \n

    Multiline text drawing

    \n

    al_draw_multiline_text

    \n
    void al_draw_multiline_text(const ALLEGRO_FONT *font,\n      ALLEGRO_COLOR color, float x, float y, float max_width, float line_height,\n      int flags, const char *text)
    \n

    Source\n@@ -1038,21 +896,14 @@\n layout, you can use al_do_multiline_text.

    \n

    Since: 5.1.9

    \n

    See also: al_do_multiline_text, al_draw_multiline_ustr, al_draw_multiline_textf

    \n-

    Examples:

    \n-
      \n-
    • ex_font_multiline.cpp
    • \n-
    • ex_resize2.c
    • \n-
    \n

    al_draw_multiline_ustr

    \n
    void al_draw_multiline_ustr(const ALLEGRO_FONT *font,\n      ALLEGRO_COLOR color, float x, float y, float max_width, float line_height,\n      int flags, const ALLEGRO_USTR *ustr)
    \n

    Source\n Code

    \n@@ -1077,19 +928,14 @@\n href=\"font.html#al_draw_multiline_text\">al_draw_multiline_text\n otherwise.

    \n

    Since: 5.1.9

    \n

    See also: al_draw_multiline_text, al_draw_multiline_ustr, al_do_multiline_text

    \n-

    Examples:

    \n-
      \n-
    • ex_resize2.c
    • \n-
    \n

    al_do_multiline_text

    \n
    void al_do_multiline_text(const ALLEGRO_FONT *font,\n    float max_width, const char *text,\n    bool (*cb)(int line_num, const char *line, int size, void *extra),\n    void *extra)
    \n

    Source\n@@ -1124,19 +970,14 @@\n guaranteed to be valid after that.

    \n

    If the callback cb returns false, al_do_multiline_text\n will stop immediately, otherwise it will continue on to the next\n line.

    \n

    Since: 5.1.9

    \n

    See also: al_draw_multiline_text

    \n-

    Examples:

    \n-
      \n-
    • ex_font_multiline.cpp
    • \n-
    \n

    al_do_multiline_ustr

    \n
    void al_do_multiline_ustr(const ALLEGRO_FONT *font, float max_width,\n    const ALLEGRO_USTR *ustr,\n    bool (*cb)(int line_num, const ALLEGRO_USTR * line, void *extra),\n    void *extra)
    \n

    Source\n@@ -1203,21 +1044,14 @@\n glyphs found in the bitmap to ASCII range, the next 95 glyphs to Latin\n 1, the next 128 glyphs to Extended-A, and the last glyph to the Euro\n character. (This is just the characters found in the Allegro 4\n font.)

    \n

    See also: al_load_bitmap,\n al_grab_font_from_bitmap

    \n-

    Examples:

    \n-
      \n-
    • ex_font.c
    • \n-
    • ex_ttf.c
    • \n-
    \n

    al_load_bitmap_font

    \n
    ALLEGRO_FONT *al_load_bitmap_font(const char *fname)
    \n

    Source\n Code

    \n

    Load a bitmap font from a file. This is done by first calling al_load_bitmap_flags and\n@@ -1228,23 +1062,14 @@\n href=\"graphics.html#al_convert_mask_to_alpha\">al_convert_mask_to_alpha\n on it before passing it to al_grab_font_from_bitmap.

    \n

    See also: al_load_bitmap_font_flags,\n al_load_font, al_load_bitmap_flags

    \n-

    Examples:

    \n-
      \n-
    • ex_bitmap_flip.c
    • \n-
    • ex_mouse_cursor.c
    • \n-
    • ex_record_name.c
    • \n-
    \n

    al_load_bitmap_font_flags

    \n
    ALLEGRO_FONT *al_load_bitmap_font_flags(const char *fname, int flags)
    \n

    Source\n Code

    \n

    Like al_load_bitmap_font\n but additionally takes a flags parameter which is a bitfield containing\n@@ -1276,23 +1101,14 @@\n

    Returns NULL on an error.

    \n

    The font memory must be freed the same way as for any other font,\n using al_destroy_font.

    \n

    Since: 5.0.8, 5.1.3

    \n

    See also: al_load_bitmap_font, al_destroy_font

    \n-

    Examples:

    \n-
      \n-
    • ex_disable_screensaver.c
    • \n-
    • ex_display_events.c
    • \n-
    • ex_cpu.c
    • \n-
    \n

    TTF fonts

    \n

    These functions are declared in the following header file. Link with\n allegro_ttf.

    \n
     #include <allegro5/allegro_ttf.h>
    \n

    al_init_ttf_addon

    \n
    bool al_init_ttf_addon(void)
    \n

    \n

    Call this after al_init_font_addon to make al_load_font recognize \u201c.ttf\u201d and\n other formats supported by al_load_ttf_font.

    \n

    Returns true on success, false on failure.

    \n-

    Examples:

    \n-
      \n-
    • ex_font_justify.cpp
    • \n-
    • ex_font_multiline.cpp
    • \n-
    • ex_color.cpp
    • \n-
    \n

    al_is_ttf_addon_initialized

    \n
    bool al_is_ttf_addon_initialized(void)
    \n

    Source\n Code

    \n

    Returns true if the TTF addon is initialized, otherwise returns\n false.

    \n@@ -1358,23 +1165,14 @@\n
  • ALLEGRO_TTF_NO_AUTOHINT - Disable the Auto Hinter which is\n enabled by default in newer versions of FreeType. Since: 5.0.6,\n 5.1.2

  • \n \n

    See also: al_init_ttf_addon, al_load_ttf_font_f

    \n-

    Examples:

    \n-
      \n-
    • ex_bitmap_flip.c
    • \n-
    • ex_synth.cpp
    • \n-
    • ex_audio_chain.cpp
    • \n-
    \n

    al_load_ttf_font_f

    \n
    ALLEGRO_FONT *al_load_ttf_font_f(ALLEGRO_FILE *file,\n     char const *filename, int size, int flags)
    \n

    Source\n Code

    \n

    Like al_load_ttf_font, but\n@@ -1444,21 +1242,14 @@\n compatibility.

    \n

    Since: 5.2.1

    \n
    \n

    Unstable\n API: This API is new and subject to refinement.

    \n
    \n

    See also: ALLEGRO_GLYPH

    \n-

    Examples:

    \n-
      \n-
    • ex_font.c
    • \n-
    • ex_ttf.c
    • \n-
    \n

    \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -103,18 +103,14 @@\n typedef struct ALLEGRO_FONT ALLEGRO_FONT;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A handle identifying any kind of font. Usually you will create it with\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bf_\bo_\bn_\bt which supports loading all kinds of TrueType fonts supported by\n the FreeType library. If you instead pass the filename of a bitmap file, it\n will be loaded with _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp and a font in Allegro\u2019s bitmap font format\n will be created from it with _\ba_\bl_\b__\bg_\br_\ba_\bb_\b__\bf_\bo_\bn_\bt_\b__\bf_\br_\bo_\bm_\b__\bb_\bi_\bt_\bm_\ba_\bp.\n-Examples:\n- * _\be_\bx_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bs_\bc_\br_\be_\be_\bn_\bs_\ba_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_G\bGL\bLY\bYP\bPH\bH *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_GLYPH ALLEGRO_GLYPH;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A structure containing the properties of a character in a font.\n typedef struct ALLEGRO_GLYPH {\n ALLEGRO_BITMAP *bitmap; // the bitmap the character is on\n int x; // the x position of the glyph on bitmap\n@@ -135,33 +131,27 @@\n Glyphs are tightly packed onto the bitmap, so you need to add offset_x and\n offset_y to your draw position for the text to look right.\n advance is the number of pixels to add to your x position to advance to the\n next character in a string and includes kerning.\n Since: 5.2.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: This API is new and subject to refinement.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bg_\bl_\by_\bp_\bh\n-Examples:\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bni\bit\bt_\b_f\bfo\bon\bnt\bt_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b*\n bool al_init_font_addon(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Initialise the font addon.\n Note that if you intend to load bitmap fonts, you will need to initialise\n allegro_image separately (unless you are using another library to load images).\n Similarly, if you wish to load truetype-fonts, do not forget to also call\n _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bt_\bt_\bf_\b__\ba_\bd_\bd_\bo_\bn.\n Returns true on success, false on failure. On the 5.0 branch, this function has\n no return value. You may wish to avoid checking the return value if your code\n needs to be compatible with Allegro 5.0. Currently, the function will never\n return false.\n See also: _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bi_\bm_\ba_\bg_\be_\b__\ba_\bd_\bd_\bo_\bn, _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bt_\bt_\bf_\b__\ba_\bd_\bd_\bo_\bn, _\ba_\bl_\b__\bs_\bh_\bu_\bt_\bd_\bo_\bw_\bn_\b__\bf_\bo_\bn_\bt_\b__\ba_\bd_\bd_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bs_\bc_\br_\be_\be_\bn_\bs_\ba_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_f\bfo\bon\bnt\bt_\b_a\bad\bdd\bdo\bon\bn_\b_i\bin\bni\bit\bti\bia\bal\bli\biz\bze\bed\bd *\b**\b**\b**\b**\b*\n bool al_is_font_addon_initialized(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if the font addon is initialized, otherwise returns false.\n Since: 5.2.6\n See also: _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bf_\bo_\bn_\bt_\b__\ba_\bd_\bd_\bo_\bn, _\ba_\bl_\b__\bs_\bh_\bu_\bt_\bd_\bo_\bw_\bn_\b__\bf_\bo_\bn_\bt_\b__\ba_\bd_\bd_\bo_\bn\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bhu\but\btd\bdo\bow\bwn\bn_\b_f\bfo\bon\bnt\bt_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b*\n@@ -176,27 +166,19 @@\n Loads a font from disk. This will use _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\bn_\bt_\b__\bf_\bl_\ba_\bg_\bs if you pass the\n name of a known bitmap format, or else _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bt_\bt_\bf_\b__\bf_\bo_\bn_\bt.\n The flags parameter is passed through to either of those functions. Bitmap and\n TTF fonts are also affected by the current _\bb_\bi_\bt_\bm_\ba_\bp_\b _\bf_\bl_\ba_\bg_\bs at the time the font is\n loaded.\n See also: _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bf_\bo_\bn_\bt, _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bf_\bo_\bn_\bt_\b__\ba_\bd_\bd_\bo_\bn, _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\bf_\bo_\bn_\bt_\b__\bl_\bo_\ba_\bd_\be_\br,\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\bn_\bt_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bt_\bt_\bf_\b__\bf_\bo_\bn_\bt\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bt_\bi_\bt_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_f\bfo\bon\bnt\bt *\b**\b**\b**\b**\b*\n void al_destroy_font(ALLEGRO_FONT *f)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Frees the memory being used by a font structure. Does nothing if passed NULL.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bf_\bo_\bn_\bt\n-Examples:\n- * _\be_\bx_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bs_\bc_\br_\be_\be_\bn_\bs_\ba_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bc_\bp_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\beg\bgi\bis\bst\bte\ber\br_\b_f\bfo\bon\bnt\bt_\b_l\blo\boa\bad\bde\ber\br *\b**\b**\b**\b**\b*\n bool al_register_font_loader(char const *extension,\n ALLEGRO_FONT *(*load_font)(char const *filename, int size, int flags))\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Informs Allegro of a new font file type, telling it how to load files of this\n format.\n The extension should include the leading dot (\u2018.\u2019) character. It will be\n@@ -222,48 +204,34 @@\n / \\ | height\n ---------------- |\n | |\n descent |\n | |\n -------------------------\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\be_\bx_\bt_\b__\bw_\bi_\bd_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\be_\bx_\bt_\b__\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bs\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bw_\ba_\br_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_f\bfo\bon\bnt\bt_\b_a\bas\bsc\bce\ben\bnt\bt *\b**\b**\b**\b**\b*\n int al_get_font_ascent(const ALLEGRO_FONT *f)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the ascent of the specified font.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bo_\bn_\bt_\b__\bd_\be_\bs_\bc_\be_\bn_\bt, _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bo_\bn_\bt_\b__\bl_\bi_\bn_\be_\b__\bh_\be_\bi_\bg_\bh_\bt\n-Examples:\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_f\bfo\bon\bnt\bt_\b_d\bde\bes\bsc\bce\ben\bnt\bt *\b**\b**\b**\b**\b*\n int al_get_font_descent(const ALLEGRO_FONT *f)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the descent of the specified font.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bo_\bn_\bt_\b__\ba_\bs_\bc_\be_\bn_\bt, _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bo_\bn_\bt_\b__\bl_\bi_\bn_\be_\b__\bh_\be_\bi_\bg_\bh_\bt\n-Examples:\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_t\bte\bex\bxt\bt_\b_w\bwi\bid\bdt\bth\bh *\b**\b**\b**\b**\b*\n int al_get_text_width(const ALLEGRO_FONT *f, const char *str)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Calculates the length of a string in a particular font, in pixels.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bu_\bs_\bt_\br_\b__\bw_\bi_\bd_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bo_\bn_\bt_\b__\bl_\bi_\bn_\be_\b__\bh_\be_\bi_\bg_\bh_\bt, _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\be_\bx_\bt_\b__\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bs\n-Examples:\n- * _\be_\bx_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_u\bus\bst\btr\br_\b_w\bwi\bid\bdt\bth\bh *\b**\b**\b**\b**\b*\n int al_get_ustr_width(const ALLEGRO_FONT *f, ALLEGRO_USTR const *ustr)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\be_\bx_\bt_\b__\bw_\bi_\bd_\bt_\bh but expects an ALLEGRO_USTR.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\be_\bx_\bt_\b__\bw_\bi_\bd_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bu_\bs_\bt_\br_\b__\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bs\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_t\bte\bex\bxt\bt *\b**\b**\b**\b**\b*\n void al_draw_text(const ALLEGRO_FONT *font,\n ALLEGRO_COLOR color, float x, float y, int flags,\n char const *text)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Writes the NUL-terminated string text onto the target bitmap at position x, y,\n using the specified font.\n@@ -274,45 +242,35 @@\n It can also be combined with this flag:\n * ALLEGRO_ALIGN_INTEGER - Always draw text aligned to an integer pixel\n position. This was formerly the default behaviour. Since: 5.0.8, 5.1.4\n This function does not support newline characters (\\n), but you can use\n _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt for multi line text output.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bu_\bs_\bt_\br, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\be_\bx_\bt_\bf, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bj_\bu_\bs_\bt_\bi_\bf_\bi_\be_\bd_\b__\bt_\be_\bx_\bt,\n _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt.\n-Examples:\n- * _\be_\bx_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bs_\bc_\br_\be_\be_\bn_\bs_\ba_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_u\bus\bst\btr\br *\b**\b**\b**\b**\b*\n void al_draw_ustr(const ALLEGRO_FONT *font,\n ALLEGRO_COLOR color, float x, float y, int flags,\n const ALLEGRO_USTR *ustr)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\be_\bx_\bt, except the text is passed as an ALLEGRO_USTR instead of a\n NUL-terminated char array.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\be_\bx_\bt, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bj_\bu_\bs_\bt_\bi_\bf_\bi_\be_\bd_\b__\bu_\bs_\bt_\br, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bu_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_j\bju\bus\bst\bti\bif\bfi\bie\bed\bd_\b_t\bte\bex\bxt\bt *\b**\b**\b**\b**\b*\n void al_draw_justified_text(const ALLEGRO_FONT *font,\n ALLEGRO_COLOR color, float x1, float x2,\n float y, float diff, int flags, const char *text)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\be_\bx_\bt, but justifies the string to the region x1-x2.\n The diff parameter is the maximum amount of horizontal space to allow between\n words. If justisfying the text would exceed diff pixels, or the string contains\n less than two words, then the string will be drawn left aligned.\n The flags parameter can be 0 or one of the following flags:\n * ALLEGRO_ALIGN_INTEGER - Draw text aligned to integer pixel positions.\n Since: 5.0.8, 5.1.5\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bj_\bu_\bs_\bt_\bi_\bf_\bi_\be_\bd_\b__\bt_\be_\bx_\bt_\bf, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bj_\bu_\bs_\bt_\bi_\bf_\bi_\be_\bd_\b__\bu_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_j\bju\bus\bst\bti\bif\bfi\bie\bed\bd_\b_u\bus\bst\btr\br *\b**\b**\b**\b**\b*\n void al_draw_justified_ustr(const ALLEGRO_FONT *font,\n ALLEGRO_COLOR color, float x1, float x2,\n float y, float diff, int flags, const ALLEGRO_USTR *ustr)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bj_\bu_\bs_\bt_\bi_\bf_\bi_\be_\bd_\b__\bt_\be_\bx_\bt, except the text is passed as an ALLEGRO_USTR\n instead of a NUL-terminated char array.\n@@ -321,18 +279,14 @@\n void al_draw_textf(const ALLEGRO_FONT *font, ALLEGRO_COLOR color,\n float x, float y, int flags,\n const char *format, ...)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Formatted text output, using a printf() style format string. All parameters\n have the same meaning as with _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\be_\bx_\bt otherwise.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\be_\bx_\bt, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bu_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bs_\bc_\br_\be_\be_\bn_\bs_\ba_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\bc_\bp_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_j\bju\bus\bst\bti\bif\bfi\bie\bed\bd_\b_t\bte\bex\bxt\btf\bf *\b**\b**\b**\b**\b*\n void al_draw_justified_textf(const ALLEGRO_FONT *f,\n ALLEGRO_COLOR color, float x1, float x2, float y,\n float diff, int flags, const char *format, ...)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Formatted text output, using a printf() style format string. All parameters\n have the same meaning as with _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bj_\bu_\bs_\bt_\bi_\bf_\bi_\be_\bd_\b__\bt_\be_\bx_\bt otherwise.\n@@ -347,17 +301,14 @@\n information.\n Returned variables (all in pixels):\n * x, y - Offset to upper left corner of bounding box.\n * w, h - Dimensions of bounding box.\n Note that glyphs may go to the left and upwards of the X, in which case x and y\n will have negative values.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\be_\bx_\bt_\b__\bw_\bi_\bd_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bo_\bn_\bt_\b__\bl_\bi_\bn_\be_\b__\bh_\be_\bi_\bg_\bh_\bt, _\ba_\bl_\b__\bg_\be_\bt_\b__\bu_\bs_\bt_\br_\b__\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bs\n-Examples:\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\bg_\bo_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_u\bus\bst\btr\br_\b_d\bdi\bim\bme\ben\bns\bsi\bio\bon\bns\bs *\b**\b**\b**\b**\b*\n void al_get_ustr_dimensions(const ALLEGRO_FONT *f,\n ALLEGRO_USTR const *ustr,\n int *bbx, int *bby, int *bbw, int *bbh)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\be_\bx_\bt_\b__\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bs, except the text is passed as an ALLEGRO_USTR\n instead of a NUL-terminated char array.\n@@ -376,26 +327,22 @@\n ranges should be an array with room for ranges_count * 2 elements. The even\n integers are the first unicode point in a range, the odd integers the last\n unicode point in a range.\n Returns the number of ranges contained in the font (even if it is bigger than\n ranges_count).\n Since: 5.1.4\n See also: _\ba_\bl_\b__\bg_\br_\ba_\bb_\b__\bf_\bo_\bn_\bt_\b__\bf_\br_\bo_\bm_\b__\bb_\bi_\bt_\bm_\ba_\bp\n-Examples:\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_f\bfa\bal\bll\blb\bba\bac\bck\bk_\b_f\bfo\bon\bnt\bt *\b**\b**\b**\b**\b*\n void al_set_fallback_font(ALLEGRO_FONT *font, ALLEGRO_FONT *fallback)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sets a font which is used instead if a character is not present. Can be\n chained, but make sure there is no loop as that would crash the application!\n Pass NULL to remove a fallback font again.\n Since: 5.1.12\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\b__\bf_\bo_\bn_\bt, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bg_\bl_\by_\bp_\bh, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\be_\bx_\bt\n-Examples:\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_f\bfa\bal\bll\blb\bba\bac\bck\bk_\b_f\bfo\bon\bnt\bt *\b**\b**\b**\b**\b*\n ALLEGRO_FONT *al_get_fallback_font(ALLEGRO_FONT *font)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Retrieves the fallback font for this font or NULL.\n Since: 5.1.12\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bf_\ba_\bl_\bl_\bb_\ba_\bc_\bk_\b__\bf_\bo_\bn_\bt\n *\b**\b**\b**\b**\b**\b* P\bPe\ber\br g\bgl\bly\byp\bph\bh t\bte\bex\bxt\bt h\bha\ban\bnd\bdl\bli\bin\bng\bg *\b**\b**\b**\b**\b**\b*\n@@ -422,17 +369,14 @@\n to determine the size and position of each glyph.\n If you have to draw many glyphs at the same time, use _\ba_\bl_\b__\bh_\bo_\bl_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bd_\br_\ba_\bw_\bi_\bn_\bg\n with true as the parameter, before drawing the glyphs, and then call\n _\ba_\bl_\b__\bh_\bo_\bl_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bd_\br_\ba_\bw_\bi_\bn_\bg again with false as a parameter when done drawing the\n glyphs to further enhance performance.\n Since: 5.1.12\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bg_\bl_\by_\bp_\bh_\b__\bw_\bi_\bd_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bg_\bl_\by_\bp_\bh_\b__\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bg_\bl_\by_\bp_\bh_\b__\ba_\bd_\bv_\ba_\bn_\bc_\be.\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b._\bc\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_g\bgl\bly\byp\bph\bh_\b_w\bwi\bid\bdt\bth\bh *\b**\b**\b**\b**\b*\n int al_get_glyph_width(const ALLEGRO_FONT *f, int codepoint)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function returns the width in pixels of the glyph that corresponds with\n codepoint in the font font. Returns zero if the font does not have such a\n glyph.\n Since: 5.1.12\n@@ -479,16 +423,14 @@\n +---+--------+ | | ***** |\n | | *|\n | | * *|\n v | **** |\n +---+-------+\n Since: 5.1.12\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bg_\bl_\by_\bp_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bg_\bl_\by_\bp_\bh_\b__\bw_\bi_\bd_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bg_\bl_\by_\bp_\bh_\b__\ba_\bd_\bv_\ba_\bn_\bc_\be.\n-Examples:\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_g\bgl\bly\byp\bph\bh_\b_a\bad\bdv\bva\ban\bnc\bce\be *\b**\b**\b**\b**\b*\n int al_get_glyph_advance(const ALLEGRO_FONT *f, int codepoint1, int codepoint2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function returns by how much the x position should be advanced for left to\n right text drawing when the glyph that corresponds to codepoint1 has been\n drawn, and the glyph that corresponds to codepoint2 will be the next to be\n drawn. This takes into consideration the horizontal advance width of the glyph\n@@ -540,17 +482,14 @@\n / \\ |\n /____\\ |\n / \\ |\n / \\ \\_\n ---------------\n Since: 5.1.12\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bg_\bl_\by_\bp_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bg_\bl_\by_\bp_\bh_\b__\bw_\bi_\bd_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bg_\bl_\by_\bp_\bh_\b__\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bs.\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b._\bc\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b**\b* M\bMu\bul\blt\bti\bil\bli\bin\bne\be t\bte\bex\bxt\bt d\bdr\bra\baw\bwi\bin\bng\bg *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_m\bmu\bul\blt\bti\bil\bli\bin\bne\be_\b_t\bte\bex\bxt\bt *\b**\b**\b**\b**\b*\n void al_draw_multiline_text(const ALLEGRO_FONT *font,\n ALLEGRO_COLOR color, float x, float y, float max_width, float line_height,\n int flags, const char *text)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\be_\bx_\bt, but this function supports drawing multiple lines of text.\n@@ -577,17 +516,14 @@\n The flags ALLEGRO_ALIGN_LEFT, ALLEGRO_ALIGN_CENTRE, ALLEGRO_ALIGN_RIGHT and\n ALLEGRO_ALIGN_INTEGER will be honoured by this function.\n If you want to calculate the size of what this function will draw without\n actually drawing it, or if you need a complex and/or custom layout, you can use\n _\ba_\bl_\b__\bd_\bo_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt.\n Since: 5.1.9\n See also: _\ba_\bl_\b__\bd_\bo_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bu_\bs_\bt_\br, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt_\bf\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b2_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_m\bmu\bul\blt\bti\bil\bli\bin\bne\be_\b_u\bus\bst\btr\br *\b**\b**\b**\b**\b*\n void al_draw_multiline_ustr(const ALLEGRO_FONT *font,\n ALLEGRO_COLOR color, float x, float y, float max_width, float line_height,\n int flags, const ALLEGRO_USTR *ustr)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt, except the text is passed as an ALLEGRO_USTR\n instead of a NUL-terminated char array.\n@@ -598,16 +534,14 @@\n ALLEGRO_COLOR color, float x, float y, float max_width, float line_height,\n int flags, const char *format, ...)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Formatted text output, using a printf() style format string. All parameters\n have the same meaning as with _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt otherwise.\n Since: 5.1.9\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bu_\bs_\bt_\br, _\ba_\bl_\b__\bd_\bo_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b2_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdo\bo_\b_m\bmu\bul\blt\bti\bil\bli\bin\bne\be_\b_t\bte\bex\bxt\bt *\b**\b**\b**\b**\b*\n void al_do_multiline_text(const ALLEGRO_FONT *font,\n float max_width, const char *text,\n bool (*cb)(int line_num, const char *line, int size, void *extra),\n void *extra)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function processes the text and splits it into lines as\n@@ -627,16 +561,14 @@\n buffer and NUL-terminate it yourself. You will also have to make your own copy\n if you need the contents of line after cb has returned, as line is n\bno\bot\bt\n guaranteed to be valid after that.\n If the callback cb returns false, al_do_multiline_text will stop immediately,\n otherwise it will continue on to the next line.\n Since: 5.1.9\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdo\bo_\b_m\bmu\bul\blt\bti\bil\bli\bin\bne\be_\b_u\bus\bst\btr\br *\b**\b**\b**\b**\b*\n void al_do_multiline_ustr(const ALLEGRO_FONT *font, float max_width,\n const ALLEGRO_USTR *ustr,\n bool (*cb)(int line_num, const ALLEGRO_USTR * line, void *extra),\n void *extra)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\bo_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b__\bt_\be_\bx_\bt, but using ALLEGRO_USTR instead of a NUL-terminated\n@@ -689,30 +621,23 @@\n The first example will grab glyphs for the 95 standard printable ASCII\n characters, beginning with the space character (32) and ending with the tilde\n character (126). The second example will map the first 96 glyphs found in the\n bitmap to ASCII range, the next 95 glyphs to Latin 1, the next 128 glyphs to\n Extended-A, and the last glyph to the Euro character. (This is just the\n characters found in the Allegro 4 font.)\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bg_\br_\ba_\bb_\b__\bf_\bo_\bn_\bt_\b__\bf_\br_\bo_\bm_\b__\bb_\bi_\bt_\bm_\ba_\bp\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b._\bc\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_b\bbi\bit\btm\bma\bap\bp_\b_f\bfo\bon\bnt\bt *\b**\b**\b**\b**\b*\n ALLEGRO_FONT *al_load_bitmap_font(const char *fname)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Load a bitmap font from a file. This is done by first calling\n _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs and then _\ba_\bl_\b__\bg_\br_\ba_\bb_\b__\bf_\bo_\bn_\bt_\b__\bf_\br_\bo_\bm_\b__\bb_\bi_\bt_\bm_\ba_\bp.\n If you wanted to load an old A4 font, for example, it would be better to load\n the bitmap yourself in order to call _\ba_\bl_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b__\bm_\ba_\bs_\bk_\b__\bt_\bo_\b__\ba_\bl_\bp_\bh_\ba on it before\n passing it to _\ba_\bl_\b__\bg_\br_\ba_\bb_\b__\bf_\bo_\bn_\bt_\b__\bf_\br_\bo_\bm_\b__\bb_\bi_\bt_\bm_\ba_\bp.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\bn_\bt_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bf_\bo_\bn_\bt, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs\n-Examples:\n- * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\bi_\bp_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bc_\bu_\br_\bs_\bo_\br_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_b\bbi\bit\btm\bma\bap\bp_\b_f\bfo\bon\bnt\bt_\b_f\bfl\bla\bag\bgs\bs *\b**\b**\b**\b**\b*\n ALLEGRO_FONT *al_load_bitmap_font_flags(const char *fname, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\bn_\bt but additionally takes a flags parameter which is a\n bitfield containing a combination of the following:\n ALLEGRO_NO_PREMULTIPLIED_ALPHA\n The same meaning as for _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs.\n@@ -730,32 +655,24 @@\n 0x0100 to 0x017F (Extended A)\n 0x20AC to 0x20AC (euro currency symbol)\n Returns NULL on an error.\n The font memory must be freed the same way as for any other font, using\n _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bf_\bo_\bn_\bt.\n Since: 5.0.8, 5.1.3\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\bn_\bt, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bf_\bo_\bn_\bt\n-Examples:\n- * _\be_\bx_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bs_\bc_\br_\be_\be_\bn_\bs_\ba_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\bc_\bp_\bu_\b._\bc\n *\b**\b**\b**\b**\b**\b* T\bTT\bTF\bF f\bfo\bon\bnt\bts\bs *\b**\b**\b**\b**\b**\b*\n These functions are declared in the following header file. Link with\n allegro_ttf.\n #include \n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bni\bit\bt_\b_t\btt\btf\bf_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b*\n bool al_init_ttf_addon(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Call this after _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bf_\bo_\bn_\bt_\b__\ba_\bd_\bd_\bo_\bn to make _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bf_\bo_\bn_\bt recognize \u201c.ttf\u201d and\n other formats supported by _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bt_\bt_\bf_\b__\bf_\bo_\bn_\bt.\n Returns true on success, false on failure.\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_t\btt\btf\bf_\b_a\bad\bdd\bdo\bon\bn_\b_i\bin\bni\bit\bti\bia\bal\bli\biz\bze\bed\bd *\b**\b**\b**\b**\b*\n bool al_is_ttf_addon_initialized(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if the TTF addon is initialized, otherwise returns false.\n Since: 5.2.6\n See also: _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bt_\bt_\bf_\b__\ba_\bd_\bd_\bo_\bn, _\ba_\bl_\b__\bs_\bh_\bu_\bt_\bd_\bo_\bw_\bn_\b__\bt_\bt_\bf_\b__\ba_\bd_\bd_\bo_\bn\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bhu\but\btd\bdo\bow\bwn\bn_\b_t\btt\btf\bf_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b*\n@@ -778,18 +695,14 @@\n * ALLEGRO_TTF_NO_KERNING - Do not use any kerning even if the font file\n supports it.\n * ALLEGRO_TTF_MONOCHROME - Load as a monochrome font (which means no anti-\n aliasing of the font is done).\n * ALLEGRO_TTF_NO_AUTOHINT - Disable the Auto Hinter which is enabled by\n default in newer versions of FreeType. Since: 5.0.6, 5.1.2\n See also: _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bt_\bt_\bf_\b__\ba_\bd_\bd_\bo_\bn, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bt_\bt_\bf_\b__\bf_\bo_\bn_\bt_\b__\bf\n-Examples:\n- * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\bi_\bp_\b._\bc\n- * _\be_\bx_\b__\bs_\by_\bn_\bt_\bh_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_t\btt\btf\bf_\b_f\bfo\bon\bnt\bt_\b_f\bf *\b**\b**\b**\b**\b*\n ALLEGRO_FONT *al_load_ttf_font_f(ALLEGRO_FILE *file,\n char const *filename, int size, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bt_\bt_\bf_\b__\bf_\bo_\bn_\bt, but the font is read from the file handle. The filename\n is only used to find possible additional files next to a font file.\n N\bNo\bot\bte\be:\b: The file handle is owned by the returned ALLEGRO_FONT object\n@@ -834,11 +747,8 @@\n yourself. prev_codepoint is the codepoint in the string before the one you want\n to draw and is used for kerning. codepoint is the character you want to get\n info about. You should clear the \u2018glyph\u2019 structure to 0 with memset before\n passing it to this function for future compatibility.\n Since: 5.2.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: This API is new and subject to refinement.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bG_\bL_\bY_\bP_\bH\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b._\bc\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/fshook.html", "source2": "./usr/share/doc/allegro5-doc/refman/fshook.html", "unified_diff": "@@ -250,21 +250,14 @@\n

    Source\n Code

    \n

    Opaque filesystem entry object. Represents a file or a directory\n (check with al_get_fs_entry_mode). There\n are no user accessible member variables.

    \n-

    Examples:

    \n-
      \n-
    • ex_dir.c
    • \n-
    • ex_physfs.c
    • \n-
    \n

    ALLEGRO_FILE_MODE

    \n
    typedef enum ALLEGRO_FILE_MODE
    \n

    Source\n Code

    \n

    Filesystem modes/types

    \n
      \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -79,17 +79,14 @@\n filesystem like your harddrive, or a virtual filesystem like a .zip archive (or\n whatever else you or an addon makes it do).\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_F\bFS\bS_\b_E\bEN\bNT\bTR\bRY\bY *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_FS_ENTRY ALLEGRO_FS_ENTRY;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Opaque filesystem entry object. Represents a file or a directory (check with\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bf_\bs_\b__\be_\bn_\bt_\br_\by_\b__\bm_\bo_\bd_\be). There are no user accessible member variables.\n-Examples:\n- * _\be_\bx_\b__\bd_\bi_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\bh_\by_\bs_\bf_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_F\bFI\bIL\bLE\bE_\b_M\bMO\bOD\bDE\bE *\b**\b**\b**\b**\b**\b*\n typedef enum ALLEGRO_FILE_MODE\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Filesystem modes/types\n * ALLEGRO_FILEMODE_READ - Readable\n * ALLEGRO_FILEMODE_WRITE - Writable\n * ALLEGRO_FILEMODE_EXECUTE - Executable\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/fullscreen_mode.html", "source2": "./usr/share/doc/allegro5-doc/refman/fullscreen_mode.html", "unified_diff": "@@ -197,21 +197,14 @@\n int refresh_rate; // The refresh rate of the mode\n } ALLEGRO_DISPLAY_MODE;\n

      The refresh_rate may be zero if unknown.

      \n

      For an explanation of what format means, see ALLEGRO_PIXEL_FORMAT.

      \n

      See also: al_get_display_mode

      \n-

      Examples:

      \n-
        \n-
      • ex_monitorinfo.c
      • \n-
      • ex_display_options.c
      • \n-
      \n

      al_get_display_mode

      \n
      ALLEGRO_DISPLAY_MODE *al_get_display_mode(int index, ALLEGRO_DISPLAY_MODE *mode)
      \n

      Source\n Code

      \n

      Retrieves a fullscreen mode. Display parameters should not be changed\n between a call of Source\n Code

      \n

      An ALLEGRO_COLOR structure describes a color in a device independent\n way. Use al_map_rgb et al.\u00a0and al_unmap_rgb et al.\u00a0to translate\n from and to various color representations.

      \n-

      Examples:

      \n-
        \n-
      • ex_keyboard_focus.c
      • \n-
      • ex_nodisplay.c
      • \n-
      • ex_mouse_focus.c
      • \n-
      \n

      al_map_rgb

      \n
      ALLEGRO_COLOR al_map_rgb(\n    unsigned char r, unsigned char g, unsigned char b)
      \n

      Source\n Code

      \n

      Convert r, g, b (ranging from 0-255) into an This function can be called before Allegro is initialized.

      \n

      See also: al_map_rgba, al_map_rgba_f, al_map_rgb_f

      \n

      Examples:

      \n
        \n
      • ex_audio_props.cpp
      • \n+
      • ex_enet_server.c
      • \n
      • ex_keyboard_focus.c
      • \n-
      • ex_nodisplay.c
      • \n
      \n

      al_map_rgb_f

      \n
      ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)
      \n

      Source\n Code

      \n

      Convert r, g, b, (ranging from 0.0f-1.0f) into an al_map_rgb, al_map_rgba_f

      \n

      Examples:

      \n
        \n
      • ex_enet_server.c
      • \n
      • ex_keyboard_events.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_color.cpp#L173\">ex_color.cpp\n
      • ex_drawpixels.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_font_justify.cpp#L80\">ex_font_justify.cpp\n
      \n

      al_map_rgba

      \n
      ALLEGRO_COLOR al_map_rgba(\n    unsigned char r, unsigned char g, unsigned char b, unsigned char a)
      \n

      Source\n Code

      \n@@ -563,17 +554,17 @@\n href=\"graphics.html#al_premul_rgba_f\">al_premul_rgba_f, al_map_rgb_f

      \n

      Examples:

      \n
        \n
      • ex_timedwait.c
      • \n
      • ex_resize.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_cpu.c#L59\">ex_cpu.c\n
      • ex_rotate.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_resize.c#L11\">ex_resize.c\n
      \n

      al_premul_rgba_f

      \n
      ALLEGRO_COLOR al_premul_rgba_f(float r, float g, float b, float a)
      \n

      Source\n Code

      \n

      This is a shortcut for \n

    \n

    See also: al_lock_bitmap,\n al_lock_bitmap_region,\n al_unlock_bitmap, ALLEGRO_PIXEL_FORMAT

    \n-

    Examples:

    \n-
      \n-
    • ex_lockbitmap.c
    • \n-
    • ex_premulalpha.c
    • \n-
    • ex_multisample.c
    • \n-
    \n

    ALLEGRO_PIXEL_FORMAT

    \n
    typedef enum ALLEGRO_PIXEL_FORMAT
    \n

    Source\n Code

    \n

    Pixel formats. Each pixel format specifies the exact size and bit\n layout of a pixel in memory. Components are specified from high bits to\n@@ -836,23 +818,14 @@\n bytes, resulting in 4x compression ratio. This format supports smooth\n alpha transitions. Since 5.1.9.\n \n

    See also: al_set_new_bitmap_format,\n al_get_bitmap_format

    \n-

    Examples:

    \n-
      \n-
    • ex_convert.c
    • \n-
    • ex_drawpixels.c
    • \n-
    • ex_lockbitmap.c
    • \n-
    \n

    al_get_pixel_size

    \n
    int al_get_pixel_size(int format)
    \n

    Source\n Code

    \n

    Return the number of bytes that a pixel of the given format occupies.\n For blocked pixel formats (e.g.\u00a0compressed formats), this returns 0.

    \n@@ -972,15 +945,15 @@\n

    Examples:

    \n
      \n
    • ex_drawpixels.c
    • \n
    • ex_membmp.c
    • \n
    • ex_lockbitmap.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_premulalpha.c#L40\">ex_premulalpha.c\n
    \n

    al_lock_bitmap_region

    \n
    ALLEGRO_LOCKED_REGION *al_lock_bitmap_region(ALLEGRO_BITMAP *bitmap,\n    int x, int y, int width, int height, int format, int flags)
    \n

    Source\n Code

    \n@@ -1007,15 +980,15 @@\n

    Examples:

    \n
      \n
    • ex_lockbitmap.c
    • \n
    • ex_compressed.c
    • \n
    • ex_threads2.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_blit.c#L169\">ex_blit.c\n
    \n

    al_unlock_bitmap

    \n
    void al_unlock_bitmap(ALLEGRO_BITMAP *bitmap)
    \n

    Source\n Code

    \n

    Unlock a previously locked bitmap or bitmap region. If the bitmap is\n@@ -1028,17 +1001,17 @@\n al_lock_bitmap_region_blocked

    \n

    Examples:

    \n
      \n
    • ex_drawpixels.c
    • \n
    • ex_lockbitmap.c
    • \n-
    • ex_premulalpha.c
    • \n+
    • ex_color2.c
    • \n
    \n

    al_lock_bitmap_blocked

    \n
    ALLEGRO_LOCKED_REGION *al_lock_bitmap_blocked(ALLEGRO_BITMAP *bitmap,\n    int flags)
    \n

    Source\n Code

    \n@@ -1086,23 +1059,14 @@\n

    Bitmap creation

    \n

    ALLEGRO_BITMAP

    \n
    typedef struct ALLEGRO_BITMAP ALLEGRO_BITMAP;
    \n

    Source\n Code

    \n

    Abstract type representing a bitmap (2D image).

    \n-

    Examples:

    \n-
      \n-
    • ex_convert.c
    • \n-
    • ex_nodisplay.c
    • \n-
    • ex_opengl_pixel_shader.c
    • \n-
    \n

    al_create_bitmap

    \n
    ALLEGRO_BITMAP *al_create_bitmap(int w, int h)
    \n

    Source\n Code

    \n

    Creates a new bitmap using the bitmap format and flags for the\n current thread. Blitting between bitmaps of differing formats, or\n@@ -1225,19 +1189,19 @@\n href=\"graphics.html#al_set_new_bitmap_format\">al_set_new_bitmap_format,\n al_set_new_bitmap_flags,\n al_convert_bitmap

    \n

    Examples:

    \n
      \n
    • ex_subbitmap.c
    • \n-
    • ex_font.c
    • \n
    • ex_premulalpha.c
    • \n+
    • ex_subbitmap.c
    • \n
    \n

    al_convert_bitmap

    \n
    void al_convert_bitmap(ALLEGRO_BITMAP *bitmap)
    \n

    Source\n Code

    \n

    Converts the bitmap to the current bitmap flags and format. The\n@@ -1419,15 +1383,15 @@\n

    Examples:

    \n
      \n
    • ex_convert.c
    • \n
    • ex_blend_bench.c
    • \n
    • ex_icon2.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_membmp.c#L113\">ex_membmp.c\n
    \n

    al_add_new_bitmap_flag

    \n
    void al_add_new_bitmap_flag(int flag)
    \n

    Source\n Code

    \n

    A convenience function which does the same as

    \n@@ -1586,17 +1550,17 @@\n API: This is an experimental feature.

    \n \n

    See also: ALLEGRO_BITMAP_WRAP

    \n

    Examples:

    \n
      \n
    • ex_prim_wrap.c
    • \n-
    • ex_prim.c
    • \n+
    • ex_prim_wrap.c
    • \n
    \n

    al_get_new_bitmap_wrap

    \n

    Source Code

    \n

    Returns the value currently set with al_set_new_bitmap_wrap\n on the current thread.

    \n

    Since: 5.2.8

    \n@@ -1620,21 +1584,14 @@\n
  • ALLEGRO_BITMAP_WRAP_REPEAT - The texture coordinates get shifted\n to the opposite edge that they go past.

  • \n
  • ALLEGRO_BITMAP_WRAP_CLAMP - The texture coordinates get clamped\n to the edges that they go past.

  • \n
  • ALLEGRO_BITMAP_WRAP_MIRROR - The texture coordinates get mirrored\n across the edges that they go past.

  • \n \n-

    Examples:

    \n-
      \n-
    • ex_prim_wrap.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    Bitmap properties

    \n

    al_get_bitmap_flags

    \n
    int al_get_bitmap_flags(ALLEGRO_BITMAP *bitmap)
    \n

    Source\n Code

    \n

    Return the flags used to create the bitmap.

    \n@@ -1668,34 +1625,34 @@\n

    Source\n Code

    \n

    Returns the height of a bitmap in pixels.

    \n

    Examples:

    \n
      \n
    • ex_multiwin.c
    • \n-
    • ex_resize.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_color.cpp#L161\">ex_color.cpp\n
    • ex_membmp.c
    • \n+
    • ex_multiwin.c
    • \n
    \n

    al_get_bitmap_width

    \n
    int al_get_bitmap_width(ALLEGRO_BITMAP *bitmap)
    \n

    Source\n Code

    \n

    Returns the width of a bitmap in pixels.

    \n

    Examples:

    \n
      \n
    • ex_font_justify.cpp
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_color.cpp#L160\">ex_color.cpp\n
    • ex_multiwin.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_font_justify.cpp#L74\">ex_font_justify.cpp\n
    • ex_resize.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_membmp.c#L51\">ex_membmp.c\n
    \n

    al_get_bitmap_depth

    \n
    int al_get_bitmap_depth(ALLEGRO_BITMAP *bitmap)
    \n

    Source\n Code

    \n

    Return the depthbuffer depth used by this bitmap if it is used with\n@@ -1733,17 +1690,17 @@\n href=\"graphics.html#al_put_pixel\">al_put_pixel, al_lock_bitmap

    \n

    Examples:

    \n
      \n
    • ex_blend_test.c
    • \n
    • ex_compressed.c
    • \n-
    • ex_vertex_buffer.c
    • \n+
    • ex_compressed.c
    • \n
    \n

    al_is_bitmap_locked

    \n
    bool al_is_bitmap_locked(ALLEGRO_BITMAP *bitmap)
    \n

    Source\n Code

    \n

    Returns whether or not a bitmap is already locked.

    \n@@ -1847,17 +1804,17 @@\n

    See also: al_create_sub_bitmap, al_get_parent_bitmap

    \n

    Since: 5.1.12

    \n

    Examples:

    \n
      \n
    • ex_reparent.c
    • \n-
    • ex_multisample_target.c
    • \n+
    • ex_reparent.c
    • \n
    \n

    al_get_bitmap_blender

    \n
    void al_get_bitmap_blender(int *op, int *src, int *dst)
    \n

    Source\n Code

    \n

    Returns the current blender being used by the target bitmap. You can\n@@ -2000,19 +1957,19 @@\n

    See also: ALLEGRO_COLOR, al_set_clipping_rectangle,\n al_clear_depth_buffer

    \n

    Examples:

    \n
      \n
    • ex_audio_props.cpp
    • \n+
    • ex_keyboard_focus.c
    • \n
    • ex_nodisplay.c
    • \n-
    • ex_mouse_focus.c
    • \n
    \n

    al_clear_depth_buffer

    \n
    void al_clear_depth_buffer(float z)
    \n

    Source\n Code

    \n

    Clear the depth buffer (confined by the clipping rectangle) to the\n@@ -2037,15 +1994,15 @@\n

    Examples:

    \n
      \n
    • ex_depth_mask.c
    • \n
    • ex_depth_target.c
    • \n
    • ex_projection2.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_camera.c#L337\">ex_camera.c\n
    \n

    al_draw_bitmap

    \n
    void al_draw_bitmap(ALLEGRO_BITMAP *bitmap, float dx, float dy, int flags)
    \n

    Source\n Code

    \n

    Draws an unscaled, unrotated bitmap at the given position to the\n@@ -2077,15 +2034,15 @@\n al_draw_scaled_rotated_bitmap

    \n

    Examples:

    \n
      \n
    • ex_nodisplay.c
    • \n
    • ex_opengl_pixel_shader.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_mouse.c#L71\">ex_mouse.c\n
    • ex_blend_bench.c
    • \n
    \n

    al_draw_tinted_bitmap

    \n
    void al_draw_tinted_bitmap(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR tint,\n    float dx, float dy, int flags)
    \n

    See also: al_draw_bitmap

    \n

    Examples:

    \n
      \n
    • ex_nodisplay.c
    • \n
    • ex_expose.c
    • \n-
    • ex_bitmap_flip.c
    • \n+
    • ex_expose.c
    • \n
    \n

    al_draw_bitmap_region

    \n
    void al_draw_bitmap_region(ALLEGRO_BITMAP *bitmap,\n    float sx, float sy, float sw, float sh, float dx, float dy, int flags)
    \n

    Source\n Code

    \n@@ -2139,17 +2096,17 @@\n al_draw_scaled_rotated_bitmap

    \n

    Examples:

    \n
      \n
    • ex_font.c
    • \n
    • ex_clip.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_blend.c#L157\">ex_blend.c\n
    • ex_blit.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_clip.c#L1\">ex_clip.c\n
    \n

    al_draw_tinted_bitmap_region

    \n
    void al_draw_tinted_bitmap_region(ALLEGRO_BITMAP *bitmap,\n    ALLEGRO_COLOR tint,\n    float sx, float sy, float sw, float sh, float dx, float dy,\n    int flags)
    \n

    See al_draw_bitmap for a\n note on restrictions on which bitmaps can be drawn where.

    \n

    See also: al_draw_tinted_bitmap

    \n

    Examples:

    \n
      \n
    • ex_transform.c
    • \n-
    • ex_ttf.c
    • \n+
    • ex_transform.c
    • \n
    \n

    al_draw_pixel

    \n
    void al_draw_pixel(float x, float y, ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n

    Draws a single pixel at x, y. This function, unlike See also: ALLEGRO_COLOR, al_put_pixel

    \n

    Examples:

    \n
      \n
    • ex_drawpixels.c
    • \n
    • ex_blend_test.c
    • \n-
    • ex_resample_test.c
    • \n+
    • ex_color2.c
    • \n
    \n

    al_draw_rotated_bitmap

    \n
    void al_draw_rotated_bitmap(ALLEGRO_BITMAP *bitmap,\n    float cx, float cy, float dx, float dy, float angle, int flags)
    \n

    Source\n Code

    \n@@ -2303,15 +2260,15 @@\n

    Examples:

    \n
      \n
    • ex_blend_bench.c
    • \n
    • ex_bitmap.c
    • \n
    • ex_bitmap_file.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_premulalpha.c#L105\">ex_premulalpha.c\n
    \n al_draw_tinted_scaled_rotated_bitmap\n
    void al_draw_tinted_scaled_rotated_bitmap(ALLEGRO_BITMAP *bitmap,\n    ALLEGRO_COLOR tint,\n    float cx, float cy, float dx, float dy, float xscale, float yscale,\n    float angle, int flags)
    \n@@ -2326,17 +2283,17 @@\n

    See also: al_draw_tinted_bitmap

    \n

    Examples:

    \n
      \n
    • ex_rotate.c
    • \n
    • ex_haiku.c
    • \n-
    • ex_mixer_pp.c
    • \n+
    • ex_haiku.c
    • \n
    \n al_draw_tinted_scaled_rotated_bitmap_region\n
    void al_draw_tinted_scaled_rotated_bitmap_region(ALLEGRO_BITMAP *bitmap,\n    float sx, float sy, float sw, float sh,\n    ALLEGRO_COLOR tint,\n    float cx, float cy, float dx, float dy, float xscale, float yscale,\n@@ -2391,15 +2348,15 @@\n 

    Examples:

    \n
      \n
    • ex_blend_bench.c
    • \n
    • ex_dualies.c
    • \n
    • ex_multiwin.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_membmp.c#L50\">ex_membmp.c\n
    \n

    al_draw_tinted_scaled_bitmap

    \n
    void al_draw_tinted_scaled_bitmap(ALLEGRO_BITMAP *bitmap,\n    ALLEGRO_COLOR tint,\n    float sx, float sy, float sw, float sh,\n    float dx, float dy, float dw, float dh, int flags)
    \n

    \n

    Return the target bitmap of the calling thread.

    \n

    See also: al_set_target_bitmap

    \n

    Examples:

    \n
      \n
    • ex_font_justify.cpp
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_color.cpp#L159\">ex_color.cpp\n
    • ex_resize.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_font_justify.cpp#L73\">ex_font_justify.cpp\n
    • ex_membmp.c
    • \n
    \n

    al_put_pixel

    \n
    void al_put_pixel(int x, int y, ALLEGRO_COLOR color)
    \n

    Source\n@@ -2539,17 +2496,17 @@\n href=\"graphics.html#al_get_target_bitmap\">al_get_target_bitmap, al_set_target_backbuffer

    \n

    Examples:

    \n
      \n
    • ex_nodisplay.c
    • \n
    • ex_opengl_pixel_shader.c
    • \n-
    • ex_blend_bench.c
    • \n+
    • ex_opengl_pixel_shader.c
    • \n
    \n

    al_set_target_backbuffer

    \n
    void al_set_target_backbuffer(ALLEGRO_DISPLAY *display)
    \n

    Source\n Code

    \n

    Same as\n@@ -2560,15 +2517,15 @@\n

    Examples:

    \n
      \n
    • ex_keyboard_focus.c
    • \n
    • ex_mouse_focus.c
    • \n
    • ex_opengl_pixel_shader.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_blend_bench.c#L92\">ex_blend_bench.c\n
    \n

    al_get_current_display

    \n
    ALLEGRO_DISPLAY *al_get_current_display(void)
    \n

    Source\n Code

    \n

    Return the display that is \u201ccurrent\u201d for the calling thread, or NULL\n@@ -2576,17 +2533,17 @@\n

    See also: al_set_target_bitmap

    \n

    Examples:

    \n
      \n
    • common.c
    • \n
    • ex_vsync.c
    • \n-
    • ex_color2.c
    • \n+
    • ex_vertex_buffer.c
    • \n
    \n

    Blending modes

    \n

    al_get_blender

    \n
    void al_get_blender(int *op, int *src, int *dst)
    \n

    Source\n Code

    \n@@ -2724,17 +2681,17 @@\n al_set_blend_color, al_get_blender

    \n

    Examples:

    \n
      \n
    • ex_blend_bench.c
    • \n
    • ex_rotate.c
    • \n-
    • ex_membmp.c
    • \n+
    • ex_cpu.c
    • \n
    \n

    al_set_separate_blender

    \n
    void al_set_separate_blender(int op, int src, int dst,\n int alpha_op, int alpha_src, int alpha_dst)
    \n

    Source\n@@ -2804,19 +2761,19 @@\n

    See also: al_get_clipping_rectangle,\n al_reset_clipping_rectangle

    \n

    Examples:

    \n
      \n
    • nihgui.cpp
    • \n+
    • ex_rotate.c
    • \n
    • ex_scale.c
    • \n-
    • ex_lines.c
    • \n
    \n

    al_reset_clipping_rectangle

    \n
    void al_reset_clipping_rectangle(void)
    \n

    Source\n Code

    \n@@ -2837,17 +2794,17 @@\n

    Convert the given mask color to an alpha channel in the bitmap. Can\n be used to convert older 4.2-style bitmaps with magic pink to\n alpha-ready bitmaps.

    \n

    See also: ALLEGRO_COLOR

    \n

    Examples:

    \n
      \n
    • ex_android.c
    • \n-
    • ex_projection.c
    • \n+
    • ex_android.c
    • \n
    \n

    Deferred drawing

    \n

    al_hold_bitmap_drawing

    \n
    void al_hold_bitmap_drawing(bool hold)
    \n

    Source\n@@ -2873,17 +2830,17 @@\n

    See also: al_is_bitmap_drawing_held

    \n

    Examples:

    \n
      \n
    • ex_depth_mask.c
    • \n
    • ex_draw_bitmap.c
    • \n-
    • ex_ttf.c
    • \n+
    • ex_draw_bitmap.c
    • \n
    \n

    al_is_bitmap_drawing_held

    \n
    bool al_is_bitmap_drawing_held(void)
    \n

    Source\n Code

    \n@@ -3004,15 +2961,15 @@\n

    Examples:

    \n
      \n
    • ex_convert.c
    • \n
    • ex_nodisplay.c
    • \n
    • ex_file_slice.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_mouse.c#L58\">ex_mouse.c\n
    \n

    al_load_bitmap_flags

    \n
    ALLEGRO_BITMAP *al_load_bitmap_flags(const char *filename, int flags)
    \n

    Source\n Code

    \n@@ -3150,15 +3107,15 @@\n

    Examples:

    \n
      \n
    • ex_convert.c
    • \n
    • ex_file_slice.c
    • \n
    • ex_bitmap_file.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_record_name.c#L88\">ex_record_name.c\n
    \n

    al_load_bitmap_flags_f

    \n
    ALLEGRO_BITMAP *al_load_bitmap_flags_f(ALLEGRO_FILE *fp,\n const char *ident, int flags)
    \n

    Source\n@@ -3415,15 +3372,15 @@\n

    Examples:

    \n
      \n
    • ex_depth_mask.c
    • \n
    • ex_depth_target.c
    • \n
    • ex_draw_bitmap.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_camera.c#L336\">ex_camera.c\n
    \n

    al_backup_dirty_bitmap

    \n
    void al_backup_dirty_bitmap(ALLEGRO_BITMAP *bitmap)
    \n

    Source\n Code

    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -174,41 +174,37 @@\n *\b**\b**\b**\b**\b**\b* C\bCo\bol\blo\bor\brs\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_C\bCO\bOL\bLO\bOR\bR *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_COLOR ALLEGRO_COLOR;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An ALLEGRO_COLOR structure describes a color in a device independent way. Use\n _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb et al.\u00a0and _\ba_\bl_\b__\bu_\bn_\bm_\ba_\bp_\b__\br_\bg_\bb et al.\u00a0to translate from and to various\n color representations.\n-Examples:\n- * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_m\bma\bap\bp_\b_r\brg\bgb\bb *\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_map_rgb(\n unsigned char r, unsigned char g, unsigned char b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert r, g, b (ranging from 0-255) into an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR, using 255 for\n alpha.\n This function can be called before Allegro is initialized.\n See also: _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\ba, _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\ba_\b__\bf, _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\b__\bf\n Examples:\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bs_\be_\br_\bv_\be_\br_\b._\bc\n * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_m\bma\bap\bp_\b_r\brg\bgb\bb_\b_f\bf *\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert r, g, b, (ranging from 0.0f-1.0f) into an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR, using 1.0f for\n alpha.\n This function can be called before Allegro is initialized.\n See also: _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\ba, _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb, _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\ba_\b__\bf\n Examples:\n * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bs_\be_\br_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\bd_\br_\ba_\bw_\bp_\bi_\bx_\be_\bl_\bs_\b._\bc\n+ * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_m\bma\bap\bp_\b_r\brg\bgb\bba\ba *\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_map_rgba(\n unsigned char r, unsigned char g, unsigned char b, unsigned char a)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert r, g, b, a (ranging from 0-255) into an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR.\n This function can be called before Allegro is initialized.\n See also: _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb, _\ba_\bl_\b__\bp_\br_\be_\bm_\bu_\bl_\b__\br_\bg_\bb_\ba, _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\b__\bf\n@@ -240,16 +236,16 @@\n ALLEGRO_COLOR al_map_rgba_f(float r, float g, float b, float a)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert r, g, b, a (ranging from 0.0f-1.0f) into an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR.\n This function can be called before Allegro is initialized.\n See also: _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\ba, _\ba_\bl_\b__\bp_\br_\be_\bm_\bu_\bl_\b__\br_\bg_\bb_\ba_\b__\bf, _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\b__\bf\n Examples:\n * _\be_\bx_\b__\bt_\bi_\bm_\be_\bd_\bw_\ba_\bi_\bt_\b._\bc\n+ * _\be_\bx_\b__\bc_\bp_\bu_\b._\bc\n * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b._\bc\n- * _\be_\bx_\b__\br_\bo_\bt_\ba_\bt_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_p\bpr\bre\bem\bmu\bul\bl_\b_r\brg\bgb\bba\ba_\b_f\bf *\b**\b**\b**\b**\b*\n ALLEGRO_COLOR al_premul_rgba_f(float r, float g, float b, float a)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This is a shortcut for _\ba_\bl_\b__\bm_\ba_\bp_\b__\br_\bg_\bb_\ba_\b__\bf(r * a, g * a, b * a, a).\n By default Allegro uses pre-multiplied alpha for transparent blending of\n bitmaps and primitives (see _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs for a discussion of that\n feature). This means that if you want to tint a bitmap or primitive to be\n@@ -332,18 +328,14 @@\n * p\bpi\bix\bxe\bel\bl_\b_s\bsi\biz\bze\be is the number of bytes used to represent a single block of\n pixels for the pixel format of this locked region. For most formats (and\n historically, this used to be true for all formats), this is just the\n size of a single pixel, but for blocked pixel formats this value is\n different.\n See also: _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn, _\ba_\bl_\b__\bu_\bn_\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp,\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bI_\bX_\bE_\bL_\b__\bF_\bO_\bR_\bM_\bA_\bT\n-Examples:\n- * _\be_\bx_\b__\bl_\bo_\bc_\bk_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\be_\bm_\bu_\bl_\ba_\bl_\bp_\bh_\ba_\b._\bc\n- * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bs_\ba_\bm_\bp_\bl_\be_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_P\bPI\bIX\bXE\bEL\bL_\b_F\bFO\bOR\bRM\bMA\bAT\bT *\b**\b**\b**\b**\b*\n typedef enum ALLEGRO_PIXEL_FORMAT\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Pixel formats. Each pixel format specifies the exact size and bit layout of a\n pixel in memory. Components are specified from high bits to low bits, so for\n example a fully opaque red pixel in ARGB_8888 format is 0xFFFF0000.\n N\bNo\bot\bte\be:\b:\n@@ -439,18 +431,14 @@\n resulting in 4x compression ratio. This format supports sharp alpha\n transitions. Since 5.1.9.\n * ALLEGRO_PIXEL_FORMAT_COMPRESSED_RGBA_DXT5 - Compressed using the DXT5\n compression algorithm. Each 4x4 pixel block is encoded in 128 bytes,\n resulting in 4x compression ratio. This format supports smooth alpha\n transitions. Since 5.1.9.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\br_\bm_\ba_\bt, _\ba_\bl_\b__\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\br_\bm_\ba_\bt\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b._\bc\n- * _\be_\bx_\b__\bd_\br_\ba_\bw_\bp_\bi_\bx_\be_\bl_\bs_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\bc_\bk_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_p\bpi\bix\bxe\bel\bl_\b_s\bsi\biz\bze\be *\b**\b**\b**\b**\b*\n int al_get_pixel_size(int format)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the number of bytes that a pixel of the given format occupies. For\n blocked pixel formats (e.g.\u00a0compressed formats), this returns 0.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bI_\bX_\bE_\bL_\b__\bF_\bO_\bR_\bM_\bA_\bT, _\ba_\bl_\b__\bg_\be_\bt_\b__\bp_\bi_\bx_\be_\bl_\b__\bf_\bo_\br_\bm_\ba_\bt_\b__\bb_\bi_\bt_\bs\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_p\bpi\bix\bxe\bel\bl_\b_f\bfo\bor\brm\bma\bat\bt_\b_b\bbi\bit\bts\bs *\b**\b**\b**\b**\b*\n@@ -519,15 +507,15 @@\n operations on it (with the sole exception of _\ba_\bl_\b__\bp_\bu_\bt_\b__\bp_\bi_\bx_\be_\bl and\n _\ba_\bl_\b__\bp_\bu_\bt_\b__\bb_\bl_\be_\bn_\bd_\be_\bd_\b__\bp_\bi_\bx_\be_\bl).\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bL_\bO_\bC_\bK_\bE_\bD_\b__\bR_\bE_\bG_\bI_\bO_\bN, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bI_\bX_\bE_\bL_\b__\bF_\bO_\bR_\bM_\bA_\bT, _\ba_\bl_\b__\bu_\bn_\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp,\n _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bb_\bl_\bo_\bc_\bk_\be_\bd, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn_\b__\bb_\bl_\bo_\bc_\bk_\be_\bd\n Examples:\n * _\be_\bx_\b__\bd_\br_\ba_\bw_\bp_\bi_\bx_\be_\bl_\bs_\b._\bc\n * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\bc_\bk_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n+ * _\be_\bx_\b__\bp_\br_\be_\bm_\bu_\bl_\ba_\bl_\bp_\bh_\ba_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boc\bck\bk_\b_b\bbi\bit\btm\bma\bap\bp_\b_r\bre\beg\bgi\bio\bon\bn *\b**\b**\b**\b**\b*\n ALLEGRO_LOCKED_REGION *al_lock_bitmap_region(ALLEGRO_BITMAP *bitmap,\n int x, int y, int width, int height, int format, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp, but only locks a specific area of the bitmap. If the\n bitmap is a video bitmap, only that area of the texture will be updated when it\n is unlocked. Locking only the region you indend to modify will be faster than\n@@ -539,27 +527,27 @@\n is not, then the function will have to lock the region with the\n ALLEGRO_LOCK_READWRITE instead in order to pad this region with valid\n data.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bL_\bO_\bC_\bK_\bE_\bD_\b__\bR_\bE_\bG_\bI_\bO_\bN, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bI_\bX_\bE_\bL_\b__\bF_\bO_\bR_\bM_\bA_\bT, _\ba_\bl_\b__\bu_\bn_\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n * _\be_\bx_\b__\bl_\bo_\bc_\bk_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n * _\be_\bx_\b__\bc_\bo_\bm_\bp_\br_\be_\bs_\bs_\be_\bd_\b._\bc\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n+ * _\be_\bx_\b__\bb_\bl_\bi_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bnl\blo\boc\bck\bk_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n void al_unlock_bitmap(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Unlock a previously locked bitmap or bitmap region. If the bitmap is a video\n bitmap, the texture will be updated to match the system memory copy (unless it\n was locked read only).\n See also: _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bb_\bl_\bo_\bc_\bk_\be_\bd,\n _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn_\b__\bb_\bl_\bo_\bc_\bk_\be_\bd\n Examples:\n * _\be_\bx_\b__\bd_\br_\ba_\bw_\bp_\bi_\bx_\be_\bl_\bs_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\bc_\bk_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n * _\be_\bx_\b__\bp_\br_\be_\bm_\bu_\bl_\ba_\bl_\bp_\bh_\ba_\b._\bc\n+ * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b2_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boc\bck\bk_\b_b\bbi\bit\btm\bma\bap\bp_\b_b\bbl\blo\boc\bck\bke\bed\bd *\b**\b**\b**\b**\b*\n ALLEGRO_LOCKED_REGION *al_lock_bitmap_blocked(ALLEGRO_BITMAP *bitmap,\n int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp, but allows locking bitmaps with a blocked pixel format\n (i.e.\u00a0a format for which _\ba_\bl_\b__\bg_\be_\bt_\b__\bp_\bi_\bx_\be_\bl_\b__\bb_\bl_\bo_\bc_\bk_\b__\bw_\bi_\bd_\bt_\bh or _\ba_\bl_\b__\bg_\be_\bt_\b__\bp_\bi_\bx_\be_\bl_\b__\bb_\bl_\bo_\bc_\bk_\b__\bh_\be_\bi_\bg_\bh_\bt\n do not return 1) in that format. To that end, this function also does not allow\n@@ -582,18 +570,14 @@\n Examples:\n * _\be_\bx_\b__\bc_\bo_\bm_\bp_\br_\be_\bs_\bs_\be_\bd_\b._\bc\n *\b**\b**\b**\b**\b**\b* B\bBi\bit\btm\bma\bap\bp c\bcr\bre\bea\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_B\bBI\bIT\bTM\bMA\bAP\bP *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_BITMAP ALLEGRO_BITMAP;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Abstract type representing a bitmap (2D image).\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b._\bc\n- * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b__\bp_\bi_\bx_\be_\bl_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n ALLEGRO_BITMAP *al_create_bitmap(int w, int h)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates a new bitmap using the bitmap format and flags for the current thread.\n Blitting between bitmaps of differing formats, or blitting between memory\n bitmaps and display bitmaps may be slow.\n Unless you set the ALLEGRO_MEMORY_BITMAP flag, the bitmap is created for the\n@@ -672,17 +656,17 @@\n bitmap across. The newly created bitmap will be created with the current new\n bitmap flags, and not the ones that were used to create the original bitmap. If\n the new bitmap is a memory bitmap, its projection bitmap is reset to be\n orthographic.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\br_\bm_\ba_\bt, _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs,\n _\ba_\bl_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n- * _\be_\bx_\b__\bs_\bu_\bb_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b._\bc\n * _\be_\bx_\b__\bp_\br_\be_\bm_\bu_\bl_\ba_\bl_\bp_\bh_\ba_\b._\bc\n+ * _\be_\bx_\b__\bs_\bu_\bb_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bon\bnv\bve\ber\brt\bt_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n void al_convert_bitmap(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Converts the bitmap to the current bitmap flags and format. The bitmap will be\n as if it was created anew with _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bb_\bi_\bt_\bm_\ba_\bp but retain its contents. All of\n this bitmap\u2019s sub-bitmaps are also converted. If the new bitmap type is memory,\n then the bitmap\u2019s projection bitmap is reset to be orthographic.\n@@ -799,15 +783,15 @@\n scaled down versions. For example if the bitmap is 64x64, then extra\n bitmaps of sizes 32x32, 16x16, 8x8, 4x4, 2x2 and 1x1 will be created\n always containing a scaled down version of the original.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs\n Examples:\n * _\be_\bx_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b._\bc\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n- * _\be_\bx_\b__\bi_\bc_\bo_\bn_\b2_\b._\bc\n+ * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_a\bad\bdd\bd_\b_n\bne\bew\bw_\b_b\bbi\bit\btm\bma\bap\bp_\b_f\bfl\bla\bag\bg *\b**\b**\b**\b**\b*\n void al_add_new_bitmap_flag(int flag)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A convenience function which does the same as\n al_set_new_bitmap_flags(al_get_new_bitmap_flags() | flag);\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs\n Examples:\n@@ -894,16 +878,16 @@\n addon which (for backwards compatibility) alters the wrapping\n setting. To minimize this issue, use a wrapping setting that\u2019s not\n ALLEGRO_BITMAP_WRAP_DEFAULT.\n Since: 5.2.8\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: This is an experimental feature.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bB_\bI_\bT_\bM_\bA_\bP_\b__\bW_\bR_\bA_\bP\n Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bw_\br_\ba_\bp_\b._\bc\n * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n+ * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bw_\br_\ba_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_n\bne\bew\bw_\b_b\bbi\bit\btm\bma\bap\bp_\b_w\bwr\bra\bap\bp *\b**\b**\b**\b**\b*\n Source Code\n Returns the value currently set with _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bw_\br_\ba_\bp on the current\n thread.\n Since: 5.2.8\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: This is an experimental feature.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bB_\bI_\bT_\bM_\bA_\bP_\b__\bW_\bR_\bA_\bP\n@@ -917,17 +901,14 @@\n ALLEGRO_BITMAP_WRAP_CLAMP otherwise.\n * ALLEGRO_BITMAP_WRAP_REPEAT - The texture coordinates get shifted to the\n opposite edge that they go past.\n * ALLEGRO_BITMAP_WRAP_CLAMP - The texture coordinates get clamped to the\n edges that they go past.\n * ALLEGRO_BITMAP_WRAP_MIRROR - The texture coordinates get mirrored across\n the edges that they go past.\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bw_\br_\ba_\bp_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b**\b* B\bBi\bit\btm\bma\bap\bp p\bpr\bro\bop\bpe\ber\brt\bti\bie\bes\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_b\bbi\bit\btm\bma\bap\bp_\b_f\bfl\bla\bag\bgs\bs *\b**\b**\b**\b**\b*\n int al_get_bitmap_flags(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the flags used to create the bitmap.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs\n Examples:\n@@ -942,25 +923,25 @@\n * _\be_\bx_\b__\bc_\bo_\bm_\bp_\br_\be_\bs_\bs_\be_\bd_\b._\bc\n * _\be_\bx_\b__\bd_\br_\ba_\bw_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_b\bbi\bit\btm\bma\bap\bp_\b_h\bhe\bei\big\bgh\bht\bt *\b**\b**\b**\b**\b*\n int al_get_bitmap_height(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the height of a bitmap in pixels.\n Examples:\n- * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bw_\bi_\bn_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b._\bc\n+ * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n+ * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bw_\bi_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_b\bbi\bit\btm\bma\bap\bp_\b_w\bwi\bid\bdt\bth\bh *\b**\b**\b**\b**\b*\n int al_get_bitmap_width(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the width of a bitmap in pixels.\n Examples:\n+ * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bw_\bi_\bn_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b._\bc\n+ * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_b\bbi\bit\btm\bma\bap\bp_\b_d\bde\bep\bpt\bth\bh *\b**\b**\b**\b**\b*\n int al_get_bitmap_depth(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the depthbuffer depth used by this bitmap if it is used with\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\ba_\br_\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp.\n Since: 5.2.1\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: This is an experimental feature and currently only\n@@ -978,16 +959,16 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get a pixel\u2019s color value from the specified bitmap. This operation is slow on\n non-memory bitmaps. Consider locking the bitmap if you are going to use this\n function multiple times on the same bitmap.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR, _\ba_\bl_\b__\bp_\bu_\bt_\b__\bp_\bi_\bx_\be_\bl, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bt_\be_\bs_\bt_\b._\bc\n- * _\be_\bx_\b__\bc_\bo_\bm_\bp_\br_\be_\bs_\bs_\be_\bd_\b._\bc\n * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bc_\bo_\bm_\bp_\br_\be_\bs_\bs_\be_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_b\bbi\bit\btm\bma\bap\bp_\b_l\blo\boc\bck\bke\bed\bd *\b**\b**\b**\b**\b*\n bool al_is_bitmap_locked(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns whether or not a bitmap is already locked.\n See also: _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn, _\ba_\bl_\b__\bu_\bn_\bl_\bo_\bc_\bk_\b__\bb_\bi_\bt_\bm_\ba_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_c\bco\bom\bmp\bpa\bat\bti\bib\bbl\ble\be_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n bool al_is_compatible_bitmap(ALLEGRO_BITMAP *bitmap)\n@@ -1048,16 +1029,16 @@\n bitmap pointer stays the same. This has many uses, for example an animation\n player could return a single bitmap which can just be re-parented to different\n animation frames without having to re-draw the contents. Or a sprite atlas\n could re-arrange its sprites without having to invalidate all existing bitmaps.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bs_\bu_\bb_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bg_\be_\bt_\b__\bp_\ba_\br_\be_\bn_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Since: 5.1.12\n Examples:\n- * _\be_\bx_\b__\br_\be_\bp_\ba_\br_\be_\bn_\bt_\b._\bc\n * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n+ * _\be_\bx_\b__\br_\be_\bp_\ba_\br_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_b\bbi\bit\btm\bma\bap\bp_\b_b\bbl\ble\ben\bnd\bde\ber\br *\b**\b**\b**\b**\b*\n void al_get_bitmap_blender(int *op, int *src, int *dst)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the current blender being used by the target bitmap. You can pass NULL\n for values you are not interested in.\n Since: 5.2.5\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: New API.\n@@ -1129,17 +1110,17 @@\n created in a thread.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcl\ble\bea\bar\br_\b_t\bto\bo_\b_c\bco\bol\blo\bor\br *\b**\b**\b**\b**\b*\n void al_clear_to_color(ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Clear the complete target bitmap, but confined by the clipping rectangle.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR, _\ba_\bl_\b__\bs_\be_\bt_\b__\bc_\bl_\bi_\bp_\bp_\bi_\bn_\bg_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be, _\ba_\bl_\b__\bc_\bl_\be_\ba_\br_\b__\bd_\be_\bp_\bt_\bh_\b__\bb_\bu_\bf_\bf_\be_\br\n Examples:\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcl\ble\bea\bar\br_\b_d\bde\bep\bpt\bth\bh_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void al_clear_depth_buffer(float z)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Clear the depth buffer (confined by the clipping rectangle) to the given value.\n A depth buffer is only available if it was requested with\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn and the requirement could be met by the\n _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by call creating the current display. Operations involving the\n@@ -1149,15 +1130,15 @@\n when clearing the depth buffer.\n Since: 5.1.2\n See also: _\ba_\bl_\b__\bc_\bl_\be_\ba_\br_\b__\bt_\bo_\b__\bc_\bo_\bl_\bo_\br, _\ba_\bl_\b__\bs_\be_\bt_\b__\bc_\bl_\bi_\bp_\bp_\bi_\bn_\bg_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be, _\ba_\bl_\b__\bs_\be_\bt_\b__\br_\be_\bn_\bd_\be_\br_\b__\bs_\bt_\ba_\bt_\be,\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bo_\bp_\bt_\bi_\bo_\bn\n Examples:\n * _\be_\bx_\b__\bd_\be_\bp_\bt_\bh_\b__\bm_\ba_\bs_\bk_\b._\bc\n * _\be_\bx_\b__\bd_\be_\bp_\bt_\bh_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b2_\b._\bc\n+ * _\be_\bx_\b__\bc_\ba_\bm_\be_\br_\ba_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n void al_draw_bitmap(ALLEGRO_BITMAP *bitmap, float dx, float dy, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an unscaled, unrotated bitmap at the given position to the current target\n bitmap (see _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\ba_\br_\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp).\n flags can be a combination of:\n * ALLEGRO_FLIP_HORIZONTAL - flip the bitmap about the y-axis\n@@ -1172,15 +1153,15 @@\n draw it to a temporary bitmap first with no active transformation\n (except translation). Blending and tinting settings/parameters will\n be ignored. This does not apply when drawing into a memory bitmap.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\br_\bo_\bt_\ba_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp,\n _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\br_\bo_\bt_\ba_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b__\bp_\bi_\bx_\be_\bl_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b._\bc\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_t\bti\bin\bnt\bte\bed\bd_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n void al_draw_tinted_bitmap(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR tint,\n float dx, float dy, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp but multiplies all colors in the bitmap with the given\n color. For example:\n@@ -1190,16 +1171,16 @@\n al_draw_tinted_bitmap(bitmap, al_map_rgba_f(1, 0, 0, 1), x, y, 0);\n The above will only draw the red component of the bitmap.\n See _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp for a note on restrictions on which bitmaps can be drawn\n where.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\be_\bx_\b__\be_\bx_\bp_\bo_\bs_\be_\b._\bc\n * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\bi_\bp_\b._\bc\n+ * _\be_\bx_\b__\be_\bx_\bp_\bo_\bs_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_b\bbi\bit\btm\bma\bap\bp_\b_r\bre\beg\bgi\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_draw_bitmap_region(ALLEGRO_BITMAP *bitmap,\n float sx, float sy, float sw, float sh, float dx, float dy, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a region of the given bitmap to the target bitmap.\n * sx - source x\n * sy - source y\n@@ -1210,30 +1191,30 @@\n * flags - same as for _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp\n See _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp for a note on restrictions on which bitmaps can be drawn\n where.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\br_\bo_\bt_\ba_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp,\n _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\br_\bo_\bt_\ba_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b._\bc\n+ * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b._\bc\n * _\be_\bx_\b__\bc_\bl_\bi_\bp_\b._\bc\n- * _\be_\bx_\b__\bb_\bl_\bi_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_t\bti\bin\bnt\bte\bed\bd_\b_b\bbi\bit\btm\bma\bap\bp_\b_r\bre\beg\bgi\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_draw_tinted_bitmap_region(ALLEGRO_BITMAP *bitmap,\n ALLEGRO_COLOR tint,\n float sx, float sy, float sw, float sh, float dx, float dy,\n int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn but multiplies all colors in the bitmap with the\n given color.\n See _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp for a note on restrictions on which bitmaps can be drawn\n where.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\bi_\bn_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n- * _\be_\bx_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\b._\bc\n * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n+ * _\be_\bx_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_p\bpi\bix\bxe\bel\bl *\b**\b**\b**\b**\b*\n void al_draw_pixel(float x, float y, ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a single pixel at x, y. This function, unlike _\ba_\bl_\b__\bp_\bu_\bt_\b__\bp_\bi_\bx_\be_\bl, does blending\n and, unlike _\ba_\bl_\b__\bp_\bu_\bt_\b__\bb_\bl_\be_\bn_\bd_\be_\bd_\b__\bp_\bi_\bx_\be_\bl, respects the transformations (that is, the\n pixel\u2019s position is transformed, but its size is unaffected - it remains a\n pixel). This function can be slow if called often; if you need to draw a lot of\n@@ -1245,16 +1226,16 @@\n N\bNo\bot\bte\be:\b: This function may not draw exactly where you expect it to. See\n the _\bp_\bi_\bx_\be_\bl_\b-_\bp_\br_\be_\bc_\bi_\bs_\be_\b _\bo_\bu_\bt_\bp_\bu_\bt_\b _\bs_\be_\bc_\bt_\bi_\bo_\bn on the primitives addon\n documentation for details on how to control exactly where the pixel\n is drawn.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR, _\ba_\bl_\b__\bp_\bu_\bt_\b__\bp_\bi_\bx_\be_\bl\n Examples:\n * _\be_\bx_\b__\bd_\br_\ba_\bw_\bp_\bi_\bx_\be_\bl_\bs_\b._\bc\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bt_\be_\bs_\bt_\b._\bc\n * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n+ * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b2_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_r\bro\bot\bta\bat\bte\bed\bd_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n void al_draw_rotated_bitmap(ALLEGRO_BITMAP *bitmap,\n float cx, float cy, float dx, float dy, float angle, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a rotated version of the given bitmap to the target bitmap. The bitmap is\n rotated by \u2018angle\u2019 radians clockwise.\n The point at cx/cy relative to the upper left corner of the bitmap will be\n@@ -1310,30 +1291,30 @@\n See _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp for a note on restrictions on which bitmaps can be drawn\n where.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp,\n _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\br_\bo_\bt_\ba_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n- * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bi_\bl_\be_\b._\bc\n+ * _\be_\bx_\b__\bp_\br_\be_\bm_\bu_\bl_\ba_\bl_\bp_\bh_\ba_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_t\bti\bin\bnt\bte\bed\bd_\b_s\bsc\bca\bal\ble\bed\bd_\b_r\bro\bot\bta\bat\bte\bed\bd_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n void al_draw_tinted_scaled_rotated_bitmap(ALLEGRO_BITMAP *bitmap,\n ALLEGRO_COLOR tint,\n float cx, float cy, float dx, float dy, float xscale, float yscale,\n float angle, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\br_\bo_\bt_\ba_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp but multiplies all colors in the bitmap with\n the given color.\n See _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp for a note on restrictions on which bitmaps can be drawn\n where.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\bi_\bn_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n * _\be_\bx_\b__\br_\bo_\bt_\ba_\bt_\be_\b._\bc\n- * _\be_\bx_\b__\bh_\ba_\bi_\bk_\bu_\b._\bc\n * _\be_\bx_\b__\bm_\bi_\bx_\be_\br_\b__\bp_\bp_\b._\bc\n+ * _\be_\bx_\b__\bh_\ba_\bi_\bk_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_t\bti\bin\bnt\bte\bed\bd_\b_s\bsc\bca\bal\ble\bed\bd_\b_r\bro\bot\bta\bat\bte\bed\bd_\b_b\bbi\bit\btm\bma\bap\bp_\b_r\bre\beg\bgi\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_draw_tinted_scaled_rotated_bitmap_region(ALLEGRO_BITMAP *bitmap,\n float sx, float sy, float sw, float sh,\n ALLEGRO_COLOR tint,\n float cx, float cy, float dx, float dy, float xscale, float yscale,\n float angle, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n@@ -1369,15 +1350,15 @@\n See _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp for a note on restrictions on which bitmaps can be drawn\n where.\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\br_\be_\bg_\bi_\bo_\bn, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\br_\bo_\bt_\ba_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp,\n _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\br_\bo_\bt_\ba_\bt_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp,\n Examples:\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n * _\be_\bx_\b__\bd_\bu_\ba_\bl_\bi_\be_\bs_\b._\bc\n- * _\be_\bx_\b__\bm_\bu_\bl_\bt_\bi_\bw_\bi_\bn_\b._\bc\n+ * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_t\bti\bin\bnt\bte\bed\bd_\b_s\bsc\bca\bal\ble\bed\bd_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n void al_draw_tinted_scaled_bitmap(ALLEGRO_BITMAP *bitmap,\n ALLEGRO_COLOR tint,\n float sx, float sy, float sw, float sh,\n float dx, float dy, float dw, float dh, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp but multiplies all colors in the bitmap with the\n@@ -1391,16 +1372,16 @@\n * _\be_\bx_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_t\bta\bar\brg\bge\bet\bt_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n ALLEGRO_BITMAP *al_get_target_bitmap(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the target bitmap of the calling thread.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\ba_\br_\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n+ * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b._\bc\n * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_p\bpu\but\bt_\b_p\bpi\bix\bxe\bel\bl *\b**\b**\b**\b**\b*\n void al_put_pixel(int x, int y, ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draw a single pixel on the target bitmap. This operation is slow on non-memory\n bitmaps. Consider locking the bitmap if you are going to use this function\n multiple times on the same bitmap. This function is not affected by the\n@@ -1464,35 +1445,35 @@\n al_set_target_bitmap(bitmap);\n al_draw_line(x1, y1, x2, y2, color, 0);\n An OpenGL command will be used to directly draw the line into the bitmap\u2019s\n associated texture.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\ba_\br_\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\ba_\br_\bg_\be_\bt_\b__\bb_\ba_\bc_\bk_\bb_\bu_\bf_\bf_\be_\br\n Examples:\n * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b__\bp_\bi_\bx_\be_\bl_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n+ * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b__\bp_\bi_\bx_\be_\bl_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_t\bta\bar\brg\bge\bet\bt_\b_b\bba\bac\bck\bkb\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void al_set_target_backbuffer(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Same as al_set_target_bitmap(al_get_backbuffer(display));\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\ba_\br_\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\bg_\be_\bt_\b__\bb_\ba_\bc_\bk_\bb_\bu_\bf_\bf_\be_\br\n Examples:\n * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b__\bp_\bi_\bx_\be_\bl_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_c\bcu\bur\brr\bre\ben\bnt\bt_\b_d\bdi\bis\bsp\bpl\bla\bay\by *\b**\b**\b**\b**\b*\n ALLEGRO_DISPLAY *al_get_current_display(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the display that is \u201ccurrent\u201d for the calling thread, or NULL if there\n is none.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\ba_\br_\bg_\be_\bt_\b__\bb_\bi_\bt_\bm_\ba_\bp\n Examples:\n * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bv_\bs_\by_\bn_\bc_\b._\bc\n * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b2_\b._\bc\n+ * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* B\bBl\ble\ben\bnd\bdi\bin\bng\bg m\bmo\bod\bde\bes\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_b\bbl\ble\ben\bnd\bde\ber\br *\b**\b**\b**\b**\b*\n void al_get_blender(int *op, int *src, int *dst)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the active blender for the current thread. You can pass NULL for values\n you are not interested in.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bb_\bl_\be_\bn_\bd_\be_\br, _\ba_\bl_\b__\bg_\be_\bt_\b__\bs_\be_\bp_\ba_\br_\ba_\bt_\be_\b__\bb_\bl_\be_\bn_\bd_\be_\br\n@@ -1589,16 +1570,16 @@\n r = d.r * 0 + s.r * d.r\n g = d.g * 0 + s.g * d.g\n b = d.b * 0 + s.b * d.b\n a = d.a * 0 + s.a * d.a\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bs_\be_\bp_\ba_\br_\ba_\bt_\be_\b__\bb_\bl_\be_\bn_\bd_\be_\br, _\ba_\bl_\b__\bs_\be_\bt_\b__\bb_\bl_\be_\bn_\bd_\b__\bc_\bo_\bl_\bo_\br, _\ba_\bl_\b__\bg_\be_\bt_\b__\bb_\bl_\be_\bn_\bd_\be_\br\n Examples:\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n- * _\be_\bx_\b__\br_\bo_\bt_\ba_\bt_\be_\b._\bc\n * _\be_\bx_\b__\bm_\be_\bm_\bb_\bm_\bp_\b._\bc\n+ * _\be_\bx_\b__\bc_\bp_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bse\bep\bpa\bar\bra\bat\bte\be_\b_b\bbl\ble\ben\bnd\bde\ber\br *\b**\b**\b**\b**\b*\n void al_set_separate_blender(int op, int src, int dst,\n int alpha_op, int alpha_src, int alpha_dst)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bs_\be_\bt_\b__\bb_\bl_\be_\bn_\bd_\be_\br, but allows specifying a separate blending operation for\n the alpha channel. This is useful if your target bitmap also has an alpha\n channel and the two alpha channels need to be combined in a different way than\n@@ -1631,17 +1612,17 @@\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_c\bcl\bli\bip\bpp\bpi\bin\bng\bg_\b_r\bre\bec\bct\bta\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_set_clipping_rectangle(int x, int y, int width, int height)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the region of the target bitmap or display that pixels get clipped to. The\n default is to clip pixels to the entire bitmap.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bc_\bl_\bi_\bp_\bp_\bi_\bn_\bg_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be, _\ba_\bl_\b__\br_\be_\bs_\be_\bt_\b__\bc_\bl_\bi_\bp_\bp_\bi_\bn_\bg_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be\n Examples:\n+ * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\br_\bo_\bt_\ba_\bt_\be_\b._\bc\n * _\be_\bx_\b__\bs_\bc_\ba_\bl_\be_\b._\bc\n- * _\be_\bx_\b__\bl_\bi_\bn_\be_\bs_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bes\bse\bet\bt_\b_c\bcl\bli\bip\bpp\bpi\bin\bng\bg_\b_r\bre\bec\bct\bta\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_reset_clipping_rectangle(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Equivalent to calling `al_set_clipping_rectangle(0, 0, w, h)\u2019 where w\bw and h\bh are\n the width and height of the target bitmap respectively.\n Does nothing if there is no target bitmap.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bc_\bl_\bi_\bp_\bp_\bi_\bn_\bg_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be\n@@ -1650,16 +1631,16 @@\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bon\bnv\bve\ber\brt\bt_\b_m\bma\bas\bsk\bk_\b_t\bto\bo_\b_a\bal\blp\bph\bha\ba *\b**\b**\b**\b**\b*\n void al_convert_mask_to_alpha(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR mask_color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert the given mask color to an alpha channel in the bitmap. Can be used to\n convert older 4.2-style bitmaps with magic pink to alpha-ready bitmaps.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR\n Examples:\n- * _\be_\bx_\b__\ba_\bn_\bd_\br_\bo_\bi_\bd_\b._\bc\n * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b._\bc\n+ * _\be_\bx_\b__\ba_\bn_\bd_\br_\bo_\bi_\bd_\b._\bc\n *\b**\b**\b**\b**\b**\b* D\bDe\bef\bfe\ber\brr\bre\bed\bd d\bdr\bra\baw\bwi\bin\bng\bg *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_h\bho\bol\bld\bd_\b_b\bbi\bit\btm\bma\bap\bp_\b_d\bdr\bra\baw\bwi\bin\bng\bg *\b**\b**\b**\b**\b*\n void al_hold_bitmap_drawing(bool hold)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Enables or disables deferred bitmap drawing. This allows for efficient drawing\n of many bitmaps that share a parent bitmap, such as sub-bitmaps from a\n tilesheet or simply identical bitmaps. Drawing bitmaps that do not share a\n@@ -1675,16 +1656,16 @@\n as many bitmaps as possible, taking care to stagger bitmaps that share parent\n bitmaps, and then disable deferred drawing. As mentioned above, this function\n also works with bitmap and truetype fonts, so if multiple lines of text need to\n be drawn, this function can speed things up.\n See also: _\ba_\bl_\b__\bi_\bs_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bd_\br_\ba_\bw_\bi_\bn_\bg_\b__\bh_\be_\bl_\bd\n Examples:\n * _\be_\bx_\b__\bd_\be_\bp_\bt_\bh_\b__\bm_\ba_\bs_\bk_\b._\bc\n- * _\be_\bx_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n+ * _\be_\bx_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_b\bbi\bit\btm\bma\bap\bp_\b_d\bdr\bra\baw\bwi\bin\bng\bg_\b_h\bhe\bel\bld\bd *\b**\b**\b**\b**\b*\n bool al_is_bitmap_drawing_held(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns whether the deferred bitmap drawing mode is turned on or off.\n See also: _\ba_\bl_\b__\bh_\bo_\bl_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bd_\br_\ba_\bw_\bi_\bn_\bg\n *\b**\b**\b**\b**\b**\b* I\bIm\bma\bag\bge\be I\bI/\b/O\bO *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\beg\bgi\bis\bst\bte\ber\br_\b_b\bbi\bit\btm\bma\bap\bp_\b_l\blo\boa\bad\bde\ber\br *\b**\b**\b**\b**\b*\n@@ -1747,15 +1728,15 @@\n formats by default. You must use the allegro_image addon, or register\n your own format handler.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf, _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bl_\bo_\ba_\bd_\be_\br,\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bo_\br_\bm_\ba_\bt, _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bi_\bm_\ba_\bg_\be_\b__\ba_\bd_\bd_\bo_\bn\n Examples:\n * _\be_\bx_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b._\bc\n * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\be_\bx_\b__\bf_\bi_\bl_\be_\b__\bs_\bl_\bi_\bc_\be_\b._\bc\n+ * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_b\bbi\bit\btm\bma\bap\bp_\b_f\bfl\bla\bag\bgs\bs *\b**\b**\b**\b**\b*\n ALLEGRO_BITMAP *al_load_bitmap_flags(const char *filename, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Loads an image file into a new _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bB_\bI_\bT_\bM_\bA_\bP. The file type is determined by\n _\ba_\bl_\b__\bi_\bd_\be_\bn_\bt_\bi_\bf_\by_\b__\bb_\bi_\bt_\bm_\ba_\bp, using the extension as a fallback in case identification is\n not possible.\n Returns NULL on error.\n@@ -1848,15 +1829,15 @@\n formats by default. You must use the allegro_image addon, or register\n your own format handler.\n See also: _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bl_\ba_\bg_\bs_\b__\bf, _\ba_\bl_\b__\bl_\bo_\ba_\bd_\b__\bb_\bi_\bt_\bm_\ba_\bp, _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bl_\bo_\ba_\bd_\be_\br_\b__\bf,\n _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bi_\bm_\ba_\bg_\be_\b__\ba_\bd_\bd_\bo_\bn\n Examples:\n * _\be_\bx_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b._\bc\n * _\be_\bx_\b__\bf_\bi_\bl_\be_\b__\bs_\bl_\bi_\bc_\be_\b._\bc\n- * _\be_\bx_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf_\bi_\bl_\be_\b._\bc\n+ * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boa\bad\bd_\b_b\bbi\bit\btm\bma\bap\bp_\b_f\bfl\bla\bag\bgs\bs_\b_f\bf *\b**\b**\b**\b**\b*\n ALLEGRO_BITMAP *al_load_bitmap_flags_f(ALLEGRO_FILE *fp,\n const char *ident, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Loads an image from an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bF_\bI_\bL_\bE stream into a new _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bB_\bI_\bT_\bM_\bA_\bP. The file\n type is determined by _\ba_\bl_\b__\bi_\bd_\be_\bn_\bt_\bi_\bf_\by_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b__\bf. If identification is not possible,\n the passed \u2018ident\u2019 parameter, which is a file name extension including the\n@@ -2002,15 +1983,15 @@\n This function does nothing if the target bitmap is a memory bitmap.\n Since: 5.1.2\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bR_\bE_\bN_\bD_\bE_\bR_\b__\bS_\bT_\bA_\bT_\bE, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bR_\bE_\bN_\bD_\bE_\bR_\b__\bF_\bU_\bN_\bC_\bT_\bI_\bO_\bN,\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bW_\bR_\bI_\bT_\bE_\b__\bM_\bA_\bS_\bK_\b__\bF_\bL_\bA_\bG_\bS\n Examples:\n * _\be_\bx_\b__\bd_\be_\bp_\bt_\bh_\b__\bm_\ba_\bs_\bk_\b._\bc\n * _\be_\bx_\b__\bd_\be_\bp_\bt_\bh_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\bd_\br_\ba_\bw_\b__\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n+ * _\be_\bx_\b__\bc_\ba_\bm_\be_\br_\ba_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_b\bba\bac\bck\bku\bup\bp_\b_d\bdi\bir\brt\bty\by_\b_b\bbi\bit\btm\bma\bap\bp *\b**\b**\b**\b**\b*\n void al_backup_dirty_bitmap(ALLEGRO_BITMAP *bitmap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n On some platforms, notably Windows Direct3D and Android, textures may be lost\n at any time for events such as display resize or switching out of the app. On\n those platforms, bitmaps created without the ALLEGRO_NO_PRESERVE_TEXTURE flag\n automatically get backed up to system memory every time al_flip_display is\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/haptic.html", "source2": "./usr/share/doc/allegro5-doc/refman/haptic.html", "unified_diff": "@@ -265,21 +265,14 @@\n

    Unstable\n API: Perhaps could be simplified due to limited support for all\n the exposed features across all of the platforms. Awaiting feedback from\n users.

    \n \n

    See also: al_get_haptic_from_joystick

    \n-

    Examples:

    \n-
      \n-
    • ex_haptic.c
    • \n-
    • ex_haptic2.cpp
    • \n-
    \n

    ALLEGRO_HAPTIC_CONSTANTS

    \n
    enum ALLEGRO_HAPTIC_CONSTANTS
    \n

    Source\n Code

    \n

    This enum contains flags that are used to define haptic effects and\n capabilities. If the flag is set in the return value of Since: 5.1.8

    \n
    \n

    Unstable\n API: Perhaps could be simplified due to limited support for all\n the exposed features across all of the platforms. Awaiting feedback from\n users.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_haptic.c
    • \n-
    • ex_haptic2.cpp
    • \n-
    \n

    ALLEGRO_HAPTIC_EFFECT_ID

    \n
    typedef struct ALLEGRO_HAPTIC_EFFECT_ID ALLEGRO_HAPTIC_EFFECT_ID;
    \n

    Source\n Code

    \n

    This struct is used as a handle to control playback of a haptic\n effect and should be considered opaque. Its implementation is visible\n@@ -545,21 +531,14 @@\n

    Since: 5.1.8

    \n
    \n

    Unstable\n API: Perhaps could be simplified due to limited support for all\n the exposed features across all of the platforms. Awaiting feedback from\n users.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_haptic.c
    • \n-
    • ex_haptic2.cpp
    • \n-
    \n

    al_install_haptic

    \n
    bool al_install_haptic(void)
    \n

    Source\n Code

    \n

    Installs the haptic (force feedback) device subsystem. This must be\n called before using any other haptic-related functions. Returns true if\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -90,17 +90,14 @@\n This is an abstract data type representing a haptic device that supports force\n feedback or vibration.\n Since: 5.1.8\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: Perhaps could be simplified due to limited support for\n all the exposed features across all of the platforms. Awaiting\n feedback from users.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b__\bf_\br_\bo_\bm_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk\n-Examples:\n- * _\be_\bx_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b._\bc\n- * _\be_\bx_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b2_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_H\bHA\bAP\bPT\bTI\bIC\bC_\b_C\bCO\bON\bNS\bST\bTA\bAN\bNT\bTS\bS *\b**\b**\b**\b**\b**\b*\n enum ALLEGRO_HAPTIC_CONSTANTS\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This enum contains flags that are used to define haptic effects and\n capabilities. If the flag is set in the return value of\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b__\bc_\ba_\bp_\ba_\bb_\bi_\bl_\bi_\bt_\bi_\be_\bs, it means the device supports the given effect. The\n value of these flags should be set into a _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bH_\bA_\bP_\bT_\bI_\bC_\b__\bE_\bF_\bF_\bE_\bC_\bT struct to\n@@ -286,30 +283,24 @@\n If you don\u2019t want to use an envelope, then set all four fields of\n data.envelope to 0.0. The effect will then play back at full intensity\n throughout its playback.\n Since: 5.1.8\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: Perhaps could be simplified due to limited support for\n all the exposed features across all of the platforms. Awaiting\n feedback from users.\n-Examples:\n- * _\be_\bx_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b._\bc\n- * _\be_\bx_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b2_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_H\bHA\bAP\bPT\bTI\bIC\bC_\b_E\bEF\bFF\bFE\bEC\bCT\bT_\b_I\bID\bD *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_HAPTIC_EFFECT_ID ALLEGRO_HAPTIC_EFFECT_ID;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This struct is used as a handle to control playback of a haptic effect and\n should be considered opaque. Its implementation is visible merely to allow\n allocation by the users of the Allegro library.\n Since: 5.1.8\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: Perhaps could be simplified due to limited support for\n all the exposed features across all of the platforms. Awaiting\n feedback from users.\n-Examples:\n- * _\be_\bx_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b._\bc\n- * _\be_\bx_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b2_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bns\bst\bta\bal\bll\bl_\b_h\bha\bap\bpt\bti\bic\bc *\b**\b**\b**\b**\b**\b*\n bool al_install_haptic(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Installs the haptic (force feedback) device subsystem. This must be called\n before using any other haptic-related functions. Returns true if the haptics\n subsystem could be initialized correctly, false in case of error.\n For portability you should first open a display before calling\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/image.html", "source2": "./usr/share/doc/allegro5-doc/refman/image.html", "unified_diff": "@@ -207,23 +207,14 @@\n installed libraries, but are not guaranteed and should not be assumed to\n be universally available.

    \n

    The DDS format is only supported to load from, and only if the DDS\n file contains textures compressed in the DXT1, DXT3 and DXT5 formats.\n Note that when loading a DDS file, the created bitmap will always be a\n video bitmap and will have the pixel format matching the format in the\n file.

    \n-

    Examples:

    \n-
      \n-
    • ex_convert.c
    • \n-
    • ex_nodisplay.c
    • \n-
    • ex_opengl_pixel_shader.c
    • \n-
    \n al_is_image_addon_initialized\n
    bool al_is_image_addon_initialized(void)
    \n

    Source\n Code

    \n

    Returns true if the image addon is initialized, otherwise returns\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -64,18 +64,14 @@\n Other formats may be available depending on the operating system and installed\n libraries, but are not guaranteed and should not be assumed to be universally\n available.\n The DDS format is only supported to load from, and only if the DDS file\n contains textures compressed in the DXT1, DXT3 and DXT5 formats. Note that when\n loading a DDS file, the created bitmap will always be a video bitmap and will\n have the pixel format matching the format in the file.\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b._\bc\n- * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b__\bp_\bi_\bx_\be_\bl_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_i\bim\bma\bag\bge\be_\b_a\bad\bdd\bdo\bon\bn_\b_i\bin\bni\bit\bti\bia\bal\bli\biz\bze\bed\bd *\b**\b**\b**\b**\b**\b*\n bool al_is_image_addon_initialized(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if the image addon is initialized, otherwise returns false.\n Since: 5.2.6\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bhu\but\btd\bdo\bow\bwn\bn_\b_i\bim\bma\bag\bge\be_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b**\b*\n void al_shutdown_image_addon(void)\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/joystick.html", "source2": "./usr/share/doc/allegro5-doc/refman/joystick.html", "unified_diff": "@@ -230,44 +230,28 @@\n

    typedef struct ALLEGRO_JOYSTICK ALLEGRO_JOYSTICK;
    \n

    Source\n Code

    \n

    This is an abstract data type representing a physical joystick.

    \n

    See also: al_get_joystick

    \n-

    Examples:

    \n-
      \n-
    • ex_haptic.c
    • \n-
    • ex_joystick_hotplugging.c
    • \n-
    • ex_joystick_events.c
    • \n-
    \n

    ALLEGRO_JOYSTICK_STATE

    \n
    typedef struct ALLEGRO_JOYSTICK_STATE ALLEGRO_JOYSTICK_STATE;
    \n

    Source\n Code

    \n

    This is a structure that is used to hold a \u201csnapshot\u201d of a joystick\u2019s\n axes and buttons at a particular instant. All fields public and\n read-only.

    \n
    struct {\n    float axis[num_axes];             // -1.0 to 1.0\n } stick[num_sticks];\n int button[num_buttons];             // 0 to 32767
    \n

    See also: al_get_joystick_state

    \n-

    Examples:

    \n-
      \n-
    • ex_joystick_hotplugging.c
    • \n-
    • ex_joystick_events.c
    • \n-
    \n

    ALLEGRO_JOYFLAGS

    \n
    enum ALLEGRO_JOYFLAGS
    \n

    Source\n Code

    \n
      \n
    • ALLEGRO_JOYFLAG_DIGITAL - the stick provides digital input
    • \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -74,31 +74,24 @@\n mutually exclusive. The haptics subsystem will use the same driver as the\n joystick system does.\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_J\bJO\bOY\bYS\bST\bTI\bIC\bCK\bK *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_JOYSTICK ALLEGRO_JOYSTICK;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This is an abstract data type representing a physical joystick.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk\n-Examples:\n- * _\be_\bx_\b__\bh_\ba_\bp_\bt_\bi_\bc_\b._\bc\n- * _\be_\bx_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk_\b__\bh_\bo_\bt_\bp_\bl_\bu_\bg_\bg_\bi_\bn_\bg_\b._\bc\n- * _\be_\bx_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_J\bJO\bOY\bYS\bST\bTI\bIC\bCK\bK_\b_S\bST\bTA\bAT\bTE\bE *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_JOYSTICK_STATE ALLEGRO_JOYSTICK_STATE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This is a structure that is used to hold a \u201csnapshot\u201d of a joystick\u2019s axes and\n buttons at a particular instant. All fields public and read-only.\n struct {\n float axis[num_axes]; // -1.0 to 1.0\n } stick[num_sticks];\n int button[num_buttons]; // 0 to 32767\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk_\b__\bs_\bt_\ba_\bt_\be\n-Examples:\n- * _\be_\bx_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk_\b__\bh_\bo_\bt_\bp_\bl_\bu_\bg_\bg_\bi_\bn_\bg_\b._\bc\n- * _\be_\bx_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_J\bJO\bOY\bYF\bFL\bLA\bAG\bGS\bS *\b**\b**\b**\b**\b**\b*\n enum ALLEGRO_JOYFLAGS\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n * ALLEGRO_JOYFLAG_DIGITAL - the stick provides digital input\n * ALLEGRO_JOYFLAG_ANALOGUE - the stick provides analogue input\n (this enum is a holdover from the old API and may be removed)\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk_\b__\bs_\bt_\bi_\bc_\bk_\b__\bf_\bl_\ba_\bg_\bs\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/keyboard.html", "source2": "./usr/share/doc/allegro5-doc/refman/keyboard.html", "unified_diff": "@@ -212,23 +212,14 @@\n
        \n
      • display - points to the display that had keyboard focus at the time\n the state was saved. If no display was focused, this points to\n NULL.
      • \n
      \n

      You cannot read the state of keys directly. Use the function al_key_down.

      \n-

      Examples:

      \n-
        \n-
      • ex_d3d.cpp
      • \n-
      • ex_keyboard_focus.c
      • \n-
      • ex_mouse_focus.c
      • \n-
      \n

      Key codes

      \n

      The constant ALLEGRO_KEY_MAX is always one higher than the highest\n key code. So if you want to use the key code as array index you can do\n something like this:

      \n
      bool pressed_keys[ALLEGRO_KEY_MAX];\n //...\n pressed_keys[key_code] = true;
      \n@@ -353,19 +344,19 @@\n was already installed, nothing happens and true is returned.

      \n

      See also: al_uninstall_keyboard, al_is_keyboard_installed

      \n

      Examples:

      \n
        \n
      • ex_audio_props.cpp
      • \n+
      • ex_d3d.cpp
      • \n
      • ex_keyboard_focus.c
      • \n-
      • ex_mouse_focus.c
      • \n
      \n

      al_is_keyboard_installed

      \n
      bool al_is_keyboard_installed(void)
      \n

      Source\n Code

      \n

      Returns true if \n

      Returns NULL if the keyboard subsystem was not installed.

      \n

      Examples:

      \n
        \n
      • ex_keyboard_events.c
      • \n
      • ex_opengl.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_disable_screensaver.c#L44\">ex_disable_screensaver.c\n
      • ex_timedwait.c
      • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_opengl.c#L145\">ex_opengl.c\n
      \n

      \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

      \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -62,18 +62,14 @@\n typedef struct ALLEGRO_KEYBOARD_STATE ALLEGRO_KEYBOARD_STATE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This is a structure that is used to hold a \u201csnapshot\u201d of a keyboard\u2019s state at\n a particular instant. It contains the following publically readable fields:\n * display - points to the display that had keyboard focus at the time the\n state was saved. If no display was focused, this points to NULL.\n You cannot read the state of keys directly. Use the function _\ba_\bl_\b__\bk_\be_\by_\b__\bd_\bo_\bw_\bn.\n-Examples:\n- * _\be_\bx_\b__\bd_\b3_\bd_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* K\bKe\bey\by c\bco\bod\bde\bes\bs *\b**\b**\b**\b**\b**\b*\n The constant ALLEGRO_KEY_MAX is always one higher than the highest key code. So\n if you want to use the key code as array index you can do something like this:\n bool pressed_keys[ALLEGRO_KEY_MAX];\n //...\n pressed_keys[key_code] = true;\n These are the list of key codes used by Allegro, which are returned in the\n@@ -190,17 +186,17 @@\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bns\bst\bta\bal\bll\bl_\b_k\bke\bey\byb\bbo\boa\bar\brd\bd *\b**\b**\b**\b**\b**\b*\n bool al_install_keyboard(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Install a keyboard driver. Returns true if successful. If a driver was already\n installed, nothing happens and true is returned.\n See also: _\ba_\bl_\b__\bu_\bn_\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd, _\ba_\bl_\b__\bi_\bs_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\be_\bd\n Examples:\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bd_\b3_\bd_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_k\bke\bey\byb\bbo\boa\bar\brd\bd_\b_i\bin\bns\bst\bta\bal\bll\ble\bed\bd *\b**\b**\b**\b**\b**\b*\n bool al_is_keyboard_installed(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd was called successfully.\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bni\bin\bns\bst\bta\bal\bll\bl_\b_k\bke\bey\byb\bbo\boa\bar\brd\bd *\b**\b**\b**\b**\b**\b*\n void al_uninstall_keyboard(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n@@ -269,10 +265,10 @@\n ALLEGRO_EVENT_SOURCE *al_get_keyboard_event_source(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Retrieve the keyboard event source. All _\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b _\be_\bv_\be_\bn_\bt_\bs are generated by this\n event source.\n Returns NULL if the keyboard subsystem was not installed.\n Examples:\n * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n+ * _\be_\bx_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bs_\bc_\br_\be_\be_\bn_\bs_\ba_\bv_\be_\br_\b._\bc\n * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\bd_\bw_\ba_\bi_\bt_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/memfile.html", "source2": "./usr/share/doc/allegro5-doc/refman/memfile.html", "unified_diff": "@@ -196,19 +196,14 @@\n Regardless of the mode, the file always opens at position 0. The file\n size is fixed and cannot be expanded. The file is always read\n from/written to in binary mode, which means that no newline translation\n is performed.

      \n

      It should be closed with al_fclose.\n After the file is closed, you are responsible for freeing the memory (if\n needed).

      \n-

      Examples:

      \n-
        \n-
      • ex_memfile.c
      • \n-
      \n al_get_allegro_memfile_version\n
      uint32_t al_get_allegro_memfile_version(void)
      \n

      Source\n Code

      \n

      Returns the (compiled) version of the addon, in the same format as \n

      This is a macro.

      \n

      See also: al_free, al_realloc, al_calloc, al_malloc_with_context, al_set_memory_interface

      \n-

      Examples:

      \n-
        \n-
      • ex_audio_timer.c
      • \n-
      • ex_vertex_buffer.c
      • \n-
      \n

      al_free

      \n
      #define al_free(p) \\\n    (al_free_with_context((p), __LINE__, __FILE__, __func__))
      \n

      Source\n Code

      \n

      Like free() in the C standard library, but the implementation may be\n@@ -225,23 +218,14 @@\n

      Additionally, on Windows, a memory block allocated by one DLL must be\n freed from the same DLL. In the few places where an Allegro function\n returns a pointer that must be freed, you must use al_free for portability to Windows.

      \n

      This is a macro.

      \n

      See also: al_malloc, al_free_with_context

      \n-

      Examples:

      \n-
        \n-
      • ex_clipboard.c
      • \n-
      • ex_drag_and_drop.c
      • \n-
      • ex_record_name.c
      • \n-
      \n

      al_realloc

      \n
      #define al_realloc(p, n) \\\n    (al_realloc_with_context((p), (n), __LINE__, __FILE__, __func__))
      \n

      Source\n Code

      \n

      Like realloc() in the C standard library, but the implementation may\n@@ -256,19 +240,14 @@\n href=\"https://github.com/liballeg/allegro5/blob/master/include/allegro5/memory.h#L57\">Source\n Code

      \n

      Like calloc() in the C standard library, but the implementation may\n be overridden.

      \n

      This is a macro.

      \n

      See also: al_malloc, al_calloc_with_context

      \n-

      Examples:

      \n-
        \n-
      • ex_record_name.c
      • \n-
      \n

      al_malloc_with_context

      \n
      void *al_malloc_with_context(size_t n,\n    int line, const char *file, const char *func)
      \n

      Source\n Code

      \n

      This calls malloc() from the Allegro library (this matters on\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -60,32 +60,25 @@\n (al_malloc_with_context((n), __LINE__, __FILE__, __func__))\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like malloc() in the C standard library, but the implementation may be\n overridden.\n This is a macro.\n See also: _\ba_\bl_\b__\bf_\br_\be_\be, _\ba_\bl_\b__\br_\be_\ba_\bl_\bl_\bo_\bc, _\ba_\bl_\b__\bc_\ba_\bl_\bl_\bo_\bc, _\ba_\bl_\b__\bm_\ba_\bl_\bl_\bo_\bc_\b__\bw_\bi_\bt_\bh_\b__\bc_\bo_\bn_\bt_\be_\bx_\bt,\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bm_\be_\bm_\bo_\br_\by_\b__\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bt_\bi_\bm_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_f\bfr\bre\bee\be *\b**\b**\b**\b**\b**\b*\n #define al_free(p) \\\n (al_free_with_context((p), __LINE__, __FILE__, __func__))\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like free() in the C standard library, but the implementation may be\n overridden.\n Additionally, on Windows, a memory block allocated by one DLL must be freed\n from the same DLL. In the few places where an Allegro function returns a\n pointer that must be freed, you must use _\ba_\bl_\b__\bf_\br_\be_\be for portability to Windows.\n This is a macro.\n See also: _\ba_\bl_\b__\bm_\ba_\bl_\bl_\bo_\bc, _\ba_\bl_\b__\bf_\br_\be_\be_\b__\bw_\bi_\bt_\bh_\b__\bc_\bo_\bn_\bt_\be_\bx_\bt\n-Examples:\n- * _\be_\bx_\b__\bc_\bl_\bi_\bp_\bb_\bo_\ba_\br_\bd_\b._\bc\n- * _\be_\bx_\b__\bd_\br_\ba_\bg_\b__\ba_\bn_\bd_\b__\bd_\br_\bo_\bp_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bea\bal\bll\blo\boc\bc *\b**\b**\b**\b**\b**\b*\n #define al_realloc(p, n) \\\n (al_realloc_with_context((p), (n), __LINE__, __FILE__, __func__))\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like realloc() in the C standard library, but the implementation may be\n overridden.\n This is a macro.\n@@ -94,16 +87,14 @@\n #define al_calloc(c, n) \\\n (al_calloc_with_context((c), (n), __LINE__, __FILE__, __func__))\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like calloc() in the C standard library, but the implementation may be\n overridden.\n This is a macro.\n See also: _\ba_\bl_\b__\bm_\ba_\bl_\bl_\bo_\bc, _\ba_\bl_\b__\bc_\ba_\bl_\bl_\bo_\bc_\b__\bw_\bi_\bt_\bh_\b__\bc_\bo_\bn_\bt_\be_\bx_\bt\n-Examples:\n- * _\be_\bx_\b__\br_\be_\bc_\bo_\br_\bd_\b__\bn_\ba_\bm_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_m\bma\bal\bll\blo\boc\bc_\b_w\bwi\bit\bth\bh_\b_c\bco\bon\bnt\bte\bex\bxt\bt *\b**\b**\b**\b**\b**\b*\n void *al_malloc_with_context(size_t n,\n int line, const char *file, const char *func)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This calls malloc() from the Allegro library (this matters on Windows), unless\n overridden with _\ba_\bl_\b__\bs_\be_\bt_\b__\bm_\be_\bm_\bo_\br_\by_\b__\bi_\bn_\bt_\be_\br_\bf_\ba_\bc_\be,\n Generally you should use the _\ba_\bl_\b__\bm_\ba_\bl_\bl_\bo_\bc macro.\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/misc.html", "source2": "./usr/share/doc/allegro5-doc/refman/misc.html", "unified_diff": "@@ -182,23 +182,14 @@\n

      ALLEGRO_PI

      \n
      #define ALLEGRO_PI        3.14159265358979323846
      \n

      Source\n Code

      \n

      C99 compilers have no predefined value like M_PI for the constant \u03c0,\n but you can use this one instead.

      \n-

      Examples:

      \n-
        \n-
      • ex_convert.c
      • \n-
      • ex_opengl.c
      • \n-
      • ex_blend_bench.c
      • \n-
      \n

      al_run_main

      \n
      int al_run_main(int argc, char **argv, int (*user_main)(int, char **))
      \n

      Source\n Code

      \n

      This function is useful in cases where you don\u2019t have a main()\n function but want to run Allegro (mostly useful in a wrapper library).\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -48,18 +48,14 @@\n These functions are declared in the main Allegro header file:\n #include \n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_P\bPI\bI *\b**\b**\b**\b**\b**\b*\n #define ALLEGRO_PI 3.14159265358979323846\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n C99 compilers have no predefined value like M_PI for the constant \u03c0, but you\n can use this one instead.\n-Examples:\n- * _\be_\bx_\b__\bc_\bo_\bn_\bv_\be_\br_\bt_\b._\bc\n- * _\be_\bx_\b__\bo_\bp_\be_\bn_\bg_\bl_\b._\bc\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_r\bru\bun\bn_\b_m\bma\bai\bin\bn *\b**\b**\b**\b**\b**\b*\n int al_run_main(int argc, char **argv, int (*user_main)(int, char **))\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function is useful in cases where you don\u2019t have a main() function but\n want to run Allegro (mostly useful in a wrapper library). Under Windows and\n Linux this is no problem because you simply can call _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\bs_\by_\bs_\bt_\be_\bm. But\n some other system (like OSX) don\u2019t allow calling _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\bs_\by_\bs_\bt_\be_\bm in the main\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/monitor.html", "source2": "./usr/share/doc/allegro5-doc/refman/monitor.html", "unified_diff": "@@ -206,23 +206,14 @@\n int x1;\n int y1;\n int x2;\n int y2;\n } ALLEGRO_MONITOR_INFO;\n

      See also: al_get_monitor_info

      \n-

      Examples:

      \n-
        \n-
      • ex_monitorinfo.c
      • \n-
      • ex_windows.c
      • \n-
      • ex_drag_and_drop.c
      • \n-
      \n

      al_get_new_display_adapter

      \n
      int al_get_new_display_adapter(void)
      \n

      Source\n Code

      \n

      Gets the video adapter index where new displays will be created by\n the calling thread, if previously set with al_get_num_video_adapters,\n al_get_monitor_info

      \n

      Examples:

      \n
        \n
      • ex_monitorinfo.c
      • \n
      • ex_winfull.c
      • \n-
      • ex_dualies.c
      • \n+
      • ex_winfull.c
      • \n
      \n

      al_get_monitor_info

      \n
      bool al_get_monitor_info(int adapter, ALLEGRO_MONITOR_INFO *info)
      \n

      Source\n Code

      \n

      Get information about a monitor\u2019s position on the desktop. adapter is\n@@ -272,17 +263,17 @@\n href=\"monitor.html#allegro_monitor_info\">ALLEGRO_MONITOR_INFO, al_get_num_video_adapters

      \n

      Examples:

      \n
        \n
      • ex_monitorinfo.c
      • \n
      • ex_windows.c
      • \n-
      • ex_drag_and_drop.c
      • \n+
      • ex_windows.c
      • \n
      \n

      al_get_monitor_dpi

      \n
      int al_get_monitor_dpi(int adapter)
      \n

      Source\n Code

      \n

      Get the dots per inch of a monitor attached to the display\n@@ -311,17 +302,17 @@\n

      See also: al_get_monitor_info

      \n

      Examples:

      \n
        \n
      • ex_monitorinfo.c
      • \n
      • ex_winfull.c
      • \n-
      • ex_dualies.c
      • \n+
      • ex_winfull.c
      • \n
      \n

      al_get_monitor_refresh_rate

      \n
      int al_get_monitor_refresh_rate(int adapter)
      \n

      Source\n Code

      \n

      Returns the current refresh rate of a monitor attached to the display\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -64,18 +64,14 @@\n {\n int x1;\n int y1;\n int x2;\n int y2;\n } ALLEGRO_MONITOR_INFO;\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\b__\bi_\bn_\bf_\bo\n-Examples:\n- * _\be_\bx_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\bi_\bn_\bf_\bo_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\bs_\b._\bc\n- * _\be_\bx_\b__\bd_\br_\ba_\bg_\b__\ba_\bn_\bd_\b__\bd_\br_\bo_\bp_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_n\bne\bew\bw_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_a\bad\bda\bap\bpt\bte\ber\br *\b**\b**\b**\b**\b**\b*\n int al_get_new_display_adapter(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Gets the video adapter index where new displays will be created by the calling\n thread, if previously set with _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\ba_\bd_\ba_\bp_\bt_\be_\br. Otherwise returns\n ALLEGRO_DEFAULT_DISPLAY_ADAPTER.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\ba_\bd_\ba_\bp_\bt_\be_\br\n@@ -85,29 +81,29 @@\n Sets the adapter to use for new displays created by the calling thread. The\n adapter has a monitor attached to it. Information about the monitor can be\n gotten using _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\bu_\bm_\b__\bv_\bi_\bd_\be_\bo_\b__\ba_\bd_\ba_\bp_\bt_\be_\br_\bs and _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\b__\bi_\bn_\bf_\bo.\n To return to the default behaviour, pass ALLEGRO_DEFAULT_DISPLAY_ADAPTER.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\bu_\bm_\b__\bv_\bi_\bd_\be_\bo_\b__\ba_\bd_\ba_\bp_\bt_\be_\br_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\b__\bi_\bn_\bf_\bo\n Examples:\n * _\be_\bx_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\bi_\bn_\bf_\bo_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bf_\bu_\bl_\bl_\b._\bc\n * _\be_\bx_\b__\bd_\bu_\ba_\bl_\bi_\be_\bs_\b._\bc\n+ * _\be_\bx_\b__\bw_\bi_\bn_\bf_\bu_\bl_\bl_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmo\bon\bni\bit\bto\bor\br_\b_i\bin\bnf\bfo\bo *\b**\b**\b**\b**\b**\b*\n bool al_get_monitor_info(int adapter, ALLEGRO_MONITOR_INFO *info)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get information about a monitor\u2019s position on the desktop. adapter is a number\n from 0 to al_get_num_video_adapters()-1.\n On Windows, use _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs to switch between Direct3D and OpenGL\n backends, which will often have different adapters available.\n Returns true on success, false on failure.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bM_\bO_\bN_\bI_\bT_\bO_\bR_\b__\bI_\bN_\bF_\bO, _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\bu_\bm_\b__\bv_\bi_\bd_\be_\bo_\b__\ba_\bd_\ba_\bp_\bt_\be_\br_\bs\n Examples:\n * _\be_\bx_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\bi_\bn_\bf_\bo_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\bs_\b._\bc\n * _\be_\bx_\b__\bd_\br_\ba_\bg_\b__\ba_\bn_\bd_\b__\bd_\br_\bo_\bp_\b._\bc\n+ * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmo\bon\bni\bit\bto\bor\br_\b_d\bdp\bpi\bi *\b**\b**\b**\b**\b**\b*\n int al_get_monitor_dpi(int adapter)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get the dots per inch of a monitor attached to the display adapter.\n Since: 5.2.5\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\bu_\bm_\b__\bv_\bi_\bd_\be_\bo_\b__\ba_\bd_\ba_\bp_\bt_\be_\br_\bs\n Examples:\n@@ -119,16 +115,16 @@\n attached to the computer counts as one or more adapters. An adapter is thus\n really a video port that can have a monitor connected to it.\n On Windows, use _\ba_\bl_\b__\bs_\be_\bt_\b__\bn_\be_\bw_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bf_\bl_\ba_\bg_\bs to switch between Direct3D and OpenGL\n backends, which will often have different adapters available.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\b__\bi_\bn_\bf_\bo\n Examples:\n * _\be_\bx_\b__\bm_\bo_\bn_\bi_\bt_\bo_\br_\bi_\bn_\bf_\bo_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bf_\bu_\bl_\bl_\b._\bc\n * _\be_\bx_\b__\bd_\bu_\ba_\bl_\bi_\be_\bs_\b._\bc\n+ * _\be_\bx_\b__\bw_\bi_\bn_\bf_\bu_\bl_\bl_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bmo\bon\bni\bit\bto\bor\br_\b_r\bre\bef\bfr\bre\bes\bsh\bh_\b_r\bra\bat\bte\be *\b**\b**\b**\b**\b**\b*\n int al_get_monitor_refresh_rate(int adapter)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the current refresh rate of a monitor attached to the display adapter.\n Since: 5.2.6\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: This is an experimental feature and currently only\n works on Windows.\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/mouse.html", "source2": "./usr/share/doc/allegro5-doc/refman/mouse.html", "unified_diff": "@@ -249,37 +249,28 @@\n

    • pressure - pressure, ranging from 0.0 to\n 1.0

    • \n
    \n

    See also: al_get_mouse_state, al_get_mouse_state_axis,\n al_mouse_button_down

    \n-

    Examples:

    \n-
      \n-
    • ex_mouse_focus.c
    • \n-
    • ex_mouse.c
    • \n-
    • nihgui.cpp
    • \n-
    \n

    al_install_mouse

    \n
    bool al_install_mouse(void)
    \n

    Source\n Code

    \n

    Install a mouse driver.

    \n

    Returns true if successful. If a driver was already installed,\n nothing happens and true is returned.

    \n

    Examples:

    \n
      \n
    • ex_mouse_focus.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_props.cpp#L156\">ex_audio_props.cpp\n
    • ex_mouse.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_color.cpp#L195\">ex_color.cpp\n
    • ex_font_justify.cpp
    • \n
    \n

    al_is_mouse_installed

    \n
    bool al_is_mouse_installed(void)
    \n

    Source\n@@ -442,15 +433,15 @@\n

    Examples:

    \n
      \n
    • ex_display_events.c
    • \n
    • ex_mouse_warp.c
    • \n
    • ex_noframe.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_timer.c#L191\">ex_timer.c\n
    \n

    al_set_mouse_wheel_precision

    \n
    void al_set_mouse_wheel_precision(int precision)
    \n

    Source\n Code

    \n

    Sets the precision of the mouse wheel (the z and w coordinates). This\n@@ -627,17 +618,17 @@\n

    See also: al_show_mouse_cursor

    \n

    Examples:

    \n
      \n
    • ex_mouse.c
    • \n
    • ex_ogre3d.cpp
    • \n-
    • ex_mouse_events.c
    • \n+
    • ex_ogre3d.cpp
    • \n
    \n

    al_show_mouse_cursor

    \n
    bool al_show_mouse_cursor(ALLEGRO_DISPLAY *display)
    \n

    Source\n Code

    \n

    Make a mouse cursor visible in the given display.

    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -80,27 +80,23 @@\n * y - mouse y position\n * w, z - mouse wheel position (2D \u2018ball\u2019)\n * buttons - mouse buttons bitfield\n The zeroth bit is set if the primary mouse button is held down, the first\n bit is set if the secondary mouse button is held down, and so on.\n * pressure - pressure, ranging from 0.0 to 1.0\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bo_\bu_\bs_\be_\b__\bs_\bt_\ba_\bt_\be, _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\bo_\bu_\bs_\be_\b__\bs_\bt_\ba_\bt_\be_\b__\ba_\bx_\bi_\bs, _\ba_\bl_\b__\bm_\bo_\bu_\bs_\be_\b__\bb_\bu_\bt_\bt_\bo_\bn_\b__\bd_\bo_\bw_\bn\n-Examples:\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b._\bc\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bns\bst\bta\bal\bll\bl_\b_m\bmo\bou\bus\bse\be *\b**\b**\b**\b**\b**\b*\n bool al_install_mouse(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Install a mouse driver.\n Returns true if successful. If a driver was already installed, nothing happens\n and true is returned.\n Examples:\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b._\bc\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bp_\br_\bo_\bp_\bs_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_m\bmo\bou\bus\bse\be_\b_i\bin\bns\bst\bta\bal\bll\ble\bed\bd *\b**\b**\b**\b**\b**\b*\n bool al_is_mouse_installed(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\bm_\bo_\bu_\bs_\be was called successfully.\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bni\bin\bns\bst\bta\bal\bll\bl_\b_m\bmo\bou\bus\bse\be *\b**\b**\b**\b**\b**\b*\n void al_uninstall_mouse(void)\n@@ -196,15 +192,15 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Retrieve the mouse event source. All _\bm_\bo_\bu_\bs_\be_\b _\be_\bv_\be_\bn_\bt_\bs are generated by this event\n source.\n Returns NULL if the mouse subsystem was not installed.\n Examples:\n * _\be_\bx_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bw_\ba_\br_\bp_\b._\bc\n- * _\be_\bx_\b__\bn_\bo_\bf_\br_\ba_\bm_\be_\b._\bc\n+ * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bmo\bou\bus\bse\be_\b_w\bwh\bhe\bee\bel\bl_\b_p\bpr\bre\bec\bci\bis\bsi\bio\bon\bn *\b**\b**\b**\b**\b**\b*\n void al_set_mouse_wheel_precision(int precision)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sets the precision of the mouse wheel (the z and w coordinates). This precision\n manifests itself as a multiplier on the dz and dw fields in mouse events. It\n also affects the z and w fields of events and _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bM_\bO_\bU_\bS_\bE_\b__\bS_\bT_\bA_\bT_\bE, but not in a\n simple way if you alter the precision often, so it is suggested to reset those\n@@ -320,16 +316,16 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Hide the mouse cursor in the given display. This has no effect on what the\n current mouse cursor looks like; it just makes it disappear.\n Returns true on success (or if the cursor already was hidden), false otherwise.\n See also: _\ba_\bl_\b__\bs_\bh_\bo_\bw_\b__\bm_\bo_\bu_\bs_\be_\b__\bc_\bu_\br_\bs_\bo_\br\n Examples:\n * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b._\bc\n- * _\be_\bx_\b__\bo_\bg_\br_\be_\b3_\bd_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n+ * _\be_\bx_\b__\bo_\bg_\br_\be_\b3_\bd_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bho\bow\bw_\b_m\bmo\bou\bus\bse\be_\b_c\bcu\bur\brs\bso\bor\br *\b**\b**\b**\b**\b*\n bool al_show_mouse_cursor(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Make a mouse cursor visible in the given display.\n Returns true if a mouse cursor is shown as a result of the call (or one already\n was visible), false otherwise.\n See also: _\ba_\bl_\b__\bh_\bi_\bd_\be_\b__\bm_\bo_\bu_\bs_\be_\b__\bc_\bu_\br_\bs_\bo_\br\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/native_dialog.html", "source2": "./usr/share/doc/allegro5-doc/refman/native_dialog.html", "unified_diff": "@@ -267,32 +267,20 @@\n
     #include <allegro5/allegro_native_dialog.h>
    \n

    ALLEGRO_FILECHOOSER

    \n
    typedef struct ALLEGRO_FILECHOOSER ALLEGRO_FILECHOOSER;
    \n

    Source\n Code

    \n

    Opaque handle to a native file dialog.

    \n-

    Examples:

    \n-
      \n-
    • ex_native_filechooser.c
    • \n-
    \n

    ALLEGRO_TEXTLOG

    \n
    typedef struct ALLEGRO_TEXTLOG ALLEGRO_TEXTLOG;
    \n

    Source\n Code

    \n

    Opaque handle to a text log window.

    \n-

    Examples:

    \n-
      \n-
    • common.c
    • \n-
    • ex_native_filechooser.c
    • \n-
    \n

    al_init_native_dialog_addon

    \n
    bool al_init_native_dialog_addon(void)
    \n

    Source\n Code

    \n

    Initialise the native dialog addon.

    \n

    Returns true on success, false on error.

    \n@@ -304,23 +292,14 @@\n is al_show_native_message_box,\n which may be useful to show an error message if Allegro fails to\n initialise.

    \n \n

    See also: al_shutdown_native_dialog_addon

    \n-

    Examples:

    \n-
      \n-
    • common.c
    • \n-
    • ex_window_maximized.c
    • \n-
    • ex_menu.c
    • \n-
    \n al_is_native_dialog_addon_initialized\n
    bool al_is_native_dialog_addon_initialized(void)
    \n

    Source\n Code

    \n

    Returns true if the native dialog addon is initialized, otherwise\n@@ -400,78 +379,53 @@\n and al_get_native_file_dialog_path.\n When you are done, call al_destroy_native_file_dialog\n on it.

    \n

    If a dialog window could not be created then this function returns\n NULL.

    \n-

    Examples:

    \n-
      \n-
    • ex_native_filechooser.c
    • \n-
    \n

    al_show_native_file_dialog

    \n
    bool al_show_native_file_dialog(ALLEGRO_DISPLAY *display,\n    ALLEGRO_FILECHOOSER *dialog)
    \n

    Source\n Code

    \n

    Show the dialog window. The display may be NULL, otherwise the given\n display is treated as the parent if possible.

    \n

    This function blocks the calling thread until it returns, so you may\n want to spawn a thread with al_create_thread and call it\n from inside that thread.

    \n

    Returns true on success, false on failure.

    \n-

    Examples:

    \n-
      \n-
    • ex_native_filechooser.c
    • \n-
    \n al_get_native_file_dialog_count\n
    int al_get_native_file_dialog_count(const ALLEGRO_FILECHOOSER *dialog)
    \n

    Source\n Code

    \n

    Returns the number of files selected, or 0 if the dialog was\n cancelled.

    \n-

    Examples:

    \n-
      \n-
    • ex_native_filechooser.c
    • \n-
    \n al_get_native_file_dialog_path\n
    const char *al_get_native_file_dialog_path(\n    const ALLEGRO_FILECHOOSER *dialog, size_t i)
    \n

    Source\n Code

    \n

    Returns one of the selected paths with index i. The\n index should range from 0 to the return value of al_get_native_file_dialog_count\n -1.

    \n-

    Examples:

    \n-
      \n-
    • ex_native_filechooser.c
    • \n-
    \n al_destroy_native_file_dialog\n
    void al_destroy_native_file_dialog(ALLEGRO_FILECHOOSER *dialog)
    \n

    Source\n Code

    \n

    Frees up all resources used by the file dialog.

    \n-

    Examples:

    \n-
      \n-
    • ex_native_filechooser.c
    • \n-
    \n

    al_show_native_message_box

    \n
    int al_show_native_message_box(ALLEGRO_DISPLAY *display,\n    char const *title, char const *heading, char const *text,\n    char const *buttons, int flags)
    \n

    Source\n Code

    \n@@ -537,23 +491,14 @@\n "If you click yes then you are confirming that \\"Yes\\" "\n "is your response to the query which you have "\n "generated by the action you took to open this "\n "message box.",\n NULL,\n ALLEGRO_MESSAGEBOX_YES_NO\n );\n-

    Examples:

    \n-
      \n-
    • ex_nodisplay.c
    • \n-
    • common.c
    • \n-
    • ex_menu.c
    • \n-
    \n

    al_open_native_text_log

    \n
    ALLEGRO_TEXTLOG *al_open_native_text_log(char const *title, int flags)
    \n

    Source\n Code

    \n

    Opens a window to which you can append log messages with al_append_native_text_log.\n@@ -577,58 +522,37 @@\n \n

    Returns NULL if there was an error opening the window, or if text log\n windows are not implemented on the platform.

    \n

    See also: al_append_native_text_log,\n al_close_native_text_log

    \n-

    Examples:

    \n-
      \n-
    • common.c
    • \n-
    • ex_native_filechooser.c
    • \n-
    \n

    al_close_native_text_log

    \n
    void al_close_native_text_log(ALLEGRO_TEXTLOG *textlog)
    \n

    Source\n Code

    \n

    Closes a message log window opened with al_open_native_text_log\n earlier.

    \n

    Does nothing if passed NULL.

    \n

    See also: al_open_native_text_log

    \n-

    Examples:

    \n-
      \n-
    • common.c
    • \n-
    • ex_native_filechooser.c
    • \n-
    \n

    al_append_native_text_log

    \n
    void al_append_native_text_log(ALLEGRO_TEXTLOG *textlog,\n    char const *format, ...)
    \n

    Source\n Code

    \n

    Appends a line of text to the message log window and scrolls to the\n bottom (if the line would not be visible otherwise). This works like\n printf. A line is continued until you add a newline character.

    \n

    If the window is NULL then this function will fall back to calling\n printf. This makes it convenient to support logging to a window or a\n terminal.

    \n-

    Examples:

    \n-
      \n-
    • common.c
    • \n-
    • ex_native_filechooser.c
    • \n-
    \n al_get_native_text_log_event_source\n
    ALLEGRO_EVENT_SOURCE *al_get_native_text_log_event_source(\n    ALLEGRO_TEXTLOG *textlog)
    \n

    Source\n Code

    \n@@ -641,23 +565,14 @@\n button or pressing Escape on the keyboard. The user.data1 field will\n hold a pointer to the ALLEGRO_TEXTLOG which\n generated the event. The user.data2 field will be 1 if the event was\n generated as a result of a key press; otherwise it will be zero.\n \n \n-

    Examples:

    \n-
      \n-
    • common.c
    • \n-
    • ex_saw.c
    • \n-
    • ex_resample_test.c
    • \n-
    \n al_get_allegro_native_dialog_version\n
    uint32_t al_get_allegro_native_dialog_version(void)
    \n

    Source\n Code

    \n

    Returns the (compiled) version of the addon, in the same format as ALLEGRO_MENU\n

    typedef struct ALLEGRO_MENU ALLEGRO_MENU;
    \n

    Source\n Code

    \n

    An opaque data type that represents a menu that contains menu items.\n Each of the menu items may optionally include a sub-menu.

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    ALLEGRO_MENU_INFO

    \n
    typedef struct ALLEGRO_MENU_INFO {
    \n

    Source\n Code

    \n

    A structure that defines how to create a complete menu system. For\n standard menu items, the following format is used:

    \n@@ -759,19 +669,14 @@\n \n ALLEGRO_MENU *menu = al_build_menu(menu_info);\n

    If you prefer, you can build the menu without the structure by using\n al_create_menu and al_insert_menu_item.

    \n

    See also: al_build_menu

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_create_menu

    \n
    ALLEGRO_MENU *al_create_menu(void)
    \n

    Source\n Code

    \n

    Creates a menu container that can hold menu items.

    \n

    Returns NULL on failure.

    \n@@ -789,19 +694,14 @@\n created with al_create_menu.

    \n

    Returns NULL on failure.

    \n

    Since: 5.1.0

    \n

    See also: al_create_menu, al_build_menu

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_build_menu

    \n
    ALLEGRO_MENU *al_build_menu(ALLEGRO_MENU_INFO *info)
    \n

    Source\n Code

    \n

    Builds a menu based on the specifications of a sequence of\n ALLEGRO_MENU_INFO elements.

    \n@@ -810,38 +710,28 @@\n items, you will need to search for them using al_find_menu_item.

    \n

    Since: 5.1.0

    \n

    See also: ALLEGRO_MENU_INFO, al_create_menu, al_create_popup_menu

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_append_menu_item

    \n
    int al_append_menu_item(ALLEGRO_MENU *parent, char const *title, uint16_t id,\n    int flags, ALLEGRO_BITMAP *icon, ALLEGRO_MENU *submenu)
    \n

    Source\n Code

    \n

    Appends a menu item to the end of the menu. See al_insert_menu_item\n for more information.

    \n

    Since: 5.1.0

    \n

    See also: al_insert_menu_item,\n al_remove_menu_item

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_insert_menu_item

    \n
    int al_insert_menu_item(ALLEGRO_MENU *parent, int pos, char const *title,\n    uint16_t id, int flags, ALLEGRO_BITMAP *icon, ALLEGRO_MENU *submenu)
    \n

    Source\n Code

    \n

    Inserts a menu item at the spot specified. See the introductory text\n@@ -892,68 +782,48 @@\n

    Returns true if an item was removed.

    \n

    Since: 5.1.0

    \n

    See also: al_append_menu_item,\n al_insert_menu_item,\n al_destroy_menu

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_clone_menu

    \n
    ALLEGRO_MENU *al_clone_menu(ALLEGRO_MENU *menu)
    \n

    Source\n Code

    \n

    Makes a copy of a menu so that it can be reused on another display.\n The menu being cloned can be anything: a regular menu, a popup menu, or\n a sub-menu.

    \n

    Returns the cloned menu.

    \n

    Since: 5.1.0

    \n

    See also: al_clone_menu_for_popup

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_clone_menu_for_popup

    \n
    ALLEGRO_MENU *al_clone_menu_for_popup(ALLEGRO_MENU *menu)
    \n

    Source\n Code

    \n

    Exactly like al_clone_menu, except that\n the copy is for a popup menu.

    \n

    Since: 5.1.0

    \n

    See also: al_clone_menu

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_destroy_menu

    \n
    void al_destroy_menu(ALLEGRO_MENU *menu)
    \n

    Source\n Code

    \n

    Destroys an entire menu, including its sub-menus. Any references to\n it or a sub-menu are no longer valid. It is safe to call this on a menu\n that is currently being displayed.

    \n

    Since: 5.1.0

    \n

    See also: al_remove_menu_item

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_get_menu_item_caption

    \n
    const char *al_get_menu_item_caption(ALLEGRO_MENU *menu, int pos)
    \n

    Source\n Code

    \n

    Returns the caption associated with the menu item. It is valid as\n long as the caption is not modified.

    \n@@ -968,56 +838,41 @@\n Code

    \n

    Updates the menu item caption with the new caption. This\n will invalidate any previous calls to al_get_menu_item_caption.

    \n

    Since: 5.1.0

    \n

    See also: al_get_menu_item_caption

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_get_menu_item_flags

    \n
    int al_get_menu_item_flags(ALLEGRO_MENU *menu, int pos)
    \n

    Source\n Code

    \n

    Returns the currently set flags. See al_insert_menu_item\n for a description of the available flags.

    \n

    Returns -1 if the item was not found.

    \n

    Since: 5.1.0

    \n

    See also: al_set_menu_item_flags,\n al_toggle_menu_item_flags

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_set_menu_item_flags

    \n
    void al_set_menu_item_flags(ALLEGRO_MENU *menu, int pos, int flags)
    \n

    Source\n Code

    \n

    Updates the menu item\u2019s flags. See al_insert_menu_item\n for a description of the available flags.

    \n

    Since: 5.1.0

    \n

    See also: al_get_menu_item_flags,\n al_toggle_menu_item_flags

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_toggle_menu_item_flags

    \n
    int al_toggle_menu_item_flags(ALLEGRO_MENU *menu, int pos, int flags)
    \n

    Source\n Code

    \n

    Toggles the specified menu item\u2019s flags. See al_insert_menu_item\n@@ -1059,36 +914,26 @@\n you must clone it if you wish to continue using it.

    \n

    If a video bitmap is passed, it will automatically be converted to a\n memory bitmap, so it is preferable to pass a memory bitmap.

    \n

    Since: 5.1.0

    \n

    See also: al_get_menu_item_icon,\n al_clone_bitmap

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_find_menu

    \n
    ALLEGRO_MENU *al_find_menu(ALLEGRO_MENU *haystack, uint16_t id)
    \n

    Source\n Code

    \n

    Searches in the haystack menu for any submenu with the\n given id. (Note that this only represents a literal ID, and\n cannot be used as an index.)

    \n

    Returns the menu, if found. Otherwise returns NULL.

    \n

    Since: 5.1.0

    \n

    See also: al_find_menu_item

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_find_menu_item

    \n
    bool al_find_menu_item(ALLEGRO_MENU *haystack, uint16_t id, ALLEGRO_MENU **menu,\n    int *index)
    \n

    Source\n Code

    \n

    Searches in the haystack menu for an item with the given\n@@ -1115,19 +960,14 @@\n

    Since: 5.1.0

    \n

    See also: al_register_event_source,\n al_enable_menu_event_source,\n al_disable_menu_event_source

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_enable_menu_event_source

    \n
    ALLEGRO_EVENT_SOURCE *al_enable_menu_event_source(ALLEGRO_MENU *menu)
    \n

    Source\n Code

    \n

    Enables a unique event source for this menu. It and all of its\n sub-menus will use this event source. (It is safe to call this multiple\n@@ -1182,19 +1022,14 @@\n want to maintain your window\u2019s prior size.

    \n \n

    Returns true if successful.

    \n

    Since: 5.1.0

    \n

    See also: al_create_menu, al_remove_display_menu

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_popup_menu

    \n
    bool al_popup_menu(ALLEGRO_MENU *popup, ALLEGRO_DISPLAY *display)
    \n

    Source\n Code

    \n

    Displays a context menu next to the mouse cursor. The menu must have\n been created with ALLEGRO_MOUSE_BUTTON_UP events and even then only if that\n event corresponds to the final mouse button that was pressed.

    \n \n

    Since: 5.1.0

    \n

    See also: al_create_popup_menu

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    al_remove_display_menu

    \n
    ALLEGRO_MENU *al_remove_display_menu(ALLEGRO_DISPLAY *display)
    \n

    Source\n Code

    \n

    Detaches the menu associated with the display and returns it. The\n menu can then be used on a different display.

    \n

    If you simply want to destroy the active menu, you can call al_set_display_menu\n with a NULL menu.

    \n

    Since: 5.1.0

    \n

    See also: al_set_display_menu

    \n-

    Examples:

    \n-
      \n-
    • ex_menu.c
    • \n-
    \n

    \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -90,39 +90,30 @@\n These functions are declared in the following header file. Link with\n allegro_dialog.\n #include \n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_F\bFI\bIL\bLE\bEC\bCH\bHO\bOO\bOS\bSE\bER\bR *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_FILECHOOSER ALLEGRO_FILECHOOSER;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Opaque handle to a native file dialog.\n-Examples:\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_T\bTE\bEX\bXT\bTL\bLO\bOG\bG *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_TEXTLOG ALLEGRO_TEXTLOG;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Opaque handle to a text log window.\n-Examples:\n- * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bni\bit\bt_\b_n\bna\bat\bti\biv\bve\be_\b_d\bdi\bia\bal\blo\bog\bg_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b**\b*\n bool al_init_native_dialog_addon(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Initialise the native dialog addon.\n Returns true on success, false on error.\n Since: 5.0.9, 5.1.0\n N\bNo\bot\bte\be:\b: Prior to Allegro 5.1.0 native dialog functions could be called\n without explicit initialisation, but that is now deprecated. Future\n functionality may require explicit initialisation. An exception is\n _\ba_\bl_\b__\bs_\bh_\bo_\bw_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bm_\be_\bs_\bs_\ba_\bg_\be_\b__\bb_\bo_\bx, which may be useful to show an error\n message if Allegro fails to initialise.\n See also: _\ba_\bl_\b__\bs_\bh_\bu_\bt_\bd_\bo_\bw_\bn_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bd_\bi_\ba_\bl_\bo_\bg_\b__\ba_\bd_\bd_\bo_\bn\n-Examples:\n- * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bm_\ba_\bx_\bi_\bm_\bi_\bz_\be_\bd_\b._\bc\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_n\bna\bat\bti\biv\bve\be_\b_d\bdi\bia\bal\blo\bog\bg_\b_a\bad\bdd\bdo\bon\bn_\b_i\bin\bni\bit\bti\bia\bal\bli\biz\bze\bed\bd *\b**\b**\b**\b**\b**\b*\n bool al_is_native_dialog_addon_initialized(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if the native dialog addon is initialized, otherwise returns\n false.\n Since: 5.2.6\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bhu\but\btd\bdo\bow\bwn\bn_\b_n\bna\bat\bti\biv\bve\be_\b_d\bdi\bia\bal\blo\bog\bg_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b**\b*\n@@ -170,47 +161,37 @@\n If supported, allow selecting multiple files.\n Returns:\n A handle to the dialog which you can pass to _\ba_\bl_\b__\bs_\bh_\bo_\bw_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\b__\bd_\bi_\ba_\bl_\bo_\bg to\n display it, and from which you then can query the results using\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\b__\bd_\bi_\ba_\bl_\bo_\bg_\b__\bc_\bo_\bu_\bn_\bt and _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\b__\bd_\bi_\ba_\bl_\bo_\bg_\b__\bp_\ba_\bt_\bh. When you\n are done, call _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\b__\bd_\bi_\ba_\bl_\bo_\bg on it.\n If a dialog window could not be created then this function returns NULL.\n-Examples:\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bho\bow\bw_\b_n\bna\bat\bti\biv\bve\be_\b_f\bfi\bil\ble\be_\b_d\bdi\bia\bal\blo\bog\bg *\b**\b**\b**\b**\b**\b*\n bool al_show_native_file_dialog(ALLEGRO_DISPLAY *display,\n ALLEGRO_FILECHOOSER *dialog)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Show the dialog window. The display may be NULL, otherwise the given display is\n treated as the parent if possible.\n This function blocks the calling thread until it returns, so you may want to\n spawn a thread with _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bt_\bh_\br_\be_\ba_\bd and call it from inside that thread.\n Returns true on success, false on failure.\n-Examples:\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_n\bna\bat\bti\biv\bve\be_\b_f\bfi\bil\ble\be_\b_d\bdi\bia\bal\blo\bog\bg_\b_c\bco\bou\bun\bnt\bt *\b**\b**\b**\b**\b**\b*\n int al_get_native_file_dialog_count(const ALLEGRO_FILECHOOSER *dialog)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the number of files selected, or 0 if the dialog was cancelled.\n-Examples:\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_n\bna\bat\bti\biv\bve\be_\b_f\bfi\bil\ble\be_\b_d\bdi\bia\bal\blo\bog\bg_\b_p\bpa\bat\bth\bh *\b**\b**\b**\b**\b**\b*\n const char *al_get_native_file_dialog_path(\n const ALLEGRO_FILECHOOSER *dialog, size_t i)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns one of the selected paths with index i. The index should range from 0\n to the return value of _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\b__\bd_\bi_\ba_\bl_\bo_\bg_\b__\bc_\bo_\bu_\bn_\bt -1.\n-Examples:\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_n\bna\bat\bti\biv\bve\be_\b_f\bfi\bil\ble\be_\b_d\bdi\bia\bal\blo\bog\bg *\b**\b**\b**\b**\b**\b*\n void al_destroy_native_file_dialog(ALLEGRO_FILECHOOSER *dialog)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Frees up all resources used by the file dialog.\n-Examples:\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bho\bow\bw_\b_n\bna\bat\bti\biv\bve\be_\b_m\bme\bes\bss\bsa\bag\bge\be_\b_b\bbo\box\bx *\b**\b**\b**\b**\b**\b*\n int al_show_native_message_box(ALLEGRO_DISPLAY *display,\n char const *title, char const *heading, char const *text,\n char const *buttons, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Show a native GUI message box. This can be used for example to display an error\n message if creation of an initial display fails. The display may be NULL,\n@@ -253,18 +234,14 @@\n \"If you click yes then you are confirming that \\\"Yes\\\" \"\n \"is your response to the query which you have \"\n \"generated by the action you took to open this \"\n \"message box.\",\n NULL,\n ALLEGRO_MESSAGEBOX_YES_NO\n );\n-Examples:\n- * _\be_\bx_\b__\bn_\bo_\bd_\bi_\bs_\bp_\bl_\ba_\by_\b._\bc\n- * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_o\bop\bpe\ben\bn_\b_n\bna\bat\bti\biv\bve\be_\b_t\bte\bex\bxt\bt_\b_l\blo\bog\bg *\b**\b**\b**\b**\b**\b*\n ALLEGRO_TEXTLOG *al_open_native_text_log(char const *title, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Opens a window to which you can append log messages with\n _\ba_\bl_\b__\ba_\bp_\bp_\be_\bn_\bd_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bt_\be_\bx_\bt_\b__\bl_\bo_\bg. This can be useful for debugging if you don\u2019t want\n to depend on a console being available.\n Use _\ba_\bl_\b__\bc_\bl_\bo_\bs_\be_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bt_\be_\bx_\bt_\b__\bl_\bo_\bg to close the window again.\n@@ -274,53 +251,40 @@\n button is pressed, an event is generated; see\n _\ba_\bl_\b__\bg_\be_\bt_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bt_\be_\bx_\bt_\b__\bl_\bo_\bg_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be.\n ALLEGRO_TEXTLOG_MONOSPACE\n Use a monospace font to display the text.\n Returns NULL if there was an error opening the window, or if text log windows\n are not implemented on the platform.\n See also: _\ba_\bl_\b__\ba_\bp_\bp_\be_\bn_\bd_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bt_\be_\bx_\bt_\b__\bl_\bo_\bg, _\ba_\bl_\b__\bc_\bl_\bo_\bs_\be_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bt_\be_\bx_\bt_\b__\bl_\bo_\bg\n-Examples:\n- * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcl\blo\bos\bse\be_\b_n\bna\bat\bti\biv\bve\be_\b_t\bte\bex\bxt\bt_\b_l\blo\bog\bg *\b**\b**\b**\b**\b**\b*\n void al_close_native_text_log(ALLEGRO_TEXTLOG *textlog)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Closes a message log window opened with _\ba_\bl_\b__\bo_\bp_\be_\bn_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bt_\be_\bx_\bt_\b__\bl_\bo_\bg earlier.\n Does nothing if passed NULL.\n See also: _\ba_\bl_\b__\bo_\bp_\be_\bn_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bt_\be_\bx_\bt_\b__\bl_\bo_\bg\n-Examples:\n- * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_a\bap\bpp\bpe\ben\bnd\bd_\b_n\bna\bat\bti\biv\bve\be_\b_t\bte\bex\bxt\bt_\b_l\blo\bog\bg *\b**\b**\b**\b**\b**\b*\n void al_append_native_text_log(ALLEGRO_TEXTLOG *textlog,\n char const *format, ...)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Appends a line of text to the message log window and scrolls to the bottom (if\n the line would not be visible otherwise). This works like printf. A line is\n continued until you add a newline character.\n If the window is NULL then this function will fall back to calling printf. This\n makes it convenient to support logging to a window or a terminal.\n-Examples:\n- * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_n\bna\bat\bti\biv\bve\be_\b_t\bte\bex\bxt\bt_\b_l\blo\bog\bg_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_EVENT_SOURCE *al_get_native_text_log_event_source(\n ALLEGRO_TEXTLOG *textlog)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get an event source for a text log window. The possible events are:\n ALLEGRO_EVENT_NATIVE_DIALOG_CLOSE\n The window was requested to be closed, either by pressing the close\n button or pressing Escape on the keyboard. The user.data1 field will hold\n a pointer to the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bT_\bE_\bX_\bT_\bL_\bO_\bG which generated the event. The\n user.data2 field will be 1 if the event was generated as a result of a\n key press; otherwise it will be zero.\n-Examples:\n- * _\bc_\bo_\bm_\bm_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bs_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\br_\be_\bs_\ba_\bm_\bp_\bl_\be_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_a\bal\bll\ble\beg\bgr\bro\bo_\b_n\bna\bat\bti\biv\bve\be_\b_d\bdi\bia\bal\blo\bog\bg_\b_v\bve\ber\brs\bsi\bio\bon\bn *\b**\b**\b**\b**\b**\b*\n uint32_t al_get_allegro_native_dialog_version(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the (compiled) version of the addon, in the same format as\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bl_\bl_\be_\bg_\br_\bo_\b__\bv_\be_\br_\bs_\bi_\bo_\bn.\n *\b**\b**\b**\b**\b**\b* M\bMe\ben\bnu\bus\bs *\b**\b**\b**\b**\b**\b*\n Menus are implemented on Windows, X and OS X. Menus on X are implemented with\n@@ -369,16 +333,14 @@\n al_set_display_menu(display, NULL) before destroying any display with a menu\n attached, to avoid leaking resources.\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_M\bME\bEN\bNU\bU *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_MENU ALLEGRO_MENU;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque data type that represents a menu that contains menu items. Each of\n the menu items may optionally include a sub-menu.\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_M\bME\bEN\bNU\bU_\b_I\bIN\bNF\bFO\bO *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_MENU_INFO {\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A structure that defines how to create a complete menu system. For standard\n menu items, the following format is used:\n { caption, id, flags, icon }\n For special items, these macros are helpful:\n@@ -404,16 +366,14 @@\n ALLEGRO_END_OF_MENU\n };\n \n ALLEGRO_MENU *menu = al_build_menu(menu_info);\n If you prefer, you can build the menu without the structure by using\n _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\be_\bn_\bu and _\ba_\bl_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm.\n See also: _\ba_\bl_\b__\bb_\bu_\bi_\bl_\bd_\b__\bm_\be_\bn_\bu\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_m\bme\ben\bnu\bu *\b**\b**\b**\b**\b*\n ALLEGRO_MENU *al_create_menu(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates a menu container that can hold menu items.\n Returns NULL on failure.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\bo_\bp_\bu_\bp_\b__\bm_\be_\bn_\bu, _\ba_\bl_\b__\bb_\bu_\bi_\bl_\bd_\b__\bm_\be_\bn_\bu\n@@ -422,38 +382,32 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates a menu container for popup menus. Only the root (outermost) menu should\n be created with this function. Sub menus of popups should be created with\n _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\be_\bn_\bu.\n Returns NULL on failure.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\be_\bn_\bu, _\ba_\bl_\b__\bb_\bu_\bi_\bl_\bd_\b__\bm_\be_\bn_\bu\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_b\bbu\bui\bil\bld\bd_\b_m\bme\ben\bnu\bu *\b**\b**\b**\b**\b*\n ALLEGRO_MENU *al_build_menu(ALLEGRO_MENU_INFO *info)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Builds a menu based on the specifications of a sequence of ALLEGRO_MENU_INFO\n elements.\n Returns a pointer to the root ALLEGRO_MENU, or NULL on failure. To gain access\n to the other menus and items, you will need to search for them using\n _\ba_\bl_\b__\bf_\bi_\bn_\bd_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm.\n Since: 5.1.0\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bM_\bE_\bN_\bU_\b__\bI_\bN_\bF_\bO, _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\be_\bn_\bu, _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\bo_\bp_\bu_\bp_\b__\bm_\be_\bn_\bu\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_a\bap\bpp\bpe\ben\bnd\bd_\b_m\bme\ben\bnu\bu_\b_i\bit\bte\bem\bm *\b**\b**\b**\b**\b*\n int al_append_menu_item(ALLEGRO_MENU *parent, char const *title, uint16_t id,\n int flags, ALLEGRO_BITMAP *icon, ALLEGRO_MENU *submenu)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Appends a menu item to the end of the menu. See _\ba_\bl_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm for more\n information.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm, _\ba_\bl_\b__\br_\be_\bm_\bo_\bv_\be_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bns\bse\ber\brt\bt_\b_m\bme\ben\bnu\bu_\b_i\bit\bte\bem\bm *\b**\b**\b**\b**\b*\n int al_insert_menu_item(ALLEGRO_MENU *parent, int pos, char const *title,\n uint16_t id, int flags, ALLEGRO_BITMAP *icon, ALLEGRO_MENU *submenu)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Inserts a menu item at the spot specified. See the introductory text for a\n detailed explanation of how the pos parameter is interpreted.\n The parent menu can be a popup menu or a regular menu. To underline one\n@@ -481,44 +435,36 @@\n a sub-menu, it too is destroyed. Any references to it are invalidated. If you\n want to preserve that sub-menu, you should first make a copy with\n _\ba_\bl_\b__\bc_\bl_\bo_\bn_\be_\b__\bm_\be_\bn_\bu.\n This is safe to call on a menu that is currently being displayed.\n Returns true if an item was removed.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\ba_\bp_\bp_\be_\bn_\bd_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm, _\ba_\bl_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bm_\be_\bn_\bu\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcl\blo\bon\bne\be_\b_m\bme\ben\bnu\bu *\b**\b**\b**\b**\b*\n ALLEGRO_MENU *al_clone_menu(ALLEGRO_MENU *menu)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Makes a copy of a menu so that it can be reused on another display. The menu\n being cloned can be anything: a regular menu, a popup menu, or a sub-menu.\n Returns the cloned menu.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bc_\bl_\bo_\bn_\be_\b__\bm_\be_\bn_\bu_\b__\bf_\bo_\br_\b__\bp_\bo_\bp_\bu_\bp\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcl\blo\bon\bne\be_\b_m\bme\ben\bnu\bu_\b_f\bfo\bor\br_\b_p\bpo\bop\bpu\bup\bp *\b**\b**\b**\b**\b*\n ALLEGRO_MENU *al_clone_menu_for_popup(ALLEGRO_MENU *menu)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Exactly like _\ba_\bl_\b__\bc_\bl_\bo_\bn_\be_\b__\bm_\be_\bn_\bu, except that the copy is for a popup menu.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bc_\bl_\bo_\bn_\be_\b__\bm_\be_\bn_\bu\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_m\bme\ben\bnu\bu *\b**\b**\b**\b**\b*\n void al_destroy_menu(ALLEGRO_MENU *menu)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroys an entire menu, including its sub-menus. Any references to it or a\n sub-menu are no longer valid. It is safe to call this on a menu that is\n currently being displayed.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\br_\be_\bm_\bo_\bv_\be_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bme\ben\bnu\bu_\b_i\bit\bte\bem\bm_\b_c\bca\bap\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n const char *al_get_menu_item_caption(ALLEGRO_MENU *menu, int pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the caption associated with the menu item. It is valid as long as the\n caption is not modified.\n Returns NULL if the item was not found.\n Since: 5.1.0\n@@ -526,35 +472,29 @@\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bme\ben\bnu\bu_\b_i\bit\bte\bem\bm_\b_c\bca\bap\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n void al_set_menu_item_caption(ALLEGRO_MENU *menu, int pos, const char *caption)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Updates the menu item caption with the new caption. This will invalidate any\n previous calls to _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm_\b__\bc_\ba_\bp_\bt_\bi_\bo_\bn.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm_\b__\bc_\ba_\bp_\bt_\bi_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_m\bme\ben\bnu\bu_\b_i\bit\bte\bem\bm_\b_f\bfl\bla\bag\bgs\bs *\b**\b**\b**\b**\b*\n int al_get_menu_item_flags(ALLEGRO_MENU *menu, int pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the currently set flags. See _\ba_\bl_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm for a description of\n the available flags.\n Returns -1 if the item was not found.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bt_\bo_\bg_\bg_\bl_\be_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm_\b__\bf_\bl_\ba_\bg_\bs\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bme\ben\bnu\bu_\b_i\bit\bte\bem\bm_\b_f\bfl\bla\bag\bgs\bs *\b**\b**\b**\b**\b*\n void al_set_menu_item_flags(ALLEGRO_MENU *menu, int pos, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Updates the menu item\u2019s flags. See _\ba_\bl_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm for a description of the\n available flags.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm_\b__\bf_\bl_\ba_\bg_\bs, _\ba_\bl_\b__\bt_\bo_\bg_\bg_\bl_\be_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm_\b__\bf_\bl_\ba_\bg_\bs\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_t\bto\bog\bgg\bgl\ble\be_\b_m\bme\ben\bnu\bu_\b_i\bit\bte\bem\bm_\b_f\bfl\bla\bag\bgs\bs *\b**\b**\b**\b**\b*\n int al_toggle_menu_item_flags(ALLEGRO_MENU *menu, int pos, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Toggles the specified menu item\u2019s flags. See _\ba_\bl_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm for a\n description of the available flags.\n Returns a bitfield of only the specified flags that are set after the toggle. A\n flag that was not toggled will not be returned, even if it is set. Returns -\n@@ -577,26 +517,22 @@\n Sets the icon for the specified menu item. The menu assumes ownership of the\n ALLEGRO_BITMAP and may invalidate the pointer, so you must clone it if you wish\n to continue using it.\n If a video bitmap is passed, it will automatically be converted to a memory\n bitmap, so it is preferable to pass a memory bitmap.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm_\b__\bi_\bc_\bo_\bn, _\ba_\bl_\b__\bc_\bl_\bo_\bn_\be_\b__\bb_\bi_\bt_\bm_\ba_\bp\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_f\bfi\bin\bnd\bd_\b_m\bme\ben\bnu\bu *\b**\b**\b**\b**\b*\n ALLEGRO_MENU *al_find_menu(ALLEGRO_MENU *haystack, uint16_t id)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Searches in the haystack menu for any submenu with the given id. (Note that\n this only represents a literal ID, and cannot be used as an index.)\n Returns the menu, if found. Otherwise returns NULL.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bf_\bi_\bn_\bd_\b__\bm_\be_\bn_\bu_\b__\bi_\bt_\be_\bm\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_f\bfi\bin\bnd\bd_\b_m\bme\ben\bnu\bu_\b_i\bit\bte\bem\bm *\b**\b**\b**\b**\b*\n bool al_find_menu_item(ALLEGRO_MENU *haystack, uint16_t id, ALLEGRO_MENU\n **menu,\n int *index)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Searches in the haystack menu for an item with the given id. (Note that this\n only represents a literal ID, and cannot be used as an index.)\n@@ -611,16 +547,14 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the default event source used for menu clicks. If a menu was not given\n its own event source via _\ba_\bl_\b__\be_\bn_\ba_\bb_\bl_\be_\b__\bm_\be_\bn_\bu_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be, then it will use this\n default source.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be, _\ba_\bl_\b__\be_\bn_\ba_\bb_\bl_\be_\b__\bm_\be_\bn_\bu_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be,\n _\ba_\bl_\b__\bd_\bi_\bs_\ba_\bb_\bl_\be_\b__\bm_\be_\bn_\bu_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_e\ben\bna\bab\bbl\ble\be_\b_m\bme\ben\bnu\bu_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b*\n ALLEGRO_EVENT_SOURCE *al_enable_menu_event_source(ALLEGRO_MENU *menu)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Enables a unique event source for this menu. It and all of its sub-menus will\n use this event source. (It is safe to call this multiple times on the same\n menu.)\n Returns the event source.\n@@ -652,16 +586,14 @@\n N\bNo\bot\bte\be:\b: Attaching a menu may cause the window as available to your\n application to be resized! You should listen for a resize event,\n check how much space was lost, and resize the window accordingly if\n you want to maintain your window\u2019s prior size.\n Returns true if successful.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\be_\bn_\bu, _\ba_\bl_\b__\br_\be_\bm_\bo_\bv_\be_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bm_\be_\bn_\bu\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_p\bpo\bop\bpu\bup\bp_\b_m\bme\ben\bnu\bu *\b**\b**\b**\b**\b*\n bool al_popup_menu(ALLEGRO_MENU *popup, ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Displays a context menu next to the mouse cursor. The menu must have been\n created with _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\bo_\bp_\bu_\bp_\b__\bm_\be_\bn_\bu. It generates events just like a regular\n display menu does. It is possible that the menu will be canceled without any\n selection being made.\n@@ -671,21 +603,17 @@\n Returns true if the context menu was displayed.\n N\bNo\bot\bte\be:\b: On Linux this function will fail if any of the mouse keys are\n held down. I.e. it will only reliably work if you handle it in\n ALLEGRO_MOUSE_BUTTON_UP events and even then only if that event\n corresponds to the final mouse button that was pressed.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\bo_\bp_\bu_\bp_\b__\bm_\be_\bn_\bu\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bem\bmo\bov\bve\be_\b_d\bdi\bis\bsp\bpl\bla\bay\by_\b_m\bme\ben\bnu\bu *\b**\b**\b**\b**\b*\n ALLEGRO_MENU *al_remove_display_menu(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Detaches the menu associated with the display and returns it. The menu can then\n be used on a different display.\n If you simply want to destroy the active menu, you can call _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bm_\be_\bn_\bu\n with a NULL menu.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bd_\bi_\bs_\bp_\bl_\ba_\by_\b__\bm_\be_\bn_\bu\n-Examples:\n- * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/path.html", "source2": "./usr/share/doc/allegro5-doc/refman/path.html", "unified_diff": "@@ -245,17 +245,17 @@\n href=\"path.html#al_create_path_for_directory\">al_create_path_for_directory,\n al_destroy_path

    \n

    Examples:

    \n
      \n
    • ex_path.c
    • \n
    • ex_path_test.c
    • \n-
    • ex_audio_chain.cpp
    • \n+
    • ex_path_test.c
    • \n
    \n

    al_create_path_for_directory

    \n
    ALLEGRO_PATH *al_create_path_for_directory(const char *str)
    \n

    Source\n Code

    \n

    This is the same as Examples:

    \n
      \n
    • ex_get_path.c
    • \n
    • ex_path.c
    • \n
    • ex_path_test.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_chain.cpp#L732\">ex_audio_chain.cpp\n
    \n

    al_clone_path

    \n
    ALLEGRO_PATH *al_clone_path(const ALLEGRO_PATH *path)
    \n

    Source\n Code

    \n

    Clones an ALLEGRO_PATH structure. Returns NULL on failure.

    \n@@ -326,17 +326,17 @@\n

    For example, if head is \u201c/anchor/\u201d and tail is\n \u201cdata/file.ext\u201d, then after the call tail becomes\n \u201c/anchor/data/file.ext\u201d.

    \n

    See also: al_join_paths

    \n

    Examples:

    \n
      \n
    • ex_path_test.c
    • \n-
    • ex_audio_chain.cpp
    • \n+
    • ex_path_test.c
    • \n
    \n

    al_get_path_drive

    \n
    const char *al_get_path_drive(const ALLEGRO_PATH *path)
    \n

    Source\n Code

    \n

    Return the drive letter on a path, or the empty string if there is\n@@ -381,17 +381,17 @@\n href=\"path.html#al_get_path_num_components\">al_get_path_num_components,\n al_get_path_tail

    \n

    Examples:

    \n
      \n
    • ex_path.c
    • \n
    • ex_path_test.c
    • \n-
    • ex_audio_chain.cpp
    • \n+
    • ex_path_test.c
    • \n
    \n

    al_get_path_tail

    \n
    const char *al_get_path_tail(const ALLEGRO_PATH *path)
    \n

    Source\n Code

    \n

    Returns the last directory component, or NULL if there are no\n@@ -536,17 +536,17 @@\n href=\"path.html#al_insert_path_component\">al_insert_path_component,\n al_replace_path_component,\n al_drop_path_tail

    \n

    Examples:

    \n
      \n
    • ex_path_test.c
    • \n-
    • ex_audio_chain.cpp
    • \n+
    • ex_path_test.c
    • \n
    \n

    al_drop_path_tail

    \n
    void al_drop_path_tail(ALLEGRO_PATH *path)
    \n

    Source\n Code

    \n

    Remove the last directory component, if any.

    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -81,16 +81,16 @@\n Create a path structure from a string. The last component, if it is followed by\n a directory separator and is neither \u201c.\u201d nor \u201c..\u201d, is treated as the last\n directory name in the path. Otherwise the last component is treated as the\n filename. The string may be NULL for an empty path.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\ba_\bt_\bh_\b__\bf_\bo_\br_\b__\bd_\bi_\br_\be_\bc_\bt_\bo_\br_\by, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bp_\ba_\bt_\bh\n Examples:\n * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b._\bc\n- * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_p\bpa\bat\bth\bh_\b_f\bfo\bor\br_\b_d\bdi\bir\bre\bec\bct\bto\bor\bry\by *\b**\b**\b**\b**\b**\b*\n ALLEGRO_PATH *al_create_path_for_directory(const char *str)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This is the same as _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\ba_\bt_\bh, but interprets the passed string as a\n directory path. The filename component of the returned path will always be\n empty.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\ba_\bt_\bh, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bp_\ba_\bt_\bh\n@@ -98,15 +98,15 @@\n void al_destroy_path(ALLEGRO_PATH *path)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Free a path structure. Does nothing if passed NULL.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\ba_\bt_\bh, _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bp_\ba_\bt_\bh_\b__\bf_\bo_\br_\b__\bd_\bi_\br_\be_\bc_\bt_\bo_\br_\by\n Examples:\n * _\be_\bx_\b__\bg_\be_\bt_\b__\bp_\ba_\bt_\bh_\b._\bc\n * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b._\bc\n- * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n+ * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcl\blo\bon\bne\be_\b_p\bpa\bat\bth\bh *\b**\b**\b**\b**\b**\b*\n ALLEGRO_PATH *al_clone_path(const ALLEGRO_PATH *path)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Clones an ALLEGRO_PATH structure. Returns NULL on failure.\n See also: _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bp_\ba_\bt_\bh\n Examples:\n * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b._\bc\n@@ -131,16 +131,16 @@\n Concatenate two path structures, modifying the second path structure. If t\bta\bai\bil\bl\n is an absolute path, this function does nothing. Otherwise, the drive and path\n components in h\bhe\bea\bad\bd are inserted at the start of t\bta\bai\bil\bl.\n For example, if h\bhe\bea\bad\bd is \u201c/anchor/\u201d and t\bta\bai\bil\bl is \u201cdata/file.ext\u201d, then after the\n call t\bta\bai\bil\bl becomes \u201c/anchor/data/file.ext\u201d.\n See also: _\ba_\bl_\b__\bj_\bo_\bi_\bn_\b__\bp_\ba_\bt_\bh_\bs\n Examples:\n- * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_p\bpa\bat\bth\bh_\b_d\bdr\bri\biv\bve\be *\b**\b**\b**\b**\b**\b*\n const char *al_get_path_drive(const ALLEGRO_PATH *path)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the drive letter on a path, or the empty string if there is none.\n The \u201cdrive letter\u201d is only used on Windows, and is usually a string like \u201cc:\u201d,\n but may be something like \u201c\\\\Computer Name\u201d in the case of UNC (Uniform Naming\n Convention) syntax.\n@@ -162,16 +162,16 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the i\u2019th directory component of a path, counting from zero. If the index\n is negative then count from the right, i.e.\u00a0-1 refers to the last path\n component. It is an error to pass an index which is out of bounds.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bp_\ba_\bt_\bh_\b__\bn_\bu_\bm_\b__\bc_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bs, _\ba_\bl_\b__\bg_\be_\bt_\b__\bp_\ba_\bt_\bh_\b__\bt_\ba_\bi_\bl\n Examples:\n * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b._\bc\n- * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_p\bpa\bat\bth\bh_\b_t\bta\bai\bil\bl *\b**\b**\b**\b**\b**\b*\n const char *al_get_path_tail(const ALLEGRO_PATH *path)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the last directory component, or NULL if there are no directory\n components.\n Examples:\n * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n@@ -248,16 +248,16 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Delete the i\u2019th directory component. If the index is negative then count from\n the right, i.e.\u00a0-1 refers to the last path component. It is an error to pass an\n index which is out of bounds.\n See also: _\ba_\bl_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bp_\ba_\bt_\bh_\b__\bc_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt, _\ba_\bl_\b__\br_\be_\bp_\bl_\ba_\bc_\be_\b__\bp_\ba_\bt_\bh_\b__\bc_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt,\n _\ba_\bl_\b__\bd_\br_\bo_\bp_\b__\bp_\ba_\bt_\bh_\b__\bt_\ba_\bi_\bl\n Examples:\n- * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bro\bop\bp_\b_p\bpa\bat\bth\bh_\b_t\bta\bai\bil\bl *\b**\b**\b**\b**\b**\b*\n void al_drop_path_tail(ALLEGRO_PATH *path)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Remove the last directory component, if any.\n See also: _\ba_\bl_\b__\br_\be_\bm_\bo_\bv_\be_\b__\bp_\ba_\bt_\bh_\b__\bc_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt\n Examples:\n * _\be_\bx_\b__\bp_\ba_\bt_\bh_\b__\bt_\be_\bs_\bt_\b._\bc\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/physfs.html", "source2": "./usr/share/doc/allegro5-doc/refman/physfs.html", "unified_diff": "@@ -224,19 +224,14 @@\n
    \n

    Note: PhysFS does not support the text-mode reading and\n writing, which means that Windows-style newlines will not be\n preserved.

    \n
    \n

    See also: al_set_new_file_interface.

    \n-

    Examples:

    \n-
      \n-
    • ex_physfs.c
    • \n-
    \n al_get_allegro_physfs_version\n
    uint32_t al_get_allegro_physfs_version(void)
    \n

    Source\n Code

    \n

    Returns the (compiled) version of the addon, in the same format as al_get_win_window_handle\n

    HWND al_get_win_window_handle(ALLEGRO_DISPLAY *display)
    \n

    Source\n Code

    \n

    Returns the handle to the window that the passed display is\n using.

    \n-

    Examples:

    \n-
      \n-
    • ex_ogre3d.cpp
    • \n-
    \n

    al_win_add_window_callback

    \n
    bool al_win_add_window_callback(ALLEGRO_DISPLAY *display,\n    bool (*callback)(ALLEGRO_DISPLAY *display, UINT message, WPARAM wparam,\n    LPARAM lparam, LRESULT *result, void *userdata), void *userdata)
    \n

    Source\n Code

    \n@@ -421,19 +416,14 @@\n you can set an icon before calling al_create_display. This works by\n setting the icon before XMapWindow.

    \n

    Since: 5.2.3

    \n
    \n

    Unstable\n API: New API.

    \n
    \n-

    Examples:

    \n-
      \n-
    • ex_icon2.c
    • \n-
    \n

    \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -65,16 +65,14 @@\n *\b**\b**\b**\b**\b**\b* W\bWi\bin\bnd\bdo\bow\bws\bs *\b**\b**\b**\b**\b**\b*\n These functions are declared in the following header file:\n #include \n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_w\bwi\bin\bn_\b_w\bwi\bin\bnd\bdo\bow\bw_\b_h\bha\ban\bnd\bdl\ble\be *\b**\b**\b**\b**\b*\n HWND al_get_win_window_handle(ALLEGRO_DISPLAY *display)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the handle to the window that the passed display is using.\n-Examples:\n- * _\be_\bx_\b__\bo_\bg_\br_\be_\b3_\bd_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_w\bwi\bin\bn_\b_a\bad\bdd\bd_\b_w\bwi\bin\bnd\bdo\bow\bw_\b_c\bca\bal\bll\blb\bba\bac\bck\bk *\b**\b**\b**\b**\b*\n bool al_win_add_window_callback(ALLEGRO_DISPLAY *display,\n bool (*callback)(ALLEGRO_DISPLAY *display, UINT message, WPARAM wparam,\n LPARAM lparam, LRESULT *result, void *userdata), void *userdata)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n The specified callback function will intercept the window\u2019s message before\n Allegro processes it. If the callback function consumes the event, then it\n@@ -197,10 +195,8 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n On some window managers (notably Ubuntu\u2019s Unity) al_set_display_icon doesn\u2019t\n work and you need to use a .desktop file. But with this function you can set an\n icon before calling al_create_display. This works by setting the icon before\n XMapWindow.\n Since: 5.2.3\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: New API.\n-Examples:\n- * _\be_\bx_\b__\bi_\bc_\bo_\bn_\b2_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/primitives.html", "source2": "./usr/share/doc/allegro5-doc/refman/primitives.html", "unified_diff": "@@ -343,23 +343,14 @@\n

    Source\n Code

    \n

    Initializes the primitives addon.

    \n

    Returns: True on success, false on failure.

    \n

    See also: al_shutdown_primitives_addon

    \n-

    Examples:

    \n-
      \n-
    • ex_touch_input.c
    • \n-
    • ex_blend_bench.c
    • \n-
    • ex_enet_client.c
    • \n-
    \n al_is_primitives_addon_initialized\n
    bool al_is_primitives_addon_initialized(void)
    \n

    Source\n Code

    \n

    Returns true if the primitives addon is initialized, otherwise\n@@ -483,23 +474,14 @@\n

  • x1, y1, x2, y2 - Start and end points of the line
  • \n
  • color - Color of the line
  • \n
  • thickness - Thickness of the line, pass <= 0 to draw\n hairline lines
  • \n \n

    See also: al_draw_soft_line

    \n-

    Examples:

    \n-
      \n-
    • ex_font_justify.cpp
    • \n-
    • ex_resize.c
    • \n-
    • ex_mouse_warp.c
    • \n-
    \n

    al_draw_triangle

    \n
    void al_draw_triangle(float x1, float y1, float x2, float y2,\n    float x3, float y3, ALLEGRO_COLOR color, float thickness)
    \n

    Source\n Code

    \n

    Draws an outlined triangle.

    \n@@ -510,38 +492,28 @@\n
  • thickness - Thickness of the lines, pass <= 0 to\n draw hairline lines
  • \n \n

    See also: al_draw_filled_triangle,\n al_draw_soft_triangle

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_filled_triangle

    \n
    void al_draw_filled_triangle(float x1, float y1, float x2, float y2,\n    float x3, float y3, ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n

    Draws a filled triangle.

    \n

    Parameters:

    \n
      \n
    • x1, y1, x2, y2, x3, y3 - Three points of the triangle
    • \n
    • color - Color of the triangle
    • \n
    \n

    See also: al_draw_triangle

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_rectangle

    \n
    void al_draw_rectangle(float x1, float y1, float x2, float y2,\n    ALLEGRO_COLOR color, float thickness)
    \n

    Source\n Code

    \n

    Draws an outlined rectangle.

    \n@@ -553,23 +525,14 @@\n
  • thickness - Thickness of the lines, pass <= 0 to\n draw hairline lines
  • \n \n

    See also: al_draw_filled_rectangle,\n al_draw_rounded_rectangle

    \n-

    Examples:

    \n-
      \n-
    • ex_mouse.c
    • \n-
    • ex_font_justify.cpp
    • \n-
    • ex_subbitmap.c
    • \n-
    \n

    al_draw_filled_rectangle

    \n
    void al_draw_filled_rectangle(float x1, float y1, float x2, float y2,\n    ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n

    Draws a filled rectangle.

    \n@@ -578,23 +541,14 @@\n
  • x1, y1, x2, y2 - Upper left and lower right points of the\n rectangle
  • \n
  • color - Color of the rectangle
  • \n \n

    See also: al_draw_rectangle, al_draw_filled_rounded_rectangle

    \n-

    Examples:

    \n-
      \n-
    • ex_mouse.c
    • \n-
    • ex_timer.c
    • \n-
    • ex_window_maximized.c
    • \n-
    \n

    al_draw_rounded_rectangle

    \n
    void al_draw_rounded_rectangle(float x1, float y1, float x2, float y2,\n    float rx, float ry, ALLEGRO_COLOR color, float thickness)
    \n

    Source\n Code

    \n

    Draws an outlined rounded rectangle.

    \n@@ -606,23 +560,14 @@\n
  • rx, ry - The radii of the round
  • \n
  • thickness - Thickness of the lines, pass <= 0 to\n draw hairline lines
  • \n \n

    See also: al_draw_filled_rounded_rectangle,\n al_draw_rectangle

    \n-

    Examples:

    \n-
      \n-
    • ex_threads.c
    • \n-
    • ex_prim.c
    • \n-
    • ex_audio_chain.cpp
    • \n-
    \n al_draw_filled_rounded_rectangle\n
    void al_draw_filled_rounded_rectangle(float x1, float y1, float x2, float y2,\n    float rx, float ry, ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n@@ -634,23 +579,14 @@\n
  • color - Color of the rectangle
  • \n
  • rx, ry - The radii of the round
  • \n \n

    See also: al_draw_rounded_rectangle,\n al_draw_filled_rectangle

    \n-

    Examples:

    \n-
      \n-
    • ex_threads.c
    • \n-
    • ex_video.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_calculate_arc

    \n
    void al_calculate_arc(float* dest, int stride, float cx, float cy,\n    float rx, float ry, float start_theta, float delta_theta, float thickness,\n    int num_points)
    \n

    Source\n Code

    \n@@ -711,19 +647,14 @@\n number to switch direction)\n
  • thickness - Thickness of the arc
  • \n
  • num_points - The number of points to calculate
  • \n \n

    See also: al_draw_arc, al_calculate_spline, al_calculate_ribbon

    \n-

    Examples:

    \n-
      \n-
    • ex_vertex_buffer.c
    • \n-
    \n

    al_draw_pieslice

    \n
    void al_draw_pieslice(float cx, float cy, float r, float start_theta,\n    float delta_theta, ALLEGRO_COLOR color, float thickness)
    \n

    Source\n Code

    \n

    Draws a pieslice (outlined circular sector).

    \n@@ -738,19 +669,14 @@\n negative number to switch direction)\n
  • thickness - Thickness of the circle, pass <= 0 to\n draw hairline pieslice
  • \n \n

    Since: 5.0.6, 5.1.0

    \n

    See also: al_draw_filled_pieslice

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_filled_pieslice

    \n
    void al_draw_filled_pieslice(float cx, float cy, float r, float start_theta,\n    float delta_theta, ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n

    Draws a filled pieslice (filled circular sector).

    \n@@ -763,19 +689,14 @@\n radians\n
  • delta_theta - Angular span of the pieslice in radians (pass a\n negative number to switch direction)
  • \n \n

    Since: 5.0.6, 5.1.0

    \n

    See also: al_draw_pieslice

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_ellipse

    \n
    void al_draw_ellipse(float cx, float cy, float rx, float ry,\n    ALLEGRO_COLOR color, float thickness)
    \n

    Source\n Code

    \n

    Draws an outlined ellipse.

    \n@@ -786,21 +707,14 @@\n
  • color - Color of the ellipse
  • \n
  • thickness - Thickness of the ellipse, pass <= 0 to\n draw a hairline ellipse
  • \n \n

    See also: al_draw_filled_ellipse,\n al_draw_circle

    \n-

    Examples:

    \n-
      \n-
    • ex_draw.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_filled_ellipse

    \n
    void al_draw_filled_ellipse(float cx, float cy, float rx, float ry,\n    ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n

    Draws a filled ellipse.

    \n@@ -809,21 +723,14 @@\n
  • cx, cy - Center of the ellipse
  • \n
  • rx, ry - Radii of the ellipse
  • \n
  • color - Color of the ellipse
  • \n \n

    See also: al_draw_ellipse, al_draw_filled_circle

    \n-

    Examples:

    \n-
      \n-
    • ex_draw.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_circle

    \n
    void al_draw_circle(float cx, float cy, float r, ALLEGRO_COLOR color,\n    float thickness)
    \n

    Source\n Code

    \n

    Draws an outlined circle.

    \n@@ -834,21 +741,14 @@\n
  • color - Color of the circle
  • \n
  • thickness - Thickness of the circle, pass <= 0 to\n draw a hairline circle
  • \n \n

    See also: al_draw_filled_circle,\n al_draw_ellipse

    \n-

    Examples:

    \n-
      \n-
    • ex_touch_input.c
    • \n-
    • ex_transform.c
    • \n-
    \n

    al_draw_filled_circle

    \n
    void al_draw_filled_circle(float cx, float cy, float r, ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n

    Draws a filled circle.

    \n

    Parameters:

    \n@@ -856,23 +756,14 @@\n
  • cx, cy - Center of the circle
  • \n
  • r - Radius of the circle
  • \n
  • color - Color of the circle
  • \n \n

    See also: al_draw_circle, al_draw_filled_ellipse

    \n-

    Examples:

    \n-
      \n-
    • ex_enet_client.c
    • \n-
    • ex_joystick_hotplugging.c
    • \n-
    • ex_blend2.cpp
    • \n-
    \n

    al_draw_arc

    \n
    void al_draw_arc(float cx, float cy, float r, float start_theta,\n    float delta_theta, ALLEGRO_COLOR color, float thickness)
    \n

    Source\n Code

    \n

    Draws an arc.

    \n@@ -887,19 +778,14 @@\n number to switch direction)\n
  • thickness - Thickness of the arc, pass <= 0 to draw\n hairline arc
  • \n \n

    See also: al_calculate_arc, al_draw_elliptical_arc

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_elliptical_arc

    \n
    void al_draw_elliptical_arc(float cx, float cy, float rx, float ry, float start_theta,\n    float delta_theta, ALLEGRO_COLOR color, float thickness)
    \n

    Source\n Code

    \n

    Draws an elliptical arc.

    \n@@ -915,19 +801,14 @@\n
  • thickness - Thickness of the arc, pass <= 0 to draw\n hairline arc
  • \n \n

    Since: 5.0.6, 5.1.0

    \n

    See also: al_calculate_arc, al_draw_arc

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_calculate_spline

    \n
    void al_calculate_spline(float* dest, int stride, const float points[8],\n    float thickness, int num_segments)
    \n

    Source\n Code

    \n

    Calculates a B\u00e9zier spline given 4 control points. If\n@@ -962,19 +843,14 @@\n points\n

  • color - Color of the spline
  • \n
  • thickness - Thickness of the spline, pass <= 0 to\n draw a hairline spline
  • \n \n

    See also: al_calculate_spline

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_calculate_ribbon

    \n
    void al_calculate_ribbon(float* dest, int dest_stride, const float *points,\n    int points_stride, float thickness, int num_segments)
    \n

    Source\n Code

    \n

    Calculates a ribbon given an array of points. The ribbon will go\n@@ -1077,23 +953,14 @@\n {.x = 256, .y = 256, .z = 0, .color = white, .u = 256, .v = 256}};\n al_draw_prim(v, NULL, texture, 0, 3, ALLEGRO_PRIM_TRIANGLE_LIST);\n

    See also: ALLEGRO_VERTEX, ALLEGRO_PRIM_TYPE, ALLEGRO_VERTEX_DECL, al_draw_indexed_prim

    \n-

    Examples:

    \n-
      \n-
    • ex_prim_shader.c
    • \n-
    • ex_vertex_buffer.c
    • \n-
    • ex_prim_wrap.c
    • \n-
    \n

    al_draw_indexed_prim

    \n
    int al_draw_indexed_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl,\n    ALLEGRO_BITMAP* texture, const int* indices, int num_vtx, int type)
    \n

    Source\n Code

    \n

    Draws a subset of the passed vertex array. This function uses an\n@@ -1114,21 +981,14 @@\n \n

    Returns: Number of primitives drawn

    \n

    See also: ALLEGRO_VERTEX, ALLEGRO_PRIM_TYPE, ALLEGRO_VERTEX_DECL, al_draw_prim

    \n-

    Examples:

    \n-
      \n-
    • ex_projection2.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_vertex_buffer

    \n
    int al_draw_vertex_buffer(ALLEGRO_VERTEX_BUFFER* vertex_buffer,\n    ALLEGRO_BITMAP* texture, int start, int end, int type)
    \n

    Source\n Code

    \n

    Draws a subset of the passed vertex buffer. The vertex buffer must\n@@ -1148,21 +1008,14 @@\n enumeration, specifying what kind of primitive to draw\n \n

    Returns: Number of primitives drawn

    \n

    Since: 5.1.3

    \n

    See also: ALLEGRO_VERTEX_BUFFER,\n ALLEGRO_PRIM_TYPE

    \n-

    Examples:

    \n-
      \n-
    • ex_vertex_buffer.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_indexed_buffer

    \n
    int al_draw_indexed_buffer(ALLEGRO_VERTEX_BUFFER* vertex_buffer,\n    ALLEGRO_BITMAP* texture, ALLEGRO_INDEX_BUFFER* index_buffer,\n    int start, int end, int type)
    \n

    Source\n Code

    \n@@ -1188,19 +1041,14 @@\n \n

    Returns: Number of primitives drawn

    \n

    Since: 5.1.8

    \n

    See also: ALLEGRO_VERTEX_BUFFER,\n ALLEGRO_INDEX_BUFFER,\n ALLEGRO_PRIM_TYPE

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_draw_soft_triangle

    \n
    void al_draw_soft_triangle(\n    ALLEGRO_VERTEX* v1, ALLEGRO_VERTEX* v2, ALLEGRO_VERTEX* v3, uintptr_t state,\n    void (*init)(uintptr_t, ALLEGRO_VERTEX*, ALLEGRO_VERTEX*, ALLEGRO_VERTEX*),\n    void (*first)(uintptr_t, int, int, int, int),\n    void (*step)(uintptr_t, int),\n    void (*draw)(uintptr_t, int, int, int))
    \n@@ -1285,21 +1133,14 @@\n \n

    Returns: Newly created vertex declaration.

    \n

    See also: ALLEGRO_VERTEX_ELEMENT,\n ALLEGRO_VERTEX_DECL,\n al_destroy_vertex_decl

    \n-

    Examples:

    \n-
      \n-
    • ex_prim_shader.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_destroy_vertex_decl

    \n
    void al_destroy_vertex_decl(ALLEGRO_VERTEX_DECL* decl)
    \n

    Source\n Code

    \n

    Destroys a vertex declaration.

    \n

    Parameters:

    \n@@ -1307,19 +1148,14 @@\n
  • decl - Vertex declaration to destroy
  • \n \n

    See also: ALLEGRO_VERTEX_ELEMENT,\n ALLEGRO_VERTEX_DECL,\n al_create_vertex_decl

    \n-

    Examples:

    \n-
      \n-
    • ex_prim_shader.c
    • \n-
    \n

    Vertex buffer routines

    \n

    al_create_vertex_buffer

    \n
    ALLEGRO_VERTEX_BUFFER* al_create_vertex_buffer(ALLEGRO_VERTEX_DECL* decl,\n    const void* initial_data, int num_vertices, int flags)
    \n

    Source\n Code

    \n@@ -1347,39 +1183,25 @@\n as passing ALLEGRO_PRIM_BUFFER_STATIC.\n \n

    Since: 5.1.3

    \n

    See also: ALLEGRO_VERTEX_BUFFER,\n al_destroy_vertex_buffer

    \n-

    Examples:

    \n-
      \n-
    • ex_vertex_buffer.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_destroy_vertex_buffer

    \n
    void al_destroy_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer)
    \n

    Source\n Code

    \n

    Destroys a vertex buffer. Does nothing if passed NULL.

    \n

    Since: 5.1.3

    \n

    See also: ALLEGRO_VERTEX_BUFFER,\n al_create_vertex_buffer

    \n-

    Examples:

    \n-
      \n-
    • ex_vertex_buffer.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_lock_vertex_buffer

    \n
    void* al_lock_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer, int offset,\n    int length, int flags)
    \n

    Source\n Code

    \n

    Locks a vertex buffer so you can access its data. Will return NULL if\n@@ -1394,39 +1216,25 @@\n ALLEGRO_LOCK_READWRITE\n \n

    Since: 5.1.3

    \n

    See also: ALLEGRO_VERTEX_BUFFER,\n al_unlock_vertex_buffer

    \n-

    Examples:

    \n-
      \n-
    • ex_vertex_buffer.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_unlock_vertex_buffer

    \n
    void al_unlock_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer)
    \n

    Source\n Code

    \n

    Unlocks a previously locked vertex buffer.

    \n

    Since: 5.1.3

    \n

    See also: ALLEGRO_VERTEX_BUFFER,\n al_lock_vertex_buffer

    \n-

    Examples:

    \n-
      \n-
    • ex_vertex_buffer.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    al_get_vertex_buffer_size

    \n
    int al_get_vertex_buffer_size(ALLEGRO_VERTEX_BUFFER* buffer)
    \n

    Source\n Code

    \n

    Returns the size of the vertex buffer

    \n

    Since: 5.1.8

    \n@@ -1461,34 +1269,24 @@\n flags specifying how this buffer will be created. Passing 0 is the same\n as passing ALLEGRO_PRIM_BUFFER_STATIC.\n \n

    Since: 5.1.8

    \n

    See also: ALLEGRO_INDEX_BUFFER, al_destroy_index_buffer

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_destroy_index_buffer

    \n
    void al_destroy_index_buffer(ALLEGRO_INDEX_BUFFER* buffer)
    \n

    Source\n Code

    \n

    Destroys a index buffer. Does nothing if passed NULL.

    \n

    Since: 5.1.8

    \n

    See also: ALLEGRO_INDEX_BUFFER, al_create_index_buffer

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_lock_index_buffer

    \n
    void* al_lock_index_buffer(ALLEGRO_INDEX_BUFFER* buffer, int offset,\n     int length, int flags)
    \n

    Source\n Code

    \n

    Locks a index buffer so you can access its data. Will return NULL if\n@@ -1502,34 +1300,24 @@\n

  • flags - ALLEGRO_LOCK_READONLY, ALLEGRO_LOCK_WRITEONLY or\n ALLEGRO_LOCK_READWRITE
  • \n \n

    Since: 5.1.8

    \n

    See also: ALLEGRO_INDEX_BUFFER, al_unlock_index_buffer

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_unlock_index_buffer

    \n
    void al_unlock_index_buffer(ALLEGRO_INDEX_BUFFER* buffer)
    \n

    Source\n Code

    \n

    Unlocks a previously locked index buffer.

    \n

    Since: 5.1.8

    \n

    See also: ALLEGRO_INDEX_BUFFER, al_lock_index_buffer

    \n-

    Examples:

    \n-
      \n-
    • ex_prim.c
    • \n-
    \n

    al_get_index_buffer_size

    \n
    int al_get_index_buffer_size(ALLEGRO_INDEX_BUFFER* buffer)
    \n

    Source\n Code

    \n

    Returns the size of the index buffer

    \n

    Since: 5.1.8

    \n@@ -1577,19 +1365,14 @@\n

    The stride may also be negative if the vertices are stored in reverse\n order.

    \n

    Since: 5.1.0

    \n

    See also: al_draw_polygon, ALLEGRO_LINE_JOIN, ALLEGRO_LINE_CAP

    \n-

    Examples:

    \n-
      \n-
    • ex_polygon.c
    • \n-
    \n

    al_draw_polygon

    \n
    void al_draw_polygon(const float *vertices, int vertex_count,\n    int join_style, ALLEGRO_COLOR color, float thickness, float miter_limit)
    \n

    Source\n Code

    \n

    Draw an unfilled polygon. This is the same as passing\n@@ -1607,19 +1390,14 @@\n

  • miter_limit - Parameter for miter join style
  • \n \n

    Since: 5.1.0

    \n

    See also: al_draw_filled_polygon,\n al_draw_polyline, ALLEGRO_LINE_JOIN

    \n-

    Examples:

    \n-
      \n-
    • ex_polygon.c
    • \n-
    \n

    al_draw_filled_polygon

    \n
    void al_draw_filled_polygon(const float *vertices, int vertex_count,\n    ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n

    Draw a filled, simple polygon. Simple means it does not have to be\n@@ -1631,19 +1409,14 @@\n \n

    When the y-axis is facing downwards (the usual), the coordinates must\n be ordered anti-clockwise.

    \n

    Since: 5.1.0

    \n

    See also: al_draw_polygon, al_draw_filled_polygon_with_holes

    \n-

    Examples:

    \n-
      \n-
    • ex_polygon.c
    • \n-
    \n al_draw_filled_polygon_with_holes\n
    void al_draw_filled_polygon_with_holes(const float *vertices,\n    const int *vertex_counts, ALLEGRO_COLOR color)
    \n

    Source\n Code

    \n@@ -1686,19 +1459,14 @@\n

    Since: 5.1.0

    \n

    See also: al_draw_filled_polygon,\n al_draw_filled_polygon_with_holes,\n al_triangulate_polygon

    \n-

    Examples:

    \n-
      \n-
    • ex_polygon.c
    • \n-
    \n

    al_triangulate_polygon

    \n
    bool al_triangulate_polygon(\n    const float* vertices, size_t vertex_stride, const int* vertex_counts,\n    void (*emit_triangle)(int, int, int, void*), void* userdata)
    \n

    Source\n Code

    \n@@ -1742,44 +1510,28 @@\n
  • x, y, z - Position of the vertex (float)
  • \n
  • u, v - Texture coordinates measured in pixels (float)
  • \n
  • color - ALLEGRO_COLOR\n structure, storing the color of the vertex
  • \n \n

    See also: ALLEGRO_PRIM_ATTR

    \n-

    Examples:

    \n-
      \n-
    • ex_shader.cpp
    • \n-
    • ex_shader_target.c
    • \n-
    • ex_prim_shader.c
    • \n-
    \n

    ALLEGRO_VERTEX_DECL

    \n
    typedef struct ALLEGRO_VERTEX_DECL ALLEGRO_VERTEX_DECL;
    \n

    Source\n Code

    \n

    A vertex declaration. This opaque structure is responsible for\n describing the format and layout of a user defined custom vertex. It is\n created and destroyed by specialized functions.

    \n

    See also: al_create_vertex_decl,\n al_destroy_vertex_decl,\n ALLEGRO_VERTEX_ELEMENT

    \n-

    Examples:

    \n-
      \n-
    • ex_prim_shader.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    ALLEGRO_VERTEX_ELEMENT

    \n
    typedef struct ALLEGRO_VERTEX_ELEMENT ALLEGRO_VERTEX_ELEMENT;
    \n

    Source\n Code

    \n

    A small structure describing a certain element of a vertex. E.g. the\n position of the vertex, or its color. These structures are used by the\n@@ -1814,21 +1566,14 @@\n structure. The C function offsetof is very useful here.\n \n

    See also: al_create_vertex_decl,\n ALLEGRO_VERTEX_DECL,\n ALLEGRO_PRIM_ATTR, ALLEGRO_PRIM_STORAGE

    \n-

    Examples:

    \n-
      \n-
    • ex_prim_shader.c
    • \n-
    • ex_prim.c
    • \n-
    \n

    ALLEGRO_PRIM_TYPE

    \n
    typedef enum ALLEGRO_PRIM_TYPE
    \n

    Source\n Code

    \n

    Enumerates the types of primitives this addon can draw.

    \n
      \n@@ -2003,19 +1748,14 @@\n \n

      See the picture for the difference.

      \n

      The maximum miter length (relative to the line width) can be\n specified as parameter to the polygon functions.

      \n

      Since: 5.1.0

      \n

      See also: al_draw_polygon

      \n-

      Examples:

      \n-
        \n-
      • ex_polygon.c
      • \n-
      \n

      ALLEGRO_LINE_CAP

      \n
      typedef enum ALLEGRO_LINE_CAP
      \n

      Source\n Code

      \n
        \n
      • ALLEGRO_LINE_CAP_NONE
      • \n@@ -2033,56 +1773,39 @@\n

        ALLEGRO_LINE_CAP_CLOSED is different from the others - it causes the\n polygon to have no caps. (And the ALLEGRO_LINE_JOIN style\n will determine how the vertex looks.)

        \n

        Since: 5.1.0

        \n

        See also: al_draw_polygon

        \n-

        Examples:

        \n-
          \n-
        • ex_polygon.c
        • \n-
        \n

        ALLEGRO_VERTEX_BUFFER

        \n
        typedef struct ALLEGRO_VERTEX_BUFFER ALLEGRO_VERTEX_BUFFER;
        \n

        Source\n Code

        \n

        A GPU vertex buffer that you can use to store vertices on the GPU\n instead of uploading them afresh during every drawing operation.

        \n

        Since: 5.1.3

        \n

        See also: al_create_vertex_buffer,\n al_destroy_vertex_buffer

        \n-

        Examples:

        \n-
          \n-
        • ex_vertex_buffer.c
        • \n-
        • ex_prim.c
        • \n-
        \n

        ALLEGRO_INDEX_BUFFER

        \n
        typedef struct ALLEGRO_INDEX_BUFFER ALLEGRO_INDEX_BUFFER;
        \n

        Source\n Code

        \n

        A GPU index buffer that you can use to store indices of vertices in a\n vertex buffer on the GPU instead of uploading them afresh during every\n drawing operation.

        \n

        Since: 5.1.8

        \n

        See also: al_create_index_buffer,\n al_destroy_index_buffer

        \n-

        Examples:

        \n-
          \n-
        • ex_prim.c
        • \n-
        \n

        ALLEGRO_PRIM_BUFFER_FLAGS

        \n
        typedef enum ALLEGRO_PRIM_BUFFER_FLAGS
        \n

        Source\n Code

        \n

        Flags to specify how to create a vertex or an index buffer.

        \n
          \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -123,18 +123,14 @@\n _\ba_\bl_\b__\bg_\be_\bt_\b__\ba_\bl_\bl_\be_\bg_\br_\bo_\b__\bv_\be_\br_\bs_\bi_\bo_\bn.\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bni\bit\bt_\b_p\bpr\bri\bim\bmi\bit\bti\biv\bve\bes\bs_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b*\n bool al_init_primitives_addon(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Initializes the primitives addon.\n R\bRe\bet\btu\bur\brn\bns\bs:\b: True on success, false on failure.\n See also: _\ba_\bl_\b__\bs_\bh_\bu_\bt_\bd_\bo_\bw_\bn_\b__\bp_\br_\bi_\bm_\bi_\bt_\bi_\bv_\be_\bs_\b__\ba_\bd_\bd_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bt_\bo_\bu_\bc_\bh_\b__\bi_\bn_\bp_\bu_\bt_\b._\bc\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n- * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bc_\bl_\bi_\be_\bn_\bt_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_p\bpr\bri\bim\bmi\bit\bti\biv\bve\bes\bs_\b_a\bad\bdd\bdo\bon\bn_\b_i\bin\bni\bit\bti\bia\bal\bli\biz\bze\bed\bd *\b**\b**\b**\b**\b*\n bool al_is_primitives_addon_initialized(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if the primitives addon is initialized, otherwise returns false.\n Since: 5.2.6\n See also: _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bp_\br_\bi_\bm_\bi_\bt_\bi_\bv_\be_\bs_\b__\ba_\bd_\bd_\bo_\bn, _\ba_\bl_\b__\bs_\bh_\bu_\bt_\bd_\bo_\bw_\bn_\b__\bp_\br_\bi_\bm_\bi_\bt_\bi_\bv_\be_\bs_\b__\ba_\bd_\bd_\bo_\bn\n *\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bhu\but\btd\bdo\bow\bwn\bn_\b_p\bpr\bri\bim\bmi\bit\bti\biv\bve\bes\bs_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b*\n@@ -229,97 +225,73 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a line segment between two points.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * x1, y1, x2, y2 - Start and end points of the line\n * color - Color of the line\n * thickness - Thickness of the line, pass <= 0 to draw hairline lines\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bo_\bf_\bt_\b__\bl_\bi_\bn_\be\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\br_\be_\bs_\bi_\bz_\be_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bw_\ba_\br_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_t\btr\bri\bia\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_triangle(float x1, float y1, float x2, float y2,\n float x3, float y3, ALLEGRO_COLOR color, float thickness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an outlined triangle.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * x1, y1, x2, y2, x3, y3 - Three points of the triangle\n * color - Color of the triangle\n * thickness - Thickness of the lines, pass <= 0 to draw hairline lines\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\bt_\br_\bi_\ba_\bn_\bg_\bl_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bs_\bo_\bf_\bt_\b__\bt_\br_\bi_\ba_\bn_\bg_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_f\bfi\bil\bll\ble\bed\bd_\b_t\btr\bri\bia\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_filled_triangle(float x1, float y1, float x2, float y2,\n float x3, float y3, ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a filled triangle.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * x1, y1, x2, y2, x3, y3 - Three points of the triangle\n * color - Color of the triangle\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bt_\br_\bi_\ba_\bn_\bg_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_r\bre\bec\bct\bta\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_rectangle(float x1, float y1, float x2, float y2,\n ALLEGRO_COLOR color, float thickness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an outlined rectangle.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * x1, y1, x2, y2 - Upper left and lower right points of the rectangle\n * color - Color of the rectangle\n * thickness - Thickness of the lines, pass <= 0 to draw hairline lines\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\br_\bo_\bu_\bn_\bd_\be_\bd_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b._\bc\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bj_\bu_\bs_\bt_\bi_\bf_\by_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bs_\bu_\bb_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_f\bfi\bil\bll\ble\bed\bd_\b_r\bre\bec\bct\bta\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_filled_rectangle(float x1, float y1, float x2, float y2,\n ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a filled rectangle.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * x1, y1, x2, y2 - Upper left and lower right points of the rectangle\n * color - Color of the rectangle\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\br_\bo_\bu_\bn_\bd_\be_\bd_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bw_\bi_\bn_\bd_\bo_\bw_\b__\bm_\ba_\bx_\bi_\bm_\bi_\bz_\be_\bd_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_r\bro\bou\bun\bnd\bde\bed\bd_\b_r\bre\bec\bct\bta\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_rounded_rectangle(float x1, float y1, float x2, float y2,\n float rx, float ry, ALLEGRO_COLOR color, float thickness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an outlined rounded rectangle.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * x1, y1, x2, y2 - Upper left and lower right points of the rectangle\n * color - Color of the rectangle\n * rx, ry - The radii of the round\n * thickness - Thickness of the lines, pass <= 0 to draw hairline lines\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\br_\bo_\bu_\bn_\bd_\be_\bd_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bc_\bh_\ba_\bi_\bn_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_f\bfi\bil\bll\ble\bed\bd_\b_r\bro\bou\bun\bnd\bde\bed\bd_\b_r\bre\bec\bct\bta\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_filled_rounded_rectangle(float x1, float y1, float x2, float y2,\n float rx, float ry, ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an filled rounded rectangle.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * x1, y1, x2, y2 - Upper left and lower right points of the rectangle\n * color - Color of the rectangle\n * rx, ry - The radii of the round\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\br_\bo_\bu_\bn_\bd_\be_\bd_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\br_\be_\bc_\bt_\ba_\bn_\bg_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bca\bal\blc\bcu\bul\bla\bat\bte\be_\b_a\bar\brc\bc *\b**\b**\b**\b**\b*\n void al_calculate_arc(float* dest, int stride, float cx, float cy,\n float rx, float ry, float start_theta, float delta_theta, float thickness,\n int num_points)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n When thickness <= 0 this function computes positions of num_points regularly\n spaced points on an elliptical arc. When thickness > 0 this function computes\n@@ -371,16 +343,14 @@\n * start_theta - The initial angle from which the arc is calculated in\n radians\n * delta_theta - Angular span of the arc in radians (pass a negative number\n to switch direction)\n * thickness - Thickness of the arc\n * num_points - The number of points to calculate\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\ba_\br_\bc, _\ba_\bl_\b__\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\b__\bs_\bp_\bl_\bi_\bn_\be, _\ba_\bl_\b__\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\b__\br_\bi_\bb_\bb_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_p\bpi\bie\bes\bsl\bli\bic\bce\be *\b**\b**\b**\b**\b*\n void al_draw_pieslice(float cx, float cy, float r, float start_theta,\n float delta_theta, ALLEGRO_COLOR color, float thickness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a pieslice (outlined circular sector).\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * cx, cy - Center of the pieslice\n@@ -389,16 +359,14 @@\n * start_theta - The initial angle from which the pieslice is drawn in\n radians\n * delta_theta - Angular span of the pieslice in radians (pass a negative\n number to switch direction)\n * thickness - Thickness of the circle, pass <= 0 to draw hairline pieslice\n Since: 5.0.6, 5.1.0\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\bp_\bi_\be_\bs_\bl_\bi_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_f\bfi\bil\bll\ble\bed\bd_\b_p\bpi\bie\bes\bsl\bli\bic\bce\be *\b**\b**\b**\b**\b*\n void al_draw_filled_pieslice(float cx, float cy, float r, float start_theta,\n float delta_theta, ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a filled pieslice (filled circular sector).\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * cx, cy - Center of the pieslice\n@@ -406,71 +374,56 @@\n * color - Color of the pieslice\n * start_theta - The initial angle from which the pieslice is drawn in\n radians\n * delta_theta - Angular span of the pieslice in radians (pass a negative\n number to switch direction)\n Since: 5.0.6, 5.1.0\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bp_\bi_\be_\bs_\bl_\bi_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_e\bel\bll\bli\bip\bps\bse\be *\b**\b**\b**\b**\b*\n void al_draw_ellipse(float cx, float cy, float rx, float ry,\n ALLEGRO_COLOR color, float thickness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an outlined ellipse.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * cx, cy - Center of the ellipse\n * rx, ry - Radii of the ellipse\n * color - Color of the ellipse\n * thickness - Thickness of the ellipse, pass <= 0 to draw a hairline\n ellipse\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\be_\bl_\bl_\bi_\bp_\bs_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bc_\bi_\br_\bc_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bd_\br_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_f\bfi\bil\bll\ble\bed\bd_\b_e\bel\bll\bli\bip\bps\bse\be *\b**\b**\b**\b**\b*\n void al_draw_filled_ellipse(float cx, float cy, float rx, float ry,\n ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a filled ellipse.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * cx, cy - Center of the ellipse\n * rx, ry - Radii of the ellipse\n * color - Color of the ellipse\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\be_\bl_\bl_\bi_\bp_\bs_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\bc_\bi_\br_\bc_\bl_\be\n-Examples:\n- * _\be_\bx_\b__\bd_\br_\ba_\bw_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_c\bci\bir\brc\bcl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_circle(float cx, float cy, float r, ALLEGRO_COLOR color,\n float thickness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an outlined circle.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * cx, cy - Center of the circle\n * r - Radius of the circle\n * color - Color of the circle\n * thickness - Thickness of the circle, pass <= 0 to draw a hairline circle\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\bc_\bi_\br_\bc_\bl_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\be_\bl_\bl_\bi_\bp_\bs_\be\n-Examples:\n- * _\be_\bx_\b__\bt_\bo_\bu_\bc_\bh_\b__\bi_\bn_\bp_\bu_\bt_\b._\bc\n- * _\be_\bx_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_f\bfi\bil\bll\ble\bed\bd_\b_c\bci\bir\brc\bcl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_filled_circle(float cx, float cy, float r, ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a filled circle.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * cx, cy - Center of the circle\n * r - Radius of the circle\n * color - Color of the circle\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bc_\bi_\br_\bc_\bl_\be, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\be_\bl_\bl_\bi_\bp_\bs_\be\n-Examples:\n- * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bc_\bl_\bi_\be_\bn_\bt_\b._\bc\n- * _\be_\bx_\b__\bj_\bo_\by_\bs_\bt_\bi_\bc_\bk_\b__\bh_\bo_\bt_\bp_\bl_\bu_\bg_\bg_\bi_\bn_\bg_\b._\bc\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b2_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_a\bar\brc\bc *\b**\b**\b**\b**\b*\n void al_draw_arc(float cx, float cy, float r, float start_theta,\n float delta_theta, ALLEGRO_COLOR color, float thickness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an arc.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * cx, cy - Center of the arc\n@@ -478,16 +431,14 @@\n * color - Color of the arc\n * start_theta - The initial angle from which the arc is calculated in\n radians\n * delta_theta - Angular span of the arc in radians (pass a negative number\n to switch direction)\n * thickness - Thickness of the arc, pass <= 0 to draw hairline arc\n See also: _\ba_\bl_\b__\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\b__\ba_\br_\bc, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\be_\bl_\bl_\bi_\bp_\bt_\bi_\bc_\ba_\bl_\b__\ba_\br_\bc\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_e\bel\bll\bli\bip\bpt\bti\bic\bca\bal\bl_\b_a\bar\brc\bc *\b**\b**\b**\b**\b*\n void al_draw_elliptical_arc(float cx, float cy, float rx, float ry, float\n start_theta,\n float delta_theta, ALLEGRO_COLOR color, float thickness)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws an elliptical arc.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n@@ -497,16 +448,14 @@\n * start_theta - The initial angle from which the arc is calculated in\n radians\n * delta_theta - Angular span of the arc in radians (pass a negative number\n to switch direction)\n * thickness - Thickness of the arc, pass <= 0 to draw hairline arc\n Since: 5.0.6, 5.1.0\n See also: _\ba_\bl_\b__\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\b__\ba_\br_\bc, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\ba_\br_\bc\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bca\bal\blc\bcu\bul\bla\bat\bte\be_\b_s\bsp\bpl\bli\bin\bne\be *\b**\b**\b**\b**\b*\n void al_calculate_spline(float* dest, int stride, const float points[8],\n float thickness, int num_segments)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Calculates a B\u00e9zier spline given 4 control points. If thickness <= 0, then\n num_segments of points are required in the destination, otherwise twice as many\n are needed. The destination buffer should consist of regularly spaced (by\n@@ -526,16 +475,14 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a B\u00e9zier spline given 4 control points.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * points - An array of 4 pairs of coordinates of the 4 control points\n * color - Color of the spline\n * thickness - Thickness of the spline, pass <= 0 to draw a hairline spline\n See also: _\ba_\bl_\b__\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\b__\bs_\bp_\bl_\bi_\bn_\be\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bca\bal\blc\bcu\bul\bla\bat\bte\be_\b_r\bri\bib\bbb\bbo\bon\bn *\b**\b**\b**\b**\b*\n void al_calculate_ribbon(float* dest, int dest_stride, const float *points,\n int points_stride, float thickness, int num_segments)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Calculates a ribbon given an array of points. The ribbon will go through all of\n the passed points. If thickness <= 0, then num_segments of points are required\n in the destination buffer, otherwise twice as many are needed. The destination\n@@ -609,18 +556,14 @@\n ALLEGRO_VERTEX v[] = {\n {.x = 128, .y = 0, .z = 0, .color = white, .u = 128, .v = 0},\n {.x = 0, .y = 256, .z = 0, .color = white, .u = 0, .v = 256},\n {.x = 256, .y = 256, .z = 0, .color = white, .u = 256, .v = 256}};\n al_draw_prim(v, NULL, texture, 0, 3, ALLEGRO_PRIM_TRIANGLE_LIST);\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bT_\bY_\bP_\bE, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bD_\bE_\bC_\bL,\n _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bi_\bn_\bd_\be_\bx_\be_\bd_\b__\bp_\br_\bi_\bm\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bw_\br_\ba_\bp_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_i\bin\bnd\bde\bex\bxe\bed\bd_\b_p\bpr\bri\bim\bm *\b**\b**\b**\b**\b*\n int al_draw_indexed_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl,\n ALLEGRO_BITMAP* texture, const int* indices, int num_vtx, int type)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a subset of the passed vertex array. This function uses an index array to\n specify which vertices to use.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n@@ -630,17 +573,14 @@\n assumed to be of the ALLEGRO_VERTEX type\n * indices - An array of indices into the vertex array\n * num_vtx - Number of indices from the indices array you want to draw\n * type - A member of the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bT_\bY_\bP_\bE enumeration, specifying what\n kind of primitive to draw\n R\bRe\bet\btu\bur\brn\bns\bs:\b: Number of primitives drawn\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bT_\bY_\bP_\bE, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bD_\bE_\bC_\bL, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bp_\br_\bi_\bm\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b2_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_v\bve\ber\brt\bte\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n int al_draw_vertex_buffer(ALLEGRO_VERTEX_BUFFER* vertex_buffer,\n ALLEGRO_BITMAP* texture, int start, int end, int type)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a subset of the passed vertex buffer. The vertex buffer must not be\n locked. Additionally, to draw onto memory bitmaps or with memory bitmap\n textures the vertex buffer must support reading (i.e.\u00a0 it must be created with\n@@ -651,17 +591,14 @@\n * start - Start index of the subset of the vertex buffer to draw\n * end - One past the last index of the subset of the vertex buffer to draw\n * type - A member of the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bT_\bY_\bP_\bE enumeration, specifying what\n kind of primitive to draw\n R\bRe\bet\btu\bur\brn\bns\bs:\b: Number of primitives drawn\n Since: 5.1.3\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bT_\bY_\bP_\bE\n-Examples:\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_i\bin\bnd\bde\bex\bxe\bed\bd_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n int al_draw_indexed_buffer(ALLEGRO_VERTEX_BUFFER* vertex_buffer,\n ALLEGRO_BITMAP* texture, ALLEGRO_INDEX_BUFFER* index_buffer,\n int start, int end, int type)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a subset of the passed vertex buffer. This function uses an index buffer\n to specify which vertices to use. Both buffers must not be locked.\n@@ -676,16 +613,14 @@\n * end - One past the last index of the subset of the vertex buffer to draw\n * type - A member of the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bT_\bY_\bP_\bE enumeration, specifying what\n kind of primitive to draw. Note that ALLEGRO_PRIM_LINE_LOOP and\n ALLEGRO_PRIM_POINT_LIST are not supported.\n R\bRe\bet\btu\bur\brn\bns\bs:\b: Number of primitives drawn\n Since: 5.1.8\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bI_\bN_\bD_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bT_\bY_\bP_\bE\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_s\bso\bof\bft\bt_\b_t\btr\bri\bia\ban\bng\bgl\ble\be *\b**\b**\b**\b**\b*\n void al_draw_soft_triangle(\n ALLEGRO_VERTEX* v1, ALLEGRO_VERTEX* v2, ALLEGRO_VERTEX* v3, uintptr_t state,\n void (*init)(uintptr_t, ALLEGRO_VERTEX*, ALLEGRO_VERTEX*, ALLEGRO_VERTEX*),\n void (*first)(uintptr_t, int, int, int, int),\n void (*step)(uintptr_t, int),\n void (*draw)(uintptr_t, int, int, int))\n@@ -749,26 +684,21 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates a vertex declaration, which describes a custom vertex format.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * elements - An array of _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bE_\bL_\bE_\bM_\bE_\bN_\bT structures.\n * stride - Size of the custom vertex structure\n R\bRe\bet\btu\bur\brn\bns\bs:\b: Newly created vertex declaration.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bE_\bL_\bE_\bM_\bE_\bN_\bT, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bD_\bE_\bC_\bL, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bd_\be_\bc_\bl\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_v\bve\ber\brt\bte\bex\bx_\b_d\bde\bec\bcl\bl *\b**\b**\b**\b**\b*\n void al_destroy_vertex_decl(ALLEGRO_VERTEX_DECL* decl)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroys a vertex declaration.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * decl - Vertex declaration to destroy\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bE_\bL_\bE_\bM_\bE_\bN_\bT, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bD_\bE_\bC_\bL, _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bd_\be_\bc_\bl\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* V\bVe\ber\brt\bte\bex\bx b\bbu\buf\bff\bfe\ber\br r\bro\bou\but\bti\bin\bne\bes\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_v\bve\ber\brt\bte\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n ALLEGRO_VERTEX_BUFFER* al_create_vertex_buffer(ALLEGRO_VERTEX_DECL* decl,\n const void* initial_data, int num_vertices, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Creates a vertex buffer. Can return NULL if the buffer could not be created\n (e.g.\u00a0the system only supports write-only buffers).\n@@ -784,26 +714,20 @@\n buffer. Can be NULL, in which case the buffer is uninitialized.\n * num_vertices - Number of vertices the buffer will hold\n * flags - A combination of the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bB_\bU_\bF_\bF_\bE_\bR_\b__\bF_\bL_\bA_\bG_\bS flags specifying\n how this buffer will be created. Passing 0 is the same as passing\n ALLEGRO_PRIM_BUFFER_STATIC.\n Since: 5.1.3\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_v\bve\ber\brt\bte\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void al_destroy_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroys a vertex buffer. Does nothing if passed NULL.\n Since: 5.1.3\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boc\bck\bk_\b_v\bve\ber\brt\bte\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void* al_lock_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer, int offset,\n int length, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Locks a vertex buffer so you can access its data. Will return NULL if the\n parameters are invalid, if reading is requested from a write only buffer, or if\n the buffer is already locked.\n@@ -811,26 +735,20 @@\n * buffer - Vertex buffer to lock\n * offset - Vertex index of the start of the locked range\n * length - How many vertices to lock\n * flags - ALLEGRO_LOCK_READONLY, ALLEGRO_LOCK_WRITEONLY or\n ALLEGRO_LOCK_READWRITE\n Since: 5.1.3\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\ba_\bl_\b__\bu_\bn_\bl_\bo_\bc_\bk_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bnl\blo\boc\bck\bk_\b_v\bve\ber\brt\bte\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void al_unlock_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Unlocks a previously locked vertex buffer.\n Since: 5.1.3\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bve\ber\brt\bte\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br_\b_s\bsi\biz\bze\be *\b**\b**\b**\b**\b*\n int al_get_vertex_buffer_size(ALLEGRO_VERTEX_BUFFER* buffer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the size of the vertex buffer\n Since: 5.1.8\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR\n *\b**\b**\b**\b**\b**\b* I\bIn\bnd\bde\bex\bx b\bbu\buf\bff\bfe\ber\br r\bro\bou\but\bti\bin\bne\bes\bs *\b**\b**\b**\b**\b**\b*\n@@ -852,24 +770,20 @@\n Can be NULL, in which case the buffer is uninitialized.\n * num_indices - Number of indices the buffer will hold\n * flags - A combination of the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bB_\bU_\bF_\bF_\bE_\bR_\b__\bF_\bL_\bA_\bG_\bS flags specifying\n how this buffer will be created. Passing 0 is the same as passing\n ALLEGRO_PRIM_BUFFER_STATIC.\n Since: 5.1.8\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bI_\bN_\bD_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bi_\bn_\bd_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_i\bin\bnd\bde\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void al_destroy_index_buffer(ALLEGRO_INDEX_BUFFER* buffer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Destroys a index buffer. Does nothing if passed NULL.\n Since: 5.1.8\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bI_\bN_\bD_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bi_\bn_\bd_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_l\blo\boc\bck\bk_\b_i\bin\bnd\bde\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void* al_lock_index_buffer(ALLEGRO_INDEX_BUFFER* buffer, int offset,\n int length, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Locks a index buffer so you can access its data. Will return NULL if the\n parameters are invalid, if reading is requested from a write only buffer and if\n the buffer is already locked.\n@@ -877,24 +791,20 @@\n * buffer - Index buffer to lock\n * offset - Element index of the start of the locked range\n * length - How many indices to lock\n * flags - ALLEGRO_LOCK_READONLY, ALLEGRO_LOCK_WRITEONLY or\n ALLEGRO_LOCK_READWRITE\n Since: 5.1.8\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bI_\bN_\bD_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\ba_\bl_\b__\bu_\bn_\bl_\bo_\bc_\bk_\b__\bi_\bn_\bd_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bnl\blo\boc\bck\bk_\b_i\bin\bnd\bde\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void al_unlock_index_buffer(ALLEGRO_INDEX_BUFFER* buffer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Unlocks a previously locked index buffer.\n Since: 5.1.8\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bI_\bN_\bD_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR, _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bi_\bn_\bd_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_i\bin\bnd\bde\bex\bx_\b_b\bbu\buf\bff\bfe\ber\br_\b_s\bsi\biz\bze\be *\b**\b**\b**\b**\b*\n int al_get_index_buffer_size(ALLEGRO_INDEX_BUFFER* buffer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the size of the index buffer\n Since: 5.1.8\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bI_\bN_\bD_\bE_\bX_\b__\bB_\bU_\bF_\bF_\bE_\bR\n *\b**\b**\b**\b**\b**\b* P\bPo\bol\bly\byg\bgo\bon\bn r\bro\bou\but\bti\bin\bne\bes\bs *\b**\b**\b**\b**\b**\b*\n@@ -927,16 +837,14 @@\n {\n al_draw_polyline((float *)verts, sizeof(VertexInfo), vertex_count,\n ALLEGRO_LINE_JOIN_NONE, ALLEGRO_LINE_CAP_NONE, c, 1.0, 1.0);\n }\n The stride may also be negative if the vertices are stored in reverse order.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bL_\bI_\bN_\bE_\b__\bJ_\bO_\bI_\bN, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bL_\bI_\bN_\bE_\b__\bC_\bA_\bP\n-Examples:\n- * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_p\bpo\bol\bly\byg\bgo\bon\bn *\b**\b**\b**\b**\b*\n void al_draw_polygon(const float *vertices, int vertex_count,\n int join_style, ALLEGRO_COLOR color, float thickness, float miter_limit)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draw an unfilled polygon. This is the same as passing ALLEGRO_LINE_CAP_CLOSED\n to _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bp_\bo_\bl_\by_\bl_\bi_\bn_\be.\n * vertex - Interleaved array of (x, y) vertex coordinates\n@@ -944,31 +852,27 @@\n * join_style - Member of _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bL_\bI_\bN_\bE_\b__\bJ_\bO_\bI_\bN specifying how to render the\n joins between line segments\n * color - Color of the line\n * thickness - Thickness of the line, pass <= 0 to draw hairline lines\n * miter_limit - Parameter for miter join style\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bp_\bo_\bl_\by_\bl_\bi_\bn_\be, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bL_\bI_\bN_\bE_\b__\bJ_\bO_\bI_\bN\n-Examples:\n- * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_f\bfi\bil\bll\ble\bed\bd_\b_p\bpo\bol\bly\byg\bgo\bon\bn *\b**\b**\b**\b**\b*\n void al_draw_filled_polygon(const float *vertices, int vertex_count,\n ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draw a filled, simple polygon. Simple means it does not have to be convex but\n must not be self-overlapping.\n * vertices - Interleaved array of (x, y) vertex coordinates\n * vertex_count - Number of vertices in the array\n * color - Color of the filled polygon\n When the y-axis is facing downwards (the usual), the coordinates must be\n ordered anti-clockwise.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b__\bw_\bi_\bt_\bh_\b__\bh_\bo_\bl_\be_\bs\n-Examples:\n- * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_d\bdr\bra\baw\bw_\b_f\bfi\bil\bll\ble\bed\bd_\b_p\bpo\bol\bly\byg\bgo\bon\bn_\b_w\bwi\bit\bth\bh_\b_h\bho\bol\ble\bes\bs *\b**\b**\b**\b**\b*\n void al_draw_filled_polygon_with_holes(const float *vertices,\n const int *vertex_counts, ALLEGRO_COLOR color)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Draws a filled simple polygon with zero or more other simple polygons\n subtracted from it - the holes. The holes cannot touch or intersect with the\n outline of the filled polygon.\n@@ -1001,16 +905,14 @@\n There are 7 vertices: four for an outer square from (0, 0) to (100, 100) in\n anti-clockwise order, and three more for an inner triangle in clockwise order.\n The outer main polygon uses vertices 0 to 3 (inclusive) and the hole uses\n vertices 4 to 6 (inclusive).\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn, _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bf_\bi_\bl_\bl_\be_\bd_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b__\bw_\bi_\bt_\bh_\b__\bh_\bo_\bl_\be_\bs,\n _\ba_\bl_\b__\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_t\btr\bri\bia\ban\bng\bgu\bul\bla\bat\bte\be_\b_p\bpo\bol\bly\byg\bgo\bon\bn *\b**\b**\b**\b**\b*\n bool al_triangulate_polygon(\n const float* vertices, size_t vertex_stride, const int* vertex_counts,\n void (*emit_triangle)(int, int, int, void*), void* userdata)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Divides a simple polygon into triangles, with zero or more other simple\n polygons subtracted from it - the holes. The holes cannot touch or intersect\n@@ -1042,28 +944,21 @@\n you\u2019re using it. One exception to this rule are the u and v variables which can\n be left uninitialized when you are not using textures.\n F\bFi\bie\bel\bld\bds\bs:\b:\n * x, y, z - Position of the vertex (float)\n * u, v - Texture coordinates measured in pixels (float)\n * color - _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bC_\bO_\bL_\bO_\bR structure, storing the color of the vertex\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bA_\bT_\bT_\bR\n-Examples:\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_V\bVE\bER\bRT\bTE\bEX\bX_\b_D\bDE\bEC\bCL\bL *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_VERTEX_DECL ALLEGRO_VERTEX_DECL;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A vertex declaration. This opaque structure is responsible for describing the\n format and layout of a user defined custom vertex. It is created and destroyed\n by specialized functions.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bd_\be_\bc_\bl, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bd_\be_\bc_\bl, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bE_\bL_\bE_\bM_\bE_\bN_\bT\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_V\bVE\bER\bRT\bTE\bEX\bX_\b_E\bEL\bLE\bEM\bME\bEN\bNT\bT *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_VERTEX_ELEMENT ALLEGRO_VERTEX_ELEMENT;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A small structure describing a certain element of a vertex. E.g. the position\n of the vertex, or its color. These structures are used by the\n _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bd_\be_\bc_\bl function to create the vertex declaration. For that they\n generally occur in an array. The last element of such an array should have the\n@@ -1088,17 +983,14 @@\n what this attribute signifies\n * storage - A member of the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bS_\bT_\bO_\bR_\bA_\bG_\bE enumeration, specifying\n how this attribute is stored\n * offset - Offset in bytes from the beginning of the custom vertex\n structure. The C function offsetof is very useful here.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bd_\be_\bc_\bl, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bE_\bR_\bT_\bE_\bX_\b__\bD_\bE_\bC_\bL, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bA_\bT_\bT_\bR,\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bP_\bR_\bI_\bM_\b__\bS_\bT_\bO_\bR_\bA_\bG_\bE\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_P\bPR\bRI\bIM\bM_\b_T\bTY\bYP\bPE\bE *\b**\b**\b**\b**\b*\n typedef enum ALLEGRO_PRIM_TYPE\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Enumerates the types of primitives this addon can draw.\n * ALLEGRO_PRIM_POINT_LIST - A list of points, each vertex defines a point\n * ALLEGRO_PRIM_LINE_LIST - A list of lines, sequential pairs of vertices\n define disjointed lines\n@@ -1232,16 +1124,14 @@\n * ALLEGRO_LINE_JOIN_MITER\n [ALLEGRO_LINE_JOIN styles]A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_L\bLI\bIN\bNE\bE_\b_J\bJO\bOI\bIN\bN s\bst\bty\byl\ble\bes\bs\n See the picture for the difference.\n The maximum miter length (relative to the line width) can be specified as\n parameter to the polygon functions.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_L\bLI\bIN\bNE\bE_\b_C\bCA\bAP\bP *\b**\b**\b**\b**\b*\n typedef enum ALLEGRO_LINE_CAP\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n * ALLEGRO_LINE_CAP_NONE\n * ALLEGRO_LINE_CAP_SQUARE\n * ALLEGRO_LINE_CAP_ROUND\n * ALLEGRO_LINE_CAP_TRIANGLE\n@@ -1249,36 +1139,29 @@\n [ALLEGRO_LINE_CAP styles]A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_L\bLI\bIN\bNE\bE_\b_C\bCA\bAP\bP s\bst\bty\byl\ble\bes\bs\n See the picture for the difference.\n ALLEGRO_LINE_CAP_CLOSED is different from the others - it causes the polygon to\n have no caps. (And the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bL_\bI_\bN_\bE_\b__\bJ_\bO_\bI_\bN style will determine how the vertex\n looks.)\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bd_\br_\ba_\bw_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn\n-Examples:\n- * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_V\bVE\bER\bRT\bTE\bEX\bX_\b_B\bBU\bUF\bFF\bFE\bER\bR *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_VERTEX_BUFFER ALLEGRO_VERTEX_BUFFER;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A GPU vertex buffer that you can use to store vertices on the GPU instead of\n uploading them afresh during every drawing operation.\n Since: 5.1.3\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_I\bIN\bND\bDE\bEX\bX_\b_B\bBU\bUF\bFF\bFE\bER\bR *\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_INDEX_BUFFER ALLEGRO_INDEX_BUFFER;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A GPU index buffer that you can use to store indices of vertices in a vertex\n buffer on the GPU instead of uploading them afresh during every drawing\n operation.\n Since: 5.1.8\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bi_\bn_\bd_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br, _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bi_\bn_\bd_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_P\bPR\bRI\bIM\bM_\b_B\bBU\bUF\bFF\bFE\bER\bR_\b_F\bFL\bLA\bAG\bGS\bS *\b**\b**\b**\b**\b*\n typedef enum ALLEGRO_PRIM_BUFFER_FLAGS\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Flags to specify how to create a vertex or an index buffer.\n * ALLEGRO_PRIM_BUFFER_STREAM - Hints to the driver that the buffer is\n written to often, but used only a few times per frame\n * ALLEGRO_PRIM_BUFFER_STATIC - Hints to the driver that the buffer is\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/shader.html", "source2": "./usr/share/doc/allegro5-doc/refman/shader.html", "unified_diff": "@@ -229,23 +229,14 @@\n program which has one or more shaders attached. This\n can be confusing.)

          \n

          The source code for the underlying vertex or pixel shader can be\n provided either as GLSL or HLSL, depending on the value of ALLEGRO_SHADER_PLATFORM\n used when creating it.

          \n

          Since: 5.1.0

          \n-

          Examples:

          \n-
            \n-
          • ex_shader.cpp
          • \n-
          • ex_shader_target.c
          • \n-
          • ex_prim_shader.c
          • \n-
          \n

          ALLEGRO_SHADER_TYPE

          \n
          typedef enum ALLEGRO_SHADER_TYPE ALLEGRO_SHADER_TYPE;
          \n

          Source\n Code

          \n

          Used with al_attach_shader_source\n@@ -293,21 +284,14 @@\n more minimal implementation that may not support alpha testing.\n

        • ALLEGRO_SHADER_GLSL_MINIMAL - Minimal GLSL shader.
        • \n
        • ALLEGRO_SHADER_HLSL_MINIMAL - Minimal HLSL shader.
        • \n
        • ALLEGRO_SHADER_HLSL_SM_3_0 - HLSL shader using shader model\n 3_0.
        • \n
        \n

        Since: 5.1.0

        \n-

        Examples:

        \n-
          \n-
        • ex_shader.cpp
        • \n-
        • ex_shader_target.c
        • \n-
        \n

        al_create_shader

        \n
        ALLEGRO_SHADER *al_create_shader(ALLEGRO_SHADER_PLATFORM platform)
        \n

        Source\n Code

        \n

        Create a shader object.

        \n

        The platform argument is one of the Since: 5.1.0

        \n

        See also: al_use_shader

        \n

        Examples:

        \n
          \n
        • ex_shader_multitex.c
        • \n
        • ex_palette.c
        • \n-
        • ex_prim_wrap.c
        • \n+
        • ex_palette.c
        • \n
        \n

        al_set_shader_matrix

        \n
        bool al_set_shader_matrix(const char *name,\n    const ALLEGRO_TRANSFORM *matrix)
        \n

        Source\n Code

        \n@@ -812,17 +796,17 @@\n

        See also: al_attach_shader_source

        \n

        Examples:

        \n
          \n
        • ex_shader_multitex.c
        • \n
        • ex_palette.c
        • \n-
        • ex_prim_wrap.c
        • \n+
        • ex_palette.c
        • \n
        \n

        \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

        \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -71,18 +71,14 @@\n An _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bH_\bA_\bD_\bE_\bR is a program that runs on the GPU. It combines both a vertex\n and a pixel shader. (In OpenGL terms, an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bH_\bA_\bD_\bE_\bR is actually a p\bpr\bro\bog\bgr\bra\bam\bm\n which has one or more s\bsh\bha\bad\bde\ber\brs\bs attached. This can be confusing.)\n The source code for the underlying vertex or pixel shader can be provided\n either as GLSL or HLSL, depending on the value of _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bH_\bA_\bD_\bE_\bR_\b__\bP_\bL_\bA_\bT_\bF_\bO_\bR_\bM used\n when creating it.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_S\bSH\bHA\bAD\bDE\bER\bR_\b_T\bTY\bYP\bPE\bE *\b**\b**\b**\b**\b**\b*\n typedef enum ALLEGRO_SHADER_TYPE ALLEGRO_SHADER_TYPE;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Used with _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bs_\bo_\bu_\br_\bc_\be and _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bs_\bo_\bu_\br_\bc_\be_\b__\bf_\bi_\bl_\be to specify\n how to interpret the attached source.\n ALLEGRO_VERTEX_SHADER\n A vertex shader is executed for each vertex it is used with. The program\n@@ -113,17 +109,14 @@\n * ALLEGRO_SHADER_HLSL - High Level Shader Language (for Direct3D)\n * ALLEGRO_SHADER_AUTO_MINIMAL - Like ALLEGRO_SHADER_AUTO, but pick a more\n minimal implementation that may not support alpha testing.\n * ALLEGRO_SHADER_GLSL_MINIMAL - Minimal GLSL shader.\n * ALLEGRO_SHADER_HLSL_MINIMAL - Minimal HLSL shader.\n * ALLEGRO_SHADER_HLSL_SM_3_0 - HLSL shader using shader model 3_0.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_s\bsh\bha\bad\bde\ber\br *\b**\b**\b**\b**\b**\b*\n ALLEGRO_SHADER *al_create_shader(ALLEGRO_SHADER_PLATFORM platform)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a shader object.\n The platform argument is one of the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bH_\bA_\bD_\bE_\bR_\b__\bP_\bL_\bA_\bT_\bF_\bO_\bR_\bM values, and\n specifies the type of shader object to create, and which language is used to\n program the shader.\n@@ -339,16 +332,16 @@\n thus not use al_tex (the al_use_tex variable will be set to false).\n Returns true on success. Otherwise returns false, e.g.\u00a0if the uniform by that\n name does not exist in the shader.\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bu_\bs_\be_\b__\bs_\bh_\ba_\bd_\be_\br\n Examples:\n * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bm_\bu_\bl_\bt_\bi_\bt_\be_\bx_\b._\bc\n- * _\be_\bx_\b__\bp_\ba_\bl_\be_\bt_\bt_\be_\b._\bc\n * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bw_\br_\ba_\bp_\b._\bc\n+ * _\be_\bx_\b__\bp_\ba_\bl_\be_\bt_\bt_\be_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_s\bsh\bha\bad\bde\ber\br_\b_m\bma\bat\btr\bri\bix\bx *\b**\b**\b**\b**\b**\b*\n bool al_set_shader_matrix(const char *name,\n const ALLEGRO_TRANSFORM *matrix)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Sets a matrix uniform of the current target bitmap\u2019s shader.\n Returns true on success. Otherwise returns false, e.g.\u00a0if the uniform by that\n name does not exist in the shader.\n@@ -427,10 +420,10 @@\n requires that there is a current display set on the calling thread. This\n function can return NULL if Allegro was built without support for shaders of\n the selected platform.\n Since: 5.1.6\n See also: _\ba_\bl_\b__\ba_\bt_\bt_\ba_\bc_\bh_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bs_\bo_\bu_\br_\bc_\be\n Examples:\n * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bm_\bu_\bl_\bt_\bi_\bt_\be_\bx_\b._\bc\n- * _\be_\bx_\b__\bp_\ba_\bl_\be_\bt_\bt_\be_\b._\bc\n * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bw_\br_\ba_\bp_\b._\bc\n+ * _\be_\bx_\b__\bp_\ba_\bl_\be_\bt_\bt_\be_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/state.html", "source2": "./usr/share/doc/allegro5-doc/refman/state.html", "unified_diff": "@@ -218,23 +218,14 @@\n All other global state is per-thread, so if your application has\n multiple separate threads they never will interfere with each other.\n (Except if there are objects accessed by multiple threads of course.\n Usually you want to minimize that though and for the remaining cases use\n synchronization primitives described in the threads section or events\n described in the events section to control inter-thread\n communication.)

        \n-

        Examples:

        \n-
          \n-
        • ex_blend_bench.c
        • \n-
        • ex_blend2.cpp
        • \n-
        • nihgui.cpp
        • \n-
        \n

        ALLEGRO_STATE_FLAGS

        \n
        typedef enum ALLEGRO_STATE_FLAGS
        \n

        Source\n Code

        \n

        Flags which can be passed to al_store_state/See also: al_store_state, ALLEGRO_STATE_FLAGS

        \n

        Examples:

        \n
          \n
        • ex_blend_bench.c
        • \n
        • ex_blend2.cpp
        • \n-
        • nihgui.cpp
        • \n+
        • ex_blend2.cpp
        • \n
        \n

        al_store_state

        \n
        void al_store_state(ALLEGRO_STATE *state, int flags)
        \n

        Source\n Code

        \n

        Stores part of the state of the current thread in the given See also: al_restore_state,\n ALLEGRO_STATE

        \n

        Examples:

        \n
          \n
        • ex_blend_bench.c
        • \n
        • ex_blend2.cpp
        • \n-
        • nihgui.cpp
        • \n+
        • ex_blend2.cpp
        • \n
        \n

        al_get_errno

        \n
        int al_get_errno(void)\n GETTER(allegro_errno, 0)
        \n

        Source\n Code

        \n@@ -314,17 +305,17 @@\n

        Source\n Code

        \n

        Set the error number for the calling thread.

        \n

        Examples:

        \n
          \n
        • ex_curl.c
        • \n-
        • ex_utf8.c
        • \n+
        • ex_curl.c
        • \n
        \n

        \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

        \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -76,33 +76,29 @@\n In general, the only real global state is the active system driver. All other\n global state is per-thread, so if your application has multiple separate\n threads they never will interfere with each other. (Except if there are objects\n accessed by multiple threads of course. Usually you want to minimize that\n though and for the remaining cases use synchronization primitives described in\n the threads section or events described in the events section to control inter-\n thread communication.)\n-Examples:\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b2_\b._\bc_\bp_\bp\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_S\bST\bTA\bAT\bTE\bE_\b_F\bFL\bLA\bAG\bGS\bS *\b**\b**\b**\b**\b**\b*\n typedef enum ALLEGRO_STATE_FLAGS\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Flags which can be passed to _\ba_\bl_\b__\bs_\bt_\bo_\br_\be_\b__\bs_\bt_\ba_\bt_\be/_\ba_\bl_\b__\br_\be_\bs_\bt_\bo_\br_\be_\b__\bs_\bt_\ba_\bt_\be as bit\n combinations. See _\ba_\bl_\b__\bs_\bt_\bo_\br_\be_\b__\bs_\bt_\ba_\bt_\be for the list of flags.\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bes\bst\bto\bor\bre\be_\b_s\bst\bta\bat\bte\be *\b**\b**\b**\b**\b**\b*\n void al_restore_state(ALLEGRO_STATE const *state)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Restores part of the state of the current thread from the given _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bT_\bA_\bT_\bE\n object.\n See also: _\ba_\bl_\b__\bs_\bt_\bo_\br_\be_\b__\bs_\bt_\ba_\bt_\be, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bT_\bA_\bT_\bE_\b__\bF_\bL_\bA_\bG_\bS\n Examples:\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b2_\b._\bc_\bp_\bp\n * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b2_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bst\bto\bor\bre\be_\b_s\bst\bta\bat\bte\be *\b**\b**\b**\b**\b**\b*\n void al_store_state(ALLEGRO_STATE *state, int flags)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Stores part of the state of the current thread in the given _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bT_\bA_\bT_\bE\n object. The flags parameter can take any bit-combination of these flags:\n * ALLEGRO_STATE_NEW_DISPLAY_PARAMETERS - new_display_format,\n new_display_refresh_rate, new_display_flags\n@@ -115,16 +111,16 @@\n * ALLEGRO_STATE_NEW_FILE_INTERFACE - new_file_interface\n * ALLEGRO_STATE_BITMAP - same as ALLEGRO_STATE_NEW_BITMAP_PARAMETERS and\n ALLEGRO_STATE_TARGET_BITMAP\n * ALLEGRO_STATE_ALL - all of the above\n See also: _\ba_\bl_\b__\br_\be_\bs_\bt_\bo_\br_\be_\b__\bs_\bt_\ba_\bt_\be, _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bS_\bT_\bA_\bT_\bE\n Examples:\n * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b__\bb_\be_\bn_\bc_\bh_\b._\bc\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b2_\b._\bc_\bp_\bp\n * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b2_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_e\ber\brr\brn\bno\bo *\b**\b**\b**\b**\b**\b*\n int al_get_errno(void)\n GETTER(allegro_errno, 0)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Some Allegro functions will set an error number as well as returning an error\n code. Call this function to retrieve the last error number set for the calling\n thread.\n@@ -132,10 +128,10 @@\n * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_e\ber\brr\brn\bno\bo *\b**\b**\b**\b**\b**\b*\n void al_set_errno(int errnum)\n SETTER(allegro_errno, errnum)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the error number for the calling thread.\n Examples:\n- * _\be_\bx_\b__\bc_\bu_\br_\bl_\b._\bc\n * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n+ * _\be_\bx_\b__\bc_\bu_\br_\bl_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/system.html", "source2": "./usr/share/doc/allegro5-doc/refman/system.html", "unified_diff": "@@ -248,23 +248,14 @@\n game binary. In particular, do not call it inside a shared library\n unless you know what you\u2019re doing. In those cases, it is better to call\n al_install_system either with a NULL atexit_ptr, or with a\n pointer to atexit provided by the user of this shared library.

        \n \n

        See also: al_install_system

        \n-

        Examples:

        \n-
          \n-
        • ex_audio_devices.c
        • \n-
        • ex_get_path.c
        • \n-
        • ex_monitorinfo.c
        • \n-
        \n

        al_uninstall_system

        \n
        void al_uninstall_system(void)
        \n

        Source\n Code

        \n

        Closes down the Allegro system.

        \n
        \n@@ -386,17 +377,17 @@\n href=\"path.html#al_destroy_path\">al_destroy_path, al_set_exe_name

        \n

        Examples:

        \n
          \n
        • ex_get_path.c
        • \n
        • ex_physfs.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_chain.cpp#L172\">ex_audio_chain.cpp\n
        • ex_android.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_physfs.c#L87\">ex_physfs.c\n
        \n

        al_set_exe_name

        \n
        void al_set_exe_name(char const *path)
        \n

        Source\n Code

        \n

        This override the executable name used by

         #include <allegro5/allegro.h>
        \n

        ALLEGRO_THREAD

        \n
        typedef struct ALLEGRO_THREAD ALLEGRO_THREAD;
        \n

        Source\n Code

        \n

        An opaque structure representing a thread.

        \n-

        Examples:

        \n-
          \n-
        • ex_threads.c
        • \n-
        • ex_threads2.c
        • \n-
        • ex_loading_thread.c
        • \n-
        \n

        ALLEGRO_MUTEX

        \n
        typedef struct ALLEGRO_MUTEX ALLEGRO_MUTEX;
        \n

        Source\n Code

        \n

        An opaque structure representing a mutex.

        \n-

        Examples:

        \n-
          \n-
        • ex_threads2.c
        • \n-
        • ex_loading_thread.c
        • \n-
        \n

        ALLEGRO_COND

        \n
        typedef struct ALLEGRO_COND ALLEGRO_COND;
        \n

        Source\n Code

        \n

        An opaque structure representing a condition variable.

        \n-

        Examples:

        \n-
          \n-
        • ex_threads2.c
        • \n-
        \n

        al_create_thread

        \n
        ALLEGRO_THREAD *al_create_thread(\n    void *(*proc)(ALLEGRO_THREAD *thread, void *arg), void *arg)
        \n

        Source\n Code

        \n

        Spawn a new thread which begins executing proc. The new\n@@ -277,19 +256,19 @@\n

        Returns a pointer to the thread on success. Otherwise, returns NULL\n if there was an error.

        \n

        See also: al_start_thread,\n al_join_thread.

        \n

        Examples:

        \n
          \n
        • ex_threads.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_loading_thread.c#L158\">ex_loading_thread.c\n
        • ex_threads2.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_native_filechooser.c#L106\">ex_native_filechooser.c\n
        • ex_loading_thread.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_threads.c#L233\">ex_threads.c\n
        \n al_create_thread_with_stacksize\n
        ALLEGRO_THREAD *al_create_thread_with_stacksize(\n    void *(*proc)(ALLEGRO_THREAD *thread, void *arg), void *arg, size_t stacksize)
        \n

        Source\n@@ -317,19 +296,19 @@\n start its actual execution.

        \n

        Starting a thread which has already been started does nothing.

        \n

        See also: al_create_thread.

        \n

        Examples:

        \n
          \n
        • ex_threads.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_loading_thread.c#L159\">ex_loading_thread.c\n
        • ex_threads2.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_native_filechooser.c#L108\">ex_native_filechooser.c\n
        • ex_loading_thread.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_threads.c#L237\">ex_threads.c\n
        \n

        al_join_thread

        \n
        void al_join_thread(ALLEGRO_THREAD *thread, void **ret_value)
        \n

        Source\n Code

        \n

        Wait for the thread to finish executing. This implicitly calls al_set_thread_should_stop,\n al_get_thread_should_stop,\n al_destroy_thread.

        \n

        Examples:

        \n
          \n
        • ex_loading_thread.c
        • \n+
        • ex_threads.c
        • \n
        • ex_threads2.c
        • \n-
        • ex_loading_thread.c
        • \n
        \n

        al_set_thread_should_stop

        \n
        void al_set_thread_should_stop(ALLEGRO_THREAD *thread)
        \n

        Source\n Code

        \n

        Set the flag to indicate thread should stop. Returns\n@@ -384,17 +363,17 @@\n href=\"threads.html#al_set_thread_should_stop\">al_set_thread_should_stop.

        \n
        \n

        Note: We don\u2019t support forceful killing of threads.

        \n
        \n

        Examples:

        \n
          \n
        • ex_threads2.c
        • \n-
        • ex_loading_thread.c
        • \n+
        • ex_threads2.c
        • \n
        \n

        al_destroy_thread

        \n
        void al_destroy_thread(ALLEGRO_THREAD *thread)
        \n

        Source\n Code

        \n

        Free the resources used by a thread. Implicitly performs \n

        Does nothing if thread is NULL.

        \n

        See also: al_join_thread.

        \n

        Examples:

        \n
          \n
        • ex_native_filechooser.c
        • \n+
        • ex_threads.c
        • \n
        • ex_threads2.c
        • \n-
        • ex_native_filechooser.c
        • \n
        \n

        al_run_detached_thread

        \n
        void al_run_detached_thread(void *(*proc)(void *arg), void *arg)
        \n

        Source\n Code

        \n

        Runs the passed function in its own thread, with arg\n@@ -434,17 +413,17 @@\n may not support \u201crecursive\u201d locking.

        \n

        Returns the mutex on success or NULL on error.

        \n

        See also: al_create_mutex_recursive.

        \n

        Examples:

        \n
          \n
        • ex_threads2.c
        • \n-
        • ex_loading_thread.c
        • \n+
        • ex_threads2.c
        • \n
        \n

        al_create_mutex_recursive

        \n
        ALLEGRO_MUTEX *al_create_mutex_recursive(void)
        \n

        Source\n Code

        \n

        Create the mutex object (a mutual exclusion device), with support for\n@@ -473,34 +452,34 @@\n be incremented and the call will return immediately.

        \n

        See also: al_unlock_mutex.

        \n

        We don\u2019t yet have al_mutex_trylock.

        \n

        Examples:

        \n
          \n
        • ex_threads2.c
        • \n-
        • ex_loading_thread.c
        • \n+
        • ex_threads2.c
        • \n
        \n

        al_unlock_mutex

        \n
        void al_unlock_mutex(ALLEGRO_MUTEX *mutex)
        \n

        Source\n Code

        \n

        Release the lock on mutex if the calling thread holds\n the lock on it.

        \n

        If the calling thread doesn\u2019t hold the lock, or if the mutex is not\n locked, undefined behaviour results.

        \n

        See also: al_lock_mutex.

        \n

        Examples:

        \n
          \n
        • ex_threads2.c
        • \n-
        • ex_loading_thread.c
        • \n+
        • ex_threads2.c
        • \n
        \n

        al_destroy_mutex

        \n
        void al_destroy_mutex(ALLEGRO_MUTEX *mutex)
        \n

        Source\n Code

        \n

        Free the resources used by the mutex. The mutex should be unlocked.\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -74,44 +74,35 @@\n cases.\n These functions are declared in the main Allegro header file:\n #include \n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_T\bTH\bHR\bRE\bEA\bAD\bD *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_THREAD ALLEGRO_THREAD;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque structure representing a thread.\n-Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_M\bMU\bUT\bTE\bEX\bX *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_MUTEX ALLEGRO_MUTEX;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque structure representing a mutex.\n-Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_C\bCO\bON\bND\bD *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_COND ALLEGRO_COND;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque structure representing a condition variable.\n-Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_t\bth\bhr\bre\bea\bad\bd *\b**\b**\b**\b**\b**\b*\n ALLEGRO_THREAD *al_create_thread(\n void *(*proc)(ALLEGRO_THREAD *thread, void *arg), void *arg)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Spawn a new thread which begins executing proc. The new thread is passed its\n own thread handle and the value arg.\n Returns a pointer to the thread on success. Otherwise, returns NULL if there\n was an error.\n See also: _\ba_\bl_\b__\bs_\bt_\ba_\br_\bt_\b__\bt_\bh_\br_\be_\ba_\bd, _\ba_\bl_\b__\bj_\bo_\bi_\bn_\b__\bt_\bh_\br_\be_\ba_\bd.\n Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n+ * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_t\bth\bhr\bre\bea\bad\bd_\b_w\bwi\bit\bth\bh_\b_s\bst\bta\bac\bck\bks\bsi\biz\bze\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_THREAD *al_create_thread_with_stacksize(\n void *(*proc)(ALLEGRO_THREAD *thread, void *arg), void *arg, size_t\n stacksize)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Spawn a new thread with the give stacksize in bytes which begins executing\n proc. The new thread is passed its own thread handle and the value arg.\n@@ -125,30 +116,30 @@\n void al_start_thread(ALLEGRO_THREAD *thread)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n When a thread is created, it is initially in a suspended state. Calling\n _\ba_\bl_\b__\bs_\bt_\ba_\br_\bt_\b__\bt_\bh_\br_\be_\ba_\bd will start its actual execution.\n Starting a thread which has already been started does nothing.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bt_\bh_\br_\be_\ba_\bd.\n Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n+ * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_j\bjo\boi\bin\bn_\b_t\bth\bhr\bre\bea\bad\bd *\b**\b**\b**\b**\b**\b*\n void al_join_thread(ALLEGRO_THREAD *thread, void **ret_value)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Wait for the thread to finish executing. This implicitly calls\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\bh_\br_\be_\ba_\bd_\b__\bs_\bh_\bo_\bu_\bl_\bd_\b__\bs_\bt_\bo_\bp first.\n If ret_value is non-NULL, the value returned by the thread function will be\n stored at the location pointed to by ret_value.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\bh_\br_\be_\ba_\bd_\b__\bs_\bh_\bo_\bu_\bl_\bd_\b__\bs_\bt_\bo_\bp, _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\bh_\br_\be_\ba_\bd_\b__\bs_\bh_\bo_\bu_\bl_\bd_\b__\bs_\bt_\bo_\bp,\n _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bt_\bh_\br_\be_\ba_\bd.\n Examples:\n+ * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_t\bth\bhr\bre\bea\bad\bd_\b_s\bsh\bho\bou\bul\bld\bd_\b_s\bst\bto\bop\bp *\b**\b**\b**\b**\b**\b*\n void al_set_thread_should_stop(ALLEGRO_THREAD *thread)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Set the flag to indicate thread should stop. Returns immediately.\n See also: _\ba_\bl_\b__\bj_\bo_\bi_\bn_\b__\bt_\bh_\br_\be_\ba_\bd, _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\bh_\br_\be_\ba_\bd_\b__\bs_\bh_\bo_\bu_\bl_\bd_\b__\bs_\bt_\bo_\bp.\n Examples:\n * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n@@ -158,27 +149,27 @@\n Check if another thread is waiting for thread to stop. Threads which run in a\n loop should check this periodically and act on it when convenient.\n Returns true if another thread has called _\ba_\bl_\b__\bj_\bo_\bi_\bn_\b__\bt_\bh_\br_\be_\ba_\bd or\n _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\bh_\br_\be_\ba_\bd_\b__\bs_\bh_\bo_\bu_\bl_\bd_\b__\bs_\bt_\bo_\bp on this thread.\n See also: _\ba_\bl_\b__\bj_\bo_\bi_\bn_\b__\bt_\bh_\br_\be_\ba_\bd, _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\bh_\br_\be_\ba_\bd_\b__\bs_\bh_\bo_\bu_\bl_\bd_\b__\bs_\bt_\bo_\bp.\n N\bNo\bot\bte\be:\b: We don\u2019t support forceful killing of threads.\n Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n+ * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_t\bth\bhr\bre\bea\bad\bd *\b**\b**\b**\b**\b**\b*\n void al_destroy_thread(ALLEGRO_THREAD *thread)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Free the resources used by a thread. Implicitly performs _\ba_\bl_\b__\bj_\bo_\bi_\bn_\b__\bt_\bh_\br_\be_\ba_\bd on the\n thread if it hasn\u2019t been done already.\n Does nothing if thread is NULL.\n See also: _\ba_\bl_\b__\bj_\bo_\bi_\bn_\b__\bt_\bh_\br_\be_\ba_\bd.\n Examples:\n+ * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n- * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_r\bru\bun\bn_\b_d\bde\bet\bta\bac\bch\bhe\bed\bd_\b_t\bth\bhr\bre\bea\bad\bd *\b**\b**\b**\b**\b**\b*\n void al_run_detached_thread(void *(*proc)(void *arg), void *arg)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Runs the passed function in its own thread, with arg passed to it as only\n parameter. This is similar to calling _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bt_\bh_\br_\be_\ba_\bd, _\ba_\bl_\b__\bs_\bt_\ba_\br_\bt_\b__\bt_\bh_\br_\be_\ba_\bd and\n (after the thread has finished) _\ba_\bl_\b__\bd_\be_\bs_\bt_\br_\bo_\by_\b__\bt_\bh_\br_\be_\ba_\bd - but you don\u2019t have the\n possibility of ever calling _\ba_\bl_\b__\bj_\bo_\bi_\bn_\b__\bt_\bh_\br_\be_\ba_\bd on the thread.\n@@ -186,16 +177,16 @@\n ALLEGRO_MUTEX *al_create_mutex(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create the mutex object (a mutual exclusion device). The mutex may or may not\n support \u201crecursive\u201d locking.\n Returns the mutex on success or NULL on error.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\bu_\bt_\be_\bx_\b__\br_\be_\bc_\bu_\br_\bs_\bi_\bv_\be.\n Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n+ * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_m\bmu\but\bte\bex\bx_\b_r\bre\bec\bcu\bur\brs\bsi\biv\bve\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_MUTEX *al_create_mutex_recursive(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create the mutex object (a mutual exclusion device), with support for\n \u201crecursive\u201d locking. That is, the mutex will count the number of times it has\n been locked by the same thread. If the caller tries to acquire a lock on the\n mutex when it already holds the lock then the count is incremented. The mutex\n@@ -211,26 +202,26 @@\n depends on whether the mutex was created with _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\bu_\bt_\be_\bx or\n _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bm_\bu_\bt_\be_\bx_\b__\br_\be_\bc_\bu_\br_\bs_\bi_\bv_\be. In the former case, the behaviour is undefined; the\n most likely behaviour is deadlock. In the latter case, the count in the mutex\n will be incremented and the call will return immediately.\n See also: _\ba_\bl_\b__\bu_\bn_\bl_\bo_\bc_\bk_\b__\bm_\bu_\bt_\be_\bx.\n W\bWe\be d\bdo\bon\bn?\b\u2019t\bt y\bye\bet\bt h\bha\bav\bve\be a\bal\bl_\b_m\bmu\but\bte\bex\bx_\b_t\btr\bry\byl\blo\boc\bck\bk.\b.\n Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n+ * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_u\bun\bnl\blo\boc\bck\bk_\b_m\bmu\but\bte\bex\bx *\b**\b**\b**\b**\b**\b*\n void al_unlock_mutex(ALLEGRO_MUTEX *mutex)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Release the lock on mutex if the calling thread holds the lock on it.\n If the calling thread doesn\u2019t hold the lock, or if the mutex is not locked,\n undefined behaviour results.\n See also: _\ba_\bl_\b__\bl_\bo_\bc_\bk_\b__\bm_\bu_\bt_\be_\bx.\n Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n+ * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b2_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_d\bde\bes\bst\btr\bro\boy\by_\b_m\bmu\but\bte\bex\bx *\b**\b**\b**\b**\b**\b*\n void al_destroy_mutex(ALLEGRO_MUTEX *mutex)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Free the resources used by the mutex. The mutex should be unlocked. Destroying\n a locked mutex results in undefined behaviour.\n Does nothing if mutex is NULL.\n Examples:\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/time.html", "source2": "./usr/share/doc/allegro5-doc/refman/time.html", "unified_diff": "@@ -187,19 +187,14 @@\n

        typedef struct ALLEGRO_TIMEOUT ALLEGRO_TIMEOUT;
        \n

        Source\n Code

        \n

        Represent a timeout value. The size of the structure is known so it\n can be statically allocated. The contents are private.

        \n

        See also: al_init_timeout

        \n-

        Examples:

        \n-
          \n-
        • ex_timedwait.c
        • \n-
        \n

        al_get_time

        \n
        double al_get_time(void)
        \n

        Source\n Code

        \n

        Return the number of seconds since the Allegro library was\n initialised. The return value is undefined if Allegro is uninitialised.\n@@ -242,19 +237,19 @@\n

        al_rest(0.000001)
        \n

        might pause for something like 10ms. Also see the section on Timer\n routines for easier ways to time your program without using up all\n CPU.

        \n

        Examples:

        \n
          \n
        • ex_keyboard_focus.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_acodec.c#L104\">ex_acodec.c\n
        • ex_timer_pause.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_acodec_multi.c#L116\">ex_acodec_multi.c\n
        • ex_mouse_focus.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_kcm_direct.c#L86\">ex_kcm_direct.c\n
        \n

        \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

        \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -51,16 +51,14 @@\n #include \n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_T\bTI\bIM\bME\bEO\bOU\bUT\bT *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_TIMEOUT ALLEGRO_TIMEOUT;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Represent a timeout value. The size of the structure is known so it can be\n statically allocated. The contents are private.\n See also: _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bt_\bi_\bm_\be_\bo_\bu_\bt\n-Examples:\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\bd_\bw_\ba_\bi_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_t\bti\bim\bme\be *\b**\b**\b**\b**\b**\b*\n double al_get_time(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the number of seconds since the Allegro library was initialised. The\n return value is undefined if Allegro is uninitialised. The resolution depends\n on the used driver, but typically can be in the order of microseconds.\n Examples:\n@@ -82,11 +80,11 @@\n Waits for the specified number of seconds. This tells the system to pause the\n current thread for the given amount of time. With some operating systems, the\n accuracy can be in the order of 10ms. That is, even\n al_rest(0.000001)\n might pause for something like 10ms. Also see the section on Timer routines for\n easier ways to time your program without using up all CPU.\n Examples:\n- * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n- * _\be_\bx_\b__\bm_\bo_\bu_\bs_\be_\b__\bf_\bo_\bc_\bu_\bs_\b._\bc\n+ * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b._\bc\n+ * _\be_\bx_\b__\ba_\bc_\bo_\bd_\be_\bc_\b__\bm_\bu_\bl_\bt_\bi_\b._\bc\n+ * _\be_\bx_\b__\bk_\bc_\bm_\b__\bd_\bi_\br_\be_\bc_\bt_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/timer.html", "source2": "./usr/share/doc/allegro5-doc/refman/timer.html", "unified_diff": "@@ -213,23 +213,14 @@\n
         #include <allegro5/allegro.h>
        \n

        ALLEGRO_TIMER

        \n
        typedef struct ALLEGRO_TIMER ALLEGRO_TIMER;
        \n

        Source\n Code

        \n

        This is an abstract data type representing a timer object.

        \n-

        Examples:

        \n-
          \n-
        • ex_enet_server.c
        • \n-
        • ex_timer_pause.c
        • \n-
        • ex_user_events.c
        • \n-
        \n

        ALLEGRO_USECS_TO_SECS

        \n
        #define ALLEGRO_USECS_TO_SECS(x)      ((x) / 1000000.0)
        \n

        Source\n Code

        \n

        Convert microseconds to seconds.

        \n

        ALLEGRO_MSECS_TO_SECS

        \n@@ -240,19 +231,14 @@\n

        Convert milliseconds to seconds.

        \n

        ALLEGRO_BPS_TO_SECS

        \n
        #define ALLEGRO_BPS_TO_SECS(x)        (1.0 / (x))
        \n

        Source\n Code

        \n

        Convert beats per second to seconds.

        \n-

        Examples:

        \n-
          \n-
        • ex_prim.c
        • \n-
        \n

        ALLEGRO_BPM_TO_SECS

        \n
        #define ALLEGRO_BPM_TO_SECS(x)        (60.0 / (x))
        \n

        Source\n Code

        \n

        Convert beats per minute to seconds.

        \n

        al_create_timer

        \n@@ -360,15 +346,15 @@\n

        Examples:

        \n
          \n
        • ex_timer_pause.c
        • \n
        • ex_user_events.c
        • \n
        • ex_noframe.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_font_multiline.cpp#L224\">ex_font_multiline.cpp\n
        \n

        al_get_timer_count

        \n
        int64_t al_get_timer_count(const ALLEGRO_TIMER *timer)
        \n

        Source\n Code

        \n

        Return the timer\u2019s counter value. The timer can be started or\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -62,32 +62,26 @@\n * _\ba_\bl_\b__\bg_\be_\bt_\b__\bt_\bi_\bm_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be\n These functions are declared in the main Allegro header file:\n #include \n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_T\bTI\bIM\bME\bER\bR *\b**\b**\b**\b**\b**\b*\n typedef struct ALLEGRO_TIMER ALLEGRO_TIMER;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This is an abstract data type representing a timer object.\n-Examples:\n- * _\be_\bx_\b__\be_\bn_\be_\bt_\b__\bs_\be_\br_\bv_\be_\br_\b._\bc\n- * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n- * _\be_\bx_\b__\bu_\bs_\be_\br_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_U\bUS\bSE\bEC\bCS\bS_\b_T\bTO\bO_\b_S\bSE\bEC\bCS\bS *\b**\b**\b**\b**\b**\b*\n #define ALLEGRO_USECS_TO_SECS(x) ((x) / 1000000.0)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert microseconds to seconds.\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_M\bMS\bSE\bEC\bCS\bS_\b_T\bTO\bO_\b_S\bSE\bEC\bCS\bS *\b**\b**\b**\b**\b**\b*\n #define ALLEGRO_MSECS_TO_SECS(x) ((x) / 1000.0)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert milliseconds to seconds.\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_B\bBP\bPS\bS_\b_T\bTO\bO_\b_S\bSE\bEC\bCS\bS *\b**\b**\b**\b**\b**\b*\n #define ALLEGRO_BPS_TO_SECS(x) (1.0 / (x))\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert beats per second to seconds.\n-Examples:\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_B\bBP\bPM\bM_\b_T\bTO\bO_\b_S\bSE\bEC\bCS\bS *\b**\b**\b**\b**\b**\b*\n #define ALLEGRO_BPM_TO_SECS(x) (60.0 / (x))\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Convert beats per minute to seconds.\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcr\bre\bea\bat\bte\be_\b_t\bti\bim\bme\ber\br *\b**\b**\b**\b**\b**\b*\n ALLEGRO_TIMER *al_create_timer(double speed_secs)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n@@ -146,15 +140,15 @@\n be stopped before uninstallation. It will also automatically unregister the\n timer with any event queues.\n Does nothing if passed the NULL pointer.\n See also: _\ba_\bl_\b__\bc_\br_\be_\ba_\bt_\be_\b__\bt_\bi_\bm_\be_\br\n Examples:\n * _\be_\bx_\b__\bt_\bi_\bm_\be_\br_\b__\bp_\ba_\bu_\bs_\be_\b._\bc\n * _\be_\bx_\b__\bu_\bs_\be_\br_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\bn_\bo_\bf_\br_\ba_\bm_\be_\b._\bc\n+ * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_t\bti\bim\bme\ber\br_\b_c\bco\bou\bun\bnt\bt *\b**\b**\b**\b**\b**\b*\n int64_t al_get_timer_count(const ALLEGRO_TIMER *timer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the timer\u2019s counter value. The timer can be started or stopped.\n See also: _\ba_\bl_\b__\bs_\be_\bt_\b__\bt_\bi_\bm_\be_\br_\b__\bc_\bo_\bu_\bn_\bt\n Examples:\n * _\be_\bx_\b__\bm_\be_\bn_\bu_\b._\bc\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/touch.html", "source2": "./usr/share/doc/allegro5-doc/refman/touch.html", "unified_diff": "@@ -326,19 +326,19 @@\n

        Returns true if al_install_touch_input was\n called successfully.

        \n

        Since: 5.1.0

        \n

        Examples:

        \n
          \n
        • nihgui.cpp
        • \n+
        • ex_lockbitmap.c
        • \n
        • ex_haiku.c
        • \n-
        • ex_prim_shader.c
        • \n
        \n

        al_get_touch_input_state

        \n
        void al_get_touch_input_state(ALLEGRO_TOUCH_INPUT_STATE *ret_state)
        \n

        Source\n Code

        \n

        Gets the current touch input state. The touch information is copied\n@@ -399,17 +399,17 @@\n href=\"events.html#allegro_event_source\">ALLEGRO_EVENT_SOURCE, al_register_event_source

        \n

        Examples:

        \n
          \n
        • ex_touch_input.c
        • \n
        • ex_android.c
        • \n-
        • ex_polygon.c
        • \n+
        • ex_native_filechooser.c
        • \n
        \n al_get_touch_input_mouse_emulation_event_source\n
        ALLEGRO_EVENT_SOURCE *al_get_touch_input_mouse_emulation_event_source(void)
        \n

        Source\n Code

        \n@@ -425,19 +425,19 @@\n

        Unstable\n API: Seems of limited value, as touch input tends to have\n different semantics compared to mouse input.

        \n
        \n

        Examples:

        \n
          \n
        • ex_lockbitmap.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/nihgui.cpp#L123\">nihgui.cpp\n
        • ex_haiku.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_lockbitmap.c#L180\">ex_lockbitmap.c\n
        • ex_prim_shader.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_polygon.c#L388\">ex_polygon.c\n
        \n

        \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

        \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -128,17 +128,17 @@\n See also: _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\bt_\bo_\bu_\bc_\bh_\b__\bi_\bn_\bp_\bu_\bt\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_t\bto\bou\buc\bch\bh_\b_i\bin\bnp\bpu\but\bt_\b_i\bin\bns\bst\bta\bal\bll\ble\bed\bd *\b**\b**\b**\b**\b**\b*\n bool al_is_touch_input_installed(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if _\ba_\bl_\b__\bi_\bn_\bs_\bt_\ba_\bl_\bl_\b__\bt_\bo_\bu_\bc_\bh_\b__\bi_\bn_\bp_\bu_\bt was called successfully.\n Since: 5.1.0\n Examples:\n+ * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bl_\bo_\bc_\bk_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n * _\be_\bx_\b__\bh_\ba_\bi_\bk_\bu_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_t\bto\bou\buc\bch\bh_\b_i\bin\bnp\bpu\but\bt_\b_s\bst\bta\bat\bte\be *\b**\b**\b**\b**\b**\b*\n void al_get_touch_input_state(ALLEGRO_TOUCH_INPUT_STATE *ret_state)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Gets the current touch input state. The touch information is copied into the\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bT_\bO_\bU_\bC_\bH_\b__\bI_\bN_\bP_\bU_\bT_\b__\bS_\bT_\bA_\bT_\bE you provide to this function.\n Since: 5.1.0\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_m\bmo\bou\bus\bse\be_\b_e\bem\bmu\bul\bla\bat\bti\bio\bon\bn_\b_m\bmo\bod\bde\be *\b**\b**\b**\b**\b**\b*\n@@ -165,23 +165,23 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the global touch input event source. This event source generates _\bt_\bo_\bu_\bc_\bh\n _\bi_\bn_\bp_\bu_\bt_\b _\be_\bv_\be_\bn_\bt_\bs.\n Since: 5.1.0\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bS_\bO_\bU_\bR_\bC_\bE, _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be\n Examples:\n * _\be_\bx_\b__\bt_\bo_\bu_\bc_\bh_\b__\bi_\bn_\bp_\bu_\bt_\b._\bc\n- * _\be_\bx_\b__\ba_\bn_\bd_\br_\bo_\bi_\bd_\b._\bc\n * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n+ * _\be_\bx_\b__\bn_\ba_\bt_\bi_\bv_\be_\b__\bf_\bi_\bl_\be_\bc_\bh_\bo_\bo_\bs_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_t\bto\bou\buc\bch\bh_\b_i\bin\bnp\bpu\but\bt_\b_m\bmo\bou\bus\bse\be_\b_e\bem\bmu\bul\bla\bat\bti\bio\bon\bn_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_EVENT_SOURCE *al_get_touch_input_mouse_emulation_event_source(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the global touch input event source for emulated mouse events. This\n event source generates _\be_\bm_\bu_\bl_\ba_\bt_\be_\bd_\b _\bm_\bo_\bu_\bs_\be_\b _\be_\bv_\be_\bn_\bt_\bs that are based on touch events.\n See also: _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bS_\bO_\bU_\bR_\bC_\bE, _\ba_\bl_\b__\br_\be_\bg_\bi_\bs_\bt_\be_\br_\b__\be_\bv_\be_\bn_\bt_\b__\bs_\bo_\bu_\br_\bc_\be\n Since: 5.1.0\n _\bU\bU_\bn\bn_\bs\bs_\bt\bt_\ba\ba_\bb\bb_\bl\bl_\be\be_\b _\bA\bA_\bP\bP_\bI\bI:\b: Seems of limited value, as touch input tends to have\n different semantics compared to mouse input.\n Examples:\n+ * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n * _\be_\bx_\b__\bl_\bo_\bc_\bk_\bb_\bi_\bt_\bm_\ba_\bp_\b._\bc\n- * _\be_\bx_\b__\bh_\ba_\bi_\bk_\bu_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bi_\bm_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/transformations.html", "source2": "./usr/share/doc/allegro5-doc/refman/transformations.html", "unified_diff": "@@ -312,23 +312,14 @@\n

        Defines the generic transformation type, a 4x4 matrix. 2D transforms\n use only a small subsection of this matrix, namely the top left 2x2\n matrix, and the right most 2x1 matrix, for a total of 6 values.

        \n

        Fields:

        \n
          \n
        • m - A 4x4 float matrix
        • \n
        \n-

        Examples:

        \n-
          \n-
        • ex_shader.cpp
        • \n-
        • ex_shader_target.c
        • \n-
        • ex_audio_timer.c
        • \n-
        \n

        al_copy_transform

        \n
        void al_copy_transform(ALLEGRO_TRANSFORM *dest, const ALLEGRO_TRANSFORM *src)
        \n

        Source\n Code

        \n

        Makes a copy of a transformation.

        \n

        Parameters:

        \n@@ -368,19 +359,19 @@\n

        See also: al_get_current_transform,\n al_transform_coordinates

        \n

        Examples:

        \n
          \n
        • ex_shader.cpp
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_timer.c#L124\">ex_audio_timer.c\n
        • ex_shader_target.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_shader.cpp#L142\">ex_shader.cpp\n
        • ex_audio_timer.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_polygon.c#L234\">ex_polygon.c\n
        \n

        al_get_current_transform

        \n
        const ALLEGRO_TRANSFORM *al_get_current_transform(void)
        \n

        Source\n Code

        \n

        Returns the transformation of the current target bitmap, as set by Examples:

        \n
          \n
        • ex_projection.c
        • \n
        • ex_depth_target.c
        • \n
        • ex_projection2.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_camera.c#L204\">ex_camera.c\n
        \n al_get_current_projection_transform\n
        const ALLEGRO_TRANSFORM *al_get_current_projection_transform(void)
        \n

        Source\n Code

        \n@@ -567,19 +558,19 @@\n al_rotate_transform,\n al_scale_transform

        \n

        Examples:

        \n
          \n
        • ex_shader.cpp
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_timer.c#L122\">ex_audio_timer.c\n
        • ex_shader_target.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_shader.cpp#L139\">ex_shader.cpp\n
        • ex_audio_timer.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_polygon.c#L231\">ex_polygon.c\n
        \n

        al_build_transform

        \n
        void al_build_transform(ALLEGRO_TRANSFORM *trans, float x, float y,\n    float sx, float sy, float theta)
        \n

        Source\n Code

        \n@@ -606,18 +597,18 @@\n al_scale_transform,\n al_compose_transform

        \n

        Examples:

        \n
          \n
        • ex_threads.c
        • \n-
        • ex_color_gradient.c
        • \n
        • ex_threads.c
        • \n+
        • ex_prim.c
        • \n
        \n

        al_build_camera_transform

        \n
        void al_build_camera_transform(ALLEGRO_TRANSFORM *trans,\n    float position_x, float position_y, float position_z,\n    float look_x, float look_y, float look_z,\n    float up_x, float up_y, float up_z)
        \n@@ -687,17 +678,17 @@\n al_build_transform

        \n

        Examples:

        \n
          \n
        • ex_shader.cpp
        • \n
        • ex_shader_target.c
        • \n-
        • ex_polygon.c
        • \n+
        • ex_vertex_buffer.c
        • \n
        \n

        al_rotate_transform

        \n
        void al_rotate_transform(ALLEGRO_TRANSFORM *trans, float theta)
        \n

        Source\n Code

        \n

        Apply a rotation to a transformation.

        \n@@ -737,19 +728,19 @@\n al_rotate_transform,\n al_build_transform

        \n

        Examples:

        \n
          \n
        • ex_shader_target.c
        • \n-
        • ex_audio_timer.c
        • \n
        • ex_polygon.c
        • \n+
        • ex_shader_target.c
        • \n
        \n

        al_transform_coordinates

        \n
        void al_transform_coordinates(const ALLEGRO_TRANSFORM *trans, float *x, float *y)
        \n

        Source\n Code

        \n

        Transform a pair of coordinates.

        \n@@ -996,17 +987,17 @@\n al_orthographic_transform

        \n

        Examples:

        \n
          \n
        • ex_projection.c
        • \n
        • ex_projection2.c
        • \n-
        • ex_camera.c
        • \n+
        • ex_projection2.c
        • \n
        \n

        al_translate_transform_3d

        \n
        void al_translate_transform_3d(ALLEGRO_TRANSFORM *trans, float x, float y,\n     float z)
        \n

        Source\n Code

        \n@@ -1018,15 +1009,15 @@\n

        Examples:

        \n
          \n
        • ex_projection.c
        • \n
        • ex_depth_target.c
        • \n
        • ex_projection2.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_camera.c#L199\">ex_camera.c\n
        \n

        al_scale_transform_3d

        \n
        void al_scale_transform_3d(ALLEGRO_TRANSFORM *trans, float sx, float sy,\n     float sz)
        \n

        Source\n Code

        \n@@ -1049,15 +1040,15 @@\n

        Examples:

        \n
          \n
        • ex_projection.c
        • \n
        • ex_depth_target.c
        • \n
        • ex_projection2.c
        • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_camera.c#L109\">ex_camera.c\n
        \n al_horizontal_shear_transform\n
        void al_horizontal_shear_transform(ALLEGRO_TRANSFORM* trans, float theta)
        \n

        Source\n Code

        \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -136,18 +136,14 @@\n typedef struct ALLEGRO_TRANSFORM ALLEGRO_TRANSFORM;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Defines the generic transformation type, a 4x4 matrix. 2D transforms use only a\n small subsection of this matrix, namely the top left 2x2 matrix, and the right\n most 2x1 matrix, for a total of 6 values.\n F\bFi\bie\bel\bld\bds\bs:\b:\n * m - A 4x4 float matrix\n-Examples:\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bt_\bi_\bm_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bco\bop\bpy\by_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm *\b**\b**\b**\b**\b**\b*\n void al_copy_transform(ALLEGRO_TRANSFORM *dest, const ALLEGRO_TRANSFORM *src)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Makes a copy of a transformation.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * dest - Source transformation\n * src - Destination transformation\n@@ -170,17 +166,17 @@\n al_translate_transform(&transform, 5, 10);\n al_use_transform(&transform);\n }\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * trans - Transformation to use\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bc_\bu_\br_\br_\be_\bn_\bt_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\b__\bc_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n Examples:\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bt_\bi_\bm_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_c\bcu\bur\brr\bre\ben\bnt\bt_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm *\b**\b**\b**\b**\b**\b*\n const ALLEGRO_TRANSFORM *al_get_current_transform(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the transformation of the current target bitmap, as set by\n _\ba_\bl_\b__\bu_\bs_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm. If there is no target bitmap, this function returns NULL.\n R\bRe\bet\btu\bur\brn\bns\bs:\b: A pointer to the current transformation.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bc_\bu_\br_\br_\be_\bn_\bt_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n@@ -217,15 +213,15 @@\n is safe to pass references to local variables.\n Since: 5.1.9\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bc_\bu_\br_\br_\be_\bn_\bt_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\bp_\be_\br_\bs_\bp_\be_\bc_\bt_\bi_\bv_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm,\n _\ba_\bl_\b__\bo_\br_\bt_\bh_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n Examples:\n * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b._\bc\n * _\be_\bx_\b__\bd_\be_\bp_\bt_\bh_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b2_\b._\bc\n+ * _\be_\bx_\b__\bc_\ba_\bm_\be_\br_\ba_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_c\bcu\bur\brr\bre\ben\bnt\bt_\b_p\bpr\bro\boj\bje\bec\bct\bti\bio\bon\bn_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm *\b**\b**\b**\b**\b**\b*\n const ALLEGRO_TRANSFORM *al_get_current_projection_transform(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n If there is no target bitmap, this function returns NULL.\n R\bRe\bet\btu\bur\brn\bns\bs:\b: A pointer to the current transformation.\n Since: 5.1.9\n See also: _\ba_\bl_\b__\bu_\bs_\be_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n@@ -300,17 +296,17 @@\n ALLEGRO_TRANSFORM t;\n al_identity_transform(&t);\n al_use_transform(&t);\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * trans - Transformation to alter\n See also: _\ba_\bl_\b__\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\br_\bo_\bt_\ba_\bt_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\bs_\bc_\ba_\bl_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n Examples:\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bt_\bi_\bm_\be_\br_\b._\bc\n+ * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n+ * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_b\bbu\bui\bil\bld\bd_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm *\b**\b**\b**\b**\b**\b*\n void al_build_transform(ALLEGRO_TRANSFORM *trans, float x, float y,\n float sx, float sy, float theta)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Builds a transformation given some parameters. This call is equivalent to\n calling the transformations in this order: make identity, rotate, scale,\n translate. This method is faster, however, than actually calling those\n@@ -322,16 +318,16 @@\n * theta - Rotation angle in radians\n N\bNo\bot\bte\be: this function was previously documented to be equivalent to a\n different (and more useful) order of operations: identity, scale,\n rotate, translate.\n See also: _\ba_\bl_\b__\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\br_\bo_\bt_\ba_\bt_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\bs_\bc_\ba_\bl_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm,\n _\ba_\bl_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n Examples:\n- * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n * _\be_\bx_\b__\bc_\bo_\bl_\bo_\br_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b._\bc\n+ * _\be_\bx_\b__\bt_\bh_\br_\be_\ba_\bd_\bs_\b._\bc\n * _\be_\bx_\b__\bp_\br_\bi_\bm_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_b\bbu\bui\bil\bld\bd_\b_c\bca\bam\bme\ber\bra\ba_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm *\b**\b**\b**\b**\b**\b*\n void al_build_camera_transform(ALLEGRO_TRANSFORM *trans,\n float position_x, float position_y, float position_z,\n float look_x, float look_y, float look_z,\n float up_x, float up_y, float up_z)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n@@ -373,16 +369,16 @@\n Apply a translation to a transformation.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * trans - Transformation to alter\n * x, y - Translation\n See also: _\ba_\bl_\b__\br_\bo_\bt_\ba_\bt_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\bs_\bc_\ba_\bl_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\bb_\bu_\bi_\bl_\bd_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n Examples:\n * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n+ * _\be_\bx_\b__\bv_\be_\br_\bt_\be_\bx_\b__\bb_\bu_\bf_\bf_\be_\br_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_r\bro\bot\bta\bat\bte\be_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm *\b**\b**\b**\b**\b**\b*\n void al_rotate_transform(ALLEGRO_TRANSFORM *trans, float theta)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Apply a rotation to a transformation.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * trans - Transformation to alter\n * theta - Rotation angle in radians\n@@ -396,17 +392,17 @@\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Apply a scale to a transformation.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * trans - Transformation to alter\n * sx, sy - Scale\n See also: _\ba_\bl_\b__\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\br_\bo_\bt_\ba_\bt_\be_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\bb_\bu_\bi_\bl_\bd_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n Examples:\n- * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n * _\be_\bx_\b__\ba_\bu_\bd_\bi_\bo_\b__\bt_\bi_\bm_\be_\br_\b._\bc\n * _\be_\bx_\b__\bp_\bo_\bl_\by_\bg_\bo_\bn_\b._\bc\n+ * _\be_\bx_\b__\bs_\bh_\ba_\bd_\be_\br_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm_\b_c\bco\boo\bor\brd\bdi\bin\bna\bat\bte\bes\bs *\b**\b**\b**\b**\b**\b*\n void al_transform_coordinates(const ALLEGRO_TRANSFORM *trans, float *x, float\n *y)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Transform a pair of coordinates.\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * trans - Transformation to use\n@@ -580,28 +576,28 @@\n // 50%. This rectangle therefore will appear at a size of 400 x 225\n // pixel (assuming the display is 800 x 450).\n al_draw_filled_rectangle(-1, -1, 1, 1, red);\n Since: 5.1.3\n See also: _\ba_\bl_\b__\bu_\bs_\be_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm, _\ba_\bl_\b__\bo_\br_\bt_\bh_\bo_\bg_\br_\ba_\bp_\bh_\bi_\bc_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n Examples:\n * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b2_\b._\bc\n * _\be_\bx_\b__\bc_\ba_\bm_\be_\br_\ba_\b._\bc\n+ * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b2_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_t\btr\bra\ban\bns\bsl\bla\bat\bte\be_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm_\b_3\b3d\bd *\b**\b**\b**\b**\b**\b*\n void al_translate_transform_3d(ALLEGRO_TRANSFORM *trans, float x, float y,\n float z)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Combines the given transformation with a transformation which translates\n coordinates by the given vector.\n Since: 5.1.3\n See also: _\ba_\bl_\b__\bu_\bs_\be_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b__\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm\n Examples:\n * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b._\bc\n * _\be_\bx_\b__\bd_\be_\bp_\bt_\bh_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b2_\b._\bc\n+ * _\be_\bx_\b__\bc_\ba_\bm_\be_\br_\ba_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsc\bca\bal\ble\be_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm_\b_3\b3d\bd *\b**\b**\b**\b**\b**\b*\n void al_scale_transform_3d(ALLEGRO_TRANSFORM *trans, float sx, float sy,\n float sz)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Combines the given transformation with a transformation which scales\n coordinates by the given vector.\n Since: 5.1.3\n@@ -614,15 +610,15 @@\n coordinates around the given vector by the given angle in radians.\n Note: The vector is assumed to be of unit length (otherwise it will also incur\n a scale).\n Since: 5.1.3\n Examples:\n * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b._\bc\n * _\be_\bx_\b__\bd_\be_\bp_\bt_\bh_\b__\bt_\ba_\br_\bg_\be_\bt_\b._\bc\n- * _\be_\bx_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\b2_\b._\bc\n+ * _\be_\bx_\b__\bc_\ba_\bm_\be_\br_\ba_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_h\bho\bor\bri\biz\bzo\bon\bnt\bta\bal\bl_\b_s\bsh\bhe\bea\bar\br_\b_t\btr\bra\ban\bns\bsf\bfo\bor\brm\bm *\b**\b**\b**\b**\b**\b*\n void al_horizontal_shear_transform(ALLEGRO_TRANSFORM* trans, float theta)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Apply a horizontal shear to the transform\n P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs:\b:\n * trans - Transformation to alter\n * theta - Rotation angle in radians\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/utf8.html", "source2": "./usr/share/doc/allegro5-doc/refman/utf8.html", "unified_diff": "@@ -443,43 +443,25 @@\n
        typedef struct _al_tagbstring ALLEGRO_USTR;
        \n

        Source\n Code

        \n

        An opaque type representing a string. ALLEGRO_USTRs normally contain\n UTF-8 encoded strings, but they may be used to hold any byte sequences,\n including NULs.

        \n-

        Examples:

        \n-
          \n-
        • ex_font_multiline.cpp
        • \n-
        • nihgui.cpp
        • \n-
        • ex_blend.c
        • \n-
        \n

        ALLEGRO_USTR_INFO

        \n
        typedef struct _al_tagbstring ALLEGRO_USTR_INFO;
        \n

        Source\n Code

        \n

        A type that holds additional information for an ALLEGRO_USTR that references an\n external memory buffer.

        \n

        See also: al_ref_cstr, al_ref_buffer and al_ref_ustr.

        \n-

        Examples:

        \n-
          \n-
        • ex_font_multiline.cpp
        • \n-
        • nihgui.cpp
        • \n-
        • ex_blend.c
        • \n-
        \n

        Creating and destroying\n strings

        \n

        al_ustr_new

        \n
        ALLEGRO_USTR *al_ustr_new(const char *s)
        \n

        Source\n Code

        \n@@ -487,38 +469,24 @@\n s. The string must eventually be freed with al_ustr_free.

        \n

        See also: al_ustr_new_from_buffer, al_ustr_newf, al_ustr_dup, al_ustr_new_from_utf16

        \n-

        Examples:

        \n-
          \n-
        • nihgui.cpp
        • \n-
        • ex_loading_thread.c
        • \n-
        • ex_utf8.c
        • \n-
        \n

        al_ustr_new_from_buffer

        \n
        ALLEGRO_USTR *al_ustr_new_from_buffer(const char *s, size_t size)
        \n

        Source\n Code

        \n

        Create a new string containing a copy of the buffer pointed to by\n s of the given size in bytes. The string must\n eventually be freed with al_ustr_free.

        \n

        See also: al_ustr_new

        \n-

        Examples:

        \n-
          \n-
        • ex_utf8.c
        • \n-
        \n

        al_ustr_newf

        \n
        ALLEGRO_USTR *al_ustr_newf(const char *fmt, ...)
        \n

        Source\n Code

        \n

        Create a new string using a printf-style format string.

        \n

        Notes:

        \n@@ -531,38 +499,24 @@\n code point. Therefore it is only usable for ASCII characters (value\n <= 127) or if you really mean to output byte values from 128\u2013255. To\n insert the UTF-8 encoding of a code point, encode it into a memory\n buffer using al_utf8_encode then\n use the \u201c%s\u201d specifier. Remember to NUL terminate the buffer.

        \n

        See also: al_ustr_new, al_ustr_appendf

        \n-

        Examples:

        \n-
          \n-
        • ex_utf8.c
        • \n-
        \n

        al_ustr_free

        \n
        void al_ustr_free(ALLEGRO_USTR *us)
        \n

        Source\n Code

        \n

        Free a previously allocated string. Does nothing if the argument is\n NULL.

        \n

        See also: al_ustr_new, al_ustr_new_from_buffer, al_ustr_newf

        \n-

        Examples:

        \n-
          \n-
        • nihgui.cpp
        • \n-
        • ex_loading_thread.c
        • \n-
        • ex_utf8.c
        • \n-
        \n

        al_cstr

        \n
        const char *al_cstr(const ALLEGRO_USTR *us)
        \n

        Source\n Code

        \n

        Get a char * pointer to the data in a string. This\n pointer will only be valid while the

        If the ALLEGRO_USTR references another string, the returned C\n string will point into the referenced string. Again, no NUL terminator\n will be added to the referenced string.

        \n
      \n

      See also: al_ustr_to_buffer, al_cstr_dup

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_loading_thread.c
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_to_buffer

      \n
      void al_ustr_to_buffer(const ALLEGRO_USTR *us, char *buffer, int size)
      \n

      Source\n Code

      \n

      Write the contents of the string into a pre-allocated buffer of the\n given size in bytes. The result will always be NUL terminated, so a\n maximum of size - 1 bytes will be copied.

      \n

      See also: al_cstr, al_cstr_dup

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_cstr_dup

      \n
      char *al_cstr_dup(const ALLEGRO_USTR *us)
      \n

      Source\n Code

      \n

      Create a NUL ('\\0') terminated copy of the string. Any\n embedded NUL bytes will still be presented in the returned string. The\n new string must eventually be freed with al_free.

      \n

      If an error occurs NULL is returned.

      \n

      See also: al_cstr, al_ustr_to_buffer, al_free

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_dup

      \n
      ALLEGRO_USTR *al_ustr_dup(const ALLEGRO_USTR *us)
      \n

      Source\n Code

      \n

      Return a duplicate copy of a string. The new string will need to be\n freed with al_ustr_free.

      \n

      See also: al_ustr_dup_substr, al_ustr_free

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_dup_substr

      \n
      ALLEGRO_USTR *al_ustr_dup_substr(const ALLEGRO_USTR *us, int start_pos,\n    int end_pos)
      \n

      Source\n Code

      \n

      Return a new copy of a string, containing its contents in the byte\n@@ -652,32 +582,22 @@\n will be NUL terminated and will need to be freed with al_ustr_free.

      \n

      If necessary, use al_ustr_offset to find the byte\n offsets for a given code point that you are interested in.

      \n

      See also: al_ustr_dup, al_ustr_free

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      Predefined strings

      \n

      al_ustr_empty_string

      \n
      const ALLEGRO_USTR *al_ustr_empty_string(void)
      \n

      Source\n Code

      \n

      Return a pointer to a static empty string. The string is read only\n and must not be freed.

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      Creating strings by\n referencing other data

      \n

      al_ref_cstr

      \n
      const ALLEGRO_USTR *al_ref_cstr(ALLEGRO_USTR_INFO *info, const char *s)
      \n

      Source\n Code

      \n@@ -689,41 +609,25 @@\n operation is required.

      \n

      The string is valid until the underlying C string disappears.

      \n

      Example:

      \n
      ALLEGRO_USTR_INFO info;\n ALLEGRO_USTR *us = al_ref_cstr(&info, "my string");
      \n

      See also: al_ref_buffer, al_ref_ustr

      \n-

      Examples:

      \n-
        \n-
      • ex_blend.c
      • \n-
      • ex_utf8.c
      • \n-
      • ex_ttf.c
      • \n-
      \n

      al_ref_buffer

      \n
      const ALLEGRO_USTR *al_ref_buffer(ALLEGRO_USTR_INFO *info, const char *s, size_t size)
      \n

      Source\n Code

      \n

      Create a string that references the storage of an underlying buffer.\n The size of the buffer is given in bytes. You can use it to reference\n only part of a string or an arbitrary region of memory.

      \n

      The string is valid while the underlying memory buffer is valid.

      \n

      See also: al_ref_cstr, al_ref_ustr

      \n-

      Examples:

      \n-
        \n-
      • ex_font_multiline.cpp
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_ref_ustr

      \n
      const ALLEGRO_USTR *al_ref_ustr(ALLEGRO_USTR_INFO *info, const ALLEGRO_USTR *us,\n    int start_pos, int end_pos)
      \n

      Source\n Code

      \n

      Create a read-only string that references the storage of another The string is valid until the underlying string is modified or\n destroyed.

      \n

      If you need a range of code-points instead of bytes, use al_ustr_offset to find the byte\n offsets.

      \n

      See also: al_ref_cstr, al_ref_buffer

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_blend.c
      • \n-
      • ex_utf8.c
      • \n-
      \n

      Sizes and offsets

      \n

      al_ustr_size

      \n
      size_t al_ustr_size(const ALLEGRO_USTR *us)
      \n

      Source\n Code

      \n

      Return the size of the string in bytes. This is equal to the number\n of code points in the string if the string is empty or contains only\n 7-bit ASCII characters.

      \n

      See also: al_ustr_length

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_length

      \n
      size_t al_ustr_length(const ALLEGRO_USTR *us)
      \n

      Source\n Code

      \n

      Return the number of code points in the string.

      \n

      See also: al_ustr_size, al_ustr_offset

      \n-

      Examples:

      \n-
        \n-
      • ex_blend.c
      • \n-
      • ex_utf8.c
      • \n-
      • ex_ttf.c
      • \n-
      \n

      al_ustr_offset

      \n
      int al_ustr_offset(const ALLEGRO_USTR *us, int index)
      \n

      Source\n Code

      \n

      Return the byte offset (from the start of the string) of the code\n point at the specified index in the string. A zero index parameter will\n return the first character of the string. If index is negative, it\n counts backward from the end of the string, so an index of -1 will\n return an offset to the last code point.

      \n

      If the index is past the end of the string, returns the offset of the\n end of the string.

      \n

      See also: al_ustr_length

      \n-

      Examples:

      \n-
        \n-
      • ex_blend.c
      • \n-
      • ex_utf8.c
      • \n-
      • ex_ttf.c
      • \n-
      \n

      al_ustr_next

      \n
      bool al_ustr_next(const ALLEGRO_USTR *us, int *pos)
      \n

      Source\n Code

      \n

      Find the byte offset of the next code point in string, beginning at\n *pos. *pos does not have to be at the\n@@ -820,21 +690,14 @@\n *pos was already at the end of the string, and\n *pos is unmodified.

      \n

      This function just looks for an appropriate byte; it doesn\u2019t check if\n found offset is the beginning of a valid code point. If you are working\n with possibly invalid UTF-8 strings then it could skip over some invalid\n bytes.

      \n

      See also: al_ustr_prev

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_prev

      \n
      bool al_ustr_prev(const ALLEGRO_USTR *us, int *pos)
      \n

      Source\n Code

      \n

      Find the byte offset of the previous code point in string, before\n *pos. *pos does not have to be at the\n@@ -843,62 +706,41 @@\n Otherwise returns false if *pos was already at the end of\n the string, and *pos is unmodified.

      \n

      This function just looks for an appropriate byte; it doesn\u2019t check if\n found offset is the beginning of a valid code point. If you are working\n with possibly invalid UTF-8 strings then it could skip over some invalid\n bytes.

      \n

      See also: al_ustr_next

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_utf8.c
      • \n-
      • ex_logo.c
      • \n-
      \n

      Getting code points

      \n

      al_ustr_get

      \n
      int32_t al_ustr_get(const ALLEGRO_USTR *ub, int pos)
      \n

      Source\n Code

      \n

      Return the code point in ub beginning at byte offset\n pos.

      \n

      On success returns the code point value. If pos was out\n of bounds (e.g.\u00a0past the end of the string), return -1. On an error,\n such as an invalid byte sequence, return -2.

      \n

      See also: al_ustr_get_next,\n al_ustr_prev_get

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      • ex_ttf.c
      • \n-
      \n

      al_ustr_get_next

      \n
      int32_t al_ustr_get_next(const ALLEGRO_USTR *us, int *pos)
      \n

      Source\n Code

      \n

      Find the code point in us beginning at byte offset\n *pos, then advance to the next code point.

      \n

      On success return the code point value. If pos was out\n of bounds (e.g.\u00a0past the end of the string), return -1. On an error,\n such as an invalid byte sequence, return -2. As with al_ustr_next, invalid byte sequences\n may be skipped while advancing.

      \n

      See also: al_ustr_get, al_ustr_prev_get

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_prev_get

      \n
      int32_t al_ustr_prev_get(const ALLEGRO_USTR *us, int *pos)
      \n

      Source\n Code

      \n

      Find the beginning of a code point before byte offset\n *pos, then return it. Note this performs a\n@@ -906,19 +748,14 @@\n

      On success returns the code point value. If pos was out\n of bounds (e.g.\u00a0past the end of the string), return -1. On an error,\n such as an invalid byte sequence, return -2. As with al_ustr_prev, invalid byte sequences\n may be skipped while advancing.

      \n

      See also: al_ustr_get_next

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      Inserting into strings

      \n

      al_ustr_insert

      \n
      bool al_ustr_insert(ALLEGRO_USTR *us1, int pos, const ALLEGRO_USTR *us2)
      \n

      Source\n Code

      \n

      Insert us2 into us1 beginning at byte\n@@ -931,55 +768,36 @@\n offset for a given code point index.

      \n

      Returns true on success, false on error.

      \n

      See also: al_ustr_insert_cstr, al_ustr_insert_chr, al_ustr_append, al_ustr_offset

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_insert_cstr

      \n
      bool al_ustr_insert_cstr(ALLEGRO_USTR *us, int pos, const char *s)
      \n

      Source\n Code

      \n

      Like al_ustr_insert but\n inserts a C-style string at byte offset pos.

      \n

      See also: al_ustr_insert, al_ustr_insert_chr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_insert_chr

      \n
      size_t al_ustr_insert_chr(ALLEGRO_USTR *us, int pos, int32_t c)
      \n

      Source\n Code

      \n

      Insert a code point into us beginning at byte offset\n pos. pos cannot be less than 0. If\n pos is past the end of us then the space\n between the end of the string and pos will be padded with\n NUL ('\\0') bytes.

      \n

      Returns the number of bytes inserted, or 0 on error.

      \n

      See also: al_ustr_insert, al_ustr_insert_cstr

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_utf8.c
      • \n-
      \n

      Appending to strings

      \n

      al_ustr_append

      \n
      bool al_ustr_append(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
      \n

      Source\n Code

      \n

      Append us2 to the end of us1.

      \n@@ -988,208 +806,138 @@\n
        ALLEGRO_USTR_INFO info;\n   al_ustr_append(us, al_ref_buffer(&info, buf, size));
      \n

      See also: al_ustr_append_cstr, al_ustr_append_chr, al_ustr_appendf, al_ustr_vappendf

      \n-

      Examples:

      \n-
        \n-
      • ex_loading_thread.c
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_append_cstr

      \n
      bool al_ustr_append_cstr(ALLEGRO_USTR *us, const char *s)
      \n

      Source\n Code

      \n

      Append C-style string s to the end of\n us.

      \n

      Returns true on success, false on error.

      \n

      See also: al_ustr_append

      \n-

      Examples:

      \n-
        \n-
      • ex_loading_thread.c
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_append_chr

      \n
      size_t al_ustr_append_chr(ALLEGRO_USTR *us, int32_t c)
      \n

      Source\n Code

      \n

      Append a code point to the end of us.

      \n

      Returns the number of bytes added, or 0 on error.

      \n

      See also: al_ustr_append

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_appendf

      \n
      bool al_ustr_appendf(ALLEGRO_USTR *us, const char *fmt, ...)
      \n

      Source\n Code

      \n

      This function appends formatted output to the string us.\n fmt is a printf-style format string. See al_ustr_newf about the \u201c%s\u201d and \u201c%c\u201d\n specifiers.

      \n

      Returns true on success, false on error.

      \n

      See also: al_ustr_vappendf,\n al_ustr_append

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_vappendf

      \n
      bool al_ustr_vappendf(ALLEGRO_USTR *us, const char *fmt, va_list ap)
      \n

      Source\n Code

      \n

      Like al_ustr_appendf but you\n pass the variable argument list directly, instead of the arguments\n themselves. See al_ustr_newf about\n the \u201c%s\u201d and \u201c%c\u201d specifiers.

      \n

      Returns true on success, false on error.

      \n

      See also: al_ustr_appendf, al_ustr_append

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      Removing parts of strings

      \n

      al_ustr_remove_chr

      \n
      bool al_ustr_remove_chr(ALLEGRO_USTR *us, int pos)
      \n

      Source\n Code

      \n

      Remove the code point beginning at byte offset pos.\n Returns true on success. If pos is out of range or\n pos is not the beginning of a valid code point, returns\n false leaving the string unmodified.

      \n

      Use al_ustr_offset to find the\n byte offset for a code-points offset.

      \n

      See also: al_ustr_remove_range

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_utf8.c
      • \n-
      • ex_logo.c
      • \n-
      \n

      al_ustr_remove_range

      \n
      bool al_ustr_remove_range(ALLEGRO_USTR *us, int start_pos, int end_pos)
      \n

      Source\n Code

      \n

      Remove the interval [start_pos, end_pos)\n from a string. start_pos and end_pos are byte\n offsets. Both may be past the end of the string but cannot be less than\n 0 (the start of the string).

      \n

      Returns true on success, false on error.

      \n

      See also: al_ustr_remove_chr, al_ustr_truncate

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_truncate

      \n
      bool al_ustr_truncate(ALLEGRO_USTR *us, int start_pos)
      \n

      Source\n Code

      \n

      Truncate a portion of a string from byte offset\n start_pos onwards. start_pos can be past the\n end of the string (has no effect) but cannot be less than 0.

      \n

      Returns true on success, false on error.

      \n

      See also: al_ustr_remove_range, al_ustr_ltrim_ws, al_ustr_rtrim_ws, al_ustr_trim_ws

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_ltrim_ws

      \n
      bool al_ustr_ltrim_ws(ALLEGRO_USTR *us)
      \n

      Source\n Code

      \n

      Remove leading whitespace characters from a string, as defined by the\n C function isspace().

      \n

      Returns true on success, or false on error.

      \n

      See also: al_ustr_rtrim_ws,\n al_ustr_trim_ws

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_rtrim_ws

      \n
      bool al_ustr_rtrim_ws(ALLEGRO_USTR *us)
      \n

      Source\n Code

      \n

      Remove trailing (\u201cright\u201d) whitespace characters from a string, as\n defined by the C function isspace().

      \n

      Returns true on success, or false on error.

      \n

      See also: al_ustr_ltrim_ws,\n al_ustr_trim_ws

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_trim_ws

      \n
      bool al_ustr_trim_ws(ALLEGRO_USTR *us)
      \n

      Source\n Code

      \n

      Remove both leading and trailing whitespace characters from a\n string.

      \n

      Returns true on success, or false on error.

      \n

      See also: al_ustr_ltrim_ws,\n al_ustr_rtrim_ws

      \n-

      Examples:

      \n-
        \n-
      • ex_loading_thread.c
      • \n-
      • ex_utf8.c
      • \n-
      \n

      Assigning one string to\n another

      \n

      al_ustr_assign

      \n
      bool al_ustr_assign(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
      \n

      Source\n Code

      \n

      Overwrite the string us1 with another string\n us2. Returns true on success, false on error.

      \n

      See also: al_ustr_assign_substr, al_ustr_assign_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_assign_substr

      \n
      bool al_ustr_assign_substr(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2,\n    int start_pos, int end_pos)
      \n

      Source\n Code

      \n

      Overwrite the string us1 with the contents of\n@@ -1198,35 +946,25 @@\n us2.

      \n

      Usually you will first have to use al_ustr_offset to find the byte\n offsets.

      \n

      Returns true on success, false on error.

      \n

      See also: al_ustr_assign, al_ustr_assign_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_assign_cstr

      \n
      bool al_ustr_assign_cstr(ALLEGRO_USTR *us1, const char *s)
      \n

      Source\n Code

      \n

      Overwrite the string us1 with the contents of the\n C-style string s. Returns true on success, false on\n error.

      \n

      See also: al_ustr_assign_substr, al_ustr_assign_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      Replacing parts of string

      \n

      al_ustr_set_chr

      \n
      size_t al_ustr_set_chr(ALLEGRO_USTR *us, int start_pos, int32_t c)
      \n

      Source\n Code

      \n

      Replace the code point beginning at byte offset\n@@ -1236,21 +974,14 @@\n start_pos will be padded with NUL ('\\0')\n bytes. If start_pos is not the start of a valid code point,\n that is an error and the string will be unmodified.

      \n

      On success, returns the number of bytes written, i.e.\u00a0the offset to\n the following code point. On error, returns 0.

      \n

      See also: al_ustr_replace_range

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      • ex_logo.c
      • \n-
      \n

      al_ustr_replace_range

      \n
      bool al_ustr_replace_range(ALLEGRO_USTR *us1, int start_pos1, int end_pos1,\n    const ALLEGRO_USTR *us2)
      \n

      Source\n Code

      \n

      Replace the part of us1 in the byte interval\n@@ -1259,85 +990,60 @@\n start_pos1 is past the end of us1 then the\n space between the end of the string and start_pos1 will be\n padded with NUL ('\\0') bytes.

      \n

      Use al_ustr_offset to find the\n byte offsets.

      \n

      Returns true on success, false on error.

      \n

      See also: al_ustr_set_chr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      Searching

      \n

      al_ustr_find_chr

      \n
      int al_ustr_find_chr(const ALLEGRO_USTR *us, int start_pos, int32_t c)
      \n

      Source\n Code

      \n

      Search for the encoding of code point c in\n us from byte offset start_pos (inclusive).

      \n

      Returns the position where it is found or -1 if it is not found.

      \n

      See also: al_ustr_rfind_chr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_rfind_chr

      \n
      int al_ustr_rfind_chr(const ALLEGRO_USTR *us, int end_pos, int32_t c)
      \n

      Source\n Code

      \n

      Search for the encoding of code point c in\n us backwards from byte offset end_pos\n (exclusive). Returns the position where it is found or -1 if it is not\n found.

      \n

      See also: al_ustr_find_chr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_find_set

      \n
      int al_ustr_find_set(const ALLEGRO_USTR *us, int start_pos,\n    const ALLEGRO_USTR *accept)
      \n

      Source\n Code

      \n

      This function finds the first code point in us,\n beginning from byte offset start_pos, that matches any code\n point in accept. Returns the position if a code point was\n found. Otherwise returns -1.

      \n

      See also: al_ustr_find_set_cstr, al_ustr_find_cset

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_find_set_cstr

      \n
      int al_ustr_find_set_cstr(const ALLEGRO_USTR *us, int start_pos,\n    const char *accept)
      \n

      Source\n Code

      \n

      Like al_ustr_find_set but\n takes a C-style string for accept.

      \n

      See also: al_ustr_find_set,\n al_ustr_find_cset_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_find_cset

      \n
      int al_ustr_find_cset(const ALLEGRO_USTR *us, int start_pos,\n    const ALLEGRO_USTR *reject)
      \n

      Source\n Code

      \n

      This function finds the first code point in us,\n@@ -1345,275 +1051,186 @@\n not match any code point in reject. In other words\n it finds a code point in the complementary set of reject.\n Returns the byte position of that code point, if any. Otherwise returns\n -1.

      \n

      See also: al_ustr_find_cset_cstr, al_ustr_find_set

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_find_cset_cstr

      \n
      int al_ustr_find_cset_cstr(const ALLEGRO_USTR *us, int start_pos,\n    const char *reject)
      \n

      Source\n Code

      \n

      Like al_ustr_find_cset but\n takes a C-style string for reject.

      \n

      See also: al_ustr_find_cset, al_ustr_find_set_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_find_str

      \n
      int al_ustr_find_str(const ALLEGRO_USTR *haystack, int start_pos,\n    const ALLEGRO_USTR *needle)
      \n

      Source\n Code

      \n

      Find the first occurrence of string needle in\n haystack, beginning from byte offset start_pos\n (inclusive). Return the byte offset of the occurrence if it is found,\n otherwise return -1.

      \n

      See also: al_ustr_find_cstr, al_ustr_rfind_str, al_ustr_find_replace

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_find_cstr

      \n
      int al_ustr_find_cstr(const ALLEGRO_USTR *haystack, int start_pos,\n    const char *needle)
      \n

      Source\n Code

      \n

      Like al_ustr_find_str but\n takes a C-style string for needle.

      \n

      See also: al_ustr_find_str,\n al_ustr_rfind_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_rfind_str

      \n
      int al_ustr_rfind_str(const ALLEGRO_USTR *haystack, int end_pos,\n    const ALLEGRO_USTR *needle)
      \n

      Source\n Code

      \n

      Find the last occurrence of string needle in\n haystack before byte offset end_pos\n (exclusive). Return the byte offset of the occurrence if it is found,\n otherwise return -1.

      \n

      See also: al_ustr_rfind_cstr, al_ustr_find_str

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_rfind_cstr

      \n
      int al_ustr_rfind_cstr(const ALLEGRO_USTR *haystack, int end_pos,\n    const char *needle)
      \n

      Source\n Code

      \n

      Like al_ustr_rfind_str but\n takes a C-style string for needle.

      \n

      See also: al_ustr_rfind_str, al_ustr_find_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_find_replace

      \n
      bool al_ustr_find_replace(ALLEGRO_USTR *us, int start_pos,\n    const ALLEGRO_USTR *find, const ALLEGRO_USTR *replace)
      \n

      Source\n Code

      \n

      Replace all occurrences of find in us with\n replace, beginning at byte offset start_pos.\n The find string must be non-empty. Returns true on success,\n false on error.

      \n

      See also: al_ustr_find_replace_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_loading_thread.c
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_find_replace_cstr

      \n
      bool al_ustr_find_replace_cstr(ALLEGRO_USTR *us, int start_pos,\n    const char *find, const char *replace)
      \n

      Source\n Code

      \n

      Like al_ustr_find_replace but takes\n C-style strings for find and replace.

      \n-

      Examples:

      \n-
        \n-
      • ex_loading_thread.c
      • \n-
      • ex_utf8.c
      • \n-
      \n

      Comparing

      \n

      al_ustr_equal

      \n
      bool al_ustr_equal(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
      \n

      Source\n Code

      \n

      Return true iff the two strings are equal. This function is more\n efficient than al_ustr_compare\n so is preferable if ordering is not important.

      \n

      See also: al_ustr_compare

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_compare

      \n
      int al_ustr_compare(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
      \n

      Source\n Code

      \n

      This function compares us1 and us2 by code\n point values. Returns zero if the strings are equal, a positive number\n if us1 comes after us2, else a negative\n number.

      \n

      This does not take into account locale-specific sorting\n rules. For that you will need to use another library.

      \n

      See also: al_ustr_ncompare,\n al_ustr_equal

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_ncompare

      \n
      int al_ustr_ncompare(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2, int n)
      \n

      Source\n Code

      \n

      Like al_ustr_compare but only\n compares up to the first n code points of both strings.

      \n

      Returns zero if the strings are equal, a positive number if\n us1 comes after us2, else a negative\n number.

      \n

      See also: al_ustr_compare, al_ustr_equal

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_has_prefix

      \n
      bool al_ustr_has_prefix(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
      \n

      Source\n Code

      \n

      Returns true iff us1 begins with us2.

      \n

      See also: al_ustr_has_prefix_cstr, al_ustr_has_suffix

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_has_prefix_cstr

      \n
      bool al_ustr_has_prefix_cstr(const ALLEGRO_USTR *us1, const char *s2)
      \n

      Source\n Code

      \n

      Returns true iff us1 begins with s2.

      \n

      See also: al_ustr_has_prefix, al_ustr_has_suffix_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_has_suffix

      \n
      bool al_ustr_has_suffix(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
      \n

      Source\n Code

      \n

      Returns true iff us1 ends with us2.

      \n

      See also: al_ustr_has_suffix_cstr, al_ustr_has_prefix

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_has_suffix_cstr

      \n
      bool al_ustr_has_suffix_cstr(const ALLEGRO_USTR *us1, const char *s2)
      \n

      Source\n Code

      \n

      Returns true iff us1 ends with s2.

      \n

      See also: al_ustr_has_suffix, al_ustr_has_prefix_cstr

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      UTF-16 conversion

      \n

      al_ustr_new_from_utf16

      \n
      ALLEGRO_USTR *al_ustr_new_from_utf16(uint16_t const *s)
      \n

      Source\n Code

      \n

      Create a new string containing a copy of the 0-terminated string\n s which must be encoded as UTF-16. The string must\n eventually be freed with al_ustr_free.

      \n

      See also: al_ustr_new

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_size_utf16

      \n
      size_t al_ustr_size_utf16(const ALLEGRO_USTR *us)
      \n

      Source\n Code

      \n

      Returns the number of bytes required to encode the string in UTF-16\n (including the terminating 0). Usually called before al_ustr_encode_utf16 to\n determine the size of the buffer to allocate.

      \n

      See also: al_ustr_size

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      al_ustr_encode_utf16

      \n
      size_t al_ustr_encode_utf16(const ALLEGRO_USTR *us, uint16_t *s,\n    size_t n)
      \n

      Source\n Code

      \n

      Encode the string into the given buffer, in UTF-16. Returns the\n@@ -1621,56 +1238,37 @@\n written. The minimum size to encode the complete string can be queried\n with al_ustr_size_utf16. If\n the n parameter is smaller than that, the string will be\n truncated but still always 0 terminated.

      \n

      See also: al_ustr_size_utf16, al_utf16_encode

      \n-

      Examples:

      \n-
        \n-
      • ex_utf8.c
      • \n-
      \n

      Low-level UTF-8 routines

      \n

      al_utf8_width

      \n
      size_t al_utf8_width(int32_t c)
      \n

      Source\n Code

      \n

      Returns the number of bytes that would be occupied by the specified\n code point when encoded in UTF-8. This is between 1 and 4 bytes for\n legal code point values. Otherwise returns 0.

      \n

      See also: al_utf8_encode, al_utf16_width

      \n-

      Examples:

      \n-
        \n-
      • nihgui.cpp
      • \n-
      • ex_utf8.c
      • \n-
      \n

      al_utf8_encode

      \n
      size_t al_utf8_encode(char s[], int32_t c)
      \n

      Source\n Code

      \n

      Encode the specified code point to UTF-8 into the buffer\n s. The buffer must have enough space to hold the encoding,\n which takes between 1 and 4 bytes. This routine will refuse to encode\n code points above 0x10FFFF.

      \n

      Returns the number of bytes written, which is the same as that\n returned by al_utf8_width.

      \n

      See also: al_utf16_encode

      \n-

      Examples:

      \n-
        \n-
      • ex_keyboard_events.c
      • \n-
      • ex_utf8.c
      • \n-
      \n

      Low-level UTF-16 routines

      \n

      al_utf16_width

      \n
      size_t al_utf16_width(int c)
      \n

      Source\n Code

      \n

      Returns the number of bytes that would be occupied by the specified\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -194,48 +194,34 @@\n *\b**\b**\b**\b**\b**\b* U\bUT\bTF\bF-\b-8\b8 s\bst\btr\bri\bin\bng\bg t\bty\byp\bpe\bes\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_U\bUS\bST\bTR\bR *\b**\b**\b**\b**\b*\n typedef struct _al_tagbstring ALLEGRO_USTR;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n An opaque type representing a string. ALLEGRO_USTRs normally contain UTF-\n 8 encoded strings, but they may be used to hold any byte sequences, including\n NULs.\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b._\bc\n *\b**\b**\b**\b**\b* A\bAL\bLL\bLE\bEG\bGR\bRO\bO_\b_U\bUS\bST\bTR\bR_\b_I\bIN\bNF\bFO\bO *\b**\b**\b**\b**\b*\n typedef struct _al_tagbstring ALLEGRO_USTR_INFO;\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n A type that holds additional information for an _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bU_\bS_\bT_\bR that references an\n external memory buffer.\n See also: _\ba_\bl_\b__\br_\be_\bf_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\br_\be_\bf_\b__\bb_\bu_\bf_\bf_\be_\br and _\ba_\bl_\b__\br_\be_\bf_\b__\bu_\bs_\bt_\br.\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b._\bc\n *\b**\b**\b**\b**\b**\b* C\bCr\bre\bea\bat\bti\bin\bng\bg a\ban\bnd\bd d\bde\bes\bst\btr\bro\boy\byi\bin\bng\bg s\bst\btr\bri\bin\bng\bgs\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_n\bne\bew\bw *\b**\b**\b**\b**\b*\n ALLEGRO_USTR *al_ustr_new(const char *s)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a new string containing a copy of the C-style string s. The string must\n eventually be freed with _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\br_\be_\be.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw_\b__\bf_\br_\bo_\bm_\b__\bb_\bu_\bf_\bf_\be_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw_\bf, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bd_\bu_\bp,\n _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw_\b__\bf_\br_\bo_\bm_\b__\bu_\bt_\bf_\b1_\b6\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_n\bne\bew\bw_\b_f\bfr\bro\bom\bm_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n ALLEGRO_USTR *al_ustr_new_from_buffer(const char *s, size_t size)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a new string containing a copy of the buffer pointed to by s of the\n given size in bytes. The string must eventually be freed with _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\br_\be_\be.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_n\bne\bew\bwf\bf *\b**\b**\b**\b**\b*\n ALLEGRO_USTR *al_ustr_newf(const char *fmt, ...)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a new string using a printf-style format string.\n N\bNo\bot\bte\bes\bs:\b:\n The \u201c%s\u201d specifier takes C string arguments, not ALLEGRO_USTRs. Therefore to\n pass an ALLEGRO_USTR as a parameter you must use _\ba_\bl_\b__\bc_\bs_\bt_\br, and it must be NUL\n@@ -243,25 +229,19 @@\n byte onwards will be ignored.\n The \u201c%c\u201d specifier outputs a single byte, not the UTF-8 encoding of a code\n point. Therefore it is only usable for ASCII characters (value <= 127) or if\n you really mean to output byte values from 128\u2013255. To insert the UTF-\n 8 encoding of a code point, encode it into a memory buffer using _\ba_\bl_\b__\bu_\bt_\bf_\b8_\b__\be_\bn_\bc_\bo_\bd_\be\n then use the \u201c%s\u201d specifier. Remember to NUL terminate the buffer.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd_\bf\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfr\bre\bee\be *\b**\b**\b**\b**\b*\n void al_ustr_free(ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Free a previously allocated string. Does nothing if the argument is NULL.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw_\b__\bf_\br_\bo_\bm_\b__\bb_\bu_\bf_\bf_\be_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw_\bf\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n const char *al_cstr(const ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get a char * pointer to the data in a string. This pointer will only be valid\n while the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bU_\bS_\bT_\bR object is not modified and not destroyed. The pointer\n may be passed to functions expecting C-style strings, with the following\n caveats:\n@@ -271,95 +251,74 @@\n terminated. A string which is dynamically allocated will always be NUL\n terminated, but a string which references the middle of another string or\n region of memory will n\bno\bot\bt be NUL terminated.\n * If the ALLEGRO_USTR references another string, the returned C string will\n point into the referenced string. Again, no NUL terminator will be added\n to the referenced string.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bt_\bo_\b__\bb_\bu_\bf_\bf_\be_\br, _\ba_\bl_\b__\bc_\bs_\bt_\br_\b__\bd_\bu_\bp\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_t\bto\bo_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n void al_ustr_to_buffer(const ALLEGRO_USTR *us, char *buffer, int size)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Write the contents of the string into a pre-allocated buffer of the given size\n in bytes. The result will always be NUL terminated, so a maximum of size - 1\n bytes will be copied.\n See also: _\ba_\bl_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bc_\bs_\bt_\br_\b__\bd_\bu_\bp\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcs\bst\btr\br_\b_d\bdu\bup\bp *\b**\b**\b**\b**\b*\n char *al_cstr_dup(const ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a NUL ('\\0') terminated copy of the string. Any embedded NUL bytes will\n still be presented in the returned string. The new string must eventually be\n freed with _\ba_\bl_\b__\bf_\br_\be_\be.\n If an error occurs NULL is returned.\n See also: _\ba_\bl_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bt_\bo_\b__\bb_\bu_\bf_\bf_\be_\br, _\ba_\bl_\b__\bf_\br_\be_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_d\bdu\bup\bp *\b**\b**\b**\b**\b*\n ALLEGRO_USTR *al_ustr_dup(const ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return a duplicate copy of a string. The new string will need to be freed with\n _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\br_\be_\be.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bd_\bu_\bp_\b__\bs_\bu_\bb_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\br_\be_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_d\bdu\bup\bp_\b_s\bsu\bub\bbs\bst\btr\br *\b**\b**\b**\b**\b*\n ALLEGRO_USTR *al_ustr_dup_substr(const ALLEGRO_USTR *us, int start_pos,\n int end_pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return a new copy of a string, containing its contents in the byte interval\n [start_pos, end_pos). The new string will be NUL terminated and will need to be\n freed with _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\br_\be_\be.\n If necessary, use _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bo_\bf_\bf_\bs_\be_\bt to find the byte offsets for a given code\n point that you are interested in.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bd_\bu_\bp, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\br_\be_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* P\bPr\bre\bed\bde\bef\bfi\bin\bne\bed\bd s\bst\btr\bri\bin\bng\bgs\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_e\bem\bmp\bpt\bty\by_\b_s\bst\btr\bri\bin\bng\bg *\b**\b**\b**\b**\b*\n const ALLEGRO_USTR *al_ustr_empty_string(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return a pointer to a static empty string. The string is read only and must not\n be freed.\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* C\bCr\bre\bea\bat\bti\bin\bng\bg s\bst\btr\bri\bin\bng\bgs\bs b\bby\by r\bre\bef\bfe\ber\bre\ben\bnc\bci\bin\bng\bg o\bot\bth\bhe\ber\br d\bda\bat\bta\ba *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bef\bf_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n const ALLEGRO_USTR *al_ref_cstr(ALLEGRO_USTR_INFO *info, const char *s)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a string that references the storage of a C-style string. The\n information about the string (e.g.\u00a0its size) is stored in the structure pointed\n to by the info parameter. The string will not have any other storage allocated\n of its own, so if you allocate the info structure on the stack then no explicit\n \u201cfree\u201d operation is required.\n The string is valid until the underlying C string disappears.\n Example:\n ALLEGRO_USTR_INFO info;\n ALLEGRO_USTR *us = al_ref_cstr(&info, \"my string\");\n See also: _\ba_\bl_\b__\br_\be_\bf_\b__\bb_\bu_\bf_\bf_\be_\br, _\ba_\bl_\b__\br_\be_\bf_\b__\bu_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bef\bf_\b_b\bbu\buf\bff\bfe\ber\br *\b**\b**\b**\b**\b*\n const ALLEGRO_USTR *al_ref_buffer(ALLEGRO_USTR_INFO *info, const char *s,\n size_t size)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a string that references the storage of an underlying buffer. The size\n of the buffer is given in bytes. You can use it to reference only part of a\n string or an arbitrary region of memory.\n The string is valid while the underlying memory buffer is valid.\n See also: _\ba_\bl_\b__\br_\be_\bf_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\br_\be_\bf_\b__\bu_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bf_\bo_\bn_\bt_\b__\bm_\bu_\bl_\bt_\bi_\bl_\bi_\bn_\be_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_r\bre\bef\bf_\b_u\bus\bst\btr\br *\b**\b**\b**\b**\b*\n const ALLEGRO_USTR *al_ref_ustr(ALLEGRO_USTR_INFO *info, const ALLEGRO_USTR\n *us,\n int start_pos, int end_pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a read-only string that references the storage of another _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bU_\bS_\bT_\bR\n string. The information about the string (e.g.\u00a0its size) is stored in the\n@@ -367,540 +326,413 @@\n other storage allocated of its own, so if you allocate the info structure on\n the stack then no explicit \u201cfree\u201d operation is required.\n The referenced interval is [start_pos, end_pos). Both are byte offsets.\n The string is valid until the underlying string is modified or destroyed.\n If you need a range of code-points instead of bytes, use _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bo_\bf_\bf_\bs_\be_\bt to find\n the byte offsets.\n See also: _\ba_\bl_\b__\br_\be_\bf_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\br_\be_\bf_\b__\bb_\bu_\bf_\bf_\be_\br\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* S\bSi\biz\bze\bes\bs a\ban\bnd\bd o\bof\bff\bfs\bse\bet\bts\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_s\bsi\biz\bze\be *\b**\b**\b**\b**\b*\n size_t al_ustr_size(const ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the size of the string in bytes. This is equal to the number of code\n points in the string if the string is empty or contains only 7-bit ASCII\n characters.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bl_\be_\bn_\bg_\bt_\bh\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_l\ble\ben\bng\bgt\bth\bh *\b**\b**\b**\b**\b*\n size_t al_ustr_length(const ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the number of code points in the string.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bs_\bi_\bz_\be, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bo_\bf_\bf_\bs_\be_\bt\n-Examples:\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_o\bof\bff\bfs\bse\bet\bt *\b**\b**\b**\b**\b*\n int al_ustr_offset(const ALLEGRO_USTR *us, int index)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the byte offset (from the start of the string) of the code point at the\n specified index in the string. A zero index parameter will return the first\n character of the string. If index is negative, it counts backward from the end\n of the string, so an index of -1 will return an offset to the last code point.\n If the index is past the end of the string, returns the offset of the end of\n the string.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bl_\be_\bn_\bg_\bt_\bh\n-Examples:\n- * _\be_\bx_\b__\bb_\bl_\be_\bn_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_n\bne\bex\bxt\bt *\b**\b**\b**\b**\b*\n bool al_ustr_next(const ALLEGRO_USTR *us, int *pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Find the byte offset of the next code point in string, beginning at *pos. *pos\n does not have to be at the beginning of a code point.\n Returns true on success, and the value pointed to by pos will be updated to the\n found offset. Otherwise returns false if *pos was already at the end of the\n string, and *pos is unmodified.\n This function just looks for an appropriate byte; it doesn\u2019t check if found\n offset is the beginning of a valid code point. If you are working with possibly\n invalid UTF-8 strings then it could skip over some invalid bytes.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bp_\br_\be_\bv\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_p\bpr\bre\bev\bv *\b**\b**\b**\b**\b*\n bool al_ustr_prev(const ALLEGRO_USTR *us, int *pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Find the byte offset of the previous code point in string, before *pos. *pos\n does not have to be at the beginning of a code point. Returns true on success,\n and the value pointed to by pos will be updated to the found offset. Otherwise\n returns false if *pos was already at the end of the string, and *pos is\n unmodified.\n This function just looks for an appropriate byte; it doesn\u2019t check if found\n offset is the beginning of a valid code point. If you are working with possibly\n invalid UTF-8 strings then it could skip over some invalid bytes.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bx_\bt\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\bg_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* G\bGe\bet\btt\bti\bin\bng\bg c\bco\bod\bde\be p\bpo\boi\bin\bnt\bts\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_g\bge\bet\bt *\b**\b**\b**\b**\b*\n int32_t al_ustr_get(const ALLEGRO_USTR *ub, int pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return the code point in ub beginning at byte offset pos.\n On success returns the code point value. If pos was out of bounds (e.g.\u00a0past\n the end of the string), return -1. On an error, such as an invalid byte\n sequence, return -2.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bg_\be_\bt_\b__\bn_\be_\bx_\bt, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bp_\br_\be_\bv_\b__\bg_\be_\bt\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n- * _\be_\bx_\b__\bt_\bt_\bf_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_g\bge\bet\bt_\b_n\bne\bex\bxt\bt *\b**\b**\b**\b**\b*\n int32_t al_ustr_get_next(const ALLEGRO_USTR *us, int *pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Find the code point in us beginning at byte offset *pos, then advance to the\n next code point.\n On success return the code point value. If pos was out of bounds (e.g.\u00a0past the\n end of the string), return -1. On an error, such as an invalid byte sequence,\n return -2. As with _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bx_\bt, invalid byte sequences may be skipped while\n advancing.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bg_\be_\bt, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bp_\br_\be_\bv_\b__\bg_\be_\bt\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_p\bpr\bre\bev\bv_\b_g\bge\bet\bt *\b**\b**\b**\b**\b*\n int32_t al_ustr_prev_get(const ALLEGRO_USTR *us, int *pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Find the beginning of a code point before byte offset *pos, then return it.\n Note this performs a p\bpr\bre\be-\b-i\bin\bnc\bcr\bre\bem\bme\ben\bnt\bt.\n On success returns the code point value. If pos was out of bounds (e.g.\u00a0past\n the end of the string), return -1. On an error, such as an invalid byte\n sequence, return -2. As with _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bp_\br_\be_\bv, invalid byte sequences may be\n skipped while advancing.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bg_\be_\bt_\b__\bn_\be_\bx_\bt\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* I\bIn\bns\bse\ber\brt\bti\bin\bng\bg i\bin\bnt\bto\bo s\bst\btr\bri\bin\bng\bgs\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_i\bin\bns\bse\ber\brt\bt *\b**\b**\b**\b**\b*\n bool al_ustr_insert(ALLEGRO_USTR *us1, int pos, const ALLEGRO_USTR *us2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Insert us2 into us1 beginning at byte offset pos. pos cannot be less than 0. If\n pos is past the end of us1 then the space between the end of the string and pos\n will be padded with NUL ('\\0') bytes.\n If required, use _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bo_\bf_\bf_\bs_\be_\bt to find the byte offset for a given code point\n index.\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bc_\bh_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd,\n _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bo_\bf_\bf_\bs_\be_\bt\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_i\bin\bns\bse\ber\brt\bt_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n bool al_ustr_insert_cstr(ALLEGRO_USTR *us, int pos, const char *s)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bi_\bn_\bs_\be_\br_\bt but inserts a C-style string at byte offset pos.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bi_\bn_\bs_\be_\br_\bt, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bc_\bh_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_i\bin\bns\bse\ber\brt\bt_\b_c\bch\bhr\br *\b**\b**\b**\b**\b*\n size_t al_ustr_insert_chr(ALLEGRO_USTR *us, int pos, int32_t c)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Insert a code point into us beginning at byte offset pos. pos cannot be less\n than 0. If pos is past the end of us then the space between the end of the\n string and pos will be padded with NUL ('\\0') bytes.\n Returns the number of bytes inserted, or 0 on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bi_\bn_\bs_\be_\br_\bt, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bi_\bn_\bs_\be_\br_\bt_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAp\bpp\bpe\ben\bnd\bdi\bin\bng\bg t\bto\bo s\bst\btr\bri\bin\bng\bgs\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_a\bap\bpp\bpe\ben\bnd\bd *\b**\b**\b**\b**\b*\n bool al_ustr_append(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Append us2 to the end of us1.\n Returns true on success, false on error.\n This function can be used to append an arbitrary buffer:\n ALLEGRO_USTR_INFO info;\n al_ustr_append(us, al_ref_buffer(&info, buf, size));\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd_\b__\bc_\bh_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd_\bf,\n _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bv_\ba_\bp_\bp_\be_\bn_\bd_\bf\n-Examples:\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_a\bap\bpp\bpe\ben\bnd\bd_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n bool al_ustr_append_cstr(ALLEGRO_USTR *us, const char *s)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Append C-style string s to the end of us.\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd\n-Examples:\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_a\bap\bpp\bpe\ben\bnd\bd_\b_c\bch\bhr\br *\b**\b**\b**\b**\b*\n size_t al_ustr_append_chr(ALLEGRO_USTR *us, int32_t c)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Append a code point to the end of us.\n Returns the number of bytes added, or 0 on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_a\bap\bpp\bpe\ben\bnd\bdf\bf *\b**\b**\b**\b**\b*\n bool al_ustr_appendf(ALLEGRO_USTR *us, const char *fmt, ...)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function appends formatted output to the string us. fmt is a printf-style\n format string. See _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw_\bf about the \u201c%s\u201d and \u201c%c\u201d specifiers.\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bv_\ba_\bp_\bp_\be_\bn_\bd_\bf, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_v\bva\bap\bpp\bpe\ben\bnd\bdf\bf *\b**\b**\b**\b**\b*\n bool al_ustr_vappendf(ALLEGRO_USTR *us, const char *fmt, va_list ap)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd_\bf but you pass the variable argument list directly, instead\n of the arguments themselves. See _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw_\bf about the \u201c%s\u201d and \u201c%c\u201d\n specifiers.\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd_\bf, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bp_\bp_\be_\bn_\bd\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* R\bRe\bem\bmo\bov\bvi\bin\bng\bg p\bpa\bar\brt\bts\bs o\bof\bf s\bst\btr\bri\bin\bng\bgs\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_r\bre\bem\bmo\bov\bve\be_\b_c\bch\bhr\br *\b**\b**\b**\b**\b*\n bool al_ustr_remove_chr(ALLEGRO_USTR *us, int pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Remove the code point beginning at byte offset pos. Returns true on success. If\n pos is out of range or pos is not the beginning of a valid code point, returns\n false leaving the string unmodified.\n Use _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bo_\bf_\bf_\bs_\be_\bt to find the byte offset for a code-points offset.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\be_\bm_\bo_\bv_\be_\b__\br_\ba_\bn_\bg_\be\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\bg_\bo_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_r\bre\bem\bmo\bov\bve\be_\b_r\bra\ban\bng\bge\be *\b**\b**\b**\b**\b*\n bool al_ustr_remove_range(ALLEGRO_USTR *us, int start_pos, int end_pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Remove the interval [start_pos, end_pos) from a string. start_pos and end_pos\n are byte offsets. Both may be past the end of the string but cannot be less\n than 0 (the start of the string).\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\be_\bm_\bo_\bv_\be_\b__\bc_\bh_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bt_\br_\bu_\bn_\bc_\ba_\bt_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_t\btr\bru\bun\bnc\bca\bat\bte\be *\b**\b**\b**\b**\b*\n bool al_ustr_truncate(ALLEGRO_USTR *us, int start_pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Truncate a portion of a string from byte offset start_pos onwards. start_pos\n can be past the end of the string (has no effect) but cannot be less than 0.\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\be_\bm_\bo_\bv_\be_\b__\br_\ba_\bn_\bg_\be, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bl_\bt_\br_\bi_\bm_\b__\bw_\bs, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bt_\br_\bi_\bm_\b__\bw_\bs,\n _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bt_\br_\bi_\bm_\b__\bw_\bs\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_l\blt\btr\bri\bim\bm_\b_w\bws\bs *\b**\b**\b**\b**\b*\n bool al_ustr_ltrim_ws(ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Remove leading whitespace characters from a string, as defined by the C\n function isspace().\n Returns true on success, or false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bt_\br_\bi_\bm_\b__\bw_\bs, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bt_\br_\bi_\bm_\b__\bw_\bs\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_r\brt\btr\bri\bim\bm_\b_w\bws\bs *\b**\b**\b**\b**\b*\n bool al_ustr_rtrim_ws(ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Remove trailing (\u201cright\u201d) whitespace characters from a string, as defined by\n the C function isspace().\n Returns true on success, or false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bl_\bt_\br_\bi_\bm_\b__\bw_\bs, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bt_\br_\bi_\bm_\b__\bw_\bs\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_t\btr\bri\bim\bm_\b_w\bws\bs *\b**\b**\b**\b**\b*\n bool al_ustr_trim_ws(ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Remove both leading and trailing whitespace characters from a string.\n Returns true on success, or false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bl_\bt_\br_\bi_\bm_\b__\bw_\bs, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bt_\br_\bi_\bm_\b__\bw_\bs\n-Examples:\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* A\bAs\bss\bsi\big\bgn\bni\bin\bng\bg o\bon\bne\be s\bst\btr\bri\bin\bng\bg t\bto\bo a\ban\bno\bot\bth\bhe\ber\br *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_a\bas\bss\bsi\big\bgn\bn *\b**\b**\b**\b**\b*\n bool al_ustr_assign(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Overwrite the string us1 with another string us2. Returns true on success,\n false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn_\b__\bs_\bu_\bb_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_a\bas\bss\bsi\big\bgn\bn_\b_s\bsu\bub\bbs\bst\btr\br *\b**\b**\b**\b**\b*\n bool al_ustr_assign_substr(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2,\n int start_pos, int end_pos)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Overwrite the string us1 with the contents of us2 in the byte interval\n [start_pos, end_pos). The end points will be clamped to the bounds of us2.\n Usually you will first have to use _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bo_\bf_\bf_\bs_\be_\bt to find the byte offsets.\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_a\bas\bss\bsi\big\bgn\bn_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n bool al_ustr_assign_cstr(ALLEGRO_USTR *us1, const char *s)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Overwrite the string us1 with the contents of the C-style string s. Returns\n true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn_\b__\bs_\bu_\bb_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* R\bRe\bep\bpl\bla\bac\bci\bin\bng\bg p\bpa\bar\brt\bts\bs o\bof\bf s\bst\btr\bri\bin\bng\bg *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_s\bse\bet\bt_\b_c\bch\bhr\br *\b**\b**\b**\b**\b*\n size_t al_ustr_set_chr(ALLEGRO_USTR *us, int start_pos, int32_t c)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Replace the code point beginning at byte offset start_pos with c. start_pos\n cannot be less than 0. If start_pos is past the end of us then the space\n between the end of the string and start_pos will be padded with NUL ('\\0')\n bytes. If start_pos is not the start of a valid code point, that is an error\n and the string will be unmodified.\n On success, returns the number of bytes written, i.e.\u00a0the offset to the\n following code point. On error, returns 0.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\be_\bp_\bl_\ba_\bc_\be_\b__\br_\ba_\bn_\bg_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n- * _\be_\bx_\b__\bl_\bo_\bg_\bo_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_r\bre\bep\bpl\bla\bac\bce\be_\b_r\bra\ban\bng\bge\be *\b**\b**\b**\b**\b*\n bool al_ustr_replace_range(ALLEGRO_USTR *us1, int start_pos1, int end_pos1,\n const ALLEGRO_USTR *us2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Replace the part of us1 in the byte interval [start_pos1, end_pos1) with the\n contents of us2. start_pos1 cannot be less than 0. If start_pos1 is past the\n end of us1 then the space between the end of the string and start_pos1 will be\n padded with NUL ('\\0') bytes.\n Use _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bo_\bf_\bf_\bs_\be_\bt to find the byte offsets.\n Returns true on success, false on error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bs_\be_\bt_\b__\bc_\bh_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* S\bSe\bea\bar\brc\bch\bhi\bin\bng\bg *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_c\bch\bhr\br *\b**\b**\b**\b**\b*\n int al_ustr_find_chr(const ALLEGRO_USTR *us, int start_pos, int32_t c)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Search for the encoding of code point c in us from byte offset start_pos\n (inclusive).\n Returns the position where it is found or -1 if it is not found.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bf_\bi_\bn_\bd_\b__\bc_\bh_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_r\brf\bfi\bin\bnd\bd_\b_c\bch\bhr\br *\b**\b**\b**\b**\b*\n int al_ustr_rfind_chr(const ALLEGRO_USTR *us, int end_pos, int32_t c)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Search for the encoding of code point c in us backwards from byte offset\n end_pos (exclusive). Returns the position where it is found or -1 if it is not\n found.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bc_\bh_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_s\bse\bet\bt *\b**\b**\b**\b**\b*\n int al_ustr_find_set(const ALLEGRO_USTR *us, int start_pos,\n const ALLEGRO_USTR *accept)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function finds the first code point in us, beginning from byte offset\n start_pos, that matches any code point in accept. Returns the position if a\n code point was found. Otherwise returns -1.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bs_\be_\bt_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bc_\bs_\be_\bt\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_s\bse\bet\bt_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n int al_ustr_find_set_cstr(const ALLEGRO_USTR *us, int start_pos,\n const char *accept)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bs_\be_\bt but takes a C-style string for accept.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bs_\be_\bt, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bc_\bs_\be_\bt_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_c\bcs\bse\bet\bt *\b**\b**\b**\b**\b*\n int al_ustr_find_cset(const ALLEGRO_USTR *us, int start_pos,\n const ALLEGRO_USTR *reject)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function finds the first code point in us, beginning from byte offset\n start_pos, that does n\bno\bot\bt match any code point in reject. In other words it\n finds a code point in the complementary set of reject. Returns the byte\n position of that code point, if any. Otherwise returns -1.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bc_\bs_\be_\bt_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bs_\be_\bt\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_c\bcs\bse\bet\bt_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n int al_ustr_find_cset_cstr(const ALLEGRO_USTR *us, int start_pos,\n const char *reject)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bc_\bs_\be_\bt but takes a C-style string for reject.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bc_\bs_\be_\bt, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bs_\be_\bt_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_s\bst\btr\br *\b**\b**\b**\b**\b*\n int al_ustr_find_str(const ALLEGRO_USTR *haystack, int start_pos,\n const ALLEGRO_USTR *needle)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Find the first occurrence of string needle in haystack, beginning from byte\n offset start_pos (inclusive). Return the byte offset of the occurrence if it is\n found, otherwise return -1.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bf_\bi_\bn_\bd_\b__\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\br_\be_\bp_\bl_\ba_\bc_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n int al_ustr_find_cstr(const ALLEGRO_USTR *haystack, int start_pos,\n const char *needle)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bs_\bt_\br but takes a C-style string for needle.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bf_\bi_\bn_\bd_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_r\brf\bfi\bin\bnd\bd_\b_s\bst\btr\br *\b**\b**\b**\b**\b*\n int al_ustr_rfind_str(const ALLEGRO_USTR *haystack, int end_pos,\n const ALLEGRO_USTR *needle)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Find the last occurrence of string needle in haystack before byte offset\n end_pos (exclusive). Return the byte offset of the occurrence if it is found,\n otherwise return -1.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bf_\bi_\bn_\bd_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_r\brf\bfi\bin\bnd\bd_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n int al_ustr_rfind_cstr(const ALLEGRO_USTR *haystack, int end_pos,\n const char *needle)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bf_\bi_\bn_\bd_\b__\bs_\bt_\br but takes a C-style string for needle.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\br_\bf_\bi_\bn_\bd_\b__\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_r\bre\bep\bpl\bla\bac\bce\be *\b**\b**\b**\b**\b*\n bool al_ustr_find_replace(ALLEGRO_USTR *us, int start_pos,\n const ALLEGRO_USTR *find, const ALLEGRO_USTR *replace)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Replace all occurrences of find in us with replace, beginning at byte offset\n start_pos. The find string must be non-empty. Returns true on success, false on\n error.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\br_\be_\bp_\bl_\ba_\bc_\be_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_f\bfi\bin\bnd\bd_\b_r\bre\bep\bpl\bla\bac\bce\be_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n bool al_ustr_find_replace_cstr(ALLEGRO_USTR *us, int start_pos,\n const char *find, const char *replace)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\bi_\bn_\bd_\b__\br_\be_\bp_\bl_\ba_\bc_\be but takes C-style strings for find and replace.\n-Examples:\n- * _\be_\bx_\b__\bl_\bo_\ba_\bd_\bi_\bn_\bg_\b__\bt_\bh_\br_\be_\ba_\bd_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* C\bCo\bom\bmp\bpa\bar\bri\bin\bng\bg *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_e\beq\bqu\bua\bal\bl *\b**\b**\b**\b**\b*\n bool al_ustr_equal(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Return true iff the two strings are equal. This function is more efficient than\n _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bc_\bo_\bm_\bp_\ba_\br_\be so is preferable if ordering is not important.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bc_\bo_\bm_\bp_\ba_\br_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_c\bco\bom\bmp\bpa\bar\bre\be *\b**\b**\b**\b**\b*\n int al_ustr_compare(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This function compares us1 and us2 by code point values. Returns zero if the\n strings are equal, a positive number if us1 comes after us2, else a negative\n number.\n This does n\bno\bot\bt take into account locale-specific sorting rules. For that you\n will need to use another library.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\bc_\bo_\bm_\bp_\ba_\br_\be, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\be_\bq_\bu_\ba_\bl\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_n\bnc\bco\bom\bmp\bpa\bar\bre\be *\b**\b**\b**\b**\b*\n int al_ustr_ncompare(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2, int n)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bc_\bo_\bm_\bp_\ba_\br_\be but only compares up to the first n code points of both\n strings.\n Returns zero if the strings are equal, a positive number if us1 comes after\n us2, else a negative number.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bc_\bo_\bm_\bp_\ba_\br_\be, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\be_\bq_\bu_\ba_\bl\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_h\bha\bas\bs_\b_p\bpr\bre\bef\bfi\bix\bx *\b**\b**\b**\b**\b*\n bool al_ustr_has_prefix(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true iff us1 begins with us2.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bh_\ba_\bs_\b__\bp_\br_\be_\bf_\bi_\bx_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bh_\ba_\bs_\b__\bs_\bu_\bf_\bf_\bi_\bx\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_h\bha\bas\bs_\b_p\bpr\bre\bef\bfi\bix\bx_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n bool al_ustr_has_prefix_cstr(const ALLEGRO_USTR *us1, const char *s2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true iff us1 begins with s2.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bh_\ba_\bs_\b__\bp_\br_\be_\bf_\bi_\bx, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bh_\ba_\bs_\b__\bs_\bu_\bf_\bf_\bi_\bx_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_h\bha\bas\bs_\b_s\bsu\buf\bff\bfi\bix\bx *\b**\b**\b**\b**\b*\n bool al_ustr_has_suffix(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true iff us1 ends with us2.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bh_\ba_\bs_\b__\bs_\bu_\bf_\bf_\bi_\bx_\b__\bc_\bs_\bt_\br, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bh_\ba_\bs_\b__\bp_\br_\be_\bf_\bi_\bx\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_h\bha\bas\bs_\b_s\bsu\buf\bff\bfi\bix\bx_\b_c\bcs\bst\btr\br *\b**\b**\b**\b**\b*\n bool al_ustr_has_suffix_cstr(const ALLEGRO_USTR *us1, const char *s2)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true iff us1 ends with s2.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bh_\ba_\bs_\b__\bs_\bu_\bf_\bf_\bi_\bx, _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bh_\ba_\bs_\b__\bp_\br_\be_\bf_\bi_\bx_\b__\bc_\bs_\bt_\br\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* U\bUT\bTF\bF-\b-1\b16\b6 c\bco\bon\bnv\bve\ber\brs\bsi\bio\bon\bn *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_n\bne\bew\bw_\b_f\bfr\bro\bom\bm_\b_u\but\btf\bf1\b16\b6 *\b**\b**\b**\b**\b*\n ALLEGRO_USTR *al_ustr_new_from_utf16(uint16_t const *s)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Create a new string containing a copy of the 0-terminated string s which must\n be encoded as UTF-16. The string must eventually be freed with _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bf_\br_\be_\be.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bn_\be_\bw\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_s\bsi\biz\bze\be_\b_u\but\btf\bf1\b16\b6 *\b**\b**\b**\b**\b*\n size_t al_ustr_size_utf16(const ALLEGRO_USTR *us)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the number of bytes required to encode the string in UTF-16 (including\n the terminating 0). Usually called before _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\be_\bn_\bc_\bo_\bd_\be_\b__\bu_\bt_\bf_\b1_\b6 to determine the\n size of the buffer to allocate.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bs_\bi_\bz_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\bus\bst\btr\br_\b_e\ben\bnc\bco\bod\bde\be_\b_u\but\btf\bf1\b16\b6 *\b**\b**\b**\b**\b*\n size_t al_ustr_encode_utf16(const ALLEGRO_USTR *us, uint16_t *s,\n size_t n)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Encode the string into the given buffer, in UTF-16. Returns the number of bytes\n written. There are never more than n bytes written. The minimum size to encode\n the complete string can be queried with _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bs_\bi_\bz_\be_\b__\bu_\bt_\bf_\b1_\b6. If the n parameter\n is smaller than that, the string will be truncated but still always 0\n terminated.\n See also: _\ba_\bl_\b__\bu_\bs_\bt_\br_\b__\bs_\bi_\bz_\be_\b__\bu_\bt_\bf_\b1_\b6, _\ba_\bl_\b__\bu_\bt_\bf_\b1_\b6_\b__\be_\bn_\bc_\bo_\bd_\be\n-Examples:\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* L\bLo\bow\bw-\b-l\ble\bev\bve\bel\bl U\bUT\bTF\bF-\b-8\b8 r\bro\bou\but\bti\bin\bne\bes\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\but\btf\bf8\b8_\b_w\bwi\bid\bdt\bth\bh *\b**\b**\b**\b**\b*\n size_t al_utf8_width(int32_t c)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the number of bytes that would be occupied by the specified code point\n when encoded in UTF-8. This is between 1 and 4 bytes for legal code point\n values. Otherwise returns 0.\n See also: _\ba_\bl_\b__\bu_\bt_\bf_\b8_\b__\be_\bn_\bc_\bo_\bd_\be, _\ba_\bl_\b__\bu_\bt_\bf_\b1_\b6_\b__\bw_\bi_\bd_\bt_\bh\n-Examples:\n- * _\bn_\bi_\bh_\bg_\bu_\bi_\b._\bc_\bp_\bp\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\but\btf\bf8\b8_\b_e\ben\bnc\bco\bod\bde\be *\b**\b**\b**\b**\b*\n size_t al_utf8_encode(char s[], int32_t c)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Encode the specified code point to UTF-8 into the buffer s. The buffer must\n have enough space to hold the encoding, which takes between 1 and 4 bytes. This\n routine will refuse to encode code points above 0x10FFFF.\n Returns the number of bytes written, which is the same as that returned by\n _\ba_\bl_\b__\bu_\bt_\bf_\b8_\b__\bw_\bi_\bd_\bt_\bh.\n See also: _\ba_\bl_\b__\bu_\bt_\bf_\b1_\b6_\b__\be_\bn_\bc_\bo_\bd_\be\n-Examples:\n- * _\be_\bx_\b__\bk_\be_\by_\bb_\bo_\ba_\br_\bd_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bc\n- * _\be_\bx_\b__\bu_\bt_\bf_\b8_\b._\bc\n *\b**\b**\b**\b**\b**\b* L\bLo\bow\bw-\b-l\ble\bev\bve\bel\bl U\bUT\bTF\bF-\b-1\b16\b6 r\bro\bou\but\bti\bin\bne\bes\bs *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* a\bal\bl_\b_u\but\btf\bf1\b16\b6_\b_w\bwi\bid\bdt\bth\bh *\b**\b**\b**\b**\b*\n size_t al_utf16_width(int c)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the number of bytes that would be occupied by the specified code point\n when encoded in UTF-16. This is either 2 or 4 bytes for legal code point\n values. Otherwise returns 0.\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/video.html", "source2": "./usr/share/doc/allegro5-doc/refman/video.html", "unified_diff": "@@ -290,19 +290,14 @@\n

      al_init_video_addon

      \n
      bool al_init_video_addon(void)
      \n

      Source\n Code

      \n

      Initializes the video addon.

      \n

      Since: 5.1.12

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n al_is_video_addon_initialized\n
      bool al_is_video_addon_initialized(void)
      \n

      Source\n Code

      \n

      Returns true if the video addon is initialized, otherwise returns\n@@ -328,19 +323,14 @@\n

      ALLEGRO_VIDEO *al_open_video(char const *filename)
      \n

      Source\n Code

      \n

      Reads a video file. This does not start streaming yet but reads the\n meta info so you can query e.g.\u00a0the size or audio rate.

      \n

      Since: 5.1.0

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_identify_video

      \n
      char const *al_identify_video(char const *filename)
      \n

      Source\n Code

      \n

      This works exactly as al_identify_video_f but you\n@@ -372,31 +362,21 @@\n

      void al_close_video(ALLEGRO_VIDEO *video)
      \n

      Source\n Code

      \n

      Closes the video and frees all allocated resources. The video pointer\n is invalid after the function returns.

      \n

      Since: 5.1.0

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_start_video

      \n
      void al_start_video(ALLEGRO_VIDEO *video, ALLEGRO_MIXER *mixer)
      \n

      Source\n Code

      \n

      Starts streaming the video from the beginning.

      \n

      Since: 5.1.0

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_start_video_with_voice

      \n
      void al_start_video_with_voice(ALLEGRO_VIDEO *video, ALLEGRO_VOICE *voice)
      \n

      Source\n Code

      \n

      Like al_start_video but audio\n is routed to the provided voice.

      \n@@ -406,100 +386,65 @@\n

      Source\n Code

      \n

      Get an event source for the video. The possible events are described\n under ALLEGRO_VIDEO_EVENT_TYPE.

      \n

      Since: 5.1.0

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_set_video_playing

      \n
      void al_set_video_playing(ALLEGRO_VIDEO *video, bool play)
      \n

      Source\n Code

      \n

      Paused or resumes playback.

      \n

      Since: 5.1.12

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_is_video_playing

      \n
      bool al_is_video_playing(ALLEGRO_VIDEO *video)
      \n

      Source\n Code

      \n

      Returns true if the video is currently playing.

      \n

      Since: 5.1.12

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_get_video_audio_rate

      \n
      double al_get_video_audio_rate(ALLEGRO_VIDEO *video)
      \n

      Source\n Code

      \n

      Returns the audio rate of the video, in Hz.

      \n

      Since: 5.1.0

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_get_video_fps

      \n
      double al_get_video_fps(ALLEGRO_VIDEO *video)
      \n

      Source\n Code

      \n

      Returns the speed of the video in frames per second. Often this will\n not be an integer value.

      \n

      Since: 5.1.0

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_get_video_scaled_width

      \n
      float al_get_video_scaled_width(ALLEGRO_VIDEO *video)
      \n

      Source\n Code

      \n

      Returns the width with which the video frame should be drawn. Videos\n often do not use square pixels, so this will may return a value larger\n than the width of the frame bitmap.

      \n

      Since: 5.1.12

      \n

      See also: al_get_video_frame

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_get_video_scaled_height

      \n
      float al_get_video_scaled_height(ALLEGRO_VIDEO *video)
      \n

      Source\n Code

      \n

      Returns the height with which the video frame should be drawn. Videos\n often do not use square pixels, so this will may return a value larger\n than the height of the frame bitmap.

      \n

      See also: al_get_video_frame

      \n

      Since: 5.1.12

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_get_video_frame

      \n
      ALLEGRO_BITMAP *al_get_video_frame(ALLEGRO_VIDEO *video)
      \n

      Source\n Code

      \n

      Returns the current video frame. The bitmap is owned by the video so\n do not attempt to free it. The bitmap will stay valid until the next\n@@ -514,47 +459,32 @@\n float dh = scale * al_get_video_scaled_height(video);\n al_draw_scaled_bitmap(frame, 0, 0, sw, sh, 0, 0, dw, dh, 0);\n

      Since: 5.1.0

      \n

      See also: al_get_video_scaled_width,\n al_get_video_scaled_height

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_get_video_position

      \n
      double al_get_video_position(ALLEGRO_VIDEO *video, ALLEGRO_VIDEO_POSITION_TYPE which)
      \n

      Source\n Code

      \n

      Returns the current position of the video stream in seconds since the\n beginning. The parameter is one of the ALLEGRO_VIDEO_POSITION_TYPE\n constants.

      \n

      Since: 5.1.0

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      al_seek_video

      \n
      bool al_seek_video(ALLEGRO_VIDEO *video, double pos_in_seconds)
      \n

      Source\n Code

      \n

      Seek to a different position in the video. Currently only seeking to\n the beginning of the video is supported.

      \n

      Since: 5.1.0

      \n-

      Examples:

      \n-
        \n-
      • ex_video.c
      • \n-
      \n

      \n Allegro version 5.2.9\n - Last updated: 2024-05-03 10:28:35 UTC\n

      \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -109,16 +109,14 @@\n in sync.\n Since: 5.1.11\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bin\bni\bit\bt_\b_v\bvi\bid\bde\beo\bo_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b**\b*\n bool al_init_video_addon(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Initializes the video addon.\n Since: 5.1.12\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_v\bvi\bid\bde\beo\bo_\b_a\bad\bdd\bdo\bon\bn_\b_i\bin\bni\bit\bti\bia\bal\bli\biz\bze\bed\bd *\b**\b**\b**\b**\b**\b*\n bool al_is_video_addon_initialized(void)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if the video addon is initialized, otherwise returns false.\n Since: 5.2.6\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bsh\bhu\but\btd\bdo\bow\bwn\bn_\b_v\bvi\bid\bde\beo\bo_\b_a\bad\bdd\bdo\bon\bn *\b**\b**\b**\b**\b**\b*\n void al_shutdown_video_addon(void)\n@@ -134,16 +132,14 @@\n Since: 5.1.12\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_o\bop\bpe\ben\bn_\b_v\bvi\bid\bde\beo\bo *\b**\b**\b**\b**\b**\b*\n ALLEGRO_VIDEO *al_open_video(char const *filename)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Reads a video file. This does not start streaming yet but reads the meta info\n so you can query e.g.\u00a0the size or audio rate.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bid\bde\ben\bnt\bti\bif\bfy\by_\b_v\bvi\bid\bde\beo\bo *\b**\b**\b**\b**\b**\b*\n char const *al_identify_video(char const *filename)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n This works exactly as _\ba_\bl_\b__\bi_\bd_\be_\bn_\bt_\bi_\bf_\by_\b__\bv_\bi_\bd_\be_\bo_\b__\bf but you specify the filename of the\n file for which to detect the type and not a file handle. The extension, if any,\n of the passed filename is not taken into account - only the file contents.\n Since: 5.2.8\n@@ -161,85 +157,67 @@\n See also: _\ba_\bl_\b__\bi_\bn_\bi_\bt_\b__\bv_\bi_\bd_\be_\bo_\b__\ba_\bd_\bd_\bo_\bn, _\ba_\bl_\b__\bi_\bd_\be_\bn_\bt_\bi_\bf_\by_\b__\bv_\bi_\bd_\be_\bo\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_c\bcl\blo\bos\bse\be_\b_v\bvi\bid\bde\beo\bo *\b**\b**\b**\b**\b**\b*\n void al_close_video(ALLEGRO_VIDEO *video)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Closes the video and frees all allocated resources. The video pointer is\n invalid after the function returns.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bst\bta\bar\brt\bt_\b_v\bvi\bid\bde\beo\bo *\b**\b**\b**\b**\b**\b*\n void al_start_video(ALLEGRO_VIDEO *video, ALLEGRO_MIXER *mixer)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Starts streaming the video from the beginning.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bst\bta\bar\brt\bt_\b_v\bvi\bid\bde\beo\bo_\b_w\bwi\bit\bth\bh_\b_v\bvo\boi\bic\bce\be *\b**\b**\b**\b**\b**\b*\n void al_start_video_with_voice(ALLEGRO_VIDEO *video, ALLEGRO_VOICE *voice)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Like _\ba_\bl_\b__\bs_\bt_\ba_\br_\bt_\b__\bv_\bi_\bd_\be_\bo but audio is routed to the provided voice.\n Since: 5.1.0\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvi\bid\bde\beo\bo_\b_e\bev\bve\ben\bnt\bt_\b_s\bso\bou\bur\brc\bce\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_EVENT_SOURCE *al_get_video_event_source(ALLEGRO_VIDEO *video)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Get an event source for the video. The possible events are described under\n _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bI_\bD_\bE_\bO_\b__\bE_\bV_\bE_\bN_\bT_\b__\bT_\bY_\bP_\bE.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bet\bt_\b_v\bvi\bid\bde\beo\bo_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b**\b*\n void al_set_video_playing(ALLEGRO_VIDEO *video, bool play)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Paused or resumes playback.\n Since: 5.1.12\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_i\bis\bs_\b_v\bvi\bid\bde\beo\bo_\b_p\bpl\bla\bay\byi\bin\bng\bg *\b**\b**\b**\b**\b**\b*\n bool al_is_video_playing(ALLEGRO_VIDEO *video)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns true if the video is currently playing.\n Since: 5.1.12\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvi\bid\bde\beo\bo_\b_a\bau\bud\bdi\bio\bo_\b_r\bra\bat\bte\be *\b**\b**\b**\b**\b**\b*\n double al_get_video_audio_rate(ALLEGRO_VIDEO *video)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the audio rate of the video, in Hz.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvi\bid\bde\beo\bo_\b_f\bfp\bps\bs *\b**\b**\b**\b**\b**\b*\n double al_get_video_fps(ALLEGRO_VIDEO *video)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the speed of the video in frames per second. Often this will not be an\n integer value.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvi\bid\bde\beo\bo_\b_s\bsc\bca\bal\ble\bed\bd_\b_w\bwi\bid\bdt\bth\bh *\b**\b**\b**\b**\b**\b*\n float al_get_video_scaled_width(ALLEGRO_VIDEO *video)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the width with which the video frame should be drawn. Videos often do\n not use square pixels, so this will may return a value larger than the width of\n the frame bitmap.\n Since: 5.1.12\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bv_\bi_\bd_\be_\bo_\b__\bf_\br_\ba_\bm_\be\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvi\bid\bde\beo\bo_\b_s\bsc\bca\bal\ble\bed\bd_\b_h\bhe\bei\big\bgh\bht\bt *\b**\b**\b**\b**\b**\b*\n float al_get_video_scaled_height(ALLEGRO_VIDEO *video)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the height with which the video frame should be drawn. Videos often do\n not use square pixels, so this will may return a value larger than the height\n of the frame bitmap.\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bv_\bi_\bd_\be_\bo_\b__\bf_\br_\ba_\bm_\be\n Since: 5.1.12\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvi\bid\bde\beo\bo_\b_f\bfr\bra\bam\bme\be *\b**\b**\b**\b**\b**\b*\n ALLEGRO_BITMAP *al_get_video_frame(ALLEGRO_VIDEO *video)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the current video frame. The bitmap is owned by the video so do not\n attempt to free it. The bitmap will stay valid until the next call to\n al_get_video_frame.\n Videos often do not use square pixels so the recommended way to draw a video\n@@ -249,27 +227,21 @@\n float sw = al_get_bitmap_width(frame);\n float sh = al_get_bitmap_height(frame);\n float dw = scale * al_get_video_scaled_width(video);\n float dh = scale * al_get_video_scaled_height(video);\n al_draw_scaled_bitmap(frame, 0, 0, sw, sh, 0, 0, dw, dh, 0);\n Since: 5.1.0\n See also: _\ba_\bl_\b__\bg_\be_\bt_\b__\bv_\bi_\bd_\be_\bo_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\bw_\bi_\bd_\bt_\bh, _\ba_\bl_\b__\bg_\be_\bt_\b__\bv_\bi_\bd_\be_\bo_\b__\bs_\bc_\ba_\bl_\be_\bd_\b__\bh_\be_\bi_\bg_\bh_\bt\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_g\bge\bet\bt_\b_v\bvi\bid\bde\beo\bo_\b_p\bpo\bos\bsi\bit\bti\bio\bon\bn *\b**\b**\b**\b**\b**\b*\n double al_get_video_position(ALLEGRO_VIDEO *video, ALLEGRO_VIDEO_POSITION_TYPE\n which)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Returns the current position of the video stream in seconds since the\n beginning. The parameter is one of the _\bA_\bL_\bL_\bE_\bG_\bR_\bO_\b__\bV_\bI_\bD_\bE_\bO_\b__\bP_\bO_\bS_\bI_\bT_\bI_\bO_\bN_\b__\bT_\bY_\bP_\bE constants.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n *\b**\b**\b**\b**\b**\b* a\bal\bl_\b_s\bse\bee\bek\bk_\b_v\bvi\bid\bde\beo\bo *\b**\b**\b**\b**\b**\b*\n bool al_seek_video(ALLEGRO_VIDEO *video, double pos_in_seconds)\n _\bS_\bo_\bu_\br_\bc_\be_\b _\bC_\bo_\bd_\be\n Seek to a different position in the video. Currently only seeking to the\n beginning of the video is supported.\n Since: 5.1.0\n-Examples:\n- * _\be_\bx_\b__\bv_\bi_\bd_\be_\bo_\b._\bc\n Allegro version 5.2.9 - Last updated: 2024-05-03 10:28:35 UTC\n"}]}, {"source1": "./usr/share/man/man3/ALLEGRO_CONFIG.3alleg5.gz", "source2": "./usr/share/man/man3/ALLEGRO_CONFIG.3alleg5.gz", "unified_diff": null, "details": [{"source1": "ALLEGRO_CONFIG.3alleg5", "source2": "ALLEGRO_CONFIG.3alleg5", "unified_diff": "@@ -3,10 +3,12 @@\n .TH \"ALLEGRO_CONFIG\" \"3alleg5\" \"\" \"Allegro reference manual\" \"\"\n .SH NAME\n ALLEGRO_CONFIG \\- Allegro 5 API\n .SH SYNOPSIS\n .IP\n .EX\n #include \n+\n+typedef struct ALLEGRO_CONFIG ALLEGRO_CONFIG;\n .EE\n .SH DESCRIPTION\n An abstract configuration structure.\n"}]}, {"source1": "./usr/share/man/man3/ALLEGRO_CONFIG_ENTRY.3alleg5.gz", "source2": "./usr/share/man/man3/ALLEGRO_CONFIG_ENTRY.3alleg5.gz", "unified_diff": null, "details": [{"source1": "ALLEGRO_CONFIG_ENTRY.3alleg5", "source2": "ALLEGRO_CONFIG_ENTRY.3alleg5", "unified_diff": "@@ -3,13 +3,15 @@\n .TH \"ALLEGRO_CONFIG_ENTRY\" \"3alleg5\" \"\" \"Allegro reference manual\" \"\"\n .SH NAME\n ALLEGRO_CONFIG_ENTRY \\- Allegro 5 API\n .SH SYNOPSIS\n .IP\n .EX\n #include \n+\n+typedef struct ALLEGRO_CONFIG_ENTRY ALLEGRO_CONFIG_ENTRY;\n .EE\n .SH DESCRIPTION\n An opaque structure used for iterating across entries in a configuration\n section.\n .SH SEE ALSO\n al_get_first_config_entry(3alleg5), al_get_next_config_entry(3alleg5)\n"}]}, {"source1": "./usr/share/man/man3/ALLEGRO_CONFIG_SECTION.3alleg5.gz", "source2": "./usr/share/man/man3/ALLEGRO_CONFIG_SECTION.3alleg5.gz", "unified_diff": null, "details": [{"source1": "ALLEGRO_CONFIG_SECTION.3alleg5", "source2": "ALLEGRO_CONFIG_SECTION.3alleg5", "unified_diff": "@@ -3,14 +3,16 @@\n .TH \"ALLEGRO_CONFIG_SECTION\" \"3alleg5\" \"\" \"Allegro reference manual\" \"\"\n .SH NAME\n ALLEGRO_CONFIG_SECTION \\- Allegro 5 API\n .SH SYNOPSIS\n .IP\n .EX\n #include \n+\n+typedef struct ALLEGRO_CONFIG_SECTION ALLEGRO_CONFIG_SECTION;\n .EE\n .SH DESCRIPTION\n An opaque structure used for iterating across sections in a\n configuration structure.\n .SH SEE ALSO\n al_get_first_config_section(3alleg5),\n al_get_next_config_section(3alleg5)\n"}]}]}]}]}]}