Função para iniciar todos os comandos.
[cascardo/declara.git] / lib / declaracao.c
index 4c5f188..39bca5d 100644 (file)
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#define _GNU_SOURCE
 #include "declaracao.h"
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stdarg.h>
 #include "list.h"
+#include "conjuge.h"
+#include "sistema.h"
 #include "rendimento.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 +48,18 @@ struct declaracao * declaracao_new(int ano)
        dec->rendimento = list_new();
        if (!dec->rendimento)
                goto out_rendimento;
+       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 +67,17 @@ 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->rendimento, rendimento_free);
 out_rendimento:
        free(dec);
@@ -80,8 +103,41 @@ void declaracao_free(struct declaracao *dec)
        if (dec->dvconta)
                free(dec->dvconta);
        list_free(dec->rendimento, rendimento_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();
+       isento_cmd_init();
+       pagamento_cmd_init();
+       bem_cmd_init();
+       dependente_cmd_init();
+       calcula_cmd_init();
+       gera_cmd_init();
+       sistema_cmd_init();
+       help_cmd_init();
+}