{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.s8hz9oFE/b1/allegro5_5.2.8.0+dfsg-1_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.s8hz9oFE/b2/allegro5_5.2.8.0+dfsg-1_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n- 5190ef15884a1ca4a0de1c67035212e1 1503520 doc optional allegro5-doc_5.2.8.0+dfsg-1_all.deb\n+ 2362a2992dc0a74f5d578f285d4fb88d 1504508 doc optional allegro5-doc_5.2.8.0+dfsg-1_all.deb\n 83a6cf74ff328339f6bc0507531580c4 16960 libdevel optional liballegro-acodec5-dev_5.2.8.0+dfsg-1_amd64.deb\n c2d97e80754958afbb6cf1e27685ed06 60704 debug optional liballegro-acodec5.2-dbgsym_5.2.8.0+dfsg-1_amd64.deb\n 60ade78a8519a6782c4b7554bd475c41 34716 libs optional liballegro-acodec5.2_5.2.8.0+dfsg-1_amd64.deb\n 747c67c74b3a99c5895bc9267d102b13 19740 libdevel optional liballegro-audio5-dev_5.2.8.0+dfsg-1_amd64.deb\n c77d29dfc038a99d79804b7c2d2f0633 108060 debug optional liballegro-audio5.2-dbgsym_5.2.8.0+dfsg-1_amd64.deb\n 47886feedd76c63272150acd2f81111a 58268 libs optional liballegro-audio5.2_5.2.8.0+dfsg-1_amd64.deb\n 1eb91b927fedee6cc797539e8af51d80 18028 libdevel optional liballegro-dialog5-dev_5.2.8.0+dfsg-1_amd64.deb\n"}, {"source1": "allegro5-doc_5.2.8.0+dfsg-1_all.deb", "source2": "allegro5-doc_5.2.8.0+dfsg-1_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 2022-12-06 16:59:12.000000 debian-binary\n--rw-r--r-- 0 0 0 31420 2022-12-06 16:59:12.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1471908 2022-12-06 16:59:12.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 31416 2022-12-06 16:59:12.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 1472900 2022-12-06 16:59:12.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.8.0+dfsg-1\n Architecture: all\n Maintainer: Debian Games Team \n-Installed-Size: 5509\n+Installed-Size: 5528\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": "@@ -197,65 +197,65 @@\n -rw-r--r-- 0 root (0) root (0) 5396 2017-05-30 18:25:58.000000 ./usr/share/doc/allegro5-doc/examples/ex_window_maximized.c\n -rw-r--r-- 0 root (0) root (0) 2660 2015-08-31 04:43:15.000000 ./usr/share/doc/allegro5-doc/examples/ex_window_title.c\n -rw-r--r-- 0 root (0) root (0) 4515 2021-10-23 04:51:52.000000 ./usr/share/doc/allegro5-doc/examples/ex_windows.c\n -rw-r--r-- 0 root (0) root (0) 1674 2013-11-06 11:26:41.000000 ./usr/share/doc/allegro5-doc/examples/ex_winfull.c\n -rw-r--r-- 0 root (0) root (0) 19521 2016-02-21 20:36:27.000000 ./usr/share/doc/allegro5-doc/examples/nihgui.cpp\n -rw-r--r-- 0 root (0) root (0) 6456 2013-07-07 19:37:58.000000 ./usr/share/doc/allegro5-doc/examples/nihgui.hpp\n drwxr-xr-x 0 root (0) root (0) 0 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/\n--rw-r--r-- 0 root (0) root (0) 11276 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/acodec.html\n--rw-r--r-- 0 root (0) root (0) 222882 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/audio.html\n+-rw-r--r-- 0 root (0) root (0) 11365 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/acodec.html\n+-rw-r--r-- 0 root (0) root (0) 222951 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/audio.html\n -rw-r--r-- 0 root (0) root (0) 36350 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/autosuggest.js\n--rw-r--r-- 0 root (0) root (0) 65603 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/color.html\n+-rw-r--r-- 0 root (0) root (0) 65575 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/color.html\n -rw-r--r-- 0 root (0) root (0) 36835 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/config.html\n -rw-r--r-- 0 root (0) root (0) 17025 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/direct3d.html\n--rw-r--r-- 0 root (0) root (0) 81262 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/display.html\n--rw-r--r-- 0 root (0) root (0) 76550 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/events.html\n--rw-r--r-- 0 root (0) root (0) 61011 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/file.html\n+-rw-r--r-- 0 root (0) root (0) 81265 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/display.html\n+-rw-r--r-- 0 root (0) root (0) 76630 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/events.html\n+-rw-r--r-- 0 root (0) root (0) 61020 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/file.html\n -rw-r--r-- 0 root (0) root (0) 55786 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/fixed.html\n--rw-r--r-- 0 root (0) root (0) 91587 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/font.html\n+-rw-r--r-- 0 root (0) root (0) 93506 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/font.html\n -rw-r--r-- 0 root (0) root (0) 41161 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/fshook.html\n -rw-r--r-- 0 root (0) root (0) 13087 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/fullscreen_mode.html\n -rw-r--r-- 0 root (0) root (0) 16408 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/getting_started.html\n--rw-r--r-- 0 root (0) root (0) 219032 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/graphics.html\n+-rw-r--r-- 0 root (0) root (0) 219103 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/graphics.html\n -rw-r--r-- 0 root (0) root (0) 68337 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/haptic.html\n--rw-r--r-- 0 root (0) root (0) 11587 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/image.html\n+-rw-r--r-- 0 root (0) root (0) 11976 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/image.html\n drwxr-xr-x 0 root (0) root (0) 0 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/images/\n -rw-r--r-- 0 root (0) root (0) 21480 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/images/LINE_CAP.png\n -rw-r--r-- 0 root (0) root (0) 15893 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/images/LINE_JOIN.png\n -rw-r--r-- 0 root (0) root (0) 65065 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/images/audio.png\n -rw-r--r-- 0 root (0) root (0) 16058 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/images/primitives1.png\n -rw-r--r-- 0 root (0) root (0) 25805 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/images/primitives2.png\n -rw-r--r-- 0 root (0) root (0) 6469 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/index.html\n -rw-r--r-- 0 root (0) root (0) 109449 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/index_all.html\n -rw-r--r-- 0 root (0) root (0) 34302 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/joystick.html\n -rw-r--r-- 0 root (0) root (0) 22567 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/keyboard.html\n -rw-r--r-- 0 root (0) root (0) 8705 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/main.html\n--rw-r--r-- 0 root (0) root (0) 10009 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/memfile.html\n+-rw-r--r-- 0 root (0) root (0) 10148 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/memfile.html\n -rw-r--r-- 0 root (0) root (0) 21741 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/memory.html\n -rw-r--r-- 0 root (0) root (0) 10021 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/misc.html\n -rw-r--r-- 0 root (0) root (0) 17322 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/monitor.html\n--rw-r--r-- 0 root (0) root (0) 39567 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/mouse.html\n--rw-r--r-- 0 root (0) root (0) 70997 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/native_dialog.html\n+-rw-r--r-- 0 root (0) root (0) 39570 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/mouse.html\n+-rw-r--r-- 0 root (0) root (0) 76509 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/native_dialog.html\n -rw-r--r-- 0 root (0) root (0) 26484 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/opengl.html\n -rw-r--r-- 0 root (0) root (0) 3973 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/pandoc.css\n -rw-r--r-- 0 root (0) root (0) 37115 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/path.html\n--rw-r--r-- 0 root (0) root (0) 11331 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/physfs.html\n+-rw-r--r-- 0 root (0) root (0) 11469 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/physfs.html\n -rw-r--r-- 0 root (0) root (0) 25747 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/platform.html\n--rw-r--r-- 0 root (0) root (0) 133765 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/primitives.html\n+-rw-r--r-- 0 root (0) root (0) 143428 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/primitives.html\n -rw-r--r-- 0 root (0) root (0) 71562 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/search_index.js\n -rw-r--r-- 0 root (0) root (0) 44272 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/shader.html\n -rw-r--r-- 0 root (0) root (0) 15417 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/state.html\n -rw-r--r-- 0 root (0) root (0) 66981 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/system.html\n--rw-r--r-- 0 root (0) root (0) 34570 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/threads.html\n+-rw-r--r-- 0 root (0) root (0) 34546 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/threads.html\n -rw-r--r-- 0 root (0) root (0) 12236 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/time.html\n -rw-r--r-- 0 root (0) root (0) 24471 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/timer.html\n--rw-r--r-- 0 root (0) root (0) 21454 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/touch.html\n--rw-r--r-- 0 root (0) root (0) 81138 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/transformations.html\n+-rw-r--r-- 0 root (0) root (0) 21450 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/touch.html\n+-rw-r--r-- 0 root (0) root (0) 81161 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/transformations.html\n -rw-r--r-- 0 root (0) root (0) 100613 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/utf8.html\n--rw-r--r-- 0 root (0) root (0) 28934 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/video.html\n+-rw-r--r-- 0 root (0) root (0) 30831 2022-12-06 16:59:12.000000 ./usr/share/doc/allegro5-doc/refman/video.html\n drwxr-xr-x 0 root (0) root (0) 0 2022-12-06 16:59:12.000000 ./usr/share/doc-base/\n -rw-r--r-- 0 root (0) root (0) 300 2022-12-06 16:50:02.000000 ./usr/share/doc-base/allegro5-doc.allegro5\n drwxr-xr-x 0 root (0) root (0) 0 2022-12-06 16:59:12.000000 ./usr/share/man/\n drwxr-xr-x 0 root (0) root (0) 0 2022-12-06 16:59:12.000000 ./usr/share/man/man3/\n -rw-r--r-- 0 root (0) root (0) 536 2022-12-06 16:59:12.000000 ./usr/share/man/man3/ALLEGRO_AUDIO_DEPTH.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 388 2022-12-06 16:59:12.000000 ./usr/share/man/man3/ALLEGRO_AUDIO_DEVICE.3alleg5.gz\n -rw-r--r-- 0 root (0) root (0) 685 2022-12-06 16:59:12.000000 ./usr/share/man/man3/ALLEGRO_AUDIO_EVENT_TYPE.3alleg5.gz\n"}, {"source1": "./usr/share/doc/allegro5-doc/refman/acodec.html", "source2": "./usr/share/doc/allegro5-doc/refman/acodec.html", "unified_diff": "@@ -225,11 +225,14 @@\n id=\"al_get_allegro_acodec_version\">al_get_allegro_acodec_version\n
uint32_t al_get_allegro_acodec_version(void)
\n

Source\n Code

\n

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

\n-\n+

\n+Allegro version 5.2.8\n+ - Last updated: 2024-01-08 05:22:50 UTC\n+

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -82,7 +82,8 @@\n Returns true if the acodec addon is initialized, otherwise returns false.\n Since: 5.2.6\n ****** al_get_allegro_acodec_version ******\n uint32_t al_get_allegro_acodec_version(void)\n Source_Code\n Returns the (compiled) version of the addon, in the same format as\n al_get_allegro_version.\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:50 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/audio.html", "source2": "./usr/share/doc/allegro5-doc/refman/audio.html", "unified_diff": "@@ -551,17 +551,17 @@\n href=\"audio.html#al_set_default_mixer\">al_set_default_mixer, al_play_sample

\n

Examples:

\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@@ -1636,15 +1636,15 @@\n

Examples:

\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@@ -1699,17 +1699,17 @@\n before the audio system is shut down.

\n \n

Examples:

\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@@ -1790,15 +1790,15 @@\n

Examples:

\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@@ -1812,15 +1812,15 @@\n

Examples:

\n
    \n
  • ex_saw.c
  • \n
  • ex_stream_file.c
  • \n
  • ex_synth.cpp
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_resample_test.c#L49\">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@@ -2110,17 +2110,17 @@\n al_get_audio_stream_length

\n

Examples:

\n
    \n
  • ex_saw.c
  • \n
  • ex_synth.cpp
  • \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 See also: al_get_audio_stream_fragment

\n

Examples:

\n
    \n
  • ex_saw.c
  • \n
  • ex_synth.cpp
  • \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@@ -3061,17 +3061,17 @@\n href=\"audio.html#al_set_default_mixer\">al_set_default_mixer, al_restore_default_mixer

\n

Examples:

\n
    \n
  • ex_saw.c
  • \n
  • ex_synth.cpp
  • \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@@ -3188,15 +3188,15 @@\n

Examples:

\n
    \n
  • ex_saw.c
  • \n
  • ex_stream_file.c
  • \n
  • ex_synth.cpp
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_resample_test.c#L40\">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@@ -3370,18 +3370,18 @@\n
\n

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

\n
\n

Examples:

\n
    \n
  • ex_synth.cpp
  • \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

\n

Fill a buffer with silence, for the given format and channel\n configuration. The buffer must have enough space for the given number of\n samples, and be properly aligned.

\n

Since: 5.1.8

\n

\n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:26 UTC\n+ - Last updated: 2024-01-08 05:22:50 UTC\n

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -285,16 +285,16 @@\n \\ .\n sample instance N\n Returns true on success, false on error. al_install_audio must have been called\n first.\n See also: al_set_default_mixer, al_play_sample\n Examples:\n * ex_saw.c\n- * ex_synth.cpp\n * ex_audio_props.cpp\n+ * ex_resample_test.c\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_Code\n Plays a sample on one of the sample instances created by al_reserve_samples.\n Returns true on success, false on failure. Playback may fail because all the\n reserved sample instances are currently used.\n@@ -924,15 +924,15 @@\n with supplying data to the stream.\n If the stream is created by al_load_audio_stream or al_play_audio_stream then\n it will also generate an ALLEGRO_EVENT_AUDIO_STREAM_FINISHED event if it\n reaches the end of the file and is not set to loop.\n Examples:\n * ex_saw.c\n * ex_stream_file.c\n- * ex_synth.cpp\n+ * ex_resample_test.c\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_Code\n Creates an ALLEGRO_AUDIO_STREAM. 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,16 +967,16 @@\n The size of the complete buffer is:\n buffer_size = bytes_per_fragment * fragment_count\n Note: Unlike many Allegro objects, audio streams are not implicitly\n destroyed when Allegro is shut down. You must destroy them manually\n with al_destroy_audio_stream before the audio system is shut down.\n Examples:\n * ex_saw.c\n- * ex_synth.cpp\n * ex_resample_test.c\n+ * ex_synth.cpp\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_Code\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@@ -1023,26 +1023,26 @@\n al_load_audio_stream.\n Note: If the stream is still attached to a mixer or voice,\n al_detach_audio_stream is automatically called on it first.\n See also: al_drain_audio_stream.\n Examples:\n * ex_saw.c\n * ex_stream_file.c\n- * ex_synth.cpp\n+ * ex_resample_test.c\n ***** al_get_audio_stream_event_source *****\n ALLEGRO_EVENT_SOURCE *al_get_audio_stream_event_source(\n ALLEGRO_AUDIO_STREAM *stream)\n Source_Code\n Retrieve the associated event source.\n See al_get_audio_stream_fragment for a description of the\n ALLEGRO_EVENT_AUDIO_STREAM_FRAGMENT event that audio streams emit.\n Examples:\n * ex_saw.c\n * ex_stream_file.c\n- * ex_synth.cpp\n+ * ex_resample_test.c\n ***** al_drain_audio_stream *****\n void al_drain_audio_stream(ALLEGRO_AUDIO_STREAM *stream)\n Source_Code\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\u00e2\u0080\u0099s\n playing state will change to false.\n See also: al_destroy_audio_stream\n@@ -1201,27 +1201,27 @@\n that al_get_audio_stream_fragment will not return NULL, so you still\n must check for it.\n See also: al_set_audio_stream_fragment, al_get_audio_stream_event_source,\n al_get_audio_stream_frequency, al_get_audio_stream_channels,\n al_get_audio_stream_depth, al_get_audio_stream_length\n Examples:\n * ex_saw.c\n- * ex_synth.cpp\n * ex_resample_test.c\n+ * ex_synth.cpp\n ***** al_set_audio_stream_fragment *****\n bool al_set_audio_stream_fragment(ALLEGRO_AUDIO_STREAM *stream, void *val)\n Source_Code\n This function needs to be called for every successful call of\n al_get_audio_stream_fragment to indicate that the buffer (pointed to by val) is\n filled with new data.\n See also: al_get_audio_stream_fragment\n Examples:\n * ex_saw.c\n- * ex_synth.cpp\n * ex_resample_test.c\n+ * ex_synth.cpp\n ***** al_get_audio_stream_fragments *****\n unsigned int al_get_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM *stream)\n Source_Code\n Returns the number of fragments this stream uses. This is the same value as\n passed to al_create_audio_stream when a new stream is created.\n See also: al_get_available_audio_stream_fragments\n ***** al_get_available_audio_stream_fragments *****\n@@ -1739,16 +1739,16 @@\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 al_play_sample.\n See also: al_reserve_samples, al_play_sample, al_set_default_mixer,\n al_restore_default_mixer\n Examples:\n * ex_saw.c\n- * ex_synth.cpp\n * ex_audio_props.cpp\n+ * ex_resample_test.c\n ***** al_set_default_mixer *****\n bool al_set_default_mixer(ALLEGRO_MIXER *mixer)\n Source_Code\n Sets the default mixer. All samples started with al_play_sample will be stopped\n and all sample instances returned by al_lock_sample_id will be invalidated. If\n you are using your own mixer, this should be called before al_reserve_samples.\n Returns true on success, false on error.\n@@ -1810,15 +1810,15 @@\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: al_detach_audio_stream.\n Examples:\n * ex_saw.c\n * ex_stream_file.c\n- * ex_synth.cpp\n+ * ex_resample_test.c\n ***** al_get_mixer_frequency *****\n unsigned int al_get_mixer_frequency(const ALLEGRO_MIXER *mixer)\n Source_Code\n Return the mixer frequency (in Hz).\n See also: al_set_mixer_frequency\n ***** al_set_mixer_frequency *****\n bool al_set_mixer_frequency(ALLEGRO_MIXER *mixer, unsigned int val)\n@@ -1906,16 +1906,16 @@\n void *pp_callback_userdata)\n Source_Code\n Sets a post-processing filter function that\u00e2\u0080\u0099s called after the attached\n streams have been mixed. The buffer\u00e2\u0080\u0099s format will be whatever the mixer was\n created with. The sample count and user-data pointer is also passed.\n Note: The callback is called from a dedicated audio thread.\n Examples:\n- * ex_synth.cpp\n * ex_resample_test.c\n+ * ex_synth.cpp\n * ex_mixer_pp.c\n ****** Miscelaneous ******\n ***** ALLEGRO_AUDIO_DEPTH *****\n enum ALLEGRO_AUDIO_DEPTH\n Source_Code\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@@ -2022,8 +2022,8 @@\n void al_fill_silence(void *buf, unsigned int samples,\n ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)\n Source_Code\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 Since: 5.1.8\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:26 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:50 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/color.html", "source2": "./usr/share/doc/allegro5-doc/refman/color.html", "unified_diff": "@@ -428,15 +428,15 @@\n

