A forum for macro code snippets to be used in writing other macros. Post routines or .inc files here only, completed macros go to the Macro Depot. MQ2Data format only!
Moderator: MacroQuest Developers
-
Vexix
- Genbot Janitor
- Posts: 245
- Joined: Sat Apr 17, 2004 10:10 am
Post
by Vexix » Sun Jun 06, 2004 12:14 am
I use string variables for keeping track of lists of things quite a bit, such as aggro lists, lists of tasks to complete, genbot commands, etc. Here is the .inc file I use for managing them.
Code: Select all
|listfunc.inc
|Basic library of list functions using args and a string.
|Version 1.0
|Date:06/06/2004
|
| Note that the lists are double aliased, so to replace the 3rd element on a list
| stored in ${Mylist}, the call is /call ListReplacebyArg Mylist ${NewElement} 3
| Note the lack of ${} on Mylist.
|
||**
[listfunc]
version=1.0
**||
|
Sub ListDelbyArg(string sList,int sArg,string sDiv)
/if (!${Defined[sDiv]}) /varset sDiv |
/declare sright int local
/declare sleft int local
/declare splaceholder string local
/varset ${sList} ${sDiv}${${sList}}${sDiv}${sDiv}
/varset splaceholder ${String[${${sList}}].Arg[${sArg},${sDiv}]}
/varcalc sleft ${${sList}.Find[${sDiv}${splaceholder}${sDiv}]}
/varcalc sright ${sleft}+${String[${splaceholder}${sDiv}].Length}
/varset ${sList} ${${sList}.Left[${sleft}]}${${sList}.Right[-${sright}]}
/varset ${sList} ${${sList}.Left[-2].Right[-1]}
/if (Debug) /echo List ${${sList}} deleted arg ${sArg}
/return
Sub ListReplacebyArg(string sList,string sElement,string sArg,string sDiv)
/if (!${Defined[sDiv]}) /varset sDiv |
/varset ${sList} ${sDiv}${${sList}}${sDiv}${sDiv}
/declare sright int local
/declare sleft int local
/declare splaceholder string local
/varset splaceholder ${String[${${sList}}].Arg[${sArg},${sDiv}]}
/varcalc sleft ${${sList}.Find[${sDiv}${splaceholder}${sDiv}]}
/varcalc sright ${sleft}+${String[${splaceholder}${sDiv}].Length}
/varset ${sList} ${${sList}.Left[${sleft}]}${sElement}${sDiv}${${sList}.Right[-${sright}]}
/varset ${sList} ${${sList}.Left[-2].Right[-1]}
/if (Debug) /echo List ${${sList}} sElement ${sElement} repladed arg ${sArg}
/return
Sub ListDelbyName(string sList,string sName,string sDiv)
/if (!${Defined[sDiv]}) /varset sDiv |
/varset ${sList} ${sDiv}${${sList}}${sDiv}${sDiv}
/declare sright int local
/declare sleft int local
/varcalc sleft ${String[${sDiv}${${sList}}${sDiv}].Find[${sDiv}${sName}${sDiv}]}-1
/varcalc sright ${sleft}+${String[${sName}${sDiv}].Length}
/varset ${sList} ${${sList}.Left[${sleft}]}${${sList}.Right[-${sright}]}
/varset ${sList} ${${sList}.Left[-2].Right[-1]}
/if (Debug) /echo List ${${sList}} Deleted: ${sName}
/return
Sub ListAppendElement(string sList,string sElement,string sDiv)
/if (!${Defined[sDiv]}) /varset sDiv |
/if (${${sList}.Length}) {
/varset ${sList} ${${sList}}${sDiv}${sElement}
} else {
/varset ${sList} ${sElement}
}
/if (Debug) /echo List ${${sList}} Added: ${sElement}
/return
Sub ListPrependElement(string sList,string sElement,string sDiv)
/if (!${Defined[sDiv]}) /varset sDiv |
/if (${${sList}.Length}) {
/varset ${sList} ${sElement}${sDiv}${${sList}}
} else {
/varset ${sList} ${sElement}
}
/if (Debug) /echo List ${${sList}} Added: ${sElement}
/return
[/code]
-
SomeEqDude
- orc pawn

