forked from photopea/Typr.js
/
bin.js
88 lines (87 loc) · 2.28 KB
/
bin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Typr._bin = {
readFixed : function(data, o)
{
return ((data[o]<<8) | data[o+1]) + (((data[o+2]<<8)|data[o+3])/(256*256+4));
},
readF2dot14 : function(data, o)
{
var num = Typr._bin.readShort(data, o);
return num / 16384;
},
readInt : function(buff, p)
{
return Typr._bin._view(buff).getInt32(p);
},
readInt8 : function(buff, p)
{
return Typr._bin._view(buff).getInt8(p);
},
readShort : function(buff, p)
{
return Typr._bin._view(buff).getInt16(p);
},
readUshort : function(buff, p)
{
return Typr._bin._view(buff).getUint16(p);
},
readUshorts : function(buff, p, len)
{
var arr = [];
for(var i=0; i<len; i++) arr.push(Typr._bin.readUshort(buff, p+i*2));
return arr;
},
readUint : function(buff, p)
{
return Typr._bin._view(buff).getUint32(p);
},
readUint64 : function(buff, p)
{
//if(p>=buff.length) throw "error";
return (Typr._bin.readUint(buff, p)*(0xffffffff+1)) + Typr._bin.readUint(buff, p+4);
},
readASCII : function(buff, p, l) // l : length in Characters (not Bytes)
{
//if(p>=buff.length) throw "error";
var s = "";
for(var i = 0; i < l; i++) s += String.fromCharCode(buff[p+i]);
return s;
},
readUnicode : function(buff, p, l)
{
//if(p>=buff.length) throw "error";
var s = "";
for(var i = 0; i < l; i++)
{
var c = (buff[p++]<<8) | buff[p++];
s += String.fromCharCode(c);
}
return s;
},
_tdec : typeof window !== 'undefined' && window["TextDecoder"] ? new window["TextDecoder"]() : null,
readUTF8 : function(buff, p, l) {
var tdec = Typr._bin._tdec;
if(tdec && p==0 && l==buff.length) return tdec["decode"](buff);
return Typr._bin.readASCII(buff,p,l);
},
readBytes : function(buff, p, l)
{
//if(p>=buff.length) throw "error";
var arr = [];
for(var i=0; i<l; i++) arr.push(buff[p+i]);
return arr;
},
readASCIIArray : function(buff, p, l) // l : length in Characters (not Bytes)
{
//if(p>=buff.length) throw "error";
var s = [];
for(var i = 0; i < l; i++)
s.push(String.fromCharCode(buff[p+i]));
return s;
},
_view: function(buff) {
return buff._dataView || (buff._dataView = buff.buffer ?
new DataView(buff.buffer, buff.byteOffset, buff.byteLength) :
new DataView(new Uint8Array(buff).buffer)
);
}
};