diff --git a/core/door.js b/core/door.js index dd01c0ec..a155a8d8 100644 --- a/core/door.js +++ b/core/door.js @@ -6,6 +6,7 @@ var events = require('events'); var _ = require('lodash'); var pty = require('ptyw.js'); +var decode = require('iconv-lite').decode; exports.Door = Door; @@ -38,20 +39,22 @@ Door.prototype.run = function() { rows : self.client.term.termHeight, // :TODO: cwd env : self.exeInfo.env, + //encoding : self.client.term.outputEncoding, }); // :TODO: can we pause the stream, write our own "Loading...", then on resume? //door.pipe(self.client.term.output); self.client.term.output.pipe(door); - + // :TODO: do this with pluggable pipe/filter classes // :TODO: This causes an error to be thrown when e.g. 'cp437' is used due to Node buffer changes - door.setEncoding(this.exeInfo.encoding); + //door.setEncoding(this.exeInfo.encoding); + door.on('data', function doorData(data) { - self.client.term.write(data); + self.client.term.write(decode(data, self.client.term.outputEncoding)); }); door.on('close', function closed() { diff --git a/mods/abracadabra.js b/mods/abracadabra.js index 3e300aae..583e4376 100644 --- a/mods/abracadabra.js +++ b/mods/abracadabra.js @@ -140,10 +140,13 @@ function AbracadabraModule(options) { args : this.config.args, }; - // :TODO: this system should probably be generic + for(var i = 0; i < exeInfo.args.length; ++i) { - exeInfo.args[i] = exeInfo.args[i].replace(/\{dropfile\}/g, self.dropFile.fileName); - exeInfo.args[i] = exeInfo.args[i].replace(/\{node\}/g, self.client.node.toString()); + exeInfo.args[i] = exeInfo.args[i].format( { + dropFile : self.dropFile.fileName, + node : self.client.node.toString(), + socket : self.client.output._handle.fd.toString(), // ugg! + }); } var doorInstance = new door.Door(this.client, exeInfo); diff --git a/mods/menu.hjson b/mods/menu.hjson index 715c43f7..cf58e34c 100644 --- a/mods/menu.hjson +++ b/mods/menu.hjson @@ -617,7 +617,7 @@ } /* The 'abracadabra' module's config.args accepts the following format objects: - {dropfile} - Path to generated dropfile + {dropFile} - Path to generated dropfile {node} - Node number */ doorPimpWars: { @@ -628,7 +628,7 @@ dropFileType: DORINFO cmd: /usr/bin/dosemu args: [ - "-quiet", "-f", "/home/nuskooler/DOS/X/LORD/dosemu.conf", "X:\\PW\\START.BAT {dropfile} {node}" + "-quiet", "-f", "/home/nuskooler/DOS/X/LORD/dosemu.conf", "X:\\PW\\START.BAT {dropFile} {node}" ], nodeMax: 1 tooManyArt: DOORMANY