text: #
  # txt2las.py
  #
  # (c) 2013, martin isenburg - http://rapidlasso.com
  #     rapidlasso GmbH - fast tools to catch reality
  #
  # uses txt2las.exe to turn an ASCII file into a LAS file
  #
  # ASCII input:   TXT
  # LiDAR output:  LAS/LAZ/BIN/TXT
  #
  # for licensing see http://lastools.org/LICENSE.txt
  #
  
  import sys, os, arcgisscripting, subprocess
  
  def check_output(command,console):
      if console == True:
          process = subprocess.Popen(command)
      else:
          process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
      output,error = process.communicate()
      returncode = process.poll()
      return returncode,output 
  
  ### create the geoprocessor object
  gp = arcgisscripting.create(9.3)
  
  ### report that something is happening
  gp.AddMessage("Starting txt2las ...")
  
  ### get number of arguments
  argc = len(sys.argv)
  
  ### report arguments (for debug)
  #gp.AddMessage("Arguments:")
  #for i in range(0, argc):
  #    gp.AddMessage("[" + str(i) + "]" + sys.argv[i])
  
  ### get the path to LAStools
  lastools_path = os.path.dirname(os.path.dirname(os.path.dirname(sys.argv[0])))
  
  ### make sure the path does not contain spaces
  if lastools_path.count(" ") > 0:
      gp.AddMessage("Error. Path to .\\lastools installation contains spaces.")
      gp.AddMessage("This does not work: " + lastools_path)
      gp.AddMessage("This would work:    C:\\software\\lastools")
      sys.exit(1)    
  
  ### complete the path to where the LAStools executables are
  lastools_path = lastools_path + "\\bin"
  
  ### check if path exists
  if os.path.exists(lastools_path) == False:
      gp.AddMessage("Cannot find .\\lastools\\bin at " + lastools_path)
      sys.exit(1)
  else:
      gp.AddMessage("Found " + lastools_path + " ...")
  
  ### create the full path to the txt2las executable
  txt2las_path = lastools_path+"\\txt2las.exe"
  
  ### check if executable exists
  if os.path.exists(lastools_path) == False:
      gp.AddMessage("Cannot find txt2las.exe at " + txt2las_path)
      sys.exit(1)
  else:
      gp.AddMessage("Found " + txt2las_path + " ...")
  
  ### create the command string for txt2las.exe
  command = ['"'+txt2las_path+'"']
  
  ### maybe use '-verbose' option
  if sys.argv[argc-1] == "true":
      command.append("-v")
  
  ### add input LiDAR
  command.append("-i")
  command.append('"'+sys.argv[1]+'"')
  
  ### maybe use a user-defined parse string
  if sys.argv[2] != "xyz":
      command.append("-parse")
      command.append(sys.argv[2])
  
  ### maybe skip a few lines
  if sys.argv[3] != "0":
      command.append("-skip")
      command.append(sys.argv[3])
  
  ### set LAS version
  if sys.argv[4] != "1.2":
      command.append("-set_version")
      command.append(sys.argv[4])
  
  ### this is where the output arguments start
  out = 5
  
  ### maybe an output format was selected
  if sys.argv[out] != "#":
      if sys.argv[out] == "las":
          command.append("-olas")
      elif sys.argv[out] == "laz":
          command.append("-olaz")
      elif sys.argv[out] == "bin":
          command.append("-obin")
      elif sys.argv[out] == "xyz":
          command.append("-otxt")
      elif sys.argv[out] == "xyzi":
          command.append("-otxt")
          command.append("-oparse")
          command.append("xyzi")
      elif sys.argv[out] == "txyzi":
          command.append("-otxt")
          command.append("-oparse")
          command.append("txyzi")
  
  ### maybe an output file name was selected
  if sys.argv[out+1] != "#":
      command.append("-o")
      command.append('"'+sys.argv[out+1]+'"')
  
  ### maybe an output directory was selected
  if sys.argv[out+2] != "#":
      command.append("-odir")
      command.append('"'+sys.argv[out+2]+'"')
  
  ### maybe an output appendix was selected
  if sys.argv[out+3] != "#":
      command.append("-odix")
      command.append('"'+sys.argv[out+3]+'"')
  
  ### maybe there are additional command-line options
  if sys.argv[out+4] != "#":
      additional_options = sys.argv[out+4].split()
      for option in additional_options:
          command.append(option)
  
  ### report command string
  gp.AddMessage("LAStools command line:")
  command_length = len(command)
  command_string = str(command[0])
  command[0] = command[0].strip('"')
  for i in range(1, command_length):
      command_string = command_string + " " + str(command[i])
      command[i] = command[i].strip('"')
  gp.AddMessage(command_string)
  
  ### run command
  returncode,output = check_output(command, False)
  
  ### report output of txt2las
  gp.AddMessage(str(output))
  
  ### check return code
  if returncode != 0:
      gp.AddMessage("Error. txt2las failed.")
      sys.exit(1)
  
  ### report happy end
  gp.AddMessage("Success. txt2las done.")
  