# Some misc functions.. ircII2.2 and beyond # by: Ian # reverse a string fed to it. # $reverse(65 one two three) returns.. # eerht owt eno # The formatting can be removed. alias reverse { ^assign -rev.result @ rev.ind = 0 @ rev.str = [$1-] while (mid($rev.ind 1 $rev.str)!=[]) { @ rev.result = [$mid($rev.ind 1 $rev.str)] ## [$rev.result] @ rev.ind = rev.ind + 1 } # This right justifies to a field with of $0. # strip out the format() function if you don't want it formatted. @ function_return = format($0 $rev.result) } # These have been updated to handle multiple words. # format and lformat differ from $[-num]var and $[num]var in that # They don't chop off the string if it is too long. alias format { @ IRCII.word = [$1-] if (@IRCII.word < [$0]) { @ function_return = [$([-$0]IRCII.word)] } { @ function_return = [$IRCII.word] } } alias lformat { @ IRCII.word = [$1-] if (@IRCII.word < [$0]) { @ function_return = [$([$0]IRCII.word)] } { @ function_return = [$IRCII.word] } } # Center text within a given width. center(width text) # "$center(10 one)" returns " one" # this might not make sense at first, but it saves alot of cursor travel # not writing all the spaces on the right side. alias center { @ IRCII.word = [$1-] @ IRCII.wordl = [$@IRCII.word] @ IRCII.width = [$0] if (IRCII.wordl > [$IRCII.width]) { @ function_return = [$ircII.word] } { @ function_return = [$([${(IRCII.width - ircII.wordl)/2}])] ## [$IRCII.word] } } # This is the huge beastly CPU expensive search and replace funnction # written entirely in ircII script language. # $sandr(search pat/replace pat/words) # the search and replace patterns can contain spaces or any other chars # with the exeption of '/'. alias sandr { @ sr.src = [$left($index(/ $*) $*)] @ sr.rep = [$mid(${index(/ $*) +1} ${rindex(/ $*) - index(/ $*) +1} $*)] @ sr.word = [$mid(${rindex(/ $*) + 1} 512 $*)] @ sr.srcl = @sr.src @ sr.wordl = @sr.word @ sr.cnt1 = 0 @ sr.cnt2 = 0 @ sr.lmark = 0 @ sr.gotit = 0 ^assign -sr.fstring while (sr.cnt1 < sr.wordl) { @ sr.scnt1 = sr.cnt1 while (([$mid($sr.cnt1 1 $sr.word)] == [$mid($sr.cnt2 1 $sr.src)]) && (sr.cnt2 < sr.srcl)) { if (sr.cnt2 == sr.srcl - 1) { @ sr.gotit = 1 } @ sr.cnt1 = sr.cnt1 + 1 @ sr.cnt2 = sr.cnt2 + 1 } @ sr.cnt2 = 0 if (sr.gotit) { @ sr.fstring = [$sr.fstring] ## [$mid($sr.lmark ${sr.scnt1 - sr.lmark} $sr.word)] ## [$sr.rep] @ sr.gotit = 0 @ sr.lmark = sr.cnt1 } { @ sr.cnt1 = sr.cnt1 +1 } } @ sr.fstring = [$sr.fstring] ## [$mid($sr.lmark 512 $sr.word)] @ function_return = [$sr.fstring] } # The perfect complement to the $word() function. # $notword(index words) returns words minus the indexed word. # the special handling of nw.sep is to deal with the cases when # the index points to the first or last word. alias notword { if ([$0] > 0) { if (([$0] > 1) && ([$0] < rmatch($~ $1-))) { @ nw.sep = [ ] } { @ nw.sep = [] } @ function_return = [$(1-${[$0]-1})] ## [$nw.sep] ## [$(${[$0]+1}-)] } { @ function_return = [$1-] } } # If you want to look an array.. Type /show # Lists keys and contents ^alias show { if ( [$($0)] ) { echo $0 $($0) } foreach $0 ii { show $0.$ii } ^assign -ii } # push an item onto the head of a list # this only takes the name of the list instead of the variable itself. # examples. # /push list Item # or if (push(list Item)) { echo push sucessful } { echo push failed } # echo $list returns 'Item' alias push { if (![$1]) { @function_return = 0 } { eval @ $0 = [$1- $($0)];@function_return = 1} } # pop an item off a list. Specified with $pop(listname) # note there is no $ in front of listname. # examples. # /eval echo $pop(list) returns 'Item' and the list is shortened # push List2 $pop(List1) moves first item from List1 to List2 alias pop { @function_return = word(0 $($0)) eval @ $0 = notword(1 $($0)) } alias pluck { @ function_return = notword($match($1 $($0)) $($0)) }