summaryrefslogtreecommitdiff
path: root/plugins/fmtp/def.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/fmtp/def.h')
-rw-r--r--plugins/fmtp/def.h149
1 files changed, 149 insertions, 0 deletions
diff --git a/plugins/fmtp/def.h b/plugins/fmtp/def.h
new file mode 100644
index 0000000..d69d20a
--- /dev/null
+++ b/plugins/fmtp/def.h
@@ -0,0 +1,149 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * def.h - prototypes pour la définition des unités de lecture
+ *
+ * Copyright (C) 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef _PLUGINS_FMTP_DEF_H
+#define _PLUGINS_FMTP_DEF_H
+
+
+#include <stdbool.h>
+
+
+#include <arch/archbase.h>
+#include <common/cpp.h>
+
+
+
+/**
+ * Assurément utile pour les déclarations...
+ */
+
+#define __(s) s
+
+
+/**
+ * Méthodes de définitions des déclarations.
+ */
+
+/* Possibilités pour un champ à commenter */
+typedef struct _field_desc_switch
+{
+ bool is_range; /* Sélection de définition */
+
+ union
+ {
+ uint64_t fixed; /* Valeur fixe */
+
+ struct
+ {
+ uint64_t lower; /* Borne basse */
+ uint64_t upper; /* Borne haute */
+ };
+
+ };
+
+ const char *desc; /* Description associée */
+
+} field_desc_switch;
+
+/* Partie de commentaire */
+typedef struct _comment_part
+{
+ bool is_static; /* Choix du champ textuel */
+ bool avoid_i18n; /* Pas de traduction ! */
+
+ union
+ {
+ const char *static_text; /* Texte alloué statiquement */
+ char *dynamic_text; /* Texte alloué dynamiquement */
+ };
+
+} comment_part;
+
+/* Type de commentaires associés */
+typedef enum _FieldCommentType
+{
+ FCT_PLAIN, /* Brut et statique */
+ FCT_SWITCH, /* Eventail des possibles */
+ FCT_MULTI /* En plusieurs parties */
+
+} FieldCommentType;
+
+/* Définition générale */
+typedef struct _fmt_field_def
+{
+ const char *name; /* Nom du champ */
+
+ MemoryDataSize size; /* Taille d'un élément */
+ size_t repeat; /* Quantité d'éléments présents*/
+
+ bool is_padding; /* Simple bourrage ? */
+
+ bool has_display_rules; /* Validité des champs suivants*/
+ const ImmOperandDisplay *disp_rules; /* Règles d'affichage */
+ size_t disp_count; /* Quantité de ces règles */
+
+ FieldCommentType ctype; /* Type de commentaire */
+ union
+ {
+ const char *plain; /* Commentaire simple */
+
+ struct
+ {
+ const field_desc_switch *choices; /* Choix multiples */
+ size_t ccount; /* Quantité de ces choix */
+ const char *def_choice; /* Commentaire par défaut */
+ };
+
+ struct
+ {
+ comment_part *parts; /* Parties à considérer */
+ size_t pcount; /* Quantité de ces parties */
+ };
+
+ } comment;
+
+} fmt_field_def;
+
+
+/* Règles d'affichage */
+
+#define DISPLAY_RULES(...) \
+ .has_display_rules = true, \
+ .disp_rules = (ImmOperandDisplay []) { __VA_ARGS__ }, \
+ .disp_count = ARRAY_SIZE(((ImmOperandDisplay []) { __VA_ARGS__ }))
+
+/* Rédaction des commentaires */
+
+#define PLAIN_COMMENT(txt) \
+ .ctype = FCT_PLAIN, \
+ .comment.plain = txt
+
+#define SWITCH_COMMENT(array, def) \
+ .ctype = FCT_SWITCH, \
+ .comment.choices = array, \
+ .comment.ccount = ARRAY_SIZE(array), \
+ .comment.def_choice = def
+
+
+
+#endif /* _PLUGINS_FMTP_DEF_H */