Switch to edit mode.
Name(s): load_verb1: set_task_perms(caller_perms())
2: {o, v, xml} = args
3: xml = $xml:parse(xml)
4: xml[1] != "moo_verb" && raise(E_INVARG, "start tag is not <moo_verb>")
5: flags = ""
6: perms = caller_perms().wizard ? this.mortal_perms | caller_perms()
7: for x in (xml[3])
8: if (x[1] == "wizardly" && caller_perms().wizard)
9: perms = this.wizard_perms
10: elseif (x[1] == "readable")
11: flags = tostr(flags, "r")
12: elseif (x[1] == "executable")
13: flags = tostr(flags, "x")
14: elseif (x[1] == "debug")
15: flags = tostr(flags, "d")
16: elseif (x[1] == "overridable")
17: flags = tostr(flags, "o")
18: elseif (x[1] == "writable")
19: flags = tostr(flags, "w")
20: elseif (x[1] == "dobj")
21: d = $xml:strip_whitespace(x[3][1])
22: elseif (x[1] == "prep")
23: p = $xml:strip_whitespace(x[3][1])
24: elseif (x[1] == "iobj")
25: i = $xml:strip_whitespace(x[3][1])
26: elseif (x[1] == "code")
27: code = $string_utils:explode(x[3][1], "/*-")
28: endif
29: endfor
30: vname = v
31: if ((v = vname in verbs(o)) || `verb_info(o, vname) ! E_VERBNF')
32: set_verb_info(o, v || vname, {caller_perms(), flags, vname})
33: set_verb_args(o, v || vname, {d, p, i})
34: else
35: add_verb(o, {caller_perms(), flags, vname}, {d, p, i})
36: v = length(verbs(o))
37: endif
38: ERR = set_verb_code(o, v || vname, code)
39: return ERR || v in verbs(o)
40: "Last modified by manta (#7165) on Fri Oct 12 13:42:18 2001 MDT."