File size: 1,559 Bytes
b0bfea8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
/**
 * Reads as little endian
 * @param dataArray {IndexedByteArray}
 * @param bytesAmount {number}
 * @returns {number}
 */
export function readLittleEndian(dataArray, bytesAmount)
{
    let out = 0;
    for (let i = 0; i < bytesAmount; i++)
    {
        out |= (dataArray[dataArray.currentIndex++] << i * 8);
    }
    // make sure it stays unsigned
    return out >>> 0;
}

/**
 * Writes a number as little endian seems to also work for negative numbers so yay?
 * @param dataArray {IndexedByteArray}
 * @param number {number}
 * @param byteTarget {number}
 */
export function writeLittleEndian(dataArray, number, byteTarget)
{
    for (let i = 0; i < byteTarget; i++)
    {
        dataArray[dataArray.currentIndex++] = (number >> (i * 8)) & 0xFF;
    }
}

/**
 * @param dataArray {IndexedByteArray}
 * @param word {number}
 */
export function writeWord(dataArray, word)
{
    dataArray[dataArray.currentIndex++] = word & 0xFF;
    dataArray[dataArray.currentIndex++] = word >> 8;
}

/**
 * @param dataArray {IndexedByteArray}
 * @param dword {number}
 */
export function writeDword(dataArray, dword)
{
    writeLittleEndian(dataArray, dword, 4);
}

/**
 * @param byte1 {number}
 * @param byte2 {number}
 * @returns {number}
 */
export function signedInt16(byte1, byte2)
{
    let val = (byte2 << 8) | byte1;
    if (val > 32767)
    {
        return val - 65536;
    }
    return val;
}

/**
 * @param byte {number}
 * @returns {number}
 */
export function signedInt8(byte)
{
    if (byte > 127)
    {
        return byte - 256;
    }
    return byte;
}