gosu 0.15.1 → 1.1.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/COPYING +1 -1
- data/dependencies/SDL/include/SDL.h +138 -0
- data/dependencies/SDL/include/SDL_assert.h +293 -0
- data/dependencies/SDL/include/SDL_atomic.h +295 -0
- data/dependencies/SDL/include/SDL_audio.h +859 -0
- data/dependencies/SDL/include/SDL_bits.h +121 -0
- data/dependencies/SDL/include/SDL_blendmode.h +123 -0
- data/dependencies/SDL/include/SDL_clipboard.h +71 -0
- data/dependencies/SDL/include/SDL_config.h +55 -0
- data/dependencies/SDL/include/SDL_config_android.h +182 -0
- data/dependencies/SDL/include/SDL_config_iphoneos.h +207 -0
- data/dependencies/SDL/include/SDL_config_macosx.h +266 -0
- data/dependencies/SDL/include/SDL_config_minimal.h +85 -0
- data/dependencies/SDL/include/SDL_config_os2.h +188 -0
- data/dependencies/SDL/include/SDL_config_pandora.h +135 -0
- data/dependencies/SDL/include/SDL_config_psp.h +165 -0
- data/dependencies/SDL/include/SDL_config_windows.h +288 -0
- data/dependencies/SDL/include/SDL_config_winrt.h +243 -0
- data/dependencies/SDL/include/SDL_config_wiz.h +149 -0
- data/dependencies/SDL/include/SDL_copying.h +20 -0
- data/dependencies/SDL/include/SDL_cpuinfo.h +299 -0
- data/dependencies/SDL/include/SDL_egl.h +1676 -0
- data/dependencies/SDL/include/SDL_endian.h +263 -0
- data/dependencies/SDL/include/SDL_error.h +112 -0
- data/dependencies/SDL/include/SDL_events.h +827 -0
- data/dependencies/SDL/include/SDL_filesystem.h +136 -0
- data/dependencies/SDL/include/SDL_gamecontroller.h +541 -0
- data/dependencies/SDL/include/SDL_gesture.h +87 -0
- data/dependencies/SDL/include/SDL_haptic.h +1247 -0
- data/dependencies/SDL/include/SDL_hints.h +1578 -0
- data/dependencies/SDL/include/SDL_joystick.h +499 -0
- data/dependencies/SDL/include/SDL_keyboard.h +217 -0
- data/dependencies/SDL/include/SDL_keycode.h +351 -0
- data/dependencies/SDL/include/SDL_loadso.h +81 -0
- data/dependencies/SDL/include/SDL_locale.h +101 -0
- data/dependencies/SDL/include/SDL_log.h +211 -0
- data/dependencies/SDL/include/SDL_main.h +180 -0
- data/dependencies/SDL/include/SDL_messagebox.h +146 -0
- data/dependencies/SDL/include/SDL_metal.h +117 -0
- data/dependencies/SDL/include/SDL_misc.h +75 -0
- data/dependencies/SDL/include/SDL_mouse.h +302 -0
- data/dependencies/SDL/include/SDL_mutex.h +251 -0
- data/dependencies/SDL/include/SDL_name.h +33 -0
- data/dependencies/SDL/include/SDL_opengl.h +2183 -0
- data/dependencies/SDL/include/SDL_opengl_glext.h +11180 -0
- data/dependencies/SDL/include/SDL_opengles.h +39 -0
- data/dependencies/SDL/include/SDL_opengles2.h +52 -0
- data/dependencies/SDL/include/SDL_opengles2_gl2.h +621 -0
- data/dependencies/SDL/include/SDL_opengles2_gl2ext.h +2050 -0
- data/dependencies/SDL/include/SDL_opengles2_gl2platform.h +30 -0
- data/dependencies/SDL/include/SDL_opengles2_khrplatform.h +282 -0
- data/dependencies/SDL/include/SDL_pixels.h +479 -0
- data/dependencies/SDL/include/SDL_platform.h +198 -0
- data/dependencies/SDL/include/SDL_power.h +75 -0
- data/dependencies/SDL/include/SDL_quit.h +58 -0
- data/dependencies/SDL/include/SDL_rect.h +174 -0
- data/dependencies/SDL/include/SDL_render.h +1158 -0
- data/dependencies/SDL/include/SDL_revision.h +2 -0
- data/dependencies/SDL/include/SDL_rwops.h +283 -0
- data/dependencies/SDL/include/SDL_scancode.h +413 -0
- data/dependencies/SDL/include/SDL_sensor.h +267 -0
- data/dependencies/SDL/include/SDL_shape.h +144 -0
- data/dependencies/SDL/include/SDL_stdinc.h +647 -0
- data/dependencies/SDL/include/SDL_surface.h +563 -0
- data/dependencies/SDL/include/SDL_system.h +325 -0
- data/dependencies/SDL/include/SDL_syswm.h +354 -0
- data/dependencies/SDL/include/SDL_test.h +69 -0
- data/dependencies/SDL/include/SDL_test_assert.h +105 -0
- data/dependencies/SDL/include/SDL_test_common.h +218 -0
- data/dependencies/SDL/include/SDL_test_compare.h +69 -0
- data/dependencies/SDL/include/SDL_test_crc32.h +124 -0
- data/dependencies/SDL/include/SDL_test_font.h +81 -0
- data/dependencies/SDL/include/SDL_test_fuzzer.h +384 -0
- data/dependencies/SDL/include/SDL_test_harness.h +134 -0
- data/dependencies/SDL/include/SDL_test_images.h +78 -0
- data/dependencies/SDL/include/SDL_test_log.h +67 -0
- data/dependencies/SDL/include/SDL_test_md5.h +129 -0
- data/dependencies/SDL/include/SDL_test_memory.h +63 -0
- data/dependencies/SDL/include/SDL_test_random.h +115 -0
- data/dependencies/SDL/include/SDL_thread.h +366 -0
- data/dependencies/SDL/include/SDL_timer.h +115 -0
- data/dependencies/SDL/include/SDL_touch.h +102 -0
- data/dependencies/SDL/include/SDL_types.h +29 -0
- data/dependencies/SDL/include/SDL_version.h +162 -0
- data/dependencies/SDL/include/SDL_video.h +1282 -0
- data/dependencies/SDL/include/SDL_vulkan.h +276 -0
- data/dependencies/SDL/include/begin_code.h +166 -0
- data/dependencies/SDL/include/close_code.h +40 -0
- data/dependencies/SDL/lib/x64/libSDL2.dll.a +0 -0
- data/dependencies/SDL/lib/x86/libSDL2.dll.a +0 -0
- data/dependencies/SDL_sound/SDL_sound.c +795 -0
- data/dependencies/SDL_sound/SDL_sound.h +725 -0
- data/dependencies/SDL_sound/SDL_sound_aiff.c +537 -0
- data/dependencies/SDL_sound/SDL_sound_au.c +352 -0
- data/dependencies/SDL_sound/SDL_sound_coreaudio.c +747 -0
- data/dependencies/SDL_sound/SDL_sound_flac.c +182 -0
- data/dependencies/SDL_sound/SDL_sound_internal.h +304 -0
- data/dependencies/SDL_sound/SDL_sound_modplug.c +228 -0
- data/dependencies/SDL_sound/SDL_sound_mp3.c +184 -0
- data/dependencies/SDL_sound/SDL_sound_raw.c +164 -0
- data/dependencies/SDL_sound/SDL_sound_shn.c +1309 -0
- data/dependencies/SDL_sound/SDL_sound_voc.c +550 -0
- data/dependencies/SDL_sound/SDL_sound_vorbis.c +223 -0
- data/dependencies/SDL_sound/SDL_sound_wav.c +783 -0
- data/dependencies/SDL_sound/dr_flac.h +5906 -0
- data/dependencies/SDL_sound/dr_mp3.h +2832 -0
- data/dependencies/SDL_sound/libmodplug/fastmix.c +1748 -0
- data/dependencies/SDL_sound/libmodplug/libmodplug.h +1001 -0
- data/dependencies/SDL_sound/libmodplug/load_669.c +188 -0
- data/dependencies/SDL_sound/libmodplug/load_abc.c +4725 -0
- data/dependencies/SDL_sound/libmodplug/load_amf.c +403 -0
- data/dependencies/SDL_sound/libmodplug/load_ams.c +587 -0
- data/dependencies/SDL_sound/libmodplug/load_dbm.c +357 -0
- data/dependencies/SDL_sound/libmodplug/load_dmf.c +531 -0
- data/dependencies/SDL_sound/libmodplug/load_dsm.c +232 -0
- data/dependencies/SDL_sound/libmodplug/load_far.c +253 -0
- data/dependencies/SDL_sound/libmodplug/load_it.c +796 -0
- data/dependencies/SDL_sound/libmodplug/load_mdl.c +488 -0
- data/dependencies/SDL_sound/libmodplug/load_med.c +757 -0
- data/dependencies/SDL_sound/libmodplug/load_mid.c +1405 -0
- data/dependencies/SDL_sound/libmodplug/load_mod.c +269 -0
- data/dependencies/SDL_sound/libmodplug/load_mt2.c +546 -0
- data/dependencies/SDL_sound/libmodplug/load_mtm.c +142 -0
- data/dependencies/SDL_sound/libmodplug/load_okt.c +192 -0
- data/dependencies/SDL_sound/libmodplug/load_pat.c +1143 -0
- data/dependencies/SDL_sound/libmodplug/load_pat.h +25 -0
- data/dependencies/SDL_sound/libmodplug/load_psm.c +350 -0
- data/dependencies/SDL_sound/libmodplug/load_ptm.c +204 -0
- data/dependencies/SDL_sound/libmodplug/load_s3m.c +325 -0
- data/dependencies/SDL_sound/libmodplug/load_stm.c +180 -0
- data/dependencies/SDL_sound/libmodplug/load_ult.c +206 -0
- data/dependencies/SDL_sound/libmodplug/load_umx.c +51 -0
- data/dependencies/SDL_sound/libmodplug/load_xm.c +554 -0
- data/dependencies/SDL_sound/libmodplug/mmcmp.c +382 -0
- data/dependencies/SDL_sound/libmodplug/modplug.c +170 -0
- data/dependencies/SDL_sound/libmodplug/modplug.h +90 -0
- data/dependencies/SDL_sound/libmodplug/snd_dsp.c +301 -0
- data/dependencies/SDL_sound/libmodplug/snd_flt.c +63 -0
- data/dependencies/SDL_sound/libmodplug/snd_fx.c +2350 -0
- data/dependencies/SDL_sound/libmodplug/sndfile.c +1169 -0
- data/dependencies/SDL_sound/libmodplug/sndmix.c +1034 -0
- data/dependencies/SDL_sound/libmodplug/tables.h +371 -0
- data/{src/stb_vorbis.c → dependencies/SDL_sound/stb_vorbis.h} +143 -78
- data/dependencies/al_soft/AL/al.h +655 -0
- data/dependencies/al_soft/AL/alc.h +270 -0
- data/dependencies/al_soft/AL/alext.h +585 -0
- data/dependencies/al_soft/AL/efx-creative.h +3 -0
- data/dependencies/al_soft/AL/efx-presets.h +402 -0
- data/dependencies/al_soft/AL/efx.h +762 -0
- data/dependencies/al_soft/x64/libOpenAL32.dll.a +0 -0
- data/dependencies/al_soft/x86/libOpenAL32.dll.a +0 -0
- data/{src → dependencies/stb}/stb_image.h +330 -127
- data/{src → dependencies/stb}/stb_image_write.h +156 -85
- data/{src → dependencies/stb}/stb_truetype.h +192 -69
- data/{src → dependencies/utf8proc}/utf8proc.c +0 -0
- data/{src → dependencies/utf8proc}/utf8proc.h +0 -0
- data/{src → dependencies/utf8proc}/utf8proc_data.h +0 -0
- data/ext/gosu/extconf.rb +53 -39
- data/{Gosu → include/Gosu}/Audio.hpp +6 -8
- data/include/Gosu/Bitmap.hpp +100 -0
- data/{Gosu → include/Gosu}/Buttons.hpp +104 -44
- data/{Gosu → include/Gosu}/Color.hpp +0 -0
- data/{Gosu → include/Gosu}/Directories.hpp +0 -0
- data/{Gosu → include/Gosu}/Font.hpp +1 -1
- data/{Gosu → include/Gosu}/Fwd.hpp +0 -5
- data/{Gosu → include/Gosu}/Gosu.hpp +0 -0
- data/{Gosu → include/Gosu}/Graphics.hpp +0 -0
- data/{Gosu → include/Gosu}/GraphicsBase.hpp +0 -0
- data/{Gosu → include/Gosu}/IO.hpp +0 -0
- data/{Gosu → include/Gosu}/Image.hpp +7 -6
- data/{Gosu → include/Gosu}/ImageData.hpp +0 -0
- data/{Gosu → include/Gosu}/Input.hpp +39 -51
- data/{Gosu → include/Gosu}/Inspection.hpp +0 -0
- data/{Gosu → include/Gosu}/Math.hpp +0 -0
- data/{Gosu → include/Gosu}/Platform.hpp +0 -0
- data/{Gosu → include/Gosu}/Text.hpp +0 -0
- data/{Gosu → include/Gosu}/TextInput.hpp +0 -0
- data/{Gosu → include/Gosu}/Timing.hpp +0 -0
- data/{Gosu → include/Gosu}/Utility.hpp +15 -4
- data/{Gosu → include/Gosu}/Version.hpp +3 -3
- data/{Gosu → include/Gosu}/Window.hpp +46 -34
- data/lib/OpenAL32.dll +0 -0
- data/lib/SDL2.dll +0 -0
- data/lib/gosu.rb +0 -3
- data/lib/gosu/patches.rb +0 -23
- data/lib/gosu/preview.rb +1 -3
- data/lib/gosu/swig_patches.rb +6 -8
- data/lib64/OpenAL32.dll +0 -0
- data/lib64/SDL2.dll +0 -0
- data/rdoc/gosu.rb +112 -23
- data/src/Audio.cpp +50 -224
- data/src/AudioFile.hpp +20 -37
- data/src/AudioFileAudioToolbox.cpp +237 -0
- data/src/AudioFileSDLSound.cpp +147 -0
- data/src/AudioImpl.cpp +3 -12
- data/src/AudioImpl.hpp +3 -1
- data/src/Bitmap.cpp +85 -83
- data/src/BitmapIO.cpp +52 -58
- data/src/Font.cpp +4 -1
- data/src/Graphics.cpp +7 -4
- data/src/Image.cpp +13 -16
- data/src/Input.cpp +412 -164
- data/src/LargeImageData.cpp +2 -1
- data/src/MarkupParser.cpp +2 -1
- data/src/Resolution.cpp +8 -8
- data/src/RubyGosu.cxx +1184 -352
- data/src/RubyGosu.h +3 -2
- data/src/TexChunk.cpp +1 -1
- data/src/Text.cpp +1 -0
- data/src/TextBuilder.cpp +3 -1
- data/src/Texture.cpp +1 -1
- data/src/TrueTypeFont.cpp +2 -1
- data/src/TrueTypeFontWin.cpp +3 -3
- data/src/Utility.cpp +11 -7
- data/src/Window.cpp +90 -62
- data/src/WindowUIKit.cpp +21 -9
- metadata +195 -46
- data/Gosu/AutoLink.hpp +0 -14
- data/Gosu/Bitmap.hpp +0 -113
- data/lib/gosu/zen.rb +0 -89
- data/src/AudioToolboxFile.hpp +0 -210
- data/src/MPEGFile.hpp +0 -90
- data/src/OggFile.hpp +0 -92
- data/src/SndFile.hpp +0 -174
- data/src/WinMain.cpp +0 -64
@@ -1,4 +1,4 @@
|
|
1
|
-
/* stb_image_write - v1.
|
1
|
+
/* stb_image_write - v1.15 - public domain - http://nothings.org/stb
|
2
2
|
writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015
|
3
3
|
no warranty implied; use at your own risk
|
4
4
|
|
@@ -105,7 +105,7 @@ USAGE:
|
|
105
105
|
|
106
106
|
TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed
|
107
107
|
data, set the global variable 'stbi_write_tga_with_rle' to 0.
|
108
|
-
|
108
|
+
|
109
109
|
JPEG does ignore alpha channels in input data; quality is between 1 and 100.
|
110
110
|
Higher quality looks better but results in a bigger image.
|
111
111
|
JPEG baseline (no JPEG progressive).
|
@@ -113,7 +113,7 @@ USAGE:
|
|
113
113
|
CREDITS:
|
114
114
|
|
115
115
|
|
116
|
-
Sean Barrett - PNG/BMP/TGA
|
116
|
+
Sean Barrett - PNG/BMP/TGA
|
117
117
|
Baldur Karlsson - HDR
|
118
118
|
Jean-Sebastien Guay - TGA monochrome
|
119
119
|
Tim Kelsey - misc enhancements
|
@@ -247,17 +247,17 @@ STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean);
|
|
247
247
|
#define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff)
|
248
248
|
|
249
249
|
#ifdef STB_IMAGE_WRITE_STATIC
|
250
|
-
static int stbi__flip_vertically_on_write=0;
|
251
250
|
static int stbi_write_png_compression_level = 8;
|
252
251
|
static int stbi_write_tga_with_rle = 1;
|
253
252
|
static int stbi_write_force_png_filter = -1;
|
254
253
|
#else
|
255
254
|
int stbi_write_png_compression_level = 8;
|
256
|
-
int stbi__flip_vertically_on_write=0;
|
257
255
|
int stbi_write_tga_with_rle = 1;
|
258
256
|
int stbi_write_force_png_filter = -1;
|
259
257
|
#endif
|
260
258
|
|
259
|
+
static int stbi__flip_vertically_on_write = 0;
|
260
|
+
|
261
261
|
STBIWDEF void stbi_flip_vertically_on_write(int flag)
|
262
262
|
{
|
263
263
|
stbi__flip_vertically_on_write = flag;
|
@@ -267,6 +267,8 @@ typedef struct
|
|
267
267
|
{
|
268
268
|
stbi_write_func *func;
|
269
269
|
void *context;
|
270
|
+
unsigned char buffer[64];
|
271
|
+
int buf_used;
|
270
272
|
} stbi__write_context;
|
271
273
|
|
272
274
|
// initialize a callback-based context
|
@@ -306,7 +308,7 @@ static FILE *stbiw__fopen(char const *filename, char const *mode)
|
|
306
308
|
wchar_t wFilename[1024];
|
307
309
|
if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)))
|
308
310
|
return 0;
|
309
|
-
|
311
|
+
|
310
312
|
if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)))
|
311
313
|
return 0;
|
312
314
|
|
@@ -380,16 +382,36 @@ static void stbiw__writef(stbi__write_context *s, const char *fmt, ...)
|
|
380
382
|
va_end(v);
|
381
383
|
}
|
382
384
|
|
385
|
+
static void stbiw__write_flush(stbi__write_context *s)
|
386
|
+
{
|
387
|
+
if (s->buf_used) {
|
388
|
+
s->func(s->context, &s->buffer, s->buf_used);
|
389
|
+
s->buf_used = 0;
|
390
|
+
}
|
391
|
+
}
|
392
|
+
|
383
393
|
static void stbiw__putc(stbi__write_context *s, unsigned char c)
|
384
394
|
{
|
385
395
|
s->func(s->context, &c, 1);
|
386
396
|
}
|
387
397
|
|
398
|
+
static void stbiw__write1(stbi__write_context *s, unsigned char a)
|
399
|
+
{
|
400
|
+
if (s->buf_used + 1 > sizeof(s->buffer))
|
401
|
+
stbiw__write_flush(s);
|
402
|
+
s->buffer[s->buf_used++] = a;
|
403
|
+
}
|
404
|
+
|
388
405
|
static void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c)
|
389
406
|
{
|
390
|
-
|
391
|
-
|
392
|
-
|
407
|
+
int n;
|
408
|
+
if (s->buf_used + 3 > sizeof(s->buffer))
|
409
|
+
stbiw__write_flush(s);
|
410
|
+
n = s->buf_used;
|
411
|
+
s->buf_used = n+3;
|
412
|
+
s->buffer[n+0] = a;
|
413
|
+
s->buffer[n+1] = b;
|
414
|
+
s->buffer[n+2] = c;
|
393
415
|
}
|
394
416
|
|
395
417
|
static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d)
|
@@ -398,7 +420,7 @@ static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, in
|
|
398
420
|
int k;
|
399
421
|
|
400
422
|
if (write_alpha < 0)
|
401
|
-
|
423
|
+
stbiw__write1(s, d[comp - 1]);
|
402
424
|
|
403
425
|
switch (comp) {
|
404
426
|
case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case
|
@@ -406,7 +428,7 @@ static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, in
|
|
406
428
|
if (expand_mono)
|
407
429
|
stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp
|
408
430
|
else
|
409
|
-
|
431
|
+
stbiw__write1(s, d[0]); // monochrome TGA
|
410
432
|
break;
|
411
433
|
case 4:
|
412
434
|
if (!write_alpha) {
|
@@ -422,7 +444,7 @@ static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, in
|
|
422
444
|
break;
|
423
445
|
}
|
424
446
|
if (write_alpha > 0)
|
425
|
-
|
447
|
+
stbiw__write1(s, d[comp - 1]);
|
426
448
|
}
|
427
449
|
|
428
450
|
static void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono)
|
@@ -447,6 +469,7 @@ static void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, i
|
|
447
469
|
unsigned char *d = (unsigned char *) data + (j*x+i)*comp;
|
448
470
|
stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d);
|
449
471
|
}
|
472
|
+
stbiw__write_flush(s);
|
450
473
|
s->func(s->context, &zero, scanline_pad);
|
451
474
|
}
|
452
475
|
}
|
@@ -476,7 +499,7 @@ static int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, c
|
|
476
499
|
|
477
500
|
STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data)
|
478
501
|
{
|
479
|
-
stbi__write_context s;
|
502
|
+
stbi__write_context s = { 0 };
|
480
503
|
stbi__start_write_callbacks(&s, func, context);
|
481
504
|
return stbi_write_bmp_core(&s, x, y, comp, data);
|
482
505
|
}
|
@@ -484,7 +507,7 @@ STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x,
|
|
484
507
|
#ifndef STBI_WRITE_NO_STDIO
|
485
508
|
STBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data)
|
486
509
|
{
|
487
|
-
stbi__write_context s;
|
510
|
+
stbi__write_context s = { 0 };
|
488
511
|
if (stbi__start_write_file(&s,filename)) {
|
489
512
|
int r = stbi_write_bmp_core(&s, x, y, comp, data);
|
490
513
|
stbi__end_write_file(&s);
|
@@ -557,24 +580,25 @@ static int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, v
|
|
557
580
|
|
558
581
|
if (diff) {
|
559
582
|
unsigned char header = STBIW_UCHAR(len - 1);
|
560
|
-
|
583
|
+
stbiw__write1(s, header);
|
561
584
|
for (k = 0; k < len; ++k) {
|
562
585
|
stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp);
|
563
586
|
}
|
564
587
|
} else {
|
565
588
|
unsigned char header = STBIW_UCHAR(len - 129);
|
566
|
-
|
589
|
+
stbiw__write1(s, header);
|
567
590
|
stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin);
|
568
591
|
}
|
569
592
|
}
|
570
593
|
}
|
594
|
+
stbiw__write_flush(s);
|
571
595
|
}
|
572
596
|
return 1;
|
573
597
|
}
|
574
598
|
|
575
599
|
STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data)
|
576
600
|
{
|
577
|
-
stbi__write_context s;
|
601
|
+
stbi__write_context s = { 0 };
|
578
602
|
stbi__start_write_callbacks(&s, func, context);
|
579
603
|
return stbi_write_tga_core(&s, x, y, comp, (void *) data);
|
580
604
|
}
|
@@ -582,7 +606,7 @@ STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x,
|
|
582
606
|
#ifndef STBI_WRITE_NO_STDIO
|
583
607
|
STBIWDEF int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data)
|
584
608
|
{
|
585
|
-
stbi__write_context s;
|
609
|
+
stbi__write_context s = { 0 };
|
586
610
|
if (stbi__start_write_file(&s,filename)) {
|
587
611
|
int r = stbi_write_tga_core(&s, x, y, comp, (void *) data);
|
588
612
|
stbi__end_write_file(&s);
|
@@ -748,7 +772,7 @@ static int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, f
|
|
748
772
|
|
749
773
|
STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data)
|
750
774
|
{
|
751
|
-
stbi__write_context s;
|
775
|
+
stbi__write_context s = { 0 };
|
752
776
|
stbi__start_write_callbacks(&s, func, context);
|
753
777
|
return stbi_write_hdr_core(&s, x, y, comp, (float *) data);
|
754
778
|
}
|
@@ -756,7 +780,7 @@ STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x,
|
|
756
780
|
#ifndef STBI_WRITE_NO_STDIO
|
757
781
|
STBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data)
|
758
782
|
{
|
759
|
-
stbi__write_context s;
|
783
|
+
stbi__write_context s = { 0 };
|
760
784
|
if (stbi__start_write_file(&s,filename)) {
|
761
785
|
int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data);
|
762
786
|
stbi__end_write_file(&s);
|
@@ -774,7 +798,7 @@ STBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const
|
|
774
798
|
|
775
799
|
#ifndef STBIW_ZLIB_COMPRESS
|
776
800
|
// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size()
|
777
|
-
#define stbiw__sbraw(a) ((int *) (a) - 2)
|
801
|
+
#define stbiw__sbraw(a) ((int *) (void *) (a) - 2)
|
778
802
|
#define stbiw__sbm(a) stbiw__sbraw(a)[0]
|
779
803
|
#define stbiw__sbn(a) stbiw__sbraw(a)[1]
|
780
804
|
|
@@ -1044,13 +1068,13 @@ static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int
|
|
1044
1068
|
int type = mymap[filter_type];
|
1045
1069
|
unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y);
|
1046
1070
|
int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes;
|
1047
|
-
|
1071
|
+
|
1048
1072
|
if (type==0) {
|
1049
1073
|
memcpy(line_buffer, z, width*n);
|
1050
1074
|
return;
|
1051
1075
|
}
|
1052
1076
|
|
1053
|
-
// first loop isn't optimized since it's just one pixel
|
1077
|
+
// first loop isn't optimized since it's just one pixel
|
1054
1078
|
for (i = 0; i < n; ++i) {
|
1055
1079
|
switch (type) {
|
1056
1080
|
case 1: line_buffer[i] = z[i]; break;
|
@@ -1271,26 +1295,31 @@ static void stbiw__jpg_calcBits(int val, unsigned short bits[2]) {
|
|
1271
1295
|
bits[0] = val & ((1<<bits[1])-1);
|
1272
1296
|
}
|
1273
1297
|
|
1274
|
-
static int stbiw__jpg_processDU(stbi__write_context *s, int *bitBuf, int *bitCnt, float *CDU, float *fdtbl, int DC, const unsigned short HTDC[256][2], const unsigned short HTAC[256][2]) {
|
1298
|
+
static int stbiw__jpg_processDU(stbi__write_context *s, int *bitBuf, int *bitCnt, float *CDU, int du_stride, float *fdtbl, int DC, const unsigned short HTDC[256][2], const unsigned short HTAC[256][2]) {
|
1275
1299
|
const unsigned short EOB[2] = { HTAC[0x00][0], HTAC[0x00][1] };
|
1276
1300
|
const unsigned short M16zeroes[2] = { HTAC[0xF0][0], HTAC[0xF0][1] };
|
1277
|
-
int dataOff, i, diff, end0pos;
|
1301
|
+
int dataOff, i, j, n, diff, end0pos, x, y;
|
1278
1302
|
int DU[64];
|
1279
1303
|
|
1280
1304
|
// DCT rows
|
1281
|
-
for(dataOff=0; dataOff<
|
1305
|
+
for(dataOff=0, n=du_stride*8; dataOff<n; dataOff+=du_stride) {
|
1282
1306
|
stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff+1], &CDU[dataOff+2], &CDU[dataOff+3], &CDU[dataOff+4], &CDU[dataOff+5], &CDU[dataOff+6], &CDU[dataOff+7]);
|
1283
1307
|
}
|
1284
1308
|
// DCT columns
|
1285
1309
|
for(dataOff=0; dataOff<8; ++dataOff) {
|
1286
|
-
stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff+
|
1310
|
+
stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff+du_stride], &CDU[dataOff+du_stride*2], &CDU[dataOff+du_stride*3], &CDU[dataOff+du_stride*4],
|
1311
|
+
&CDU[dataOff+du_stride*5], &CDU[dataOff+du_stride*6], &CDU[dataOff+du_stride*7]);
|
1287
1312
|
}
|
1288
1313
|
// Quantize/descale/zigzag the coefficients
|
1289
|
-
for(
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1314
|
+
for(y = 0, j=0; y < 8; ++y) {
|
1315
|
+
for(x = 0; x < 8; ++x,++j) {
|
1316
|
+
float v;
|
1317
|
+
i = y*du_stride+x;
|
1318
|
+
v = CDU[i]*fdtbl[j];
|
1319
|
+
// DU[stbiw__jpg_ZigZag[j]] = (int)(v < 0 ? ceilf(v - 0.5f) : floorf(v + 0.5f));
|
1320
|
+
// ceilf() and floorf() are C99, not C89, but I /think/ they're not needed here anyway?
|
1321
|
+
DU[stbiw__jpg_ZigZag[j]] = (int)(v < 0 ? v - 0.5f : v + 0.5f);
|
1322
|
+
}
|
1294
1323
|
}
|
1295
1324
|
|
1296
1325
|
// Encode DC
|
@@ -1405,10 +1434,10 @@ static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, in
|
|
1405
1434
|
37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99};
|
1406
1435
|
static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,
|
1407
1436
|
99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99};
|
1408
|
-
static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f,
|
1437
|
+
static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f,
|
1409
1438
|
1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f };
|
1410
1439
|
|
1411
|
-
int row, col, i, k;
|
1440
|
+
int row, col, i, k, subsample;
|
1412
1441
|
float fdtbl_Y[64], fdtbl_UV[64];
|
1413
1442
|
unsigned char YTable[64], UVTable[64];
|
1414
1443
|
|
@@ -1417,6 +1446,7 @@ static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, in
|
|
1417
1446
|
}
|
1418
1447
|
|
1419
1448
|
quality = quality ? quality : 90;
|
1449
|
+
subsample = quality <= 90 ? 1 : 0;
|
1420
1450
|
quality = quality < 1 ? 1 : quality > 100 ? 100 : quality;
|
1421
1451
|
quality = quality < 50 ? 5000 / quality : 200 - quality * 2;
|
1422
1452
|
|
@@ -1439,7 +1469,7 @@ static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, in
|
|
1439
1469
|
static const unsigned char head0[] = { 0xFF,0xD8,0xFF,0xE0,0,0x10,'J','F','I','F',0,1,1,0,0,1,0,1,0,0,0xFF,0xDB,0,0x84,0 };
|
1440
1470
|
static const unsigned char head2[] = { 0xFF,0xDA,0,0xC,3,1,0,2,0x11,3,0x11,0,0x3F,0 };
|
1441
1471
|
const unsigned char head1[] = { 0xFF,0xC0,0,0x11,8,(unsigned char)(height>>8),STBIW_UCHAR(height),(unsigned char)(width>>8),STBIW_UCHAR(width),
|
1442
|
-
3,1,0x11,0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 };
|
1472
|
+
3,1,(unsigned char)(subsample?0x22:0x11),0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 };
|
1443
1473
|
s->func(s->context, (void*)head0, sizeof(head0));
|
1444
1474
|
s->func(s->context, (void*)YTable, sizeof(YTable));
|
1445
1475
|
stbiw__putc(s, 1);
|
@@ -1462,36 +1492,74 @@ static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, in
|
|
1462
1492
|
// Encode 8x8 macroblocks
|
1463
1493
|
{
|
1464
1494
|
static const unsigned short fillBits[] = {0x7F, 7};
|
1465
|
-
const unsigned char *imageData = (const unsigned char *)data;
|
1466
1495
|
int DCY=0, DCU=0, DCV=0;
|
1467
1496
|
int bitBuf=0, bitCnt=0;
|
1468
1497
|
// comp == 2 is grey+alpha (alpha is ignored)
|
1469
1498
|
int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0;
|
1499
|
+
const unsigned char *dataR = (const unsigned char *)data;
|
1500
|
+
const unsigned char *dataG = dataR + ofsG;
|
1501
|
+
const unsigned char *dataB = dataR + ofsB;
|
1470
1502
|
int x, y, pos;
|
1471
|
-
|
1472
|
-
for(
|
1473
|
-
|
1474
|
-
|
1475
|
-
|
1476
|
-
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1503
|
+
if(subsample) {
|
1504
|
+
for(y = 0; y < height; y += 16) {
|
1505
|
+
for(x = 0; x < width; x += 16) {
|
1506
|
+
float Y[256], U[256], V[256];
|
1507
|
+
for(row = y, pos = 0; row < y+16; ++row) {
|
1508
|
+
// row >= height => use last input row
|
1509
|
+
int clamped_row = (row < height) ? row : height - 1;
|
1510
|
+
int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp;
|
1511
|
+
for(col = x; col < x+16; ++col, ++pos) {
|
1512
|
+
// if col >= width => use pixel from last input column
|
1513
|
+
int p = base_p + ((col < width) ? col : (width-1))*comp;
|
1514
|
+
float r = dataR[p], g = dataG[p], b = dataB[p];
|
1515
|
+
Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128;
|
1516
|
+
U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b;
|
1517
|
+
V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b;
|
1518
|
+
}
|
1519
|
+
}
|
1520
|
+
DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+0, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT);
|
1521
|
+
DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+8, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT);
|
1522
|
+
DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT);
|
1523
|
+
DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT);
|
1524
|
+
|
1525
|
+
// subsample U,V
|
1526
|
+
{
|
1527
|
+
float subU[64], subV[64];
|
1528
|
+
int yy, xx;
|
1529
|
+
for(yy = 0, pos = 0; yy < 8; ++yy) {
|
1530
|
+
for(xx = 0; xx < 8; ++xx, ++pos) {
|
1531
|
+
int j = yy*32+xx*2;
|
1532
|
+
subU[pos] = (U[j+0] + U[j+1] + U[j+16] + U[j+17]) * 0.25f;
|
1533
|
+
subV[pos] = (V[j+0] + V[j+1] + V[j+16] + V[j+17]) * 0.25f;
|
1534
|
+
}
|
1535
|
+
}
|
1536
|
+
DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);
|
1537
|
+
DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);
|
1489
1538
|
}
|
1490
1539
|
}
|
1540
|
+
}
|
1541
|
+
} else {
|
1542
|
+
for(y = 0; y < height; y += 8) {
|
1543
|
+
for(x = 0; x < width; x += 8) {
|
1544
|
+
float Y[64], U[64], V[64];
|
1545
|
+
for(row = y, pos = 0; row < y+8; ++row) {
|
1546
|
+
// row >= height => use last input row
|
1547
|
+
int clamped_row = (row < height) ? row : height - 1;
|
1548
|
+
int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp;
|
1549
|
+
for(col = x; col < x+8; ++col, ++pos) {
|
1550
|
+
// if col >= width => use pixel from last input column
|
1551
|
+
int p = base_p + ((col < width) ? col : (width-1))*comp;
|
1552
|
+
float r = dataR[p], g = dataG[p], b = dataB[p];
|
1553
|
+
Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128;
|
1554
|
+
U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b;
|
1555
|
+
V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b;
|
1556
|
+
}
|
1557
|
+
}
|
1491
1558
|
|
1492
|
-
|
1493
|
-
|
1494
|
-
|
1559
|
+
DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y, DCY, YDC_HT, YAC_HT);
|
1560
|
+
DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);
|
1561
|
+
DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);
|
1562
|
+
}
|
1495
1563
|
}
|
1496
1564
|
}
|
1497
1565
|
|
@@ -1508,7 +1576,7 @@ static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, in
|
|
1508
1576
|
|
1509
1577
|
STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality)
|
1510
1578
|
{
|
1511
|
-
stbi__write_context s;
|
1579
|
+
stbi__write_context s = { 0 };
|
1512
1580
|
stbi__start_write_callbacks(&s, func, context);
|
1513
1581
|
return stbi_write_jpg_core(&s, x, y, comp, (void *) data, quality);
|
1514
1582
|
}
|
@@ -1517,7 +1585,7 @@ STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x,
|
|
1517
1585
|
#ifndef STBI_WRITE_NO_STDIO
|
1518
1586
|
STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality)
|
1519
1587
|
{
|
1520
|
-
stbi__write_context s;
|
1588
|
+
stbi__write_context s = { 0 };
|
1521
1589
|
if (stbi__start_write_file(&s,filename)) {
|
1522
1590
|
int r = stbi_write_jpg_core(&s, x, y, comp, data, quality);
|
1523
1591
|
stbi__end_write_file(&s);
|
@@ -1530,10 +1598,13 @@ STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const
|
|
1530
1598
|
#endif // STB_IMAGE_WRITE_IMPLEMENTATION
|
1531
1599
|
|
1532
1600
|
/* Revision history
|
1601
|
+
1.14 (2020-02-02) updated JPEG writer to downsample chroma channels
|
1602
|
+
1.13
|
1603
|
+
1.12
|
1533
1604
|
1.11 (2019-08-11)
|
1534
|
-
|
1605
|
+
|
1535
1606
|
1.10 (2019-02-07)
|
1536
|
-
support utf8 filenames in Windows; fix warnings and platform ifdefs
|
1607
|
+
support utf8 filenames in Windows; fix warnings and platform ifdefs
|
1537
1608
|
1.09 (2018-02-11)
|
1538
1609
|
fix typo in zlib quality API, improve STB_I_W_STATIC in C++
|
1539
1610
|
1.08 (2018-01-29)
|
@@ -1582,38 +1653,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
|
|
1582
1653
|
------------------------------------------------------------------------------
|
1583
1654
|
ALTERNATIVE A - MIT License
|
1584
1655
|
Copyright (c) 2017 Sean Barrett
|
1585
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
1586
|
-
this software and associated documentation files (the "Software"), to deal in
|
1587
|
-
the Software without restriction, including without limitation the rights to
|
1588
|
-
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
1589
|
-
of the Software, and to permit persons to whom the Software is furnished to do
|
1656
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
1657
|
+
this software and associated documentation files (the "Software"), to deal in
|
1658
|
+
the Software without restriction, including without limitation the rights to
|
1659
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
1660
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
1590
1661
|
so, subject to the following conditions:
|
1591
|
-
The above copyright notice and this permission notice shall be included in all
|
1662
|
+
The above copyright notice and this permission notice shall be included in all
|
1592
1663
|
copies or substantial portions of the Software.
|
1593
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
1594
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
1595
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1596
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
1597
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
1598
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
1664
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
1665
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
1666
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1667
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
1668
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
1669
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
1599
1670
|
SOFTWARE.
|
1600
1671
|
------------------------------------------------------------------------------
|
1601
1672
|
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
1602
1673
|
This is free and unencumbered software released into the public domain.
|
1603
|
-
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
1604
|
-
software, either in source code form or as a compiled binary, for any purpose,
|
1674
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
1675
|
+
software, either in source code form or as a compiled binary, for any purpose,
|
1605
1676
|
commercial or non-commercial, and by any means.
|
1606
|
-
In jurisdictions that recognize copyright laws, the author or authors of this
|
1607
|
-
software dedicate any and all copyright interest in the software to the public
|
1608
|
-
domain. We make this dedication for the benefit of the public at large and to
|
1609
|
-
the detriment of our heirs and successors. We intend this dedication to be an
|
1610
|
-
overt act of relinquishment in perpetuity of all present and future rights to
|
1677
|
+
In jurisdictions that recognize copyright laws, the author or authors of this
|
1678
|
+
software dedicate any and all copyright interest in the software to the public
|
1679
|
+
domain. We make this dedication for the benefit of the public at large and to
|
1680
|
+
the detriment of our heirs and successors. We intend this dedication to be an
|
1681
|
+
overt act of relinquishment in perpetuity of all present and future rights to
|
1611
1682
|
this software under copyright law.
|
1612
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
1613
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
1614
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1615
|
-
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
1616
|
-
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
1683
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
1684
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
1685
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
1686
|
+
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
1687
|
+
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
1617
1688
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
1618
1689
|
------------------------------------------------------------------------------
|
1619
1690
|
*/
|