@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