#!/usr/bin/python
app_svnid = '$HeadURL$ $LastChangedRevision$'
import sys
import subprocess
sys.path.append(subprocess.Popen(["ade-config", "ade_include_prefix"], stdout=subprocess.PIPE).communicate()[0][:-1])
import ade
import os
import time			#  to allow me to test interrupt routines

adepyf_defined_errors = {
    "adepyf_err_misc":{"fmt":"%s"},
}

def adepyf(errstack):
    overwritable_array = []

    ###########################################################################
    #
    #  Set ADE options
    #
    ###########################################################################

    #  Register application-specific errors
    ade.ade_err_registerdefderrs(adepyf_defined_errors)

    ##########################################################################
    #
    #  Process options
    #
    ##########################################################################

    #  Defaults for options
   
    #  Register options
    ade.ade_err_debug(errstack, 10, "adepyf: registering options ...")
    if [ rc for rc in [ ade.ade_opt_register(errstack, None, None, globals(), "adepyf_opt_handler_%s") ] if rc != ade.ade_err_ok ]:
        return(rc)

    #  Register handler functions
    ade.ade_err_debug(errstack, 10, "adepyf: registering message handlers ...")
    if [ rc for rc in [ ade.ade_msg_register(errstack, adepyf_usage, adepyf_version, adepyf_listpaths) ] if rc != ade.ade_err_ok ]:
        return(rc)

    #  Process options
    ade.ade_err_debug(errstack, 10, "adepyf: processing options ...")
    if [ rc for rc in [ ade.ade_opt_process(errstack) ] if rc != ade.ade_err_ok ]:
        return(rc)

    ##########################################################################
    #
    #  Process arguments
    #
    ##########################################################################

    len(sys.argv) != 1 and ade.ade_msg_usage(errstack)
    pythoncode = sys.argv[0]

    ade.ade_err_debug(errstack, 10, "main: pythoncode=[%s]" % (pythoncode))
    try:
        exec pythoncode
    except SyntaxError:
        e = sys.exc_info()[1]
        ade.ade_err_error(errstack, "adepyf_err_misc", "code failed to compile (" + str(e) + ")")
        return ade.ade_err_fail
    except:
        e = sys.exc_info()[1]
        ade.ade_err_error(errstack, "adepyf_err_misc", "code failed (" + str(e) + ")")
        return ade.ade_err_fail

    return ade.ade_err_ok

def adepyf_version(errstack, overwritable_array):
    return ade.ade_smf_extractversionfromsvnstring(errstack, app_svnid, overwritable_array)

def adepyf_listpaths(errstack, overwritable_array):
    overwritable_array[:] = [ None ]
    return ade.ade_err_ok

def adepyf_usage(errstack, overwritable_array, passno):
    if passno == 1:
        overwritable_array[:] = [ "<code>" ]
    elif passno == 2:
        overwritable_array[:] = [ None ]
    else:
        ade.ade_err_internal(errstack, "adepyf_usage: %d: bad passnumber" % (passno))
    return ade.ade_err_ok

ade.ade_gep_main(adepyf)
