text: 
  from .DirectGlobals import *
  
  # Routines to adjust values
  def ROUND_TO(value, divisor):
      return round(value/float(divisor)) * divisor
  
  def ROUND_INT(val):
      return int(round(val))
  
  def CLAMP(val, minVal, maxVal):
      return min(max(val, minVal), maxVal)
  
  # Create a tk compatible color string
  def getTkColorString(color):
      """
      Print out a Tk compatible version of a color string
      """
      def toHex(intVal):
          val = int(round(intVal))
          if val < 16:
              return "0" + hex(val)[2:]
          else:
              return hex(val)[2:]
      r = toHex(color[0])
      g = toHex(color[1])
      b = toHex(color[2])
      return "#" + r + g + b
  
  ## Background Color ##
  def lerpBackgroundColor(r, g, b, duration):
      """
      Function to lerp background color to a new value
      """
      def lerpColor(state):
          dt = globalClock.getDt()
          state.time += dt
          sf = state.time / state.duration
          if sf >= 1.0:
              base.setBackgroundColor(state.ec[0], state.ec[1], state.ec[2])
              return Task.done
          else:
              r = sf * state.ec[0] + (1 - sf) * state.sc[0]
              g = sf * state.ec[1] + (1 - sf) * state.sc[1]
              b = sf * state.ec[2] + (1 - sf) * state.sc[2]
              base.setBackgroundColor(r, g, b)
              return Task.cont
      taskMgr.remove('lerpBackgroundColor')
      t = taskMgr.add(lerpColor, 'lerpBackgroundColor')
      t.time = 0.0
      t.duration = duration
      t.sc = base.getBackgroundColor()
      t.ec = VBase4(r, g, b, 1)
  
  # Set direct drawing style for an object
  # Never light object or draw in wireframe
  def useDirectRenderStyle(nodePath, priority = 0):
      """
      Function to force a node path to use direct render style:
      no lighting, and no wireframe
      """
      nodePath.setLightOff(priority)
      nodePath.setRenderModeFilled()
  
  # File data util
  def getFileData(filename, separator = ','):
      """
      Open the specified file and strip out unwanted whitespace and
      empty lines.  Return file as list of lists, one file line per element,
      list elements based upon separator
      """
      f = open(filename.toOsSpecific(), 'r')
      rawData = f.readlines()
      f.close()
      fileData = []
      for line in rawData:
          # First strip whitespace from both ends of line
          l = line.strip()
          if l:
              # If its a valid line, split on separator and
              # strip leading/trailing whitespace from each element
              data = [s.strip() for s in l.split(separator)]
              fileData.append(data)
      return fileData
  
  