X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fdeclara.git;a=blobdiff_plain;f=lib%2Fbem.c;h=74fdb551ae90e0bce5c1a34f86d69906fce90ede;hp=c62a7badefe204ca0f314994a560f4722ea2c630;hb=8f3b2c82f198db3bb7c6a9d24e9009df9a5b5034;hpb=7499bdb55cabab95a45c171fc8ad79f43b58bc40 diff --git a/lib/bem.c b/lib/bem.c index c62a7ba..74fdb55 100644 --- a/lib/bem.c +++ b/lib/bem.c @@ -26,34 +26,15 @@ #include "list.h" #include "util.h" #include "totais.h" +#include "attr.h" void bem_free(void *pointer) { struct bem *bem = pointer; if (bem->descricao) free(bem->descricao); - /* Imóvel */ - if (bem->logradouro) - free(bem->logradouro); - if (bem->numero) - free(bem->numero); - if (bem->complemento) - free(bem->complemento); - if (bem->bairro) - free(bem->bairro); - if (bem->cep) - free(bem->cep); - if (bem->uf) - free(bem->uf); - if (bem->municipio) - free(bem->municipio); - if (bem->matricula) - free(bem->matricula); - if (bem->registro) - free(bem->registro); - if (bem->cartorio) - free(bem->cartorio); - + if (bem->attr) + pmhash_del(bem->attr); free(bem); } @@ -69,16 +50,35 @@ static int bem_cmp(void *p1, void *p2) return 0; } -static struct bem * bem_new(char **args) +static struct bem * bem_new(char **args, int argc) { struct bem *bem; int r = 0; + int i; bem = malloc(sizeof(*bem)); memset(bem, 0, sizeof(*bem)); + bem->attr = pmhash_new(); + if (!bem->attr) { + bem_free(bem); + return NULL; + } + r += set_int(args[1], &bem->codigo); r += set_string(args[2], &bem->descricao); r += set_llong(args[3], &bem->valor_anterior); r += set_llong(args[4], &bem->valor); + + for (i = 5; i < argc; i++) { + printf("parsing arg %s\n", args[i]); + r = attr_parse(&bem->attr, args[i]); + if (r) { + bem_free(bem); + return NULL; + } + } + + bem->dependente = 0; /* TODO */ + if (r < 0 || bem->codigo < 0 || bem->valor_anterior < 0 || bem->valor < 0) { bem_free(bem); @@ -91,12 +91,12 @@ static int run_bem(struct declaracao *dec, char **args, int argc) { struct bem *bem; int r; - if (argc != 5) + if (argc < 5) return -EINVAL; - bem = bem_new(args); + bem = bem_new(args, argc); if (!bem) return -ENOMEM; - r = list_insert_ordered(&dec->bens, bem, bem_cmp); + r = list_add(&dec->bens, bem); if (r < 0) { bem_free(bem); return r; @@ -114,9 +114,12 @@ void bem_salva(struct declaracao *dec, FILE *f) { int i; struct bem *j; - for (i = 0; j = list_get(dec->bens, i); i++) - fprintf(f, "bem %d \"%s\" %lld %lld\n", + for (i = 0; j = list_get(dec->bens, i); i++) { + fprintf(f, "bem %d \"%s\" %lld %lld", j->codigo, j->descricao, j->valor_anterior, j->valor); + //attr_printf(f, bem->attr); + fprintf(f, "\n"); + } } static struct cmd cmd_bem = {