* 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 "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;
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->devido = 0;
dec->restituicao = 0;
dec->tipo = SIMPLES;
+ dec->error = NULL;
return dec;
out_totais:
list_free(dec->dependentes, dependente_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);
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();
+}