You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
370 lines
13 KiB
370 lines
13 KiB
// Edit By TigerCN
|
|
define {
|
|
|
|
//printf(sign,""str) = printf(sign,NewStrId(str))
|
|
|
|
}
|
|
|
|
library StringArray
|
|
|
|
globals
|
|
integer STRING_INDEX_NONE = -1
|
|
string STRING_INVALID_SEGMENT = ""
|
|
endglobals
|
|
|
|
struct StringSegments
|
|
|
|
string s
|
|
string delim
|
|
integer sLen
|
|
integer dLen
|
|
integer pos
|
|
integer count
|
|
|
|
method calculateCount takes nothing returns nothing
|
|
local integer i = pos
|
|
local integer prev = pos
|
|
local integer count = 0
|
|
if (dLen == 0 or sLen == 0) then
|
|
return
|
|
endif
|
|
loop
|
|
if (i >= sLen) then
|
|
if (i - prev > 0) then
|
|
set count = count + 1
|
|
endif
|
|
exitwhen true
|
|
endif
|
|
if (SubString(s, i, i + dLen) == delim ) then
|
|
if (i - prev > 0) then
|
|
set count = count + 1
|
|
set i = i + dLen
|
|
set prev = i
|
|
endif
|
|
set i = i + dLen
|
|
set prev = i
|
|
else
|
|
set i = i + 1
|
|
endif
|
|
endloop
|
|
endmethod
|
|
|
|
static method create takes string s, string delim returns thistype
|
|
local thistype t = thistype.allocate()
|
|
set t.s = s
|
|
set t.pos = 0
|
|
set t.sLen = StringLength(s)
|
|
set t.delim = delim
|
|
set t.dLen = StringLength(delim)
|
|
call t.calculateCount()
|
|
return t
|
|
endmethod
|
|
|
|
method countSegments takes nothing returns integer
|
|
return count
|
|
endmethod
|
|
|
|
method hasMoreSegments takes nothing returns boolean
|
|
return count > 0
|
|
endmethod
|
|
|
|
method nextSegment takes nothing returns string
|
|
local integer i = pos
|
|
local string str
|
|
if (count <= 0) then
|
|
return STRING_INVALID_SEGMENT
|
|
endif
|
|
loop
|
|
loop
|
|
set str = SubString(s, i, i + dLen)
|
|
if (str == delim or str == "" or str == null) then
|
|
exitwhen true
|
|
endif
|
|
set i = i + 1
|
|
endloop
|
|
if (i - pos > 0) then
|
|
set str = SubString(s, pos, i)
|
|
set pos = i
|
|
set count = count - 1
|
|
exitwhen true
|
|
endif
|
|
set pos = i + dLen
|
|
set i = pos
|
|
endloop
|
|
return str
|
|
endmethod
|
|
|
|
method nextSegmentEx takes string line returns string
|
|
set delim = line
|
|
set dLen = StringLength(line)
|
|
call calculateCount()
|
|
return nextSegment()
|
|
endmethod
|
|
|
|
endstruct
|
|
|
|
|
|
endlibrary
|
|
|
|
library StrHash
|
|
|
|
globals
|
|
string array Trend_String
|
|
endglobals
|
|
|
|
function IntToStr takes string h returns integer
|
|
return h
|
|
return 0
|
|
endfunction
|
|
|
|
function NewStrId takes string h returns integer
|
|
local integer EnumId
|
|
local integer ConvertedTimer = IntToStr(h)
|
|
local integer StartId = ConvertedTimer - (ConvertedTimer / 8192) * 8192
|
|
if (StartId < 0) then
|
|
set StartId = StartId + 8192
|
|
endif
|
|
set EnumId = StartId
|
|
loop
|
|
if (Trend_String[EnumId] == null) then
|
|
set Trend_String[EnumId] = h
|
|
return EnumId
|
|
elseif (EnumId < 8191) then
|
|
set EnumId = EnumId + 1
|
|
else
|
|
set EnumId = 0
|
|
endif
|
|
exitwhen EnumId == StartId
|
|
endloop
|
|
return -1
|
|
endfunction
|
|
|
|
function ClearStrId takes integer id returns nothing
|
|
set Trend_String[id] = null
|
|
endfunction
|
|
|
|
endlibrary
|
|
|
|
library SchemeExport requires StrHash
|
|
function DecToBin takes integer dec returns string
|
|
local string bin=""
|
|
local string array bits
|
|
local integer i=0
|
|
loop
|
|
exitwhen ( dec < 2 )
|
|
if ( ModuloInteger(dec, 2) == 1 ) then
|
|
set bits[i]="1"
|
|
else
|
|
set bits[i]="0"
|
|
endif
|
|
set dec=dec / 2
|
|
set i=i + 1
|
|
endloop
|
|
set bits[i]=I2S(ModuloInteger(dec, 2))
|
|
loop
|
|
exitwhen ( i < 0 )
|
|
set bin=bin + bits[i]
|
|
set i=i - 1
|
|
endloop
|
|
return bin
|
|
endfunction
|
|
|
|
function DecToOct takes integer dec returns string
|
|
local integer i=0
|
|
local integer j=0
|
|
local integer oct=0
|
|
if ( dec <= 7 ) then
|
|
set oct=dec
|
|
else
|
|
loop
|
|
exitwhen ( dec <= 7 )
|
|
set j=ModuloInteger(dec, 8)
|
|
set dec=dec / 8
|
|
set oct=R2I(j * Pow(10, i) + oct)
|
|
set i=i + 1
|
|
endloop
|
|
endif
|
|
set oct=R2I(oct + dec * Pow(10, i))
|
|
return I2S(oct)
|
|
endfunction
|
|
|
|
function DecToHex takes integer dec returns string
|
|
local string array b
|
|
local string sec=""
|
|
local integer i=0
|
|
local integer j
|
|
local integer array int
|
|
local StringSegments limb=StringSegments.create("#0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #A #B #C #D #E #F" , " ")
|
|
loop
|
|
exitwhen ( not ( limb.hasMoreSegments() ) )
|
|
set b[i]=SubString(limb.nextSegment(), 1, 2)
|
|
set i=i + 1
|
|
endloop
|
|
set i=0
|
|
set j=dec
|
|
loop
|
|
exitwhen ( j <= 0 )
|
|
set int[i]=ModuloInteger(j, 16)
|
|
set j=j / 16
|
|
set i=i + 1
|
|
endloop
|
|
loop
|
|
exitwhen ( i <= 0 )
|
|
set sec=sec + b[int[i - 1]]
|
|
set i=i - 1
|
|
endloop
|
|
call limb.destroy()
|
|
return sec
|
|
endfunction
|
|
|
|
function ASCIIToChar takes integer i returns string
|
|
if ( i == 0 ) then
|
|
return null
|
|
elseif ( i >= 8 and i <= 10 ) then
|
|
return SubString("\b\t\n", i - 8, i - 7)
|
|
elseif ( i >= 12 and i <= 13 ) then
|
|
return SubString("\f\r", i - 12, i - 11)
|
|
elseif ( i >= 32 and i <= 127 ) then
|
|
return SubString("!\"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", i - 32, i - 31)
|
|
endif
|
|
return ""
|
|
endfunction
|
|
|
|
function InvertChar takes string inv returns string
|
|
local string new=""
|
|
local string array pol
|
|
local integer i
|
|
set i=StringLength(inv) - 1
|
|
loop
|
|
exitwhen i < 0
|
|
set pol[i]=SubString(inv, i, i + 1)
|
|
set new=new + pol[i]
|
|
set i=i - 1
|
|
endloop
|
|
return new
|
|
endfunction
|
|
|
|
function SeverChar takes string h,string mark returns integer
|
|
local integer len=StringLength(h)
|
|
local integer int
|
|
local string result
|
|
set int=0
|
|
loop
|
|
exitwhen int > len - 1
|
|
set result=SubString(h, int, int + 1)
|
|
exitwhen ( result == mark )
|
|
set int=int + 1
|
|
endloop
|
|
return int
|
|
endfunction
|
|
|
|
//public:
|
|
function Print takes string char,real col returns nothing
|
|
local string com
|
|
local string pat
|
|
local string rev
|
|
local string ally
|
|
local string key="dbohxcefst"
|
|
local string sty
|
|
local string dig
|
|
local string acc
|
|
local string line=""
|
|
local integer l=SeverChar(char , "%") // >>> String Parameters Details Lists <<< // // com(common): // pat(pattern): // rev(revers): // ally: // key: include keywords. // sty(style): // dig(digital): // acc(accuracy): // line: // //=========================================================================================================// //=========================================================================================================
|
|
local integer i
|
|
local integer j
|
|
local integer k
|
|
set com=SubString(char, 0, l)
|
|
set ally=SubString(char, l + 1, StringLength(char))
|
|
set l=SeverChar(ally , "|")
|
|
set pat=SubString(ally, 0, l)
|
|
set rev=SubString(ally, l + 1, StringLength(ally)) //=========================================================================================================//
|
|
if ( rev == "n" ) then
|
|
set rev="\n"
|
|
elseif ( rev == "r" ) then
|
|
set rev="\r"
|
|
elseif ( rev == "b" ) then
|
|
set rev="\b"
|
|
elseif ( rev == "f" ) then
|
|
set rev="\f"
|
|
elseif ( rev == "t" ) then
|
|
set rev="\t"
|
|
elseif ( rev == "q" ) then
|
|
set rev=" \n\n\n\n\n"
|
|
endif //=========================================================================================================//
|
|
set i=0
|
|
loop
|
|
exitwhen i > StringLength(pat) - 1
|
|
set ally=SubString(pat, i, i + 1)
|
|
set j=0
|
|
loop
|
|
exitwhen j > StringLength(key) - 1
|
|
set sty=SubString(key, j, j + 1)
|
|
exitwhen ( ally == sty )
|
|
set j=j + 1
|
|
endloop
|
|
set i=i + 1
|
|
endloop
|
|
set sty=ally //=========================================================================================================//
|
|
set l=SeverChar(pat , ".")
|
|
set dig=SubString(pat, 0, l)
|
|
if ( l >= StringLength(pat) ) then
|
|
set acc=""
|
|
else
|
|
set acc=SubString(pat, l + 1, StringLength(pat) - 1)
|
|
endif //=========================================================================================================//
|
|
if ( sty == "d" ) then
|
|
set j=StringLength(I2S(R2I(col)))
|
|
elseif ( sty == "f" ) then
|
|
set j=StringLength(R2S(col))
|
|
set l=SeverChar(R2S(col) , ".")
|
|
if ( S2I(acc) > j - l - 1 ) then
|
|
set i=0
|
|
loop
|
|
exitwhen i > ( S2I(acc) - j + l )
|
|
set line=line + "0"
|
|
set i=i + 1
|
|
endloop
|
|
call BJDebugMsg(com + R2S(col) + line + rev)
|
|
else
|
|
set ally=SubString(R2S(col), 0, S2I(acc) + l + 1)
|
|
set i=S2I(SubString(R2S(col), S2I(acc) + l + 1, S2I(acc) + l + 2))
|
|
if ( i >= 5 ) then
|
|
set col=S2R(ally) + Pow(0.1, - ( S2I(acc) - j + l ))
|
|
set ally=SubString(R2S(col), 0, S2I(acc) + l + 1)
|
|
endif
|
|
call BJDebugMsg(com + ally + rev)
|
|
endif
|
|
endif
|
|
if ( S2I(dig) - j > 0 ) then
|
|
set i=0
|
|
loop
|
|
exitwhen i > ( S2I(dig) - j )
|
|
set com=com + " "
|
|
set i=i + 1
|
|
endloop
|
|
endif //=========================================================================================================//
|
|
if ( sty == "d" ) then
|
|
call BJDebugMsg(com + I2S(R2I(col)) + rev)
|
|
elseif ( sty == "b" ) then
|
|
call BJDebugMsg(com + DecToBin(R2I(col)) + rev)
|
|
elseif ( sty == "o" ) then
|
|
call BJDebugMsg(com + DecToOct(R2I(col)) + rev)
|
|
elseif ( sty == "h" ) then
|
|
call BJDebugMsg(com + DecToHex(R2I(col)) + rev)
|
|
elseif ( sty == "x" ) then
|
|
call BJDebugMsg(com + "0x" + DecToHex(R2I(col)) + rev)
|
|
elseif ( sty == "s" ) then
|
|
call BJDebugMsg(com + ASCIIToChar(R2I(col)) + rev)
|
|
elseif ( sty == "l" ) then
|
|
call BJDebugMsg(com + Trend_String[R2I(col)])
|
|
call ClearStrId(R2I(col))
|
|
elseif ( sty == "c" ) then
|
|
call BJDebugMsg(com + SubString(Trend_String[R2I(col)], 0, 1))
|
|
call ClearStrId(R2I(col))
|
|
elseif ( sty == "t" ) then //=========================================================================================================//
|
|
call BJDebugMsg(com + InvertChar(Trend_String[R2I(col)]))
|
|
call ClearStrId(R2I(col))
|
|
endif
|
|
endfunction
|
|
|
|
endlibrary |