diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analyzer.js | 2 | ||||
-rw-r--r-- | src/library.js | 141 | ||||
-rw-r--r-- | src/library_gl.js | 2 | ||||
-rw-r--r-- | src/library_jansson.js | 2 | ||||
-rw-r--r-- | src/library_openal.js | 596 | ||||
-rw-r--r-- | src/library_sdl.js | 168 | ||||
-rw-r--r-- | src/postamble.js | 94 | ||||
-rw-r--r-- | src/preamble.js | 73 | ||||
-rw-r--r-- | src/settings.js | 1655 |
9 files changed, 1616 insertions, 1117 deletions
diff --git a/src/analyzer.js b/src/analyzer.js index b1f0b585..1a752305 100644 --- a/src/analyzer.js +++ b/src/analyzer.js @@ -338,7 +338,7 @@ function analyzer(data, sidePass) { if (subItem != item && (!(subItem.intertype in UNUNFOLDABLE) || (subItem.intertype == 'value' && isNumber(subItem.ident) && isIllegalType(subItem.type)))) { if (item.intertype == 'phi') { - assert(subItem.intertype == 'value' || subItem.intertype == 'structvalue', 'We can only unfold illegal constants in phis'); + assert(subItem.intertype == 'value' || subItem.intertype == 'structvalue' || subItem.intertype in PARSABLE_LLVM_FUNCTIONS, 'We can only unfold some expressions in phis'); // we must handle this in the phi itself, if we unfold normally it will not be pushed back with the phi } else { var tempIdent = '$$etemp$' + (tempId++); diff --git a/src/library.js b/src/library.js index f7c7a3ba..85d1d13f 100644 --- a/src/library.js +++ b/src/library.js @@ -29,7 +29,8 @@ LibraryManager.library = { _impure_ptr: 'allocate(1, "i32*", ALLOC_STATIC)', $FS__deps: ['$ERRNO_CODES', '__setErrNo', 'stdin', 'stdout', 'stderr', '_impure_ptr'], - $FS__postset: '__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });' + + $FS__postset: 'FS.staticInit();' + + '__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });' + '__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });' + '__ATEXIT__.push({ func: function() { FS.quit() } });' + // export some names through closure @@ -223,7 +224,6 @@ LibraryManager.library = { // set to true and the object is a symbolic link, it will be returned as is // instead of being resolved. Links embedded in the path are still resolved. findObject: function(path, dontResolveLastLink) { - FS.ensureRoot(); var ret = FS.analyzePath(path, dontResolveLastLink); if (ret.exists) { return ret.object; @@ -509,8 +509,7 @@ LibraryManager.library = { if (!success) ___setErrNo(ERRNO_CODES.EIO); return success; }, - ensureRoot: function() { - if (FS.root) return; + staticInit: function () { // The main file system tree. All the contents are inside this. FS.root = { read: true, @@ -521,6 +520,11 @@ LibraryManager.library = { inodeNumber: 1, contents: {} }; + // Create the temporary folder, if not already created + try { + FS.createFolder('/', 'tmp', true, true); + } catch(e) {} + FS.createFolder('/', 'dev', true, true); }, // Initializes the filesystems with stdin/stdout/stderr devices, given // optional handlers. @@ -529,8 +533,6 @@ LibraryManager.library = { assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); FS.init.initialized = true; - FS.ensureRoot(); - // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here input = input || Module['stdin']; output = output || Module['stdout']; @@ -583,21 +585,15 @@ LibraryManager.library = { if (!error.printer) error.printer = Module['printErr']; if (!error.buffer) error.buffer = []; - // Create the temporary folder, if not already created - try { - FS.createFolder('/', 'tmp', true, true); - } catch(e) {} - // Create the I/O devices. - var devFolder = FS.createFolder('/', 'dev', true, true); - var stdin = FS.createDevice(devFolder, 'stdin', input); + var stdin = FS.createDevice('/dev', 'stdin', input); stdin.isTerminal = !stdinOverridden; - var stdout = FS.createDevice(devFolder, 'stdout', null, output); + var stdout = FS.createDevice('/dev', 'stdout', null, output); stdout.isTerminal = !stdoutOverridden; - var stderr = FS.createDevice(devFolder, 'stderr', null, error); + var stderr = FS.createDevice('/dev', 'stderr', null, error); stderr.isTerminal = !stderrOverridden; - FS.createDevice(devFolder, 'tty', input, output); - FS.createDevice(devFolder, 'null', function(){}, function(){}); + FS.createDevice('/dev', 'tty', input, output); + FS.createDevice('/dev', 'null', function(){}, function(){}); // Create default streams. FS.streams[1] = { @@ -1165,7 +1161,7 @@ LibraryManager.library = { ['i32', 'f_namemax']]), statvfs__deps: ['$FS', '__statvfs_struct_layout'], statvfs: function(path, buf) { - // http://pubs.opengroup.org/onlinepubs/7908799/xsh/stat.html + // http://pubs.opengroup.org/onlinepubs/009695399/functions/statvfs.html // int statvfs(const char *restrict path, struct statvfs *restrict buf); var offsets = ___statvfs_struct_layout; // NOTE: None of the constants here are true. We're just returning safe and @@ -1417,6 +1413,16 @@ LibraryManager.library = { }, // ========================================================================== + // sys/file.h + // ========================================================================== + + flock: function(fd, operation) { + // int flock(int fd, int operation); + // Pretend to succeed + return 0; + }, + + // ========================================================================== // poll.h // ========================================================================== @@ -2133,20 +2139,7 @@ LibraryManager.library = { _exit: function(status) { // void _exit(int status); // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html - - function ExitStatus() { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status; - Module.print('Exit Status: ' + status); - }; - ExitStatus.prototype = new Error(); - ExitStatus.prototype.constructor = ExitStatus; - - exitRuntime(); - ABORT = true; - - throw new ExitStatus(); + Module['exit'](status); }, fork__deps: ['__setErrNo', '$ERRNO_CODES'], fork: function() { @@ -3653,29 +3646,19 @@ LibraryManager.library = { ___setErrNo(ERRNO_CODES.EAGAIN); return -1; }, - fscanf__deps: ['$FS', '__setErrNo', '$ERRNO_CODES', - '_scanString', 'fgetc', 'fseek', 'ftell'], + fscanf__deps: ['$FS', '_scanString', 'fgetc', 'ungetc'], fscanf: function(stream, format, varargs) { // int fscanf(FILE *restrict stream, const char *restrict format, ... ); // http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html if (FS.streams[stream]) { - var i = _ftell(stream), SEEK_SET = 0; - // if the stream does not support seeking backwards (e.g. stdin), buffer it here - var buffer = [], bufferIndex = 0; + var buffer = []; var get = function() { - if (bufferIndex < buffer.length) { - return buffer[bufferIndex++]; - } - i++; - bufferIndex++; var c = _fgetc(stream); buffer.push(c); return c; }; var unget = function() { - if (_fseek(stream, --i, SEEK_SET) !== 0) { - bufferIndex--; - } + _ungetc(buffer.pop(), stream); }; return __scanString(format, get, unget, varargs); } else { @@ -3876,6 +3859,20 @@ LibraryManager.library = { // TODO: Implement mremap. + mprotect: function(addr, len, prot) { + // int mprotect(void *addr, size_t len, int prot); + // http://pubs.opengroup.org/onlinepubs/7908799/xsh/mprotect.html + // Pretend to succeed + return 0; + }, + + msync: function(addr, len, flags) { + // int msync(void *addr, size_t len, int flags); + // http://pubs.opengroup.org/onlinepubs/009696799/functions/msync.html + // Pretend to succeed + return 0; + }, + // ========================================================================== // stdlib.h // ========================================================================== @@ -3939,13 +3936,16 @@ LibraryManager.library = { __cxa_atexit: 'atexit', abort: function() { - ABORT = true; - throw 'abort() at ' + (new Error().stack); + Module['abort'](); }, bsearch: function(key, base, num, size, compar) { var cmp = function(x, y) { - return Runtime.dynCall('iii', compar, [x, y]) +#if ASM_JS + return Module['dynCall_iii'](compar, x, y); +#else + return FUNCTION_TABLE[compar](x, y); +#endif }; var left = 0; var right = num; @@ -3955,7 +3955,6 @@ LibraryManager.library = { mid = (left + right) >>> 1; addr = base + (mid * size); test = cmp(key, addr); - if (test < 0) { right = mid; } else if (test > 0) { @@ -4175,13 +4174,14 @@ LibraryManager.library = { if (num == 0 || size == 0) return; // forward calls to the JavaScript sort method // first, sort the items logically - var comparator = function(x, y) { - return Runtime.dynCall('iii', cmp, [x, y]); - } var keys = []; for (var i = 0; i < num; i++) keys.push(i); keys.sort(function(a, b) { - return comparator(base+a*size, base+b*size); +#if ASM_JS + return Module['dynCall_iii'](cmp, base+a*size, base+b*size); +#else + return FUNCTION_TABLE[cmp](base+a*size, base+b*size); +#endif }); // apply the sort var temp = _malloc(num*size); @@ -4459,6 +4459,13 @@ LibraryManager.library = { llvm_memmove_p0i8_p0i8_i32: 'memmove', llvm_memmove_p0i8_p0i8_i64: 'memmove', + bcopy__deps: ['memmove'], + bcopy: function(src, dest, num) { + // void bcopy(const void *s1, void *s2, size_t n); + // http://pubs.opengroup.org/onlinepubs/009695399/functions/bcopy.html + _memmove(dest, src, num); + }, + memset__inline: function(ptr, value, num, align) { return makeSetValues(ptr, 0, value, 'null', num, align); }, @@ -4947,7 +4954,17 @@ LibraryManager.library = { (chr >= {{{ charCode('{') }}} && chr <= {{{ charCode('~') }}}); }, isspace: function(chr) { - return chr in { 32: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0 }; + switch(chr) { + case 32: + case 9: + case 10: + case 11: + case 12: + case 13: + return true; + default: + return false; + }; }, isblank: function(chr) { return chr == {{{ charCode(' ') }}} || chr == {{{ charCode('\t') }}}; @@ -6161,9 +6178,14 @@ LibraryManager.library = { {{{ makeSetValue('tmPtr', 'offsets.tm_wday', 'date.getUTCDay()', 'i32') }}} {{{ makeSetValue('tmPtr', 'offsets.tm_gmtoff', '0', 'i32') }}} {{{ makeSetValue('tmPtr', 'offsets.tm_isdst', '0', 'i32') }}} - - var start = new Date(date.getFullYear(), 0, 1); - var yday = Math.round((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)); + var start = new Date(date); // define date using UTC, start from Jan 01 00:00:00 UTC + start.setUTCDate(1); + start.setUTCMonth(0); + start.setUTCHours(0); + start.setUTCMinutes(0); + start.setUTCSeconds(0); + start.setUTCMilliseconds(0); + var yday = Math.floor((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)); {{{ makeSetValue('tmPtr', 'offsets.tm_yday', 'yday', 'i32') }}} var timezone = "GMT"; @@ -6174,7 +6196,6 @@ LibraryManager.library = { return tmPtr; }, - timegm__deps: ['mktime'], timegm: function(tmPtr) { _tzset(); @@ -7823,7 +7844,7 @@ LibraryManager.library = { inet_pton__deps: ['__setErrNo', '$ERRNO_CODES', 'inet_addr'], inet_pton: function(af, src, dst) { // int af, const char *src, void *dst - if ((af ^ {{{ cDefine("AF_INET") }}}) !== 0) { ___setErrNo(ERRNO_CODES.EAFNOSUPPORT); return -1; } + if ((af ^ {{{ cDefine('AF_INET') }}}) !== 0) { ___setErrNo(ERRNO_CODES.EAFNOSUPPORT); return -1; } var ret = _inet_addr(src); if (ret == -1 || isNaN(ret)) return 0; setValue(dst, ret, 'i32'); @@ -7911,7 +7932,7 @@ LibraryManager.library = { var aliasesBuf = _malloc(4); setValue(aliasesBuf, 0, 'i8*'); setValue(ret+___hostent_struct_layout.h_aliases, aliasesBuf, 'i8**'); - setValue(ret+___hostent_struct_layout.h_addrtype, {{{ cDefine("AF_INET") }}}, 'i32'); + setValue(ret+___hostent_struct_layout.h_addrtype, {{{ cDefine('AF_INET') }}}, 'i32'); setValue(ret+___hostent_struct_layout.h_length, 4, 'i32'); var addrListBuf = _malloc(12); setValue(addrListBuf, addrListBuf+8, 'i32*'); diff --git a/src/library_gl.js b/src/library_gl.js index d0f1a692..54b2f956 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -1318,7 +1318,7 @@ var LibraryGL = { GLEmulation.fogColor = new Float32Array(4); // Add some emulation workarounds - Module.printErr('WARNING: using emscripten GL emulation. This is a collection of limited workarounds, do not expect it to work'); + Module.printErr('WARNING: using emscripten GL emulation. This is a collection of limited workarounds, do not expect it to work. (If you do not want this, build with -s DISABLE_GL_EMULATION=1)'); #if GL_UNSAFE_OPTS == 0 Module.printErr('WARNING: using emscripten GL emulation unsafe opts. If weirdness happens, try -s GL_UNSAFE_OPTS=0'); #endif diff --git a/src/library_jansson.js b/src/library_jansson.js index 93f239fc..da8c5aa8 100644 --- a/src/library_jansson.js +++ b/src/library_jansson.js @@ -79,7 +79,7 @@ var LibraryJansson = { load: function(string, flags, error) { // This is potentially a security problem. // TODO: Make sure everything is properly escaped - var json_obj = eval('(' + string + ')'); + var json_obj = JSON.parse(string); if (json_obj != null) { // The context is an array storing all child nodes. diff --git a/src/library_openal.js b/src/library_openal.js index 6a97fce7..d2516559 100644 --- a/src/library_openal.js +++ b/src/library_openal.js @@ -5,6 +5,8 @@ var LibraryOpenAL = { $AL: { contexts: [], currentContext: null, + QUEUE_INTERVAL: 25, + QUEUE_LOOKAHEAD: 100 }, alcProcessContext: function(context) {}, @@ -39,6 +41,7 @@ var LibraryOpenAL = { alcDestroyContext: function(context) { // Stop playback, etc + clearInterval(context.interval); }, alcCloseDevice: function(device) { @@ -54,6 +57,7 @@ var LibraryOpenAL = { } }, + alcCreateContext__deps: ['updateSources'], alcCreateContext: function(device, attrList) { if (device != 1) { return 0; @@ -76,18 +80,152 @@ var LibraryOpenAL = { } if (ctx) { - AL.contexts.push({ctx: ctx, err: 0, src: [], buf: []}); + var context = { + ctx: ctx, + err: 0, + src: [], + buf: [], + interval: setInterval(function () { _updateSources(context); }, AL.QUEUE_INTERVAL) + }; + AL.contexts.push(context); return AL.contexts.length; } else { return 0; } }, + updateSources__deps: ['updateSource'], + updateSources: function (context) { + for (var i = 0; i < context.src.length; i++) { + _updateSource(context.src[i]); + } + }, + + updateSource__deps: ['setSourceState'], + updateSource: function (src) { +#if OPENAL_DEBUG + var idx = AL.currentContext.src.indexOf(src); +#endif + if (src.state !== 0x1012 /* AL_PLAYING */) { + return; + } + + var currentTime = AL.currentContext.ctx.currentTime; + var startTime = src.bufferPosition; + + for (var i = src.buffersPlayed; i < src.queue.length; i++) { + var entry = src.queue[i]; + + var startOffset = startTime - currentTime; + var endTime = startTime + entry.buffer.duration; + + // Clean up old buffers. + if (currentTime >= endTime) { + // Update our location in the queue. + src.bufferPosition = endTime; + src.buffersPlayed = i + 1; + + // Stop / restart the source when we hit the end. + if (src.buffersPlayed >= src.queue.length) { + if (src.loop) { + _setSourceState(src, 0x1012 /* AL_PLAYING */); + } else { + _setSourceState(src, 0x1014 /* AL_STOPPED */); + } + } + } + // Process all buffers that'll be played before the next tick. + else if (startOffset < (AL.QUEUE_LOOKAHEAD / 1000) && !entry.src) { + // If the start offset is negative, we need to offset the actual buffer. + var offset = Math.abs(Math.min(startOffset, 0)); + + entry.src = AL.currentContext.ctx.createBufferSource(); + entry.src.buffer = entry.buffer; + entry.src.connect(src.gain); + entry.src.start(startTime, offset); + +#if OPENAL_DEBUG + console.log('updateSource queuing buffer ' + i + ' for source ' + idx + ' at ' + startTime + ' (offset by ' + offset + ')'); +#endif + } + + startTime = endTime; + } + }, + + setSourceState__deps: ['updateSource', 'stopSourceQueue'], + setSourceState: function (src, state) { +#if OPENAL_DEBUG + var idx = AL.currentContext.src.indexOf(src); +#endif + if (state === 0x1012 /* AL_PLAYING */) { + if (src.state !== 0x1013 /* AL_PAUSED */) { + src.state = 0x1012 /* AL_PLAYING */; + // Reset our position. + src.bufferPosition = AL.currentContext.ctx.currentTime; + src.buffersPlayed = 0; +#if OPENAL_DEBUG + console.log('setSourceState resetting and playing source ' + idx); +#endif + } else { + src.state = 0x1012 /* AL_PLAYING */; + // Use the current offset from src.bufferPosition to resume at the correct point. + src.bufferPosition = AL.currentContext.ctx.currentTime - src.bufferPosition; +#if OPENAL_DEBUG + console.log('setSourceState resuming source ' + idx + ' at ' + src.bufferPosition.toFixed(4)); +#endif + } + _stopSourceQueue(src); + _updateSource(src); + } else if (state === 0x1013 /* AL_PAUSED */) { + if (src.state === 0x1012 /* AL_PLAYING */) { + src.state = 0x1013 /* AL_PAUSED */; + // Store off the current offset to restore with on resume. + src.bufferPosition = AL.currentContext.ctx.currentTime - src.bufferPosition; + _stopSourceQueue(src); +#if OPENAL_DEBUG + console.log('setSourceState pausing source ' + idx + ' at ' + src.bufferPosition.toFixed(4)); +#endif + } + } else if (state === 0x1014 /* AL_STOPPED */) { + if (src.state !== 0x1011 /* AL_INITIAL */) { + src.state = 0x1014 /* AL_STOPPED */; + src.buffersPlayed = src.queue.length; + _stopSourceQueue(src); +#if OPENAL_DEBUG + console.log('setSourceState stopping source ' + idx); +#endif + } + } else if (state == 0x1011 /* AL_INITIAL */) { + if (src.state !== 0x1011 /* AL_INITIAL */) { + src.state = 0x1011 /* AL_INITIAL */; + src.bufferPosition = 0; + src.buffersPlayed = 0; +#if OPENAL_DEBUG + console.log('setSourceState initializing source ' + idx); +#endif + } + } + }, + + stopSourceQueue: function (src) { + for (var i = 0; i < src.queue.length; i++) { + var entry = src.queue[i]; + if (entry.src) { + entry.src.stop(0); + entry.src = null; + } + } + }, + alGetError: function() { if (!AL.currentContext) { return 0xA004 /* AL_INVALID_OPERATION */; } else { - return AL.currentContext.err; + // Reset error on get. + var err = AL.currentContext.err; + AL.currentContext.err = 0 /* AL_NO_ERROR */; + return err; } }, @@ -97,12 +235,12 @@ var LibraryOpenAL = { return _alGetError(); }, - alDeleteSources: function(count, sources) - { + alDeleteSources: function(count, sources) { if (!AL.currentContext) { #if OPENAL_DEBUG console.error("alDeleteSources called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } for (var i = 0; i < count; ++i) { @@ -116,57 +254,126 @@ var LibraryOpenAL = { #if OPENAL_DEBUG console.error("alGenSources called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } for (var i = 0; i < count; ++i) { var gain = AL.currentContext.ctx.createGain(); - var panner = AL.currentContext.ctx.createPanner(); - panner.panningModel = "equalpower"; - panner.distanceModel = "linear"; - panner.rolloffFactor = 0.3; - gain.connect(panner); - panner.connect(AL.currentContext.ctx.destination); + gain.connect(AL.currentContext.ctx.destination); AL.currentContext.src.push({ + state: 0x1011 /* AL_INITIAL */, + queue: [], loop: false, - buffer: null, + get refDistance() { + return this._refDistance || 1; + }, + set refDistance(val) { + this._refDistance = val; + if (this.panner) this.panner.refDistance = val; + }, + get maxDistance() { + return this._maxDistance || 10000; + }, + set maxDistance(val) { + this._maxDistance = val; + if (this.panner) this.panner.maxDistance = val; + }, + get rolloffFactor() { + return this._rolloffFactor || 1; + }, + set rolloffFactor(val) { + this._rolloffFactor = val; + if (this.panner) this.panner.rolloffFactor = val; + }, + get position() { + return this._position || [0, 0, 0]; + }, + set position(val) { + this._position = val; + if (this.panner) this.panner.setPosition(val[0], val[1], val[2]); + }, + get velocity() { + return this._velocity || [0, 0, 0]; + }, + set velocity(val) { + this._velocity = val; + if (this.panner) this.panner.setVelocity(val[0], val[1], val[2]); + }, gain: gain, - panner: panner, - paused: false, - playTime: -1, - pausedTime: 0 + panner: null, + buffersPlayed: 0, + bufferPosition: 0 }); {{{ makeSetValue('sources', 'i*4', 'AL.currentContext.src.length', 'i32') }}}; } }, + alSourcei__deps: ['updateSource'], alSourcei: function(source, param, value) { if (!AL.currentContext) { #if OPENAL_DEBUG console.error("alSourcei called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG console.error("alSourcei called with an invalid source"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } switch (param) { case 0x1007 /* AL_LOOPING */: - AL.currentContext.src[source - 1].loop = (value != 0 /* AL_FALSE */); + src.loop = (value === 1 /* AL_TRUE */); break; case 0x1009 /* AL_BUFFER */: + var buffer = AL.currentContext.buf[value - 1]; if (value == 0) { - AL.currentContext.src[source - 1].buffer = null; + src.queue = []; + } else { + src.queue = [{ buffer: buffer }]; + } + _updateSource(src); + break; + case 0x202 /* AL_SOURCE_RELATIVE */: + if (value === 1 /* AL_TRUE */) { + if (src.panner) { + src.panner = null; + + // Disconnect from the panner. + src.gain.disconnect(); + + src.gain.connect(AL.currentContext.ctx.destination); + } + } else if (value === 0 /* AL_FALSE */) { + if (!src.panner) { + var panner = src.panner = AL.currentContext.ctx.createPanner(); + panner.panningModel = "equalpower"; + panner.distanceModel = "linear"; + panner.refDistance = src.refDistance; + panner.maxDistance = src.maxDistance; + panner.rolloffFactor = src.rolloffFactor; + panner.setPosition(src.position[0], src.position[1], src.position[2]); + panner.setVelocity(src.velocity[0], src.velocity[1], src.velocity[2]); + panner.connect(AL.currentContext.ctx.destination); + + // Disconnect from the default source. + src.gain.disconnect(); + + src.gain.connect(panner); + } } else { - AL.currentContext.src[source - 1].buffer = AL.currentContext.buf[value - 1].buf; + AL.currentContext.err = 0xA003 /* AL_INVALID_VALUE */; } break; default: #if OPENAL_DEBUG console.log("alSourcei with param " + param + " not implemented yet"); #endif + AL.currentContext.err = 0xA002 /* AL_INVALID_ENUM */; break; } }, @@ -176,130 +383,168 @@ var LibraryOpenAL = { #if OPENAL_DEBUG console.error("alSourcef called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG console.error("alSourcef called with an invalid source"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } switch (param) { - case 0x100A /* AL_GAIN */: - if (AL.currentContext.src[source - 1]) { - AL.currentContext.src[source - 1].gain.gain.value = value; - } - break; case 0x1003 /* AL_PITCH */: #if OPENAL_DEBUG - console.log("alSourcef was called with AL_PITCH, but Web Audio does not support static pitch changes"); + console.log("alSourcef was called with 0x1003 /* AL_PITCH */, but Web Audio does not support static pitch changes"); #endif break; + case 0x100A /* AL_GAIN */: + src.gain.gain.value = value; + break; + // case 0x100D /* AL_MIN_GAIN */: + // break; + // case 0x100E /* AL_MAX_GAIN */: + // break; + case 0x1023 /* AL_MAX_DISTANCE */: + src.maxDistance = value; + break; + case 0x1021 /* AL_ROLLOFF_FACTOR */: + src.rolloffFactor = value; + break; + // case 0x1022 /* AL_CONE_OUTER_GAIN */: + // break; + // case 0x1001 /* AL_CONE_INNER_ANGLE */: + // break; + // case 0x1002 /* AL_CONE_OUTER_ANGLE */: + // break; + case 0x1020 /* AL_REFERENCE_DISTANCE */: + src.refDistance = value; + break; default: #if OPENAL_DEBUG console.log("alSourcef with param " + param + " not implemented yet"); #endif + AL.currentContext.err = 0xA002 /* AL_INVALID_ENUM */; break; } }, - alSourcefv: function(source, param, value) { + alSource3f: function(source, param, v1, v2, v3) { if (!AL.currentContext) { #if OPENAL_DEBUG - console.error("alSourcefv called without a valid context"); + console.error("alSource3f called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG - console.error("alSourcefv called with an invalid source"); + console.error("alSource3f called with an invalid source"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } switch (param) { case 0x1004 /* AL_POSITION */: - AL.currentContext.src[source - 1].panner.setPosition( - {{{ makeGetValue('value', '0', 'float') }}}, - {{{ makeGetValue('value', '4', 'float') }}}, - {{{ makeGetValue('value', '8', 'float') }}} - ); + src.position = [v1, v2, v3]; break; case 0x1006 /* AL_VELOCITY */: - AL.currentContext.src[source - 1].panner.setVelocity( - {{{ makeGetValue('value', '0', 'float') }}}, - {{{ makeGetValue('value', '4', 'float') }}}, - {{{ makeGetValue('value', '8', 'float') }}} - ); + src.velocity = [v1, v2, v3]; break; default: #if OPENAL_DEBUG - console.log("alSourcefv with param " + param + " not implemented yet"); + console.log("alSource3f with param " + param + " not implemented yet"); #endif + AL.currentContext.err = 0xA002 /* AL_INVALID_ENUM */; break; } }, + alSourcefv__deps: ['alSource3f'], + alSourcefv: function(source, param, value) { + _alSource3f(source, param, + {{{ makeGetValue('value', '0', 'float') }}}, + {{{ makeGetValue('value', '4', 'float') }}}, + {{{ makeGetValue('value', '8', 'float') }}}); + }, + + alSourceQueueBuffers__deps: ["updateSource"], alSourceQueueBuffers: function(source, count, buffers) { if (!AL.currentContext) { #if OPENAL_DEBUG console.error("alSourceQueueBuffers called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG console.error("alSourceQueueBuffers called with an invalid source"); #endif - return; - } - if (count != 1) { -#if OPENAL_DEBUG - console.error("Queuing multiple buffers using alSourceQueueBuffers is not supported yet"); -#endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } for (var i = 0; i < count; ++i) { - var buffer = {{{ makeGetValue('buffers', 'i*4', 'i32') }}}; - if (buffer > AL.currentContext.buf.length) { + var bufferIdx = {{{ makeGetValue('buffers', 'i*4', 'i32') }}}; + if (bufferIdx > AL.currentContext.buf.length) { #if OPENAL_DEBUG console.error("alSourceQueueBuffers called with an invalid buffer"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } - AL.currentContext.src[source - 1].buffer = AL.currentContext.buf[buffer - 1].buf; } + + for (var i = 0; i < count; ++i) { + var bufferIdx = {{{ makeGetValue('buffers', 'i*4', 'i32') }}}; + var buffer = AL.currentContext.buf[bufferIdx - 1]; + src.queue.push({ buffer: buffer, src: null }); + } + + _updateSource(src); }, - alSourceUnqueueBuffers: function(source, count, buffers) - { + alSourceUnqueueBuffers__deps: ["updateSource"], + alSourceUnqueueBuffers: function(source, count, buffers) { if (!AL.currentContext) { #if OPENAL_DEBUG console.error("alSourceUnqueueBuffers called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG console.error("alSourceUnqueueBuffers called with an invalid source"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } - if (count != 1) { -#if OPENAL_DEBUG - console.error("Queuing multiple buffers using alSourceUnqueueBuffers is not supported yet"); -#endif + + if (count > src.buffersPlayed) { + AL.currentContext.err = 0xA003 /* AL_INVALID_VALUE */; return; } - for (var i = 0; i < count; ++i) { - var buffer = AL.currentContext.src[source - 1].buffer; - for (var j = 0; j < AL.currentContext.buf.length; ++j) { - if (buffer == AL.currentContext.buf[j].buf) { + + for (var i = 0; i < count; i++) { + var entry = src.queue.shift(); + // Write the buffers index out to the return list. + for (var j = 0; j < AL.currentContext.buf.length; j++) { + var b = AL.currentContext.buf[j]; + if (b && b == entry.buffer) { {{{ makeSetValue('buffers', 'i*4', 'j+1', 'i32') }}}; - AL.currentContext.src[source - 1].buffer = null; break; } } + src.buffersPlayed--; } + + _updateSource(src); }, alDeleteBuffers: function(count, buffers) @@ -308,21 +553,43 @@ var LibraryOpenAL = { #if OPENAL_DEBUG console.error("alDeleteBuffers called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; + return; + } + if (count > AL.currentContext.buf.length) { + AL.currentContext.err = 0xA003 /* AL_INVALID_VALUE */; return; } + for (var i = 0; i < count; ++i) { var bufferIdx = {{{ makeGetValue('buffers', 'i*4', 'i32') }}} - 1; - if (bufferIdx < AL.currentContext.buf.length && AL.currentContext.buf[bufferIdx]) { - var buffer = AL.currentContext.buf[bufferIdx].buf; - for (var j = 0; j < AL.currentContext.src.length; ++j) { - if (buffer == AL.currentContext.src[j].buffer) { - AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; + + // Make sure the buffer index is valid. + if (bufferIdx >= AL.currentContext.buf.length || !AL.currentContext.buf[bufferIdx]) { + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; + return; + } + + // Make sure the buffer is no longer in use. + var buffer = AL.currentContext.buf[bufferIdx]; + for (var j = 0; j < AL.currentContext.src.length; ++j) { + var src = AL.currentContext.src[j]; + if (!src) { + continue; + } + for (var k = 0; k < src.queue.length; k++) { + if (buffer === src.queue[k].buffer) { + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } } - delete AL.currentContext.buf[bufferIdx]; } } + + for (var i = 0; i < count; ++i) { + var bufferIdx = {{{ makeGetValue('buffers', 'i*4', 'i32') }}} - 1; + delete AL.currentContext.buf[bufferIdx]; + } }, alGenBuffers: function(count, buffers) { @@ -330,10 +597,11 @@ var LibraryOpenAL = { #if OPENAL_DEBUG console.error("alGenBuffers called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } for (var i = 0; i < count; ++i) { - AL.currentContext.buf.push({buf: null}); + AL.currentContext.buf.push(null); {{{ makeSetValue('buffers', 'i*4', 'AL.currentContext.buf.length', 'i32') }}}; } }, @@ -343,6 +611,7 @@ var LibraryOpenAL = { #if OPENAL_DEBUG console.error("alBufferData called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } if (buffer > AL.currentContext.buf.length) { @@ -375,16 +644,21 @@ var LibraryOpenAL = { #endif return; } - AL.currentContext.buf[buffer - 1].buf = AL.currentContext.ctx.createBuffer(channels, size / (bytes * channels), freq); + try { + AL.currentContext.buf[buffer - 1] = AL.currentContext.ctx.createBuffer(channels, size / (bytes * channels), freq); + } catch (e) { + AL.currentContext.err = 0xA003 /* AL_INVALID_VALUE */; + return; + } var buf = new Array(channels); for (var i = 0; i < channels; ++i) { - buf[i] = AL.currentContext.buf[buffer - 1].buf.getChannelData(i); + buf[i] = AL.currentContext.buf[buffer - 1].getChannelData(i); } for (var i = 0; i < size / (bytes * channels); ++i) { for (var j = 0; j < channels; ++j) { switch (bytes) { case 1: - var val = {{{ makeGetValue('data', 'i*channels+j', 'i8') }}}; + var val = {{{ makeGetValue('data', 'i*channels+j', 'i8') }}} & 0xff; // unsigned buf[j][i] = -1.0 + val * (2/256); break; case 2: @@ -396,110 +670,105 @@ var LibraryOpenAL = { } }, - alSourcePlay__deps: ["alSourceStop"], + alSourcePlay__deps: ['setSourceState'], alSourcePlay: function(source) { if (!AL.currentContext) { #if OPENAL_DEBUG console.error("alSourcePlay called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG console.error("alSourcePlay called with an invalid source"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } - var offset = 0; - if ("src" in AL.currentContext.src[source - 1] && - AL.currentContext.src[source - 1]["src"].buffer == - AL.currentContext.src[source - 1].buffer) { - if (AL.currentContext.src[source - 1].paused) { - // So now we have to resume playback, remember the offset here. - offset = AL.currentContext.src[source - 1].pausedTime - - AL.currentContext.src[source - 1].playTime; - } else { - // If the source is already playing, we need to resume from beginning. - // We do that by stopping the current source and replaying it. - _alSourceStop(source); - } - } - var src = AL.currentContext.ctx.createBufferSource(); - src.loop = AL.currentContext.src[source - 1].loop; - src.buffer = AL.currentContext.src[source - 1].buffer; - src.connect(AL.currentContext.src[source - 1].gain); - src.start(0, offset); - AL.currentContext.src[source - 1].playTime = AL.currentContext.ctx.currentTime; - AL.currentContext.src[source - 1].paused = false; - AL.currentContext.src[source - 1]['src'] = src; + _setSourceState(src, 0x1012 /* AL_PLAYING */); }, + alSourceStop__deps: ['setSourceState'], alSourceStop: function(source) { if (!AL.currentContext) { #if OPENAL_DEBUG console.error("alSourceStop called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG console.error("alSourceStop called with an invalid source"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } - if (AL.currentContext.src[source - 1] && "src" in AL.currentContext.src[source - 1]) { - AL.currentContext.src[source - 1]["src"].stop(0); - delete AL.currentContext.src[source - 1]["src"]; - } + _setSourceState(src, 0x1014 /* AL_STOPPED */); }, + alSourcePause__deps: ['setSourceState'], alSourcePause: function(source) { if (!AL.currentContext) { #if OPENAL_DEBUG console.error("alSourcePause called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG console.error("alSourcePause called with an invalid source"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } - if ("src" in AL.currentContext.src[source - 1] && - !AL.currentContext.src[source - 1].paused) { - AL.currentContext.src[source - 1].paused = true; - AL.currentContext.src[source - 1].pausedTime = AL.currentContext.ctx.currentTime; - AL.currentContext.src[source - 1]["src"].stop(0); - delete AL.currentContext.src[source - 1].src; - } + _setSourceState(src, 0x1013 /* AL_PAUSED */); }, + alGetSourcei__deps: ['updateSource'], alGetSourcei: function(source, param, value) { if (!AL.currentContext) { #if OPENAL_DEBUG console.error("alGetSourcei called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } - if (source > AL.currentContext.src.length) { + var src = AL.currentContext.src[source - 1]; + if (!src) { #if OPENAL_DEBUG console.error("alGetSourcei called with an invalid source"); #endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; return; } + + // Being that we have no way to receive end events from buffer nodes, + // we currently proccess and update a source's buffer queue every + // ~QUEUE_INTERVAL milliseconds. However, this interval is not precise, + // so we also forcefully update the source when alGetSourcei is queried + // to aid in the common scenario of application calling alGetSourcei(AL_BUFFERS_PROCESSED) + // to recycle buffers. + _updateSource(src); + switch (param) { case 0x202 /* AL_SOURCE_RELATIVE */: - // Always return 1 - {{{ makeSetValue('value', '0', '1', 'i32') }}}; + {{{ makeSetValue('value', '0', 'src.panner ? 1 : 0', 'i32') }}}; break; case 0x1009 /* AL_BUFFER */: - if (AL.currentContext.src[source - 1].buffer == null) { + if (!src.queue.length) { {{{ makeSetValue('value', '0', '0', 'i32') }}}; } else { - var buf = AL.currentContext.src[source - 1].buffer; + // Find the first unprocessed buffer. + var buffer = src.queue[src.buffersPlayed].buffer; + // Return its index. for (var i = 0; i < AL.currentContext.buf.length; ++i) { - if (buf == AL.currentContext.buf[i].buf) { + if (buffer == AL.currentContext.buf[i]) { {{{ makeSetValue('value', '0', 'i+1', 'i32') }}}; return; } @@ -508,32 +777,79 @@ var LibraryOpenAL = { } break; case 0x1010 /* AL_SOURCE_STATE */: - if ("src" in AL.currentContext.src[source - 1]) { - {{{ makeSetValue('value', '0', '0x1012', 'i32') }}} /* AL_PLAYING */; - } else if (AL.currentContext.src[source - 1].paused) { - {{{ makeSetValue('value', '0', '0x1013', 'i32') }}} /* AL_PAUSED */; - } else if (AL.currentContext.src[source - 1].playTime == -1) { - {{{ makeSetValue('value', '0', '0x1011', 'i32') }}} /* AL_INITIAL */; - } else { - {{{ makeSetValue('value', '0', '0x1014', 'i32') }}} /* AL_STOPPED */; - } + {{{ makeSetValue('value', '0', 'src.state', 'i32') }}}; break; case 0x1015 /* AL_BUFFERS_QUEUED */: - if (AL.currentContext.src[source - 1].buffer) { - {{{ makeSetValue('value', '0', '1', 'i32') }}} - } else { + {{{ makeSetValue('value', '0', 'src.queue.length', 'i32') }}} + break; + case 0x1016 /* AL_BUFFERS_PROCESSED */: + if (src.loop) { {{{ makeSetValue('value', '0', '0', 'i32') }}} + } else { + {{{ makeSetValue('value', '0', 'src.buffersPlayed', 'i32') }}} } break; - case 0x1016 /* AL_BUFFERS_PROCESSED */: - // Always return 1 - {{{ makeSetValue('value', '0', '1', 'i32') }}} + default: + AL.currentContext.err = 0xA002 /* AL_INVALID_ENUM */; + break; + } + }, + + alGetSourcef: function(source, param, value) { + if (!AL.currentContext) { +#if OPENAL_DEBUG + console.error("alGetSourcef called without a valid context"); +#endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; + return; + } + var src = AL.currentContext.src[source - 1]; + if (!src) { +#if OPENAL_DEBUG + console.error("alGetSourcef called with an invalid source"); +#endif + AL.currentContext.err = 0xA001 /* AL_INVALID_NAME */; + return; + } + switch (param) { + // case 0x1003 /* AL_PITCH */: + // break; + case 0x100A /* AL_GAIN */: + {{{ makeSetValue('value', '0', 'src.gain.gain.value', 'float') }}} + break; + // case 0x100D /* AL_MIN_GAIN */: + // break; + // case 0x100E /* AL_MAX_GAIN */: + // break; + case 0x1023 /* AL_MAX_DISTANCE */: + {{{ makeSetValue('value', '0', 'src.maxDistance', 'float') }}} + break; + case 0x1021 /* AL_ROLLOFF_FACTOR */: + {{{ makeSetValue('value', '0', 'src.rolloffFactor', 'float') }}} + break; + // case 0x1022 /* AL_CONE_OUTER_GAIN */: + // break; + // case 0x1001 /* AL_CONE_INNER_ANGLE */: + // break; + // case 0x1002 /* AL_CONE_OUTER_ANGLE */: + // break; + case 0x1020 /* AL_REFERENCE_DISTANCE */: + {{{ makeSetValue('value', '0', 'src.refDistance', 'float') }}} + break; + // case 0x1024 /* AL_SEC_OFFSET */: + // break; + // case 0x1025 /* AL_SAMPLE_OFFSET */: + // break; + // case 0x1026 /* AL_BYTE_OFFSET */: + // break; + default: + AL.currentContext.err = 0xA002 /* AL_INVALID_ENUM */; break; } }, alDistanceModel: function(model) { - if (model != 0 /* AL_NONE */) { + if (model !== 0 /* AL_NONE */) { #if OPENAL_DEBUG console.log("Only alDistanceModel(AL_NONE) is currently supported"); #endif @@ -545,6 +861,7 @@ var LibraryOpenAL = { #if OPENAL_DEBUG console.error("alListenerfv called without a valid context"); #endif + AL.currentContext.err = 0xA004 /* AL_INVALID_OPERATION */; return; } switch (param) { @@ -576,6 +893,7 @@ var LibraryOpenAL = { #if OPENAL_DEBUG console.log("alListenerfv with param " + param + " not implemented yet"); #endif + AL.currentContext.err = 0xA002 /* AL_INVALID_ENUM */; break; } }, @@ -588,13 +906,27 @@ var LibraryOpenAL = { return 0; }, + alGetString: function (param) { + return allocate(intArrayFromString('NA'), 'i8', ALLOC_NORMAL); + }, + alGetProcAddress: function(fname) { return 0; }, + alcGetString: function (param) { + return allocate(intArrayFromString('NA'), 'i8', ALLOC_NORMAL); + }, + alcGetProcAddress: function(device, fname) { return 0; }, + + alDopplerFactor: function(value) { + }, + + alDopplerVelocity: function(value) { + } }; autoAddDeps(LibraryOpenAL, '$AL'); diff --git a/src/library_sdl.js b/src/library_sdl.js index 4477e457..80c7ac07 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -1238,61 +1238,133 @@ var LibrarySDL = { return flags; // We support JPG, PNG, TIF because browsers do }, - IMG_Load_RW__deps: ['SDL_LockSurface'], - IMG_Load_RW: function(rwopsID, freesrc) { - var rwops = SDL.rwops[rwopsID]; + IMG_Load_RW__deps: ['SDL_LockSurface', 'SDL_FreeRW'], + IMG_Load_RW: function(rwopsID, freeSrc) { + try { + // stb_image integration support + var cleanup = function() { + if (rwops && freeSrc) _SDL_FreeRW(rwopsID); + }; + function addCleanup(func) { + var old = cleanup; + cleanup = function() { + old(); + func(); + } + } + function callStbImage(func, params) { + var x = Module['_malloc']({{{ QUANTUM_SIZE }}}); + var y = Module['_malloc']({{{ QUANTUM_SIZE }}}); + var comp = Module['_malloc']({{{ QUANTUM_SIZE }}}); + addCleanup(function() { + Module['_free'](x); + Module['_free'](y); + Module['_free'](comp); + if (data) Module['_stbi_image_free'](data); + }); + var data = Module['_' + func].apply(null, params.concat([x, y, comp, 0])); + if (!data) return null; + return { + rawData: true, + data: data, + width: {{{ makeGetValue('x', 0, 'i32') }}}, + height: {{{ makeGetValue('y', 0, 'i32') }}}, + size: {{{ makeGetValue('x', 0, 'i32') }}} * {{{ makeGetValue('y', 0, 'i32') }}} * {{{ makeGetValue('comp', 0, 'i32') }}}, + bpp: {{{ makeGetValue('comp', 0, 'i32') }}} + }; + } - if (rwops === undefined) { - return 0; - } + var rwops = SDL.rwops[rwopsID]; + if (rwops === undefined) { + return 0; + } - var filename = rwops.filename; - - if (filename === undefined) { - Runtime.warnOnce('Only file names that have been preloaded are supported for IMG_Load_RW.'); - // TODO. Support loading image data from embedded files, similarly to Mix_LoadWAV_RW - // TODO. Support loading image data from byte arrays, similarly to Mix_LoadWAV_RW - return 0; - } - - filename = FS.standardizePath(filename); - if (filename[0] == '/') { - // Convert the path to relative - filename = filename.substr(1); - } - var raw = Module["preloadedImages"][filename]; - if (!raw) { - if (raw === null) Module.printErr('Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!'); - Runtime.warnOnce('Cannot find preloaded image ' + filename); - return 0; - } - if (Module['freePreloadedMediaOnUse']) { - Module["preloadedImages"][filename] = null; - } - var surf = SDL.makeSurface(raw.width, raw.height, 0, false, 'load:' + filename); - var surfData = SDL.surfaces[surf]; - surfData.ctx.globalCompositeOperation = "copy"; - surfData.ctx.drawImage(raw, 0, 0, raw.width, raw.height, 0, 0, raw.width, raw.height); - surfData.ctx.globalCompositeOperation = "source-over"; - // XXX SDL does not specify that loaded images must have available pixel data, in fact - // there are cases where you just want to blit them, so you just need the hardware - // accelerated version. However, code everywhere seems to assume that the pixels - // are in fact available, so we retrieve it here. This does add overhead though. - _SDL_LockSurface(surf); - surfData.locked--; // The surface is not actually locked in this hack - if (SDL.GL) { - // After getting the pixel data, we can free the canvas and context if we do not need to do 2D canvas blitting - surfData.canvas = surfData.ctx = null; + var filename = rwops.filename; + if (filename === undefined) { +#if STB_IMAGE + var raw = callStbImage('stbi_load_from_memory', [rwops.bytes, rwops.count]); + if (!raw) return 0; +#else + Runtime.warnOnce('Only file names that have been preloaded are supported for IMG_Load_RW. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js)'); + return 0; +#endif + } + + if (!raw) { + filename = FS.standardizePath(filename); + if (filename[0] == '/') { + // Convert the path to relative + filename = filename.substr(1); + } + var raw = Module["preloadedImages"][filename]; + if (!raw) { + if (raw === null) Module.printErr('Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!'); +#if STB_IMAGE + var name = Module['_malloc'](filename.length+1); + writeStringToMemory(filename, name); + addCleanup(function() { + Module['_free'](name); + }); + var raw = callStbImage('stbi_load', [name]); + if (!raw) return 0; +#else + Runtime.warnOnce('Cannot find preloaded image ' + filename); + Runtime.warnOnce('Cannot find preloaded image ' + filename + '. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js)'); + return 0; +#endif + } else if (Module['freePreloadedMediaOnUse']) { + Module["preloadedImages"][filename] = null; + } + } + + var surf = SDL.makeSurface(raw.width, raw.height, 0, false, 'load:' + filename); + var surfData = SDL.surfaces[surf]; + surfData.ctx.globalCompositeOperation = "copy"; + if (!raw.rawData) { + surfData.ctx.drawImage(raw, 0, 0, raw.width, raw.height, 0, 0, raw.width, raw.height); + } else { + var imageData = surfData.ctx.getImageData(0, 0, surfData.width, surfData.height); + if (raw.bpp == 4) { + imageData.data.set({{{ makeHEAPView('U8', 'raw.data', 'raw.data+raw.size') }}}); + } else if (raw.bpp == 3) { + var pixels = raw.size/3; + var data = imageData.data; + var sourcePtr = raw.data; + var destPtr = 0; + for (var i = 0; i < pixels; i++) { + data[destPtr++] = {{{ makeGetValue('sourcePtr++', 0, 'i8', null, 1) }}}; + data[destPtr++] = {{{ makeGetValue('sourcePtr++', 0, 'i8', null, 1) }}}; + data[destPtr++] = {{{ makeGetValue('sourcePtr++', 0, 'i8', null, 1) }}}; + data[destPtr++] = 255; + } + } else { + Module.printErr('cannot handle bpp ' + raw.bpp); + return 0; + } + surfData.ctx.putImageData(imageData, 0, 0); + } + surfData.ctx.globalCompositeOperation = "source-over"; + // XXX SDL does not specify that loaded images must have available pixel data, in fact + // there are cases where you just want to blit them, so you just need the hardware + // accelerated version. However, code everywhere seems to assume that the pixels + // are in fact available, so we retrieve it here. This does add overhead though. + _SDL_LockSurface(surf); + surfData.locked--; // The surface is not actually locked in this hack + if (SDL.GL) { + // After getting the pixel data, we can free the canvas and context if we do not need to do 2D canvas blitting + surfData.canvas = surfData.ctx = null; + } + return surf; + } finally { + cleanup(); } - return surf; }, SDL_LoadBMP: 'IMG_Load', SDL_LoadBMP_RW: 'IMG_Load_RW', - IMG_Load__deps: ['IMG_Load_RW', 'SDL_RWFromFile', 'SDL_FreeRW'], + IMG_Load__deps: ['IMG_Load_RW', 'SDL_RWFromFile'], IMG_Load: function(filename){ var rwops = _SDL_RWFromFile(filename); - var result = _IMG_Load_RW(rwops); - _SDL_FreeRW(rwops); + var result = _IMG_Load_RW(rwops, 1); return result; }, @@ -2055,11 +2127,13 @@ var LibrarySDL = { // Misc SDL_InitSubSystem: function(flags) { return 0 }, + SDL_RWFromConstMem: function(mem, size) { var id = SDL.rwops.length; // TODO: recycle ids when they are null SDL.rwops.push({ bytes: mem, count: size }); return id; }, + SDL_RWFromMem: 'SDL_RWFromConstMem', SDL_RWFromFile: function(_name, mode) { var id = SDL.rwops.length; // TODO: recycle ids when they are null diff --git a/src/postamble.js b/src/postamble.js index 49fd9b3e..25a50bfc 100644 --- a/src/postamble.js +++ b/src/postamble.js @@ -1,9 +1,12 @@ // === Auto-generated postamble setup entry stuff === -Module['callMain'] = function callMain(args) { +var initialStackTop; +var inMain; + +Module['callMain'] = Module.callMain = function callMain(args) { assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)'); - assert(!Module['preRun'] || Module['preRun'].length == 0, 'cannot call main when preRun functions remain to be called'); + assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); args = args || []; @@ -28,29 +31,37 @@ Module['callMain'] = function callMain(args) { var start = Date.now(); #endif - var ret; + initialStackTop = STACKTOP; + inMain = true; - var initialStackTop = STACKTOP; + var ret; try { ret = Module['_main'](argc, argv, 0); } catch(e) { - if (e.name == 'ExitStatus') { - return e.status; + if (e && typeof e == 'object' && e.type == 'ExitStatus') { + // exit() throws this once it's done to make sure execution + // has been stopped completely + Module.print('Exit Status: ' + e.value); + return e.value; } else if (e == 'SimulateInfiniteLoop') { + // running an evented main loop, don't immediately exit Module['noExitRuntime'] = true; } else { throw e; } } finally { - STACKTOP = initialStackTop; + inMain = false; } #if BENCHMARK Module.realPrint('main() took ' + (Date.now() - start) + ' milliseconds'); #endif - return ret; + // if we're not running an evented main loop, it's time to exit + if (!Module['noExitRuntime']) { + exit(ret); + } } {{GLOBAL_VARS}} @@ -60,20 +71,14 @@ function run(args) { if (runDependencies > 0) { Module.printErr('run() called, but dependencies remain, so not running'); - return 0; + return; } - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - var toRun = Module['preRun']; - Module['preRun'] = []; - for (var i = toRun.length-1; i >= 0; i--) { - toRun[i](); - } - if (runDependencies > 0) { - // a preRun added a dependency, run will be called later - return 0; - } + preRun(); + + if (runDependencies > 0) { + // a preRun added a dependency, run will be called later + return; } function doRun() { @@ -81,21 +86,12 @@ function run(args) { preMain(); - var ret = 0; calledRun = true; if (Module['_main'] && shouldRunNow) { - ret = Module['callMain'](args); - if (!Module['noExitRuntime']) { - exitRuntime(); - } - } - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length > 0) { - Module['postRun'].pop()(); - } + Module['callMain'](args); } - return ret; + + postRun(); } if (Module['setStatus']) { @@ -106,13 +102,43 @@ function run(args) { }, 1); if (!ABORT) doRun(); }, 1); - return 0; } else { - return doRun(); + doRun(); } } Module['run'] = Module.run = run; +function exit(status) { + ABORT = true; + STACKTOP = initialStackTop; + + // TODO call externally added 'exit' callbacks with the status code. + // It'd be nice to provide the same interface for all Module events (e.g. + // prerun, premain, postmain). Perhaps an EventEmitter so we can do: + // Module.on('exit', function (status) {}); + + // exit the runtime + exitRuntime(); + + if (inMain) { + // if we're still inside the callMain's try/catch, we need to throw an + // exception in order to immediately terminate execution. + throw { type: 'ExitStatus', value: status }; + } +} +Module['exit'] = Module.exit = exit; + +function abort(text) { + if (text) { + Module.print(text); + } + + ABORT = true; + + throw 'abort() at ' + (new Error().stack); +} +Module['abort'] = Module.abort = abort; + // {{PRE_RUN_ADDITIONS}} if (Module['preInit']) { diff --git a/src/preamble.js b/src/preamble.js index 218e0388..2955c885 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -242,12 +242,6 @@ var tempI64, tempI64b; var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9; #endif -function abort(text) { - Module.print(text + ':\n' + (new Error).stack); - ABORT = true; - throw "Assertion: " + text; -} - function assert(condition, text) { if (!condition) { abort('Assertion failed: ' + text); @@ -711,24 +705,75 @@ function callRuntimeCallbacks(callbacks) { } } -var __ATINIT__ = []; // functions called during startup -var __ATMAIN__ = []; // functions called when main() is to be run -var __ATEXIT__ = []; // functions called during shutdown +var __ATPRERUN__ = []; // functions called before the runtime is initialized +var __ATINIT__ = []; // functions called during startup +var __ATMAIN__ = []; // functions called when main() is to be run +var __ATEXIT__ = []; // functions called during shutdown +var __ATPOSTRUN__ = []; // functions called after the runtime has exited var runtimeInitialized = false; +function preRun() { + // compatibility - merge in anything from Module['preRun'] at this time + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); +} + function ensureInitRuntime() { if (runtimeInitialized) return; runtimeInitialized = true; callRuntimeCallbacks(__ATINIT__); } + function preMain() { callRuntimeCallbacks(__ATMAIN__); } + function exitRuntime() { callRuntimeCallbacks(__ATEXIT__); } +function postRun() { + // compatibility - merge in anything from Module['postRun'] at this time + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} +Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun; + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} +Module['addOnInit'] = Module.addOnInit = addOnInit; + +function addOnPreMain(cb) { + __ATMAIN__.unshift(cb); +} +Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain; + +function addOnExit(cb) { + __ATEXIT__.unshift(cb); +} +Module['addOnExit'] = Module.addOnExit = addOnExit; + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} +Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun; + // Tools // This processes a JS string into a C-line array of numbers, 0-terminated. @@ -865,12 +910,6 @@ Module['removeRunDependency'] = removeRunDependency; Module["preloadedImages"] = {}; // maps url to image data Module["preloadedAudios"] = {}; // maps url to audio data -function addPreRun(func) { - if (!Module['preRun']) Module['preRun'] = []; - else if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - Module['preRun'].push(func); -} - #if PGO var PGOMonitor = { called: {}, @@ -885,7 +924,7 @@ var PGOMonitor = { }; Module['PGOMonitor'] = PGOMonitor; __ATEXIT__.push({ func: function() { PGOMonitor.dump() } }); -addPreRun(function() { addRunDependency('pgo') }); +addOnPreRun(function() { addRunDependency('pgo') }); #endif function loadMemoryInitializer(filename) { @@ -898,7 +937,7 @@ function loadMemoryInitializer(filename) { } // always do this asynchronously, to keep shell and web as similar as possible - addPreRun(function() { + addOnPreRun(function() { if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) { applyData(Module['readBinary'](filename)); } else { diff --git a/src/settings.js b/src/settings.js index 52e4eeb0..87ab820d 100644 --- a/src/settings.js +++ b/src/settings.js @@ -194,6 +194,12 @@ var FORCE_GL_EMULATION = 0; // Forces inclusion of full GL emulation code. var DISABLE_GL_EMULATION = 0; // Disable inclusion of full GL emulation code. Useful when you don't want emulation // but do need INCLUDE_FULL_LIBRARY or MAIN_MODULE. +var STB_IMAGE = 0; // Enables building of stb-image, a tiny public-domain library for decoding images, allowing + // decoding of images without using the browser's built-in decoders. The benefit is that this + // can be done synchronously, however, it will not be as fast as the browser itself. + // When enabled, stb-image will be used automatically from IMG_Load and IMG_Load_RW. You + // can also call the stbi_* functions directly yourself. + var DISABLE_EXCEPTION_CATCHING = 0; // Disables generating code to actually catch exceptions. If the code you // are compiling does not actually rely on catching exceptions (but the // compiler generates code for it, maybe because of stdlibc++ stuff), @@ -416,880 +422,881 @@ var DEBUG_TAGS_SHOWING = []; // A cached set of defines, generated from the header files. This // lets the emscripten libc (library.js) see the right values. -// If you the headers or use different ones, you will need to override -// this. -var C_DEFINES = {'SI_MESGQ': '5', - 'M_SQRTPI': '1.77245385091', - '_NL_MESSAGES_CODESET': '86', - 'SIGRTMIN': '27', - 'math_errhandling': '1', - 'M_LOG10E': '0.434294481903', - '_S_IFMT': '0170000', - '_CS_V7_ENV': '20', - 'USHRT_MAX': '65535', - '_SC_XOPEN_LEGACY': '98', - 'HAVE_STDINT_H': '1', - '_SC_XOPEN_VERSION': '106', - 'F_UNLCK': '3', - '_SC_BC_DIM_MAX': '58', - 'SDL_LOADSO_DLOPEN': '1', - 'S_IFDIR': '0040000', - 'HAVE_ALLOCA': '1', - '_SC_BARRIERS': '56', - '_IFDIR': '0040000', - 'SDL_JOYSTICK_DINPUT': '1', - '_IFLNK': '0120000', - '__long_double_t': "<type 'long'>", - 'DEFFILEMODE': '0000400', - 'HAVE_SSCANF': '1', - '_FCREAT': '512', - 'HAVE_STRTOLL': '1', - 'SDL_VIDEO_OPENGL_ES': '1', - 'O_CREAT': '512', - 'SHRT_MAX': '32767', - 'SDL_JOYSTICK_ANDROID': '1', - '_SC_NPROCESSORS_CONF': '9', - '_XOPEN_ENH_I18N': '1', - 'F_DUPFD_CLOEXEC': '14', - '_CS_POSIX_V6_LP64_OFF64_LIBS': '11', - '_POSIX_SHARED_MEMORY_OBJECTS': '200112', - 'ABDAY_7': '20', - 'ABDAY_6': '19', - 'ABDAY_5': '18', - 'ABDAY_4': '17', - 'ABDAY_3': '16', - 'M_PI': '3.14159265359', +// If you modify the headers or use different ones, you will need +// to override this. +var C_DEFINES = { 'ABDAY_1': '14', - '_PC_REC_MIN_XFER_SIZE': '18', - '_SC_V6_ILP32_OFFBIG': '93', - 'SIGSTOP': '17', - '_M_LN2': '0.69314718056', - 'F_UNLKSYS': '4', - 'PTHREAD_CREATE_JOINABLE': '1', - 'SDL_VIDEO_OPENGL_GLX': '1', - 'M_PI_2': '1.57079632679', - '_SC_MEMLOCK': '24', - 'M_PI_4': '0.785398163397', + 'ABDAY_2': '15', + 'ABDAY_3': '16', + 'ABDAY_4': '17', + 'ABDAY_5': '18', + 'ABDAY_6': '19', + 'ABDAY_7': '20', + 'ABMON_1': '33', + 'ABMON_10': '42', + 'ABMON_11': '43', + 'ABMON_12': '44', + 'ABMON_2': '34', + 'ABMON_3': '35', + 'ABMON_4': '36', + 'ABMON_5': '37', + 'ABMON_6': '38', + 'ABMON_7': '39', + 'ABMON_8': '40', + 'ABMON_9': '41', + 'ACCESSPERMS': '0000400', + 'AF_INET': '2', + 'AF_INET6': '6', + 'ALLPERMS': '0004000', + 'ALT_DIGITS': '49', + 'AM_STR': '5', + 'ARG_MAX': '4096', + 'AT_EACCESS': '1', + 'AT_FDCWD': '-2', + 'AT_REMOVEDIR': '8', + 'AT_SYMLINK_FOLLOW': '4', + 'AT_SYMLINK_NOFOLLOW': '2', + 'CHAR_BIT': '8', + 'CHAR_MAX': '127', + 'CHAR_MIN': '-128', + 'CLK_TCK': '1000', + 'CLOCKS_PER_SEC': '1000', + 'CLOCK_ALLOWED': '1', + 'CLOCK_DISABLED': '0', + 'CLOCK_DISALLOWED': '0', + 'CLOCK_ENABLED': '1', + 'CODESET': '0', + 'CRNCYSTR': '56', + 'DAY_1': '7', + 'DAY_2': '8', + 'DAY_3': '9', + 'DAY_4': '10', + 'DAY_5': '11', + 'DAY_6': '12', + 'DAY_7': '13', + 'DEFFILEMODE': '0000400', + 'DOMAIN': '1', + 'D_FMT': '2', + 'D_MD_ORDER': '57', + 'D_T_FMT': '1', + 'EOF': '-1', + 'ERA': '45', + 'ERA_D_FMT': '46', + 'ERA_D_T_FMT': '47', + 'ERA_T_FMT': '48', + 'FAPPEND': '8', + 'FASYNC': '64', + 'FCREAT': '512', + 'FDEFER': '32', + 'FD_CLOEXEC': '1', + 'FD_SETSIZE': '64', + 'FEXCL': '2048', 'FEXLOCK': '256', - '_FNDELAY': '16384', - 'SIGEV_NONE': '1', - 'SIGWINCH': '28', - 'UTIME_NOW': '-2', - '_SC_THREADS': '42', - '__INT_MAX__': '2147483647', - '_XBS5_LP64_OFF64': '-1', - '_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS': '6', - '___int_least32_t_defined': '1', - '_POSIX_MAPPED_FILES': '200112', - 'HAVE_FREE': '1', - 'M_E': '2.71828182846', - 'SIGTRAP': '5', - '_SC_SS_REPL_MAX': '78', - '_PC_SOCK_MAXBUF': '100', - '_SC_THREAD_KEYS_MAX': '38', - 'O_RDWR': '2', - '__LARGE64_FILES': '1', - '_POSIX_V6_LP64_OFF64': '-1', - 'HAVE_COSF': '1', - '_SC_2_PBS': '113', + 'FIONREAD': '1', + 'FLT_EVAL_METHOD': '0', + 'FMARK': '16', + 'FNBIO': '4096', + 'FNDELAY': '16384', 'FNOCTTY': '32768', - '_SC_TRACE_INHERIT': '86', - 'PTHREAD_PRIO_NONE': '0', - '_SC_REGEXP': '72', - '_CS_POSIX_V6_LP64_OFF64_CFLAGS': '9', - '_SC_DELAYTIMER_MAX': '37', - 'HAVE_SINF': '1', - '_POSIX_RAW_SOCKETS': '200112', - '___int64_t_defined': '1', - 'S_IFREG': '0100000', - 'SIGCLD': '20', + 'FNONBIO': '16384', + 'FOPEN': '-1', + 'FP_ILOGBNAN': '2147483647', + 'FP_INFINITE': '1', + 'FP_NAN': '0', + 'FP_NORMAL': '4', + 'FP_SUBNORMAL': '3', + 'FP_ZERO': '2', + 'FREAD': '1', + 'FSHLOCK': '128', + 'FSYNC': '8192', + 'FTRUNC': '1024', + 'FWRITE': '2', + 'F_CNVT': '12', + 'F_DUPFD': '0', + 'F_DUPFD_CLOEXEC': '14', + 'F_GETFD': '1', + 'F_GETFL': '3', + 'F_GETLK': '7', 'F_GETLK64': '20', - '_IFCHR': '0020000', - 'S_IRWXG': '0000040', - 'SDL_VIDEO_DRIVER_ANDROID': '1', - 'POLLHUP': '16', - 'S_IFMT': '0170000', - 'RADIXCHAR': '50', - 'HAVE_UNSETENV': '1', - '_S_IEXEC': '0000100', - '_SC_XOPEN_CRYPT': '96', - 'M_LN10': '2.30258509299', - 'S_IRWXU': '0000400', - 'OPTIONAL_ARG': '2', - '_PC_CHOWN_RESTRICTED': '6', - 'CRNCYSTR': '56', - 'SIZEOF_VOIDP': '4', - 'SCHAR_MAX': '127', - 'S_BLKSIZE': '1024', - 'SDL_JOYSTICK_NDS': '1', - '_SC_CLK_TCK': '2', - 'AM_STR': '5', - '__BUFSIZ__': '16', - 'ALT_DIGITS': '49', - 'HAVE_SIGNAL_H': '1', - 'HAVE_ATAN': '1', - '_NL_CTYPE_MB_CUR_MAX': '85', - '_REENT_SIGNAL_SIZE': '24', - 'SDL_AUDIO_DRIVER_DSOUND': '1', + 'F_GETOWN': '5', + 'F_LOCK': '1', + 'F_OK': '0', + 'F_RDLCK': '1', + 'F_RGETLK': '10', + 'F_RSETLK': '11', 'F_RSETLKW': '13', - 'HAVE_STRTOULL': '1', - '___int16_t_defined': '1', - 'SIGXCPU': '24', - '_SC_MQ_PRIO_MAX': '14', - '_FTRUNC': '1024', - '__MACOSX__': '1', - 'SDL_LOADSO_WINDOWS': '1', - 'SDL_VIDEO_DRIVER_X11_XINERAMA': '1', - 'MALLOC_ALIGNMENT': '16', - 'PTHREAD_CREATE_DETACHED': '0', - '_POSIX2_VERSION': '200112', - '_O_CREAT': '512', - 'PM_STR': '6', - '_PC_POSIX_SECURITY': '91', + 'F_SETFD': '2', + 'F_SETFL': '4', + 'F_SETLK': '8', + 'F_SETLK64': '21', + 'F_SETLKW': '9', + 'F_SETLKW64': '22', + 'F_SETOWN': '6', + 'F_TEST': '3', + 'F_TLOCK': '2', + 'F_ULOCK': '0', + 'F_UNLCK': '3', + 'F_UNLKSYS': '4', + 'F_WRLCK': '2', + 'H8300': '1', + 'HAVE_ABS': '1', + 'HAVE_ALLOCA': '1', + 'HAVE_ALLOCA_H': '1', + 'HAVE_ATAN': '1', + 'HAVE_ATAN2': '1', + 'HAVE_ATOF': '1', + 'HAVE_ATOI': '1', + 'HAVE_BCOPY': '1', + 'HAVE_CALLOC': '1', + 'HAVE_CEIL': '1', + 'HAVE_COPYSIGN': '1', + 'HAVE_COS': '1', + 'HAVE_COSF': '1', + 'HAVE_CTYPE_H': '1', + 'HAVE_FABS': '1', + 'HAVE_FLOOR': '1', + 'HAVE_FREE': '1', + 'HAVE_GCC_ATOMICS': '1', + 'HAVE_GCC_SYNC_LOCK_TEST_AND_SET': '1', + 'HAVE_GETENV': '1', + 'HAVE_INDEX': '1', 'HAVE_INTTYPES_H': '1', - '_SC_2_LOCALEDEF': '112', - '_SC_STREAM_MAX': '100', + 'HAVE_ITOA': '1', + 'HAVE_LOG': '1', + 'HAVE_MALLOC': '1', + 'HAVE_MATH_H': '1', 'HAVE_MEMCMP': '1', - '_CS_POSIX_V7_ILP32_OFF32_LIBS': '3', - '_POSIX2_C_BIND': '200112', - '_POSIX_VERSION': '200112', - 'S_IFIFO': '0010000', - 'SDL_VIDEO_DRIVER_X11_XSCRNSAVER': '1', - 'SCHED_FIFO': '1', - 'SDL_HAPTIC_DISABLED': '1', - 'M_LN2LO': '1.90821492927e-10', - 'MON_10': '30', - '_CS_XBS5_ILP32_OFF32_LIBS': '3', - 'O_SYNC': '8192', - '_CS_POSIX_V6_ILP32_OFFBIG_LIBS': '7', - 'YESEXPR': '52', - '_PC_PATH_MAX': '4', - '_SC_SPORADIC_SERVER': '77', - 'SDL_POWER_UIKIT': '1', - '_POSIX_SYNCHRONIZED_IO': '200112', - 'SIGXFSZ': '25', - '_SC_NPROCESSORS_ONLN': '10', - '_CS_POSIX_V6_LPBIG_OFFBIG_LIBS': '15', - '_PC_MAX_INPUT': '2', - 'F_TLOCK': '2', - 'REQUIRED_ARG': '1', - '_SC_VERSION': '7', + 'HAVE_MEMCPY': '1', + 'HAVE_MEMMOVE': '1', + 'HAVE_MEMSET': '1', + 'HAVE_M_PI': '1', + 'HAVE_NANOSLEEP': '1', + 'HAVE_POW': '1', + 'HAVE_PUTENV': '1', + 'HAVE_QSORT': '1', + 'HAVE_REALLOC': '1', + 'HAVE_RINDEX': '1', + 'HAVE_SCALBN': '1', + 'HAVE_SETENV': '1', + 'HAVE_SETJMP': '1', + 'HAVE_SIGACTION': '1', + 'HAVE_SIGNAL_H': '1', + 'HAVE_SIN': '1', + 'HAVE_SINF': '1', + 'HAVE_SNPRINTF': '1', + 'HAVE_SQRT': '1', + 'HAVE_SSCANF': '1', + 'HAVE_STDARG_H': '1', + 'HAVE_STDDEF_H': '1', + 'HAVE_STDINT_H': '1', + 'HAVE_STDIO_H': '1', + 'HAVE_STRCASECMP': '1', + 'HAVE_STRCHR': '1', + 'HAVE_STRCMP': '1', + 'HAVE_STRDUP': '1', + 'HAVE_STRICMP': '1', + 'HAVE_STRING_H': '1', + 'HAVE_STRLCAT': '1', + 'HAVE_STRLCPY': '1', + 'HAVE_STRLEN': '1', + 'HAVE_STRNCASECMP': '1', + 'HAVE_STRNCMP': '1', + 'HAVE_STRRCHR': '1', + 'HAVE_STRSTR': '1', + 'HAVE_STRTOD': '1', + 'HAVE_STRTOL': '1', + 'HAVE_STRTOLL': '1', + 'HAVE_STRTOUL': '1', + 'HAVE_STRTOULL': '1', + 'HAVE_SYSCONF': '1', + 'HAVE_SYSCTLBYNAME': '1', + 'HAVE_SYS_TYPES_H': '1', + 'HAVE_UNSETENV': '1', + 'HAVE_VSNPRINTF': '1', + 'HAVE__LTOA': '1', + 'HAVE__STRICMP': '1', + 'HAVE__STRLWR': '1', + 'HAVE__STRNICMP': '1', + 'HAVE__STRREV': '1', + 'HAVE__STRUPR': '1', + 'HAVE__ULTOA': '1', 'HUGE_VAL': 'inf', - 'AT_EACCESS': '1', - 'ABMON_3': '35', - 'ABMON_2': '34', - 'ABMON_1': '33', - '_SC_THREAD_ROBUST_PRIO_PROTECT': '123', - 'ABMON_7': '39', - 'ABMON_6': '38', - 'ABMON_5': '37', - 'ABMON_4': '36', - 'S_IWUSR': '0000200', - 'ABMON_9': '41', - 'ABMON_8': '40', - 'UNDERFLOW': '4', - '_SC_AIO_MAX': '35', - 'ERA': '45', - '_CS_XBS5_ILP32_OFFBIG_LIBS': '7', - 'S_IXUSR': '0000100', - '_SC_THREAD_PRIO_INHERIT': '46', - '__HPUX__': '1', - 'M_2_PI': '0.636619772368', - '_O_RDWR': '2', - '_PC_2_SYMLINKS': '13', - 'POSIX_FADV_DONTNEED': '135', - 'SIG_BLOCK': '1', - 'SDL_VIDEO_RENDER_NDS': '0', - '_O_WRONLY': '1', - '_CS_XBS5_LP64_OFF64_CFLAGS': '9', - '__OS2__': '1', + 'INT_MAX': '2147483647', + 'IPPROTO_TCP': '1', + 'IPPROTO_UDP': '2', + 'ITIMER_PROF': '2', + 'ITIMER_REAL': '0', + 'ITIMER_VIRTUAL': '1', + 'LACKS_SYS_MMAN_H': '1', + 'LONG_MAX': '2147483647', + 'MAC_OS_X_VERSION_10_4': '1040', + 'MAC_OS_X_VERSION_10_5': '1050', + 'MAC_OS_X_VERSION_10_6': '1060', + 'MALLOC_ALIGNMENT': '16', + 'MATH_ERREXCEPT': '2', + 'math_errhandling': '1', + 'MATH_ERRNO': '1', + 'MAXPATHLEN': '1024', + 'MB_LEN_MAX': '1', + 'MON_1': '21', + 'MON_10': '30', + 'MON_11': '31', + 'MON_12': '32', 'MON_2': '22', 'MON_3': '23', - '_POSIX_PRIORITY_SCHEDULING': '200112', - 'MON_1': '21', - 'MON_6': '26', - 'MON_7': '27', 'MON_4': '24', 'MON_5': '25', - '_SC_SPAWN': '75', + 'MON_6': '26', + 'MON_7': '27', 'MON_8': '28', 'MON_9': '29', - '_CS_POSIX_V6_ILP32_OFF32_LDFLAGS': '2', - '_SC_TRACE_EVENT_NAME_MAX': '85', - 'SA_SIGINFO': '2', - '_FBINARY': '65536', - 'PTHREAD_PRIO_PROTECT': '2', - 'POLLERR': '8', - 'SIGVTALRM': '26', - 'O_BINARY': '65536', - '_REENT_EMERGENCY_SIZE': '25', - 'S_IEXEC': '0000100', - '_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS': '13', - 'SIGEV_THREAD': '3', - 'ITIMER_VIRTUAL': '1', - 'HAVE_ATOI': '1', - '_SC_TRACE_SYS_MAX': '89', - '_POSIX_NO_TRUNC': '1', - 'HAVE_ATOF': '1', - '__RISCOS__': '1', - '_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS': '17', - 'HAVE_ATAN2': '1', - 'HAVE_PUTENV': '1', - 'SDL_AUDIO_DRIVER_ANDROID': '1', - 'F_SETFL': '4', - 'HAVE_GCC_ATOMICS': '1', - '_CS_POSIX_V7_THREADS_CFLAGS': '18', - '_SC_AIO_PRIO_DELTA_MAX': '36', - '_POSIX2_C_DEV': '200112', - '_SC_MONOTONIC_CLOCK': '69', - '_POSIX_THREAD_SPORADIC_SERVER': '1', - '_FNOINHERIT': '262144', - 'SDL_HAPTIC_NDS': '1', - '_SC_XOPEN_ENH_I18N': '97', - 'SIGPROF': '27', - 'F_SETLKW64': '22', - 'HAVE__STRREV': '1', - '_O_APPEND': '8', - '_FDEFER': '32', - 'SDL_VIDEO_DRIVER_X11_XINPUT': '1', - 'CLOCK_DISALLOWED': '0', - 'SDL_VIDEO_DRIVER_X11': '1', - '_SC_MEMORY_PROTECTION': '26', - 'HAVE_STDIO_H': '1', - 'LONG_MAX': '2147483647', - 'no_argument': '0', - '__NINTENDODS__': '1', - 'F_OK': '0', - 'SDL_ASSEMBLY_ROUTINES': '1', - 'FAPPEND': '8', - 'SA_RESETHAND': '8', - 'FREAD': '1', - '_SC_SPIN_LOCKS': '76', - 'SDL_VIDEO_DRIVER_COCOA': '1', + 'M_1_PI': '0.318309886184', + 'M_2_PI': '0.636619772368', + 'M_2_SQRTPI': '1.1283791671', + 'M_3PI_4': '2.35619449019', + 'M_E': '2.71828182846', + 'M_INVLN2': '1.44269504089', + 'M_IVLN10': '0.434294481903', + 'M_LN10': '2.30258509299', + 'M_LN2': '0.69314718056', 'M_LN2HI': '0.693147180369', - '_LIBC_LIMITS_H_': '1', - 'S_IFSOCK': '0140000', - 'SDL_AUDIO_DRIVER_COREAUDIO': '1', - 'HAVE_MALLOC': '1', - '_POSIX_DEVCTL_DIRECTION': '1', - 'ABDAY_2': '15', - 'HAVE_STRTOL': '1', - 'SDL_VIDEO_DRIVER_DUMMY': '1', - '_PC_LINK_MAX': '0', - '_POSIX_THREAD_PRIO_PROTECT': '1', - 'HAVE_STRTOD': '1', - '__DREAMCAST__': '1', + 'M_LN2LO': '1.90821492927e-10', + 'M_LOG10E': '0.434294481903', + 'M_LOG2E': '1.44269504089', + 'M_LOG2_E': '0.69314718056', + 'M_PI': '3.14159265359', + 'M_PI_2': '1.57079632679', + 'M_PI_4': '0.785398163397', + 'M_SQRT1_2': '0.707106781187', + 'M_SQRT2': '1.41421356237', + 'M_SQRT3': '1.73205080757', + 'M_SQRTPI': '1.77245385091', + 'M_TWOPI': '6.28318530718', + 'NBBY': '8', + 'NL_ARGMAX': '32', 'NOEXPR': '53', - 'FEXCL': '2048', - '_SC_FSYNC': '22', - '_SC_GETGR_R_SIZE_MAX': '50', - '_POSIX_THREAD_PROCESS_SHARED': '200112', - 'HAVE_QSORT': '1', - '_ATEXIT_SIZE': '32', - '_SC_TRACE_NAME_MAX': '88', - '_SC_BC_BASE_MAX': '57', - '__WIN32__': '1', - '_LIMITS_H': '1', - 'PTHREAD_STACK_MIN': '200', + 'NOSTR': '55', + 'NO_ARG': '0', + 'no_argument': '0', + 'NSIG': '32', + 'NULL': '0', + 'OPTIONAL_ARG': '2', + 'optional_argument': '2', + 'OPT_ARG': '2', + 'OVERFLOW': '3', + 'O_ACCMODE': '3', 'O_APPEND': '8', - '_CS_XBS5_LP64_OFF64_LINTFLAGS': '12', - '_SC_XOPEN_STREAMS': '104', - 'HAVE_CALLOC': '1', - 'HAVE_CTYPE_H': '1', - '_SC_GETPW_R_SIZE_MAX': '51', - '_POSIX_ASYNCHRONOUS_IO': '1', - 'UCHAR_MAX': '255', - '__BSDI__': '1', - '_SC_PAGE_SIZE': '8', - 'SDL_THREADS_DISABLED': '1', - '_SC_XBS5_ILP32_OFFBIG': '93', - 'S_IFBLK': '0060000', - '_S_IFIFO': '0010000', - 'T_FMT_AMPM': '4', - '_POSIX_SEMAPHORES': '200112', - 'HAVE_SCALBN': '1', - '__NETBSD__': '1', - 'NBBY': '8', - 'SDL_AUDIO_DRIVER_XAUDIO2': '1', - 'SIGEMT': '7', - '_POSIX_FSYNC': '200112', - 'F_SETLKW': '9', - '_MB_EXTENDED_CHARSETS_WINDOWS': '1', - 'SIGALRM': '14', - 'SDL_VIDEO_DRIVER_UIKIT': '1', - '___int32_t_defined': '1', + 'O_BINARY': '65536', + 'O_CLOEXEC': '262144', + 'O_CREAT': '512', + 'O_EXCL': '2048', + 'O_NOCTTY': '32768', + 'O_NOINHERIT': '262144', + 'O_NONBLOCK': '16384', + 'O_RDONLY': '0', + 'O_RDWR': '2', + 'O_SYNC': '8192', + 'O_TEXT': '131072', + 'O_TRUNC': '1024', + 'O_WRONLY': '1', + 'PATH_MAX': '4096', + 'PF_INET': '2', + 'PF_INET6': '6', + 'PLOSS': '6', + 'PM_STR': '6', + 'POLLERR': '8', + 'POLLHUP': '16', + 'POLLIN': '1', 'POLLNVAL': '4', - '_SC_OPEN_MAX': '4', - 'CHAR_BIT': '8', - '_N_LISTS': '30', - '_SC_2_FORT_RUN': '111', + 'POLLOUT': '2', + 'POSIX_FADV_DONTNEED': '135', + 'PTHREAD_CREATE_DETACHED': '0', + 'PTHREAD_CREATE_JOINABLE': '1', + 'PTHREAD_EXPLICIT_SCHED': '2', + 'PTHREAD_INHERIT_SCHED': '1', 'PTHREAD_MUTEX_DEFAULT': '3', - 'HAVE_STDARG_H': '1', - '_POSIX_REGEXP': '1', - '_SC_RE_DUP_MAX': '73', + 'PTHREAD_MUTEX_ERRORCHECK': '2', + 'PTHREAD_MUTEX_NORMAL': '0', + 'PTHREAD_MUTEX_RECURSIVE': '1', + 'PTHREAD_PRIO_INHERIT': '1', + 'PTHREAD_PRIO_NONE': '0', + 'PTHREAD_PRIO_PROTECT': '2', 'PTHREAD_PROCESS_PRIVATE': '0', - '_S_IFREG': '0100000', - '_SC_THREAD_THREADS_MAX': '40', - '_SC_THREAD_PRIO_PROTECT': '47', - 'SDL_THREAD_WINDOWS': '1', - '_SC_2_PBS_CHECKPOINT': '115', - 'M_1_PI': '0.318309886184', - '_PC_POSIX_PERMISSIONS': '90', - '_SC_TIMERS': '33', - 'MON_11': '31', - 'MON_12': '32', - 'CLOCK_DISABLED': '0', - '_SC_XBS5_LPBIG_OFFBIG': '95', - '_POSIX_SPIN_LOCKS': '200112', - '_FREAD': '1', - 'HAVE_SYSCONF': '1', - '_SC_SHARED_MEMORY_OBJECTS': '199', - 'F_RDLCK': '1', - 'F_GETFD': '1', - 'MAC_OS_X_VERSION_10_4': '1040', - 'AT_SYMLINK_NOFOLLOW': '2', - '_PC_ALLOC_SIZE_MIN': '15', - '_POSIX_C_SOURCE': '2', - '_SC_READER_WRITER_LOCKS': '71', - 'HAVE_STRING_H': '1', - 'SI_USER': '1', - '_SC_MEMLOCK_RANGE': '25', - '_SC_PRIORITY_SCHEDULING': '101', - 'optional_argument': '2', - 'T_FMT': '3', - 'LACKS_SYS_MMAN_H': '1', - 'MAC_OS_X_VERSION_10_5': '1050', - '_PC_VDISABLE': '8', - 'SDL_VIDEO_DRIVER_X11_XSHAPE': '1', - 'THOUSEP': '51', - 'O_NOINHERIT': '262144', 'PTHREAD_PROCESS_SHARED': '1', - '_SC_TRACE_EVENT_FILTER': '84', - 'ERA_T_FMT': '48', - '_SC_THREAD_ATTR_STACKADDR': '43', - '_SC_LOGIN_NAME_MAX': '52', - 'M_LOG2E': '1.44269504089', - 'ITIMER_PROF': '2', - 'HAVE_LOG': '1', - '_SC_2_C_BIND': '108', - 'FNONBIO': '16384', - '_PC_NO_TRUNC': '7', - 'F_RSETLK': '11', - '_SC_V7_ILP32_OFF32': '92', - '_FAPPEND': '8', - 'PTHREAD_EXPLICIT_SCHED': '2', - '_FNBIO': '4096', - 'HAVE_SYSCTLBYNAME': '1', - 'F_CNVT': '12', - '_SC_SHELL': '74', - '_SC_V6_LP64_OFF64': '94', + 'PTHREAD_SCOPE_PROCESS': '0', + 'PTHREAD_SCOPE_SYSTEM': '1', + 'PTHREAD_STACK_MIN': '200', + 'RADIXCHAR': '50', + 'REQUIRED_ARG': '1', + 'required_argument': '1', + 'REQ_ARG': '1', + 'R_OK': '4', + 'SA_NOCLDSTOP': '1', + 'SA_NODEFER': '4', + 'SA_RESETHAND': '8', + 'SA_SIGINFO': '2', + 'SCHAR_MAX': '127', + 'SCHAR_MIN': '-128', + 'SCHED_FIFO': '1', 'SCHED_OTHER': '0', - '_CS_GNU_LIBC_VERSION': '42', - '_SC_SEM_VALUE_MAX': '17', - 'S_ENFMT': '0002000', - '_SC_MQ_OPEN_MAX': '13', + 'SCHED_RR': '2', + 'SCHED_SPORADIC': '4', + 'SDL_ALTIVEC_BLITTERS': '1', + 'SDL_ASSEMBLY_ROUTINES': '1', + 'SDL_ASSERT_LEVEL': '1', + 'SDL_AUDIO_DRIVER_ANDROID': '1', + 'SDL_AUDIO_DRIVER_COREAUDIO': '1', + 'SDL_AUDIO_DRIVER_COREAUDIOIPHONE': '1', + 'SDL_AUDIO_DRIVER_DISK': '1', + 'SDL_AUDIO_DRIVER_DSOUND': '1', + 'SDL_AUDIO_DRIVER_DUMMY': '1', + 'SDL_AUDIO_DRIVER_NDS': '1', + 'SDL_AUDIO_DRIVER_WINMM': '1', + 'SDL_AUDIO_DRIVER_XAUDIO2': '1', + 'SDL_HAPTIC_DINPUT': '1', + 'SDL_HAPTIC_DISABLED': '1', + 'SDL_HAPTIC_DUMMY': '1', + 'SDL_HAPTIC_IOKIT': '1', + 'SDL_HAPTIC_NDS': '1', + 'SDL_IPHONE_KEYBOARD': '1', + 'SDL_IPHONE_MAX_GFORCE': '5.0', + 'SDL_JOYSTICK_ANDROID': '1', + 'SDL_JOYSTICK_DINPUT': '1', 'SDL_JOYSTICK_DISABLED': '1', - '_POSIX_ADVISORY_INFO': '200112', - 'SIGABRT': '6', - '_CS_POSIX_V7_ILP32_OFF32_CFLAGS': '1', - '_CS_XBS5_ILP32_OFF32_CFLAGS': '1', - '_MB_EXTENDED_CHARSETS_ISO': '1', - '_SC_HOST_NAME_MAX': '65', - '_SC_THREAD_STACK_MIN': '39', - '_SC_TIMEOUTS': '82', - 'POLLOUT': '2', - '_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS': '16', - '_SC_CHILD_MAX': '1', - '__RAND_MAX': '2147483647', + 'SDL_JOYSTICK_IOKIT': '1', + 'SDL_JOYSTICK_NDS': '1', + 'SDL_LOADSO_DISABLED': '1', + 'SDL_LOADSO_DLOPEN': '1', + 'SDL_LOADSO_WINDOWS': '1', + 'SDL_POWER_MACOSX': '1', + 'SDL_POWER_NINTENDODS': '1', + 'SDL_POWER_UIKIT': '1', + 'SDL_POWER_WINDOWS': '1', + 'SDL_THREADS_DISABLED': '1', + 'SDL_THREAD_PTHREAD': '1', + 'SDL_THREAD_PTHREAD_RECURSIVE_MUTEX': '1', + 'SDL_THREAD_WINDOWS': '1', + 'SDL_TIMERS_DISABLED': '1', + 'SDL_TIMER_NDS': '1', + 'SDL_TIMER_UNIX': '1', + 'SDL_TIMER_WINCE': '1', + 'SDL_TIMER_WINDOWS': '1', + 'SDL_VIDEO_DRIVER_ANDROID': '1', + 'SDL_VIDEO_DRIVER_COCOA': '1', + 'SDL_VIDEO_DRIVER_DUMMY': '1', 'SDL_VIDEO_DRIVER_NDS': '1', - '_POSIX_THREAD_ATTR_STACKADDR': '1', + 'SDL_VIDEO_DRIVER_UIKIT': '1', + 'SDL_VIDEO_DRIVER_WINDOWS': '1', + 'SDL_VIDEO_DRIVER_X11': '1', + 'SDL_VIDEO_DRIVER_X11_XINERAMA': '1', + 'SDL_VIDEO_DRIVER_X11_XINPUT': '1', + 'SDL_VIDEO_DRIVER_X11_XRANDR': '1', + 'SDL_VIDEO_DRIVER_X11_XSCRNSAVER': '1', + 'SDL_VIDEO_DRIVER_X11_XSHAPE': '1', + 'SDL_VIDEO_DRIVER_X11_XVIDMODE': '1', + 'SDL_VIDEO_OPENGL': '1', + 'SDL_VIDEO_OPENGL_CGL': '1', + 'SDL_VIDEO_OPENGL_ES': '1', + 'SDL_VIDEO_OPENGL_GLX': '1', + 'SDL_VIDEO_OPENGL_WGL': '1', + 'SDL_VIDEO_RENDER_D3D': '1', + 'SDL_VIDEO_RENDER_NDS': '0', + 'SDL_VIDEO_RENDER_OGL': '1', + 'SDL_VIDEO_RENDER_OGL_ES': '1', + 'SDL_VIDEO_RENDER_OGL_ES2': '1', + 'SEEK_CUR': '1', + 'SEEK_END': '2', + 'SEEK_SET': '0', + 'SHRT_MAX': '32767', + 'SHRT_MIN': '-32768', + 'SIGABRT': '6', + 'SIGALRM': '14', + 'SIGBUS': '10', + 'SIGCHLD': '20', + 'SIGCLD': '20', + 'SIGCONT': '19', + 'SIGEMT': '7', + 'SIGEV_NONE': '1', + 'SIGEV_SIGNAL': '2', + 'SIGEV_THREAD': '3', 'SIGFPE': '8', - 'NL_ARGMAX': '32', - '_SC_2_PBS_MESSAGE': '117', - 'TIMER_ABSTIME': '4', - '_NL_CTYPE_CODESET_NAME': '0', - '_SC_2_C_DEV': '109', - '_SC_TIMER_MAX': '19', - 'S_IXOTH': '0000001', - 'FP_ZERO': '2', - 'SING': '2', - 'M_INVLN2': '1.44269504089', - 'SDL_TIMERS_DISABLED': '1', - 'M_TWOPI': '6.28318530718', - '_PC_REC_XFER_ALIGN': '19', - '_NL_TIME_DATE_FMT': '84', - '_SC_REALTIME_SIGNALS': '29', - '_POSIX2_RE_DUP_MAX': '255', - 'CLOCKS_PER_SEC': '1000', - '_READ_WRITE_RETURN_TYPE': "<type 'int'>", - 'ERA_D_T_FMT': '47', + 'SIGHUP': '1', + 'SIGILL': '4', + 'SIGINT': '2', + 'SIGIO': '23', + 'SIGIOT': '6', + 'SIGKILL': '9', + 'SIGLOST': '29', + 'SIGPIPE': '13', + 'SIGPOLL': '23', + 'SIGPROF': '27', + 'SIGPWR': '19', + 'SIGQUIT': '3', + 'SIGRTMAX': '31', + 'SIGRTMIN': '27', + 'SIGSEGV': '11', + 'SIGSTOP': '17', + 'SIGSYS': '12', + 'SIGTERM': '15', + 'SIGTRAP': '5', + 'SIGTSTP': '18', + 'SIGTTIN': '21', + 'SIGTTOU': '22', + 'SIGURG': '16', + 'SIGUSR1': '30', + 'SIGUSR2': '31', + 'SIGVTALRM': '26', + 'SIGWINCH': '28', + 'SIGXCPU': '24', + 'SIGXFSZ': '25', + 'SIG_BLOCK': '1', + 'SIG_SETMASK': '0', 'SIG_UNBLOCK': '2', - '_CS_XBS5_ILP32_OFFBIG_LDFLAGS': '6', - '_FSHLOCK': '128', - 'CLK_TCK': '1000', - 'D_FMT': '2', - 'SDL_VIDEO_OPENGL_CGL': '1', - '_POSIX_SPAWN': '1', - '_XBS5_ILP32_OFF32': '-1', - '_SC_THREAD_PRIO_CEILING': '47', - 'SCHED_SPORADIC': '4', - '_PC_ASYNC_IO': '9', + 'SING': '2', + 'SIZEOF_VOIDP': '4', + 'SI_ASYNCIO': '4', + 'SI_MESGQ': '5', + 'SI_QUEUE': '2', 'SI_TIMER': '3', - 'DAY_2': '8', - 'DAY_3': '9', - 'DAY_1': '7', - 'DAY_6': '12', - 'DAY_7': '13', - 'DAY_4': '10', - 'DAY_5': '11', - 'F_GETFL': '3', - 'HAVE_STRNCMP': '1', - 'AT_REMOVEDIR': '8', - 'SDL_THREAD_PTHREAD_RECURSIVE_MUTEX': '1', - 'PATH_MAX': '4096', - '_POSIX_TIMEOUTS': '1', - '_SC_MAPPED_FILES': '23', - '__IRIX__': '1', - 'HAVE_INDEX': '1', - 'HAVE__LTOA': '1', - '_SC_NGROUPS_MAX': '3', - '__QNXNTO__': '1', - '_FSYNC': '8192', - 'MATH_ERRNO': '1', - '_POSIX_SAVED_IDS': '1', - 'SDL_POWER_MACOSX': '1', - '_SC_SEMAPHORES': '30', - '__FILENAME_MAX__': '255', - 'SIGTSTP': '18', - 'F_ULOCK': '0', - 'HAVE_COS': '1', - '__LONG_MAX__': '2147483647', - 'F_WRLCK': '2', - '_POSIX_JOB_CONTROL': '1', - 'FLT_EVAL_METHOD': '0', - '_XOPEN_SHM': '1', - '_POSIX_CHOWN_RESTRICTED': '1', - 'F_SETLK64': '21', - '_SC_TRACE_LOG': '87', - 'HAVE_ITOA': '1', - 'SIGILL': '4', - '_FNONBLOCK': '16384', - '__OPENBSD__': '1', - '_POSIX_TIMERS': '1', - 'FNDELAY': '16384', - 'FD_CLOEXEC': '1', - 'POLLIN': '1', + 'SI_USER': '1', + 'SOCK_DGRAM': '20', + 'SOCK_STREAM': '200', + 'STDC_HEADERS': '1', + 'STDERR_FILENO': '2', + 'STDIN_FILENO': '0', + 'STDOUT_FILENO': '1', + 'S_BLKSIZE': '1024', + 'S_ENFMT': '0002000', + 'S_IEXEC': '0000100', + 'S_IFBLK': '0060000', + 'S_IFCHR': '0020000', + 'S_IFDIR': '0040000', + 'S_IFIFO': '0010000', + 'S_IFLNK': '0120000', + 'S_IFMT': '0170000', + 'S_IFREG': '0100000', + 'S_IFSOCK': '0140000', + 'S_IREAD': '0000400', + 'S_IRGRP': '0000040', + 'S_IROTH': '0000004', + 'S_IRUSR': '0000400', + 'S_IRWXG': '0000040', + 'S_IRWXO': '0000004', + 'S_IRWXU': '0000400', + 'S_ISGID': '0002000', + 'S_ISUID': '0004000', + 'S_ISVTX': '0001000', + 'S_IWGRP': '0000020', + 'S_IWOTH': '0000002', + 'S_IWRITE': '0000200', + 'S_IWUSR': '0000200', + 'S_IXGRP': '0000010', + 'S_IXOTH': '0000001', + 'S_IXUSR': '0000100', + 'THOUSEP': '51', + 'TIMER_ABSTIME': '4', + 'TLOSS': '5', + 'T_FMT': '3', + 'T_FMT_AMPM': '4', + 'UCHAR_MAX': '255', + 'UINT_MAX': '2147483647', + 'ULONG_MAX': '2147483647', + 'UNDERFLOW': '4', + 'USHRT_MAX': '65535', + 'UTIME_NOW': '-2', + 'UTIME_OMIT': '-1', + 'W_OK': '2', + 'X_OK': '1', + 'YESEXPR': '52', + 'YESSTR': '54', + '_ATEXIT_SIZE': '32', + '_CLOCKS_PER_SEC_': '1000', + '_CS_GNU_LIBC_VERSION': '42', + '_CS_GNU_LIBPTHREAD_VERSION': '43', + '_CS_PATH': '0', + '_CS_POSIX_V6_ILP32_OFF32_CFLAGS': '1', + '_CS_POSIX_V6_ILP32_OFF32_LDFLAGS': '2', + '_CS_POSIX_V6_ILP32_OFF32_LIBS': '3', + '_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS': '5', + '_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS': '6', + '_CS_POSIX_V6_ILP32_OFFBIG_LIBS': '7', + '_CS_POSIX_V6_LP64_OFF64_CFLAGS': '9', + '_CS_POSIX_V6_LP64_OFF64_LDFLAGS': '10', + '_CS_POSIX_V6_LP64_OFF64_LIBS': '11', + '_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS': '13', '_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS': '14', - '_POSIX_THREAD_CPUTIME': '1', - 'F_LOCK': '1', - '_FLOAT_ARG': "<type 'float'>", - 'REQ_ARG': '1', + '_CS_POSIX_V6_LPBIG_OFFBIG_LIBS': '15', + '_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS': '17', + '_CS_POSIX_V7_ILP32_OFF32_CFLAGS': '1', + '_CS_POSIX_V7_ILP32_OFF32_LDFLAGS': '2', + '_CS_POSIX_V7_ILP32_OFF32_LIBS': '3', + '_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS': '5', + '_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS': '6', + '_CS_POSIX_V7_ILP32_OFFBIG_LIBS': '7', + '_CS_POSIX_V7_LP64_OFF64_CFLAGS': '9', + '_CS_POSIX_V7_LP64_OFF64_LDFLAGS': '10', + '_CS_POSIX_V7_LP64_OFF64_LIBS': '11', + '_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS': '13', + '_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS': '14', + '_CS_POSIX_V7_LPBIG_OFFBIG_LIBS': '15', + '_CS_POSIX_V7_THREADS_CFLAGS': '18', + '_CS_POSIX_V7_THREADS_LDFLAGS': '19', + '_CS_POSIX_V7_WIDTH_RESTRICTED_ENVS': '17', + '_CS_V7_ENV': '20', + '_CS_XBS5_ILP32_OFF32_CFLAGS': '1', + '_CS_XBS5_ILP32_OFF32_LDFLAGS': '2', + '_CS_XBS5_ILP32_OFF32_LIBS': '3', '_CS_XBS5_ILP32_OFF32_LINTFLAGS': '4', - '_SC_THREAD_DESTRUCTOR_ITERATIONS': '53', - 'M_LN2': '0.69314718056', - 'UINT_MAX': '2147483647', - 'HAVE_STRDUP': '1', - 'SIG_SETMASK': '0', - '_SC_BC_STRING_MAX': '60', + '_CS_XBS5_ILP32_OFFBIG_CFLAGS': '5', + '_CS_XBS5_ILP32_OFFBIG_LDFLAGS': '6', + '_CS_XBS5_ILP32_OFFBIG_LIBS': '7', + '_CS_XBS5_ILP32_OFFBIG_LINTFLAGS': '8', + '_CS_XBS5_LP64_OFF64_CFLAGS': '9', + '_CS_XBS5_LP64_OFF64_LDFLAGS': '10', + '_CS_XBS5_LP64_OFF64_LIBS': '11', + '_CS_XBS5_LP64_OFF64_LINTFLAGS': '12', + '_CS_XBS5_LPBIG_OFFBIG_CFLAGS': '13', + '_CS_XBS5_LPBIG_OFFBIG_LDFLAGS': '14', '_CS_XBS5_LPBIG_OFFBIG_LIBS': '15', - '_SC_XOPEN_UUCP': '124', - '_SC_2_SW_DEV': '119', - 'FDEFER': '32', - 'FP_NAN': '0', - 'F_SETOWN': '6', - 'SDL_LOADSO_DISABLED': '1', - 'CHAR_MIN': '-128', - 'PTHREAD_SCOPE_SYSTEM': '1', - 'HAVE_SETENV': '1', - 'HAVE_STRNCASECMP': '1', - '_POSIX_V6_LPBIG_OFFBIG': '-1', - '_S_IWRITE': '0000200', - '_S_IFDIR': '0040000', - '_SC_ARG_MAX': '0', - '_SC_THREAD_PRIORITY_SCHEDULING': '45', - 'F_GETLK': '7', - 'SIGTTIN': '21', - '_CS_POSIX_V7_WIDTH_RESTRICTED_ENVS': '17', - '_POSIX_SPORADIC_SERVER': '1', - '_SC_THREAD_CPUTIME': '80', - '_POSIX_V6_ILP32_OFF32': '-1', - '_CS_POSIX_V7_ILP32_OFFBIG_LIBS': '7', - '_CS_POSIX_V6_ILP32_OFF32_LIBS': '3', - '_SC_SYNCHRONIZED_IO': '32', - '_UNIX98_THREAD_MUTEX_ATTRIBUTES': '1', - '_POSIX_REALTIME_SIGNALS': '200112', - '__SIGLASTNOTRT': '31', - 'ERA_D_FMT': '46', - 'HAVE_RINDEX': '1', - 'OPT_ARG': '2', - 'SDL_HAPTIC_IOKIT': '1', + '_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS': '16', + '_DATE_FMT': '84', + '_FAPPEND': '8', '_FASYNC': '64', - '_CS_POSIX_V6_ILP32_OFF32_CFLAGS': '1', - 'NOSTR': '55', - '_POSIX_MONOTONIC_CLOCK': '200112', - 'SIGPOLL': '23', - 'S_ISGID': '0002000', - 'FP_INFINITE': '1', - 'ULONG_MAX': '2147483647', - '__SIGFIRSTNOTRT': '1', - 'AT_SYMLINK_FOLLOW': '4', - 'FSYNC': '8192', - '__USE_XOPEN2K': '1', - 'SDL_VIDEO_RENDER_OGL_ES': '1', - '_CS_XBS5_ILP32_OFFBIG_CFLAGS': '5', - '_IFSOCK': '0140000', + '_FBINARY': '65536', + '_FCREAT': '512', + '_FDEFER': '32', + '_FEXCL': '2048', + '_FEXLOCK': '256', + '_FLOAT_ARG': "<type 'float'>", + '_FMARK': '16', + '_FNBIO': '4096', + '_FNDELAY': '16384', + '_FNOCTTY': '32768', + '_FNOINHERIT': '262144', + '_FNONBLOCK': '16384', + '_FOPEN': '-1', + '_FREAD': '1', + '_FSHLOCK': '128', + '_FSYNC': '8192', + '_FTEXT': '131072', + '_FTRUNC': '1024', + '_FWRITE': '2', + '_IFBLK': '0060000', + '_IFCHR': '0020000', + '_IFDIR': '0040000', '_IFIFO': '0010000', - 'ARG_MAX': '4096', - 'SIGPIPE': '13', - 'HAVE__ULTOA': '1', + '_IFLNK': '0120000', + '_IFMT': '0170000', + '_IFREG': '0100000', + '_IFSOCK': '0140000', + '_LARGEFILE64_SOURCE': '1', + '_LIBC_LIMITS_H_': '1', + '_LIMITS_H': '1', + '_LONG_LONG_TYPE': "<type 'long'>", + '_MB_EXTENDED_CHARSETS_ISO': '1', + '_MB_EXTENDED_CHARSETS_WINDOWS': '1', + '_M_LN2': '0.69314718056', + '_NL_CTYPE_CODESET_NAME': '0', + '_NL_CTYPE_MB_CUR_MAX': '85', + '_NL_MESSAGES_CODESET': '86', + '_NL_TIME_DATE_FMT': '84', + '_NULL': '0', + '_N_LISTS': '30', + '_O_APPEND': '8', + '_O_BINARY': '65536', + '_O_CREAT': '512', '_O_EXCL': '2048', - 'O_TRUNC': '1024', - 'O_TEXT': '131072', - '_POSIX_THREAD_PRIO_INHERIT': '1', - '_XBS5_ILP32_OFFBIG': '1', - 'HAVE_MEMMOVE': '1', - 'STDERR_FILENO': '2', - '_CS_XBS5_LPBIG_OFFBIG_CFLAGS': '13', - '__LINUX__': '1', - 'PLOSS': '6', - 'S_IRWXO': '0000004', - '_SC_V7_LP64_OFF64': '94', '_O_NOINHERIT': '262144', - 'D_MD_ORDER': '57', - '_IFMT': '0170000', - '_SC_SYMLOOP_MAX': '79', - 'MB_LEN_MAX': '1', - 'SDL_TIMER_WINDOWS': '1', - '_SC_XOPEN_UNIX': '105', - 'M_IVLN10': '0.434294481903', - 'ALLPERMS': '0004000', - 'HAVE_STRSTR': '1', - '__BEOS__': '1', - 'HAVE_GCC_SYNC_LOCK_TEST_AND_SET': '1', - 'F_SETFD': '2', - 'SIGUSR1': '30', - 'HAVE_SIN': '1', - 'SDL_VIDEO_DRIVER_X11_XRANDR': '1', - 'MAC_OS_X_VERSION_10_6': '1060', - '___int8_t_defined': '1', - 'SIGKILL': '9', - '_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS': '5', - 'PTHREAD_MUTEX_RECURSIVE': '1', - 'SIGSEGV': '11', - 'M_LOG2_E': '0.69314718056', - 'FWRITE': '2', - '_FEXCL': '2048', - 'SIGINT': '2', - 'HAVE_STRRCHR': '1', - 'H8300': '1', - '_POSIX_MEMORY_PROTECTION': '200112', - 'FP_ILOGBNAN': '2147483647', - '_SC_V7_LPBIG_OFFBIG': '95', - '_SC_CLOCK_SELECTION': '61', + '_O_RAW': '65536', + '_O_RDONLY': '0', + '_O_RDWR': '2', + '_O_TEXT': '131072', + '_O_TRUNC': '1024', + '_O_WRONLY': '1', + '_PC_2_SYMLINKS': '13', + '_PC_ALLOC_SIZE_MIN': '15', + '_PC_ASYNC_IO': '9', + '_PC_CHOWN_RESTRICTED': '6', + '_PC_FILESIZEBITS': '12', + '_PC_LINK_MAX': '0', + '_PC_MAX_CANON': '1', + '_PC_MAX_INPUT': '2', + '_PC_NAME_MAX': '3', + '_PC_NO_TRUNC': '7', + '_PC_PATH_MAX': '4', + '_PC_PIPE_BUF': '5', + '_PC_POSIX_PERMISSIONS': '90', + '_PC_POSIX_SECURITY': '91', '_PC_PRIO_IO': '10', - 'M_2_SQRTPI': '1.1283791671', - 'S_IROTH': '0000004', - '_SC_MESSAGE_PASSING': '27', - '_SC_V6_LPBIG_OFFBIG': '95', - 'SDL_AUDIO_DRIVER_DUMMY': '1', - 'HAVE_MEMCPY': '1', - '_SC_EXPR_NEST_MAX': '64', - 'SDL_TIMER_WINCE': '1', - 'STDC_HEADERS': '1', - '_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS': '5', - 'S_ISVTX': '0001000', - 'HAVE_STRLCPY': '1', - 'UTIME_OMIT': '-1', - '_CS_POSIX_V7_THREADS_LDFLAGS': '19', - 'SDL_POWER_WINDOWS': '1', - '_SC_PAGESIZE': '8', + '_PC_REC_INCR_XFER_SIZE': '16', '_PC_REC_MAX_XFER_SIZE': '17', - 'SIGIOT': '6', - 'FASYNC': '64', - '_SC_V7_ILP32_OFFBIG': '93', - '_RAND48_MULT_0': '58989', - '_RAND48_MULT_1': '57068', - '_RAND48_MULT_2': '5', - '_CS_POSIX_V6_LP64_OFF64_LDFLAGS': '10', - 'HAVE_STRTOUL': '1', - 'PTHREAD_MUTEX_NORMAL': '0', - '_O_TRUNC': '1024', - 'W_OK': '2', - 'O_NONBLOCK': '16384', - 'R_OK': '4', - '_IFBLK': '0060000', - 'FTRUNC': '1024', - '__OSF__': '1', - '_SC_XBS5_LP64_OFF64': '94', - 'STDIN_FILENO': '0', - 'HAVE_ABS': '1', - 'SDL_TIMER_NDS': '1', - '_CS_POSIX_V7_LPBIG_OFFBIG_LIBS': '15', - 'SDL_AUDIO_DRIVER_DISK': '1', - '_SC_SIGQUEUE_MAX': '18', - 'M_3PI_4': '2.35619449019', - 'HAVE_STRCMP': '1', + '_PC_REC_MIN_XFER_SIZE': '18', + '_PC_REC_XFER_ALIGN': '19', + '_PC_SOCK_MAXBUF': '100', + '_PC_SYMLINK_MAX': '14', + '_PC_SYNC_IO': '11', + '_PC_TIMESTAMP_RESOLUTION': '20', + '_PC_VDISABLE': '8', + '_POINTER_INT': "<type 'long'>", + '_POSIX2_CHAR_TERM': '200112', + '_POSIX2_C_BIND': '200112', + '_POSIX2_C_DEV': '200112', + '_POSIX2_RE_DUP_MAX': '255', + '_POSIX2_SW_DEV': '200112', + '_POSIX2_UPE': '200112', + '_POSIX2_VERSION': '200112', + '_POSIX_ADVISORY_INFO': '200112', + '_POSIX_ASYNCHRONOUS_IO': '1', + '_POSIX_BARRIERS': '200112', + '_POSIX_CHOWN_RESTRICTED': '1', + '_POSIX_CPUTIME': '1', + '_POSIX_C_SOURCE': '2', + '_POSIX_DEVCTL_DIRECTION': '1', + '_POSIX_DEVICE_CONTROL': '1', + '_POSIX_FSYNC': '200112', + '_POSIX_INTERRUPT_CONTROL': '1', + '_POSIX_IPV6': '200112', + '_POSIX_JOB_CONTROL': '1', + '_POSIX_MAPPED_FILES': '200112', + '_POSIX_MEMLOCK': '1', + '_POSIX_MEMLOCK_RANGE': '200112', + '_POSIX_MEMORY_PROTECTION': '200112', '_POSIX_MESSAGE_PASSING': '200112', - 'S_ISUID': '0004000', - 'SIGLOST': '29', + '_POSIX_MONOTONIC_CLOCK': '200112', + '_POSIX_NO_TRUNC': '1', + '_POSIX_PRIORITIZED_IO': '1', + '_POSIX_PRIORITY_SCHEDULING': '200112', + '_POSIX_RAW_SOCKETS': '200112', + '_POSIX_READER_WRITER_LOCKS': '200112', + '_POSIX_REALTIME_SIGNALS': '200112', + '_POSIX_REGEXP': '1', + '_POSIX_SAVED_IDS': '1', + '_POSIX_SEMAPHORES': '200112', + '_POSIX_SHARED_MEMORY_OBJECTS': '200112', + '_POSIX_SHELL': '1', + '_POSIX_SPAWN': '1', + '_POSIX_SPIN_LOCKS': '200112', + '_POSIX_SPORADIC_SERVER': '1', + '_POSIX_SYNCHRONIZED_IO': '200112', + '_POSIX_THREADS': '200112', + '_POSIX_THREAD_ATTR_STACKADDR': '1', + '_POSIX_THREAD_ATTR_STACKSIZE': '200112', + '_POSIX_THREAD_CPUTIME': '1', '_POSIX_THREAD_PRIORITY_SCHEDULING': '200112', - 'SDL_VIDEO_RENDER_OGL_ES2': '1', - '__FREEBSD__': '1', - '_SC_TZNAME_MAX': '20', - '_O_RAW': '65536', - '_CS_PATH': '0', - '_POSIX_BARRIERS': '200112', - 'SDL_ALTIVEC_BLITTERS': '1', - 'SEEK_SET': '0', + '_POSIX_THREAD_PRIO_INHERIT': '1', + '_POSIX_THREAD_PRIO_PROTECT': '1', + '_POSIX_THREAD_PROCESS_SHARED': '200112', '_POSIX_THREAD_SAFE_FUNCTIONS': '200112', - 'S_IREAD': '0000400', - '_LONG_LONG_TYPE': "<type 'long'>", - '___int_least8_t_defined': '1', - 'INT_MAX': '2147483647', + '_POSIX_THREAD_SPORADIC_SERVER': '1', + '_POSIX_TIMEOUTS': '1', + '_POSIX_TIMERS': '1', + '_POSIX_V6_ILP32_OFF32': '-1', '_POSIX_V6_ILP32_OFFBIG': '1', - '_SC_PHYS_PAGES': '11', - 'HAVE_BCOPY': '1', - '_PC_MAX_CANON': '1', - 'HAVE_STRICMP': '1', - '_CS_XBS5_LPBIG_OFFBIG_LDFLAGS': '14', - '_SC_THREAD_SAFE_FUNCTIONS': '49', - 'SIGRTMAX': '31', - 'S_IXGRP': '0000010', - 'HAVE_GETENV': '1', - '_XBS5_LPBIG_OFFBIG': '-1', - '_PC_NAME_MAX': '3', - 'O_EXCL': '2048', - '_SC_XOPEN_SHM': '103', - 'S_IWGRP': '0000020', - '_SC_TRACE_USER_EVENT_MAX': '90', - 'SDL_VIDEO_RENDER_D3D': '1', - 'HAVE__STRNICMP': '1', - 'M_SQRT1_2': '0.707106781187', - '_SC_AVPHYS_PAGES': '12', - '_SC_RAW_SOCKETS': '70', - 'O_RDONLY': '0', - '_DATE_FMT': '84', - 'HAVE_STRCASECMP': '1', - '__SOLARIS__': '1', - '_SC_RTSIG_MAX': '15', - '_POSIX_DEVICE_CONTROL': '1', - 'CLOCK_ENABLED': '1', - '_NULL': '0', - '_SC_PRIORITIZED_IO': '28', - '_O_TEXT': '131072', - 'SDL_VIDEO_DRIVER_X11_XVIDMODE': '1', - 'SIGBUS': '10', - 'CODESET': '0', - 'CHAR_MAX': '127', - 'SDL_POWER_NINTENDODS': '1', - 'SIGSYS': '12', - '_PC_REC_INCR_XFER_SIZE': '16', - 'S_IRUSR': '0000400', - '_PC_FILESIZEBITS': '12', - '_SC_XBS5_ILP32_OFF32': '92', - 'HAVE_MATH_H': '1', - 'HAVE_SQRT': '1', - 'SIGURG': '16', - '_POSIX_THREAD_ATTR_STACKSIZE': '200112', - '_CS_POSIX_V7_LP64_OFF64_LIBS': '11', - '_CS_GNU_LIBPTHREAD_VERSION': '43', - 'HAVE_M_PI': '1', + '_POSIX_V6_LP64_OFF64': '-1', + '_POSIX_V6_LPBIG_OFFBIG': '-1', + '_POSIX_VERSION': '200112', + '_RAND48_ADD': '11', + '_RAND48_MULT_0': '58989', + '_RAND48_MULT_1': '57068', + '_RAND48_MULT_2': '5', + '_RAND48_SEED_0': '13070', + '_RAND48_SEED_1': '43981', + '_RAND48_SEED_2': '4660', + '_READ_WRITE_RETURN_TYPE': "<type 'int'>", '_REENT_ASCTIME_SIZE': '26', + '_REENT_EMERGENCY_SIZE': '25', + '_REENT_SIGNAL_SIZE': '24', + '_SC_2_CHAR_TERM': '107', + '_SC_2_C_BIND': '108', + '_SC_2_C_DEV': '109', + '_SC_2_FORT_DEV': '110', + '_SC_2_FORT_RUN': '111', + '_SC_2_LOCALEDEF': '112', + '_SC_2_PBS': '113', + '_SC_2_PBS_ACCOUNTING': '114', + '_SC_2_PBS_CHECKPOINT': '115', '_SC_2_PBS_LOCATE': '116', - '_SC_V6_ILP32_OFF32': '92', - 'SIGCHLD': '20', - 'SHRT_MIN': '-32768', - '__HAIKU__': '1', - 'PTHREAD_MUTEX_ERRORCHECK': '2', - '_PC_SYNC_IO': '11', - 'SDL_VIDEO_OPENGL': '1', - 'FP_NORMAL': '4', + '_SC_2_PBS_MESSAGE': '117', + '_SC_2_PBS_TRACK': '118', + '_SC_2_SW_DEV': '119', '_SC_2_UPE': '120', - 'HAVE_POW': '1', - '_SC_SEM_NSEMS_MAX': '16', - '__ANDROID__': '1', + '_SC_2_VERSION': '121', + '_SC_ADVISORY_INFO': '54', + '_SC_AIO_LISTIO_MAX': '34', + '_SC_AIO_MAX': '35', + '_SC_AIO_PRIO_DELTA_MAX': '36', + '_SC_ARG_MAX': '0', + '_SC_ASYNCHRONOUS_IO': '21', + '_SC_ATEXIT_MAX': '55', + '_SC_AVPHYS_PAGES': '12', + '_SC_BARRIERS': '56', + '_SC_BC_BASE_MAX': '57', + '_SC_BC_DIM_MAX': '58', + '_SC_BC_SCALE_MAX': '59', + '_SC_BC_STRING_MAX': '60', + '_SC_CHILD_MAX': '1', + '_SC_CLK_TCK': '2', + '_SC_CLOCK_SELECTION': '61', + '_SC_COLL_WEIGHTS_MAX': '62', + '_SC_CPUTIME': '63', + '_SC_DELAYTIMER_MAX': '37', + '_SC_EXPR_NEST_MAX': '64', + '_SC_FSYNC': '22', + '_SC_GETGR_R_SIZE_MAX': '50', + '_SC_GETPW_R_SIZE_MAX': '51', + '_SC_HOST_NAME_MAX': '65', '_SC_IOV_MAX': '66', - 'S_IRGRP': '0000040', - 'YESSTR': '54', - 'HAVE_ALLOCA_H': '1', - 'S_IFCHR': '0020000', - '_POSIX_MEMLOCK': '1', - '_SC_TRACE': '83', - '_POSIX_INTERRUPT_CONTROL': '1', - '_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS': '6', - 'PTHREAD_SCOPE_PROCESS': '0', - '__GNUC_VA_LIST': '1', - 'HAVE_FABS': '1', - '_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS': '14', - 'TLOSS': '5', - '_TIME_T_': "<type 'long'>", - 'DOMAIN': '1', - 'HAVE_REALLOC': '1', - 'HAVE_STRLEN': '1', - '__IPHONEOS__': '1', - '_POINTER_INT': "<type 'long'>", - 'O_NOCTTY': '32768', - 'PTHREAD_PRIO_INHERIT': '1', - '_SC_THREAD_SPORADIC_SERVER': '81', - 'O_ACCMODE': '3', + '_SC_IPV6': '67', + '_SC_JOB_CONTROL': '5', '_SC_LINE_MAX': '68', - 'D_T_FMT': '1', - '_RAND48_SEED_1': '43981', - '_RAND48_SEED_0': '13070', - '_RAND48_SEED_2': '4660', - 'HAVE_STRLCAT': '1', - 'HAVE_SETJMP': '1', - 'SDL_AUDIO_DRIVER_COREAUDIOIPHONE': '1', - 'FOPEN': '-1', - 'F_RGETLK': '10', - 'F_DUPFD': '0', - '_S_IFCHR': '0020000', - 'SDL_IPHONE_KEYBOARD': '1', - '_POSIX_IPV6': '200112', - '_XOPEN_VERSION': '600', - 'HAVE_FLOOR': '1', - '_CS_XBS5_LP64_OFF64_LDFLAGS': '10', - '_FNOCTTY': '32768', - '_IFREG': '0100000', - 'FP_SUBNORMAL': '3', - 'SA_NOCLDSTOP': '1', - 'HAVE_STDDEF_H': '1', - 'NSIG': '32', - 'HAVE__STRUPR': '1', - 'SDL_THREAD_PTHREAD': '1', - 'S_IWOTH': '0000002', - 'SEEK_END': '2', - 'SDL_ASSERT_LEVEL': '1', - 'SI_ASYNCIO': '4', - 'required_argument': '1', - '_FWRITE': '2', - 'SCHED_RR': '2', - '_SC_2_FORT_DEV': '110', - 'SA_NODEFER': '4', - '_POSIX2_CHAR_TERM': '200112', - 'F_SETLK': '8', - 'SIGQUIT': '3', - '_SC_ATEXIT_MAX': '55', - '_POSIX_MEMLOCK_RANGE': '200112', + '_SC_LOGIN_NAME_MAX': '52', + '_SC_MAPPED_FILES': '23', + '_SC_MEMLOCK': '24', + '_SC_MEMLOCK_RANGE': '25', + '_SC_MEMORY_PROTECTION': '26', + '_SC_MESSAGE_PASSING': '27', + '_SC_MONOTONIC_CLOCK': '69', + '_SC_MQ_OPEN_MAX': '13', + '_SC_MQ_PRIO_MAX': '14', + '_SC_NGROUPS_MAX': '3', + '_SC_NPROCESSORS_CONF': '9', + '_SC_NPROCESSORS_ONLN': '10', + '_SC_OPEN_MAX': '4', + '_SC_PAGESIZE': '8', + '_SC_PAGE_SIZE': '8', + '_SC_PHYS_PAGES': '11', + '_SC_PRIORITIZED_IO': '28', + '_SC_PRIORITY_SCHEDULING': '101', + '_SC_RAW_SOCKETS': '70', + '_SC_READER_WRITER_LOCKS': '71', + '_SC_REALTIME_SIGNALS': '29', + '_SC_REGEXP': '72', + '_SC_RE_DUP_MAX': '73', + '_SC_RTSIG_MAX': '15', '_SC_SAVED_IDS': '6', - 'PTHREAD_INHERIT_SCHED': '1', - 'SEEK_CUR': '1', - 'S_IFLNK': '0120000', - '_S_IREAD': '0000400', - '_FOPEN': '-1', - 'OVERFLOW': '3', - '_POSIX_SHELL': '1', - 'FMARK': '16', - '_POSIX2_UPE': '200112', - 'SDL_VIDEO_RENDER_OGL': '1', - '_SC_2_PBS_TRACK': '118', - '_POSIX_CPUTIME': '1', + '_SC_SEMAPHORES': '30', + '_SC_SEM_NSEMS_MAX': '16', + '_SC_SEM_VALUE_MAX': '17', + '_SC_SHARED_MEMORY_OBJECTS': '199', + '_SC_SHELL': '74', + '_SC_SIGQUEUE_MAX': '18', + '_SC_SPAWN': '75', + '_SC_SPIN_LOCKS': '76', + '_SC_SPORADIC_SERVER': '77', + '_SC_SS_REPL_MAX': '78', + '_SC_STREAM_MAX': '100', + '_SC_SYMLOOP_MAX': '79', + '_SC_SYNCHRONIZED_IO': '32', + '_SC_THREADS': '42', + '_SC_THREAD_ATTR_STACKADDR': '43', + '_SC_THREAD_ATTR_STACKSIZE': '44', + '_SC_THREAD_CPUTIME': '80', + '_SC_THREAD_DESTRUCTOR_ITERATIONS': '53', + '_SC_THREAD_KEYS_MAX': '38', + '_SC_THREAD_PRIORITY_SCHEDULING': '45', + '_SC_THREAD_PRIO_CEILING': '47', + '_SC_THREAD_PRIO_INHERIT': '46', + '_SC_THREAD_PRIO_PROTECT': '47', '_SC_THREAD_PROCESS_SHARED': '48', - '_SC_JOB_CONTROL': '5', - '_O_RDONLY': '0', - 'FNBIO': '4096', - 'O_CLOEXEC': '262144', - '_CS_XBS5_LP64_OFF64_LIBS': '11', - '_PC_TIMESTAMP_RESOLUTION': '20', - '_POSIX_READER_WRITER_LOCKS': '200112', - 'ACCESSPERMS': '0000400', - '_POSIX_PRIORITIZED_IO': '1', - '_SC_IPV6': '67', - 'SDL_VIDEO_OPENGL_WGL': '1', - '_CS_XBS5_ILP32_OFFBIG_LINTFLAGS': '8', - 'HAVE__STRICMP': '1', - '_SC_ADVISORY_INFO': '54', - 'SCHAR_MIN': '-128', - '_SC_XOPEN_REALTIME_THREADS': '102', - 'SIGEV_SIGNAL': '2', - 'HAVE_NANOSLEEP': '1', - 'O_WRONLY': '1', - '_PC_SYMLINK_MAX': '14', '_SC_THREAD_ROBUST_PRIO_INHERIT': '122', - 'X_OK': '1', - '_CS_XBS5_ILP32_OFF32_LDFLAGS': '2', - 'SIGTERM': '15', - '_SC_COLL_WEIGHTS_MAX': '62', - '_CS_POSIX_V7_ILP32_OFF32_LDFLAGS': '2', - 'NO_ARG': '0', - '_CS_POSIX_V7_LP64_OFF64_CFLAGS': '9', - 'S_IWRITE': '0000200', - '_FEXLOCK': '256', + '_SC_THREAD_ROBUST_PRIO_PROTECT': '123', + '_SC_THREAD_SAFE_FUNCTIONS': '49', + '_SC_THREAD_SPORADIC_SERVER': '81', + '_SC_THREAD_STACK_MIN': '39', + '_SC_THREAD_THREADS_MAX': '40', + '_SC_TIMEOUTS': '82', + '_SC_TIMERS': '33', + '_SC_TIMER_MAX': '19', + '_SC_TRACE': '83', + '_SC_TRACE_EVENT_FILTER': '84', + '_SC_TRACE_EVENT_NAME_MAX': '85', + '_SC_TRACE_INHERIT': '86', + '_SC_TRACE_LOG': '87', + '_SC_TRACE_NAME_MAX': '88', + '_SC_TRACE_SYS_MAX': '89', + '_SC_TRACE_USER_EVENT_MAX': '90', + '_SC_TTY_NAME_MAX': '41', + '_SC_TYPED_MEMORY_OBJECTS': '91', + '_SC_TZNAME_MAX': '20', + '_SC_V6_ILP32_OFF32': '92', + '_SC_V6_ILP32_OFFBIG': '93', + '_SC_V6_LP64_OFF64': '94', + '_SC_V6_LPBIG_OFFBIG': '95', + '_SC_V7_ILP32_OFF32': '92', + '_SC_V7_ILP32_OFFBIG': '93', + '_SC_V7_LP64_OFF64': '94', + '_SC_V7_LPBIG_OFFBIG': '95', + '_SC_VERSION': '7', + '_SC_XBS5_ILP32_OFF32': '92', + '_SC_XBS5_ILP32_OFFBIG': '93', + '_SC_XBS5_LP64_OFF64': '94', + '_SC_XBS5_LPBIG_OFFBIG': '95', + '_SC_XOPEN_CRYPT': '96', + '_SC_XOPEN_ENH_I18N': '97', + '_SC_XOPEN_LEGACY': '98', '_SC_XOPEN_REALTIME': '99', - 'SIGPWR': '19', - 'SDL_AUDIO_DRIVER_WINMM': '1', - 'HAVE_STRCHR': '1', - '_PC_PIPE_BUF': '5', - 'SDL_HAPTIC_DINPUT': '1', - 'SIGHUP': '1', - 'F_GETOWN': '5', - 'CLOCK_ALLOWED': '1', - 'HAVE_MEMSET': '1', - 'SIGUSR2': '31', - '_SC_2_PBS_ACCOUNTING': '114', - 'F_TEST': '3', - 'HAVE_VSNPRINTF': '1', - 'ITIMER_REAL': '0', - 'HAVE_SNPRINTF': '1', - 'HAVE_SYS_TYPES_H': '1', - 'HAVE_COPYSIGN': '1', - '_CLOCKS_PER_SEC_': '1000', - 'SDL_HAPTIC_DUMMY': '1', - 'SIGCONT': '19', - 'NULL': '0', - 'FSHLOCK': '128', - 'STDOUT_FILENO': '1', + '_SC_XOPEN_REALTIME_THREADS': '102', + '_SC_XOPEN_SHM': '103', + '_SC_XOPEN_STREAMS': '104', + '_SC_XOPEN_UNIX': '105', + '_SC_XOPEN_UUCP': '124', + '_SC_XOPEN_VERSION': '106', + '_S_IEXEC': '0000100', + '_S_IFCHR': '0020000', + '_S_IFDIR': '0040000', + '_S_IFIFO': '0010000', + '_S_IFMT': '0170000', + '_S_IFREG': '0100000', + '_S_IREAD': '0000400', + '_S_IWRITE': '0000200', + '_TIME_T_': "<type 'long'>", + '_UNIX98_THREAD_MUTEX_ATTRIBUTES': '1', + '_XBS5_ILP32_OFF32': '-1', + '_XBS5_ILP32_OFFBIG': '1', + '_XBS5_LP64_OFF64': '-1', + '_XBS5_LPBIG_OFFBIG': '-1', + '_XOPEN_CRYPT': '1', + '_XOPEN_ENH_I18N': '1', + '_XOPEN_SHM': '1', + '_XOPEN_VERSION': '600', '__AIX__': '1', - 'SDL_JOYSTICK_IOKIT': '1', - '_SC_THREAD_ATTR_STACKSIZE': '44', - 'SIGIO': '23', - 'HAVE_CEIL': '1', - 'HAVE__STRLWR': '1', - 'HAVE_SIGACTION': '1', - '_SC_CPUTIME': '63', - '_SC_2_VERSION': '121', - '_O_BINARY': '65536', + '__ANDROID__': '1', + '__BEOS__': '1', + '__BSDI__': '1', + '__BUFSIZ__': '16', + '__DREAMCAST__': '1', + '__FILENAME_MAX__': '255', + '__FREEBSD__': '1', + '__GNUC_VA_LIST': '1', + '__HAIKU__': '1', + '__HPUX__': '1', + '__INT_MAX__': '2147483647', + '__IPHONEOS__': '1', + '__IRIX__': '1', + '__LARGE64_FILES': '1', + '__LINUX__': '1', + '__long_double_t': "<type 'long'>", + '__LONG_MAX__': '2147483647', + '__MACOSX__': '1', + '__NETBSD__': '1', + '__NINTENDODS__': '1', + '__OPENBSD__': '1', + '__OS2__': '1', + '__OSF__': '1', + '__QNXNTO__': '1', + '__RAND_MAX': '2147483647', + '__RISCOS__': '1', + '__SIGFIRSTNOTRT': '1', + '__SIGLASTNOTRT': '31', + '__SOLARIS__': '1', + '__USE_XOPEN2K': '1', + '__WIN32__': '1', + '___int16_t_defined': '1', + '___int32_t_defined': '1', + '___int64_t_defined': '1', + '___int8_t_defined': '1', '___int_least16_t_defined': '1', - '_FTEXT': '131072', - '_POSIX2_SW_DEV': '200112', - '_LARGEFILE64_SOURCE': '1', - '_XOPEN_CRYPT': '1', - 'FD_SETSIZE': '64', - 'SDL_AUDIO_DRIVER_NDS': '1', - '_FMARK': '16', - '_SC_TYPED_MEMORY_OBJECTS': '91', - '_SC_ASYNCHRONOUS_IO': '21', - '_SC_2_CHAR_TERM': '107', - '_SC_AIO_LISTIO_MAX': '34', - 'FCREAT': '512', - '_RAND48_ADD': '11', - 'MAXPATHLEN': '1024', - '_SC_BC_SCALE_MAX': '59', - 'SDL_IPHONE_MAX_GFORCE': '5.0', - 'MATH_ERREXCEPT': '2', - 'SDL_VIDEO_DRIVER_WINDOWS': '1', - '_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS': '13', - 'M_SQRT3': '1.73205080757', - 'M_SQRT2': '1.41421356237', - '_POSIX_THREADS': '200112', - 'ABMON_12': '44', - 'ABMON_11': '43', - 'ABMON_10': '42', - 'SI_QUEUE': '2', - 'SDL_TIMER_UNIX': '1', - 'AT_FDCWD': '-2', - 'SIGTTOU': '22', - '_CS_POSIX_V7_LP64_OFF64_LDFLAGS': '10', - '_SC_TTY_NAME_MAX': '41', - 'AF_INET': '2', - 'AF_INET6': '6', - 'PF_INET': '2', - 'PF_INET6': '6', - 'FIONREAD': '1', - 'SOCK_STREAM': '200', - 'SOCK_DGRAM': '20', - 'IPPROTO_TCP': '1', - 'IPPROTO_UDP': '2', - 'EOF': '-1' + '___int_least32_t_defined': '1', + '___int_least8_t_defined': '1' }; |