diff options
Diffstat (limited to 'src/format/symbol.c')
-rw-r--r-- | src/format/symbol.c | 133 |
1 files changed, 130 insertions, 3 deletions
diff --git a/src/format/symbol.c b/src/format/symbol.c index c10c46d..7d272ce 100644 --- a/src/format/symbol.c +++ b/src/format/symbol.c @@ -68,7 +68,7 @@ static void g_binary_symbol_compute_cursor(const GBinSymbol *, gint, size_t, siz static int g_binary_symbol_contains_cursor(const GBinSymbol *, size_t, size_t, const GLineCursor *); /* Renseigne sur les propriétés liées à un générateur. */ -static BufferLineFlags g_binary_symbol_get_flags(const GBinSymbol *, size_t, size_t); +static BufferLineFlags g_binary_symbol_get_line_flags(const GBinSymbol *, size_t, size_t); /* Imprime dans une ligne de rendu le contenu représenté. */ static void g_binary_symbol_print(GBinSymbol *, GBufferLine *, size_t, size_t, const GBinContent *); @@ -149,7 +149,7 @@ static void g_binary_symbol_interface_init(GLineGeneratorInterface *iface) iface->count = (linegen_count_lines_fc)g_binary_symbol_count_lines; iface->compute = (linegen_compute_fc)g_binary_symbol_compute_cursor; iface->contains = (linegen_contains_fc)g_binary_symbol_contains_cursor; - iface->get_flags = (linegen_get_flags_fc)g_binary_symbol_get_flags; + iface->get_flags = (linegen_get_flags_fc)g_binary_symbol_get_line_flags; iface->print = (linegen_print_fc)g_binary_symbol_print; } @@ -433,6 +433,133 @@ SymbolStatus g_binary_symbol_get_status(const GBinSymbol *symbol) /****************************************************************************** * * +* Paramètres : symbol = symbole à venir modifier. * +* flag = drapeau d'information complémentaire à planter. * +* * +* Description : Ajoute une information complémentaire à un symbole. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_binary_symbol_set_flag(GBinSymbol *symbol, SymbolFlag flag) +{ + bool result; /* Bilan à retourner */ + sym_obj_extra *extra; /* Données insérées à modifier */ + + extra = GET_BIN_SYMBOL_EXTRA(symbol); + + g_bit_lock(&extra->lock, HOLE_LOCK_BIT); + + result = !(extra->flags & flag); + + extra->flags |= flag; + + g_bit_unlock(&extra->lock, HOLE_LOCK_BIT); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : symbol = symbole à venir modifier. * +* flag = drapeau d'information complémentaire à planter. * +* * +* Description : Retire une information complémentaire à un symbole. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_binary_symbol_unset_flag(GBinSymbol *symbol, SymbolFlag flag) +{ + bool result; /* Bilan à retourner */ + sym_obj_extra *extra; /* Données insérées à modifier */ + + extra = GET_BIN_SYMBOL_EXTRA(symbol); + + g_bit_lock(&extra->lock, HOLE_LOCK_BIT); + + result = (extra->flags & flag); + + extra->flags &= ~flag; + + g_bit_unlock(&extra->lock, HOLE_LOCK_BIT); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : symbol = symbole à venir consulter. * +* flag = drapeau d'information à rechercher. * +* * +* Description : Détermine si un symbole possède un fanion particulier. * +* * +* Retour : Bilan de la détection. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_binary_symbol_has_flag(const GBinSymbol *symbol, SymbolFlag flag) +{ + bool result; /* Bilan à retourner */ + sym_obj_extra *extra; /* Données insérées à modifier */ + + extra = GET_BIN_SYMBOL_EXTRA(symbol); + + g_bit_lock(&extra->lock, HOLE_LOCK_BIT); + + result = (extra->flags & flag); + + g_bit_unlock(&extra->lock, HOLE_LOCK_BIT); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : symbol = symbole à venir consulter. * +* * +* Description : Fournit les particularités du symbole. * +* * +* Retour : Somme de tous les fanions associés au symbole. * +* * +* Remarques : - * +* * +******************************************************************************/ + +SymbolFlag g_binary_symbol_get_flags(const GBinSymbol *symbol) +{ + SymbolFlag result; /* Fanions à retourner */ + sym_obj_extra *extra; /* Données insérées à modifier */ + + extra = GET_BIN_SYMBOL_EXTRA(symbol); + + g_bit_lock(&extra->lock, HOLE_LOCK_BIT); + + result = extra->flags; + + g_bit_unlock(&extra->lock, HOLE_LOCK_BIT); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : symbol = symbole à venir consulter. * * * * Description : Fournit une étiquette pour viser un symbole. * @@ -626,7 +753,7 @@ static int g_binary_symbol_contains_cursor(const GBinSymbol *symbol, size_t inde * * ******************************************************************************/ -static BufferLineFlags g_binary_symbol_get_flags(const GBinSymbol *symbol, size_t index, size_t repeat) +static BufferLineFlags g_binary_symbol_get_line_flags(const GBinSymbol *symbol, size_t index, size_t repeat) { return BLF_IS_LABEL; |