From 7d4a3781d80bdcaa091e0127a836e22bf0a5a2e8 Mon Sep 17 00:00:00 2001 From: ed2k Date: Wed, 9 Mar 2022 20:53:32 -0800 Subject: [PATCH 1/5] initial port to wasm src> make && make install examples> make && node AnalysePlayBin.js --- examples/AnalyseAllPlaysBin.cpp | 4 +- examples/AnalysePlayBin.cpp | 4 +- examples/AnalysePlayBin.js | 1 + examples/AnalysePlayBin.wasm | Bin 0 -> 291005 bytes examples/Makefiles/Makefile_wasm | 116 +++++++++++++++++++++++++++++++ src/Init.cpp | 3 +- src/Makefiles/Makefile_wasm | 115 ++++++++++++++++++++++++++++++ src/Par.cpp | 2 +- src/System.cpp | 13 +++- 9 files changed, 250 insertions(+), 8 deletions(-) create mode 100644 examples/AnalysePlayBin.js create mode 100755 examples/AnalysePlayBin.wasm create mode 100644 examples/Makefiles/Makefile_wasm create mode 100644 src/Makefiles/Makefile_wasm diff --git a/examples/AnalyseAllPlaysBin.cpp b/examples/AnalyseAllPlaysBin.cpp index ee6c1d0d..1c67b6bd 100644 --- a/examples/AnalyseAllPlaysBin.cpp +++ b/examples/AnalyseAllPlaysBin.cpp @@ -30,7 +30,7 @@ int main() char line[80]; bool match; -#if defined(__linux) || defined(__APPLE__) +#if defined(__linux) || defined(__APPLE__) || defined(__WASM__) SetMaxThreads(0); #endif @@ -66,7 +66,7 @@ int main() if (res != RETURN_NO_FAULT) { - ErrorMessage(res, line); + //ErrorMessage(res, line); printf("DDS error: %s\n", line); } diff --git a/examples/AnalysePlayBin.cpp b/examples/AnalysePlayBin.cpp index c1929c6a..9a5e3680 100644 --- a/examples/AnalysePlayBin.cpp +++ b/examples/AnalysePlayBin.cpp @@ -30,7 +30,7 @@ int main() char line[80]; bool match; -#if defined(__linux) || defined(__APPLE__) +#if defined(__linux) || defined(__APPLE__) || defined(__WASM__) SetMaxThreads(0); #endif @@ -62,7 +62,7 @@ int main() if (res != RETURN_NO_FAULT) { - ErrorMessage(res, line); + //ErrorMessage(res, line); printf("DDS error: %s\n", line); } diff --git a/examples/AnalysePlayBin.js b/examples/AnalysePlayBin.js new file mode 100644 index 00000000..cc4e886c --- /dev/null +++ b/examples/AnalysePlayBin.js @@ -0,0 +1 @@ +var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret});readAsync=((filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})});if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=((status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){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)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="AnalysePlayBin.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["r"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["w"];addOnInit(Module["asm"]["s"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size+16)+16}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;this.set_type=function(type){HEAP32[this.ptr+4>>2]=type};this.get_type=function(){return HEAP32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode,fd_start,fd_end)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,address,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,address,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=((stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=(()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)});openRequest.onsuccess=(()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=(()=>{ok++;if(ok+fail==total)finish()});putRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=(()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=(()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()});getRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"f":___assert_fail,"l":___cxa_allocate_exception,"k":___cxa_throw,"c":___syscall_fcntl64,"g":___syscall_ioctl,"h":___syscall_open,"d":_abort,"j":_emscripten_memcpy_big,"b":_emscripten_resize_heap,"o":_environ_get,"p":_environ_sizes_get,"a":_exit,"e":_fd_close,"q":_fd_read,"m":_fd_seek,"i":_fd_write,"n":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["s"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["t"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["u"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["v"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true);return ret}catch(e){return handleException(e)}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){}else{exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/AnalysePlayBin.wasm b/examples/AnalysePlayBin.wasm new file mode 100755 index 0000000000000000000000000000000000000000..2e6050bb6d20bcc577567ff67126c557d84089a8 GIT binary patch literal 291005 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 hs1fTmG=)!Khch?VMe=ojk4J)l2p}Nm= zd>Cu1 z{jy(9Kc(OtYVJjF4s~AsOxG8Z?!a!RZ|Olj7{awVZ zG}hlocToNYtc9!L8dwL{g7(pe;SqQg)`RxZLh-R1x%waT<2!_1?bRl}d6XZc?>E83 zr@C)(yb~1PXwEAo#n(xjiBILnsrxo4z7GcCdzCiL(-ZI{1n21~j?I1?yq-Kw{WD-`p6a@lgYQ6ayr1RRjQ4ev zyWo20hFwt5PYpOpelA0|#@hI~ljG-TdmfCRs{2QdcZ2-w2>5BnnsDA-vO*=LWrGF} zDX;MR4Yeze8#a8z@gq+dHG0g6W5Eu&RJ#E726DN5B1GT?9^M7?|;wc+aI(QIc zr1bsHd#%gvdFt%0_DhE!K77HHq0}vb16&+NOkvNvDP&d69&UAQVTXSGtwCdHi-XR! zkKo)(e>{Bnwr9LGN|p86$TDs5dAGGZxjbvxm+?w?&Z5f~x>HJd!TaaeTsn6STil%N zqPg?kYL(|)GH+gH5r>rLU$UTPQRdRi-EvKBZRX;dS}T0Id)wCYRyUJ-&aw}OO1OsQ z|M0ap^V6p#U(P!UU0Igv@2C9bBY*Pc%YPX7d9M7Zeu5gxe-!w6zWk_uOn)A^cYV*Y z-!9e0QUc7MyI3^QgJB40qpAQ+vJJWm=Z@WdW*JV--L`vgJ(67a>7!sYi~-#=Yx3Eb z+`DbAk?yM)_7016>As$sK+fb?6JZiehBM$y;9Rn%!dY-OoCDKfI?RA`Aq);gAPOK-F zo7#scFNP1p6_AB1;s471HP{MX#IEB6c;)|3fd1e0{tbi1h2cGUk84hV4Ekro9H<6% zvYvO%e@*)ZPJrC&mc6;Oge!0d&$IbFBUxt3Su;&kX}se~#6k zJ04j5IaYs;)t_Va=UDwYR)3DwpJVmsxT@w(f|G&OuR936q|FiMBO$Kn*zd-EH}<=+ z-;Mol>~~|o8~feZ@5X*N_PeqF1MGKWznlH&iI7!E|4RB-(!cU2=nOo1*VQ*HX>9Ty zz}Ni!In&!0HqTwYz};flXxb$l_~_UDfKpY^3ff^*)~;a6TFt7v9JCV|SyPs*>U7d* z*HL+Xpj=CN0;t}#@0T^vz4DoT`z`yGQVHcZ^a@Fl(th^3ewsl%sc4B=*01UGU!cM9Z)y|z$iJmA-c;An z*jYopZfF-FyIbCn-thbVH)ZvE6Mh4~h2OzJcnf|He}F^qHvA9#5qvxGhR(I^jdOL^ zY;LE+Zk2iJTZrA4u%(;hC&`sqt(N>&zTeMP-xc>_d55xm`V;&w90onTgrEdU!MB#w zC-DudI_EYtI6QB(*6UM2zSa=%C*q43kGu!AE3hS>W|1oeeOg1Ej+GAjK9ylpKIv1R z!7v2Mp#p}24Sjv8?l{6J*XEu9Y%XIVX-+HADVxWU4};+_0{C}ltdVd69AUG$u+3_8 zDiw;eua4D6s&M_@IIs?L-et4Rt?lN#dy#&c?_N7CEzFW$+_>lEn?>4nR_VMQ!3GfM z@1Jw(?ag7BcBNo!=DhN4rueQx`^x1FoG5NLSMQR1y}dGlhro@#jP#dL9>tiC2F=SD z@)Kb!C{3n)9Odz#_LIm@2KRF=j&mt*UQhMgPa~fIr^7^;1e4(mI1{G8R5%OF*bzsT zud8_P3DbQ3t+$3eU}u{<^n{FDBbI7NGKBt=jd;{7Fg98zWLJZ>2H)8i? zWWk7wyr%4pEfBFcweoxkzA0fUFQN&4eK4YRX)Ckycb5HHXdRbWt<4186j72q1!*`B zX2L8uA1;7k6zwa`ytN&}yt!I>V>9zcb#UHhZi5PQ79s zgfEIUr+7$(Vx5YNiFGgKW%$?(idA0@$@BLZ7olS&2R*v}$j8TgAKT>zDR?%%81QY; z1-t{mpBCS@)YY-zsMl3xwiz&f}VJ_gr8 z7hDfTd~)QIY*wLDDL4*6n|pkl>(M2fH;`|D8{sDSIBbMZz$f8TP{`(Le;j1<(E)5$ zS9x)6LYHiQn*3(C1#X4Sa2tFEZihRdh|Qijr=nA-Seyr{Jeyn4C7XAWZ|&8acBk}M zH!}COTjz$Sh$(Q_#PitJxO9;#<@s2}cYD@{>}{b<8PCJJd=Iygf3~29$FRlZd)TwH zT!n3UIGMb!hZ{0hX2%WkFg)Ay@NT@)7~VsEFZgrgkKwUyDtdHr$Iw+|#&8(6<>BrE z9!{NYW%h26hkJbwKj(Y6o&56!J^V|y7IO~fdDt_C5BnarkoO(K7xD1WjUoH-@_BQ- zF}%v*GI9)Q?`hG+7DDK@a(Luojf&LmL!oTSUG3HG*D7^zD0@-==!?FD55F z%RsvH!lRI`i~P1`^1gQDzkKclqoa_Fi4n29xO5zhMaMzkO}p_?$3cH|9P~lQTtZ!+ z6u0ckKgDLoRsA&{^?rRJ8I8T^*FahJl`^2WWYVYc(90ktBX4ZT2NSbwDVaL;F>=x; zxut%t@z+=?DK7PuJ=Lk)3i4ZJ`Ji+O$VbWOeCgZ1z^`9LUQ9=|-zGi9WP;<0m^%-W zl|3ah2F9=8SgGB_uX#~2$7T$JW1;q7{5lTCspDW=Iu6F5W9gGmN(+I%>Ui?zkiA&< zvi;qcOJ4VYM{&=pr=;6?h4d0)-C1jUu=d5{`yr;dnR^ zPKHzAv=eq5C*nk%m=kvrPSQy^=}0)@L?V%BBo>KB5|Lyi6-h_KQ70OSMx(K4Jer6m zqp4^*7LGZwNGuwQ#p1CdRlZvFGsaPtWN~DshR4Sdu#Wd#As7})@O_i0o ze{;xw!2R;37I?8wSFIPe&D2e7*Tot}?*-vkLVWWA9)bnB<84^8rmntumE$Bde9f&{ zz4goTXGU!`>T@go_w!=0i#%UGN#B;bj*k2ek{`teUJiNkdK&0xF4V=fQH^{Gly;MU z75}~lUxyv=4R{zHfkz=HILF_HCjj4i z23~y@(zo63-{SXwvQPh~IDQ(Q0m<)0PH6|_9ChD;XZa(DJ$Hoc&>$=Gs`4f)bC7)4 z6a=-?9s0m&`e-+^X$y@A-%UP26O5UnFjn%0ZebP)G_|oIXyI8b`-uGu|x065s literal 0 HcmV?d00001 diff --git a/examples/Makefiles/Makefile_wasm b/examples/Makefiles/Makefile_wasm new file mode 100644 index 00000000..cfcff7c3 --- /dev/null +++ b/examples/Makefiles/Makefile_wasm @@ -0,0 +1,116 @@ +# This is a Makefile for the examples, +# for Mac and the clang compiler. + +# It does assume a Unix-like setup for some commands, +# but if you only want to call "make" with the default target, +# you should be OK. + +# If your compiler name is not given here, change it. +CC = em++ + +CC_FLAGS = -O3 -flto -mtune=generic + +# These flags are not turned on by default, but DDS should pass them. +# Turn them on below. +WARN_FLAGS = \ + -Wshadow \ + -Wsign-conversion \ + -pedantic -Wall -Wextra \ + -Wcast-align -Wcast-qual \ + -Wctor-dtor-privacy \ + -Wdisabled-optimization \ + -Winit-self \ + -Wmissing-declarations \ + -Wmissing-include-dirs \ + -Wcomment \ + -Wold-style-cast \ + -Woverloaded-virtual \ + -Wredundant-decls \ + -Wsign-promo \ + -Wstrict-overflow=1 \ + -Wswitch-default -Wundef \ + -Werror \ + -Wno-unused \ + -Wno-unknown-pragmas \ + -Wno-long-long \ + -Wno-format + +# Here you can turn on warnings. +# CC_FULL_FLAGS = $(CC_FLAGS) +CC_FULL_FLAGS = $(CC_FLAGS) $(WARN_FLAGS) -D__WASM__ + +DLLBASE = dds +STATIC_LIB = lib$(DLLBASE).a + +COMMON_SOURCE_FILES = \ + hands.cpp + +ALL_EXAMPLE_FILES = \ + AnalysePlayBin.js \ + AnalysePlayPBN \ + AnalyseAllPlaysBin \ + AnalyseAllPlaysPBN \ + CalcDDtable.cpp \ + CalcDDtablePBN.cpp \ + CalcAllTables.cpp \ + CalcAllTablesPBN.cpp \ + DealerPar.cpp \ + Par.cpp \ + SolveBoard.cpp \ + SolveBoardPBN.cpp \ + SolveAllBoards.cpp + +LIB_FLAGS = -L. $(STATIC_LIB) + +OBJ_FILES = $(subst .cpp,.o,$(COMMON_SOURCE_FILES)) +EX_OBJ_FILES = $(subst .cpp,.o,$(ALL_EXAMPLE_FILES)) +EX_EXE_FILES = $(subst .cpp,,$(ALL_EXAMPLE_FILES)) + +AnalysePlayBin.js: $(OBJ_FILES) AnalysePlayBin.cpp $(STATIC_LIB) + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) AnalysePlayBin.cpp -o AnalysePlayBin.js + +AnalysePlayPBN: $(OBJ_FILES) AnalysePlayPBN.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) AnalysePlayPBN.o -o AnalysePlayPBN + +AnalyseAllPlaysBin: $(OBJ_FILES) AnalyseAllPlaysBin.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) AnalyseAllPlaysBin.o -o AnalyseAllPlaysBin + +AnalyseAllPlaysPBN: $(OBJ_FILES) AnalyseAllPlaysPBN.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) AnalyseAllPlaysPBN.o -o AnalyseAllPlaysPBN + +CalcDDtable: $(OBJ_FILES) CalcDDtable.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) CalcDDtable.o -o CalcDDtable + +CalcDDtablePBN: $(OBJ_FILES) CalcDDtablePBN.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) CalcDDtablePBN.o -o CalcDDtablePBN + +CalcAllTables: $(OBJ_FILES) CalcAllTables.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) CalcAllTables.o -o CalcAllTables + +CalcAllTablesPBN: $(OBJ_FILES) CalcAllTablesPBN.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) CalcAllTablesPBN.o -o CalcAllTablesPBN + +DealerPar: $(OBJ_FILES) DealerPar.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) DealerPar.o -o DealerPar + +Par: $(OBJ_FILES) Par.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) Par.o -o Par + +SolveBoard: $(OBJ_FILES) SolveBoard.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveBoard.o -o SolveBoard + +SolveBoardPBN: $(OBJ_FILES) SolveBoardPBN.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveBoardPBN.o -o SolveBoardPBN + +SolveAllBoards: $(OBJ_FILES) SolveAllBoards.o + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveAllBoards.o -o SolveAllBoards + +%.o: %.cpp + $(CC) $(CC_FULL_FLAGS) -c $< -o $*.o + +depend: + makedepend -Y -- $(cOMMON_SOURCE_FILES) $(ALL_EXAMPLE_FILES) + +clean: + rm -f *.o $(EX_EXE_FILES) $(STATIC_LIB) + diff --git a/src/Init.cpp b/src/Init.cpp index e5f85239..bfab6101 100644 --- a/src/Init.cpp +++ b/src/Init.cpp @@ -91,7 +91,7 @@ void STDCALL SetResources( // Figure out system resources. int ncores; unsigned long long kilobytesFree; - sysdep.GetHardware(ncores, kilobytesFree); + sysdep. (ncores, kilobytesFree); // Memory usage will be limited to the lower of: // - maxMemoryMB + 30% (if given; statistically this works out) @@ -121,6 +121,7 @@ void STDCALL SetResources( else thrMax = min(maxThreadsIn, ncores); + // printf("%d threads, %d MB memory\n", thrMax, memMaxMB); // For simplicity we won't vary the amount of memory per thread // in the small and large versions. diff --git a/src/Makefiles/Makefile_wasm b/src/Makefiles/Makefile_wasm new file mode 100644 index 00000000..d40dc339 --- /dev/null +++ b/src/Makefiles/Makefile_wasm @@ -0,0 +1,115 @@ +# --------------------- INFORMATION -------------------------------- + +# This the DDS Makefile for MacOS and the clang compiler. +# It creates a statically linked library, libdds.a. + +# --------------------- CONFIGURATION ------------------------------ + +# You can configure the following: + +# 1. The threading systems that you want in the library. +# You will always get single-threading. If you have multiple +# threading systems, the default will be the multi-threading one +# with the lowest number (see System.cpp). All that matters is +# CC_THREADING. + +# GCD and WINAPI don't work on Windows. +THR_BOOST = -DDDS_THREADS_BOOST +THR_GCD = -DDDS_THREADS_GCD +THR_OPENMP = -DDDS_THREADS_OPENMP +THR_WINAPI = -DDDS_THREADS_WINAPI +THR_STL = -DDDS_THREADS_STL + +# THREADING = $(THR_BOOST) $(THR_GCD) $(THR_STL) + +# If you need to add something for a threading system, this is +# the place. + +CC_BOOST = /usr/local/Cellar/boost/1.56.0 +CC_BOOST_INCL = $(CC_BOOST)/include +CC_BOOST_LINK = -L$(CC_BOOST)/lib -lboost_system -lboost_thread-mt + +THREAD_COMPILE = +#THREAD_LINK = $(CC_BOOST_LINK) + +# 2. Debugging options. (There are more granular options in debug.h.) + +DEBUG_ALL = -DDDS_DEBUG_ALL +TIMING = -DDDS_TIMING +SCHEDULER = -DDDS_SCHEDULER + +# All that matters from no. 2 and no. 3 is the following. Here you +# can add $(SMALL_MEMORY) etc. + +DDS_BEHAVIOR = + +# ----------------------- OFTEN OK ------------------------------ + +# From here on you you don't have to change anything to CONFIGURE +# the compilation. But you may well have to change something to +# get it to compile. + +INCL_SOURCE = Makefiles/sources.txt +INCL_DEPENDS = Makefiles/depends_o.txt + +# If your compiler name is not given here, change it. +CC = em++ +AR = emar + +# We compile with aggressive warnings, but we have to turn off some +# of them as they appear in libraries in great numbers... + +WARN_FLAGS = \ + -Wshadow \ + -Wsign-conversion \ + -pedantic -Wall -Wextra \ + -Wcast-align -Wcast-qual \ + -Wctor-dtor-privacy \ + -Wdisabled-optimization \ + -Winit-self \ + -Wmissing-declarations \ + -Wmissing-include-dirs \ + -Wcomment \ + -Wold-style-cast \ + -Woverloaded-virtual \ + -Wredundant-decls \ + -Wsign-promo \ + -Wstrict-overflow=1 \ + -Wswitch-default -Wundef \ + -Werror \ + -Wno-unused \ + -Wno-unknown-pragmas \ + -Wno-long-long \ + -Wno-format + +COMPILE_FLAGS = -O3 -flto -mtune=generic -std=c++11 \ + $(WARN_FLAGS) \ + $(DDS_BEHAVIOR) $(THREAD_COMPILE) $(THREADING) -D__WASM__ + +DLLBASE = dds +STATIC_LIB = lib$(DLLBASE).a + +include $(INCL_SOURCE) + +O_FILES = $(subst .cpp,.o,$(SOURCE_FILES)) + +$(STATIC_LIB): $(O_FILES) + $(AR) rcs $(STATIC_LIB) $(O_FILES) + +%.o: %.cpp + $(CC) $(COMPILE_FLAGS) -c $< + +depend: + makedepend -Y -- $(SOURCE_FILES) + +clean: + rm -f $(O_FILES) $(STATIC_LIB) + +install: + test -d ../test || mkdir ../test + test -d ../examples || mkdir ../examples + cp $(STATIC_LIB) ../test + cp $(STATIC_LIB) ../examples + +include $(INCL_DEPENDS) + diff --git a/src/Par.cpp b/src/Par.cpp index 89dbe032..277a6a2a 100644 --- a/src/Par.cpp +++ b/src/Par.cpp @@ -7,7 +7,7 @@ See LICENSE and README. */ - +#include #include #include #include diff --git a/src/System.cpp b/src/System.cpp index f71f8262..4a2bfcc4 100644 --- a/src/System.cpp +++ b/src/System.cpp @@ -33,7 +33,8 @@ const vector DDS_SYSTEM_PLATFORM = "Windows", "Cygwin", "Linux", - "Apple" + "Apple", + "Wasm" }; const vector DDS_SYSTEM_COMPILER = @@ -42,7 +43,8 @@ const vector DDS_SYSTEM_COMPILER = "Microsoft Visual C++", "MinGW", "GNU g++", - "clang" + "clang", + "em++" }; const vector DDS_SYSTEM_CONSTRUCTOR = @@ -234,6 +236,13 @@ void System::GetHardware( ncores = sysconf(_SC_NPROCESSORS_ONLN); return; #endif + +#ifdef __WASM__ + // TODO find out how much memory is available + kilobytesFree = 100 * 1024; // guess 100MB + ncores = 1; + return; +#endif } From 2b7a87c982b3054bce1045268b0e1ed0e508c8de Mon Sep 17 00:00:00 2001 From: ed2k Date: Wed, 9 Mar 2022 20:58:26 -0800 Subject: [PATCH 2/5] remove .js and .wasm output files --- .gitignore | 2 ++ examples/AnalysePlayBin.js | 1 - examples/AnalysePlayBin.wasm | Bin 291005 -> 0 bytes 3 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 examples/AnalysePlayBin.js delete mode 100755 examples/AnalysePlayBin.wasm diff --git a/.gitignore b/.gitignore index 3265db34..cd17f0ab 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,8 @@ src/[Mm]akefile test/[Mm]akefile examples/[Mm]akefile +examples/*.js +examples/*.wasm test/dtest test/itest diff --git a/examples/AnalysePlayBin.js b/examples/AnalysePlayBin.js deleted file mode 100644 index cc4e886c..00000000 --- a/examples/AnalysePlayBin.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret});readAsync=((filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})});if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=((status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){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)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="AnalysePlayBin.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["r"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["w"];addOnInit(Module["asm"]["s"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size+16)+16}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;this.set_type=function(type){HEAP32[this.ptr+4>>2]=type};this.get_type=function(){return HEAP32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode,fd_start,fd_end)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,address,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,address,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=((stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=(()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)});openRequest.onsuccess=(()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=(()=>{ok++;if(ok+fail==total)finish()});putRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=(()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=(()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()});getRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"f":___assert_fail,"l":___cxa_allocate_exception,"k":___cxa_throw,"c":___syscall_fcntl64,"g":___syscall_ioctl,"h":___syscall_open,"d":_abort,"j":_emscripten_memcpy_big,"b":_emscripten_resize_heap,"o":_environ_get,"p":_environ_sizes_get,"a":_exit,"e":_fd_close,"q":_fd_read,"m":_fd_seek,"i":_fd_write,"n":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["s"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["t"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["u"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["v"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true);return ret}catch(e){return handleException(e)}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){}else{exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/AnalysePlayBin.wasm b/examples/AnalysePlayBin.wasm deleted file mode 100755 index 2e6050bb6d20bcc577567ff67126c557d84089a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291005 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 hs1fTmG=)!Khch?VMe=ojk4J)l2p}Nm= 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 From b9e748da1da0b547f7fac3493be5d09ce354c98d Mon Sep 17 00:00:00 2001 From: ed2k Date: Wed, 9 Mar 2022 21:00:59 -0800 Subject: [PATCH 3/5] fix typo --- src/Init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Init.cpp b/src/Init.cpp index bfab6101..ab4b2ef1 100644 --- a/src/Init.cpp +++ b/src/Init.cpp @@ -91,7 +91,7 @@ void STDCALL SetResources( // Figure out system resources. int ncores; unsigned long long kilobytesFree; - sysdep. (ncores, kilobytesFree); + sysdep.GetHardware(ncores, kilobytesFree); // Memory usage will be limited to the lower of: // - maxMemoryMB + 30% (if given; statistically this works out) From bba7c0df146e9da566a5ce08db12579c174403f7 Mon Sep 17 00:00:00 2001 From: ed2k Date: Wed, 9 Mar 2022 21:05:51 -0800 Subject: [PATCH 4/5] clean up unnecessary change --- examples/AnalyseAllPlaysBin.cpp | 4 ++-- examples/AnalysePlayBin.cpp | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/AnalyseAllPlaysBin.cpp b/examples/AnalyseAllPlaysBin.cpp index 1c67b6bd..ee6c1d0d 100644 --- a/examples/AnalyseAllPlaysBin.cpp +++ b/examples/AnalyseAllPlaysBin.cpp @@ -30,7 +30,7 @@ int main() char line[80]; bool match; -#if defined(__linux) || defined(__APPLE__) || defined(__WASM__) +#if defined(__linux) || defined(__APPLE__) SetMaxThreads(0); #endif @@ -66,7 +66,7 @@ int main() if (res != RETURN_NO_FAULT) { - //ErrorMessage(res, line); + ErrorMessage(res, line); printf("DDS error: %s\n", line); } diff --git a/examples/AnalysePlayBin.cpp b/examples/AnalysePlayBin.cpp index 9a5e3680..48f0ec7f 100644 --- a/examples/AnalysePlayBin.cpp +++ b/examples/AnalysePlayBin.cpp @@ -62,7 +62,9 @@ int main() if (res != RETURN_NO_FAULT) { - //ErrorMessage(res, line); +#ifndef __WASM__ + ErrorMessage(res, line); +#endif printf("DDS error: %s\n", line); } From 8fdbe384fb4ee3eb837aa726578e1730494251fe Mon Sep 17 00:00:00 2001 From: Yin Sun Date: Sun, 24 Apr 2022 11:37:11 -0700 Subject: [PATCH 5/5] add dds wasm example --- examples/Makefiles/Makefile_wasm | 17 ++-- examples/SolveBoard.cpp | 2 +- examples/SolveBoardPBN.cpp | 2 +- examples/dds.cpp | 148 +++++++++++++++++++++++++++++++ 4 files changed, 160 insertions(+), 9 deletions(-) create mode 100644 examples/dds.cpp diff --git a/examples/Makefiles/Makefile_wasm b/examples/Makefiles/Makefile_wasm index cfcff7c3..f2bce5e1 100644 --- a/examples/Makefiles/Makefile_wasm +++ b/examples/Makefiles/Makefile_wasm @@ -66,8 +66,8 @@ OBJ_FILES = $(subst .cpp,.o,$(COMMON_SOURCE_FILES)) EX_OBJ_FILES = $(subst .cpp,.o,$(ALL_EXAMPLE_FILES)) EX_EXE_FILES = $(subst .cpp,,$(ALL_EXAMPLE_FILES)) -AnalysePlayBin.js: $(OBJ_FILES) AnalysePlayBin.cpp $(STATIC_LIB) - $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) AnalysePlayBin.cpp -o AnalysePlayBin.js +AnalysePlayBin.html: $(OBJ_FILES) AnalysePlayBin.cpp $(STATIC_LIB) + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) AnalysePlayBin.cpp -o AnalysePlayBin.html AnalysePlayPBN: $(OBJ_FILES) AnalysePlayPBN.o $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) AnalysePlayPBN.o -o AnalysePlayPBN @@ -96,14 +96,17 @@ DealerPar: $(OBJ_FILES) DealerPar.o Par: $(OBJ_FILES) Par.o $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) Par.o -o Par -SolveBoard: $(OBJ_FILES) SolveBoard.o - $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveBoard.o -o SolveBoard +SolveBoard: $(OBJ_FILES) SolveBoard.cpp $(STATIC_LIB) + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveBoard.cpp -o SolveBoard.html + +dds: $(OBJ_FILES) dds.cpp $(STATIC_LIB) + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) dds.cpp -o dds.html SolveBoardPBN: $(OBJ_FILES) SolveBoardPBN.o - $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveBoardPBN.o -o SolveBoardPBN + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveBoardPBN.o -o SolveBoardPBN.html -SolveAllBoards: $(OBJ_FILES) SolveAllBoards.o - $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveAllBoards.o -o SolveAllBoards +SolveAllBoards: $(OBJ_FILES) SolveAllBoards.cpp $(STATIC_LIB) + $(CC) $(CC_FULL_FLAGS) $(LD_FLAGS) $(LIB_FLAGS) $(OBJ_FILES) SolveAllBoards.cpp -o SolveAllBoards.html %.o: %.cpp $(CC) $(CC_FULL_FLAGS) -c $< -o $*.o diff --git a/examples/SolveBoard.cpp b/examples/SolveBoard.cpp index 61771c26..ecc62d22 100644 --- a/examples/SolveBoard.cpp +++ b/examples/SolveBoard.cpp @@ -33,7 +33,7 @@ int main() bool match2; bool match3; -#if defined(__linux) || defined(__APPLE__) +#if defined(__linux) || defined(__APPLE__) || defined(__WASM__) SetMaxThreads(0); #endif diff --git a/examples/SolveBoardPBN.cpp b/examples/SolveBoardPBN.cpp index 28c24a20..8b5e370d 100644 --- a/examples/SolveBoardPBN.cpp +++ b/examples/SolveBoardPBN.cpp @@ -33,7 +33,7 @@ int main() bool match2, match3; -#if defined(__linux) || defined(__APPLE__) +#if defined(__linux) || defined(__APPLE__) || defined(__WASM__) SetMaxThreads(0); #endif diff --git a/examples/dds.cpp b/examples/dds.cpp new file mode 100644 index 00000000..4e2fb550 --- /dev/null +++ b/examples/dds.cpp @@ -0,0 +1,148 @@ +/* + DDS, a bridge double dummy solver. + + Copyright (C) 2006-2014 by Bo Haglund / + 2014-2016 by Bo Haglund & Soren Hein. + + See LICENSE and README. +*/ + +/* + +S "N:QJ6.K652.J85.T98 873.J97.AT764.Q4 K5.T83.KQ9.A7652 AT942.AQ4.32.KJ3" xxxxxx +U "E:QJT5432.T.6.QJ82 .J97543.K7532.94 87.A62.QJT4.AT75 AK96.KQ8.A98.K63" xxxxxx +S "N:73.QJT.AQ54.T752 QT6.876.KJ9.AQ84 5.A95432.7632.K6 AKJ9842.K.T8.J93" xxxxxx + +*/ +// Test program for the SolveBoard function. +// Uses the hands pre-set in hands.cpp. + +#include +#include +#include +#include "../include/dll.h" +#include "../src/PBN.h" +#include "hands.h" + +/* +unsigned char dcardRank[16] = +{ + 'x', 'x', '2', '3', '4', '5', '6', '7', + '8', '9', 'T', 'J', 'Q', 'K', 'A', '-' +}; + +unsigned char dcardSuit[5] = { 'S', 'H', 'D', 'C', 'N' }; +unsigned char dcardHand[4] = { 'N', 'E', 'S', 'W' }; +*/ +int convert_trump_or_seat(char tmpChar) +{ + int rank = tmpChar - '0'; + if (rank < 15 && rank > 1) + return rank; + if (tmpChar == 'N') // North + return 0; + else if (tmpChar == 'E') + return 1; + else if (tmpChar == 'S') + return 2; + else if (tmpChar == 'W') + return 3; + else if (tmpChar == 'C') + return 3; + else if (tmpChar == 'D') + return 2; + else if (tmpChar == 'H') + return 1; + else if (tmpChar == 'S') + return 0; + else if (tmpChar == 'U') // Trump + return 4; + else if (tmpChar == 'x') // + return 0; + else if (tmpChar == 'A') // + return 14; + else if (tmpChar == 'K') // + return 13; + else if (tmpChar == 'Q') // + return 12; + else if (tmpChar == 'J') // + return 11; + else if (tmpChar == 'T') // + return 10; + else + return -1; +} + +/* + DDS, a bridge double dummy solver solveBoardPBN cli interface. + trump: 0-4 Clubs, Diamonds, Hearts, Spades, No Trump + currentTrickSuit: CDHS, AKQJT98765432 +*/ +int main(int argc, char *argv[]) +{ + if (argc < 4) { + dealPBN dlPBN; + printf("Usage: %s argc=%d trump first[NESW]:dot_space_pbn currentTricks\n", argv[0], argc); + return 1; + } + + deal dl; + futureTricks fut2, // solutions == 2 + fut3; // solutions == 3 + + int target; + int solutions; + int mode; + int threadIndex = 0; + int res; + char line[80]; + bool match2; + bool match3; + +#if defined(__linux) || defined(__APPLE__) || defined(__WASM__) + SetMaxThreads(0); +#endif + + for (int handno = 0; handno < 1; handno++) + { + dl.trump = convert_trump_or_seat(argv[1][0]); + dl.first = convert_trump_or_seat(argv[2][0]); + // xxxxxx means 0,0,0,0,0,0 + dl.currentTrickSuit[0] = convert_trump_or_seat(argv[3][0]); + dl.currentTrickSuit[1] = convert_trump_or_seat(argv[3][2]); + dl.currentTrickSuit[2] = convert_trump_or_seat(argv[3][4]); + + dl.currentTrickRank[0] = convert_trump_or_seat(argv[3][1]); + dl.currentTrickRank[1] = convert_trump_or_seat(argv[3][3]); + dl.currentTrickRank[2] = convert_trump_or_seat(argv[3][5]); + + if (ConvertFromPBN(argv[2], dl.remainCards) != RETURN_NO_FAULT) { + return RETURN_PBN_FAULT; + } + + + target = -1; + mode = 0; + solutions = 2; + res = SolveBoard(dl, target, solutions, mode, &fut2, threadIndex); + if (res != RETURN_NO_FAULT) + { + ErrorMessage(res, line); + printf("DDS error: %s\n", line); + } + /* + sprintf(line, + "SolveBoard, hand %d: solutions 3 %s, solutions 2 %s\n", + handno + 1, + (match3 ? "OK" : "ERROR"), + (match2 ? "OK" : "ERROR")); + + PrintHand(line, dl.remainCards); + + sprintf(line, "solutions == 3\n"); + PrintFut(line, &fut3); + sprintf(line, "solutions == 2\n"); + */ + PrintFut(line, &fut2); + } +}