@q @prog cmd-@archive 1 99999 d 1 i ( @const object=aefi ) ( @dig roomname=parent=regname ) ( @act exitname=source=regname ) ( @cre thingname=value=regname ) ( @reg object=regname ) $include $lib/strings $include $lib/match $include $lib/edit : show-help "Syntax: @archive <object>[=1acefil]" " @archive <object>=1 Archive only that object." " @archive <object>=a Archive all, regardless of owner. (wizards only)." " @archive <object>=c Don't archive contents." " @archive <object>=e Archive objects not in this room's environment." " @archive <object>=f Don't archive floater child rooms unless linked to." " @archive <object>=i Archive, including even globally registered objects." " @archive <object>=l Don't follow links or droptos in archiving." " @archive <object>=p Don't archive programs at all." "NOTE: Turn off your client's wordwrap before logging an @archive output." "Also, remove the 'X lines displayed.' line listed at the end of programs." 11 EDITdisplay ; lvar originalobj lvar here? lvar owned? lvar one? lvar nofloater? lvar nocontents? lvar nolinks? lvar noprogs? lvar playercnt lvar roomcnt lvar exitcnt lvar thingcnt lvar progcnt : clear-refnames ( -- ) me @ "_tempreg" remove_prop ; : get-refname (d -- s) me @ over dbcmp if pop "me" exit then #0 over dbcmp if pop "#0" exit then me @ "_tempreg/" rot int intostr strcat getpropstr dup if "$" swap strcat then ; : is-refname (d -- s) me @ "_tempreg/" rot int intostr strcat getpropstr not not ; : set-refname (d s -- ) me @ "_tempreg/" 4 rotate int intostr strcat rot 0 addprop ; : in-environ? (d -- i) begin dup while dup originalobj @ dbcmp if pop 1 exit then location repeat pop 0 ; : dump-registration-loop ( d d s -- ) begin over swap nextprop dup while over over getpropstr dup "#" 1 strncmp not if 1 strcut swap pop then dup not if pop "-1" then atoi dbref 4 pick dbcmp if "@register " 3 pick me @ dbcmp if "#me " strcat then 4 pick name strcat "=" strcat over 6 strcut swap pop strcat me @ swap notify then over over propdir? if 3 pick 3 pick 3 pick "/" strcat dump-registration-loop then repeat pop pop pop ; : dump-registration ( d d -- ) (searchforobj propsobj ) "/_reg/" dump-registration-loop ; : get-globalrefs-loop (d s -- ) begin over swap nextprop dup while over over getpropstr dup if dup "#" 1 strncmp not if 1 strcut swap pop then dup number? if atoi dbref over dup "/" instr strcut swap pop set-refname else pop then else pop then over over propdir? if over over "/" strcat get-globalrefs-loop then repeat pop pop ; : get-globrefs ( -- ) #0 "_reg/" get-globalrefs-loop ; : translate-lockstr (s -- s) "" swap dup "*UNLOCKED*" stringcmp not if pop pop "" exit then begin dup "#" instr over or while "#" .split rot rot strcat swap dup atoi intostr strlen strcut swap atoi dbref get-refname dup not if pop "(me&!me)" then rot swap strcat swap repeat strcat ; : dump-lock (d -- ) me @ "wizard" flag? if pop exit then dup "@/flk" getprop dup lock? not if pop pop exit then unparselock translate-lockstr "@flock " rot get-refname strcat "=" strcat swap strcat me @ swap notify 0 sleep ; : dump-props-loop (s d s -- ) (refname object propdir -- ) begin 0 sleep (refname object propdir -- ) begin over swap nextprop (refname object propname -- ) dup not if pop pop pop exit then "/" over strcat "/@" instr not me @ "wizard" flag? or until (refname object propname -- ) over over getprop (refname object propname propval -- ) dup string? if "/_/de:/_/sc:/_/fl:/_/dr" 3 pick tolower instr if (refname object propname propval -- ) dup "@" 1 strncmp not if (refname object propname propval -- ) 1 strcut dup number? if " " .split swap atoi dbref dup get-refname dup not if swap intostr then swap pop " " strcat swap strcat then strcat then then "@propset " 5 pick strcat "=str:" strcat 3 pick strcat ":" strcat swap strcat me @ swap notify else (not a string) dup int? if dup if "@propset " 5 pick strcat "=int:" strcat 3 pick strcat ":" strcat swap intostr strcat me @ swap notify else pop then else (not an int.) dup dbref? if dup get-refname dup not if "#" rot int intostr strcat then swap pop "@propset " 5 pick strcat "=dbref:" strcat 3 pick strcat ":" strcat swap strcat me @ swap notify else (not a dbref. Must be a lock. Fun fun parse time.) (refname object propname propval -- ) unparselock translate-lockstr "@propset " 5 pick strcat "=lock:" strcat 3 pick strcat ":" strcat swap strcat me @ swap notify then (dbref?) then (int?) then (string?) over over propdir? if 3 pick 3 pick 3 pick "/" strcat dump-props-loop then repeat ; : dump-props (d -- ) (object -- ) dup get-refname swap "/" dump-props-loop ; : dump-flags (d -- ) dup unparseobj dup "#" rinstr strcut swap pop dup strlen 1 - strcut pop dup atoi intostr strlen strcut swap pop dup if 1 strcut "RPEFM" 3 pick instr if swap pop "" swap then strcat then begin dup while dup "M" 1 strncmp not if 1 strcut swap pop continue then "@set " 3 pick get-refname strcat "=" strcat swap 1 strcut rot rot strcat me @ swap notify repeat pop pop 0 sleep ; : dump-obj (d -- ) 0 sleep dup ok? not if pop exit then one? @ if dup originalobj @ dbcmp not if pop exit then then owned? @ if dup owner originalobj @ owner dbcmp not if pop exit then then here? @ if dup in-environ? not if pop exit then then noprogs? @ if dup program? if pop exit then then dup is-refname if pop exit then dup room? if nolinks? @ not if dup getlink dump-obj then dup location dump-obj roomcnt @ 1 + roomcnt ! "tmp/room" roomcnt @ intostr strcat (dbref regname) "@dig " 3 pick name strcat "=" strcat 3 pick location get-refname strcat "=" strcat over strcat me @ swap notify over swap set-refname dup getlink if "@link " over get-refname strcat "=" strcat over getlink get-refname strcat me @ swap notify then dup dump-lock dup dump-flags dup dump-props nocontents? @ not if dup contents begin dup while nofloater? @ if dup room? if next continue then then dup dump-obj next repeat pop then dup exits begin dup while dup dump-obj (dump exit) next repeat pop pop exit then dup player? if ( showplayers? @ not if pop exit then ) dup originalobj @ dbcmp if nolinks? @ not if dup getlink dump-obj (dump room or object linked to) then playercnt @ 1 + playercnt ! "tmp/player" playercnt @ intostr strcat "@pcreate " 3 pick name strcat "=<password>" strcat me @ swap notify "@register #me *" 3 pick name strcat "=" strcat over strcat me @ swap notify over swap set-refname "@link " over get-refname strcat "=" strcat over getlink get-refname strcat me @ swap notify dup dump-lock dup dump-flags dup dump-props nocontents? @ not if dup contents begin dup while dup dump-obj (dump thing contents) next repeat pop then dup exits begin dup while dup dump-obj (dump exit) next repeat pop then pop exit then dup thing? if nolinks? @ not if dup getlink dump-obj (dump room or object linked to) then thingcnt @ 1 + thingcnt ! "tmp/thing" thingcnt @ intostr strcat (dbref refname) "@create " 3 pick name strcat "=" strcat 3 pick pennies 1 + 5 * intostr strcat "=" strcat over strcat me @ swap notify over swap set-refname "@tel " over get-refname strcat "=" strcat over location get-refname strcat me @ swap notify "@link " over get-refname strcat "=" strcat over getlink get-refname strcat me @ swap notify dup dump-lock dup dump-flags dup dump-props nocontents? @ not if dup contents begin dup while dup dump-obj (dump thing contents) next repeat pop then dup exits begin dup while dup dump-obj (dump exit) next repeat pop pop exit then dup exit? if nolinks? @ not if dup getlink dump-obj (dump room or object linked to) then exitcnt @ 1 + exitcnt ! "tmp/exit" exitcnt @ intostr strcat (dbref refname) "@action " 3 pick name strcat "=" strcat 3 pick location get-refname strcat "=" strcat over strcat me @ swap notify over swap set-refname "@link " over get-refname strcat "=" strcat over getlink get-refname strcat me @ swap notify dup dump-lock dup dump-flags dup dump-props pop exit then dup program? if progcnt @ 1 + progcnt ! "tmp/prog" progcnt @ intostr strcat (dbref refname) "@prog " 3 pick name strcat me @ swap notify me @ "1 99999 d" notify me @ "1 i" notify me @ "@list #" 4 pick intostr strcat force (dbref refname) me @ "." notify me @ "c" notify me @ "q" notify (dbref refname) over #0 dump-registration over me @ dump-registration over name "@register #me " swap strcat "=" strcat over strcat me @ swap notify over swap set-refname dup dump-lock dup dump-flags dup dump-props pop exit then ; : archiver "me" match me ! clear-refnames "=" .split strip swap strip dup not if pop pop show-help exit then .match_controlled dup not if pop pop exit then swap tolower me @ "wizard" flag? not if "" "a" subst then dup "e" instr not here? ! dup "a" instr not owned? ! dup "c" instr nocontents? ! dup "f" instr nofloater? ! dup "l" instr nolinks? ! dup "1" instr one? ! dup "p" instr noprogs? ! "i" instr not if get-globrefs then dup originalobj ! me @ "[Start Dump]" notify dump-obj me @ "[End Dump]" notify clear-refnames ; . c q @register #me cmd-@archive=tmp/prog1 @set $tmp/prog1=W