summaryrefslogtreecommitdiff
path: root/tools/d2c/args.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/d2c/args.c')
-rw-r--r--tools/d2c/args.c92
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);