Examples:

\n
    \n
  • ex_multisample_target.c
  • \n
  • ex_clip.c
  • \n
  • ex_native_filechooser.c
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_blit.c#L234\">ex_blit.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@@ -942,12 +942,12 @@\n

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

\n

Since: 5.2.8

\n

See also: [al_color_linera], al_color_rgb_to_linear

\n

\n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:26 UTC\n+ - Last updated: 2024-01-08 05:22:52 UTC\n

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -217,15 +217,15 @@\n Source_Code\n Return an ALLEGRO_COLOR with the given name. If the color is not found then\n black is returned.\n See al_color_name_to_rgb for the list of names.\n Examples:\n * ex_multisample_target.c\n * ex_clip.c\n- * ex_native_filechooser.c\n+ * ex_blit.c\n ****** al_color_name_to_rgb ******\n bool al_color_name_to_rgb(char const *name, float *r, float *g, float *b)\n Source_Code\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@@ -545,8 +545,8 @@\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_Code\n Convert linear sRGB color values to gamma corrected (i.e.\u00c2\u00a0normal) RGB values.\n Since: 5.2.8\n See also: [al_color_linera], al_color_rgb_to_linear\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:26 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:52 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/config.html", "source2": "./usr/share/doc/allegro5-doc/refman/config.html", "unified_diff": "@@ -564,12 +564,12 @@\n

Merge one configuration structure into another. Values in\n configuration \u2018add\u2019 override those in \u2018master\u2019. \u2018master\u2019 is modified.\n Comments from \u2018add\u2019 are not retained.

\n

See also: al_merge_config

\n

\n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:05 UTC\n+ - Last updated: 2024-01-08 05:21:53 UTC\n

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -297,8 +297,8 @@\n ****** al_merge_config_into ******\n void al_merge_config_into(ALLEGRO_CONFIG *master, const ALLEGRO_CONFIG *add)\n Source_Code\n Merge one configuration structure into another. Values in configuration\n \u00e2\u0080\u0098add\u00e2\u0080\u0099 override those in \u00e2\u0080\u0098master\u00e2\u0080\u0099. \u00e2\u0080\u0098master\u00e2\u0080\u0099 is modified. Comments\n from \u00e2\u0080\u0098add\u00e2\u0080\u0099 are not retained.\n See also: al_merge_config\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:05 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:21:53 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/direct3d.html", "source2": "./usr/share/doc/allegro5-doc/refman/direct3d.html", "unified_diff": "@@ -297,12 +297,12 @@\n is restored. In the callback you should restore any d3d resources you\n have created yourself. The callback receives the affected display as a\n parameter.

\n

Pass NULL to disable the callback.

\n

Since: 5.1.0

\n

\n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:24 UTC\n+ - Last updated: 2024-01-08 05:22:47 UTC\n

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -132,8 +132,8 @@\n void (*callback)(ALLEGRO_DISPLAY *display))\n Source_Code\n The callback will be called whenever a D3D device that has been reset is\n restored. In the callback you should restore any d3d resources you have created\n yourself. The callback receives the affected display as a parameter.\n Pass NULL to disable the callback.\n Since: 5.1.0\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:24 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:47 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/display.html", "source2": "./usr/share/doc/allegro5-doc/refman/display.html", "unified_diff": "@@ -303,17 +303,17 @@\n Code

\n

An opaque type representing an open display or window.

\n

Examples:

\n
    \n
  • ex_monitorinfo.c
  • \n
  • common.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@@ -521,15 +521,15 @@\n

Examples:

\n
    \n
  • ex_d3d.cpp
  • \n
  • ex_opengl.c
  • \n
  • ex_font_justify.cpp
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_opengl_pixel_shader.c#L55\">ex_opengl_pixel_shader.c\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 documentation on\n events for a list of the events displays will generate.

\n

Examples:

\n
    \n
  • ex_keyboard_events.c
  • \n
  • ex_touch_input.c
  • \n-
  • ex_opengl.c
  • \n+
  • ex_touch_input.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@@ -942,35 +942,35 @@\n

See also: al_get_display_height

\n

Examples:

\n
    \n
  • ex_font_justify.cpp
  • \n
  • ex_window_maximized.c
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_bitmap.c#L135\">ex_bitmap.c\n
  • ex_fs_resize.c
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_ogre3d.cpp#L107\">ex_ogre3d.cpp\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_window_maximized.c
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_ogre3d.cpp#L108\">ex_ogre3d.cpp\n
  • ex_fs_resize.c
  • \n
  • ex_ogre3d.cpp
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_window_maximized.c#L101\">ex_window_maximized.c\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@@ -1398,17 +1398,17 @@\n

See also: ALLEGRO_EVENT_DISPLAY_HALT_DRAWING

\n

Examples:

\n
    \n
  • ex_touch_input.c
  • \n
  • ex_vertex_buffer.c
  • \n-
  • ex_android.c
  • \n+
  • ex_depth_mask.c
  • \n
\n al_acknowledge_drawing_resume\n
void al_acknowledge_drawing_resume(ALLEGRO_DISPLAY *display)
\n

Source\n Code

\n@@ -1500,12 +1500,12 @@\n

Examples:

\n
    \n
  • ex_clipboard.c
  • \n
\n

\n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:08 UTC\n+ - Last updated: 2024-01-08 05:22:13 UTC\n

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -130,16 +130,16 @@\n ****** Display creation ******\n ***** ALLEGRO_DISPLAY *****\n typedef struct ALLEGRO_DISPLAY ALLEGRO_DISPLAY;\n Source_Code\n An opaque type representing an open display or window.\n Examples:\n * ex_monitorinfo.c\n- * common.c\n * ex_d3d.cpp\n+ * ex_keyboard_focus.c\n ***** al_create_display *****\n ALLEGRO_DISPLAY *al_create_display(int w, int h)\n Source_Code\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@@ -263,15 +263,15 @@\n incompatible with ALLEGRO_FULLSCREEN. Since: 5.1.5\n 0 can be used for default values.\n See also: al_set_new_display_option, al_get_display_option,\n al_set_display_option\n Examples:\n * ex_d3d.cpp\n * ex_opengl.c\n- * ex_font_justify.cpp\n+ * ex_opengl_pixel_shader.c\n ***** al_get_new_display_option *****\n int al_get_new_display_option(int option, int *importance)\n Source_Code\n Retrieve an extra display setting which was previously set with\n al_set_new_display_option.\n ***** al_set_new_display_option *****\n void al_set_new_display_option(int option, int value, int importance)\n@@ -436,16 +436,16 @@\n ***** al_get_display_event_source *****\n ALLEGRO_EVENT_SOURCE *al_get_display_event_source(ALLEGRO_DISPLAY *display)\n Source_Code\n Retrieve the associated event source. See the documentation_on_events for a\n list of the events displays will generate.\n Examples:\n * ex_keyboard_events.c\n- * ex_touch_input.c\n * ex_opengl.c\n+ * ex_touch_input.c\n ***** al_get_backbuffer *****\n ALLEGRO_BITMAP *al_get_backbuffer(ALLEGRO_DISPLAY *display)\n Source_Code\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 al_draw_bitmap). Only\n untransformed operations are hardware accelerated. These consist of\n@@ -512,25 +512,25 @@\n ***** al_get_display_width *****\n int al_get_display_width(ALLEGRO_DISPLAY *display)\n Source_Code\n Gets the width of the display. This is like SCREEN_W in Allegro 4.x.\n See also: al_get_display_height\n Examples:\n * ex_font_justify.cpp\n- * ex_window_maximized.c\n- * ex_fs_resize.c\n+ * ex_bitmap.c\n+ * ex_ogre3d.cpp\n ***** al_get_display_height *****\n int al_get_display_height(ALLEGRO_DISPLAY *display)\n Source_Code\n Gets the height of the display. This is like SCREEN_H in Allegro 4.x.\n See also: al_get_display_width\n Examples:\n- * ex_window_maximized.c\n- * ex_fs_resize.c\n * ex_ogre3d.cpp\n+ * ex_fs_resize.c\n+ * ex_window_maximized.c\n ***** al_resize_display *****\n bool al_resize_display(ALLEGRO_DISPLAY *display, int width, int height)\n Source_Code\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@@ -773,16 +773,16 @@\n display while it is not being shown. If you do not call this function to let\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: ALLEGRO_EVENT_DISPLAY_HALT_DRAWING\n Examples:\n * ex_touch_input.c\n- * ex_vertex_buffer.c\n * ex_android.c\n+ * ex_depth_mask.c\n ***** al_acknowledge_drawing_resume *****\n void al_acknowledge_drawing_resume(ALLEGRO_DISPLAY *display)\n Source_Code\n Call this in response to the ALLEGRO_EVENT_DISPLAY_RESUME_DRAWING event.\n Since: 5.1.1\n See also: ALLEGRO_EVENT_DISPLAY_RESUME_DRAWING\n Examples:\n@@ -829,8 +829,8 @@\n bool al_clipboard_has_text(ALLEGRO_DISPLAY *display)\n Source_Code\n This function returns true if and only if the clipboard has text available.\n Since: 5.1.12\n See also: al_set_clipboard_text, al_get_clipboard_text\n Examples:\n * ex_clipboard.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:08 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:13 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/events.html", "source2": "./usr/share/doc/allegro5-doc/refman/events.html", "unified_diff": "@@ -313,19 +313,19 @@\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
  • common.c
  • \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@@ -988,19 +988,19 @@\n order.

\n

See also: al_create_event_queue, al_destroy_event_queue

\n

Examples:

\n
    \n
  • common.c
  • \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@@ -1083,19 +1083,19 @@\n

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

\n

Examples:

\n
    \n
  • common.c
  • \n-
  • ex_inject_events.c
  • \n
  • ex_enet_server.c
  • \n+
  • ex_timer_pause.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@@ -1103,19 +1103,19 @@\n queue is destroyed.

\n

See also: al_create_event_queue, ALLEGRO_EVENT_QUEUE

\n

Examples:

\n
    \n
  • common.c
  • \n-
  • ex_inject_events.c
  • \n
  • ex_timer_pause.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

Source\n Code

\n@@ -1125,19 +1125,19 @@\n more than once does nothing.

\n

See also: al_unregister_event_source,\n ALLEGRO_EVENT_SOURCE

\n

Examples:

\n
    \n
  • common.c
  • \n-
  • ex_inject_events.c
  • \n
  • ex_enet_server.c
  • \n+
  • ex_timer_pause.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@@ -1197,17 +1197,17 @@\n href=\"events.html#al_get_next_event\">al_get_next_event, al_peek_next_event

\n

Examples:

\n
    \n
  • ex_inject_events.c
  • \n
  • ex_touch_input.c
  • \n-
  • ex_opengl.c
  • \n+
  • ex_touch_input.c
  • \n
\n

al_get_next_event

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

Source\n Code

\n

Take the next event out of the event queue specified, and copy the\n@@ -1277,19 +1277,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
  • common.c
  • \n-
  • ex_inject_events.c
  • \n
  • ex_enet_server.c
  • \n+
  • ex_timer_pause.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@@ -1504,12 +1504,12 @@\n

Assign the abstract user data to the event source. Allegro does not\n use the data internally for anything; it is simply meant as a convenient\n way to associate your own data or objects with events.

\n

See also: al_get_event_source_data

\n

