|
aae29c9e
|
2018-09-02T00:35:11
|
|
test: Makefile should copy .dat files for testoverlay2.
|
|
a794126d
|
2018-08-24T09:49:48
|
|
vulkan: SDL_Vulkan_GetInstanceExtensions should accept a NULL window.
Fixes Bugzilla #4235.
|
|
7c3040e0
|
2018-08-21T12:11:34
|
|
First pass on the new SDL sensor API
|
|
d2042e1e
|
2018-08-09T16:00:17
|
|
Added HIDAPI joystick drivers for more consistent support for Xbox, PS4 and Nintendo Switch Pro controller support across platforms.
Added SDL_GameControllerRumble() and SDL_JoystickRumble() for simple force feedback outside of the SDL haptics API
|
|
e061a92d
|
2018-08-02T16:03:47
|
|
Some drag'and'drop improvements.
First: disable d'n'd events by default; most apps don't need these at all, and
if an app doesn't explicitly handle these, each drop on the window will cause
a memory leak if the events are enabled. This follows the guidelines we have
for SDL_TEXTINPUT events already.
Second: when events are enabled or disabled, signal the video layer, as it
might be able to inform the OS, causing UI changes or optimizations (for
example, dropping a file icon on a Cocoa app that isn't accepting drops will
cause macOS to show a rejection animation instead of the drop operation just
vanishing into the ether, X11 might show a different cursor when dragging
onto an accepting window, etc).
Third: fill in the drop event details in the test library and enable the
events in testwm.c for making sure this all works as expected.
|
|
4df859c5
|
2018-05-21T11:35:42
|
|
cpuinfo: Added SDL_HasAVX512F().
This checks for the "foundation" AVX-512 instructions (that all AVX-512
compatible CPUs support).
|
|
ed4fe4c9
|
2018-05-15T00:04:02
|
|
testresample: correctly output .wav files that have floating point audio.
|
|
f521b22e
|
2018-04-23T22:07:56
|
|
Added SDL_THREAD_PRIORITY_TIME_CRITICAL
|
|
816a6e68
|
2018-04-23T17:10:36
|
|
Added support for adjusting thread priorities using Linux RealtimeKit
Michael Sartain
This is a quick pass at adding Linux RealtimeKit thread priority support to SDL.
It allows me to bump the thread priority to high without root privileges or setting any caps, etc.
rtkit readme here:
http://git.0pointer.net/rtkit.git/tree/README
|
|
e20d4173
|
2018-03-15T18:22:48
|
|
Added Android custom cursor implementation
This is commented out in SDLActivity.java, with the note #CURSORIMPLEENTATION because it requires API 24, which is higher than the minimum required SDK
|
|
6cf4d0e4
|
2018-02-24T08:59:58
|
|
Fixed bug 4092 - CMake support for building everything in the "test" directory
Eric Wasylishen
Patch to support building the tests with cmake.
Disabled by default, use: "cmake .. -DSDL_TEST=YES" to enable the tests.
Tested on macOS 10.13 with the ninja, makefile, and Xcode generators, and Windows 10 with the Visual Studio 2017 generator.
|
|
af498591
|
2018-01-22T09:46:48
|
|
testoverlay2: use SDL_atoi, not atoi.
|
|
e3cc5b2c
|
2018-01-03T10:03:25
|
|
Updated copyright for 2018
|
|
4764f7a4
|
2017-11-17T10:54:46
|
|
Fixed building YUV test programs (thanks Ozkan!)
|
|
a6a4e27a
|
2017-11-12T22:51:12
|
|
Updated SDL's YUV support, many thanks to Adrien Descamps
New functions get and set the YUV colorspace conversion mode:
SDL_SetYUVConversionMode()
SDL_GetYUVConversionMode()
SDL_GetYUVConversionModeForResolution()
SDL_ConvertPixels() converts between all supported RGB and YUV formats, with SSE acceleration for converting from planar YUV formats (YV12, NV12, etc) to common RGB/RGBA formats.
Added a new test program, testyuv, to verify correctness and speed of YUV conversion functionality.
|
|
a225ffc1
|
2017-10-16T14:39:56
|
|
Added min/max macros for the sized SDL datatypes
|
|
e564da78
|
2017-09-29T10:15:44
|
|
revert files I didnt mean to commit!
|
|
e27f12e0
|
2017-09-29T10:07:37
|
|
wayland: Fix bug 3814 -Wmissing-field-initializers
|
|
846a9ab9
|
2017-08-29T18:25:55
|
|
test: forgot to change a variable.
Fixes Bugzilla #3787.
|
|
4fc01638
|
2017-08-29T18:16:38
|
|
test: Fix for negative int that was now a size_t (thanks, Ozkan!).
Fixes Bugzilla #3787.
|
|
eb3c66d3
|
2017-08-29T16:05:03
|
|
A few more compiler warnings fixed.
|
|
ae667da6
|
2017-08-29T15:52:49
|
|
Fixed a bunch of compiler warnings.
|
|
37ce9f27
|
2017-08-27T23:13:15
|
|
Fixed typedef redefinition errors when including both SDL_vulkan.h and vulkan.h
You should always include vulkan/vulkan.h first, then include SDL_vulkan.h
|
|
1f2e151b
|
2017-08-27T22:20:17
|
|
Added Vulkan support to the Visual Studio 2010 solution
|
|
071e1018
|
2017-08-27T20:41:48
|
|
We use the SDL Vulkan headers
|
|
c722e58d
|
2017-08-27T23:25:12
|
|
vulkan: Include a copy of vulkan.h and vk_platform.h.
Now we can provide Vulkan support in the build even if the build box doesn't
have a Vulkan SDK, since we dynamically link to the library anyhow.
|
|
803fd6d5
|
2017-08-27T19:32:08
|
|
Use SDL_Vulkan_GetDrawableSize() instead of SDL_GL_GetDrawableSize()
|
|
25e3a1ec
|
2017-08-27T22:15:57
|
|
vulkan: Initial Vulkan support!
This work was done by Jacob Lifshay and Mark Callow; I'm just merging it
into revision control.
|
|
aad997fc
|
2017-08-27T19:00:03
|
|
Fixed bug 3740 - atexit() in test/testime.c
|
|
c59d9923
|
2017-08-14T05:51:44
|
|
Implemented more flexible blending modes for accelerated renderers
This fixes bug 2594 - Propose new blend mode, SDL_BLENDMODE_BLEND_DSTA
blendMode = SDL_ComposeCustomBlendMode(SDL_BLENDFACTOR_SRC_ALPHA,
SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
SDL_BLENDOPERATION_ADD,
SDL_BLENDFACTOR_ZERO,
SDL_BLENDFACTOR_ONE,
SDL_BLENDOPERATION_ADD);
This fixes bug 2828 - Subtractive Blending
blendMode = SDL_ComposeCustomBlendMode(SDL_BLENDFACTOR_SRC_ALPHA,
SDL_BLENDFACTOR_ONE,
SDL_BLENDOPERATION_SUBTRACT,
SDL_BLENDFACTOR_ZERO,
SDL_BLENDFACTOR_ONE,
SDL_BLENDOPERATION_SUBTRACT);
This goes partway to fixing bug 3684 - Add support for a pre-multiplied alpha blending mode
blendMode = SDL_ComposeCustomBlendMode(SDL_BLENDFACTOR_ONE,
SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
SDL_BLENDOPERATION_ADD,
SDL_BLENDFACTOR_ONE,
SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
SDL_BLENDOPERATION_ADD);
|
|
0112f618
|
2017-08-13T21:18:59
|
|
Fixed bug 3743 - make testautomation_sdltest.c to compile
Ozkan Sezer
The attached patch makes testautomation_sdltest.c more compatible wrt
LLONG_{MIN|MAX} macros and makes it to compile on older systems (e.g.
glibc-2.8) too, by replacing LLONG_{MIN|MAX} with INT64_{MIN|MAX}.
c.f.: bug #3494, where the same issue was described for SDL_test_fuzzer.c
|
|
2da830a9
|
2017-08-13T21:15:44
|
|
Fixed bug 3741 - more compatible initializers for arrays
Ozkan Sezer
An array defined like int xPositions[] = {-1, 0, 1, w-1, w, w+1 };
errors with Open Watcom: it strictly wants constants. Small patch
like below makes things more compatible.
|
|
93a520b3
|
2017-08-13T21:12:14
|
|
Fixed bug 3605 - Software renderer no longer renders after Android screen orientation change
Sylvain
This still happens with the current trunk version. (software renderer of testdrawchessboard.c)
When there is a rotation, the window size changed and the internal surface is marked as "surface_valid == SDL_FALSE".
And all further call fails.
SDL_video.c :
2478 void
2479 SDL_OnWindowResized(SDL_Window * window)
2480 {
2481 window->surface_valid = SDL_FALSE;
2482 SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SIZE_CHANGED, window->w, window->h);
2483 }
some error set to :
2233 return SDL_SetError("Window surface is invalid, please call SDL_GetWindowSurface() to get a new surface");
So, this seems to be the behavior of the API ...
In the loop() function of testdrawchessboard.c, we can recreate the surface/renderer :
65 if (e.type == SDL_WINDOWEVENT)
66 {
67 if (e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
68 {
69 surface = SDL_GetWindowSurface(window);
70 renderer = SDL_CreateSoftwareRenderer(surface);
71 }
72 /* Clear the rendering surface with the specified color */
73 SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
74 SDL_RenderClear(renderer);
75 }
And it displays correctly.
|
|
ca5c3048
|
2017-08-13T21:06:52
|
|
Fixed bug 3744 - missing SDLCALL in several functions
Ozkan Sezer
The attached patch adds missing SDLCALL to several functions, so that
they properly match the headers as intended.
|
|
658975f3
|
2017-08-11T11:32:00
|
|
Fixed bug 3639 - SDL_GetPrefPath returns a path with two consecutive slashes on Unix if org is omitted
Fabian Greffrath
we use SDL_GetPrefPath() in Chocolate Doom to get a reasonable directory to save and restore config files and savegames:
https://github.com/chocolate-doom/chocolate-doom/blob/sdl2-branch/src/m_config.c#L2162
However, since there is no "organization" behind Chocolate Doom and there is really only one "product" called Chocolate Doom, we pass an empty string for the org parameter and the package string for app.
This leads to two consecutive slashes in the path returned by SDL_GetPrefPath() like this:
/home/user/.local/share//chocolate-doom/
While this is harmless, it sure looks bad.
I believe that it should be possible to either pass a NULL pointer for the org parameter or at least have the function detect an empty string as a means to express "there is no origanization, just a single product". The generation of the path string to be returned by the function will have to get adapted accordingly.
|
|
222bacd8
|
2017-08-11T10:32:47
|
|
Fixed bug 3682 - Toggle text input in checkkeys when the mouse is clicked
Eric Wasylishen
Small change to checkkeys so you can toggle text input mode with a mouse click.
This is needed for testing how dead keys react to toggling mouse input, i.e. these bugs:
|
|
707ee5be
|
2017-07-09T23:00:35
|
|
Fixed typo in log message in testime program.
|
|
705efc35
|
2017-06-24T23:45:19
|
|
Fixed handling only one event per frame in testshape program.
|
|
cb591ee6
|
2017-06-08T22:40:35
|
|
Fixed ignoring first event in testshape program.
Found by Cppcheck.
|
|
850185f4
|
2017-06-02T22:15:23
|
|
Fixed crash if creating textures failed in testshape program.
|
|
5dc35013
|
2017-05-29T18:24:06
|
|
test: Makefile.in should copy bitmap and wave files to build directory.
I've lost count of the times I've forgotten to do this manually and wondered
why loopwave can't open sample.wav. :)
|
|
088f57a6
|
2017-05-20T23:30:47
|
|
Removed unnecessary call to free() in testoverlay2 program.
|
|
fa3944ba
|
2017-05-20T23:30:32
|
|
Removed unused signal includes and handler in test programs.
|
|
89499a08
|
2017-04-29T22:50:23
|
|
Removed unused field in loopwavequeue program.
Found by Cppcheck.
|
|
266816b4
|
2017-03-26T21:00:19
|
|
Removed newlines from error messages.
|
|
34a2a46f
|
2017-03-19T22:16:37
|
|
Removed unused constant in testgesture program.
|
|
60ba8552
|
2017-03-16T16:45:12
|
|
Backed out changeset e3fcdad257fc - testaudiocapture.c already does what we want
|
|
570e286f
|
2017-03-15T11:39:54
|
|
Added an audio recording test program
|
|
6bdc0e72
|
2017-03-09T15:12:19
|
|
Fixed tabs to spaces
|
|
aae48129
|
2017-03-09T14:50:23
|
|
Added support to loopwave for hotplugging audio devices
|
|
20c846eb
|
2017-03-04T23:05:47
|
|
Fixed warning about implicit conversion in controllermap program.
|
|
94a69443
|
2017-03-01T15:05:54
|
|
mistake: Revert the files that I did not mean to commit
|
|
7bbb13ea
|
2017-03-01T14:50:59
|
|
* Some refactoring and bug fixes. Thanks Micha? Kuchta!
|
|
dfa8fb31
|
2017-02-19T21:05:42
|
|
Fixed warnings if compiling loopwave programs with C++.
|
|
6717a3d3
|
2017-01-31T12:23:29
|
|
Added support for the HOTAS Warthog throttle
|
|
a156b0d9
|
2017-01-31T10:20:09
|
|
Added the HOTAS Warthog as a flight stick
|
|
5e78bc64
|
2017-01-21T22:00:40
|
|
Fixed copyright symbol in testgles2 program.
|
|
a395a907
|
2017-01-20T16:40:11
|
|
Fixed mapping the PG-9021 which, on Linux, emits a button partway through the trigger press along with axis motion all along the pull
|
|
2b481015
|
2017-01-14T21:34:45
|
|
Fixed warnings about missing initializers in testoverlay2 program.
|
|
a52d48c5
|
2017-01-10T08:54:33
|
|
Fixed bugs 2570, 3145, improved OpenGL ES context support on Windows and X11
Mark Callow
The attached patch does the following for the X11 and Windows platforms, the only ones where SDL attempts to use context_create_es_profile:
- Adds SDL_HINT_OPENGL_ES_DRIVER by which the application can
say to use the OpenGL ES driver & EGL rather than the Open GL
driver. (For bug #2570)
- Adds code to {WIN,X11}_GL_InitExtensions to determine the maximum
OpenGL ES version supported by the OpenGL driver (for bug #3145)
- Modifies the test that determines whether to use the OpenGL
driver or the real OpenGL ES driver to take into account the
hint, the requested and supported ES version and whether ES 1.X
is being requested. (For bug #2570 & bug #3145)
- Enables the testgles2 test for __WINDOWS__ and __LINUX__ and adds
the test to the VisualC projects.
With the fix in place I have run testdraw2, testgl and testgles2 without any issues and have run my own apps that use OpenGL, OpenGL ES 3 and OpenGL ES 1.1.
|
|
97f19cc3
|
2017-01-09T15:56:11
|
|
testresample: write correct length to the .wav header.
|
|
38854e03
|
2017-01-08T16:18:49
|
|
audio: Improvements in channel conversion code.
|
|
70c8bd24
|
2017-01-07T22:24:45
|
|
Fixed a bunch of compiler warnings in the test code.
|
|
4938c505
|
2017-01-04T10:28:07
|
|
Added SDL_JoystickGetAxisInitialState() to get a joystick axis' initial value.
This is useful for controller mapping programs to determine an axis' zero state
|
|
1ddff75c
|
2017-01-04T05:09:02
|
|
Some controllers have trouble getting out to 20000
|
|
082132a7
|
2017-01-03T23:39:28
|
|
Fixed binding the D-pad on some Super NES style controllers
Fixed a case where partial trigger pull could be bound to another button
There is a fundamental problem not resolved by this commit:
Some controllers have axes (triggers, pedals, etc.) that don't start at zero, but we're guaranteed that if we get a value that it's correct. For these controllers, the current code works, where we take the first value we get and use that as the zero point and generate axis motion starting from that point on.
Other controllers have digital axes (D-pad) that assume a zero starting point, and the first value we get is the min or max axis value when the D-pad is moved. For these controllers, the current code thinks that the zero point is the axis value after the D-pad motion and this doesn't work.
My hypothesis is that the first class of devices is more common and that we should solve for that, and add an exception to SDL_JoystickAxesCenteredAtZero() as needed for the second class of devices.
|
|
45b774e3
|
2017-01-01T18:33:28
|
|
Updated copyright for 2017
|
|
e61daa72
|
2016-12-30T19:57:50
|
|
Fixed warning and missing animation delay in testoverlay2 program.
|
|
c2b90f2d
|
2016-12-28T20:11:29
|
|
Fixed compiling of testgamecontroller program with C++.
|
|
de79828b
|
2016-12-28T20:11:12
|
|
Fixed warning about unused variable in controllermap program.
|
|
21cb42d7
|
2016-12-27T09:51:58
|
|
Make sure we go all the way back (within the XBox controller dead zone) to prevent accidentally binding axes inverted
|
|
6d7da088
|
2016-12-27T01:39:07
|
|
Split controller axes into positive and negative sides so each can be bound independently.
Using this a D-Pad can be mapped to a thumbstick and vice versa.
Also added support for inverted axes, improving trigger binding support
|
|
b515b34d
|
2016-12-16T22:58:32
|
|
Fixed hotplug with more than one device in testjoystick program.
|
|
0a3f9d0c
|
2016-12-16T22:58:16
|
|
Fixed warning about unused variable in controllermap program.
|
|
0c5e7a10
|
2016-12-15T14:27:22
|
|
Fixed handling joysticks that send multiple events for a single control, e.g. both a button and axis event for a trigger.
Tested with the 8Bitdo NES30 Pro on Linux
|
|
70aa2a57
|
2016-12-09T04:17:10
|
|
Only print out the controller mappings if we're not going to test a controller
|
|
68d7be39
|
2016-12-06T00:40:09
|
|
Fixed bug 3508 - variably modified ?SDL_dummy_size? at file scope in test/testatomic.c
Ciro Santilli
GCC 6, Ubuntu 16.10, cd test; ./configure; make
/bin/sh config.status Makefile
config.status: creating Makefile
gcc -o loopwave loopwave.c -g -O2 -D_REENTRANT -I/usr/include/SDL2 -DHAVE_OPENGLES2 -DHAVE_OPENGL -DHAVE_SDL_TTF -g -lSDL2_test -lSDL2
gcc -o testatomic testatomic.c -g -O2 -D_REENTRANT -I/usr/include/SDL2 -DHAVE_OPENGLES2 -DHAVE_OPENGL -DHAVE_SDL_TTF -g -lSDL2_test -lSDL2
In file included from /usr/include/SDL2/SDL_main.h:25:0,
from /usr/include/SDL2/SDL.h:32,
from testatomic.c:14:
/usr/include/SDL2/SDL_stdinc.h:261:20: error: variably modified ?SDL_dummy_size? at file scope
typedef int SDL_dummy_ ## name[(x) * 2 - 1]
^
testatomic.c:106:1: note: in expansion of macro ?SDL_COMPILE_TIME_ASSERT?
SDL_COMPILE_TIME_ASSERT(size, CountTo>0); /* check for rollover */
^~~~~~~~~~~~~~~~~~~~~~~
Makefile:114: recipe for target 'testatomic' failed
make: *** [testatomic] Error 1
If I remove the line SDL_COMPILE_TIME_ASSERT(size, CountTo>0); /* check for rollover */ it works, lazy to figure out the best way to do this.
|
|
dd5d85a4
|
2016-11-29T06:36:57
|
|
Added an API to iterate over game controller mappings
|
|
35430a73
|
2016-11-17T01:15:16
|
|
cpuinfo: first attempt at SDL_HasNEON() implementation.
|
|
c406f649
|
2016-11-10T18:53:50
|
|
Added USB VID/PID information to the SDL test programs
|
|
0396af65
|
2016-11-06T14:13:28
|
|
Shifting a value by more than its bits isn't defined and has varying behavior depending on compiler and platform
|
|
40b571c9
|
2016-11-06T10:01:08
|
|
Fixed bug 3468 - _allshr in SDL_stdlib.c is not working properly
Mark Pizzolato
On Windows with Visual Studio, when building SDL as a static library using the x86 (32bit) mode, several intrinsic operations are implemented in code in SDL_stdlib.c.
One of these, _allshr() is not properly implemented and fails for some input. As a result, some operations on 64bit data elements (long long) don't always work.
I classified this bug as a blocker since things absolutely don't work when the affected code is invoked. The affected code is only invoked when SDL is compiled in x86 mode on Visual Studio when building a SDL as a static library. This build environment isn't common, and hence the bug hasn't been noticed previously.
I reopened #2537 and mentioned this problem and provided a fix. That fix is provided again here along with test code which could be added to some of the SDL test code. This test code verifies that the x86 intrinsic routines produce the same results as the native x64 instructions which these routines emulate under the Microsoft compiler. The point of the tests is to make sure that Visual Studio x86 code produces the same results as Visual Studio x64 code. Some of the arguments (or boundary conditions) may produce different results on other compiler environments, so the tests really shouldn't be run on all compilers. The test driver only actually exercised code when the compiler defines _MSC_VER, so the driver can generically be invoked without issue.
|
|
52988309
|
2016-11-05T01:48:14
|
|
Fixed bug 3480 - minor update to NACL common.js
Sylvain
All latest official NACL examples have a slightly different 'common.js' file. It seems it has been updated in the meantime to fix a bug.
|
|
98d188f5
|
2016-10-30T21:01:46
|
|
Added call to SDL_HasAVX2() in platform test program.
|
|
826508b6
|
2016-10-15T20:01:30
|
|
Removed unused constants in controllermap program.
|
|
c490b54e
|
2016-10-13T04:01:25
|
|
Fixed black screen on Steam Link
|
|
cb7b823c
|
2016-10-13T02:09:37
|
|
Fixed black screen on Steam Link
|
|
ed80cfd9
|
2016-10-12T23:36:49
|
|
Removed empty statements in tests.
|
|
367a6a3d
|
2016-10-09T20:31:32
|
|
Fixed compiling of three test programs with C++.
|
|
56c88c45
|
2016-10-04T04:08:02
|
|
Modified the custom cursor test to be able to load BMP files as cursors
|
|
f032f811
|
2016-10-01T12:43:14
|
|
Fixed bug 3318 - testime.c enhancement with GNU Unifont support
Simon Hug
I'm proposing some changes to the IME test program test/testime.c. The patch includes support for the GNU Unifont hex file, making the SDL_ttf dependency optional. There were also one or two bugs that prevented the text and underline from showing up poperly.
|
|
3ac201cf
|
2016-10-01T12:33:26
|
|
Fixed bug 3319 - Getting the POSIX out of testqsort.c
Simon Hug
There's a call to the POSIX function random in test/testqsort.c. Naturally, Windows doesn't do that. The attached patch changes the call to the SDLtest framework random functions and adds some seed control.
Looking at SDLTest_RandomInitTime, I just want to say that 'srand((unsigned int)time(NULL)); a=rand(); srand(clock()); b=rand();' is an absolutely terrible way to initialize a seed on Windows because of its terrible LCG.
|
|
2cbe9e2b
|
2016-10-01T12:29:55
|
|
Fixed bug 3322 - Missing error checking in testaudioinfo and testaudiohotplug
Simon Hug
The two tests test/testaudioinfo.c and test/testaudiohotplug.c are missing error checking when they call SDL_GetAudioDeviceName. This function can return NULL which the tests pass straight to SDL_Log.
|
|
929b965c
|
2016-09-21T23:06:38
|
|
Fixed compiling of three test programs with C++.
|
|
48490a52
|
2016-08-30T21:16:04
|
|
Fixed log message in audio capture test program.
|
|
b6daf1f6
|
2016-08-12T22:50:48
|
|
testaudiocapture: ask for way more output samples.
Fixes Emscripten builds on Chrome for Android.
|
|
3139e5d1
|
2016-08-09T16:57:49
|
|
testaudiocapture: open capture device to same spec as output device.
...since our resampler is still terrible (sorry!).
|
|
a15b9740
|
2016-08-06T02:48:00
|
|
testaudiocapture: use capture device buffer queueing, for better test coverage.
|
|
7bfe494c
|
2016-08-06T02:45:51
|
|
testaudiocapture: don't use fullscreen for the window.
|
|
3ed9b0f5
|
2016-08-03T00:31:08
|
|
testaudiocapture: made test app interactive.
(hold down mouse/finger to record, then it plays back what it heard. Repeat.)
|