@q @prog lib-mesg 1 99999 d 1 i ( **** Message Object -- MSG- **** A message is a set of elements with a count and an information string, stored in properties. base is a string containing the name of the message. itemnum is the number of an item within a message. itemstr is a single item's string. infostr is the messages information string. {strrange} is a string range that is all the elements of the message with an integer count. MSG-destroy [base dbref -- ] Clears and removes the message. MSG-create [{strrange} infostr base dbref -- ] Create a new message with the given items and info string on the given object with the given name. MSG-count [base dbref -- count] Returns how many items are in the given message. MSG-info [base dbref -- infostr] Returns the information string for the given message. MSG-setinfo [infostr base dbref -- ] Sets the information string on an existing message. MSG-message [base dbref -- {strrange}] Returns the items of a message as a range on the stack. MSG-item [itemnum base dbref -- itemstr] Returns the given message item from the message. MSG-setitem [itemstr itemnum base dbref -- ] Sets the specified message item to the given string. MSG-insitem [itemstr itemnum base dbref -- ] Inserts a new message item into the message at the given point. MSG-append [itemstr base dbref -- ] Appends a message item to the given message. MSG-delitem [itemnum base dbref -- ] Deletes the specified message item from the given message. Message data type: Base# Count of Message Items Base#/X Message Items Base#/i Info String ) ( $def the following if your muck uses the new style propdirized lists ) ( ie: listname#/1:line one listename#/2:line two etc. ) $def SLASHED_LISTS $include $lib/props $include $lib/lmgr : MSG-destroy (base dbref -- ) $ifdef SLASHED_LISTS over over swap "#/i" strcat remove_prop $else swap "/" strcat over over "i" strcat remove_prop swap $endif LMGR-deletelist ; : MSG-setinfo (infostr base dbref -- ) swap $ifdef SLASHED_LISTS "#" strcat $endif "/i" strcat rot setpropstr ; : MSG-create ({strrange} infostr base dbref -- ) over over MSG-destroy rot 3 pick 3 pick MSG-setinfo ({strrange} base dbref) 1 rot rot $ifndef SLASHED_LISTS swap "/" strcat swap $endif LMGR-putrange ; : MSG-count (base dbref -- count) $ifndef SLASHED_LISTS swap "/" strcat swap over over LMGR-getcount dup if rot rot pop pop exit else pop then $endif LMGR-getcount ; : MSG-message (base dbref -- {strrange}) $ifndef SLASHED_LISTS swap "/" strcat swap over over lmgr-getlist dup if dup 2 + rotate pop dup 2 + rotate pop exit else pop then $endif LMGR-getlist ; : safeclear (d s -- ) over over propdir? if over over "" -1 addprop "" 0 addprop else remove_prop then ; : MSG-clearoldinfo (base dbref -- ) swap $ifdef SLASHED_LISTS over over "#/i" strcat safeclear $else "/i" strcat safeclear $endif ; : MSG-oldinfo (base dbref -- infostr) swap "/i" strcat getpropstr ; : MSG-newinfo (base dbref -- infostr) swap "#/i" strcat getpropstr ; : convert-info (base dbref value -- ) 3 pick 3 pick MSG-clearoldinfo rot rot MSG-setinfo ; : MSG-info (base dbref -- infostr) $ifdef SLASHED_LISTS over over MSG-newinfo dup if rot rot pop pop exit then pop over over MSG-oldinfo dup if dup -4 rotate convert-info exit then $else over over MSG-oldinfo dup if rot rot pop pop exit then pop over over MSG-newinfo dup if dup -4 rotate convert-info exit then $endif pop pop pop "" ; : MSG-item (itemnum base dbref -- itemstr) $ifndef SLASHED_LISTS 3 pick 3 pick "/" strcat 3 pick LMGR-getelem dup if -4 rotate pop pop pop exit else pop then $endif LMGR-getelem ; : MSG-setitem (itemstr itemnum base dbref -- ) $ifndef SLASHED_LISTS swap "/" strcat swap $endif LMGR-putelem ; : MSG-insitem (itemstr itemnum base dbref -- ) $ifndef SLASHED_LISTS swap "/" strcat swap $endif 1 -4 rotate LMGR-insertrange ; : MSG-append (itemstr base dbref -- ) $ifndef SLASHED_LISTS swap "/" strcat swap $endif over over LMGR-getcount 1 + rot rot LMGR-putelem ; : MSG-delitem (itemnum base dbref -- ) $ifndef SLASHED_LISTS swap "/" strcat swap $endif 1 -4 rotate LMGR-deleterange ; PUBLIC MSG-destroy PUBLIC MSG-create PUBLIC MSG-count PUBLIC MSG-info PUBLIC MSG-setinfo PUBLIC MSG-message PUBLIC MSG-item PUBLIC MSG-setitem PUBLIC MSG-insitem PUBLIC MSG-append PUBLIC MSG-delitem . c q @register lib-mesg=lib/mesg @register #me lib-mesg=tmp/prog1 @set $tmp/prog1=L @set $tmp/prog1=/_/de:A scroll containing a spell called lib-mesg @set $tmp/prog1=/_defs/MSG-append:"$lib/mesg" match "MSG-append" call @set $tmp/prog1=/_defs/MSG-count:"$lib/mesg" match "MSG-count" call @set $tmp/prog1=/_defs/MSG-create:"$lib/mesg" match "MSG-create" call @set $tmp/prog1=/_defs/MSG-delitem:"$lib/mesg" match "MSG-delitem" call @set $tmp/prog1=/_defs/MSG-destroy:"$lib/mesg" match "MSG-destroy" call @set $tmp/prog1=/_defs/MSG-info:"$lib/mesg" match "MSG-info" call @set $tmp/prog1=/_defs/MSG-insitem:"$lib/mesg" match "MSG-insitem" call @set $tmp/prog1=/_defs/MSG-item:"$lib/mesg" match "MSG-item" call @set $tmp/prog1=/_defs/MSG-message:"$lib/mesg" match "MSG-message" call @set $tmp/prog1=/_defs/MSG-setinfo:"$lib/mesg" match "MSG-setinfo" call @set $tmp/prog1=/_defs/MSG-setitem:"$lib/mesg" match "MSG-setitem" call @set $tmp/prog1=/_docs:@list $lib/mesg=1-50