\n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:09 UTC\n+ - Last updated: 2024-01-08 05:22:14 UTC\n

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -137,17 +137,17 @@\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 al_get_time.\n Each event is of one of the following types, with the usable fields given.\n Examples:\n- * common.c\n * ex_inject_events.c\n * ex_enet_server.c\n+ * ex_timer_pause.c\n ***** ALLEGRO_EVENT_JOYSTICK_AXIS *****\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@@ -509,17 +509,17 @@\n typedef struct ALLEGRO_EVENT_QUEUE ALLEGRO_EVENT_QUEUE;\n Source_Code\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: al_create_event_queue, al_destroy_event_queue\n Examples:\n- * common.c\n * ex_inject_events.c\n * ex_enet_server.c\n+ * ex_timer_pause.c\n ****** ALLEGRO_EVENT_SOURCE ******\n typedef struct ALLEGRO_EVENT_SOURCE ALLEGRO_EVENT_SOURCE;\n Source_Code\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 al_get_display_event_source.\n You may create your own \u00e2\u0080\u009cuser\u00e2\u0080\u009d event sources that emit custom events.\n@@ -571,40 +571,40 @@\n ****** al_create_event_queue ******\n ALLEGRO_EVENT_QUEUE *al_create_event_queue(void)\n Source_Code\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: al_register_event_source, al_destroy_event_queue, ALLEGRO_EVENT_QUEUE\n Examples:\n- * common.c\n * ex_inject_events.c\n * ex_enet_server.c\n+ * ex_timer_pause.c\n ****** al_destroy_event_queue ******\n void al_destroy_event_queue(ALLEGRO_EVENT_QUEUE *queue)\n Source_Code\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 See also: al_create_event_queue, ALLEGRO_EVENT_QUEUE\n Examples:\n- * common.c\n * ex_inject_events.c\n * ex_timer_pause.c\n+ * common.c\n ****** al_register_event_source ******\n void al_register_event_source(ALLEGRO_EVENT_QUEUE *queue,\n ALLEGRO_EVENT_SOURCE *source)\n Source_Code\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: al_unregister_event_source, ALLEGRO_EVENT_SOURCE\n Examples:\n- * common.c\n * ex_inject_events.c\n * ex_enet_server.c\n+ * ex_timer_pause.c\n ****** al_unregister_event_source ******\n void al_unregister_event_source(ALLEGRO_EVENT_QUEUE *queue,\n ALLEGRO_EVENT_SOURCE *source)\n Source_Code\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@@ -639,16 +639,16 @@\n ****** al_is_event_queue_empty ******\n bool al_is_event_queue_empty(ALLEGRO_EVENT_QUEUE *queue)\n Source_Code\n Return true if the event queue specified is currently empty.\n See also: al_get_next_event, al_peek_next_event\n Examples:\n * ex_inject_events.c\n- * ex_touch_input.c\n * ex_opengl.c\n+ * ex_touch_input.c\n ****** al_get_next_event ******\n bool al_get_next_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)\n Source_Code\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@@ -683,17 +683,17 @@\n Source_Code\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: ALLEGRO_EVENT, al_wait_for_event_timed, al_wait_for_event_until,\n al_get_next_event\n Examples:\n- * common.c\n * ex_inject_events.c\n * ex_enet_server.c\n+ * ex_timer_pause.c\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_Code\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@@ -822,8 +822,8 @@\n ****** al_set_event_source_data ******\n void al_set_event_source_data(ALLEGRO_EVENT_SOURCE *source, intptr_t data)\n Source_Code\n Assign the abstract user data to the event source. Allegro does not use the\n data internally for anything; it is simply meant as a convenient way to\n associate your own data or objects with events.\n See also: al_get_event_source_data\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:09 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:14 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/file.html", "source2": "./usr/share/doc/allegro5-doc/refman/file.html", "unified_diff": "@@ -226,17 +226,17 @@\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_memfile.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@@ -324,15 +324,15 @@\n

Examples:

\n
    \n
  • ex_file.c
  • \n
  • ex_file_slice.c
  • \n
  • ex_physfs.c
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_bitmap_file.c#L80\">ex_bitmap_file.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@@ -954,12 +954,12 @@\n

Examples:

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

\n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:12 UTC\n+ - Last updated: 2024-01-08 05:22:14 UTC\n

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -94,16 +94,16 @@\n ****** ALLEGRO_FILE ******\n typedef struct ALLEGRO_FILE ALLEGRO_FILE;\n Source_Code\n An opaque object representing an open file. This could be a real file on disk\n or a virtual file.\n Examples:\n * ex_file.c\n- * ex_memfile.c\n * ex_dir.c\n+ * ex_memfile.c\n ****** ALLEGRO_FILE_INTERFACE ******\n typedef struct ALLEGRO_FILE_INTERFACE\n Source_Code\n A structure containing function pointers to handle a type of \u00e2\u0080\u009cfile\u00e2\u0080\u009d, real\n or virtual. See the full discussion in al_set_new_file_interface.\n The fields are:\n void* (*fi_fopen)(const char *path, const char *mode);\n@@ -160,15 +160,15 @@\n files. To avoid this behaviour you need to open file streams in binary mode by\n using a mode argument containing a \u00e2\u0080\u009cb\u00e2\u0080\u009d, e.g.\u00c2\u00a0\u00e2\u0080\u009crb\u00e2\u0080\u009d, \u00e2\u0080\u009cwb\u00e2\u0080\u009d.\n Returns a file handle on success, or NULL on error.\n See also: al_set_new_file_interface, al_fclose.\n Examples:\n * ex_file.c\n * ex_file_slice.c\n- * ex_physfs.c\n+ * ex_bitmap_file.c\n ****** al_fopen_interface ******\n ALLEGRO_FILE *al_fopen_interface(const ALLEGRO_FILE_INTERFACE *drv,\n const char *path, const char *mode)\n Source_Code\n Opens a file using the specified interface, instead of the interface set with\n al_set_new_file_interface.\n See also: al_fopen\n@@ -550,8 +550,8 @@\n ***** al_get_file_userdata *****\n void *al_get_file_userdata(ALLEGRO_FILE *f)\n Source_Code\n Returns a pointer to the custom userdata that is attached to the file handle.\n This is intended to be used by functions that extend ALLEGRO_FILE_INTERFACE.\n Examples:\n * ex_curl.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:12 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:14 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/fixed.html", "source2": "./usr/share/doc/allegro5-doc/refman/fixed.html", "unified_diff": "@@ -655,12 +655,12 @@\n href=\"https://github.com/liballeg/allegro5/blob/master/src/math.c#L321\">Source\n Code

\n

Fixed point hypotenuse (returns the square root of\n x*x + y*y). This should be better than calculating the\n formula yourself manually, since the error is much smaller.

\n

\n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:13 UTC\n+ - Last updated: 2024-01-08 05:22:23 UTC\n

\n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -439,8 +439,8 @@\n errno is set to EDOM and the function returns zero.\n ***** al_fixhypot *****\n al_fixed al_fixhypot(al_fixed x, al_fixed y)\n Source_Code\n Fixed point hypotenuse (returns the square root of x*x + y*y). This should be\n better than calculating the formula yourself manually, since the error is much\n smaller.\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:13 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:23 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/font.html", "source2": "./usr/share/doc/allegro5-doc/refman/font.html", "unified_diff": "@@ -251,18 +251,18 @@\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_font_justify.cpp
  • \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@@ -318,18 +318,18 @@\n

See also: al_init_image_addon, al_init_ttf_addon, al_shutdown_font_addon

\n

Examples:

\n
    \n
  • ex_font_justify.cpp
  • \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@@ -382,19 +382,19 @@\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_font_justify.cpp
  • \n-
  • ex_disable_screensaver.c
  • \n
  • ex_timer.c
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_font_justify.cpp#L139\">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@@ -480,18 +480,18 @@\n

See also: al_get_ustr_width, al_get_font_line_height, al_get_text_dimensions

\n

Examples:

\n
    \n
  • ex_record_name.c
  • \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@@ -625,15 +625,15 @@\n

Examples:

\n
    \n
  • ex_disable_screensaver.c
  • \n
  • ex_display_events.c
  • \n
  • ex_mouse_warp.c
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_cpu.c#L60\">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@@ -728,14 +728,19 @@\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@@ -926,14 +931,21 @@\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@@ -980,14 +992,21 @@\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_resize2.c
  • \n+
  • ex_font_multiline.cpp
  • \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@@ -1012,14 +1031,19 @@\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@@ -1054,14 +1078,19 @@\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@@ -1208,15 +1237,15 @@\n

Examples:

\n
    \n
  • ex_disable_screensaver.c
  • \n
  • ex_display_events.c
  • \n
  • ex_mouse_warp.c
  • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_cpu.c#L42\">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@@ -1225,14 +1254,23 @@\n Code

