From 5e747c39f1b7b09f90f6d6bb5e9f70cbe2201443 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Sat, 27 Jun 2020 21:28:38 -0300 Subject: [PATCH] Suporte a atributos. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Utiliza nossa simples implementação de dicionário para implementar atributos em alguns objetos, a serem lidos dos comandos como atributo=valor. --- lib/Makefile.am | 1 + lib/attr.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ lib/attr.h | 30 +++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 lib/attr.c create mode 100644 lib/attr.h diff --git a/lib/Makefile.am b/lib/Makefile.am index a7586db..4d2bf94 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -5,6 +5,7 @@ libreceita_la_SOURCES = declaracao.c declaracao.h \ token.c token.h \ cmd.c cmd.h pmhash.c pmhash.h \ totais.c totais.h \ + attr.c attr.h \ sistema.c sistema.h \ calcula.c calcula.h \ gera.c gera.h \ diff --git a/lib/attr.c b/lib/attr.c new file mode 100644 index 0000000..3f98dbc --- /dev/null +++ b/lib/attr.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2015 Thadeu Lima de Souza Cascardo + * + * This program 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. + * + * This program 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "attr.h" +#include +#include +#include +#include +#include "pmhash.h" + +int attr_set(struct pmhash **pmhash, char *key, char *val) +{ + int r = -ENOMEM; + key = strdup(key); + if (!key) + return r; + val = strdup(val); + if (!val) { + free(val); + return r; + } + r = pmhash_add(pmhash, key, val); + if (r) { + free(key); + free(val); + } + return r; +} + +int attr_parse(struct pmhash **pmhash, char *arg) +{ + int r = -EINVAL; + char *val; + val = strchr(arg, '='); + if (!val) + return r; + *val++ = '\0'; + return attr_set(pmhash, arg, val); +} + +char * attr_get(struct pmhash *pmhash, char *key) +{ + return (char *) pmhash_get(pmhash, key); +} + +int attr_out(FILE *f, struct pmhash *attr, char *key, int size) +{ + return fprintf(f, "%-*.*s", size, size, attr_get(attr, key) ?: ""); +} diff --git a/lib/attr.h b/lib/attr.h new file mode 100644 index 0000000..c0e3bd1 --- /dev/null +++ b/lib/attr.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2015 Thadeu Lima de Souza Cascardo + * + * This program 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. + * + * This program 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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _ATTR_H +#define _ATTR_H + +#include +#include "pmhash.h" + +int attr_set(struct pmhash **pmhash, char *key, char *val); +int attr_parse(struct pmhash **pmhash, char *arg); +char * attr_get(struct pmhash *pmhash, char *key); +int attr_out(FILE *f, struct pmhash *attr, char *key, int size); + +#endif -- 2.20.1