/* Chrysalide - Outil d'analyse de fichiers binaires * manager.h - prototypes pour la gestion des arguments dans leur ensemble * * Copyright (C) 2016-2017 Cyrille Bagard * * This file is part of Chrysalide. * * Chrysalide is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Chrysalide is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Chrysalide. If not, see . */ #ifndef _TOOLS_D2C_ARGS_MANAGER_H #define _TOOLS_D2C_ARGS_MANAGER_H #ifndef NDEBUG # include #endif #include "../bits/manager.h" /* Liste des fonctions de conversions présentes */ typedef struct _conv_list conv_list; /* -------------------------- REPRESENTATION D'UN ARGUMENT -------------------------- */ /* Types d'opérations unaires */ typedef enum _ConvUnaryOperation { CUO_NOT, /* NOT (booléen) */ CUO_COUNT } ConvUnaryOperation; /* Types d'opérations binaires */ typedef enum _ConvBinaryOperation { CBO_AND, /* Et logique */ CBO_EOR, /* Ou exclusif (booléen) */ CBO_LSHIFT, /* Décalage à gauche */ CBO_COUNT } ConvBinaryOperation; /* Représentation d'une expression de conversion */ typedef struct _arg_expr_t arg_expr_t; /* Référence une variable en tant qu'expression de conversion. */ arg_expr_t *build_arg_expr_from_name(char *); /* Conserve une valeur en tant qu'expression de conversion. */ arg_expr_t *build_arg_expr_from_number(unsigned long ); /* Conserve une valeur en tant qu'expression de conversion. */ arg_expr_t *build_arg_expr_from_binval(char *); /* Conserve une valeur en tant qu'expression de conversion. */ arg_expr_t *build_arg_expr_from_hexval(char *); /* Conserve une valeur en tant qu'expression de conversion. */ arg_expr_t *build_arg_expr_from_string(char *); /* Construit une base d'expression booléenne logique. */ arg_expr_t *build_logical_arg_expr(arg_expr_t *, arg_expr_t *, bool); /* Construit une base d'expression de conversion composée. */ arg_expr_t *build_composed_arg_expr(char *, char *); /* Etend une base d'expression de conversion composée. */ arg_expr_t *extend_composed_arg_expr(arg_expr_t *, char *); /* Traduit une opération unaire sur expression de conversion. */ arg_expr_t *build_unary_arg_expr(arg_expr_t *, ConvUnaryOperation); /* Traduit une opération binaire sur expression de conversion. */ arg_expr_t *build_conditional_arg_expr(arg_expr_t *, arg_expr_t *, bool); /* Traduit une opération binaire sur expression de conversion. */ arg_expr_t *build_binary_arg_expr(arg_expr_t *, arg_expr_t *, ConvBinaryOperation); /* Supprime tous les éléments mis en place pour un argument. */ void delete_arg_expr(arg_expr_t *); /* Détermine la taille en bits d'une expression donnée. */ bool compute_arg_expr_size(const arg_expr_t *, const coding_bits *, const conv_list *, unsigned int *); /* S'assure du marquage des expressions pre-requises. */ bool ensure_arg_expr_content_fully_marked(arg_expr_t *, const coding_bits *, const conv_list *); /* S'assure de la déclaration des expressions pre-requises. */ bool ensure_arg_expr_content_fully_declared(arg_expr_t *, int, const coding_bits *, const conv_list *, const char *); /* S'assure de la définition des expressions pre-requises. */ bool ensure_arg_expr_content_fully_defined(arg_expr_t *, int, const coding_bits *, const conv_list *, const char *, bool *); /* Définit une expression utilisée dans une conversion. */ bool define_arg_expr(const arg_expr_t *, int, const coding_bits *, const conv_list *); /* ----------------------- MANIPULATION DE LISTES D'ARGUMENTS ----------------------- */ /* Liste d'expressions utilisées en arguments de conversion */ typedef struct _arg_list_t arg_list_t; /* Crée une liste vide d'arguments de conversion. */ arg_list_t *build_empty_arg_list(void); /* Crée une liste d'arguments de conversion. */ arg_list_t *build_arg_list(arg_expr_t *); /* Libère la mémoire occupée par une liste d'expressions. */ void delete_arg_list(arg_list_t *); /* Ajoute un élément à une liste d'arguments de conversion. */ arg_list_t *extend_arg_list(arg_list_t *, arg_expr_t *); /* Indique le nombre d'arguments présents dans la liste. */ #ifndef NDEBUG size_t get_arg_list_size(const arg_list_t *); #endif /* S'assure du marquage des expressions pre-requises. */ bool ensure_arg_list_content_fully_marked(arg_list_t *, const coding_bits *, const conv_list *); /* S'assure de la déclaration des expressions pre-requises. */ bool ensure_arg_list_content_fully_declared(arg_list_t *, int, const coding_bits *, const conv_list *, const char *); /* S'assure de la définition des expressions pre-requises. */ bool ensure_arg_list_content_fully_defined(arg_list_t *, int, const coding_bits *, const conv_list *, const char *, bool *); /* Définit les variables associées à un appel de fonction. */ bool define_arg_list(const arg_list_t *, int, const coding_bits *, const conv_list *); #endif /* _TOOLS_D2C_ARGS_MANAGER_H */