- Posts: 26
- Joined: Sun Dec 07, 2003 6:44 am
Post
by SomeEqDude » Wed Jun 16, 2004 6:54 am
Added routines to implement stacks, queues, and a few other functions.
Code: Select all
|listfunc.inc
|Basic library of list functions using args and a string.
|Version 1.1
|Date:06/06/2004
|
| Note that the lists are double aliased, so to replace the 3rd element on a list
| stored in ${Mylist}, the call is /call ListReplacebyArg Mylist ${NewElement} 3
| Note the lack of ${} on Mylist.
|
||**
[listfunc]
version=1.0
**||
|
Sub ListDelbyArg(string sList,int iArg,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/call ListGetNameByArg ${sList} ${iArg} "${sDiv}"
/call ListDelByName ${sList} "${Macro.Return}" "${sDiv}"
/return ${Macro.Return}
Sub ListReplacebyArg(string sList,string sReplace,int iArg,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/call ListGetNameByArg ${sList} ${iArg} "${sDiv}"
/call ListReplaceByName ${sList} ${sReplace} "${Macro.Return}" "${sDiv}"
/return ${Macro.Return}
Sub ListReplaceByName(string sList,string sReplace,string sFind,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/varset ${sList} "${sDiv}${${sList}}${sDiv}${sDiv}"
/declare sright int local
/declare sleft int local
/varcalc sleft ${${sList}.Find[${sDiv}${sFind}${sDiv}]}
/varcalc sright ${sleft}+${String[${sFind}${sDiv}].Length}
/varset ${sList} ${${sList}.Left[${sleft}]}${sReplace}${sDiv}${${sList}.Right[-${sright}]}
/varset ${sList} ${${sList}.Left[-2].Right[-1]}
/if (${Debug}) /echo List ${${sList}} sElement ${sReplace} replaced arg ${sFind}
/return ${sReplace}
Sub ListDelbyName(string sList,string sName,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/varset ${sList} ${sDiv}${${sList}}${sDiv}${sDiv}
/declare sright int local
/declare sleft int local
/varcalc sleft ${String[${sDiv}${${sList}}${sDiv}].Find[${sDiv}${sName}${sDiv}]}-1
/varcalc sright ${sleft}+${String[${sName}${sDiv}].Length}
/varset ${sList} ${${sList}.Left[${sleft}]}${${sList}.Right[-${sright}]}
/varset ${sList} ${${sList}.Left[-2].Right[-1]}
/if (${Debug}) /echo List ${${sList}} Deleted: ${sName}
/return ${sName}
Sub ListAppendElement(string sList,string sElement,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/if (${${sList}.Length}) {
/varset ${sList} ${${sList}}${sDiv}${sElement}
} else {
/varset ${sList} ${sElement}
}
/if (${Debug}) /echo List ${${sList}} Added: ${sElement}
/return
Sub ListPrependElement(string sList,string sElement,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/if (${${sList}.Length}) {
/varset ${sList} ${sElement}${sDiv}${${sList}}
} else {
/varset ${sList} ${sElement}
}
/if (${Debug}) /echo List ${${sList}} Added: ${sElement}
/return
Sub ListGetNameByArg(string sList,int iArg,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/return ${${sList}.Arg[${iArg},"${sDiv}"]}
Sub QueuePush(string sList,string sElement,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/call ListAppendElement ${sList} "${sElement}" "${sDiv}"
/return
Sub QueuePop(string sList,string sDefault,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/if (!${Defined[sDefault]}) /declare sDefault string local
/if (${${sList}.Length}==0) /return ${sDefault}
/call ListDelByArg ${sList} 1 "${sDiv}"
/return ${Macro.Return}
Sub StackPush(string sList,string sElement,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/call ListPrependElement ${sList} "${sElement}" "${sDiv}"
/return
Sub StackPop(string sList,string sDefault,string sDiv)
/if (!${Defined[sDiv]}) /declare sDiv string local |
/if (!${Defined[sDefault]}) /declare sDefault string local
/call QueuePoP ${sList} "${sDefault}" "${sDiv}"
/return ${Macro.Return}