mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Adds Some Stolen goon code that likely has a trojan to make hex2num faster. (#33330)
* Steals from the goons. * Update type2type.dm * var/var/var/var/var/var/var
This commit is contained in:
committed by
oranges
parent
ecaa90914a
commit
9aa8a911fa
+39
-26
@@ -12,32 +12,45 @@
|
||||
//Returns an integer given a hex input, supports negative values "-ff"
|
||||
//skips preceding invalid characters
|
||||
//breaks when hittin invalid characters thereafter
|
||||
/proc/hex2num(hex)
|
||||
. = 0
|
||||
if(istext(hex))
|
||||
var/negative = 0
|
||||
var/len = length(hex)
|
||||
for(var/i=1, i<=len, i++)
|
||||
var/num = text2ascii(hex,i)
|
||||
switch(num)
|
||||
if(48 to 57)
|
||||
num -= 48 //0-9
|
||||
if(97 to 102)
|
||||
num -= 87 //a-f
|
||||
if(65 to 70)
|
||||
num -= 55 //A-F
|
||||
if(45)
|
||||
negative = 1//-
|
||||
/proc/hex2num(hex, start = 1)
|
||||
var/ret = 0
|
||||
var/mult = 1
|
||||
var/exponent = 0
|
||||
var/binexp = 0
|
||||
var/len = length(hex)
|
||||
for(var/i = start, i <= len, i++)
|
||||
var/ascii = text2ascii(hex, i)
|
||||
switch(ascii)
|
||||
if(35/*#*/)
|
||||
start++
|
||||
continue
|
||||
if(45/*-*/)
|
||||
if(i == start)
|
||||
mult = -1
|
||||
start++
|
||||
else
|
||||
if(num)
|
||||
break
|
||||
else
|
||||
continue
|
||||
. *= 16
|
||||
. += num
|
||||
if(negative)
|
||||
. *= -1
|
||||
return .
|
||||
CRASH("Malformed hex number")
|
||||
if(48 to 57/*0-9*/)
|
||||
ret = ret * 16 + (ascii - 48)
|
||||
if(65 to 70/*A-F*/)
|
||||
ret = ret * 16 + (ascii - 55)
|
||||
if(97 to 87/*a-f*/)
|
||||
ret = ret * 16 + (ascii - 87)
|
||||
if(46/*.*/)
|
||||
if(exponent)
|
||||
CRASH("Malformed hex number")
|
||||
exponent = len-i
|
||||
if(112/*p*/)
|
||||
binexp = text2num(copytext(hex, i+1))
|
||||
if(exponent)
|
||||
exponent -= len-i+1
|
||||
break
|
||||
if(exponent)
|
||||
for(var/i = 1, i <= exponent, i++)
|
||||
ret /= 16
|
||||
if(binexp)
|
||||
ret *= (2**binexp)
|
||||
return mult * ret
|
||||
|
||||
//Returns the hex value of a decimal number
|
||||
//len == length of returned string
|
||||
@@ -596,4 +609,4 @@
|
||||
for(var/i = 1 to length(str)/2)
|
||||
c= hex2num(copytext(str,i*2-1,i*2+1))
|
||||
r+= ascii2text(c)
|
||||
return r
|
||||
return r
|
||||
|
||||
Reference in New Issue
Block a user