code: def value_str(sc):
      
      if sc.type in (STRING, INT, HEX):
          return "({})".format(sc.str_value)
  
      # BOOL or TRISTATE
  
      # The choice mode is an upper bound on the visibility of choice symbols, so
      # we can check the choice symbols' own visibility to see if the choice is
      # in y mode
      if isinstance(sc, Symbol) and sc.choice and sc.visibility == 2:
          # For choices in y mode, print '-->' next to the selected symbol
          return "-->" if sc.choice.selection is sc else "   "
  
      tri_val_str = (" ", "M", "*")[sc.tri_value]
  
      if len(sc.assignable) == 1:
          # Pinned to a single value
          return "-{}-".format(tri_val_str)
  
      if sc.type == BOOL:
          return "[{}]".format(tri_val_str)
  
      if sc.type == TRISTATE:
          if sc.assignable == (1, 2):
              # m and y available
              return "{" + tri_val_str + "}"  # Gets a bit confusing with .format()
          return "<{}>".format(tri_val_str)
docs: Returns the value part ("[*]", "<M>", "(foo)" etc.) of a menu entry.
  
      sc: Symbol or Choice.