code: def unpack_types(types, args, argnames, major):
      
      if len(types) > 0:
          multiple = types[-1]._multiple
      else:
          multiple = False
  
      if len(types) < len(args) and not multiple:
          raise FailReply("Too many parameters given.")
  
      # Wrap the types in parameter objects
      params = []
      for i, kattype in enumerate(types):
          name = ""
          if i < len(argnames):
              name = argnames[i]
          params.append(Parameter(i+1, name, kattype, major))
  
      if len(args) > len(types) and multiple:
          for i in range(len(types), len(args)):
              params.append(Parameter(i+1, name, kattype, major))
  
      # if len(args) < len(types) this passes in None for missing args
      return map(lambda param, arg: param.unpack(arg), params, args)
docs: Parse arguments according to types list.
  
      Parameters
      ----------
      types : list of kattypes
          The types of the arguments (in order).
      args : list of strings
          The arguments to parse.
      argnames : list of strings
          The names of the arguments.
      major : integer
          Major version of KATCP to use when packing types