mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-07-21 22:12:21 +01:00
111 lines
3.8 KiB
Plaintext
111 lines
3.8 KiB
Plaintext
proc
|
|
binbase64(bin)
|
|
var/buffer, char, len = length(bin)
|
|
for(var/i in 1 to len step 24)
|
|
char = (text2ascii(bin, i) - 48) << 7
|
|
char |= (text2ascii(bin, i+1) - 48) << 6
|
|
char |= (text2ascii(bin, i+2) - 48) << 5
|
|
char |= (text2ascii(bin, i+3) - 48) << 4
|
|
char |= (text2ascii(bin, i+4) - 48) << 3
|
|
char |= (text2ascii(bin, i+5) - 48) << 2
|
|
char |= (text2ascii(bin, i+6) - 48) << 1
|
|
char |= text2ascii(bin, i+7) - 48
|
|
buffer = char << 4
|
|
if(len-i > 7)
|
|
char = (text2ascii(bin, i+8) - 48) << 7
|
|
char |= (text2ascii(bin, i+9) - 48) << 6
|
|
char |= (text2ascii(bin, i+10) - 48) << 5
|
|
char |= (text2ascii(bin, i+11) - 48) << 4
|
|
char |= (text2ascii(bin, i+12) - 48) << 3
|
|
char |= (text2ascii(bin, i+13) - 48) << 2
|
|
char |= (text2ascii(bin, i+14) - 48) << 1
|
|
char |= text2ascii(bin, i+15) - 48
|
|
buffer |= char >> 4
|
|
. += ascii2text(text2ascii(_base64AlphaStr, 1 + (buffer >> 6))) + \
|
|
ascii2text(text2ascii(_base64AlphaStr, 1 + (buffer & 0x3F)))
|
|
buffer = (char & 0xF) << 8
|
|
if(len-i > 15)
|
|
buffer |= (text2ascii(bin, i+16) - 48) << 7
|
|
buffer |= (text2ascii(bin, i+17) - 48) << 6
|
|
buffer |= (text2ascii(bin, i+18) - 48) << 5
|
|
buffer |= (text2ascii(bin, i+19) - 48) << 4
|
|
buffer |= (text2ascii(bin, i+20) - 48) << 3
|
|
buffer |= (text2ascii(bin, i+21) - 48) << 2
|
|
buffer |= (text2ascii(bin, i+22) - 48) << 1
|
|
buffer |= text2ascii(bin, i+23) - 48
|
|
. += ascii2text(text2ascii(_base64AlphaStr, 1 + (buffer >> 6))) + \
|
|
ascii2text(text2ascii(_base64AlphaStr, 1 + (buffer & 0x3F)))
|
|
else . += ascii2text(text2ascii(_base64AlphaStr, 1 + (buffer >> 6))) + "="
|
|
else . += ascii2text(text2ascii(_base64AlphaStr, 1 + (buffer >> 6))) + \
|
|
ascii2text(text2ascii(_base64AlphaStr, 1 + (buffer & 0x3F))) + \
|
|
"=="
|
|
|
|
|
|
base64bin(b64)
|
|
var/buffer, char, bin, len = length(b64)
|
|
for(var/i in 1 to len step 4)
|
|
buffer = (findtextEx(_base64AlphaStr, ascii2text(text2ascii(b64, i)))-1)<<2
|
|
char = findtextEx(_base64AlphaStr, ascii2text(text2ascii(b64, i+1)))-1
|
|
buffer |= char >> 4
|
|
bin = num2text(buffer % 2)
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
. += bin
|
|
bin = null
|
|
buffer = (char & 0xF) << 4
|
|
char = text2ascii(b64, i+2)
|
|
if(char != 61) // char != "="
|
|
char = findtextEx(_base64AlphaStr, ascii2text(char))-1
|
|
buffer |= char >> 2
|
|
bin = num2text(buffer % 2)
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
. += bin
|
|
bin = null
|
|
buffer = (char & 0x3) << 6
|
|
char = text2ascii(b64, i+3)
|
|
if(char != 61) // char != "="
|
|
buffer |= findtextEx(_base64AlphaStr, ascii2text(char))-1
|
|
bin = num2text(buffer % 2)
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
buffer >>= 1
|
|
bin = num2text(buffer % 2) + bin
|
|
. += bin
|
|
bin = null
|
|
else break
|
|
else break |