mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
The copyright and license notice is already in the LICENSE file. There is no justifiable reason to also require that it be included in every file, since the individual files are not individually distributed except as part of the entire package.
111 lines
2.5 KiB
JavaScript
111 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
var inherits = require('util').inherits;
|
|
var net = require('net');
|
|
var TTY = process.binding('tty_wrap').TTY;
|
|
var isTTY = process.binding('tty_wrap').isTTY;
|
|
var util = require('util');
|
|
|
|
var errnoException = util._errnoException;
|
|
|
|
|
|
exports.isatty = function(fd) {
|
|
return isTTY(fd);
|
|
};
|
|
|
|
|
|
// backwards-compat
|
|
exports.setRawMode = util.deprecate(function(flag) {
|
|
if (!process.stdin.isTTY) {
|
|
throw new Error('can\'t set raw mode on non-tty');
|
|
}
|
|
process.stdin.setRawMode(flag);
|
|
}, 'tty.setRawMode: Use `process.stdin.setRawMode()` instead.');
|
|
|
|
|
|
function ReadStream(fd, options) {
|
|
if (!(this instanceof ReadStream))
|
|
return new ReadStream(fd, options);
|
|
|
|
options = util._extend({
|
|
highWaterMark: 0,
|
|
readable: true,
|
|
writable: false,
|
|
handle: new TTY(fd, true)
|
|
}, options);
|
|
|
|
net.Socket.call(this, options);
|
|
|
|
this.isRaw = false;
|
|
this.isTTY = true;
|
|
}
|
|
inherits(ReadStream, net.Socket);
|
|
|
|
exports.ReadStream = ReadStream;
|
|
|
|
ReadStream.prototype.setRawMode = function(flag) {
|
|
flag = !!flag;
|
|
this._handle.setRawMode(flag);
|
|
this.isRaw = flag;
|
|
};
|
|
|
|
|
|
|
|
function WriteStream(fd) {
|
|
if (!(this instanceof WriteStream)) return new WriteStream(fd);
|
|
net.Socket.call(this, {
|
|
handle: new TTY(fd, false),
|
|
readable: false,
|
|
writable: true
|
|
});
|
|
|
|
var winSize = [];
|
|
var err = this._handle.getWindowSize(winSize);
|
|
if (!err) {
|
|
this.columns = winSize[0];
|
|
this.rows = winSize[1];
|
|
}
|
|
}
|
|
inherits(WriteStream, net.Socket);
|
|
exports.WriteStream = WriteStream;
|
|
|
|
|
|
WriteStream.prototype.isTTY = true;
|
|
|
|
|
|
WriteStream.prototype._refreshSize = function() {
|
|
var oldCols = this.columns;
|
|
var oldRows = this.rows;
|
|
var winSize = [];
|
|
var err = this._handle.getWindowSize(winSize);
|
|
if (err) {
|
|
this.emit('error', errnoException(err, 'getWindowSize'));
|
|
return;
|
|
}
|
|
var newCols = winSize[0];
|
|
var newRows = winSize[1];
|
|
if (oldCols !== newCols || oldRows !== newRows) {
|
|
this.columns = newCols;
|
|
this.rows = newRows;
|
|
this.emit('resize');
|
|
}
|
|
};
|
|
|
|
|
|
// backwards-compat
|
|
WriteStream.prototype.cursorTo = function(x, y) {
|
|
require('readline').cursorTo(this, x, y);
|
|
};
|
|
WriteStream.prototype.moveCursor = function(dx, dy) {
|
|
require('readline').moveCursor(this, dx, dy);
|
|
};
|
|
WriteStream.prototype.clearLine = function(dir) {
|
|
require('readline').clearLine(this, dir);
|
|
};
|
|
WriteStream.prototype.clearScreenDown = function() {
|
|
require('readline').clearScreenDown(this);
|
|
};
|
|
WriteStream.prototype.getWindowSize = function() {
|
|
return [this.columns, this.rows];
|
|
};
|