X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Fdeclaracao.c;h=affe8d687fbb4cbe87606ef977068be788fbe2aa;hb=58291e53443f45fa03f600617eeb3bf93a234272;hp=4c5f1888766e7b7c5ea5c05da469bf008cded5ed;hpb=5f22fbc13d58b333a22fed62c1614be2b84e69de;p=cascardo%2Fdeclara.git diff --git a/lib/declaracao.c b/lib/declaracao.c index 4c5f188..affe8d6 100644 --- a/lib/declaracao.c +++ b/lib/declaracao.c @@ -16,15 +16,28 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#define _GNU_SOURCE #include "declaracao.h" +#include #include #include +#include #include "list.h" +#include "conjuge.h" +#include "sistema.h" #include "rendimento.h" +#include "carne.h" +#include "isento.h" #include "pagamento.h" #include "bem.h" +#include "dependente.h" #include "pmhash.h" +#include "base.h" +#include "calcula.h" +#include "gera.h" +#include "help.h" + struct declaracao * declaracao_new(int ano) { struct declaracao *dec; @@ -36,12 +49,21 @@ struct declaracao * declaracao_new(int ano) dec->rendimento = list_new(); if (!dec->rendimento) goto out_rendimento; + dec->carne = list_new(); + if (!dec->carne) + goto out_carne; + dec->isentos = list_new(); + if (!dec->isentos) + goto out_isentos; dec->pagamentos = list_new(); if (!dec->pagamentos) goto out_pagamentos; dec->bens = list_new(); if (!dec->bens) goto out_bens; + dec->dependentes = list_new(); + if (!dec->dependentes) + goto out_dependentes; dec->totais = pmhash_new(); if (!dec->totais) goto out_totais; @@ -49,12 +71,19 @@ struct declaracao * declaracao_new(int ano) dec->devido = 0; dec->restituicao = 0; dec->tipo = SIMPLES; + dec->error = NULL; return dec; out_totais: + list_free(dec->dependentes, dependente_free); +out_dependentes: list_free(dec->bens, bem_free); out_bens: list_free(dec->pagamentos, pagamento_free); out_pagamentos: + list_free(dec->isentos, isento_free); +out_isentos: + list_free(dec->carne, carne_free); +out_carne: list_free(dec->rendimento, rendimento_free); out_rendimento: free(dec); @@ -80,8 +109,44 @@ void declaracao_free(struct declaracao *dec) if (dec->dvconta) free(dec->dvconta); list_free(dec->rendimento, rendimento_free); + list_free(dec->carne, carne_free); + list_free(dec->isentos, isento_free); list_free(dec->pagamentos, pagamento_free); list_free(dec->bens, bem_free); + list_free(dec->dependentes, dependente_free); pmhash_del(dec->totais); + conjuge_free(dec); + sistema_free(dec); + if (dec->error) + free(dec->error); free(dec); } + +void dec_set_error(struct declaracao *dec, char *fmt, ...) +{ + va_list ap; + if (dec->error) + free(dec->error); + dec->error = NULL; + va_start(ap, fmt); + vasprintf(&dec->error, fmt, ap); + va_end(ap); +} + +void dec_cmd_init(void) +{ + base_cmd_init(); + contribuinte_cmd_init(); + conjuge_cmd_init(); + rendimento_cmd_init(); + carne_cmd_init(); + isento_cmd_init(); + pagamento_cmd_init(); + bem_cmd_init(); + dependente_cmd_init(); + calcula_cmd_init(); + gera_cmd_init(); + importa_cmd_init(); + sistema_cmd_init(); + help_cmd_init(); +}