8 1 75 45 47 8 level (3) 8 0 0 5 . owner (#1) 8 0 0 5 . pubread (1) 8 0 0 5 . pubwrite (0) 8 0 0 5 . fertile (1) 8 0 0 5 . name ("Generic Programmer") 8 0 0 5 . description ("This is a programmer of the generic sort.") 8 0 0 5 . contents (()) 8 0 0 5 . 10 @show (if (nil? dobj) (echo "I don't see " dobjstr " here.") (do (echo "Object ID: " dobj) (echo "Name: " (getprop dobj "name" "No name")) (echo "Parent: " ($o (parent dobj))) (echo "Owner: " dobj.owner) (echo "Verb definitions: ") (map (lambda (verb) (echo " " verb)) (verbs dobj)) (echo "Properties: ") (map (lambda (prop) (echo " " prop ": " (getprop dobj prop))) (#0:all-props dobj)))) . 7 0 oAny pAny oAny 7 . @verbs (if (= 0 (len argstr)) (caller:tell "Syntax: " verb " obj") (if (nil? dobj) (caller:tell "I don't see " dobj " around here.") (let ((verb-list (verbs dobj)) (num-verbs (len verb-list))) (do (caller:tell "Showing verbs for " ($o dobj) ":") (caller:tell "ID Names Arguments") (caller:tell "--- ------------------------- ----------------") (map (lambda (idx) (echo (fit (cat ($ idx) ") ") 5) (fit (get verb-list idx) 25) " " ($verbutils:get-verb-argstr dobj idx))) (range 0 (- num-verbs 1))))))) . 8 0 oAny pNone oNone 7 . @list (if (= 0 (len args)) (caller:tell "Syntax: @list obj:verb [tags] [no-line-numbers]") (let ((verb-str (get args 0)) (rest-args (slice args 1)) (show-tags? (< -1 (in rest-args "tags"))) (show-line-numbers? (= -1 (in rest-args "no-line-numbers"))) (allow-ancestors? (= -1 (in rest-args "no-ancestors"))) (verb-loc ($verbutils:parse-verbstr verb-str allow-ancestors?))) (cond ((istype verb-loc "str") (caller:tell verb-loc)) ((istype verb-loc "list") (let ((obj (get verb-loc 0)) (vidx (get verb-loc 1)) (original-object (get verb-loc 2)) (vname (get (verbs obj) vidx))) (do (if (not (= obj original-object)) (caller:tell "Verb \"" vname "\" not defined on " ($o original-object) " but rather on " ($o obj) ".") 0) (if show-tags? (caller:tell "{verbcode}") 0) (caller:tell (getverbcode obj vidx)) (if show-tags? (caller:tell "{/verbcode}") 0)))) ((caller:tell "Something went terribly wrong. ($verbutils:parse-verbstr r eturned " verb-loc " which was of unexpected type."))))) . 7 0 oAny pAny oAny 5 . @vedit (let ((verb-to-edit ($verbutils:parse-verbstr argstr))) (cond ((istype verb-to-edit "str") (caller:tell verb-to-edit)) ((istype verb-to-edit "list") (let ((url ($editor:edit verb-to-edit))) (caller:tell (cat "Go to " url " to edit the verb.")))) ((caller:tell "Something has gone very wrong.")))) . 7 0 oAny pAny oAny 5 . @program (if (= 0 (len argstr)) (caller:tell "Syntax: @program obj:verb") ;; The second argument (0) means we only want verbs defined ;; on the object, not on its ancestors (let ((verb-loc ($verbutils:parse-verbstr argstr 0))) (cond ((istype verb-loc "str") (caller:tell verb-loc)) ((istype verb-loc "list") (let ((code (caller:read-till-dot))) (do (setverbcode (get verb-loc 0) (get verb-loc 1) code) (caller:tell "Verb edited successfully!")))) ((caller:tell "Something has gone terribly wrong."))))) . 7 0 oAny pAny oAny 5 . @verb (if (= (len args) 0) (caller:tell "Syntax: @verb obj:new-verb-name") (let ((raw-parse ($verbutils:parse-verbstr-plumbing argstr)) (result-code (get raw-parse 0))) (cond ((= result-code 1) (caller:tell "Invalid verb string. Use \"obj:verb\"")) ((= result-code 2) (caller:tell "The object you specified was not found.")) ((= result-code 4) (caller:tell "Malformed argspec. Example: (any,to,this)")) ((= result-code 5) (caller:tell "Invalid argspec: " (get raw-parse 5))) ((let ((obj-defined-on (get raw-parse 1)) (obj (get raw-parse 3)) (verb-ref (get raw-parse 4)) (arg-spec (get raw-parse 5))) (do (if (= result-code 0) (if (= obj-defined-on obj) (caller:tell "Warning: " ($o obj) "already defines" "a verb with that name") 0) 0) (addverb obj verb-ref) (if (nil? arg-spec) 0 (setverbargs obj verb-ref arg-spec)) (echo "Added verb called \"" verb-ref "\" to " ($o obj)))))))) . 7 0 oAny pAny oAny 5 . @mvverb (if (not (= (len args) 2)) (caller:tell "Syntax: " verb " obj1:verb obj2") (let ((verb-str (get args 0)) (verb-loc ($verbutils:parse-verbstr verb-str))) (cond ((istype verb-loc "str") (caller:tell verb-loc)) ((istype verb-loc "list") (let ((obj1 (get verb-loc 0)) (vidx (get verb-loc 1)) (vname (get (verbs obj1) vidx)) (obj2-ref (get args 1)) (obj2 (get (query obj2-ref) 0 nil))) (if (nil? obj2) (caller:tell "I don't see " obj2-ref " here.") (do ($verbutils:move-verb obj1 vname obj2) (echo "Successfully moved " ($o obj1) ":" vname " to " ($o obj2) "."))))) ((echo "Something truly terrible has happened."))))) . 7 0 oAny pAny oAny 5 . @prop (if (= 0 (len args)) (caller:tell "Syntax: @prop obj.prop") (let ((objprop-ref (get args 0)) (parsed ($verbutils:parse-propstr objprop-ref))) (cond ((istype parsed "str") (caller:tell parsed)) ; string means error ((istype parsed "list") (let ((obj (get parsed 0)) (prop-ref (get parsed 1))) (if (obj:has-prop? prop-ref) (caller:tell obj "." prop-ref " = " (getprop obj prop-ref)) (caller:tell ($o obj) " does not define a property " "\"" prop-ref "\".")))) ((caller:tell "Something terrible has happened. " "$verbutils:parse-propstr has returned a value of " "invalid type: " parsed))))) . 7 0 oAny pAny oAny 5 . eval (echo "=> " (eval argstr)) . 7 0 oAny pAny oAny 5 . @create ;;; Syntax: @create named (if (not (= (len args) 3)) (do (caller:tell "Syntax: @create named ") (caller:tell "If more than one word, new-name must be in quotes")) (let ((parent-str (get args 0)) (parent-query (query parent-str)) (parent-query-len (len parent-query)) (new-name (get args 2))) (cond ((= 0 parent-query-len) (caller:tell "I can't see a " parent-query " here.")) ((> 1 parent-query-len) (caller:tell "Ambiguous query: " parent-query ".")) ((let ((parent-obj (get parent-query 0)) (child (create parent-obj))) (do (setprop child "name" new-name) (setprop child "aliases" (setadd child.aliases new-name)) (setprop child "description" new-name) (move child caller) (caller:tell "Created child of " ($o parent-obj) ", " ($o child)))))))) . 7 0 oAny pAny oAny 5 .