( obvious-exits.muf, by Scotfox, 26-September-1993 )
( Originally by cknight@polyslo.calpoly.edu, jph@irie.ais.org, )
( pleiades@ucrmath.ucr.edu, and dragon@glia.biostr.washington.edu. )
 
( Usage: @succ here = @$exits optional-text-before-list )
 
( Example: @succ here = @$exits The sun is shining brightly. )
( When you look at the room, this gives: )
 
( Room Name )
( description )
( The sun is shining brightly. )
( [Obvious exits: north, south, east, west ] )
 
( @set an exit = Dark to hide it.  Only the first part of an exit's )
( name is used by this program -- 'one;two;three' appears as 'one'. )
( For mucks that don't allow players to set things dark, you can also )
( set a "dark" or a "_dark" property on the exit. )
 
$define tellme  me @ swap notify  $enddef
 
: list-exits ( first -- list-string )
    "" swap  ( list-string dbref )
    me @ "_prefs/obvexits/vertical" getpropstr if 
        trigger @ "exitlist_start" envpropstr swap pop
        dup strlen 0 = if pop "Obvious exits: " then
        rot strcat tellme
    then
    begin dup #-1 dbcmp not while
        dup "dark" flag? if next continue then  ( ignore it if it's dark )
        dup "dark" getpropstr if next continue then  ( allow "dark" prop too )
        dup "_dark" getpropstr if next continue then  ( also "_dark" prop )
        dup getlink dup ok? swap room? and not if
            next continue then  ( ignore it unless it goes somewhere )
 
        ( list-string dbref )
 
        dup name
        dup ";" instr dup if 1 - strcut pop else pop then  ( get 1st alias )
 
 me @ "_prefs/obvexits/vertical" getpropstr if
   tellme next continue
 then
 
        ( list-string dbref exitname )
 
        rot  ( dbref exitname list-string )
        dup "" strcmp if ", " strcat then  ( add comma if not first exit )
 
        swap strcat  ( dbref list-string )
 
        swap next repeat
    pop  ( list-string )
;
: obvious-exits
    dup if tellme then  ( header to obvious exits list, if any )
 
    trigger @ exits list-exits
    ( exitstring )
 
    me @ "_prefs/obvexits/vertical" getpropstr if
      exit  ( exit if we've already shown exits in vertical format )
    then
  
    dup "" strcmp if
        trigger @ "exitlist_start" envpropstr swap pop
        dup strlen 0 = if pop "[ Obvious exits: " then
        swap strcat
 
        trigger @ "exitlist_end" envpropstr swap pop
        dup strlen 0 = if pop " ]" then
        strcat
 
        tellme 
    then
;
