docs: def display(obj, skiphidden=True, **printargs):
      """Print a view of obj, where obj is either a ctypes-derived class or an
      instance of such a class.  Any additional keyword arguments are passed
      directly to the print function.
      
      This is mostly useful to introspect structures from an interactive session.
      """
      
      top = findnode(obj)
  
      #-------------------------------------------------------------------
      # Iterate through the entire structure turning all the nodes into
      # tuples of strings for display.
      
      maxhex = len(hex(ctypes.sizeof(top.type))) - 2
      def addrformat(addr):
          if isinstance(addr, int):
              return "0x{0:0{1}X}".format(addr, maxhex)
          else:
              intpart = int(addr)
              fracbits = int((addr - intpart) * 8)
              return "0x{0:0{1}X}'{2}".format(intpart, maxhex, fracbits)
      
      def formatval(here):
          if isinstance(here, BoundSimpleNode):
              return "{0}({1})".format(here.type.__name__, here.value)
          else:
              return str(here.value)
  
      if isinstance(top, UnboundNode):
          headers = ['Path', 'Addr', 'Type']
          results = [
              (('  ' * n.depth) + n.name, addrformat(n.baseoffset), n.type.__name__)
                  for n in walknode(top, skiphidden)
          ]
      else:
          headers = ['Path', 'Addr', 'Value']
          results = [
              (('  ' * n.depth) + n.name, addrformat(n.baseoffset), formatval(n))
                  for n in walknode(top, skiphidden)
          ]
          
      #-------------------------------------------------------------------
      # Determine the maximum width of the text in each column, make the
      # column always that wide.
          
      widths = [
          max(max(len(d[col]) for d in results), len(h))
              for col, h in enumerate(headers)
      ]
      
      #-------------------------------------------------------------------
      # Print out the tabular data.
      
      def lp(args):
          print(*args, **printargs)
          
      lp(d.center(w) for d, w in zip(headers, widths))
      lp('-' * w for w in widths)
      for r in results:
          lp(d.ljust(w) for d, w in zip(r, widths))