<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def main():
 """ NAME download_magic.py DESCRIPTION unpacks a magic formatted smartbook .txt file from the MagIC database into the tab delimited MagIC format txt files for use with the MagIC-Py programs. SYNTAX download_magic.py command line options] INPUT takes either the upload.txt file created by upload_magic.py or a file downloaded from the MagIC database (http://earthref.org/MagIC) OPTIONS -h prints help message and quits -i allows interactive entry of filename -f FILE specifies input file name -sep write location data to separate subdirectories (Location_*), (default False) -O do not overwrite duplicate Location_* directories while downloading -DM data model (2 or 3, default 3) """

    if '-h' in sys.argv:
        print(main.__doc__)
        sys.exit()
    if '-WD' in sys.argv:
        ind=sys.argv.index('-WD')
        dir_path=sys.argv[ind+1]
    # interactive entry
    if '-i' in sys.argv:
        infile=input("Magic txt file for unpacking? ")
        dir_path = '.'
        input_dir_path = '.'
    # non-interactive
    else:
        infile = pmag.get_named_arg("-f", reqd=True)
        # if -O flag is present, overwrite is False
        overwrite = pmag.get_flag_arg_from_sys("-O", true=False, false=True)
        # if -sep flag is present, sep is True
        sep = pmag.get_flag_arg_from_sys("-sep", true=True, false=False)
        data_model = pmag.get_named_arg("-DM", default_val=3, reqd=False)
        dir_path = pmag.get_named_arg("-WD", default_val=".", reqd=False)
        input_dir_path = pmag.get_named_arg("-ID", default_val=".", reqd=False)

    #if '-ID' not in sys.argv and '-WD' in sys.argv:
    #    input_dir_path = dir_path
    if "-WD" not in sys.argv and "-ID" not in sys.argv:
        input_dir_path = os.path.split(infile)[0]
    if not input_dir_path:
        input_dir_path = "."

    ipmag.download_magic(infile, dir_path, input_dir_path, overwrite, True, data_model, sep)