#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <zlib.h>
#include "declaracao.h"
#include "cmd.h"
#include "rendimento.h"
/* Fim das mudanças de 2015 */
fprintf(f, " "); /* Teste PGD, FILLER2 */
- fprintf(f, "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_contribuinte(struct declaracao *dec, FILE *f)
fprintf(f, "%-10.10s", dec->recibo ?: ""); /* Recibo última declaração ano anterior */
fprintf(f, "A"); /* Declaração de Ajuste */
fprintf(f, "%-11.11s", ""); /* TODO: CPF procurador */
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_simples(struct declaracao *dec, FILE *f)
fprintf(f, "%013lld", 0); /* TODO: imposto pago exterior */
fprintf(f, "%013lld", 0); /* TODO: imposto devido sem rendimento exterior */
fprintf(f, "%013lld", 0); /* TODO: limite imposto pago exterior */
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_totais_simples(struct declaracao *dec, FILE *f)
fprintf(f, "%013lld", 0); /* TODO: imposto ganho líquido renda variável */
fprintf(f, "%013lld", 0); /* TODO: imposto devido ganho capital moeda estrangeira */
fprintf(f, "%013lld", 0); /* TODO: imposto pago exterior */
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_completa(struct declaracao *dec, FILE *f)
fprintf(f, "%s", dec->cpf); /* CPF: 11 dígitos */
fprintf(f, "%-14.14s", ""); /* TODO: CNPJ maior */
/* FIXME: completar campos */
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_totais_completa(struct declaracao *dec, FILE *f)
fprintf(f, "20");
fprintf(f, "%s", dec->cpf); /* CPF: 11 dígitos */
/* FIXME: completar campos */
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_trailler(struct declaracao *dec, FILE *f)
;
else
fprintf(f, "%05d", dec->linhas[i]);
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_reciboheader(struct declaracao *dec, FILE *f)
fprintf(f, "HR");
fprintf(f, "%s", dec->cpf); /* CPF: 11 dígitos */
fprintf(f, "%-3.3s", ""); /* FILLER */
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_recibodetalhe(struct declaracao *dec, FILE *f)
fprintf(f, "%-13.13s", dec->contacorrente); /* numero conta */
fprintf(f, "%-2.2s", dec->dvconta); /* DV conta */
fprintf(f, "%013lld", 0); /* TODO: imposto alienacao moeda estrangeira em especie */
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_recibotrailler(struct declaracao *dec, FILE *f)
fprintf(f, "%s", dec->cpf); /* CPF: 11 dígitos */
fprintf(f, "%-3.3s", ""); /* FILLER */
fprintf(f, "%-10.10s", "0000000000"); /* FIXME: hash */
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_rendimento(struct declaracao *dec, FILE *f)
fprintf(f, "%013lld", r->imposto);
fprintf(f, "%-8.8s", r->saida);
fprintf(f, "%013lld", r->imposto_13o);
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_pagamento(struct declaracao *dec, FILE *f)
fprintf(f, "2");
/* Titular (T), Dependente (D), Alimentando (A), FIXME */
fprintf(f, "T");
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
static void gera_bem(struct declaracao *dec, FILE *f)
/* Número de chave */
fprintf(f, "%05d", dec->linhas[27] + 1);
-
- fprintf(f, "%-10.10s", "0000000000"); /* FIXME: controle */
- fprintf(f, "\r\n");
}
-
-
typedef void (gera_linha)(struct declaracao *dec, FILE *f);
static int wrap(gera_linha fn, struct declaracao *dec, FILE *f)
size_t bsize;
int linha;
int r;
+ uLong c = crc32(0L, Z_NULL, 0);
m = open_memstream(&buf, &bsize);
if (!m) {
return -errno;
}
fn(dec, m);
dec->linhas[0]++;
+ fflush(m);
+
+ /* Calcula CRC32 para campo de controle dos registros. */
+ c = crc32(c, buf, bsize);
+ fprintf(m, "%010ld\r\n", c);
+
fclose(m);
r = sscanf(buf, "%2d", &linha);
if (r == 1 && linha >= 0 && linha < 100) {