@verb #7171:"@sub* @subst*" any any any rd #7407 @program #7171:"@sub* @subst*" any any any $perm_utils:is_called_from(player, "my_huh") || raise(E_PERM) if (!player.programmer) return player:tell("Sorry, this is a programming verb. You need to be a programmer to use it.") endif if (verb in {"@sub", "@subst"}) substr = argstr else substr = tostr(verb[(`verb[1] == "@" ? verb[5..6] | verb[4..5] ! E_RANGE => ""' == "st" ? index(verb, "t") | index(verb, "b")) + 1..$], " ", argstr) endif if (rindex(substr, substr[1]) < 3) return player:tell("Malformed substitution. Suggested syntax: @subst/<find>/<replace>/<options>") elseif (length(subs = $string_utils:explode(substr, substr[1])) < 3) return player:tell("You must specify a line number or a range of lines. (eg: 2, 4-7, 1-$)") endif if (!(open = index(subs[3], "[")) || !(close = index(subs[3], "]")) || open > close) return player:tell("Malformed options. Use: lines[obj:verb]gc") elseif (!(vloc = $code_utils:parse_verbref(subs[3][open + 1..close - 1]))) return player:tell("Malformed verbname.") elseif (!valid(m = player:my_match_object(vloc[1])) || m:has_verb(vloc[2]) != {m}) return player:tell("That object does not have that verb.") elseif (!caller_perms().wizard && !player.wizard && !(player == (own = verb_info(m, vloc[2])[1]))) return player:tell("You don't have permission to edit that verb.") endif global = index(`subs[3][close + 1] ! E_RANGE => ""', "g") case = index(`subs[3][close + 1] ! E_RANGE => ""', "c") subs[3] = subs[3][1..open - 1] range = (i = index(subs[3], "-")) ? {subs[3][1..i - 1], subs[3][i + 1..$]} | {subs[3], subs[3]} range = {range[1] == "$" ? tostr(length(verb_code(m, vloc[2]))) | range[1], range[2] == "$" ? tostr(length(verb_code(m, vloc[2]))) | range[2]} if (tostr(toint(range[1])) != range[1] || tostr(toint(range[2])) != range[2]) return player:tell("From line ", range[1], " to line ", range[2], "???") endif "well, that's enough parsing for me. on to the actual substitution." vcode = newcode = verb_code(m, vloc[2]) suspend(0) range = {toint(range[1]), toint(range[2])} didsubs = 0 for x in [range[1]..range[2]] newcode[x] = strsub(vcode[x], subs[1], subs[2]) if (vcode[x] != newcode[x]) player:tell(x, " : ", newcode[x]) suspend(0) didsubs = 1 endif endfor didsubs || player:tell("Search string not found!") set_task_perms(player) if (ERR = set_verb_code(m, vloc[2], newcode)) player:tell({"The substitutions caused the following errors:", @ERR}) else player:tell("Verbcode compiled and written to ", m, ":", vloc[2]) endif "Last modified by Dax (#789) on Tue May 3 14:13:13 2005 MDT." .