/* very simple input/output stream interface */ var Stream = function() { }; // input streams ////////////// /** Returns the next byte, or -1 for EOF. */ Stream.prototype.readByte = function() { throw new Error("abstract method readByte() not implemented"); }; /** Attempts to fill the buffer; returns number of bytes read, or * -1 for EOF. */ Stream.prototype.read = function(buffer, bufOffset, length) { var bytesRead = 0; while (bytesRead < length) { var c = this.readByte(); if (c < 0) { // EOF return (bytesRead===0) ? -1 : bytesRead; } buffer[bufOffset++] = c; bytesRead++; } return bytesRead; }; Stream.prototype.seek = function(new_pos) { throw new Error("abstract method seek() not implemented"); }; // output streams /////////// Stream.prototype.writeByte = function(_byte) { throw new Error("abstract method readByte() not implemented"); }; Stream.prototype.write = function(buffer, bufOffset, length) { var i; for (i=0; i