var StringUtils = require('./stringutils'); /** * @constructor */ function BinaryFile(strData, iDataOffset, iDataLength) { var data = strData; var dataOffset = iDataOffset || 0; var dataLength = 0; this.getRawData = function() { return data; }; if (typeof strData == "string") { dataLength = iDataLength || data.length; this.getByteAt = function(iOffset) { return data.charCodeAt(iOffset + dataOffset) & 0xFF; }; } else if (typeof strData == "unknown") { dataLength = iDataLength || IEBinary_getLength(data); this.getByteAt = function(iOffset) { return IEBinary_getByteAt(data, iOffset + dataOffset); }; } // @aadsm this.getBytesAt = function(iOffset, iLength) { var bytes = new Array(iLength); for( var i = 0; i < iLength; i++ ) { bytes[i] = this.getByteAt(iOffset+i); } return bytes; }; this.getLength = function() { return dataLength; }; // @aadsm this.isBitSetAt = function(iOffset, iBit) { var iByte = this.getByteAt(iOffset); return (iByte & (1 << iBit)) != 0; }; this.getSByteAt = function(iOffset) { var iByte = this.getByteAt(iOffset); if (iByte > 127) return iByte - 256; else return iByte; }; this.getShortAt = function(iOffset, bBigEndian) { var iShort = bBigEndian ? (this.getByteAt(iOffset) << 8) + this.getByteAt(iOffset + 1) : (this.getByteAt(iOffset + 1) << 8) + this.getByteAt(iOffset); if (iShort < 0) iShort += 65536; return iShort; }; this.getSShortAt = function(iOffset, bBigEndian) { var iUShort = this.getShortAt(iOffset, bBigEndian); if (iUShort > 32767) return iUShort - 65536; else return iUShort; }; this.getLongAt = function(iOffset, bBigEndian) { var iByte1 = this.getByteAt(iOffset), iByte2 = this.getByteAt(iOffset + 1), iByte3 = this.getByteAt(iOffset + 2), iByte4 = this.getByteAt(iOffset + 3); var iLong = bBigEndian ? (((((iByte1 << 8) + iByte2) << 8) + iByte3) << 8) + iByte4 : (((((iByte4 << 8) + iByte3) << 8) + iByte2) << 8) + iByte1; if (iLong < 0) iLong += 4294967296; return iLong; }; this.getSLongAt = function(iOffset, bBigEndian) { var iULong = this.getLongAt(iOffset, bBigEndian); if (iULong > 2147483647) return iULong - 4294967296; else return iULong; }; // @aadsm this.getInteger24At = function(iOffset, bBigEndian) { var iByte1 = this.getByteAt(iOffset), iByte2 = this.getByteAt(iOffset + 1), iByte3 = this.getByteAt(iOffset + 2); var iInteger = bBigEndian ? ((((iByte1 << 8) + iByte2) << 8) + iByte3) : ((((iByte3 << 8) + iByte2) << 8) + iByte1); if (iInteger < 0) iInteger += 16777216; return iInteger; }; this.getStringAt = function(iOffset, iLength) { var aStr = []; for (var i=iOffset,j=0;i