\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@@ -1274,14 +1312,23 @@\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@@ -1351,14 +1398,21 @@\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.8\n- - Last updated: 2025-02-09 11:25:26 UTC\n+ - Last updated: 2024-01-08 05:22:52 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -108,16 +108,16 @@\n Source_Code\n A handle identifying any kind of font. Usually you will create it with\n al_load_font 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 al_load_bitmap and a font in Allegro\u00e2\u0080\u0099s bitmap font format\n will be created from it with al_grab_font_from_bitmap.\n Examples:\n- * ex_font_justify.cpp\n * ex_disable_screensaver.c\n+ * ex_font_justify.cpp\n * ex_display_events.c\n ***** ALLEGRO_GLYPH *****\n typedef struct ALLEGRO_GLYPH ALLEGRO_GLYPH;\n Source_Code\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@@ -155,16 +155,16 @@\n al_init_ttf_addon.\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: al_init_image_addon, al_init_ttf_addon, al_shutdown_font_addon\n Examples:\n- * ex_font_justify.cpp\n * ex_disable_screensaver.c\n+ * ex_font_justify.cpp\n * ex_display_events.c\n ***** al_is_font_addon_initialized *****\n bool al_is_font_addon_initialized(void)\n Source_Code\n Returns true if the font addon is initialized, otherwise returns false.\n Since: 5.2.6\n See also: al_init_font_addon, al_shutdown_font_addon\n@@ -190,17 +190,17 @@\n * ex_window_title.c\n ***** al_destroy_font *****\n void al_destroy_font(ALLEGRO_FONT *f)\n Source_Code\n Frees the memory being used by a font structure. Does nothing if passed NULL.\n See also: al_load_font\n Examples:\n- * ex_font_justify.cpp\n * ex_disable_screensaver.c\n- * ex_timer.c\n+ * ex_font_justify.cpp\n+ * ex_cpu.c\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_Code\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 (\u00e2\u0080\u0098.\u00e2\u0080\u0099) character. It will be\n@@ -250,16 +250,16 @@\n * ex_ttf.c\n ***** al_get_text_width *****\n int al_get_text_width(const ALLEGRO_FONT *f, const char *str)\n Source_Code\n Calculates the length of a string in a particular font, in pixels.\n See also: al_get_ustr_width, al_get_font_line_height, al_get_text_dimensions\n Examples:\n- * ex_record_name.c\n * ex_display_options.c\n+ * ex_record_name.c\n * ex_color_gradient.c\n ***** al_get_ustr_width *****\n int al_get_ustr_width(const ALLEGRO_FONT *f, ALLEGRO_USTR const *ustr)\n Source_Code\n Like al_get_text_width but expects an ALLEGRO_USTR.\n See also: al_get_text_width, al_get_ustr_dimensions\n Examples:\n@@ -328,15 +328,15 @@\n Source_Code\n Formatted text output, using a printf() style format string. All parameters\n have the same meaning as with al_draw_text otherwise.\n See also: al_draw_text, al_draw_ustr\n Examples:\n * ex_disable_screensaver.c\n * ex_display_events.c\n- * ex_mouse_warp.c\n+ * ex_cpu.c\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_Code\n Formatted text output, using a printf() style format string. All parameters\n have the same meaning as with al_draw_justified_text otherwise.\n@@ -390,14 +390,16 @@\n void al_set_fallback_font(ALLEGRO_FONT *font, ALLEGRO_FONT *fallback)\n Source_Code\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: al_get_fallback_font, al_draw_glyph, al_draw_text\n+Examples:\n+ * ex_ttf.c\n ***** al_get_fallback_font *****\n ALLEGRO_FONT *al_get_fallback_font(ALLEGRO_FONT *font)\n Source_Code\n Retrieves the fallback font for this font or NULL.\n Since: 5.1.12\n See also: al_set_fallback_font\n ****** Per glyph text handling ******\n@@ -542,14 +544,17 @@\n / \\ |\n /____\\ |\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+ * ex_font.c\n+ * ex_ttf.c\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_Code\n Like al_draw_text, but this function supports drawing multiple lines of text.\n@@ -577,14 +582,17 @@\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 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+ * ex_resize2.c\n+ * ex_font_multiline.cpp\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_Code\n Like al_draw_multiline_text, except the text is passed as an ALLEGRO_USTR\n instead of a NUL-terminated char array.\n@@ -595,14 +603,16 @@\n ALLEGRO_COLOR color, float x, float y, float max_width, float line_height,\n int flags, const char *format, ...)\n Source_Code\n Formatted text output, using a printf() style format string. All parameters\n have the same meaning as with al_draw_multiline_text otherwise.\n Since: 5.1.9\n See also: al_draw_multiline_text, al_draw_multiline_ustr, al_do_multiline_text\n+Examples:\n+ * ex_resize2.c\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_Code\n This function processes the text and splits it into lines as\n@@ -622,14 +632,16 @@\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 not\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: al_draw_multiline_text\n+Examples:\n+ * ex_font_multiline.cpp\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_Code\n Like al_do_multiline_text, but using ALLEGRO_USTR instead of a NUL-terminated\n@@ -726,25 +738,29 @@\n The font memory must be freed the same way as for any other font, using\n al_destroy_font.\n Since: 5.0.8, 5.1.3\n See also: al_load_bitmap_font, al_destroy_font\n Examples:\n * ex_disable_screensaver.c\n * ex_display_events.c\n- * ex_mouse_warp.c\n+ * ex_cpu.c\n ****** TTF fonts ******\n These functions are declared in the following header file. Link with\n allegro_ttf.\n #include \n ***** al_init_ttf_addon *****\n bool al_init_ttf_addon(void)\n Source_Code\n Call this after al_init_font_addon to make al_load_font recognize \u00e2\u0080\u009c.ttf\u00e2\u0080\u009d\n and other formats supported by al_load_ttf_font.\n Returns true on success, false on failure.\n+Examples:\n+ * ex_font_justify.cpp\n+ * ex_font_multiline.cpp\n+ * ex_color.cpp\n ***** al_is_ttf_addon_initialized *****\n bool al_is_ttf_addon_initialized(void)\n Source_Code\n Returns true if the TTF addon is initialized, otherwise returns false.\n Since: 5.2.6\n See also: al_init_ttf_addon, al_shutdown_ttf_addon\n ***** al_shutdown_ttf_addon *****\n@@ -767,14 +783,18 @@\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: al_init_ttf_addon, al_load_ttf_font_f\n+Examples:\n+ * ex_bitmap_flip.c\n+ * ex_synth.cpp\n+ * ex_audio_chain.cpp\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_Code\n Like al_load_ttf_font, 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 Note: The file handle is owned by the returned ALLEGRO_FONT object\n@@ -819,8 +839,11 @@\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 \u00e2\u0080\u0098glyph\u00e2\u0080\u0099 structure to 0 with memset before\n passing it to this function for future compatibility.\n Since: 5.2.1\n Unstable_API: This API is new and subject to refinement.\n See also: ALLEGRO_GLYPH\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:26 UTC\n+Examples:\n+ * ex_font.c\n+ * ex_ttf.c\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:52 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/fshook.html", "source2": "./usr/share/doc/allegro5-doc/refman/fshook.html", "unified_diff": "@@ -705,12 +705,12 @@\n

    Return a pointer to the ALLEGRO_FS_INTERFACE table\n in effect for the calling thread.

    \n

    See also: al_store_state, al_restore_state.

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:14 UTC\n+ - Last updated: 2024-01-08 05:22:24 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -378,8 +378,8 @@\n See also: al_set_fs_interface.\n ***** al_get_fs_interface *****\n const ALLEGRO_FS_INTERFACE *al_get_fs_interface(void)\n Source_Code\n Return a pointer to the ALLEGRO_FS_INTERFACE table in effect for the calling\n thread.\n See also: al_store_state, al_restore_state.\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:14 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:24 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/fullscreen_mode.html", "source2": "./usr/share/doc/allegro5-doc/refman/fullscreen_mode.html", "unified_diff": "@@ -242,12 +242,12 @@\n
  • ex_monitorinfo.c
  • \n
  • ex_display_options.c
  • \n \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:16 UTC\n+ - Last updated: 2024-01-08 05:22:25 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -90,8 +90,8 @@\n al_set_new_display_refresh_rate, and al_set_new_display_flags to find the\n number of modes that match. Settings the new display parameters to zero will\n give a list of all modes for the default driver.\n See also: al_get_display_mode\n Examples:\n * ex_monitorinfo.c\n * ex_display_options.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:16 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:25 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/getting_started.html", "source2": "./usr/share/doc/allegro5-doc/refman/getting_started.html", "unified_diff": "@@ -327,12 +327,12 @@\n href=\"system.html#al_init\">al_init becomes more scrict. See\n documentation of those functions for details.

    \n

    Not the end

    \n

    There\u2019s a heap of stuff we haven\u2019t even mentioned yet.

    \n

    Enjoy!

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:02 UTC\n+ - Last updated: 2024-01-08 05:21:37 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -195,8 +195,8 @@\n including Allegro\u00e2\u0080\u0099s headers.\n Note that when you define that macro, the version check performed by\n al_install_system and al_init becomes more scrict. See documentation of those\n functions for details.\n ****** Not the end ******\n There\u00e2\u0080\u0099s a heap of stuff we haven\u00e2\u0080\u0099t even mentioned yet.\n Enjoy!\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:02 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:21:37 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/graphics.html", "source2": "./usr/share/doc/allegro5-doc/refman/graphics.html", "unified_diff": "@@ -405,15 +405,15 @@\n

    Examples:

    \n
      \n
    • ex_enet_server.c
    • \n
    • ex_keyboard_events.c
    • \n
    • ex_font_justify.cpp
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_drawpixels.c#L93\">ex_drawpixels.c\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@@ -625,15 +625,15 @@\n

    Examples:

    \n
      \n
    • ex_lockbitmap.c
    • \n
    • ex_premulalpha.c
    • \n
    • ex_color2.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_multisample.c#L52\">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@@ -751,15 +751,15 @@\n

    Examples:

    \n
      \n
    • ex_convert.c
    • \n
    • ex_drawpixels.c
    • \n
    • ex_pixelformat.cpp
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_lockbitmap.c#L33\">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@@ -1001,15 +1001,15 @@\n

    Examples:

    \n
      \n
    • ex_convert.c
    • \n
    • ex_nodisplay.c
    • \n
    • ex_blend_bench.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_opengl_pixel_shader.c#L18\">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@@ -1137,15 +1137,15 @@\n

    Examples:

    \n
      \n
    • ex_subbitmap.c
    • \n
    • ex_font.c
    • \n
    • ex_blend2.cpp
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_premulalpha.c#L64\">ex_premulalpha.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@@ -1494,17 +1494,17 @@\n API: This is an experimental feature.

    \n \n

    See also: ALLEGRO_BITMAP_WRAP

    \n

    Examples:

    \n
      \n
    • ex_prim.c
    • \n-
    • ex_prim_wrap.c
    • \n+
    • ex_prim.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@@ -1531,17 +1531,17 @@\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.c
    • \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@@ -1641,17 +1641,17 @@\n href=\"graphics.html#al_put_pixel\">al_put_pixel, al_lock_bitmap

    \n

    Examples:

    \n
      \n
    • ex_blend_test.c
    • \n
    • ex_vertex_buffer.c
    • \n-
    • ex_compressed.c
    • \n+
    • ex_vertex_buffer.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@@ -1985,17 +1985,17 @@\n al_draw_scaled_rotated_bitmap

    \n

    Examples:

    \n
      \n
    • ex_nodisplay.c
    • \n
    • ex_blend_bench.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_opengl_pixel_shader.c#L116\">ex_opengl_pixel_shader.c\n
    • ex_mouse.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_blend_bench.c#L42\">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

    Source\n Code

    \n@@ -2049,15 +2049,15 @@\n

    Examples:

    \n
      \n
    • ex_font.c
    • \n
    • ex_clip.c
    • \n
    • ex_blend.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_blit.c#L120\">ex_blit.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

    al_get_target_bitmap, al_set_target_backbuffer

    \n

    Examples:

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

    al_set_target_backbuffer

    \n
    void al_set_target_backbuffer(ALLEGRO_DISPLAY *display)
    \n

    Source\n Code

    \n

    Same as\n@@ -2468,15 +2468,15 @@\n

    Examples:

    \n
      \n
    • ex_keyboard_focus.c
    • \n
    • ex_mouse_focus.c
    • \n
    • ex_blend_bench.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_opengl_pixel_shader.c#L119\">ex_opengl_pixel_shader.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@@ -3323,15 +3323,15 @@\n

    Examples:

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

    al_backup_dirty_bitmap

    \n
    void al_backup_dirty_bitmap(ALLEGRO_BITMAP *bitmap)
    \n

    Source\n Code

    \n@@ -3364,12 +3364,12 @@\n

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

    \n \n

    See also: al_backup_dirty_bitmap

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:16 UTC\n+ - Last updated: 2024-01-08 05:22:27 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -204,15 +204,15 @@\n Convert r, g, b, (ranging from 0.0f-1.0f) into an ALLEGRO_COLOR, using 1.0f for\n alpha.\n This function can be called before Allegro is initialized.\n See also: al_map_rgba, al_map_rgb, al_map_rgba_f\n Examples:\n * ex_enet_server.c\n * ex_keyboard_events.c\n- * ex_font_justify.cpp\n+ * ex_drawpixels.c\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_Code\n Convert r, g, b, a (ranging from 0-255) into an ALLEGRO_COLOR.\n This function can be called before Allegro is initialized.\n See also: al_map_rgb, al_premul_rgba, al_map_rgb_f\n@@ -339,15 +339,15 @@\n size of a single pixel, but for blocked pixel formats this value is\n different.\n See also: al_lock_bitmap, al_lock_bitmap_region, al_unlock_bitmap,\n ALLEGRO_PIXEL_FORMAT\n Examples:\n * ex_lockbitmap.c\n * ex_premulalpha.c\n- * ex_color2.c\n+ * ex_multisample.c\n ***** ALLEGRO_PIXEL_FORMAT *****\n typedef enum ALLEGRO_PIXEL_FORMAT\n Source_Code\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 Note:\n@@ -446,15 +446,15 @@\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: al_set_new_bitmap_format, al_get_bitmap_format\n Examples:\n * ex_convert.c\n * ex_drawpixels.c\n- * ex_pixelformat.cpp\n+ * ex_lockbitmap.c\n ***** al_get_pixel_size *****\n int al_get_pixel_size(int format)\n Source_Code\n Return the number of bytes that a pixel of the given format occupies. For\n blocked pixel formats (e.g.\u00c2\u00a0compressed formats), this returns 0.\n See also: ALLEGRO_PIXEL_FORMAT, al_get_pixel_format_bits\n ***** al_get_pixel_format_bits *****\n@@ -589,15 +589,15 @@\n ***** ALLEGRO_BITMAP *****\n typedef struct ALLEGRO_BITMAP ALLEGRO_BITMAP;\n Source_Code\n Abstract type representing a bitmap (2D image).\n Examples:\n * ex_convert.c\n * ex_nodisplay.c\n- * ex_blend_bench.c\n+ * ex_opengl_pixel_shader.c\n ***** al_create_bitmap *****\n ALLEGRO_BITMAP *al_create_bitmap(int w, int h)\n Source_Code\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@@ -678,15 +678,15 @@\n the new bitmap is a memory bitmap, its projection bitmap is reset to be\n orthographic.\n See also: al_create_bitmap, al_set_new_bitmap_format, al_set_new_bitmap_flags,\n al_convert_bitmap\n Examples:\n * ex_subbitmap.c\n * ex_font.c\n- * ex_blend2.cpp\n+ * ex_premulalpha.c\n ***** al_convert_bitmap *****\n void al_convert_bitmap(ALLEGRO_BITMAP *bitmap)\n Source_Code\n Converts the bitmap to the current bitmap flags and format. The bitmap will be\n as if it was created anew with al_create_bitmap but retain its contents. All of\n this bitmap\u00e2\u0080\u0099s sub-bitmaps are also converted. If the new bitmap type is\n memory, then the bitmap\u00e2\u0080\u0099s projection bitmap is reset to be orthographic.\n@@ -898,16 +898,16 @@\n addon which (for backwards compatibility) alters the wrapping\n setting. To minimize this issue, use a wrapping setting that\u00e2\u0080\u0099s not\n ALLEGRO_BITMAP_WRAP_DEFAULT.\n Since: 5.2.8\n Unstable_API: This is an experimental feature.\n See also: ALLEGRO_BITMAP_WRAP\n Examples:\n- * ex_prim.c\n * ex_prim_wrap.c\n+ * ex_prim.c\n ***** al_get_new_bitmap_wrap *****\n Source Code\n Returns the value currently set with al_set_new_bitmap_wrap on the current\n thread.\n Since: 5.2.8\n Unstable_API: This is an experimental feature.\n See also: ALLEGRO_BITMAP_WRAP\n@@ -922,16 +922,16 @@\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- * ex_prim.c\n * ex_prim_wrap.c\n+ * ex_prim.c\n ****** Bitmap properties ******\n ***** al_get_bitmap_flags *****\n int al_get_bitmap_flags(ALLEGRO_BITMAP *bitmap)\n Source_Code\n Return the flags used to create the bitmap.\n See also: al_set_new_bitmap_flags\n Examples:\n@@ -982,16 +982,16 @@\n Source_Code\n Get a pixel\u00e2\u0080\u0099s color value from the specified bitmap. This operation is slow\n on 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: ALLEGRO_COLOR, al_put_pixel, al_lock_bitmap\n Examples:\n * ex_blend_test.c\n- * ex_vertex_buffer.c\n * ex_compressed.c\n+ * ex_vertex_buffer.c\n ***** al_is_bitmap_locked *****\n bool al_is_bitmap_locked(ALLEGRO_BITMAP *bitmap)\n Source_Code\n Returns whether or not a bitmap is already locked.\n See also: al_lock_bitmap, al_lock_bitmap_region, al_unlock_bitmap\n ***** al_is_compatible_bitmap *****\n bool al_is_compatible_bitmap(ALLEGRO_BITMAP *bitmap)\n@@ -1176,16 +1176,16 @@\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: al_draw_bitmap_region, al_draw_scaled_bitmap, al_draw_rotated_bitmap,\n al_draw_scaled_rotated_bitmap\n Examples:\n * ex_nodisplay.c\n+ * ex_opengl_pixel_shader.c\n * ex_blend_bench.c\n- * ex_mouse.c\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 Source_Code\n Like al_draw_bitmap but multiplies all colors in the bitmap with the given\n color. For example:\n al_draw_tinted_bitmap(bitmap, al_map_rgba_f(0.5, 0.5, 0.5, 0.5), x, y, 0);\n@@ -1215,15 +1215,15 @@\n See al_draw_bitmap for a note on restrictions on which bitmaps can be drawn\n where.\n See also: al_draw_bitmap, al_draw_scaled_bitmap, al_draw_rotated_bitmap,\n al_draw_scaled_rotated_bitmap\n Examples:\n * ex_font.c\n * ex_clip.c\n- * ex_blend.c\n+ * ex_blit.c\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 Source_Code\n Like al_draw_bitmap_region but multiplies all colors in the bitmap with the\n@@ -1469,25 +1469,25 @@\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\u00e2\u0080\u0099s\n associated texture.\n See also: al_get_target_bitmap, al_set_target_backbuffer\n Examples:\n * ex_nodisplay.c\n- * ex_blend_bench.c\n * ex_opengl_pixel_shader.c\n+ * ex_blend_bench.c\n ***** al_set_target_backbuffer *****\n void al_set_target_backbuffer(ALLEGRO_DISPLAY *display)\n Source_Code\n Same as al_set_target_bitmap(al_get_backbuffer(display));\n See also: al_set_target_bitmap, al_get_backbuffer\n Examples:\n * ex_keyboard_focus.c\n * ex_mouse_focus.c\n- * ex_blend_bench.c\n+ * ex_opengl_pixel_shader.c\n ***** al_get_current_display *****\n ALLEGRO_DISPLAY *al_get_current_display(void)\n Source_Code\n Return the display that is \u00e2\u0080\u009ccurrent\u00e2\u0080\u009d for the calling thread, or NULL if\n there is none.\n See also: al_set_target_bitmap\n Examples:\n@@ -2007,15 +2007,15 @@\n This function does nothing if the target bitmap is a memory bitmap.\n Since: 5.1.2\n See also: ALLEGRO_RENDER_STATE, ALLEGRO_RENDER_FUNCTION,\n ALLEGRO_WRITE_MASK_FLAGS\n Examples:\n * ex_depth_mask.c\n * ex_depth_target.c\n- * ex_camera.c\n+ * ex_draw_bitmap.c\n ***** al_backup_dirty_bitmap *****\n void al_backup_dirty_bitmap(ALLEGRO_BITMAP *bitmap)\n Source_Code\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@@ -2029,8 +2029,8 @@\n ***** al_backup_dirty_bitmaps *****\n void al_backup_dirty_bitmaps(ALLEGRO_DISPLAY *display)\n Source_Code\n Backs up all of a display\u00e2\u0080\u0099s bitmaps to system memory.\n Since: 5.2.1\n Unstable_API: This API is new and subject to refinement.\n See also: al_backup_dirty_bitmap\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:16 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:27 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/haptic.html", "source2": "./usr/share/doc/allegro5-doc/refman/haptic.html", "unified_diff": "@@ -1241,12 +1241,12 @@\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

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:17 UTC\n+ - Last updated: 2024-01-08 05:22:29 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -726,8 +726,8 @@\n again manually in this case. However, if true is returned, it is necessary to\n call al_release_haptic_effect when the effect isn\u00e2\u0080\u0099t needed anymore, to\n prevent the amount of available effects on the haptic device from running out.\n Since: 5.1.8\n Unstable_API: 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-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:17 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:29 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/image.html", "source2": "./usr/share/doc/allegro5-doc/refman/image.html", "unified_diff": "@@ -196,14 +196,23 @@\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@@ -221,12 +230,12 @@\n

    Source\n Code

    \n

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

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:26 UTC\n+ - Last updated: 2024-01-08 05:22:54 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -68,14 +68,18 @@\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+ * ex_convert.c\n+ * ex_nodisplay.c\n+ * ex_opengl_pixel_shader.c\n ****** al_is_image_addon_initialized ******\n bool al_is_image_addon_initialized(void)\n Source_Code\n Returns true if the image addon is initialized, otherwise returns false.\n Since: 5.2.6\n ****** al_shutdown_image_addon ******\n void al_shutdown_image_addon(void)\n@@ -83,8 +87,8 @@\n Shut down the image addon. This is done automatically at program exit, but can\n be called any time the user wishes as well.\n ****** al_get_allegro_image_version ******\n uint32_t al_get_allegro_image_version(void)\n Source_Code\n Returns the (compiled) version of the addon, in the same format as\n al_get_allegro_version.\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:26 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:54 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/index.html", "source2": "./usr/share/doc/allegro5-doc/refman/index.html", "unified_diff": "@@ -154,12 +154,12 @@\n
  • Native dialogs addon
  • \n
  • PhysicsFS addon
  • \n
  • Primitives addon
  • \n
  • Video streaming addon
  • \n \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:30 UTC\n+ - Last updated: 2024-01-08 05:23:05 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -88,8 +88,8 @@\n * Image_I/O_addon\n * Main_addon\n * Memfile_addon\n * Native_dialogs_addon\n * PhysicsFS_addon\n * Primitives_addon\n * Video_streaming_addon\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:30 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:23:05 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/index_all.html", "source2": "./usr/share/doc/allegro5-doc/refman/index_all.html", "unified_diff": "@@ -2879,12 +2879,12 @@\n
  • al_x_set_initial_icon\n
  • \n
  • iPhone
  • \n \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:30 UTC\n+ - Last updated: 2024-01-08 05:23:07 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1252,8 +1252,8 @@\n * al_wait_for_event_timed\n * al_wait_for_event_until\n * al_wait_for_vsync\n * al_win_add_window_callback\n * al_win_remove_window_callback\n * al_x_set_initial_icon\n * iPhone\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:30 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:23:07 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/joystick.html", "source2": "./usr/share/doc/allegro5-doc/refman/joystick.html", "unified_diff": "@@ -587,12 +587,12 @@\n
  • ex_joystick_events.c
  • \n
  • ex_haptic2.cpp
  • \n \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:18 UTC\n+ - Last updated: 2024-01-08 05:22:31 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -284,8 +284,8 @@\n Source_Code\n Returns the global joystick event source. All joystick_events are generated by\n this event source.\n Examples:\n * ex_joystick_hotplugging.c\n * ex_joystick_events.c\n * ex_haptic2.cpp\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:18 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:31 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/keyboard.html", "source2": "./usr/share/doc/allegro5-doc/refman/keyboard.html", "unified_diff": "@@ -471,12 +471,12 @@\n
  • ex_opengl.c
  • \n
  • ex_timedwait.c
  • \n \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:18 UTC\n+ - Last updated: 2024-01-08 05:22:35 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -268,8 +268,8 @@\n Retrieve the keyboard event source. All keyboard_events are generated by this\n event source.\n Returns NULL if the keyboard subsystem was not installed.\n Examples:\n * ex_keyboard_events.c\n * ex_opengl.c\n * ex_timedwait.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:18 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:35 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/main.html", "source2": "./usr/share/doc/allegro5-doc/refman/main.html", "unified_diff": "@@ -178,12 +178,12 @@\n
    int main(int argc, char **argv)
    \n

    This addon does nothing on platforms that don\u2019t require its\n functionality, but you should keep it in mind in case you need to port\n to platforms that do require it.

    \n

    Link with allegro_main.

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:27 UTC\n+ - Last updated: 2024-01-08 05:22:56 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -56,8 +56,8 @@\n If the user main function is defined in C++, then it must have the following\n signature for this addon to work:\n int main(int argc, char **argv)\n This addon does nothing on platforms that don\u00e2\u0080\u0099t require its functionality,\n but you should keep it in mind in case you need to port to platforms that do\n require it.\n Link with allegro_main.\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:27 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:56 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/memfile.html", "source2": "./usr/share/doc/allegro5-doc/refman/memfile.html", "unified_diff": "@@ -186,22 +186,27 @@\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 al_get_allegro_version.

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:27 UTC\n+ - Last updated: 2024-01-08 05:22:59 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -61,13 +61,15 @@\n upon the memory directly, so it must not be freed while the file remains open.\n The mode can be any combination of \u00e2\u0080\u009cr\u00e2\u0080\u009d (readable) and \u00e2\u0080\u009cw\u00e2\u0080\u009d (writable).\n Regardless of the mode, the file always opens at position 0. The file size is\n fixed and cannot be expanded. The file is always read from/written to in binary\n mode, which means that no newline translation is performed.\n It should be closed with al_fclose. After the file is closed, you are\n responsible for freeing the memory (if needed).\n+Examples:\n+ * ex_memfile.c\n ****** al_get_allegro_memfile_version ******\n uint32_t al_get_allegro_memfile_version(void)\n Source_Code\n Returns the (compiled) version of the addon, in the same format as\n al_get_allegro_version.\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:27 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:59 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/memory.html", "source2": "./usr/share/doc/allegro5-doc/refman/memory.html", "unified_diff": "@@ -216,17 +216,17 @@\n

    See also: al_malloc, al_free_with_context

    \n

    Examples:

    \n
      \n
    • ex_clipboard.c
    • \n
    • ex_vertex_buffer.c
    • \n-
    • ex_record_name.c
    • \n+
    • ex_vertex_buffer.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@@ -323,12 +323,12 @@\n The context arguments may be used for debugging. The new functions\n should be thread safe.

    \n

    If the pointer is NULL, the default behaviour will be restored.

    \n

    See also: ALLEGRO_MEMORY_INTERFACE

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:19 UTC\n+ - Last updated: 2024-01-08 05:22:36 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -80,16 +80,16 @@\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 al_free for portability to Windows.\n This is a macro.\n See also: al_malloc, al_free_with_context\n Examples:\n * ex_clipboard.c\n- * ex_vertex_buffer.c\n * ex_record_name.c\n+ * ex_vertex_buffer.c\n ****** al_realloc ******\n #define al_realloc(p, n) \\\n (al_realloc_with_context((p), (n), __LINE__, __FILE__, __func__))\n Source_Code\n Like realloc() in the C standard library, but the implementation may be\n overridden.\n This is a macro.\n@@ -148,8 +148,8 @@\n Source_Code\n Override the memory management functions with implementations of\n al_malloc_with_context, al_free_with_context, al_realloc_with_context and\n al_calloc_with_context. The context arguments may be used for debugging. The\n new functions should be thread safe.\n If the pointer is NULL, the default behaviour will be restored.\n See also: ALLEGRO_MEMORY_INTERFACE\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:19 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:36 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/misc.html", "source2": "./usr/share/doc/allegro5-doc/refman/misc.html", "unified_diff": "@@ -198,12 +198,12 @@\n other system (like OSX) don\u2019t allow calling al_install_system in the main\n thread. al_run_main will know what to do in that case.

    \n

    The passed argc and argv will simply be passed on to user_main and\n the return value of user_main will be returned.

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:19 UTC\n+ - Last updated: 2024-01-08 05:22:36 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -66,8 +66,8 @@\n This function is useful in cases where you don\u00e2\u0080\u0099t 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 al_install_system. But\n some other system (like OSX) don\u00e2\u0080\u0099t allow calling al_install_system in the\n main thread. al_run_main will know what to do in that case.\n The passed argc and argv will simply be passed on to user_main and the return\n value of user_main will be returned.\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:19 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:36 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/monitor.html", "source2": "./usr/share/doc/allegro5-doc/refman/monitor.html", "unified_diff": "@@ -320,12 +320,12 @@\n API: This is an experimental feature and currently only works\n on Windows.

    \n \n

    See also: al_get_monitor_info

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:19 UTC\n+ - Last updated: 2024-01-08 05:22:38 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -133,8 +133,8 @@\n int al_get_monitor_refresh_rate(int adapter)\n Source_Code\n Returns the current refresh rate of a monitor attached to the display adapter.\n Since: 5.2.6\n Unstable_API: This is an experimental feature and currently only\n works on Windows.\n See also: al_get_monitor_info\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:19 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:38 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/mouse.html", "source2": "./usr/share/doc/allegro5-doc/refman/mouse.html", "unified_diff": "@@ -241,17 +241,17 @@\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
    • ex_font_justify.cpp
    • \n-
    • ex_mouse.c
    • \n+
    • ex_font_justify.cpp
    • \n
    \n

    al_is_mouse_installed

    \n
    bool al_is_mouse_installed(void)
    \n

    Source\n Code

    \n

    Returns true if Examples:

    \n
      \n
    • ex_display_events.c
    • \n
    • ex_mouse_warp.c
    • \n
    • ex_timer.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_noframe.c#L44\">ex_noframe.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@@ -634,12 +634,12 @@\n program.

    \n
    \n

    Note: not yet implemented on Mac OS X.

    \n
    \n

    See also: al_grab_mouse

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:19 UTC\n+ - Last updated: 2024-01-08 05:22:38 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -95,16 +95,16 @@\n bool al_install_mouse(void)\n Source_Code\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 * ex_mouse_focus.c\n- * ex_font_justify.cpp\n * ex_mouse.c\n+ * ex_font_justify.cpp\n ****** al_is_mouse_installed ******\n bool al_is_mouse_installed(void)\n Source_Code\n Returns true if al_install_mouse was called successfully.\n ****** al_uninstall_mouse ******\n void al_uninstall_mouse(void)\n Source_Code\n@@ -199,15 +199,15 @@\n Source_Code\n Retrieve the mouse event source. All mouse_events are generated by this event\n source.\n Returns NULL if the mouse subsystem was not installed.\n Examples:\n * ex_display_events.c\n * ex_mouse_warp.c\n- * ex_timer.c\n+ * ex_noframe.c\n ****** al_set_mouse_wheel_precision ******\n void al_set_mouse_wheel_precision(int precision)\n Source_Code\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 ALLEGRO_MOUSE_STATE, but not in a\n simple way if you alter the precision often, so it is suggested to reset those\n@@ -344,8 +344,8 @@\n See also: al_ungrab_mouse\n ***** al_ungrab_mouse *****\n bool al_ungrab_mouse(void)\n Source_Code\n Stop confining the mouse cursor to any display belonging to the program.\n Note: not yet implemented on Mac OS X.\n See also: al_grab_mouse\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:19 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:38 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/native_dialog.html", "source2": "./usr/share/doc/allegro5-doc/refman/native_dialog.html", "unified_diff": "@@ -236,20 +236,32 @@\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@@ -261,14 +273,23 @@\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@@ -348,53 +369,78 @@\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@@ -460,14 +506,23 @@\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@@ -491,37 +546,58 @@\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@@ -534,14 +610,23 @@\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@@ -638,14 +728,19 @@\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@@ -663,14 +758,19 @@\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@@ -679,28 +779,38 @@\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@@ -751,48 +861,68 @@\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@@ -807,41 +937,56 @@\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@@ -883,26 +1028,36 @@\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@@ -929,14 +1084,19 @@\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@@ -991,14 +1151,19 @@\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.8\n- - Last updated: 2025-02-09 11:25:27 UTC\n+ - Last updated: 2024-01-08 05:23:01 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -94,30 +94,39 @@\n These functions are declared in the following header file. Link with\n allegro_dialog.\n #include \n ****** ALLEGRO_FILECHOOSER ******\n typedef struct ALLEGRO_FILECHOOSER ALLEGRO_FILECHOOSER;\n Source_Code\n Opaque handle to a native file dialog.\n+Examples:\n+ * ex_native_filechooser.c\n ****** ALLEGRO_TEXTLOG ******\n typedef struct ALLEGRO_TEXTLOG ALLEGRO_TEXTLOG;\n Source_Code\n Opaque handle to a text log window.\n+Examples:\n+ * common.c\n+ * ex_native_filechooser.c\n ****** al_init_native_dialog_addon ******\n bool al_init_native_dialog_addon(void)\n Source_Code\n Initialise the native dialog addon.\n Returns true on success, false on error.\n Since: 5.0.9, 5.1.0\n Note: 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 al_show_native_message_box, which may be useful to show an error\n message if Allegro fails to initialise.\n See also: al_shutdown_native_dialog_addon\n+Examples:\n+ * common.c\n+ * ex_window_maximized.c\n+ * ex_menu.c\n ****** al_is_native_dialog_addon_initialized ******\n bool al_is_native_dialog_addon_initialized(void)\n Source_Code\n Returns true if the native dialog addon is initialized, otherwise returns\n false.\n Since: 5.2.6\n ****** al_shutdown_native_dialog_addon ******\n@@ -165,37 +174,47 @@\n If supported, allow selecting multiple files.\n Returns:\n A handle to the dialog which you can pass to al_show_native_file_dialog to\n display it, and from which you then can query the results using\n al_get_native_file_dialog_count and al_get_native_file_dialog_path. When you\n are done, call al_destroy_native_file_dialog on it.\n If a dialog window could not be created then this function returns NULL.\n+Examples:\n+ * ex_native_filechooser.c\n ****** al_show_native_file_dialog ******\n bool al_show_native_file_dialog(ALLEGRO_DISPLAY *display,\n ALLEGRO_FILECHOOSER *dialog)\n Source_Code\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 al_create_thread and call it from inside that thread.\n Returns true on success, false on failure.\n+Examples:\n+ * ex_native_filechooser.c\n ****** al_get_native_file_dialog_count ******\n int al_get_native_file_dialog_count(const ALLEGRO_FILECHOOSER *dialog)\n Source_Code\n Returns the number of files selected, or 0 if the dialog was cancelled.\n+Examples:\n+ * ex_native_filechooser.c\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_Code\n Returns one of the selected paths with index i. The index should range from 0\n to the return value of al_get_native_file_dialog_count -1.\n+Examples:\n+ * ex_native_filechooser.c\n ****** al_destroy_native_file_dialog ******\n void al_destroy_native_file_dialog(ALLEGRO_FILECHOOSER *dialog)\n Source_Code\n Frees up all resources used by the file dialog.\n+Examples:\n+ * ex_native_filechooser.c\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_Code\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@@ -238,14 +257,18 @@\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+ * ex_nodisplay.c\n+ * common.c\n+ * ex_menu.c\n ****** al_open_native_text_log ******\n ALLEGRO_TEXTLOG *al_open_native_text_log(char const *title, int flags)\n Source_Code\n Opens a window to which you can append log messages with\n al_append_native_text_log. This can be useful for debugging if you don\u00e2\u0080\u0099t want\n to depend on a console being available.\n Use al_close_native_text_log to close the window again.\n@@ -255,40 +278,53 @@\n button is pressed, an event is generated; see\n al_get_native_text_log_event_source.\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: al_append_native_text_log, al_close_native_text_log\n+Examples:\n+ * common.c\n+ * ex_native_filechooser.c\n ****** al_close_native_text_log ******\n void al_close_native_text_log(ALLEGRO_TEXTLOG *textlog)\n Source_Code\n Closes a message log window opened with al_open_native_text_log earlier.\n Does nothing if passed NULL.\n See also: al_open_native_text_log\n+Examples:\n+ * common.c\n+ * ex_native_filechooser.c\n ****** al_append_native_text_log ******\n void al_append_native_text_log(ALLEGRO_TEXTLOG *textlog,\n char const *format, ...)\n Source_Code\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+ * common.c\n+ * ex_native_filechooser.c\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_Code\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 ALLEGRO_TEXTLOG 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+ * common.c\n+ * ex_saw.c\n+ * ex_resample_test.c\n ****** al_get_allegro_native_dialog_version ******\n uint32_t al_get_allegro_native_dialog_version(void)\n Source_Code\n Returns the (compiled) version of the addon, in the same format as\n al_get_allegro_version.\n ****** Menus ******\n Menus are implemented on Windows, X and OS X. Menus on X are implemented with\n@@ -337,14 +373,16 @@\n al_set_display_menu(display, NULL) before destroying any display with a menu\n attached, to avoid leaking resources.\n ***** ALLEGRO_MENU *****\n typedef struct ALLEGRO_MENU ALLEGRO_MENU;\n Source_Code\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+ * ex_menu.c\n ***** ALLEGRO_MENU_INFO *****\n typedef struct ALLEGRO_MENU_INFO {\n Source_Code\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@@ -370,14 +408,16 @@\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 al_create_menu and al_insert_menu_item.\n See also: al_build_menu\n+Examples:\n+ * ex_menu.c\n ***** al_create_menu *****\n ALLEGRO_MENU *al_create_menu(void)\n Source_Code\n Creates a menu container that can hold menu items.\n Returns NULL on failure.\n Since: 5.1.0\n See also: al_create_popup_menu, al_build_menu\n@@ -386,32 +426,38 @@\n Source_Code\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 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+ * ex_menu.c\n ***** al_build_menu *****\n ALLEGRO_MENU *al_build_menu(ALLEGRO_MENU_INFO *info)\n Source_Code\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 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+ * ex_menu.c\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_Code\n Appends a menu item to the end of the menu. See al_insert_menu_item for more\n information.\n Since: 5.1.0\n See also: al_insert_menu_item, al_remove_menu_item\n+Examples:\n+ * ex_menu.c\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_Code\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@@ -439,36 +485,44 @@\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 al_clone_menu.\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: al_append_menu_item, al_insert_menu_item, al_destroy_menu\n+Examples:\n+ * ex_menu.c\n ***** al_clone_menu *****\n ALLEGRO_MENU *al_clone_menu(ALLEGRO_MENU *menu)\n Source_Code\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: al_clone_menu_for_popup\n+Examples:\n+ * ex_menu.c\n ***** al_clone_menu_for_popup *****\n ALLEGRO_MENU *al_clone_menu_for_popup(ALLEGRO_MENU *menu)\n Source_Code\n Exactly like al_clone_menu, except that the copy is for a popup menu.\n Since: 5.1.0\n See also: al_clone_menu\n+Examples:\n+ * ex_menu.c\n ***** al_destroy_menu *****\n void al_destroy_menu(ALLEGRO_MENU *menu)\n Source_Code\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: al_remove_menu_item\n+Examples:\n+ * ex_menu.c\n ***** al_get_menu_item_caption *****\n const char *al_get_menu_item_caption(ALLEGRO_MENU *menu, int pos)\n Source_Code\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@@ -476,29 +530,35 @@\n ***** al_set_menu_item_caption *****\n void al_set_menu_item_caption(ALLEGRO_MENU *menu, int pos, const char *caption)\n Source_Code\n Updates the menu item caption with the new caption. This will invalidate any\n previous calls to al_get_menu_item_caption.\n Since: 5.1.0\n See also: al_get_menu_item_caption\n+Examples:\n+ * ex_menu.c\n ***** al_get_menu_item_flags *****\n int al_get_menu_item_flags(ALLEGRO_MENU *menu, int pos)\n Source_Code\n Returns the currently set flags. See al_insert_menu_item 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: al_set_menu_item_flags, al_toggle_menu_item_flags\n+Examples:\n+ * ex_menu.c\n ***** al_set_menu_item_flags *****\n void al_set_menu_item_flags(ALLEGRO_MENU *menu, int pos, int flags)\n Source_Code\n Updates the menu item\u00e2\u0080\u0099s flags. See al_insert_menu_item for a description of\n the available flags.\n Since: 5.1.0\n See also: al_get_menu_item_flags, al_toggle_menu_item_flags\n+Examples:\n+ * ex_menu.c\n ***** al_toggle_menu_item_flags *****\n int al_toggle_menu_item_flags(ALLEGRO_MENU *menu, int pos, int flags)\n Source_Code\n Toggles the specified menu item\u00e2\u0080\u0099s flags. See al_insert_menu_item 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@@ -521,22 +581,26 @@\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: al_get_menu_item_icon, al_clone_bitmap\n+Examples:\n+ * ex_menu.c\n ***** al_find_menu *****\n ALLEGRO_MENU *al_find_menu(ALLEGRO_MENU *haystack, uint16_t id)\n Source_Code\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: al_find_menu_item\n+Examples:\n+ * ex_menu.c\n ***** al_find_menu_item *****\n bool al_find_menu_item(ALLEGRO_MENU *haystack, uint16_t id, ALLEGRO_MENU\n **menu,\n int *index)\n Source_Code\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@@ -551,14 +615,16 @@\n Source_Code\n Returns the default event source used for menu clicks. If a menu was not given\n its own event source via al_enable_menu_event_source, then it will use this\n default source.\n Since: 5.1.0\n See also: al_register_event_source, al_enable_menu_event_source,\n al_disable_menu_event_source\n+Examples:\n+ * ex_menu.c\n ***** al_enable_menu_event_source *****\n ALLEGRO_EVENT_SOURCE *al_enable_menu_event_source(ALLEGRO_MENU *menu)\n Source_Code\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@@ -590,14 +656,16 @@\n Note: 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\u00e2\u0080\u0099s prior size.\n Returns true if successful.\n Since: 5.1.0\n See also: al_create_menu, al_remove_display_menu\n+Examples:\n+ * ex_menu.c\n ***** al_popup_menu *****\n bool al_popup_menu(ALLEGRO_MENU *popup, ALLEGRO_DISPLAY *display)\n Source_Code\n Displays a context menu next to the mouse cursor. The menu must have been\n created with al_create_popup_menu. 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@@ -607,17 +675,21 @@\n Returns true if the context menu was displayed.\n Note: 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: al_create_popup_menu\n+Examples:\n+ * ex_menu.c\n ***** al_remove_display_menu *****\n ALLEGRO_MENU *al_remove_display_menu(ALLEGRO_DISPLAY *display)\n Source_Code\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 al_set_display_menu\n with a NULL menu.\n Since: 5.1.0\n See also: al_set_display_menu\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:27 UTC\n+Examples:\n+ * ex_menu.c\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:23:01 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/opengl.html", "source2": "./usr/share/doc/allegro5-doc/refman/opengl.html", "unified_diff": "@@ -417,12 +417,12 @@\n GL_ARB_texture_non_power_of_two=0\n GL_EXT_framebuffer_object=0\n

    Any extension which appears in the section is treated as not\n available (it does not matter if you set it to 0 or any other\n value).

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:25 UTC\n+ - Last updated: 2024-01-08 05:22:49 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -214,8 +214,8 @@\n You can disable the detection of any OpenGL extension by Allegro with a section\n like this in allegro5.cfg:\n [opengl_disabled_extensions]\n GL_ARB_texture_non_power_of_two=0\n GL_EXT_framebuffer_object=0\n Any extension which appears in the section is treated as not available (it does\n not matter if you set it to 0 or any other value).\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:25 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:49 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/path.html", "source2": "./usr/share/doc/allegro5-doc/refman/path.html", "unified_diff": "@@ -625,12 +625,12 @@\n
  • ex_path.c
  • \n
  • ex_path_test.c
  • \n \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:19 UTC\n+ - Last updated: 2024-01-08 05:22:39 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -323,8 +323,8 @@\n Note that this does not collapse \u00e2\u0080\u009cx/../y\u00e2\u0080\u009d sections into \u00e2\u0080\u009cy\u00e2\u0080\u009d. This is by\n design. If \u00e2\u0080\u009c/foo\u00e2\u0080\u009d on your system is a symlink to \u00e2\u0080\u009c/bar/baz\u00e2\u0080\u009d, then \u00e2\u0080\u009c/\n foo/../quux\u00e2\u0080\u009d is actually \u00e2\u0080\u009c/bar/quux\u00e2\u0080\u009d, not \u00e2\u0080\u009c/quux\u00e2\u0080\u009d as a naive removal\n of \u00e2\u0080\u009c..\u00e2\u0080\u009d components would give you.\n Examples:\n * ex_path.c\n * ex_path_test.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:19 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:39 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/physfs.html", "source2": "./usr/share/doc/allegro5-doc/refman/physfs.html", "unified_diff": "@@ -215,22 +215,27 @@\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_allegro_version.

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:28 UTC\n+ - Last updated: 2024-01-08 05:23:01 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -74,13 +74,15 @@\n al_restore_state.\n Note: due to an oversight, this function differs from\n al_set_new_file_interface and al_set_standard_file_interface which\n only alter the current ALLEGRO_FILE_INTERFACE.\n Note: PhysFS does not support the text-mode reading and writing,\n which means that Windows-style newlines will not be preserved.\n See also: al_set_new_file_interface.\n+Examples:\n+ * ex_physfs.c\n ****** al_get_allegro_physfs_version ******\n uint32_t al_get_allegro_physfs_version(void)\n Source_Code\n Returns the (compiled) version of the addon, in the same format as\n al_get_allegro_version.\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:28 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:23:01 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/platform.html", "source2": "./usr/share/doc/allegro5-doc/refman/platform.html", "unified_diff": "@@ -412,12 +412,12 @@\n

    Examples:

    \n
      \n
    • ex_icon2.c
    • \n
    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:23 UTC\n+ - Last updated: 2024-01-08 05:22:47 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -203,8 +203,8 @@\n doesn\u00e2\u0080\u0099t work and you need to use a .desktop file. But with this function you\n can set an icon before calling al_create_display. This works by setting the\n icon before XMapWindow.\n Since: 5.2.3\n Unstable_API: New API.\n Examples:\n * ex_icon2.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:23 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:47 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/primitives.html", "source2": "./usr/share/doc/allegro5-doc/refman/primitives.html", "unified_diff": "@@ -283,14 +283,23 @@\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@@ -414,14 +423,23 @@\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@@ -432,28 +450,38 @@\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@@ -465,14 +493,23 @@\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@@ -481,14 +518,23 @@\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@@ -500,14 +546,23 @@\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@@ -519,14 +574,23 @@\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@@ -587,14 +651,19 @@\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@@ -609,14 +678,19 @@\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@@ -629,14 +703,19 @@\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@@ -647,14 +726,21 @@\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@@ -663,14 +749,21 @@\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@@ -681,14 +774,21 @@\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@@ -696,14 +796,23 @@\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@@ -718,14 +827,19 @@\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@@ -741,14 +855,19 @@\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, 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@@ -783,14 +902,19 @@\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@@ -893,14 +1017,23 @@\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_camera.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@@ -921,14 +1054,21 @@\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@@ -948,14 +1088,21 @@\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@@ -981,14 +1128,19 @@\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@@ -1073,14 +1225,21 @@\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@@ -1088,14 +1247,19 @@\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@@ -1123,25 +1287,39 @@\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@@ -1156,25 +1334,39 @@\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@@ -1209,24 +1401,34 @@\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@@ -1240,24 +1442,34 @@\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@@ -1305,14 +1517,19 @@\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@@ -1330,14 +1547,19 @@\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@@ -1349,14 +1571,19 @@\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@@ -1399,14 +1626,19 @@\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@@ -1450,28 +1682,44 @@\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@@ -1506,14 +1754,21 @@\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@@ -1688,14 +1943,19 @@\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@@ -1713,39 +1973,56 @@\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@@ -1763,11 +2040,14 @@\n al_create_index_buffer the call will fail.

          \n
        \n

        Since: 5.1.3

        \n

        See also: al_create_vertex_buffer,\n al_create_index_buffer

        \n-\n+

        \n+Allegro version 5.2.8\n+ - Last updated: 2024-01-08 05:23:03 UTC\n+

        \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -127,14 +127,18 @@\n al_get_allegro_version.\n ***** al_init_primitives_addon *****\n bool al_init_primitives_addon(void)\n Source_Code\n Initializes the primitives addon.\n Returns: True on success, false on failure.\n See also: al_shutdown_primitives_addon\n+Examples:\n+ * ex_touch_input.c\n+ * ex_blend_bench.c\n+ * ex_enet_client.c\n ***** al_is_primitives_addon_initialized *****\n bool al_is_primitives_addon_initialized(void)\n Source_Code\n Returns true if the primitives addon is initialized, otherwise returns false.\n Since: 5.2.6\n See also: al_init_primitives_addon, al_shutdown_primitives_addon\n ***** al_shutdown_primitives_addon *****\n@@ -229,73 +233,97 @@\n Source_Code\n Draws a line segment between two points.\n Parameters:\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: al_draw_soft_line\n+Examples:\n+ * ex_font_justify.cpp\n+ * ex_resize.c\n+ * ex_mouse_warp.c\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_Code\n Draws an outlined triangle.\n Parameters:\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: al_draw_filled_triangle, al_draw_soft_triangle\n+Examples:\n+ * ex_prim.c\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_Code\n Draws a filled triangle.\n Parameters:\n * x1, y1, x2, y2, x3, y3 - Three points of the triangle\n * color - Color of the triangle\n See also: al_draw_triangle\n+Examples:\n+ * ex_prim.c\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_Code\n Draws an outlined rectangle.\n Parameters:\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: al_draw_filled_rectangle, al_draw_rounded_rectangle\n+Examples:\n+ * ex_mouse.c\n+ * ex_font_justify.cpp\n+ * ex_subbitmap.c\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_Code\n Draws a filled rectangle.\n Parameters:\n * x1, y1, x2, y2 - Upper left and lower right points of the rectangle\n * color - Color of the rectangle\n See also: al_draw_rectangle, al_draw_filled_rounded_rectangle\n+Examples:\n+ * ex_mouse.c\n+ * ex_timer.c\n+ * ex_window_maximized.c\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_Code\n Draws an outlined rounded rectangle.\n Parameters:\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: al_draw_filled_rounded_rectangle, al_draw_rectangle\n+Examples:\n+ * ex_threads.c\n+ * ex_prim.c\n+ * ex_audio_chain.cpp\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_Code\n Draws an filled rounded rectangle.\n Parameters:\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: al_draw_rounded_rectangle, al_draw_filled_rectangle\n+Examples:\n+ * ex_threads.c\n+ * ex_video.c\n+ * ex_prim.c\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_Code\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@@ -347,14 +375,16 @@\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: al_draw_arc, al_calculate_spline, al_calculate_ribbon\n+Examples:\n+ * ex_vertex_buffer.c\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_Code\n Draws a pieslice (outlined circular sector).\n Parameters:\n * cx, cy - Center of the pieslice\n@@ -363,14 +393,16 @@\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: al_draw_filled_pieslice\n+Examples:\n+ * ex_prim.c\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_Code\n Draws a filled pieslice (filled circular sector).\n Parameters:\n * cx, cy - Center of the pieslice\n@@ -378,56 +410,71 @@\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: al_draw_pieslice\n+Examples:\n+ * ex_prim.c\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_Code\n Draws an outlined ellipse.\n Parameters:\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: al_draw_filled_ellipse, al_draw_circle\n+Examples:\n+ * ex_draw.c\n+ * ex_prim.c\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_Code\n Draws a filled ellipse.\n Parameters:\n * cx, cy - Center of the ellipse\n * rx, ry - Radii of the ellipse\n * color - Color of the ellipse\n See also: al_draw_ellipse, al_draw_filled_circle\n+Examples:\n+ * ex_draw.c\n+ * ex_prim.c\n ***** al_draw_circle *****\n void al_draw_circle(float cx, float cy, float r, ALLEGRO_COLOR color,\n float thickness)\n Source_Code\n Draws an outlined circle.\n Parameters:\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: al_draw_filled_circle, al_draw_ellipse\n+Examples:\n+ * ex_touch_input.c\n+ * ex_transform.c\n ***** al_draw_filled_circle *****\n void al_draw_filled_circle(float cx, float cy, float r, ALLEGRO_COLOR color)\n Source_Code\n Draws a filled circle.\n Parameters:\n * cx, cy - Center of the circle\n * r - Radius of the circle\n * color - Color of the circle\n See also: al_draw_circle, al_draw_filled_ellipse\n+Examples:\n+ * ex_enet_client.c\n+ * ex_joystick_hotplugging.c\n+ * ex_blend2.cpp\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_Code\n Draws an arc.\n Parameters:\n * cx, cy - Center of the arc\n@@ -435,14 +482,16 @@\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: al_calculate_arc, al_draw_elliptical_arc\n+Examples:\n+ * ex_prim.c\n ***** al_draw_elliptical_arc *****\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 Source_Code\n Draws an elliptical arc.\n Parameters:\n@@ -452,14 +501,16 @@\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: al_calculate_arc, al_draw_arc\n+Examples:\n+ * ex_prim.c\n ***** al_calculate_spline *****\n void al_calculate_spline(float* dest, int stride, float points[8],\n float thickness, int num_segments)\n Source_Code\n Calculates a B\u00c3\u00a9zier 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@@ -478,14 +529,16 @@\n Source_Code\n Draws a B\u00c3\u00a9zier spline given 4 control points.\n Parameters:\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: al_calculate_spline\n+Examples:\n+ * ex_prim.c\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_Code\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@@ -559,14 +612,18 @@\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: ALLEGRO_VERTEX, ALLEGRO_PRIM_TYPE, ALLEGRO_VERTEX_DECL,\n al_draw_indexed_prim\n+Examples:\n+ * ex_prim_shader.c\n+ * ex_vertex_buffer.c\n+ * ex_camera.c\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_Code\n Draws a subset of the passed vertex array. This function uses an index array to\n specify which vertices to use.\n Parameters:\n@@ -576,14 +633,17 @@\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 ALLEGRO_PRIM_TYPE enumeration, specifying what\n kind of primitive to draw\n Returns: Number of primitives drawn\n See also: ALLEGRO_VERTEX, ALLEGRO_PRIM_TYPE, ALLEGRO_VERTEX_DECL, al_draw_prim\n+Examples:\n+ * ex_projection2.c\n+ * ex_prim.c\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_Code\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.\u00c2\u00a0 it must be created with\n@@ -594,14 +654,17 @@\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 ALLEGRO_PRIM_TYPE enumeration, specifying what\n kind of primitive to draw\n Returns: Number of primitives drawn\n Since: 5.1.3\n See also: ALLEGRO_VERTEX_BUFFER, ALLEGRO_PRIM_TYPE\n+Examples:\n+ * ex_vertex_buffer.c\n+ * ex_prim.c\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_Code\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@@ -616,14 +679,16 @@\n * end - One past the last index of the subset of the vertex buffer to draw\n * type - A member of the ALLEGRO_PRIM_TYPE 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 Returns: Number of primitives drawn\n Since: 5.1.8\n See also: ALLEGRO_VERTEX_BUFFER, ALLEGRO_INDEX_BUFFER, ALLEGRO_PRIM_TYPE\n+Examples:\n+ * ex_prim.c\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@@ -687,21 +752,26 @@\n Source_Code\n Creates a vertex declaration, which describes a custom vertex format.\n Parameters:\n * elements - An array of ALLEGRO_VERTEX_ELEMENT structures.\n * stride - Size of the custom vertex structure\n Returns: Newly created vertex declaration.\n See also: ALLEGRO_VERTEX_ELEMENT, ALLEGRO_VERTEX_DECL, al_destroy_vertex_decl\n+Examples:\n+ * ex_prim_shader.c\n+ * ex_prim.c\n ***** al_destroy_vertex_decl *****\n void al_destroy_vertex_decl(ALLEGRO_VERTEX_DECL* decl)\n Source_Code\n Destroys a vertex declaration.\n Parameters:\n * decl - Vertex declaration to destroy\n See also: ALLEGRO_VERTEX_ELEMENT, ALLEGRO_VERTEX_DECL, al_create_vertex_decl\n+Examples:\n+ * ex_prim_shader.c\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_Code\n Creates a vertex buffer. Can return NULL if the buffer could not be created\n (e.g.\u00c2\u00a0the system only supports write-only buffers).\n@@ -717,20 +787,26 @@\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 ALLEGRO_PRIM_BUFFER_FLAGS 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: ALLEGRO_VERTEX_BUFFER, al_destroy_vertex_buffer\n+Examples:\n+ * ex_vertex_buffer.c\n+ * ex_prim.c\n ***** al_destroy_vertex_buffer *****\n void al_destroy_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer)\n Source_Code\n Destroys a vertex buffer. Does nothing if passed NULL.\n Since: 5.1.3\n See also: ALLEGRO_VERTEX_BUFFER, al_create_vertex_buffer\n+Examples:\n+ * ex_vertex_buffer.c\n+ * ex_prim.c\n ***** al_lock_vertex_buffer *****\n void* al_lock_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer, int offset,\n int length, int flags)\n Source_Code\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@@ -738,20 +814,26 @@\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: ALLEGRO_VERTEX_BUFFER, al_unlock_vertex_buffer\n+Examples:\n+ * ex_vertex_buffer.c\n+ * ex_prim.c\n ***** al_unlock_vertex_buffer *****\n void al_unlock_vertex_buffer(ALLEGRO_VERTEX_BUFFER* buffer)\n Source_Code\n Unlocks a previously locked vertex buffer.\n Since: 5.1.3\n See also: ALLEGRO_VERTEX_BUFFER, al_lock_vertex_buffer\n+Examples:\n+ * ex_vertex_buffer.c\n+ * ex_prim.c\n ***** al_get_vertex_buffer_size *****\n int al_get_vertex_buffer_size(ALLEGRO_VERTEX_BUFFER* buffer)\n Source_Code\n Returns the size of the vertex buffer\n Since: 5.1.8\n See also: ALLEGRO_VERTEX_BUFFER\n ****** Index buffer routines ******\n@@ -773,20 +855,24 @@\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 ALLEGRO_PRIM_BUFFER_FLAGS 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: ALLEGRO_INDEX_BUFFER, al_destroy_index_buffer\n+Examples:\n+ * ex_prim.c\n ***** al_destroy_index_buffer *****\n void al_destroy_index_buffer(ALLEGRO_INDEX_BUFFER* buffer)\n Source_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+ * ex_prim.c\n ***** al_lock_index_buffer *****\n void* al_lock_index_buffer(ALLEGRO_INDEX_BUFFER* buffer, int offset,\n int length, int flags)\n Source_Code\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@@ -794,20 +880,24 @@\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: ALLEGRO_INDEX_BUFFER, al_unlock_index_buffer\n+Examples:\n+ * ex_prim.c\n ***** al_unlock_index_buffer *****\n void al_unlock_index_buffer(ALLEGRO_INDEX_BUFFER* buffer)\n Source_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+ * ex_prim.c\n ***** al_get_index_buffer_size *****\n int al_get_index_buffer_size(ALLEGRO_INDEX_BUFFER* buffer)\n Source_Code\n Returns the size of the index buffer\n Since: 5.1.8\n See also: ALLEGRO_INDEX_BUFFER\n ****** Polygon routines ******\n@@ -840,14 +930,16 @@\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: al_draw_polygon, ALLEGRO_LINE_JOIN, ALLEGRO_LINE_CAP\n+Examples:\n+ * ex_polygon.c\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_Code\n Draw an unfilled polygon. This is the same as passing ALLEGRO_LINE_CAP_CLOSED\n to al_draw_polyline.\n * vertex - Interleaved array of (x, y) vertex coordinates\n@@ -855,27 +947,31 @@\n * join_style - Member of ALLEGRO_LINE_JOIN 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: al_draw_filled_polygon, al_draw_polyline, ALLEGRO_LINE_JOIN\n+Examples:\n+ * ex_polygon.c\n ***** al_draw_filled_polygon *****\n void al_draw_filled_polygon(const float *vertices, int vertex_count,\n ALLEGRO_COLOR color)\n Source_Code\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: al_draw_polygon, al_draw_filled_polygon_with_holes\n+Examples:\n+ * ex_polygon.c\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_Code\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@@ -908,14 +1004,16 @@\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: al_draw_filled_polygon, al_draw_filled_polygon_with_holes,\n al_triangulate_polygon\n+Examples:\n+ * ex_polygon.c\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_Code\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@@ -947,21 +1045,28 @@\n you\u00e2\u0080\u0099re using it. One exception to this rule are the u and v variables which\n can be left uninitialized when you are not using textures.\n Fields:\n * x, y, z - Position of the vertex (float)\n * u, v - Texture coordinates measured in pixels (float)\n * color - ALLEGRO_COLOR structure, storing the color of the vertex\n See also: ALLEGRO_PRIM_ATTR\n+Examples:\n+ * ex_shader.cpp\n+ * ex_shader_target.c\n+ * ex_prim_shader.c\n ***** ALLEGRO_VERTEX_DECL *****\n typedef struct ALLEGRO_VERTEX_DECL ALLEGRO_VERTEX_DECL;\n Source_Code\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: al_create_vertex_decl, al_destroy_vertex_decl, ALLEGRO_VERTEX_ELEMENT\n+Examples:\n+ * ex_prim_shader.c\n+ * ex_prim.c\n ***** ALLEGRO_VERTEX_ELEMENT *****\n typedef struct ALLEGRO_VERTEX_ELEMENT ALLEGRO_VERTEX_ELEMENT;\n Source_Code\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 al_create_vertex_decl 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@@ -986,14 +1091,17 @@\n what this attribute signifies\n * storage - A member of the ALLEGRO_PRIM_STORAGE 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: al_create_vertex_decl, ALLEGRO_VERTEX_DECL, ALLEGRO_PRIM_ATTR,\n ALLEGRO_PRIM_STORAGE\n+Examples:\n+ * ex_prim_shader.c\n+ * ex_prim.c\n ***** ALLEGRO_PRIM_TYPE *****\n typedef enum ALLEGRO_PRIM_TYPE\n Source_Code\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@@ -1127,14 +1235,16 @@\n * ALLEGRO_LINE_JOIN_MITER\n [ALLEGRO_LINE_JOIN styles] ALLEGRO_LINE_JOIN styles\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: al_draw_polygon\n+Examples:\n+ * ex_polygon.c\n ***** ALLEGRO_LINE_CAP *****\n typedef enum ALLEGRO_LINE_CAP\n Source_Code\n * ALLEGRO_LINE_CAP_NONE\n * ALLEGRO_LINE_CAP_SQUARE\n * ALLEGRO_LINE_CAP_ROUND\n * ALLEGRO_LINE_CAP_TRIANGLE\n@@ -1142,29 +1252,36 @@\n [ALLEGRO_LINE_CAP styles] ALLEGRO_LINE_CAP styles\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 ALLEGRO_LINE_JOIN style will determine how the vertex\n looks.)\n Since: 5.1.0\n See also: al_draw_polygon\n+Examples:\n+ * ex_polygon.c\n ***** ALLEGRO_VERTEX_BUFFER *****\n typedef struct ALLEGRO_VERTEX_BUFFER ALLEGRO_VERTEX_BUFFER;\n Source_Code\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: al_create_vertex_buffer, al_destroy_vertex_buffer\n+Examples:\n+ * ex_vertex_buffer.c\n+ * ex_prim.c\n ***** ALLEGRO_INDEX_BUFFER *****\n typedef struct ALLEGRO_INDEX_BUFFER ALLEGRO_INDEX_BUFFER;\n Source_Code\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: al_create_index_buffer, al_destroy_index_buffer\n+Examples:\n+ * ex_prim.c\n ***** ALLEGRO_PRIM_BUFFER_FLAGS *****\n typedef enum ALLEGRO_PRIM_BUFFER_FLAGS\n Source_Code\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@@ -1174,7 +1291,8 @@\n * ALLEGRO_PRIM_BUFFER_READWRITE - Specifies that you want to be able read\n from this buffer. By default this is disabled for performance. Some\n platforms (like OpenGL ES) do not support reading from vertex buffers, so\n if you pass this flag to al_create_vertex_buffer or\n al_create_index_buffer the call will fail.\n Since: 5.1.3\n See also: al_create_vertex_buffer, al_create_index_buffer\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:23:03 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/shader.html", "source2": "./usr/share/doc/allegro5-doc/refman/shader.html", "unified_diff": "@@ -782,12 +782,12 @@\n
      • ex_palette.c
      • \n
      • ex_prim_wrap.c
      • \n
      \n

      \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:29 UTC\n+ - Last updated: 2024-01-08 05:23:04 UTC\n

      \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -427,8 +427,8 @@\n the selected platform.\n Since: 5.1.6\n See also: al_attach_shader_source\n Examples:\n * ex_shader_multitex.c\n * ex_palette.c\n * ex_prim_wrap.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:29 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:23:04 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/state.html", "source2": "./usr/share/doc/allegro5-doc/refman/state.html", "unified_diff": "@@ -307,12 +307,12 @@\n
    • ex_curl.c
    • \n
    • ex_utf8.c
    • \n
    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:20 UTC\n+ - Last updated: 2024-01-08 05:22:40 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -138,8 +138,8 @@\n void al_set_errno(int errnum)\n SETTER(allegro_errno, errnum)\n Source_Code\n Set the error number for the calling thread.\n Examples:\n * ex_curl.c\n * ex_utf8.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:20 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:40 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/system.html", "source2": "./usr/share/doc/allegro5-doc/refman/system.html", "unified_diff": "@@ -812,12 +812,12 @@\n
  • ALLEGRO_SYSTEM_ID_SDL - SDL
  • \n \n

    Since: 5.2.5

    \n

    See also: al_get_system_id

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:21 UTC\n+ - Last updated: 2024-01-08 05:22:40 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -567,8 +567,8 @@\n * ALLEGRO_SYSTEM_ID_ANDROID - Android\n * ALLEGRO_SYSTEM_ID_IPHONE - iOS\n * ALLEGRO_SYSTEM_ID_GP2XWIZ - GP2XWIZ\n * ALLEGRO_SYSTEM_ID_RASPBERRYPI - Raspberry Pi\n * ALLEGRO_SYSTEM_ID_SDL - SDL\n Since: 5.2.5\n See also: al_get_system_id\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:21 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:40 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/threads.html", "source2": "./usr/share/doc/allegro5-doc/refman/threads.html", "unified_diff": "@@ -208,17 +208,17 @@\n Code

    \n

    An opaque structure representing a thread.

    \n

    Examples:

    \n
      \n
    • ex_threads.c
    • \n
    • ex_native_filechooser.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@@ -254,17 +254,17 @@\n

    See also: al_start_thread,\n al_join_thread.

    \n

    Examples:

    \n
      \n
    • ex_threads.c
    • \n
    • ex_native_filechooser.c
    • \n-
    • ex_threads2.c
    • \n+
    • ex_loading_thread.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@@ -294,17 +294,17 @@\n

    See also: al_create_thread.

    \n

    Examples:

    \n
      \n
    • ex_threads.c
    • \n
    • ex_native_filechooser.c
    • \n-
    • ex_threads2.c
    • \n+
    • ex_loading_thread.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 See also: al_join_thread.

    \n

    Examples:

    \n
      \n
    • ex_threads.c
    • \n
    • ex_native_filechooser.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@@ -582,12 +582,12 @@\n href=\"threads.html#al_broadcast_cond\">al_broadcast_cond but al_signal_cond may be more\n efficient when it\u2019s applicable.

    \n

    See also: al_broadcast_cond.

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:22 UTC\n+ - Last updated: 2024-01-08 05:22:40 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -80,16 +80,16 @@\n #include \n ****** ALLEGRO_THREAD ******\n typedef struct ALLEGRO_THREAD ALLEGRO_THREAD;\n Source_Code\n An opaque structure representing a thread.\n Examples:\n * ex_threads.c\n- * ex_native_filechooser.c\n * ex_threads2.c\n+ * ex_loading_thread.c\n ****** ALLEGRO_MUTEX ******\n typedef struct ALLEGRO_MUTEX ALLEGRO_MUTEX;\n Source_Code\n An opaque structure representing a mutex.\n Examples:\n * ex_threads2.c\n * ex_loading_thread.c\n@@ -106,16 +106,16 @@\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: al_start_thread, al_join_thread.\n Examples:\n * ex_threads.c\n- * ex_native_filechooser.c\n * ex_threads2.c\n+ * ex_loading_thread.c\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\n stacksize)\n Source_Code\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@@ -130,16 +130,16 @@\n Source_Code\n When a thread is created, it is initially in a suspended state. Calling\n al_start_thread will start its actual execution.\n Starting a thread which has already been started does nothing.\n See also: al_create_thread.\n Examples:\n * ex_threads.c\n- * ex_native_filechooser.c\n * ex_threads2.c\n+ * ex_loading_thread.c\n ****** al_join_thread ******\n void al_join_thread(ALLEGRO_THREAD *thread, void **ret_value)\n Source_Code\n Wait for the thread to finish executing. This implicitly calls\n al_set_thread_should_stop 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@@ -173,16 +173,16 @@\n Source_Code\n Free the resources used by a thread. Implicitly performs al_join_thread on the\n thread if it hasn\u00e2\u0080\u0099t been done already.\n Does nothing if thread is NULL.\n See also: al_join_thread.\n Examples:\n * ex_threads.c\n- * ex_native_filechooser.c\n * ex_threads2.c\n+ * ex_native_filechooser.c\n ****** al_run_detached_thread ******\n void al_run_detached_thread(void *(*proc)(void *arg), void *arg)\n Source_Code\n Runs the passed function in its own thread, with arg passed to it as only\n parameter. This is similar to calling al_create_thread, al_start_thread and\n (after the thread has finished) al_destroy_thread - but you don\u00e2\u0080\u0099t have the\n possibility of ever calling al_join_thread on the thread.\n@@ -298,8 +298,8 @@\n ****** al_signal_cond ******\n void al_signal_cond(ALLEGRO_COND *cond)\n Source_Code\n Unblock at least one thread waiting on a condition variable.\n Generally you should use al_broadcast_cond but al_signal_cond may be more\n efficient when it\u00e2\u0080\u0099s applicable.\n See also: al_broadcast_cond.\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:22 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:40 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/time.html", "source2": "./usr/share/doc/allegro5-doc/refman/time.html", "unified_diff": "@@ -239,12 +239,12 @@\n
  • ex_timer_pause.c
  • \n
  • ex_mouse_focus.c
  • \n \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:22 UTC\n+ - Last updated: 2024-01-08 05:22:40 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -89,8 +89,8 @@\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 * ex_keyboard_focus.c\n * ex_timer_pause.c\n * ex_mouse_focus.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:22 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:40 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/timer.html", "source2": "./usr/share/doc/allegro5-doc/refman/timer.html", "unified_diff": "@@ -423,12 +423,12 @@\n
  • ex_timer_pause.c
  • \n
  • ex_user_events.c
  • \n \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:23 UTC\n+ - Last updated: 2024-01-08 05:22:42 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -199,8 +199,8 @@\n Source_Code\n Retrieve the associated event source. Timers will generate events of type\n ALLEGRO_EVENT_TIMER.\n Examples:\n * ex_enet_server.c\n * ex_timer_pause.c\n * ex_user_events.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:23 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:42 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/touch.html", "source2": "./usr/share/doc/allegro5-doc/refman/touch.html", "unified_diff": "@@ -316,17 +316,17 @@\n called successfully.

    \n

    Since: 5.1.0

    \n

    Examples:

    \n
      \n
    • ex_lockbitmap.c
    • \n
    • ex_prim_shader.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_haiku.c#L973\">ex_haiku.c\n
    • nihgui.cpp
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_prim_shader.c#L154\">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@@ -387,17 +387,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_polygon.c
    • \n-
    • ex_android.c
    • \n+
    • ex_polygon.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@@ -415,18 +415,18 @@\n different semantics compared to mouse input.

    \n \n

    Examples:

    \n
      \n
    • ex_lockbitmap.c
    • \n
    • ex_prim_shader.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_haiku.c#L975\">ex_haiku.c\n
    • ex_polygon.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_prim_shader.c#L156\">ex_prim_shader.c\n
    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:23 UTC\n+ - Last updated: 2024-01-08 05:22:42 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -133,16 +133,16 @@\n ****** al_is_touch_input_installed ******\n bool al_is_touch_input_installed(void)\n Source_Code\n Returns true if al_install_touch_input was called successfully.\n Since: 5.1.0\n Examples:\n * ex_lockbitmap.c\n+ * ex_haiku.c\n * ex_prim_shader.c\n- * nihgui.cpp\n ****** al_get_touch_input_state ******\n void al_get_touch_input_state(ALLEGRO_TOUCH_INPUT_STATE *ret_state)\n Source_Code\n Gets the current touch input state. The touch information is copied into the\n ALLEGRO_TOUCH_INPUT_STATE you provide to this function.\n Since: 5.1.0\n ****** al_set_mouse_emulation_mode ******\n@@ -169,23 +169,23 @@\n Source_Code\n Returns the global touch input event source. This event source generates touch\n input_events.\n Since: 5.1.0\n See also: ALLEGRO_EVENT_SOURCE, al_register_event_source\n Examples:\n * ex_touch_input.c\n- * ex_polygon.c\n * ex_android.c\n+ * ex_polygon.c\n ****** al_get_touch_input_mouse_emulation_event_source ******\n ALLEGRO_EVENT_SOURCE *al_get_touch_input_mouse_emulation_event_source(void)\n Source_Code\n Returns the global touch input event source for emulated mouse events. This\n event source generates emulated_mouse_events that are based on touch events.\n See also: ALLEGRO_EVENT_SOURCE, al_register_event_source\n Since: 5.1.0\n Unstable_API: Seems of limited value, as touch input tends to have\n different semantics compared to mouse input.\n Examples:\n * ex_lockbitmap.c\n+ * ex_haiku.c\n * ex_prim_shader.c\n- * ex_polygon.c\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:23 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:42 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/transformations.html", "source2": "./usr/share/doc/allegro5-doc/refman/transformations.html", "unified_diff": "@@ -296,15 +296,15 @@\n

    Examples:

    \n
      \n
    • ex_shader.cpp
    • \n
    • ex_shader_target.c
    • \n
    • ex_polygon.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_timer.c#L74\">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@@ -349,15 +349,15 @@\n

    Examples:

    \n
      \n
    • ex_shader.cpp
    • \n
    • ex_shader_target.c
    • \n
    • ex_polygon.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_timer.c#L124\">ex_audio_timer.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_shader.cpp
    • \n
    • ex_shader_target.c
    • \n
    • ex_polygon.c
    • \n+href=\"https://github.com/liballeg/allegro5/blob/master/examples/ex_audio_timer.c#L122\">ex_audio_timer.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@@ -585,17 +585,17 @@\n al_compose_transform

    \n

    Examples:

    \n
      \n
    • ex_threads.c
    • \n
    • ex_prim.c
    • \n-
    • ex_color_gradient.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

    al_build_transform

    \n

    Examples:

    \n
      \n
    • ex_shader_target.c
    • \n
    • ex_polygon.c
    • \n-
    • ex_audio_timer.c
    • \n+
    • ex_polygon.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@@ -1059,12 +1059,12 @@\n
  • theta - Rotation angle in radians
  • \n \n

    Since: 5.1.7

    \n

    See also: al_horizontal_shear_transform

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:23 UTC\n+ - Last updated: 2024-01-08 05:22:47 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -143,15 +143,15 @@\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 Fields:\n * m - A 4x4 float matrix\n Examples:\n * ex_shader.cpp\n * ex_shader_target.c\n- * ex_polygon.c\n+ * ex_audio_timer.c\n ****** al_copy_transform ******\n void al_copy_transform(ALLEGRO_TRANSFORM *dest, const ALLEGRO_TRANSFORM *src)\n Source_Code\n Makes a copy of a transformation.\n Parameters:\n * dest - Source transformation\n * src - Destination transformation\n@@ -176,15 +176,15 @@\n }\n Parameters:\n * trans - Transformation to use\n See also: al_get_current_transform, al_transform_coordinates\n Examples:\n * ex_shader.cpp\n * ex_shader_target.c\n- * ex_polygon.c\n+ * ex_audio_timer.c\n ****** al_get_current_transform ******\n const ALLEGRO_TRANSFORM *al_get_current_transform(void)\n Source_Code\n Returns the transformation of the current target bitmap, as set by\n al_use_transform. If there is no target bitmap, this function returns NULL.\n Returns: A pointer to the current transformation.\n See also: al_get_current_projection_transform\n@@ -306,15 +306,15 @@\n al_use_transform(&t);\n Parameters:\n * trans - Transformation to alter\n See also: al_translate_transform, al_rotate_transform, al_scale_transform\n Examples:\n * ex_shader.cpp\n * ex_shader_target.c\n- * ex_polygon.c\n+ * ex_audio_timer.c\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_Code\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@@ -327,16 +327,16 @@\n Note: 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: al_translate_transform, al_rotate_transform, al_scale_transform,\n al_compose_transform\n Examples:\n * ex_threads.c\n- * ex_prim.c\n * ex_color_gradient.c\n+ * ex_prim.c\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 Source_Code\n Builds a transformation which can be used to transform 3D coordinates in world\n@@ -401,16 +401,16 @@\n Apply a scale to a transformation.\n Parameters:\n * trans - Transformation to alter\n * sx, sy - Scale\n See also: al_translate_transform, al_rotate_transform, al_build_transform\n Examples:\n * ex_shader_target.c\n- * ex_polygon.c\n * ex_audio_timer.c\n+ * ex_polygon.c\n ****** al_transform_coordinates ******\n void al_transform_coordinates(const ALLEGRO_TRANSFORM *trans, float *x, float\n *y)\n Source_Code\n Transform a pair of coordinates.\n Parameters:\n * trans - Transformation to use\n@@ -637,8 +637,8 @@\n Source_Code\n Apply a vertical shear to the transform\n Parameters:\n * trans - Transformation to alter\n * theta - Rotation angle in radians\n Since: 5.1.7\n See also: al_horizontal_shear_transform\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:23 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:47 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/utf8.html", "source2": "./usr/share/doc/allegro5-doc/refman/utf8.html", "unified_diff": "@@ -1611,12 +1611,12 @@\n points above 0x10FFFF.

    \n

    Returns the number of bytes written, which is the same as that\n returned by al_utf16_width.

    \n

    See also: al_utf8_encode, al_ustr_encode_utf16

    \n

    \n Allegro version 5.2.8\n- - Last updated: 2025-02-09 11:25:23 UTC\n+ - Last updated: 2024-01-08 05:22:47 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -915,8 +915,8 @@\n Source_Code\n Encode the specified code point to UTF-16 into the buffer s. The buffer must\n have enough space to hold the encoding, which takes either 2 or 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 al_utf16_width.\n See also: al_utf8_encode, al_ustr_encode_utf16\n-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:23 UTC\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:22:47 UTC\n"}]}, {"source1": "./usr/share/doc/allegro5-doc/refman/video.html", "source2": "./usr/share/doc/allegro5-doc/refman/video.html", "unified_diff": "@@ -266,14 +266,19 @@\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@@ -299,14 +304,19 @@\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@@ -338,21 +348,31 @@\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@@ -362,65 +382,100 @@\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@@ -435,32 +490,47 @@\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.8\n- - Last updated: 2025-02-09 11:25:29 UTC\n+ - Last updated: 2024-01-08 05:23:05 UTC\n

    \n \n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -113,14 +113,16 @@\n in sync.\n Since: 5.1.11\n ****** al_init_video_addon ******\n bool al_init_video_addon(void)\n Source_Code\n Initializes the video addon.\n Since: 5.1.12\n+Examples:\n+ * ex_video.c\n ****** al_is_video_addon_initialized ******\n bool al_is_video_addon_initialized(void)\n Source_Code\n Returns true if the video addon is initialized, otherwise returns false.\n Since: 5.2.6\n ****** al_shutdown_video_addon ******\n void al_shutdown_video_addon(void)\n@@ -136,14 +138,16 @@\n Since: 5.1.12\n ****** al_open_video ******\n ALLEGRO_VIDEO *al_open_video(char const *filename)\n Source_Code\n Reads a video file. This does not start streaming yet but reads the meta info\n so you can query e.g.\u00c2\u00a0the size or audio rate.\n Since: 5.1.0\n+Examples:\n+ * ex_video.c\n ****** al_identify_video ******\n char const *al_identify_video(char const *filename)\n Source_Code\n This works exactly as al_identify_video_f 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,67 +165,85 @@\n See also: al_init_video_addon, al_identify_video\n ****** al_close_video ******\n void al_close_video(ALLEGRO_VIDEO *video)\n Source_Code\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+ * ex_video.c\n ****** al_start_video ******\n void al_start_video(ALLEGRO_VIDEO *video, ALLEGRO_MIXER *mixer)\n Source_Code\n Starts streaming the video from the beginning.\n Since: 5.1.0\n+Examples:\n+ * ex_video.c\n ****** al_start_video_with_voice ******\n void al_start_video_with_voice(ALLEGRO_VIDEO *video, ALLEGRO_VOICE *voice)\n Source_Code\n Like al_start_video but audio is routed to the provided voice.\n Since: 5.1.0\n ****** al_get_video_event_source ******\n ALLEGRO_EVENT_SOURCE *al_get_video_event_source(ALLEGRO_VIDEO *video)\n Source_Code\n Get an event source for the video. The possible events are described under\n ALLEGRO_VIDEO_EVENT_TYPE.\n Since: 5.1.0\n+Examples:\n+ * ex_video.c\n ****** al_set_video_playing ******\n void al_set_video_playing(ALLEGRO_VIDEO *video, bool play)\n Source_Code\n Paused or resumes playback.\n Since: 5.1.12\n+Examples:\n+ * ex_video.c\n ****** al_is_video_playing ******\n bool al_is_video_playing(ALLEGRO_VIDEO *video)\n Source_Code\n Returns true if the video is currently playing.\n Since: 5.1.12\n+Examples:\n+ * ex_video.c\n ****** al_get_video_audio_rate ******\n double al_get_video_audio_rate(ALLEGRO_VIDEO *video)\n Source_Code\n Returns the audio rate of the video, in Hz.\n Since: 5.1.0\n+Examples:\n+ * ex_video.c\n ****** al_get_video_fps ******\n double al_get_video_fps(ALLEGRO_VIDEO *video)\n Source_Code\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+ * ex_video.c\n ****** al_get_video_scaled_width ******\n float al_get_video_scaled_width(ALLEGRO_VIDEO *video)\n Source_Code\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: al_get_video_frame\n+Examples:\n+ * ex_video.c\n ****** al_get_video_scaled_height ******\n float al_get_video_scaled_height(ALLEGRO_VIDEO *video)\n Source_Code\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: al_get_video_frame\n Since: 5.1.12\n+Examples:\n+ * ex_video.c\n ****** al_get_video_frame ******\n ALLEGRO_BITMAP *al_get_video_frame(ALLEGRO_VIDEO *video)\n Source_Code\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@@ -231,21 +253,27 @@\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: al_get_video_scaled_width, al_get_video_scaled_height\n+Examples:\n+ * ex_video.c\n ****** al_get_video_position ******\n double al_get_video_position(ALLEGRO_VIDEO *video, ALLEGRO_VIDEO_POSITION_TYPE\n which)\n Source_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 constants.\n Since: 5.1.0\n+Examples:\n+ * ex_video.c\n ****** al_seek_video ******\n bool al_seek_video(ALLEGRO_VIDEO *video, double pos_in_seconds)\n Source_Code\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-Allegro version 5.2.8 - Last updated: 2025-02-09 11:25:29 UTC\n+Examples:\n+ * ex_video.c\n+Allegro version 5.2.8 - Last updated: 2024-01-08 05:23:05 UTC\n"}]}]}]}]}]}