text: "Collection of tools for displaying bit representation of numbers."""
  
  import StringIO
  
  
  def binary(n, width=None):
      """
      Return a list of (0|1)'s for the binary representation of n where n >= 0.
      If you specify a width, it must be > 0, otherwise it is ignored.  The list
      could be padded with 0 bits if width is specified.
      """
      l = []
      if width and width <= 0:
          width = None
      while n > 0:
          l.append(1 if n & 1 else 0)
          n = n >> 1
  
      if width:
          for i in range(width - len(l)):
              l.append(0)
  
      l.reverse()
      return l
  
  
  def twos_complement(n, width):
      """
      Return a list of (0|1)'s for the binary representation of a width-bit two's
      complement numeral system of an integer n which may be negative.
      """
      val = 2**(width - 1)
      if n >= 0:
          if n > (val - 1):
              return None
          # It is safe to represent n with width-bits.
          return binary(n, width)
  
      if n < 0:
          if abs(n) > val:
              return None
          # It is safe to represent n (a negative int) with width-bits.
          return binary(val * 2 - abs(n))
  
  # print binary(0xABCD)
  # [1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1]
  # print binary(0x1F, 8)
  # [0, 0, 0, 1, 1, 1, 1, 1]
  # print twos_complement(-5, 4)
  # [1, 0, 1, 1]
  # print twos_complement(7, 4)
  # [0, 1, 1, 1]
  # print binary(7)
  # [1, 1, 1]
  # print twos_complement(-5, 64)
  # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1]
  
  
  def positions(width):
      """Helper function returning a list describing the bit positions.
      Bit positions greater than 99 are truncated to 2 digits, for example,
      100 -> 00 and 127 -> 27."""
      return ['{0:2}'.format(i)[-2:] for i in reversed(range(width))]
  
  
  def utob(debugger, command_line, result, dict):
      """Convert the unsigned integer to print its binary representation.
      args[0] (mandatory) is the unsigned integer to be converted
      args[1] (optional) is the bit width of the binary representation
      args[2] (optional) if specified, turns on verbose printing"""
      args = command_line.split()
      try:
          n = int(args[0], 0)
          width = None
          if len(args) > 1:
              width = int(args[1], 0)
              if width < 0:
                  width = 0
      except:
          print utob.__doc__
          return
  
      if len(args) > 2:
          verbose = True
      else:
          verbose = False
  
      bits = binary(n, width)
      if not bits:
          print "insufficient width value: %d" % width
          return
      if verbose and width > 0:
          pos = positions(width)
          print ' ' + ' '.join(pos)
      print ' %s' % str(bits)
  
  
  def itob(debugger, command_line, result, dict):
      """Convert the integer to print its two's complement representation.
      args[0] (mandatory) is the integer to be converted
      args[1] (mandatory) is the bit width of the two's complement representation
      args[2] (optional) if specified, turns on verbose printing"""
      args = command_line.split()
      try:
          n = int(args[0], 0)
          width = int(args[1], 0)
          if width < 0:
              width = 0
      except:
          print itob.__doc__
          return
  
      if len(args) > 2:
          verbose = True
      else:
          verbose = False
  
      bits = twos_complement(n, width)
      if not bits:
          print "insufficient width value: %d" % width
          return
      if verbose and width > 0:
          pos = positions(width)
          print ' ' + ' '.join(pos)
      print ' %s' % str(bits)
  