* fixed endless loop in UnHook and UnHookOpcode funcs + some other quirks

This commit is contained in:
false_genesis 2008-03-08 01:55:58 +00:00
parent 4633ed64be
commit 406f365ff7
2 changed files with 33 additions and 11 deletions

View File

@ -101,6 +101,17 @@ set,top ${@0}
default,top ${@caller} default,top ${@caller}
return #${top}::${@def} return #${top}::${@def}
//---------------------------------------------------------
#script=sclistname
//---------------------------------------------------------
// purpose: returns the global name of a script list
// args: @def: script name
set,c ?{substr,1 ${@def}}
// it is a global name already if the script name starts with # or there is no caller script
if ?{or,?{equal,# ${c}} ?{not ${@caller}}}
return ${@def}
endif
return #DEFSCRIPT::SCRIPT::${@def}
//--------------------------------------------------------- //---------------------------------------------------------
#script=getvar #script=getvar
@ -149,7 +160,7 @@ if ?{and,{?{strlen ${@def}}} ?{strlen ${sc}}}
createdef ${sc} createdef ${sc}
endif endif
lpushback,{#DEFSCRIPT::SCRIPT::${sc}} ${@def} lpushback,{?{sclistname ${sc}}} ${@def}
unset cmd unset cmd
endif endif
@ -161,5 +172,5 @@ endif
// @0: script name // @0: script name
// @def: line of text to look for // @def: line of text to look for
return ?{lcontains,{#DEFSCRIPT::SCRIPT::?{lowercase ${@0}}} ${@def}} return ?{lcontains,{?{sclistname ?{lowercase ${@0}}}} ${@def}}

View File

@ -26,7 +26,7 @@ set,sc ${@def}
default,sc ${#hookhelper::CurScript} default,sc ${#hookhelper::CurScript}
set,c ${@0} set,c ${@0}
default,c ${@caller} default,c ${@caller}
appenddef,{${sc}} #tag:hook-end:${c} appenddef,{${sc}} #tag:hook-end
set,#hookhelper::CurScript set,#hookhelper::CurScript
unset ${sc} unset ${sc}
unset sc unset sc
@ -74,19 +74,30 @@ HookStart,{${c}} OPCODE::${@def}
#script=UnHook #script=UnHook
// @def: name of script where to remove hook from // @def: name of script where to remove hook from
// [@0: hook name (usually name of script that installed the hook). default: name of calling script] // [@0: hook name (usually name of script that installed the hook). default: name of calling script]
set,target ?{lowercase ${@def}}
if ?{not ?{scriptexists ${target}}}
logerror UnHook called for nonexisting script '${target}' by '${@caller}'
endif
set,sc ${@0} set,sc ${@0}
default,sc ${@caller} default,sc ${@caller}
set,sl #DEFSCRIPT::SCRIPT::${@def} set,sc ?{lowercase ${sc}}
set,sl ?{sclistname ${target}}
set,hn #tag:hook:${sc} set,hn #tag:hook:${sc}
set,hne #tag:hook-end:${sc} set,hne #tag:hook-end
//logdebug -- sl='${sl}' hn='${hn}' hne='${hne}'
loop loop
if ?{not ?{IsHooked,{${sc}} ${@def}}} if ?{not ?{IsHooked,{${sc}} ${target}}}
//logdebug -- unhook done
exitloop exitloop
endif endif
set,p ?{lfind,{${sl}} ${hn}} set,p ?{lfind,{${sl}} ${hn}}
if ?{strlen ${p}} set,line ?{lindex,{${sl}} ${p}}
//logdebug -- line[${p}] = ${line}
if ?{strlen ${p}} // p is empty string if the line wasnt found
loop loop
if ?{equal,{?{lerase,{${sl}} ${p}}} ${hne}} set,line2 ?{lerase,{${sl}} ${p}}
//logdebug -- removed: '${line2}'
if ?{equal,{${line2}} ${hne}}
exitloop exitloop
endif endif
endloop endloop
@ -100,7 +111,7 @@ unset sc
#script=UnHookOpcode #script=UnHookOpcode
// @def: opcode name // @def: opcode name
// [@0: name of calling script] // [@0: name of calling script]
set,sc ?{@0} set,sc ${@0}
default,sc ${@caller} default,sc ${@caller}
UnHook,{${sc}} OPCODE::${@def} UnHook,{${sc}} OPCODE::${@def}
@ -108,9 +119,9 @@ UnHook,{${sc}} OPCODE::${@def}
// @def: name of script to remove all hooks from // @def: name of script to remove all hooks from
// [@0: name of calling script] // [@0: name of calling script]
set,sc ${@0} set,sc ${@0}
set,sl #DEFSCRIPT::SCRIPT::${@def} set,sl ?{sclistname ${@def}}
set,hn #tag:hook: set,hn #tag:hook:
set,hne #tag:hook-end: set,hne #tag:hook-end
set,i 0 set,i 0
set,hookcode false set,hookcode false
loop loop