def __init__(self):
        self.command_header_file = CommandsHeaderFile()

        self.command_dispatcher = CommandDispatcher()

        if settings.ENABLE_TABLE_DRIVEN_DISPATCHER:
            from modules.part3_commands.tpm2_part3_command_dispatch_data import CommandDispatchData
            self.command_dispatch_data = CommandDispatchData()

        self.list_of_tables_commands = []

        self.COMMAND_PATH = constants.SRC_PATH + constants.TPM_PATH + "command/"

        self.current_section = ""
    def __init__(self):
        self.command_header_file = CommandsHeaderFile()

        self.command_dispatcher = CommandDispatcher()

        if settings.ENABLE_TABLE_DRIVEN_DISPATCHER:
            from modules.part3_commands.tpm2_part3_command_dispatch_data import CommandDispatchData
            self.command_dispatch_data = CommandDispatchData()

        self.list_of_tables_commands = []

        self.COMMAND_PATH = constants.SRC_PATH + constants.TPM_PATH + "command/"

        self.current_section = ""
class Commands:
    """
    """
    
    def __init__(self):
        self.command_header_file = CommandsHeaderFile()

        self.command_dispatcher = CommandDispatcher()

        if settings.ENABLE_TABLE_DRIVEN_DISPATCHER:
            from modules.part3_commands.tpm2_part3_command_dispatch_data import CommandDispatchData
            self.command_dispatch_data = CommandDispatchData()

        self.list_of_tables_commands = []

        self.COMMAND_PATH = constants.SRC_PATH + constants.TPM_PATH + "command/"

        self.current_section = ""

    # Creates HandleProcess.c file
    def create_handle_process(self):
        print ""
        print "Creating HandleProcess.c"
        p = HandleProcess()
        for command in self.list_of_tables_commands:
            print "    * " + command.name
            p.create_handle_process_case_pdf(command.name, command.rows)
        p.write()

    # Handles commands
    # Parameter:
    # commands
    def handle_commands(self, commands):

        for command in commands:

            if command.table_command is not None:
                self.list_of_tables_commands.append(command.table_command)

            ###################################################################
            # PROTOTYPES (START)
            prototype_file = PrototypeFile(command.short_name)
            prototype_file.extract_structures_and_modifiers(command.short_name,
                                                            command.table_command,
                                                            command.table_response,
                                                            self.command_dispatcher)
            prototype_file.extract_prototype_functions(command)
            prototype_file.write()
            # PROTOTYPES (END)
            ###################################################################

            file_content = command.elements_to_string()

            file_path = self.COMMAND_PATH + command.folder_name + "/" + command.file_name

            # correct file path for EC_Ephemeral.c
            if "EC_Ephemeral.c" in command.file_name:
                file_path = self.COMMAND_PATH + "Asymmetric/" + command.file_name

            FileHandling.write_file(file_path, file_content)

            # add prototype header file to Commands.h
            if command.name.startswith("TPM2_"):
                if command.section_name != self.current_section:
                    self.command_header_file.append("\n\n")
                    self.command_header_file.append("// " + command.section_name + "\n")
                    self.current_section = command.section_name
                self.command_header_file.append("#include     \"" + command.short_name + "_fp.h\"\n")

        self.command_header_file.write()

        self.command_dispatcher.write()

        if settings.ENABLE_TABLE_DRIVEN_DISPATCHER:
            self.command_dispatch_data.write()

        # create HandleProcess.c
        self.create_handle_process()

    # Extracts information from commands file
    # Parameters:
    # commands_file
    # folders
    def extract(self, commands_file, folders):
        # extract license text
        license_text = LicenseExtractor.extract_license(commands_file)
        FileHandling.set_license(license_text)

        # extract CommandAttributes.h
        self.command_attributes_header_file = CommandAttributesHeaderFile()
        self.command_attributes_header_file.write()

        commands = CommandsExtractor.extract(commands_file, folders)
        self.handle_commands(commands)
class Commands:
    """
    """
    def __init__(self):
        self.command_header_file = CommandsHeaderFile()

        self.command_dispatcher = CommandDispatcher()

        if settings.ENABLE_TABLE_DRIVEN_DISPATCHER:
            from modules.part3_commands.tpm2_part3_command_dispatch_data import CommandDispatchData
            self.command_dispatch_data = CommandDispatchData()

        self.list_of_tables_commands = []

        self.COMMAND_PATH = constants.SRC_PATH + constants.TPM_PATH + "command/"

        self.current_section = ""

    # Creates HandleProcess.c file
    def create_handle_process(self):
        print ""
        print "Creating HandleProcess.c"
        p = HandleProcess()
        for command in self.list_of_tables_commands:
            print "    * " + command.name
            p.create_handle_process_case_pdf(command.name, command.rows)
        p.write()

    # Handles commands
    # Parameter:
    # commands
    def handle_commands(self, commands):

        for command in commands:

            if command.table_command is not None:
                self.list_of_tables_commands.append(command.table_command)

            ###################################################################
            # PROTOTYPES (START)
            prototype_file = PrototypeFile(command.short_name)
            prototype_file.extract_structures_and_modifiers(
                command.short_name, command.table_command,
                command.table_response, self.command_dispatcher)
            prototype_file.extract_prototype_functions(command)
            prototype_file.write()
            # PROTOTYPES (END)
            ###################################################################

            file_content = command.elements_to_string()

            file_path = self.COMMAND_PATH + command.folder_name + "/" + command.file_name

            # correct file path for EC_Ephemeral.c
            if "EC_Ephemeral.c" in command.file_name:
                file_path = self.COMMAND_PATH + "Asymmetric/" + command.file_name

            FileHandling.write_file(file_path, file_content)

            # add prototype header file to Commands.h
            if command.name.startswith("TPM2_"):
                if command.section_name != self.current_section:
                    self.command_header_file.append("\n\n")
                    self.command_header_file.append("// " +
                                                    command.section_name +
                                                    "\n")
                    self.current_section = command.section_name
                self.command_header_file.append("#include     \"" +
                                                command.short_name +
                                                "_fp.h\"\n")

        self.command_header_file.write()

        self.command_dispatcher.write()

        if settings.ENABLE_TABLE_DRIVEN_DISPATCHER:
            self.command_dispatch_data.write()

        # create HandleProcess.c
        if settings.SPEC_VERSION_INT < 138:
            self.create_handle_process()

    # Extracts information from commands file
    # Parameters:
    # commands_file
    # folders
    def extract(self, commands_file, folders):
        # extract license text
        license_text = LicenseExtractor.extract_license(commands_file)
        FileHandling.set_license(license_text)

        # extract CommandAttributes.h
        self.command_attributes_header_file = CommandAttributesHeaderFile()
        self.command_attributes_header_file.write()

        commands = CommandsExtractor.extract(commands_file, folders)
        self.handle_commands(commands)