code: def main():
      
      arguments = docopt.docopt(__doc__, version=__version__)
      colorlogs()
      # Read input file file
  
  
      wrapper = BMIWrapper(
          engine=arguments['<engine>'],
          configfile=arguments['<config>'] or ''
      )
  
  
      # add logger if required
      if not arguments['--disable-logger']:
          logging.root.setLevel(logging.DEBUG)
          wrapper.set_logger(logging.root)
  
      with wrapper as model:
          # if siginfo is supported by OS (BSD)
          def handler(signum, frame):
              """report progress information"""
              t_start = model.get_start_time()
              t_end = model.get_end_time()
              t_current = model.get_current_time()
              total = (t_end - t_start)
              now = (t_current - t_start)
              if total > 0:
                  logging.info("progress: %s%%", 100.0 * now / total)
              else:
                  logging.info("progress: unknown")
  
          if hasattr(signal, 'SIGINFO'):
              # attach a siginfo handler (CTRL-t) to print progress
              signal.signal(signal.SIGINFO, handler)
  
          if arguments['--info']:
              logging.info("%s", trace(model))
          t_end = model.get_end_time()
          t = model.get_start_time()
          while t < t_end:
              model.update(-1)
              t = model.get_current_time()
          if arguments['--info']:
              logging.info("%s", trace(model))
docs: main bmi runner program