listfunc.inc Library for using strings as lists.

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

listfunc.inc Library for using strings as lists.

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
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}