@prog cmd-@register 1 99999 d 1 i $define .tell me @ swap notify $enddef $define sls striplead $enddef $define sts striptail $enddef $define strip sls sts $enddef lvar regobj lvar regprop : split swap over over swap instr dup not if pop swap pop "" else 1 - strcut rot strlen strcut swap pop then ; : set_propref (d s d -- ) $ifdef __VERSION<Muck2.2fb5.0 intostr 0 addprop $else setprop $endif ; ( returns #-1 if prop not found. #-2 if has bad value. ) : get_propref (d s -- d) over over $ifdef __VERSION<Muck2.2fb5.0 getpropstr $else getprop $endif dup if dup string? if dup "#" 1 strncmp not if 1 strcut swap pop then dup number? if atoi dbref dup ok? if 3 pick 3 pick 3 pick set_propref else pop #-2 then else pop #-2 then else dup int? if dbref dup ok? if 3 pick 3 pick 3 pick set_propref else pop #-2 then then then dup dbref? not if pop #-2 then else pop #-1 then rot rot pop pop ; ( makes user readable string rep of registered prop ) : pretty_propref (d s -- s) over over get_propref dup if dup ok? if dup unparseobj over "_version" getpropstr dup if " Ver. " swap strcat strcat else pop then swap "_lib-version" getpropstr dup if " Lib.ver. " swap strcat strcat else pop then else pop "<garbage>" then over ": " strcat swap strcat regprop @ strlen strcut swap pop else pop "" then rot rot pop pop ; : list-props ( d s -- ) begin dup while dup strlen 1 - strcut dup "/" strcmp if strcat break else pop then repeat "/" strcat over swap nextprop begin dup while over over pretty_propref dup if " " swap strcat .tell else pop then over over propdir? if dup regprop @ strlen strcut swap pop " " swap strcat "/ (directory)" strcat .tell then over swap nextprop repeat pop pop ; : do-help "Syntaxes:" " The following prefixes set what the target object and the target propdir" " are. The default target propdir is \"_reg/\" and the default target" " object is #0." " #me" " Sets target object to you, and propdir to the default \"_reg/\"." " #prop <targobj>:<propdir>" " Sets target object to <targobj> and propdir to <propdir>." " The following are the command syntaxes" " @register [<prefix>]" " List all registered objects in the target propdir on target object." " @register [<prefix>] <subpropdir>" " List all registered objects in <subpropdir> in the target propdir." " @register [<prefix>] <object> = <name>" " Register <name> to <object> in the propdir on the target object." "Example: @register #prop here:_disconnect gen-sweeproom=cleanup" " This registers the program gen-sweeproom as 'cleanup' in the _disconnect" " propdir on the current room." 18 begin dup while dup 1 + rotate .tell 1 - repeat ; : cmd-@register "me" match me ! dup "#help" stringcmp not if do-help exit then sls dup tolower "#me" 3 strncmp not if " " split swap pop me @ regobj ! "_reg/" regprop ! else dup tolower "#prop" 5 strncmp not if " " split swap pop " " split swap ":" split (rest obj prop) swap dup not if pop "me" then dup "@" strcmp not if pop "#0" then match dup not if me @ "I don't see that target object here." notify pop pop pop exit then dup #-2 dbcmp if me @ "I don't know which target object you mean." notify pop pop pop exit then me @ over owner dbcmp me @ "wizard" flag? or not if me @ "Permission Denied." notify pop pop pop exit then regobj ! dup not if pop "/" then (if no propdir selected, use default) dup dup strlen 1 - strcut swap pop "/" strcmp if "/" strcat then (if doesn't end in /, append /) regprop ! else me @ "w" flag? not over "=" instr and if me @ "Permission denied." notify pop exit then #0 regobj ! "_reg/" regprop ! then then dup "=" instr not if "Registered objects on " regobj @ unparseobj strcat ":" strcat .tell regobj @ regprop @ rot strcat list-props "Done." .tell exit then "=" split strip swap strip match dup not if "I don't see that object here." .tell pop exit then dup #-2 dbcmp if "I don't know which object you mean." .tell pop exit then swap " " split if pop pop "You cannot have spaces in the registration name." .tell exit then regobj @ regprop @ 3 pick strcat pretty_propref dup if "Used to be registered as " regprop @ strcat swap strcat .tell else pop then regobj @ regprop @ 3 pick strcat 4 pick set_propref regobj @ regprop @ 3 pick strcat pretty_propref "Now registered as " regprop @ strcat swap strcat " on " strcat regobj @ unparseobj strcat .tell ; . c q @set cmd-@register=W #ifdef NEW @action @register;@registe;@regist;@regis;@regi;@reg=#0=tmp/exit1 @link $tmp/exit1=cmd-@register #endif