Пример #1
0
def init(status_passed):
    """
    Initalises the core for execution for one source file
    
    Variables for maximal signature sequence length, found start sequences,
    counters are reseted and the source file is opened. The status instance
    is updated and informed about the success of intialisation.
    
    @param status_passed: Status instance containing all information for the current execution.
    @type status_passed: ExecutionSettings.ExecutionStatus
    
    @return: Indicates, whether the initialisation was sucessful. (-1 / -2 for problems with signature file; 0 for success)
    @rtype: C{int}
    """
    global maxlength, start, skipped, size, binfile
    
    status = status_passed
    settings = status.settings

    settings.dest_folder = tools.checkDestfolder(settings.dest_folder)
    
    binfilename = status.getCurrentFile()
    binfile = open(binfilename, 'rb')

    if status.file_start == None:
        status.file_start = 0
    if status.file_end == None or status.file_end > os.path.getsize(binfilename):
        status.file_end = os.path.getsize(binfilename)

    counter = status.counter
    counterr = status.counterr   # for continue counting
    start = {}
    skipped = {}

    for j in settings.signatures:
        counter[j[signatures.name]] = 0
        start[j[signatures.name]] = -1
        skipped[j[signatures.name]] = 0
    

    size = status.file_end - status.file_start
    maxlength = signatures.normaliseSignatures(settings.signatures)
    if maxlength == -1:
        print ('Error in Signature File - required Entry missing in at least one signature')
        return -1
    if maxlength == -2:
        print ('Error in Signature File - wrong value for at least one signature')
        return -2
    disabled = signatures.disable(settings.signatures, settings.disabled_signatures)
    status.initialisedOne()
    return 0
Пример #2
0
def handleArguments(args):
    """
    Processes a list of arguments.
    
    Creates a new L{ExecutionSettings} and a new L{ExecutionStatus} object.
    Iterates the list of arguments and assigns any known argument value to the given 
    settings or status instance.
    
    @param args: List of arguments to be processed (usually the CLI arguments list)
    @return: Info about success: 0 - not successful, 1 - Signature information is requested,
    2 - successful; The settings applied to the Settings / Status instances
    @rtype: C{int}; L{ExecutionStatus}
    """
    if len(args) < 2:
        usage(args[0])
        return 0, None
    settings = ExecutionSettings(signatures = signatures.getCopyOfAllSignauteres())
    status = ExecutionStatus(settings)
    disabled_signs = []
    for arg in args:
        if arg[0] != '-':
            continue
        if arg[1] == 's':
            status.file_start = int(arg[2:])
        elif arg[1] == 'e':
            status.file_end = int(arg[2:])
        elif arg[1] == 'd':
            settings.digits = int(arg[2:])
        elif arg[1] == 'n':
            settings.counterstart_global = int(arg[2:])
        elif arg[1] == 'f':
            settings.dest_folder = arg[2:]
        elif arg[1] == 'o':
            settings.output_level = int(arg[2:])
        elif arg[1] =='g':
            settings.output_frequency = int(arg[2:])
        elif arg[1] =='i':
            if arg[2] == 's':
                return 1, status
            elif arg[2] == 'd':
                disabled_signs.append(arg[3:])
            else:
                print ('Unrecognised option for Signature operations: %c [Ignored]' %(arg[2]))
        else:
            print ('Unrecognised option: %c [Ignored]' %(arg[1]))
    settings.dest_folder = tools.checkDestfolder(settings.dest_folder)
    settings.sourceFiles.append(args[len(args)-1])
    settings.disableSignatureWithNames(disabled_signs)
    return 2, status