From: Thadeu Lima de Souza Cascardo Date: Sat, 30 May 2015 15:53:38 +0000 (-0300) Subject: Adiciona comando para salvar declaração. X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fdeclara.git;a=commitdiff_plain;h=c046bbf49f5622c8074f6bf7bc535d2230ec4037 Adiciona comando para salvar declaração. O comando "salva" escreve em um arquivo no formato entendido pelo programa declara. Desta forma, é possível fazer a declaração utilizando outra interface e salvar o arquivo. --- diff --git a/base.c b/base.c index 6fc0742..07f0c95 100644 --- a/base.c +++ b/base.c @@ -42,14 +42,48 @@ static int run_dump(struct declaracao *dec, char **args, int argc) return 0; } +static void salva(struct declaracao *dec, FILE *f) +{ + fprintf(f, "ano %d\n", dec->ano); + if (dec->cpf) + fprintf(f, "cpf \"%s\"\n", dec->cpf); + if (dec->nome) + fprintf(f, "nome \"%s\"\n", dec->nome); + if (dec->recibo) + fprintf(f, "recibo \"%s\"\n", dec->recibo); + contribuinte_salva(dec, f); + rendimento_salva(dec, f); +} + +static int run_salva(struct declaracao *dec, char **args, int argc) +{ + FILE *f; + char *filename; + if (argc != 2) + return -EINVAL; + filename = args[1]; + f = fopen(filename, "w"); + if (!f) + return -errno; + salva(dec, f); + fclose(f); + return 0; +} + static struct cmd cmd_dump = { .name = "dump", .run = run_dump, }; +static struct cmd cmd_salva = { + .name = "salva", + .run = run_salva, +}; + int base_cmd_init(void) { cmd_add(&cmd_dump); + cmd_add(&cmd_salva); cmd_add(&cmd_ano); cmd_add(&cmd_cpf); cmd_add(&cmd_recibo); diff --git a/contribuinte.c b/contribuinte.c index 10899ef..a7285fa 100644 --- a/contribuinte.c +++ b/contribuinte.c @@ -43,6 +43,30 @@ SET_STRING_CONTRIBUINTE(telefone); SET_INT_CONTRIBUINTE(natureza_ocupacao); SET_INT_CONTRIBUINTE(ocupacao_principal); +void contribuinte_salva(struct declaracao *dec, FILE *f) +{ +#define SALVA_STRING(attr) \ + if (dec->contribuinte.attr) \ + fprintf(f, #attr " \"%s\"\n", dec->contribuinte.attr); +#define SALVA_INT(attr) \ + fprintf(f, #attr " %d\n", dec->contribuinte.attr); + SALVA_STRING(uf); + SALVA_INT(cd_municipio); + SALVA_STRING(municipio); + SALVA_STRING(cep); + SALVA_STRING(bairro); + SALVA_STRING(tipo_logradouro); + SALVA_STRING(logradouro); + SALVA_STRING(numero); + SALVA_STRING(complemento); + SALVA_STRING(titulo_eleitor); + SALVA_STRING(dn); + SALVA_STRING(ddd); + SALVA_STRING(telefone); + SALVA_INT(natureza_ocupacao); + SALVA_INT(ocupacao_principal); +} + void contribuinte_dump(struct declaracao *dec) { } diff --git a/contribuinte.h b/contribuinte.h index b276b6c..bf92886 100644 --- a/contribuinte.h +++ b/contribuinte.h @@ -19,6 +19,8 @@ #ifndef _CONTRIBUINTE_H #define _CONTRIBUINTE_H +#include + struct declaracao; struct contribuinte { @@ -40,6 +42,7 @@ struct contribuinte { }; void contribuinte_dump(struct declaracao *dec); +void contribuinte_salva(struct declaracao *dec, FILE *f); int contribuinte_cmd_init(void); diff --git a/rendimento.c b/rendimento.c index 505b0b5..23ce5cf 100644 --- a/rendimento.c +++ b/rendimento.c @@ -79,6 +79,16 @@ static int run_rendimento(struct declaracao *dec, char **args, int argc) return 0; } +void rendimento_salva(struct declaracao *dec, FILE *f) +{ + int i; + struct rendimento *j; + for (i = 0; j = list_get(dec->rendimento, i); i++) + fprintf(f, "rendimento \"%s\" \"%s\" %lld %lld %lld %lld \"%s\"\n", + j->cnpj, j->nome, j->rendimento, j->previdencia, + j->decimoterceiro, j->imposto, j->saida); +} + void rendimento_dump(struct declaracao *dec) { int i; diff --git a/rendimento.h b/rendimento.h index 5ac417d..68f8bc5 100644 --- a/rendimento.h +++ b/rendimento.h @@ -19,6 +19,7 @@ #ifndef _RENDIMENTO_H #define _RENDIMENTO_H +#include #include "declaracao.h" struct rendimento { @@ -32,6 +33,7 @@ struct rendimento { }; void rendimento_dump(struct declaracao *dec); +void rendimento_salva(struct declaracao *dec, FILE *f); void rendimento_free(void *pointer); int rendimento_cmd_init(void);