| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | /* Wrapper for accessing strings through sequential reads */function Stream(str) {	var position = 0;		function read(length) {		var result = str.substr(position, length);		position += length;		return result;	}		/* read a big-endian 32-bit integer */	function readInt32() {		var result = (			(str.charCodeAt(position) << 24)			+ (str.charCodeAt(position + 1) << 16)			+ (str.charCodeAt(position + 2) << 8)			+ str.charCodeAt(position + 3));		position += 4;		return result;	}	/* read a big-endian 16-bit integer */	function readInt16() {		var result = (			(str.charCodeAt(position) << 8)			+ str.charCodeAt(position + 1));		position += 2;		return result;	}		/* read an 8-bit integer */	function readInt8(signed) {		var result = str.charCodeAt(position);		if (signed && result > 127) result -= 256;		position += 1;		return result;	}		function eof() {		return position >= str.length;	}		/* read a MIDI-style variable-length integer		(big-endian value in groups of 7 bits,		with top bit set to signify that another byte follows)	*/	function readVarInt() {		var result = 0;		while (true) {			var b = readInt8();			if (b & 0x80) {				result += (b & 0x7f);				result <<= 7;			} else {				/* b is the last byte */				return result + b;			}		}	}		return {		'eof': eof,		'read': read,		'readInt32': readInt32,		'readInt16': readInt16,		'readInt8': readInt8,		'readVarInt': readVarInt	}}
 |