@prog cmd-lsprop
1 99999 d
1 i
( cmd-lsprop - display all props on an object, or in subdirectories on
an object, that match the given wildcard expression.
)
$include $lib/match
$include $lib/strings
lvar propcount
: showprop (d s -- )
over over getpropstr dup if
": (string) " swap strcat
else
pop over over getpropval dup if
": (integer) " swap intostr strcat
else
pop ": (no value)"
then
then
3 pick 3 pick propdir? if "/" else "" then
3 pick swap strcat swap strcat
me @ swap notify
propcount @ 1 + propcount !
;
: listprops (s d s -- ) (smatchstr objref startprop)
begin
begin
over swap nextprop
dup if
(if player isn't wizard, skip @props)
dup "/@" instr if
me @ "wizard" flag? not if continue then
then
then
1 until
dup while (exit if we're done with this propdir.)
(search contents of sub-propdirs for matches)
over over propdir? if
3 pick 3 pick 3 pick "/" strcat
listprops
then
(if prop doesn't match, ignore it)
over over propdir? if "/" else "" then
over swap strcat 4 pick smatch not if continue then
showprop
repeat
pop pop pop
;
: plist (s -- )
0 propcount !
"=" .split strip swap strip
.match_controlled dup not if pop exit then
swap "*" strcat
dup "/" 1 strncmp if "/" swap strcat then
swap "/" listprops
propcount @ intostr " properties listed." strcat
me @ swap notify
;
.
c
q
@set cmd-lsprop=w
#ifdef NEW
@action lsprop;lsp=#0=tmp/exit1
@link $tmp/exit1=cmd-lsprop
#endif