diff options
Diffstat (limited to 'tools/d2c/args.c')
-rw-r--r-- | tools/d2c/args.c | 92 |
1 files changed, 78 insertions, 14 deletions
diff --git a/tools/d2c/args.c b/tools/d2c/args.c index 1a2c287..f933160 100644 --- a/tools/d2c/args.c +++ b/tools/d2c/args.c @@ -34,25 +34,13 @@ -/* -#include <assert.h> -#include <ctype.h> - -#include <regex.h> -#include <stdbool.h> -#include <sys/param.h> - - -*/ - - - - /* Types d'expressions représentés */ typedef enum _ConvExprType { CET_NAME, /* Désignation de variable */ CET_NUMBER, /* Valeur codée en dur */ + CET_BINVAL, /* Valeur binaire bxxx */ + CET_HEXVAL, /* Valeur sous forme hexa. */ CET_COMPOSED, /* Agrégat de champs divers */ CET_UNARY, /* Opération unaire */ CET_BINARY, /* Opération binaire */ @@ -83,6 +71,12 @@ struct _arg_expr_t /* CET_NUMBER */ unsigned long number; /* Valeur durablement définie */ + /* CET_BINVAL */ + char *binval; /* Valeur sous forme bxxx */ + + /* CET_HEXVAL */ + char *hexval; /* Valeur sous forme 0xxxx */ + /* CET_COMPOSED */ struct { @@ -199,6 +193,60 @@ arg_expr_t *build_arg_expr_from_number(unsigned long number) /****************************************************************************** * * +* Paramètres : binval = valeur binaire à conserver dans sa forme brute. * +* * +* Description : Conserve une valeur en tant qu'expression de conversion. * +* * +* Retour : Nouvelle expression mise en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +arg_expr_t *build_arg_expr_from_binval(char *binval) +{ + arg_expr_t *result; /* Structure à retourner */ + + result = (arg_expr_t *)calloc(1, sizeof(arg_expr_t)); + + result->type = CET_BINVAL; + + result->binval = binval; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : number = valeur hexadécimale à conserver dans sa forme brute.* +* * +* Description : Conserve une valeur en tant qu'expression de conversion. * +* * +* Retour : Nouvelle expression mise en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +arg_expr_t *build_arg_expr_from_hexval(char *hexval) +{ + arg_expr_t *result; /* Structure à retourner */ + + result = (arg_expr_t *)calloc(1, sizeof(arg_expr_t)); + + result->type = CET_HEXVAL; + + result->hexval = hexval; + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : item1 = premier élément à agréger. * * item2 = second élément à agréger. * * * @@ -338,6 +386,14 @@ void delete_arg_expr(arg_expr_t *expr) free(expr->name); break; + case CET_BINVAL: + free(expr->binval); + break; + + case CET_HEXVAL: + free(expr->hexval); + break; + case CET_COMPOSED: for (i = 0; i < expr->comp_count; i++) free(expr->comp_items[i]); @@ -856,6 +912,14 @@ bool define_arg_expr(const arg_expr_t *expr, int fd, const coding_bits *bits, co dprintf(fd, "%lu", expr->number); break; + case CET_BINVAL: + dprintf(fd, "b%s", expr->binval); + break; + + case CET_HEXVAL: + dprintf(fd, "0x%s", expr->hexval); + break; + case CET_COMPOSED: result = compute_arg_expr_size(expr, bits, list, &max_size); |